'use strict'; var RSA = require('../').RSA; var fs = require('fs'); var path = require('path'); var privkeyPemRef = fs.readFileSync(path.join(__dirname, 'privkey.pem'), 'ascii'); var privkeyJwkRef = JSON.parse(fs.readFileSync(path.join(__dirname, 'privkey.jwk'), 'ascii')); var refs = { privPem: RSA.exportPrivatePem({ privateKeyJwk: privkeyJwkRef }) , privJwk: RSA.exportPrivateJwk({ privateKeyPem: privkeyPemRef }) }; var hasUrsa; var imported; try { hasUrsa = require('ursa') && true; } catch(e) { hasUrsa = false; } // // // PEM tests // // console.log('JWK -> PEM ?', privkeyPemRef === refs.privPem); if (privkeyPemRef !== refs.privPem) { // Watch out for tricky whitespaces (\n instead of \r\n, trailing \r\n, etc) console.log('REF:'); console.log(JSON.stringify(privkeyPemRef)); console.log('GEN:'); console.log(JSON.stringify(refs.privPem)); throw new Error("Failed to validate importedJwk against referencePem"); } console.log('PEM -> _ -> PEM ?', privkeyPemRef === refs.privPem); if (hasUrsa) { imported = RSA.import({ privateKeyPem: privkeyPemRef }); refs.privPem2 = RSA.exportPrivatePem({ _ursa: imported._ursa }); } else { imported = RSA.import({ privateKeyPem: privkeyPemRef }); refs.privPem2 = RSA.exportPrivatePem(imported); } if (privkeyPemRef !== refs.privPem2) { console.log('REF:'); console.log(JSON.stringify(privkeyPemRef)); console.log('GEN:'); console.log(JSON.stringify(refs.privPem2)); throw new Error("Failed to validate importedPem against referencePem"); } // // // JWK tests // // console.log('PEM -> JWK ?', privkeyJwkRef.n === refs.privJwk.n); if (![ 'kty', 'n', 'e', 'p', 'q', 'dp', 'dq', 'qi', 'd' ].every(function (k) { return privkeyJwkRef[k] === refs.privJwk[k]; })) { console.log('REF:'); console.log(privkeyJwkRef); console.log('GEN:'); console.log(refs.privJwk); throw new Error("Failed to validate importedPem against referenceJwk"); } imported = RSA.import({ privateKeyJwk: privkeyJwkRef }); refs.privJwk2 = RSA.exportPrivateJwk(imported); console.log('JWK -> _ -> JWK ?', privkeyJwkRef.n === refs.privJwk2.n); if (privkeyJwkRef.n !== refs.privJwk2.n) { console.log('REF:'); console.log(privkeyJwkRef); console.log('GEN:'); console.log(refs.privJwk2); throw new Error("Failed to validate importedJwk against referenceJwk"); } console.log('');