Skip to content

Instantly share code, notes, and snippets.

@christiansmith
Created October 9, 2016 21:06
Show Gist options
  • Save christiansmith/40137d9d41258c053dc5b9d666d44518 to your computer and use it in GitHub Desktop.
Save christiansmith/40137d9d41258c053dc5b9d666d44518 to your computer and use it in GitHub Desktop.
const crypto = require('./src')
const {ab2str,str2ab,ab2buf,buf2ab} = require('./src/encodings')
const base64url = require('base64url')
let jwk = {
kty: "RSA",
use: "sig",
alg: "RS256",
n: "rlN01z7UMm97vVphJICBLBFZNv-IMMJq1V_lvprWS96p9s1yiQvlwbxGmSTTqeV4RNeshTfwM6HO_ADEZCP3PdKLhDMKkqlGP9NLktkdlkalLSJdGyElqRJi9oy7tRmGdYTvI1i7Esup8MadJdFXRhNwdn_tIHT0uV6SOgX5RtOF3tPybW01gpYqNWW-SWivfbXlC2W_V2BrR_xprDNUza6BLjmTeUSH7GLoDgt_5OTxYBK0xP3UWlGWQZ8PNUfv_zKvUKvK951doX-WJp92pK3uS99uIi6lfivHYMX5ncKYY325TXzLgpaBkNH_Uaiw_Lzt3ogaEqxn31eQNuHefiOTKazH2e0V61ymdLOn7Gw7ZtzSOBOyFdJzHKprMb94uC1oJYjlUsChIU2vzLr4X7B48kpo1hhAjkOEc8Jmri4NZBCfo9bUudcRLynNUix6cGD4QnA8fdGi8R6YiTo0XPOCuJy2K2NtwIdQDRe0CgnhS4EOkMg5Q5YCZytAhRr022sM0JUpNpyZ__IXy_GY5ZoC16kQ926lVzlHoCbI0UJUpy_425BaDKj7tbVqBYNCHuz2p94v00hFTs6gfYKE3tOMhPPFd3BhB2Wq2FbT28vmlPcqhr0ZYHVZNQpp33CALQJ1fYDcCg8HJj8R_puTQLAQFYfJQGBTLJx6x0pYrq0",
e: "AQAB"
}
let jwt = 'eyJhbGciOiJSUzI1NiJ9.eyJqdGkiOiI0M2Q3ODJhOGQ2Y2FmODVlNzU1NyIsImlzcyI6Imh0dHBzOi8vZm9yZ2UuYW52aWwuaW8iLCJzdWIiOiJmNTgyZjE3MS0zZmE5LTRjN2ItYTA3NS0wM2RmMzIwYjliN2IiLCJhdWQiOiI3N2M1MTE1NS0yM2MxLTRlMTYtOWZiNy0wN2JkZjIxNzU3N2IiLCJleHAiOjE0NzU4OTIwODcsImlhdCI6MTQ3NTg4ODQ4Nywic2NvcGUiOiJvcGVuaWQifQ.Uhl-pk2S3CDyhvEWsYioCNCORnK4ATK52YQmRWzJy2mq-EW6UOUWjtqEAu-Bw4j-1ZMYGofdO7v1xvwkD7cT_i9U_Vb8p1Frp-q4avcCwFdnMhKZigFWf4hJJIo_X7igh8FEbeAK851-1Zx_ysaReevxfSxALI4b3Ghpa0N5TUH4m0o4wxkpjaJFzhjGZt8GjxNVMp1QRWB5MT7C2dR6H0bi7SiTx73rMCBko1ycdRlT8g2-jNJLhuceu0p4mm9XDH-T59uaGGw15MLjiQs4iP4WC7qa2wEDAg6x1SrLj0XC_Dk5OuLqcEfvpK4wo3dX6rI5Dw9hcgLCJowHinW5GXCkRLKB68Hw_k6OnTPJnnwIwsgYvo71skE76KcvMaj_w4UVuOK8ft6AYR5j25BJtTq5VISbWnJpef9SB8DCYi61BuON_bd4mOI_AH5vePW52z0ICOWUqQWS5p84eqTZkWmqMwvlEk57LxqaB1WS_0W9EVbrMBLRK1Lp1viZ5pnAp_asD5tihoVkZ2ErzlN6pt7a1u5g8E7tuxDAxph90VY-Wmm0b4bWGmcBNwOQ9M0WaoqoTFIFRH-tb7pn1YhzFr_9EsC-bJvV648Eek-FpQnYI9DKbsuivUyTnTW1ISTNJX0qGztsidril-brBLERRNNe_Hq72E5jCNCebp4Y5gM'
let components = jwt.split('.')
let data = str2ab(components.slice(0,2).join('.'))
let signature = buf2ab(base64url.toBuffer(components[2]))
crypto.subtle
.importKey('jwk', jwk, { name: 'RSASSA-PKCS1-v1_5' }, true, ['verify'])
.then(cryptoKey => {
return crypto.subtle.verify({
name: 'RSASSA-PKCS1-v1_5',
hash: { name: 'SHA-256' }
}, cryptoKey, signature, data)
})
.then(console.log)
.catch(console.log)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment