107 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			107 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| var Keypairs = require('./');
 | |
| 
 | |
| /* global Promise*/
 | |
| Keypairs.parseOrGenerate({ key: '' }).then(function (pair) {
 | |
|   // should NOT have any warning output
 | |
|   if (!pair.private || !pair.public) {
 | |
|     throw new Error("missing key pairs");
 | |
|   }
 | |
| 
 | |
|   return Promise.all([
 | |
|     // Testing Public Part of key
 | |
|     Keypairs.export({ jwk: pair.public }).then(function (pem) {
 | |
|       if (!/--BEGIN PUBLIC/.test(pem)) {
 | |
|         throw new Error("did not export public pem");
 | |
|       }
 | |
|       return Promise.all([
 | |
|         Keypairs.parse({ key: pem }).then(function (pair) {
 | |
|           if (pair.private) {
 | |
|             throw new Error("shouldn't have private part");
 | |
|           }
 | |
|           return true;
 | |
|         })
 | |
|       , Keypairs.parse({ key: pem, private: true }).then(function () {
 | |
|           var err = new Error("should have thrown an error when private key was required and public pem was given");
 | |
|           err.code = 'NOERR';
 | |
|           throw err;
 | |
|         }).catch(function (e) {
 | |
|           if ('NOERR' === e.code) { throw e; }
 | |
|           return true;
 | |
|         })
 | |
|       ]).then(function () {
 | |
|         return true;
 | |
|       });
 | |
|     })
 | |
|     // Testing Private Part of Key
 | |
|   , Keypairs.export({ jwk: pair.private }).then(function (pem) {
 | |
|       if (!/--BEGIN .*PRIVATE KEY--/.test(pem)) {
 | |
|         throw new Error("did not export private pem: " + pem);
 | |
|       }
 | |
|       return Promise.all([
 | |
|         Keypairs.parse({ key: pem }).then(function (pair) {
 | |
|           if (!pair.private) {
 | |
|             throw new Error("should have private part");
 | |
|           }
 | |
|           if (!pair.public) {
 | |
|             throw new Error("should have public part also");
 | |
|           }
 | |
|           return true;
 | |
|         })
 | |
|       , Keypairs.parse({ key: pem, public: true }).then(function (pair) {
 | |
|           if (pair.private) {
 | |
|             throw new Error("should NOT have private part");
 | |
|           }
 | |
|           if (!pair.public) {
 | |
|             throw new Error("should have the public part though");
 | |
|           }
 | |
|           return true;
 | |
|         })
 | |
|       ]).then(function () {
 | |
|         return true;
 | |
|       });
 | |
|     })
 | |
|   , Keypairs.parseOrGenerate({ key: 'not a key', public: true }).then(function (pair) {
 | |
|       // SHOULD have warning output
 | |
|       if (!pair.private || !pair.public) {
 | |
|         throw new Error("missing key pairs (should ignore 'public')");
 | |
|       }
 | |
|       return true;
 | |
|     })
 | |
|   , Keypairs.parse({ key: JSON.stringify(pair.private) }).then(function (pair) {
 | |
|       if (!pair.private || !pair.public) {
 | |
|         throw new Error("missing key pairs (stringified jwt)");
 | |
|       }
 | |
|       return true;
 | |
|     })
 | |
|   , Keypairs.parse({ key: JSON.stringify(pair.private), public: true }).then(function (pair) {
 | |
|       if (pair.private) {
 | |
|         throw new Error("has private key when it shouldn't");
 | |
|       }
 | |
|       if (!pair.public) {
 | |
|         throw new Error("doesn't have public key when it should");
 | |
|       }
 | |
|       return true;
 | |
|     })
 | |
|   , Keypairs.parse({ key: JSON.stringify(pair.public), private: true }).then(function () {
 | |
|       var err = new Error("should have thrown an error when private key was required and public jwk was given");
 | |
|       err.code = 'NOERR';
 | |
|       throw err;
 | |
|     }).catch(function (e) {
 | |
|       if ('NOERR' === e.code) { throw e; }
 | |
|       return true;
 | |
|     })
 | |
|   ]).then(function (results) {
 | |
|     if (results.length && results.every(function (v) { return true === v; })) {
 | |
|       console.info("If a warning prints right above this, it's a pass");
 | |
|       console.log("PASS");
 | |
|       process.exit(0);
 | |
|     } else {
 | |
|       throw new Error("didn't get all passes (but no errors either)");
 | |
|     }
 | |
|   });
 | |
| }).catch(function (e) {
 | |
|   console.error("Caught an unexpected (failing) error:");
 | |
|   console.error(e);
 | |
|   process.exit(1);
 | |
| });
 |