oidc-lib
Version:
A library for creating OIDC Service Providers
126 lines (100 loc) • 3.08 kB
JavaScript
"use strict";
var pk;
async function registerEndpoints(global_pk){
pk = global_pk;
}
//////////////////////////////////////////////// JWS //////////////////////////////////////////////////////////////////
function createSign(options, keyObject) {
// fixup signatories
return pk.jose.JWS.createSign(options, keyObject.private);
}
function createVerify(options, signs) {
return pk.jose.JWS.createVerify(signs, options);
}
var JWS = {
createSign: createSign,
createVerify: createVerify
};
//////////////////////////////////////////////// JWE //////////////////////////////////////////////////////////////////
function createEncrypt(options, keyObject) {
var key;
switch(keyObject.alg){
case 'A128GCM':
key = keyObject.symmetric;
break;
case 'RS256':
key = keyObject.private;
break;
default:
throw "claimer_crypto asKeyStore key alg unknown: " + keyObject.alg;
}
return pk.jose.JWE.createEncrypt(options, key);
}
function createDecrypt(opts, keyOrKeystore){
if (keyOrKeystore === undefined){
keyOrKeystore = opts;
opts = undefined;
}
return pk.jose.JWE.createDecrypt(keyOrKeystore, opts);
}
var JWE = {
createEncrypt: createEncrypt,
createDecrypt: createDecrypt
};
//////////////////////////////////////////////// JWK //////////////////////////////////////////////////////////////////
//.............................................. Keystore ..............................................................
// {input} is a String or JSON object representing the JWK-set
function asKeyStore(input){
var inputType = typeof input;
var key;
var retVal;
switch (inputType){
case 'string':
retVal = input;
break;
case 'object':
if (input.constructor === Array){
var jwkset = {
keys: []
};
for (var i=0; i<input.length; i++){
var keyObject = input[i];
switch(keyObject.alg){
case 'A128GCM':
key = keyObject.symmetric;
break;
case 'RS256':
key = keyObject.private;
break;
default:
throw "claimer_crypto asKeyStore key alg unknown: " + keyObject.alg;
}
jwkset.keys.push(key);
}
retVal = jwkset;
}
else{
retVal = input;
}
break;
default:
throw 'claimer_crypto asKeyStore unsupported input type: ' + typeof input;
}
return pk.jose.JWK.asKeyStore(retVal);
}
function createKeyStore(){
return pk.jose.JWK.createKeyStore();
}
var JWK = {
asKeyStore: asKeyStore,
createKeyStore: createKeyStore
};
//////////////////////////////////////////////// MODULE //////////////////////////////////////////////////////////////////
module.exports = {
registerEndpoints: registerEndpoints,
JWS: JWS,
JWE: JWE,
JWK: JWK,
provider: 'node-jose',
registerEndpoints: registerEndpoints
};