Instead of using predefined classes, it is also possible to construct a
customized CRC function with ParametricCrc class. For a list of known
CRC routines, check out https://reveng.sourceforge.io/crc-catalogue/all.htm.
TODO:
inputReflected and outputReflected can be different, see CRC-12/UMTS.
With CrcFlipper, one can call flipWithData or flipWithValue depending on
whether they have access to the message, or only its calculated CRC value. The
snippet below is taken from test/flipper_test.dart.
var inputMessage =
'flipping lowercases to uppercases like mama pig making hot pancakes '
'for daddy pig in peppa pig cartoon';
// Mark the lower/upper-case bit in each character.
// 0x61 = 'a' = 0110 0001
// | <-- 5th bit, zero-indexed
// 0x41 = 'A' = 0100 0001
var positions = inputMessage.codeUnits
.asMap()
.entries
.where((e) => e.value >= 0x61 && e.value < 0x61 + 26)
.map((e) => e.key * 8 + 5)
.toSet();
var flipper = CrcFlipper(Crc64());
var solution = flipper.flipWithData(inputMessage.codeUnits, positions,
CrcValue(BigInt.parse('DEADBEEFCAFEBABE', radix: 16)))!;
var tmp = List.of(inputMessage.codeUnits, growable: false);
solution.forEach((bitPosition) {
var mask = 1 << (bitPosition % 8);
tmp[bitPosition ~/ 8] ^= mask;
});
var outputMessage = String.fromCharCodes(tmp);
expect(
outputMessage,
'flIPpiNG LOWErcAsEs To uPpERcaseS LIkE mAmA Pig mAKInG hOT paNcAKEs '
'For DAdDY pig in peppa pig cartoon');
Dart crclib
This is not an official Google product.
Generic CRC calculations as Dart converters and some common algorithms.
To calculate the CRC value of any message
The easiest way to use this library is to call
converton the instance of the desired CRC routine.Another supported use case is as stream transformers.
Instead of using predefined classes, it is also possible to construct a customized CRC function with
ParametricCrcclass. For a list of known CRC routines, check out https://reveng.sourceforge.io/crc-catalogue/all.htm.TODO:
inputReflectedandoutputReflectedcan be different, see CRC-12/UMTS.To flip bits to obtain desired CRC values
With
CrcFlipper, one can callflipWithDataorflipWithValuedepending on whether they have access to the message, or only its calculated CRC value. The snippet below is taken from test/flipper_test.dart.The detailed algorithm is documented in flipping_algorithm.md.