init method
Implementation
@override
void init(bool forEncryption, CipherParameters params) {
KeyParameter initKeyParam;
Uint8List? initNonce;
CipherParameters chacha20Params;
if (params is AEADParameters) {
var aeadParams = params;
var macSizeBits = aeadParams.macSize;
if ((MAC_SIZE * 8) != macSizeBits) {
throw ArgumentError('Invalid value for MAC size: $macSizeBits');
}
initKeyParam = aeadParams.parameters as KeyParameter;
initNonce = aeadParams.nonce;
chacha20Params = ParametersWithIV(initKeyParam, initNonce);
_initialAAD = aeadParams.associatedData;
} else if (params is ParametersWithIV) {
var ivParams = params;
initKeyParam = ivParams.parameters as KeyParameter;
initNonce = ivParams.iv;
chacha20Params = ivParams;
_initialAAD = null;
} else {
throw ArgumentError('invalid parameters passed to ChaCha20Poly1305');
}
// Validate key
if (KEY_SIZE != initKeyParam.key.length) {
throw ArgumentError('Key must be 256 bits');
}
// Validate nonce
if (NONCE_SIZE != initNonce.length) {
throw ArgumentError('Nonce must be 96 bits');
}
utils.arrayCopy(initKeyParam.key, 0, _key, 0, KEY_SIZE);
utils.arrayCopy(initNonce, 0, _nonce, 0, NONCE_SIZE);
chacha20.init(true, chacha20Params as ParametersWithIV<KeyParameter>);
_state = forEncryption ? State.ENC_INIT : State.DEC_INIT;
resetBool(true, false);
}