encrypt static method
Implementation
static Future<Payload> encrypt(
Package package, {
required SecretKey secretKey,
}) async {
final cipher = AesCtr.with256bits(
macAlgorithm: Hmac.sha384(),
);
final nonceKey = await cipher.newSecretKey();
final nonce = Mac(await nonceKey.extractBytes());
final subkeys = await secretKey.deriveSubkeysV3(nonce: nonce);
final secretBox = await cipher.encrypt(
package.content,
nonce: subkeys.nonce2.bytes,
secretKey: subkeys.encryptionKey,
);
final prePayload = PayloadLocal(
nonce: nonce,
secretBox: SecretBox(
secretBox.cipherText + secretBox.mac.bytes,
nonce: secretBox.nonce,
mac: secretBox.mac,
),
);
final mac = await cipher.macAlgorithm.calculateMac(
Token.preAuthenticationEncoding(
header: header,
payload: prePayload,
footer: package.footer,
),
secretKey: subkeys.authenticationKey,
);
return PayloadLocal(
nonce: prePayload.nonce,
secretBox: prePayload.secretBox,
mac: Hash(mac.bytes),
);
}