encrypt static method

Future<Payload> encrypt(
  1. Package package, {
  2. required SecretKey secretKey,
})

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),
  );
}