Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
Can not use 'secp256k1' which is common on Crypto Currency to create JWT, Use 'secp256r1'
/* Common variables */
const JWT = require('jsonwebtoken');
// Payload
const payload = {
sub: 'Subject',
iss: 'Issuer',
exp: 1639248876
let privateKey, token;
Wrong case using 'secp256k1'
const Elliptic = require('elliptic').ec;
const EC = new Elliptic('secp256k1');// Use 'secp256k1'
// Generate private key
privateKey = EC.genKeyPair().getPrivate().toString(16);
// Create token
token = JWT.sign(payload, privateKey, { algorithm: 'ES256'});
// Expected result is as follow.
Error: error:0906D06C:PEM routines:PEM_read_bio:no start line
at Sign.sign (crypto.js:331:26)
at sign (/work/node_modules/jwa/index.js:76:45)
at Object.sign (/work/node_modules/jwa/index.js:96:27)
at Object.jwsSign [as sign] (/work/node_modules/jws/lib/sign-stream.js:32:24)
at Object.module.exports [as sign] (/work/node_modules/jsonwebtoken/sign.js:188:21)
at Object.<anonymous> (/work/jwt.js:24:13)
at Module._compile (module.js:653:30)
at Object.Module._extensions..js (module.js:664:10)
at Module.load (module.js:566:32)
at tryModuleLoad (module.js:506:12)
Correct case using 'secp256r1'
const ECDSA = require('ecdsa-secp256r1');// Use 'secp256r1'
// Genarate private key
privateKey = ECDSA.generateKey();
// Retrive public key
const publicKey = privateKey.asPublic();
// Create token
token = JWT.sign(payload, privateKey.toPEM(), { algorithm: 'ES256'});
// Verify token
const decoded = JWT.verify(token, publicKey.toPEM());
privateKey: privateKey.toPEM(),
publicKey: publicKey.toPEM(),
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment