Skip to content

JWK Thumbprint for JavaScript/TypeScript on both Web Browser and Node.js

License

Notifications You must be signed in to change notification settings

nwtgck/jwk-thumbprint-npm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

7b3d6d5 · Feb 22, 2024

History

84 Commits
Feb 12, 2024
Jul 23, 2020
May 23, 2019
May 22, 2019
May 22, 2019
Aug 16, 2020
May 22, 2019
Feb 12, 2024
Feb 22, 2024
Feb 13, 2024
May 22, 2019

Repository files navigation

jwk-thumbprint

npm Node CI

JWK Thumbprint for JavaScript/TypeScript on both Web Browser and Node.js

Installation

npm i -S jwk-thumbprint

Usage

Here is an usage to reproduce the example in RFC7638 3.1.

// TypeScript
// (Remove types to use it in JavaScript)

import {jwkThumbprint} from 'jwk-thumbprint';

const myJwk: JsonWebKey & {kty: 'RSA', kid: string} = {
  kty: 'RSA',
  n: '0vx7agoebGcQSuuPiLJXZptN9nndrQmbXEps2aiAFbWhM78LhWx4cbbfAAtVT86zwu1RK7aPFFxuhDR1L6tSoc_BJECPebWKRXjBZCiFV4n3oknjhMstn64tZ_2W-5JsGY4Hc5n9yBXArwl93lqt7_RN5w6Cf0h4QyQ5v-65YGjQR0_FDW2QvzqY368QQMicAtaSqzs8KJZgnYb9c7d0zgdAZHzu6qMQvRL5hajrn1n91CbOpbISD08qNLyrdkt-bFTWhAI4vMQFh6WeZu0fM4lFd2NcRwr3XPksINHaQ-G_xBniIqbw0Ls1jF44-csFCur-kEgU8awapJzKnqDKgw',
  e: 'AQAB',
  alg: 'RS256',
  kid: '2011-04-29',
};

console.log(jwkThumbprint(myJwk, 'SHA-256'));
// => new Uint8Array([55, 54, 203, 177, 120, 124, 184, 48, 156, 119, 238, 140, 55, 5, 197, 225, 111, 251, 158, 133, 151, 21, 144, 31, 30, 76, 89, 177, 17, 130, 245, 123])

Thumbprints in number array, hex and base64url encodings

First, import the following.

import {jwkThumbprintByEncoding} from 'jwk-thumbprint';

You can get different encodings by 'number', 'hex', 'base64url' or 'uint8array' in type-safe way. The return types are properly typed by the encodings.

const thumbprint: number[] = jwkThumbprintByEncoding(jwk, "SHA-256", 'numbers');
console.log(thumbprint)
// => 55, 54, 203, 177, 120, 124, 184, 48, 156, 119, 238, 140, 55, 5, 197, 225, 111, 251, 158, 133, 151, 21, 144, 31, 30, 76, 89, 177, 17, 130, 245, 123]
const thumbprint: string = jwkThumbprintByEncoding(jwk, "SHA-256", 'hex');
console.log(thumbprint)
// => 3736cbb1787cb8309c77ee8c3705c5e16ffb9e859715901f1e4c59b11182f57b
const thumbprint: string = jwkThumbprintByEncoding(jwk, "SHA-256", 'base64url');
console.log(thumbprint)
// => NzbLsXh8uDCcd-6MNwXF4W_7noWXFZAfHkxZsRGC9Xs";
const thumbprint: Uint8Array = jwkThumbprintByEncoding(jwk, "SHA-256", 'uint8array');
console.log(thumbprint)
// => new Uint8Array([55, 54, 203, 177, 120, 124, 184, 48, 156, 119, 238, 140, 55, 5, 197, 225, 111, 251, 158, 133, 151, 21, 144, 31, 30, 76, 89, 177, 17, 130, 245, 123])