UNPKG

did-jwt

Version:

Library for Signing and Verifying JWTs that use DIDs as issuers and JWEs that use DIDs as recipients

44 lines • 2.06 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.computeX25519EcdhEsKek = computeX25519EcdhEsKek; exports.createX25519EcdhEsKek = createX25519EcdhEsKek; const util_js_1 = require("../util.js"); const Digest_js_1 = require("../Digest.js"); const ed25519_js_1 = require("@noble/curves/ed25519.js"); async function computeX25519EcdhEsKek(recipient, receiverSecret, alg) { const crv = 'X25519'; const keyLen = 256; const header = recipient.header; if (header.epk?.crv !== crv || typeof header.epk.x == 'undefined') return null; const publicKey = (0, util_js_1.base64ToBytes)(header.epk.x); let sharedSecret; if (receiverSecret instanceof Uint8Array) { sharedSecret = ed25519_js_1.x25519.getSharedSecret(receiverSecret, publicKey); } else { sharedSecret = await receiverSecret(publicKey); } // Key Encryption Key let producerInfo = undefined; let consumerInfo = undefined; if (recipient.header.apu) producerInfo = (0, util_js_1.base64ToBytes)(recipient.header.apu); if (recipient.header.apv) consumerInfo = (0, util_js_1.base64ToBytes)(recipient.header.apv); return (0, Digest_js_1.concatKDF)(sharedSecret, keyLen, alg, producerInfo, consumerInfo); } async function createX25519EcdhEsKek(recipientPublicKey, senderSecret, // unused alg, apu, // unused apv, ephemeralKeyPair) { const crv = 'X25519'; const keyLen = 256; const ephemeral = ephemeralKeyPair ? (0, util_js_1.generateKeyPairFromSeed)(ephemeralKeyPair.secretKey) : (0, util_js_1.generateKeyPair)(); const epk = { kty: 'OKP', crv, x: (0, util_js_1.bytesToBase64url)(ephemeral.publicKey) }; const sharedSecret = ed25519_js_1.x25519.getSharedSecret(ephemeral.secretKey, recipientPublicKey); // Key Encryption Key const consumerInfo = (0, util_js_1.base64ToBytes)(apv ?? ''); const kek = (0, Digest_js_1.concatKDF)(sharedSecret, keyLen, alg, undefined, consumerInfo); return { epk, kek }; } //# sourceMappingURL=X25519-ECDH-ES.js.map