UNPKG

jose

Version:

JWA, JWS, JWE, JWT, JWK, JWKS for Node.js, Browser, Cloudflare Workers, Deno, Bun, and other Web-interoperable runtimes

43 lines (42 loc) 1.23 kB
import { decode } from '../util/base64url.js'; import { encode, strictDecoder } from './buffer_utils.js'; import { isObject } from './type_checks.js'; export const unprotected = Symbol(); export function assertNotSet(value, name) { if (value !== undefined) { throw new TypeError(`${name} can only be called once`); } } export function decodeBase64url(value, label, ErrorClass) { try { return decode(value); } catch { throw new ErrorClass(`Failed to base64url decode the ${label}`); } } export function encodeBase64url(value, label, ErrorClass) { try { return encode(value); } catch { throw new ErrorClass(`The ${label} is not a valid base64url string`); } } export async function digest(algorithm, data) { const subtleDigest = `SHA-${algorithm.slice(-3)}`; return new Uint8Array(await crypto.subtle.digest(subtleDigest, data)); } export function parseJoseHeader(b64, ErrorClass, message) { let parsed; try { parsed = JSON.parse(strictDecoder.decode(decode(b64))); } catch { throw new ErrorClass(message); } if (!isObject(parsed)) { throw new ErrorClass(message); } return parsed; }