mirror of
				https://github.com/therootcompany/keypairs.js.git
				synced 2024-11-16 17:29:03 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			58 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| 
 | |
| var native = module.exports;
 | |
| // XXX received from caller
 | |
| var EC = native;
 | |
| 
 | |
| native.generate = function (opts) {
 | |
| 	var wcOpts = {};
 | |
| 	if (!opts) {
 | |
| 		opts = {};
 | |
| 	}
 | |
| 	if (!opts.kty) {
 | |
| 		opts.kty = 'EC';
 | |
| 	}
 | |
| 
 | |
| 	// ECDSA has only the P curves and an associated bitlength
 | |
| 	wcOpts.name = 'ECDSA';
 | |
| 	if (!opts.namedCurve) {
 | |
| 		opts.namedCurve = 'P-256';
 | |
| 	}
 | |
| 	wcOpts.namedCurve = opts.namedCurve; // true for supported curves
 | |
| 	if (/256/.test(wcOpts.namedCurve)) {
 | |
| 		wcOpts.namedCurve = 'P-256';
 | |
| 		wcOpts.hash = { name: 'SHA-256' };
 | |
| 	} else if (/384/.test(wcOpts.namedCurve)) {
 | |
| 		wcOpts.namedCurve = 'P-384';
 | |
| 		wcOpts.hash = { name: 'SHA-384' };
 | |
| 	} else {
 | |
| 		return Promise.Reject(
 | |
| 			new Error(
 | |
| 				"'" +
 | |
| 					wcOpts.namedCurve +
 | |
| 					"' is not an NIST approved ECDSA namedCurve. " +
 | |
| 					" Please choose either 'P-256' or 'P-384'. " +
 | |
| 					// XXX received from caller
 | |
| 					EC._stance
 | |
| 			)
 | |
| 		);
 | |
| 	}
 | |
| 
 | |
| 	var extractable = true;
 | |
| 	return window.crypto.subtle
 | |
| 		.generateKey(wcOpts, extractable, ['sign', 'verify'])
 | |
| 		.then(function (result) {
 | |
| 			return window.crypto.subtle
 | |
| 				.exportKey('jwk', result.privateKey)
 | |
| 				.then(function (privJwk) {
 | |
| 					privJwk.key_ops = undefined;
 | |
| 					privJwk.ext = undefined;
 | |
| 					return {
 | |
| 						private: privJwk,
 | |
| 						// XXX received from caller
 | |
| 						public: EC.neuter({ jwk: privJwk })
 | |
| 					};
 | |
| 				});
 | |
| 		});
 | |
| };
 |