mirror of
				https://github.com/therootcompany/keypairs.js.git
				synced 2024-11-16 17:29:03 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			56 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| // Copyright 2016-2018 AJ ONeal. All rights reserved
 | |
| /* This Source Code Form is subject to the terms of the Mozilla Public
 | |
|  * License, v. 2.0. If a copy of the MPL was not distributed with this
 | |
|  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 | |
| 'use strict';
 | |
| 
 | |
| module.exports = function (bitlen, exp) {
 | |
| 	var k = require('node-forge').pki.rsa.generateKeyPair({
 | |
| 		bits: bitlen || 2048,
 | |
| 		e: exp || 0x10001
 | |
| 	}).privateKey;
 | |
| 	var jwk = {
 | |
| 		kty: 'RSA',
 | |
| 		n: _toUrlBase64(k.n),
 | |
| 		e: _toUrlBase64(k.e),
 | |
| 		d: _toUrlBase64(k.d),
 | |
| 		p: _toUrlBase64(k.p),
 | |
| 		q: _toUrlBase64(k.q),
 | |
| 		dp: _toUrlBase64(k.dP),
 | |
| 		dq: _toUrlBase64(k.dQ),
 | |
| 		qi: _toUrlBase64(k.qInv)
 | |
| 	};
 | |
| 	return {
 | |
| 		private: jwk,
 | |
| 		public: {
 | |
| 			kty: jwk.kty,
 | |
| 			n: jwk.n,
 | |
| 			e: jwk.e
 | |
| 		}
 | |
| 	};
 | |
| };
 | |
| 
 | |
| function _toUrlBase64(fbn) {
 | |
| 	var hex = fbn.toRadix(16);
 | |
| 	if (hex.length % 2) {
 | |
| 		// Invalid hex string
 | |
| 		hex = '0' + hex;
 | |
| 	}
 | |
| 	while ('00' === hex.slice(0, 2)) {
 | |
| 		hex = hex.slice(2);
 | |
| 	}
 | |
| 	return Buffer.from(hex, 'hex')
 | |
| 		.toString('base64')
 | |
| 		.replace(/\+/g, '-')
 | |
| 		.replace(/\//g, '_')
 | |
| 		.replace(/=/g, '');
 | |
| }
 | |
| 
 | |
| if (require.main === module) {
 | |
| 	var keypair = module.exports(2048, 0x10001);
 | |
| 	console.info(keypair.private);
 | |
| 	console.warn(keypair.public);
 | |
| 	//console.info(keypair.privateKeyJwk);
 | |
| 	//console.warn(keypair.publicKeyJwk);
 | |
| }
 |