tryUnpackRobust static method
Implementation
static Uint8List? tryUnpackRobust(
Uint8List embedded, {
required Uint8List keyBytes,
}) {
if (embedded.length < _robustHeaderLen) return null;
for (var i = 0; i < 4; i++) {
if (embedded[i] != robustMagic[i]) return null;
}
final version = embedded[4];
if (version != _robustVersion) return null;
final repetition = embedded[5];
if (repetition < 1 || repetition > 15) return null;
final originalLen = _readBe32(embedded, 8);
final encodedLen = _readBe32(embedded, 12);
final expectedCrc = _readBe32(embedded, 16);
if (originalLen < 0 || encodedLen < 0) return null;
if (_robustHeaderLen + encodedLen > embedded.length) return null;
final encoded = Uint8List.sublistView(
embedded,
_robustHeaderLen,
_robustHeaderLen + encodedLen,
);
final seed = _seedFromKey(keyBytes);
final deinterleaved = _invertPermuteBytes(encoded, seed);
final decoded = _repeatDecodeBits(deinterleaved, repetition, originalLen);
if (decoded == null) return null;
if (_crc32(decoded) != expectedCrc) return null;
return decoded;
}