encryptMessage function

Future<List<int>> encryptMessage(
  1. String message,
  2. List<int> senderPrivateKey,
  3. List<int> recipientPublicKey, [
  4. bool isHexMessage = false,
])

Encrypts a message with a shared key derived from senderPrivateKey and recipientPublicKey.

By default, the message is considered a UTF-8 plain text.

Implementation

Future<List<int>> encryptMessage(
    final String message, final List<int> senderPrivateKey, final List<int> recipientPublicKey,
    [final bool isHexMessage = false]) async {
  ArgumentError.checkNotNull(message);
  ArgumentError.checkNotNull(senderPrivateKey);
  ArgumentError.checkNotNull(recipientPublicKey);

  final msg = isHexMessage ? hexToBytes(message) : utf8.encode(message);

  final salt = Uint8List(32);
  fillBytesWithSecureRandom(salt);

  final publicKey = SimplePublicKey(recipientPublicKey, type: KeyPairType.ed25519);
  final secretKey = await SiriusEd25519().newKeyPairFromSeed(senderPrivateKey);

  final _sharedSecret =
      SiriusEd25519.sharedSecretSync(keyPairData: await secretKey.extract(), remotePublicKey: publicKey, salt: salt);

  final cipher = AesCbc.with256bits(macAlgorithm: MacAlgorithm.empty);

  final secretBox = await cipher.encrypt(msg, secretKey: _sharedSecret);

  final result = <int>[];
  result.addAll(salt);
  result.addAll(secretBox.concatenation(mac: false));
  return result;
}