Socket
Socket
Sign inDemoInstall

jose

Package Overview
Dependencies
Maintainers
1
Versions
209
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

jose - npm Package Compare versions

Comparing version 3.5.0 to 3.5.1

7

CHANGELOG.md

@@ -5,2 +5,9 @@ # Changelog

## [3.5.1](https://github.com/panva/jose/compare/v3.5.0...v3.5.1) (2021-01-10)
### Bug Fixes
* workaround for RangeError in browser runtime base64url ([ed32b0d](https://github.com/panva/jose/commit/ed32b0d46ee570e405e0d88b43aecd8ef6fea129))
## [3.5.0](https://github.com/panva/jose/compare/v3.4.0...v3.5.0) (2020-12-17)

@@ -7,0 +14,0 @@

2

dist/browser/jwe/flattened/decrypt.js

@@ -100,3 +100,3 @@ import { JOSEAlgNotAllowed, JOSENotSupported, JWEInvalid } from '../../util/errors.js';

}
cek = await generateCek(enc);
cek = generateCek(enc);
}

@@ -103,0 +103,0 @@ const iv = base64url(jwe.iv);

@@ -115,3 +115,3 @@ import ivFactory from '../../lib/iv.js';

}
this._iv || (this._iv = await generateIv(enc));
this._iv || (this._iv = generateIv(enc));
let additionalData;

@@ -118,0 +118,0 @@ let protectedHeader;

@@ -5,10 +5,10 @@ import parseJwk from './parse.js';

export default async function EmbeddedJWK(protectedHeader, token) {
const combinedHeader = {
const joseHeader = {
...protectedHeader,
...token.header,
};
if (!isObject(combinedHeader.jwk)) {
if (!isObject(joseHeader.jwk)) {
throw new JWSInvalid('"jwk" (JSON Web Key) Header Parameter must be a JSON object');
}
const key = (await parseJwk(combinedHeader.jwk, combinedHeader.alg, true));
const key = await parseJwk(joseHeader.jwk, joseHeader.alg, true);
if (key.type !== 'public') {

@@ -15,0 +15,0 @@ throw new JWSInvalid('"jwk" (JSON Web Key) Header Parameter must be a public key');

@@ -44,2 +44,5 @@ import FlattenedSign from '../flattened/sign.js';

async sign() {
if (!this._signatures.length) {
throw new JWSInvalid('at least one signature must be added');
}
const jws = {

@@ -46,0 +49,0 @@ signatures: [],

@@ -41,3 +41,3 @@ import cekFactory, { bitLengths as cekLengths } from '../lib/cek.js';

}
cek = providedCek || (await generateCek(enc));
cek = providedCek || generateCek(enc);
const kwAlg = alg.substr(-6);

@@ -52,3 +52,3 @@ encryptedKey = await aesKw(kwAlg, sharedSecret, cek);

case 'RSA-OAEP-512': {
cek = providedCek || (await generateCek(enc));
cek = providedCek || generateCek(enc);
encryptedKey = await rsaEs(alg, key, cek);

@@ -60,3 +60,3 @@ break;

case 'PBES2-HS512+A256KW': {
cek = providedCek || (await generateCek(enc));
cek = providedCek || generateCek(enc);
const { p2c, p2s } = providedParameters;

@@ -69,3 +69,3 @@ ({ encryptedKey, ...parameters } = await pbes2Kw(alg, key, cek, p2c, p2s));

case 'A256KW': {
cek = providedCek || (await generateCek(enc));
cek = providedCek || generateCek(enc);
encryptedKey = await aesKw(alg, key, cek);

@@ -77,3 +77,3 @@ break;

case 'A256GCMKW': {
cek = providedCek || (await generateCek(enc));
cek = providedCek || generateCek(enc);
const { iv } = providedParameters;

@@ -80,0 +80,0 @@ ({ encryptedKey, ...parameters } = await aesGcmKw(alg, key, cek, iv));

@@ -9,3 +9,3 @@ import encrypt from './encrypt.js';

const jweAlgorithm = alg.substr(0, 7);
iv || (iv = await generateIv(jweAlgorithm));
iv || (iv = generateIv(jweAlgorithm));
const { ciphertext: encryptedKey, tag } = await encrypt(jweAlgorithm, cek, key, iv, new Uint8Array());

@@ -12,0 +12,0 @@ return { encryptedKey, iv: base64url(iv), tag: base64url(tag) };

@@ -8,3 +8,8 @@ import { encoder, decoder } from '../lib/buffer_utils.js';

}
const base64string = globalThis.btoa(String.fromCharCode.apply(0, [...unencoded]));
const CHUNK_SIZE = 0x8000;
const arr = [];
for (let i = 0; i < unencoded.length; i += CHUNK_SIZE) {
arr.push(String.fromCharCode.apply(null, unencoded.subarray(i, i + CHUNK_SIZE)));
}
const base64string = globalThis.btoa(arr.join(''));
return base64string.replace(/=/g, '').replace(/\+/g, '-').replace(/\//g, '_');

@@ -18,6 +23,11 @@ };

encoded = encoded.replace(/-/g, '+').replace(/_/g, '/').replace(/\s/g, '');
return new Uint8Array(globalThis
.atob(encoded)
.split('')
.map((c) => c.charCodeAt(0)));
try {
return new Uint8Array(globalThis
.atob(encoded)
.split('')
.map((c) => c.charCodeAt(0)));
}
catch (_a) {
throw new TypeError('The input to be decoded is not correctly encoded.');
}
};

@@ -102,3 +102,3 @@ "use strict";

}
cek = await generateCek(enc);
cek = generateCek(enc);
}

@@ -105,0 +105,0 @@ const iv = base64url_js_1.decode(jwe.iv);

@@ -117,3 +117,3 @@ "use strict";

}
this._iv || (this._iv = await generateIv(enc));
this._iv || (this._iv = generateIv(enc));
let additionalData;

@@ -120,0 +120,0 @@ let protectedHeader;

@@ -7,10 +7,10 @@ "use strict";

async function EmbeddedJWK(protectedHeader, token) {
const combinedHeader = {
const joseHeader = {
...protectedHeader,
...token.header,
};
if (!is_object_js_1.default(combinedHeader.jwk)) {
if (!is_object_js_1.default(joseHeader.jwk)) {
throw new errors_js_1.JWSInvalid('"jwk" (JSON Web Key) Header Parameter must be a JSON object');
}
const key = (await parse_js_1.default(combinedHeader.jwk, combinedHeader.alg, true));
const key = await parse_js_1.default(joseHeader.jwk, joseHeader.alg, true);
if (key.type !== 'public') {

@@ -17,0 +17,0 @@ throw new errors_js_1.JWSInvalid('"jwk" (JSON Web Key) Header Parameter must be a public key');

@@ -46,2 +46,5 @@ "use strict";

async sign() {
if (!this._signatures.length) {
throw new errors_js_1.JWSInvalid('at least one signature must be added');
}
const jws = {

@@ -48,0 +51,0 @@ signatures: [],

@@ -43,3 +43,3 @@ "use strict";

}
cek = providedCek || (await generateCek(enc));
cek = providedCek || generateCek(enc);
const kwAlg = alg.substr(-6);

@@ -54,3 +54,3 @@ encryptedKey = await aeskw_js_1.wrap(kwAlg, sharedSecret, cek);

case 'RSA-OAEP-512': {
cek = providedCek || (await generateCek(enc));
cek = providedCek || generateCek(enc);
encryptedKey = await rsaes_js_1.encrypt(alg, key, cek);

@@ -62,3 +62,3 @@ break;

case 'PBES2-HS512+A256KW': {
cek = providedCek || (await generateCek(enc));
cek = providedCek || generateCek(enc);
const { p2c, p2s } = providedParameters;

@@ -71,3 +71,3 @@ ({ encryptedKey, ...parameters } = await pbes2kw_js_1.encrypt(alg, key, cek, p2c, p2s));

case 'A256KW': {
cek = providedCek || (await generateCek(enc));
cek = providedCek || generateCek(enc);
encryptedKey = await aeskw_js_1.wrap(alg, key, cek);

@@ -79,3 +79,3 @@ break;

case 'A256GCMKW': {
cek = providedCek || (await generateCek(enc));
cek = providedCek || generateCek(enc);
const { iv } = providedParameters;

@@ -82,0 +82,0 @@ ({ encryptedKey, ...parameters } = await aesgcmkw_js_1.wrap(alg, key, cek, iv));

@@ -12,3 +12,3 @@ "use strict";

const jweAlgorithm = alg.substr(0, 7);
iv || (iv = await generateIv(jweAlgorithm));
iv || (iv = generateIv(jweAlgorithm));
const { ciphertext: encryptedKey, tag } = await encrypt_js_1.default(jweAlgorithm, cek, key instanceof Uint8Array ? key : key.export(), iv, new Uint8Array());

@@ -15,0 +15,0 @@ return { encryptedKey, iv: base64url_js_1.encode(iv), tag: base64url_js_1.encode(tag) };

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const crypto_1 = require("crypto");
const digest = (algorithm, data) => {
return crypto_1.createHash(algorithm).update(data).digest();
};
const digest = (algorithm, data) => crypto_1.createHash(algorithm).update(data).digest();
exports.default = digest;

@@ -8,7 +8,3 @@ "use strict";

const deflateRaw = util_1.promisify(zlib_1.deflateRaw);
exports.inflate = async (input) => {
return inflateRaw(input);
};
exports.deflate = async (input) => {
return deflateRaw(input);
};
exports.inflate = (input) => inflateRaw(input);
exports.deflate = (input) => deflateRaw(input);

@@ -100,3 +100,3 @@ import { JOSEAlgNotAllowed, JOSENotSupported, JWEInvalid } from '../../util/errors.js';

}
cek = await generateCek(enc);
cek = generateCek(enc);
}

@@ -103,0 +103,0 @@ const iv = base64url(jwe.iv);

@@ -115,3 +115,3 @@ import ivFactory from '../../lib/iv.js';

}
this._iv || (this._iv = await generateIv(enc));
this._iv || (this._iv = generateIv(enc));
let additionalData;

@@ -118,0 +118,0 @@ let protectedHeader;

@@ -5,10 +5,10 @@ import parseJwk from './parse.js';

export default async function EmbeddedJWK(protectedHeader, token) {
const combinedHeader = {
const joseHeader = {
...protectedHeader,
...token.header,
};
if (!isObject(combinedHeader.jwk)) {
if (!isObject(joseHeader.jwk)) {
throw new JWSInvalid('"jwk" (JSON Web Key) Header Parameter must be a JSON object');
}
const key = (await parseJwk(combinedHeader.jwk, combinedHeader.alg, true));
const key = await parseJwk(joseHeader.jwk, joseHeader.alg, true);
if (key.type !== 'public') {

@@ -15,0 +15,0 @@ throw new JWSInvalid('"jwk" (JSON Web Key) Header Parameter must be a public key');

@@ -44,2 +44,5 @@ import FlattenedSign from '../flattened/sign.js';

async sign() {
if (!this._signatures.length) {
throw new JWSInvalid('at least one signature must be added');
}
const jws = {

@@ -46,0 +49,0 @@ signatures: [],

@@ -41,3 +41,3 @@ import cekFactory, { bitLengths as cekLengths } from '../lib/cek.js';

}
cek = providedCek || (await generateCek(enc));
cek = providedCek || generateCek(enc);
const kwAlg = alg.substr(-6);

@@ -52,3 +52,3 @@ encryptedKey = await aesKw(kwAlg, sharedSecret, cek);

case 'RSA-OAEP-512': {
cek = providedCek || (await generateCek(enc));
cek = providedCek || generateCek(enc);
encryptedKey = await rsaEs(alg, key, cek);

@@ -60,3 +60,3 @@ break;

case 'PBES2-HS512+A256KW': {
cek = providedCek || (await generateCek(enc));
cek = providedCek || generateCek(enc);
const { p2c, p2s } = providedParameters;

@@ -69,3 +69,3 @@ ({ encryptedKey, ...parameters } = await pbes2Kw(alg, key, cek, p2c, p2s));

case 'A256KW': {
cek = providedCek || (await generateCek(enc));
cek = providedCek || generateCek(enc);
encryptedKey = await aesKw(alg, key, cek);

@@ -77,3 +77,3 @@ break;

case 'A256GCMKW': {
cek = providedCek || (await generateCek(enc));
cek = providedCek || generateCek(enc);
const { iv } = providedParameters;

@@ -80,0 +80,0 @@ ({ encryptedKey, ...parameters } = await aesGcmKw(alg, key, cek, iv));

@@ -9,3 +9,3 @@ import encrypt from './encrypt.js';

const jweAlgorithm = alg.substr(0, 7);
iv || (iv = await generateIv(jweAlgorithm));
iv || (iv = generateIv(jweAlgorithm));
const { ciphertext: encryptedKey, tag } = await encrypt(jweAlgorithm, cek, key instanceof Uint8Array ? key : key.export(), iv, new Uint8Array());

@@ -12,0 +12,0 @@ return { encryptedKey, iv: base64url(iv), tag: base64url(tag) };

import { createHash } from 'crypto';
const digest = (algorithm, data) => {
return createHash(algorithm).update(data).digest();
};
const digest = (algorithm, data) => createHash(algorithm).update(data).digest();
export default digest;

@@ -5,7 +5,3 @@ import { promisify } from 'util';

const deflateRaw = promisify(deflateRawCb);
export const inflate = async (input) => {
return inflateRaw(input);
};
export const deflate = async (input) => {
return deflateRaw(input);
};
export const inflate = (input) => inflateRaw(input);
export const deflate = (input) => deflateRaw(input);

@@ -102,3 +102,3 @@ "use strict";

}
cek = await generateCek(enc);
cek = generateCek(enc);
}

@@ -105,0 +105,0 @@ const iv = base64url_js_1.decode(jwe.iv);

@@ -117,3 +117,3 @@ "use strict";

}
this._iv ||= await generateIv(enc);
this._iv ||= generateIv(enc);
let additionalData;

@@ -120,0 +120,0 @@ let protectedHeader;

@@ -7,10 +7,10 @@ "use strict";

async function EmbeddedJWK(protectedHeader, token) {
const combinedHeader = {
const joseHeader = {
...protectedHeader,
...token.header,
};
if (!is_object_js_1.default(combinedHeader.jwk)) {
if (!is_object_js_1.default(joseHeader.jwk)) {
throw new errors_js_1.JWSInvalid('"jwk" (JSON Web Key) Header Parameter must be a JSON object');
}
const key = (await parse_js_1.default(combinedHeader.jwk, combinedHeader.alg, true));
const key = await parse_js_1.default(joseHeader.jwk, joseHeader.alg, true);
if (key.type !== 'public') {

@@ -17,0 +17,0 @@ throw new errors_js_1.JWSInvalid('"jwk" (JSON Web Key) Header Parameter must be a public key');

@@ -46,2 +46,5 @@ "use strict";

async sign() {
if (!this._signatures.length) {
throw new errors_js_1.JWSInvalid('at least one signature must be added');
}
const jws = {

@@ -48,0 +51,0 @@ signatures: [],

@@ -43,3 +43,3 @@ "use strict";

}
cek = providedCek || (await generateCek(enc));
cek = providedCek || generateCek(enc);
const kwAlg = alg.substr(-6);

@@ -54,3 +54,3 @@ encryptedKey = await aeskw_js_1.wrap(kwAlg, sharedSecret, cek);

case 'RSA-OAEP-512': {
cek = providedCek || (await generateCek(enc));
cek = providedCek || generateCek(enc);
encryptedKey = await rsaes_js_1.encrypt(alg, key, cek);

@@ -62,3 +62,3 @@ break;

case 'PBES2-HS512+A256KW': {
cek = providedCek || (await generateCek(enc));
cek = providedCek || generateCek(enc);
const { p2c, p2s } = providedParameters;

@@ -71,3 +71,3 @@ ({ encryptedKey, ...parameters } = await pbes2kw_js_1.encrypt(alg, key, cek, p2c, p2s));

case 'A256KW': {
cek = providedCek || (await generateCek(enc));
cek = providedCek || generateCek(enc);
encryptedKey = await aeskw_js_1.wrap(alg, key, cek);

@@ -79,3 +79,3 @@ break;

case 'A256GCMKW': {
cek = providedCek || (await generateCek(enc));
cek = providedCek || generateCek(enc);
const { iv } = providedParameters;

@@ -82,0 +82,0 @@ ({ encryptedKey, ...parameters } = await aesgcmkw_js_1.wrap(alg, key, cek, iv));

@@ -12,3 +12,3 @@ "use strict";

const jweAlgorithm = alg.substr(0, 7);
iv ||= await generateIv(jweAlgorithm);
iv ||= generateIv(jweAlgorithm);
const { ciphertext: encryptedKey, tag } = await encrypt_js_1.default(jweAlgorithm, cek, key, iv, new Uint8Array());

@@ -15,0 +15,0 @@ return { encryptedKey, iv: base64url_js_1.encode(iv), tag: base64url_js_1.encode(tag) };

@@ -8,7 +8,3 @@ "use strict";

const deflateRaw = util_1.promisify(zlib_1.deflateRaw);
exports.inflate = async (input) => {
return inflateRaw(input);
};
exports.deflate = async (input) => {
return deflateRaw(input);
};
exports.inflate = (input) => inflateRaw(input);
exports.deflate = (input) => deflateRaw(input);

@@ -100,3 +100,3 @@ import { JOSEAlgNotAllowed, JOSENotSupported, JWEInvalid } from '../../util/errors.js';

}
cek = await generateCek(enc);
cek = generateCek(enc);
}

@@ -103,0 +103,0 @@ const iv = base64url(jwe.iv);

@@ -115,3 +115,3 @@ import ivFactory from '../../lib/iv.js';

}
this._iv ||= await generateIv(enc);
this._iv ||= generateIv(enc);
let additionalData;

@@ -118,0 +118,0 @@ let protectedHeader;

@@ -5,10 +5,10 @@ import parseJwk from './parse.js';

export default async function EmbeddedJWK(protectedHeader, token) {
const combinedHeader = {
const joseHeader = {
...protectedHeader,
...token.header,
};
if (!isObject(combinedHeader.jwk)) {
if (!isObject(joseHeader.jwk)) {
throw new JWSInvalid('"jwk" (JSON Web Key) Header Parameter must be a JSON object');
}
const key = (await parseJwk(combinedHeader.jwk, combinedHeader.alg, true));
const key = await parseJwk(joseHeader.jwk, joseHeader.alg, true);
if (key.type !== 'public') {

@@ -15,0 +15,0 @@ throw new JWSInvalid('"jwk" (JSON Web Key) Header Parameter must be a public key');

@@ -44,2 +44,5 @@ import FlattenedSign from '../flattened/sign.js';

async sign() {
if (!this._signatures.length) {
throw new JWSInvalid('at least one signature must be added');
}
const jws = {

@@ -46,0 +49,0 @@ signatures: [],

@@ -41,3 +41,3 @@ import cekFactory, { bitLengths as cekLengths } from '../lib/cek.js';

}
cek = providedCek || (await generateCek(enc));
cek = providedCek || generateCek(enc);
const kwAlg = alg.substr(-6);

@@ -52,3 +52,3 @@ encryptedKey = await aesKw(kwAlg, sharedSecret, cek);

case 'RSA-OAEP-512': {
cek = providedCek || (await generateCek(enc));
cek = providedCek || generateCek(enc);
encryptedKey = await rsaEs(alg, key, cek);

@@ -60,3 +60,3 @@ break;

case 'PBES2-HS512+A256KW': {
cek = providedCek || (await generateCek(enc));
cek = providedCek || generateCek(enc);
const { p2c, p2s } = providedParameters;

@@ -69,3 +69,3 @@ ({ encryptedKey, ...parameters } = await pbes2Kw(alg, key, cek, p2c, p2s));

case 'A256KW': {
cek = providedCek || (await generateCek(enc));
cek = providedCek || generateCek(enc);
encryptedKey = await aesKw(alg, key, cek);

@@ -77,3 +77,3 @@ break;

case 'A256GCMKW': {
cek = providedCek || (await generateCek(enc));
cek = providedCek || generateCek(enc);
const { iv } = providedParameters;

@@ -80,0 +80,0 @@ ({ encryptedKey, ...parameters } = await aesGcmKw(alg, key, cek, iv));

@@ -9,3 +9,3 @@ import encrypt from './encrypt.js';

const jweAlgorithm = alg.substr(0, 7);
iv ||= await generateIv(jweAlgorithm);
iv ||= generateIv(jweAlgorithm);
const { ciphertext: encryptedKey, tag } = await encrypt(jweAlgorithm, cek, key, iv, new Uint8Array());

@@ -12,0 +12,0 @@ return { encryptedKey, iv: base64url(iv), tag: base64url(tag) };

@@ -5,7 +5,3 @@ import { promisify } from 'util';

const deflateRaw = promisify(deflateRawCb);
export const inflate = async (input) => {
return inflateRaw(input);
};
export const deflate = async (input) => {
return deflateRaw(input);
};
export const inflate = (input) => inflateRaw(input);
export const deflate = (input) => deflateRaw(input);
import type { JWSHeaderParameters, JWTClaimVerificationOptions, JWTPayload } from '../types.d';
import ProduceJWT from '../lib/jwt_producer.js';
/**
* The UnsecuredJWT class is a utility for creating `{ "alg": "none" }` Unsecured JWTs.
* The UnsecuredJWT class is a utility for dealing with `{ "alg": "none" }` Unsecured JWTs.
*

@@ -6,0 +6,0 @@ * @example

import type { JWSHeaderParameters, JWEHeaderParameters } from '../types.d';
export declare type ProtectedHeaderParameters = JWSHeaderParameters & JWEHeaderParameters;
/**
* Decodes the Protected Header of a JWE/JWS/JWT token utilizing any encoding.
* Decodes the Protected Header of a JWE/JWS/JWT token utilizing any JOSE serialization.
*

@@ -25,4 +25,4 @@ * @example

*
* @param token JWE/JWS/JWT token in any encoding.
* @param token JWE/JWS/JWT token in any JOSE serialization.
*/
export default function decodeProtectedHeader(token: string | object): ProtectedHeaderParameters;
{
"name": "jose",
"version": "3.5.0",
"version": "3.5.1",
"description": "Universal 'JSON Web Almost Everything' - JWA, JWS, JWE, JWT, JWK with no dependencies",
"keywords": [
"browser",
"compact",

@@ -352,9 +353,9 @@ "decode",

"c8": "^7.3.5",
"esbuild": "0.8.12",
"eslint": "^7.14.0",
"eslint-config-airbnb-base": "^14.2.1",
"eslint-config-airbnb-typescript": "^12.0.0",
"eslint-config-prettier": "^6.14.0",
"eslint-plugin-import": "^2.22.1",
"eslint-plugin-jsdoc": "^30.7.8",
"esbuild": "0.8.31",
"eslint": "7.17.0",
"eslint-config-airbnb-base": "14.2.1",
"eslint-config-airbnb-typescript": "12.0.0",
"eslint-config-prettier": "7.1.0",
"eslint-plugin-import": "2.22.1",
"eslint-plugin-jsdoc": "30.7.13",
"glob": "^7.1.6",

@@ -371,4 +372,4 @@ "karma": "^5.2.3",

"typedoc": "0.19.2",
"typedoc-plugin-markdown": "3.0.11",
"typescript": "~4.0.5"
"typedoc-plugin-markdown": "3.1.1",
"typescript": "4.0.5"
},

@@ -375,0 +376,0 @@ "c8": {

@@ -197,5 +197,3 @@ # jose

Yes the bundle size is on the larger side, that is because each module is actually published
5 times so that it can remain truly without dependencies and be universal / isomorphic.
The source TS files are also published with inline docs so that your IDE's Intelligent code
completion works and has the exact same documentation as published.
multiple times so that it can remain truly without dependencies and be universal / isomorphic.

@@ -202,0 +200,0 @@ Nevertheless, since each module can be required independently and is fully tree-shakeable, the

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc