openFanet1 function
Opens a fanet1 frame with the channel X25519 channelKeyPair.
Returns the authenticated sender public key (base64) and plaintext. Wrong keys, frame ids, channel ids, malformed frames, and tampering all throw; no unauthenticated plaintext is returned.
Implementation
Future<({String senderPub, String plaintext})> openFanet1({
required SimpleKeyPair channelKeyPair,
required String frameId,
required String channelId,
required String payloadB64,
}) async {
final data = base64Decode(payloadB64);
if (data.length < _minFrameLength) {
throw const FormatException('fanet1 frame too short');
}
if (data.first != fanet1FrameVersion) {
throw FormatException('unsupported fanet1 frame version ${data.first}');
}
final senderPub = SimplePublicKey(
data.sublist(1, 1 + _senderKeyLength),
type: KeyPairType.x25519,
);
final plaintext = await decryptPayload(
recipientDhKeyPair: channelKeyPair,
senderDhPubkey: senderPub,
frameId: frameId,
aadTarget: channelId,
ciphertextB64: base64Encode(data.sublist(1 + _senderKeyLength)),
);
return (
senderPub: base64Encode(senderPub.bytes),
plaintext: plaintext,
);
}