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