split static method
Separates a sealed plaintext into its binding and payload.
Implementation
static (PayloadBinding, Uint8List) split(Uint8List plain) {
final fields = <String>[];
var offset = 0;
for (var i = 0; i < 3; i++) {
if (plain.length - offset < 2) {
throw PayloadDecryptException('bound payload header truncated');
}
final n = (plain[offset] << 8) | plain[offset + 1];
offset += 2;
if (plain.length - offset < n) {
throw PayloadDecryptException('bound payload header truncated');
}
try {
fields.add(utf8.decode(plain.sublist(offset, offset + n)));
} on FormatException {
throw PayloadDecryptException('bound payload header is not UTF-8');
}
offset += n;
}
return (
PayloadBinding(recipientPeerId: fields[0], folderPath: fields[1], messageId: fields[2]),
Uint8List.sublistView(plain, offset),
);
}