| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- import { CompactEncrypt } from '../jwe/compact/encrypt.js';
- import { JWTClaimsBuilder } from '../lib/jwt_claims_set.js';
- import { assertNotSet } from '../lib/helpers.js';
- export class EncryptJWT {
- #cek;
- #iv;
- #keyManagementParameters;
- #protectedHeader;
- #replicateIssuerAsHeader;
- #replicateSubjectAsHeader;
- #replicateAudienceAsHeader;
- #jwt;
- constructor(payload = {}) {
- this.#jwt = new JWTClaimsBuilder(payload);
- }
- setIssuer(issuer) {
- this.#jwt.iss = issuer;
- return this;
- }
- setSubject(subject) {
- this.#jwt.sub = subject;
- return this;
- }
- setAudience(audience) {
- this.#jwt.aud = audience;
- return this;
- }
- setJti(jwtId) {
- this.#jwt.jti = jwtId;
- return this;
- }
- setNotBefore(input) {
- this.#jwt.nbf = input;
- return this;
- }
- setExpirationTime(input) {
- this.#jwt.exp = input;
- return this;
- }
- setIssuedAt(input) {
- this.#jwt.iat = input;
- return this;
- }
- setProtectedHeader(protectedHeader) {
- assertNotSet(this.#protectedHeader, 'setProtectedHeader');
- this.#protectedHeader = protectedHeader;
- return this;
- }
- setKeyManagementParameters(parameters) {
- assertNotSet(this.#keyManagementParameters, 'setKeyManagementParameters');
- this.#keyManagementParameters = parameters;
- return this;
- }
- setContentEncryptionKey(cek) {
- assertNotSet(this.#cek, 'setContentEncryptionKey');
- this.#cek = cek;
- return this;
- }
- setInitializationVector(iv) {
- assertNotSet(this.#iv, 'setInitializationVector');
- this.#iv = iv;
- return this;
- }
- replicateIssuerAsHeader() {
- this.#replicateIssuerAsHeader = true;
- return this;
- }
- replicateSubjectAsHeader() {
- this.#replicateSubjectAsHeader = true;
- return this;
- }
- replicateAudienceAsHeader() {
- this.#replicateAudienceAsHeader = true;
- return this;
- }
- async encrypt(key, options) {
- const enc = new CompactEncrypt(this.#jwt.data());
- if (this.#protectedHeader &&
- (this.#replicateIssuerAsHeader ||
- this.#replicateSubjectAsHeader ||
- this.#replicateAudienceAsHeader)) {
- this.#protectedHeader = {
- ...this.#protectedHeader,
- iss: this.#replicateIssuerAsHeader ? this.#jwt.iss : undefined,
- sub: this.#replicateSubjectAsHeader ? this.#jwt.sub : undefined,
- aud: this.#replicateAudienceAsHeader ? this.#jwt.aud : undefined,
- };
- }
- enc.setProtectedHeader(this.#protectedHeader);
- if (this.#iv) {
- enc.setInitializationVector(this.#iv);
- }
- if (this.#cek) {
- enc.setContentEncryptionKey(this.#cek);
- }
- if (this.#keyManagementParameters) {
- enc.setKeyManagementParameters(this.#keyManagementParameters);
- }
- return enc.encrypt(key, options);
- }
- }
|