UNPKG

@veramo/did-comm

Version:

Veramo messaging plugin implementing DIDComm v2.

35 lines 1.38 kB
import { gcm } from '@noble/ciphers/aes'; import { randomBytes } from '@noble/hashes/utils'; import { bytesToBase64url, encodeBase64url } from '@veramo/utils'; import { fromString } from 'uint8arrays/from-string'; function createA256GCMEncrypter(key) { return (cleartext, aad) => { const iv = randomBytes(gcm.nonceLength); const sealed = gcm(key, iv, aad).encrypt(cleartext); return { ciphertext: sealed.subarray(0, sealed.length - gcm.tagLength), tag: sealed.subarray(sealed.length - gcm.tagLength), iv, }; }; } export function a256gcmDirEncrypter(key) { const enc = 'A256GCM'; const alg = 'dir'; async function encrypt(cleartext, protectedHeader = {}, aad) { const protHeader = encodeBase64url(JSON.stringify(Object.assign({ alg }, protectedHeader, { enc }))); const encodedAad = fromString(aad ? `${protHeader}.${bytesToBase64url(aad)}` : protHeader, 'utf-8'); return { ...createA256GCMEncrypter(key)(cleartext, encodedAad), protectedHeader: protHeader, }; } return { alg, enc, encrypt }; } export function a256gcmDirDecrypter(key) { async function decrypt(sealed, iv, aad) { return gcm(key, iv, aad).decrypt(sealed); } return { alg: 'dir', enc: 'A256GCM', decrypt }; } //# sourceMappingURL=a256gcm-dir.js.map