Poly1305Sink constructor
Poly1305Sink(
- Uint8List key
Creates a new instance to process 16-bytes blocks with 17-bytes buffer
Parameters:
key: The key-pair (r,s) - 16 or 32-bytes.
Implementation
Poly1305Sink(Uint8List key) : super(16, bufferLength: 17) {
if (key.length != 16 && key.length != 32) {
throw ArgumentError('The key length must be either 16 or 32 bytes');
}
// r = key[15..0]
_r0 = key[0] | (key[1] << 8) | (key[2] << 16) | (key[3] << 24);
_r1 = (key[3] >>> 2) | (key[4] << 6) | (key[5] << 14) | (key[6] << 22);
_r2 = (key[6] >>> 4) | (key[7] << 4) | (key[8] << 12) | (key[9] << 20);
_r3 = (key[9] >>> 6) | (key[10] << 2) | (key[11] << 10) | (key[12] << 18);
_r4 = key[13] | (key[14] << 8) | (key[15] << 16);
// clamp(r): r &= 0x0ffffffc0ffffffc0ffffffc0fffffff
_r0 &= 0x03ffffff;
_r1 &= 0x03ffff03;
_r2 &= 0x03ffc0ff;
_r3 &= 0x03f03fff;
_r4 &= 0x000fffff;
_g1 = 5 * _r1;
_g2 = 5 * _r2;
_g3 = 5 * _r3;
_g4 = 5 * _r4;
if (key.length == 32) {
// s = key[31..16]
_s0 = key[16] | (key[17] << 8) | (key[18] << 16) | (key[19] << 24);
_s1 = key[20] | (key[21] << 8) | (key[22] << 16) | (key[23] << 24);
_s2 = key[24] | (key[25] << 8) | (key[26] << 16) | (key[27] << 24);
_s3 = key[28] | (key[29] << 8) | (key[30] << 16) | (key[31] << 24);
}
}