export function getEncryptionInfo()

in modules/encrypt-node/src/encrypt_stream.ts [141:186]


export function getEncryptionInfo(
  material: NodeEncryptionMaterial,
  frameLength: number
) {
  const { getCipherInfo, dispose, getSigner } = getEncryptHelper(material)
  const { suite, encryptionContext, encryptedDataKeys } = material
  const { ivLength, messageFormat } = material.suite

  const versionString = MessageFormat[messageFormat] as any
  const messageIdLength = parseInt(MessageIdLength[versionString], 10)
  /* Precondition UNTESTED: Node suites must result is some messageIdLength. */
  needs(messageIdLength > 0, 'Algorithm suite has unknown message format.')
  const messageId = randomBytes(messageIdLength)

  const { getCipher, keyCommitment } = getCipherInfo(messageId)

  const messageHeader = buildMessageHeader({
    suite: suite,
    encryptedDataKeys,
    encryptionContext,
    messageId,
    frameLength,
    suiteData: keyCommitment,
  })

  const { buffer, byteOffset, byteLength } =
    serializeMessageHeader(messageHeader)
  const headerBuffer = Buffer.from(buffer, byteOffset, byteLength)
  const headerIv = headerAuthIv(ivLength)
  const validateHeader = getCipher(headerIv)
  validateHeader.setAAD(headerBuffer)
  validateHeader.update(Buffer.alloc(0))
  validateHeader.final()
  const headerAuthTag = validateHeader.getAuthTag()

  return {
    getCipher,
    dispose,
    getSigner,
    messageHeader,
    rawHeader: [
      headerBuffer,
      serializeMessageHeaderAuth({ headerIv, headerAuthTag, messageHeader }),
    ],
  }
}