tryDecode method
Implementation
Map<String, dynamic> tryDecode(
ct.PublicKey recipientPublicKey, Uint8List encodedMessage) {
if (1 == encodedMessage[0]) {
try {
final message = decodeAesGcm(deriveSharedKey, keyPair,
recipientPublicKey, encodedMessage.sublist(1));
return {'isDecoded': true, 'message': message};
} catch (e) {
if (e.toString() !=
'SecretBoxAuthenticationError: SecretBox has wrong message authentication code (MAC)' &&
e.toString() != 'Instance of \'InvalidCipherTextException\'') {
rethrow;
}
}
}
if (0xFE == encodedMessage[0] &&
0 ==
ArrayHelpers.deepCompare(
DELEGATION_MARKER, encodedMessage.sublist(0, 8))) {
final ephemeralPublicKeyStart = DELEGATION_MARKER.length;
final ephemeralPublicKeyEnd = ephemeralPublicKeyStart + ct.PublicKey.SIZE;
final ephemeralPublicKey = ct.PublicKey(encodedMessage.sublist(
ephemeralPublicKeyStart, ephemeralPublicKeyEnd));
try {
final message = decodeAesGcm(deriveSharedKey, keyPair,
ephemeralPublicKey, encodedMessage.sublist(ephemeralPublicKeyEnd));
return {'isDecoded': true, 'message': message};
} catch (e) {
if (e.toString() !=
'Unsupported state or unable to authenticate data' &&
e.toString() != 'invalid point') {
rethrow;
}
}
}
return {'isDecoded': false, 'message': encodedMessage};
}