12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.FlattenedSign = void 0;
- const base64url_js_1 = require("../../runtime/base64url.js");
- const sign_js_1 = require("../../runtime/sign.js");
- const is_disjoint_js_1 = require("../../lib/is_disjoint.js");
- const errors_js_1 = require("../../util/errors.js");
- const buffer_utils_js_1 = require("../../lib/buffer_utils.js");
- const check_key_type_js_1 = require("../../lib/check_key_type.js");
- const validate_crit_js_1 = require("../../lib/validate_crit.js");
- class FlattenedSign {
- constructor(payload) {
- if (!(payload instanceof Uint8Array)) {
- throw new TypeError('payload must be an instance of Uint8Array');
- }
- this._payload = payload;
- }
- setProtectedHeader(protectedHeader) {
- if (this._protectedHeader) {
- throw new TypeError('setProtectedHeader can only be called once');
- }
- this._protectedHeader = protectedHeader;
- return this;
- }
- setUnprotectedHeader(unprotectedHeader) {
- if (this._unprotectedHeader) {
- throw new TypeError('setUnprotectedHeader can only be called once');
- }
- this._unprotectedHeader = unprotectedHeader;
- return this;
- }
- async sign(key, options) {
- if (!this._protectedHeader && !this._unprotectedHeader) {
- throw new errors_js_1.JWSInvalid('either setProtectedHeader or setUnprotectedHeader must be called before #sign()');
- }
- if (!(0, is_disjoint_js_1.default)(this._protectedHeader, this._unprotectedHeader)) {
- throw new errors_js_1.JWSInvalid('JWS Protected and JWS Unprotected Header Parameter names must be disjoint');
- }
- const joseHeader = {
- ...this._protectedHeader,
- ...this._unprotectedHeader,
- };
- const extensions = (0, validate_crit_js_1.default)(errors_js_1.JWSInvalid, new Map([['b64', true]]), options === null || options === void 0 ? void 0 : options.crit, this._protectedHeader, joseHeader);
- let b64 = true;
- if (extensions.has('b64')) {
- b64 = this._protectedHeader.b64;
- if (typeof b64 !== 'boolean') {
- throw new errors_js_1.JWSInvalid('The "b64" (base64url-encode payload) Header Parameter must be a boolean');
- }
- }
- const { alg } = joseHeader;
- if (typeof alg !== 'string' || !alg) {
- throw new errors_js_1.JWSInvalid('JWS "alg" (Algorithm) Header Parameter missing or invalid');
- }
- (0, check_key_type_js_1.default)(alg, key, 'sign');
- let payload = this._payload;
- if (b64) {
- payload = buffer_utils_js_1.encoder.encode((0, base64url_js_1.encode)(payload));
- }
- let protectedHeader;
- if (this._protectedHeader) {
- protectedHeader = buffer_utils_js_1.encoder.encode((0, base64url_js_1.encode)(JSON.stringify(this._protectedHeader)));
- }
- else {
- protectedHeader = buffer_utils_js_1.encoder.encode('');
- }
- const data = (0, buffer_utils_js_1.concat)(protectedHeader, buffer_utils_js_1.encoder.encode('.'), payload);
- const signature = await (0, sign_js_1.default)(alg, key, data);
- const jws = {
- signature: (0, base64url_js_1.encode)(signature),
- payload: '',
- };
- if (b64) {
- jws.payload = buffer_utils_js_1.decoder.decode(payload);
- }
- if (this._unprotectedHeader) {
- jws.header = this._unprotectedHeader;
- }
- if (this._protectedHeader) {
- jws.protected = buffer_utils_js_1.decoder.decode(protectedHeader);
- }
- return jws;
- }
- }
- exports.FlattenedSign = FlattenedSign;
|