async function aesGcmWrapKey()

in modules/raw-aes-keyring-browser/src/raw_aes_keyring_browser.ts [193:231]


async function aesGcmWrapKey(
  keyNamespace: string,
  keyName: string,
  material: WebCryptoEncryptionMaterial,
  aad: Uint8Array,
  wrappingMaterial: WebCryptoRawAesMaterial
): Promise<WebCryptoEncryptionMaterial> {
  const backend = await backendForRawAesMasterKey()
  const iv = await backend.randomValues(material.suite.ivLength)

  const getSubtleInfo = currySubtleFunction(
    wrappingMaterial,
    backend,
    'encrypt'
  )
  const info = new Uint8Array()
  const { getSubtleEncrypt } = await getSubtleInfo(info)

  const dataKey = unwrapDataKey(material.getUnencryptedDataKey())
  const buffer = await getSubtleEncrypt(iv, aad)(dataKey)
  const ciphertext = new Uint8Array(
    buffer,
    0,
    buffer.byteLength - material.suite.tagLength / 8
  )
  const authTag = new Uint8Array(
    buffer,
    buffer.byteLength - material.suite.tagLength / 8
  )

  const edk = rawAesEncryptedDataKey(
    keyNamespace,
    keyName,
    iv,
    ciphertext,
    authTag
  )
  return material.addEncryptedDataKey(edk, encryptFlags)
}