encryptMessage function
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;
}