This is the code
const jose = require('node-jose'); const crypto = require('crypto'); async function generateKey(){ let key = crypto.generateKeyPairSync('ec', { namedCurve: 'prime256v1', publicKeyEncoding: { type: 'spki', format: 'pem', }, privateKeyEncoding: { type: 'pkcs8', format: 'pem', }, }); let cryptoKey = await jose.JWK.asKey(key.privateKey, 'pem'); console.log(cryptoKey.toPEM(true)); return cryptoKey; } async function generateJwks() { //Creating Signing Key let signingKey = await generateKey(); let publicSigningKeyJSON = signingKey.toJSON(); //Creating Encryption Key let encryptionKey = await generateKey(); let publicEncryptionKeyJSON = encryptionKey.toJSON(); let jwks = { keys: [{...publicSigningKeyJSON, ...{use: 'sig'}, ...{crv: 'P-256'}, ...{alg: 'ES256'}, }, {...publicEncryptionKeyJSON, ...{use: 'enc'}, ...{crv: 'P-256'}, ...{alg: 'ECDH-ES+A256KW'}, }]}; console.log(JSON.stringify(jwks)); } generateJwks();
and this is the sample output
-----BEGIN EC PRIVATE KEY----- MHcCAQEEIMQNi+nu+SAsdoC/6+EX9uqt6AsHqfRjBfXe9zMwixHJoAoGCCqGSM49 AwEHoUQDQgAEJjjlODeUwHh4jULfxMAYaY2UrdKNanlfdLJUeSTlTGehI6Buu/Iu keVK2A4iZLsisVgYDzos0YpTrO+EYW+XuA== -----END EC PRIVATE KEY----- -----BEGIN EC PRIVATE KEY----- MHcCAQEEIDr+f2B3/vXJ77aoq8fVmbe6/0OfzX3TrbRdfa6fbFq8oAoGCCqGSM49 AwEHoUQDQgAEPDdhVbX9BcS06GkUSe+g+C5TVARhaSuk3Gm4n9uaqdKw00EjYGIV 54WYSZlbKNxWULy10rp6VbFSjHn4U/X80w== -----END EC PRIVATE KEY----- {"keys":[{"kty":"EC","kid":"q5oJ6FCIhF9bV0rjV6jjF3EvEjEODDC2n7rm6hLyDWQ","crv":"P-256","x":"JjjlODeUwHh4jULfxMAYaY2UrdKNanlfdLJUeSTlTGc","y":"oSOgbrvyLpHlStgOImS7IrFYGA86LNGKU6zvhGFvl7g","use":"sig","alg":"ES256"},{"kty":"EC","kid":"mP4kHc_EMpQ15sHnmWQsvRwSBzNA5kkAxBzJdFY-jHo","crv":"P-256","x":"PDdhVbX9BcS06GkUSe-g-C5TVARhaSuk3Gm4n9uaqdI","y":"sNNBI2BiFeeFmEmZWyjcVlC8tdK6elWxUox5-FP1_NM","use":"enc","alg":"ECDH-ES+A256KW"}]}
Then you can start using them with MyInfoConnector for NodeJS lib with their sample app. Happy Coding!
Top comments (0)