split static method

(PayloadBinding, Uint8List) split(
  1. Uint8List plain
)

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),
  );
}