partial implementation
This commit is contained in:
		
							parent
							
								
									6c084e6b48
								
							
						
					
					
						commit
						26595e7539
					
				
							
								
								
									
										130
									
								
								lib/rsa-forge.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										130
									
								
								lib/rsa-forge.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,130 @@ | |||||||
|  | 'use strict'; | ||||||
|  | 
 | ||||||
|  | var forge = require('node-forge'); | ||||||
|  | var utils = require('./key-utils.js'); | ||||||
|  | 
 | ||||||
|  | function notToJson() { | ||||||
|  |   return undefined; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* | ||||||
|  | function importPrivateKey(privateKey) { | ||||||
|  |   return forge.pki.rsa.setPrivateKey( | ||||||
|  |             base64ToBn(privateKey.n) | ||||||
|  |           , base64ToBn(privateKey.e) | ||||||
|  |           , base64ToBn(privateKey.d) | ||||||
|  |           , base64ToBn(privateKey.p) | ||||||
|  |           , base64ToBn(privateKey.q) | ||||||
|  |           , base64ToBn(privateKey.dp) | ||||||
|  |           , base64ToBn(privateKey.dq) | ||||||
|  |           , base64ToBn(privateKey.qi) | ||||||
|  |   ); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function importPublicKey(publicKey) { | ||||||
|  |   return forge.pki.rsa.setPublicKey( | ||||||
|  |              base64ToBn(publicKey.n), | ||||||
|  |              base64ToBn(publicKey.e)); | ||||||
|  | } | ||||||
|  | */ | ||||||
|  | 
 | ||||||
|  | var forgec = { | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   //
 | ||||||
|  |   // to components
 | ||||||
|  |   //
 | ||||||
|  |   _base64ToBn: function (base64) { | ||||||
|  |     return new forge.jsbn.BigInteger(utils.b64dec(base64).toString("hex"), 16); | ||||||
|  |   } | ||||||
|  | , _privateJwkToComponents: function (jwk) { | ||||||
|  |     var components = []; | ||||||
|  | 
 | ||||||
|  |     [ 'n', 'e', 'd', 'p', 'q', 'dp', 'dq', 'qi' ].forEach(function (key) { | ||||||
|  |       components.push(new forgec._base64tobin(jwk[key])); | ||||||
|  |     }); | ||||||
|  | 
 | ||||||
|  |     return components; | ||||||
|  |   } | ||||||
|  | , _publicJwkToComponents: function (jwk) { | ||||||
|  |     var components = []; | ||||||
|  |     [ 'n', 'e' ].forEach(function (key) { | ||||||
|  |       components.push(new Buffer(jwk[key], 'base64')); | ||||||
|  |     }); | ||||||
|  | 
 | ||||||
|  |     return components; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   //
 | ||||||
|  |   // Generate New Keypair
 | ||||||
|  |   //
 | ||||||
|  | , generateKeypair: function (bitlen, exp, options, cb) { | ||||||
|  |     var keypair = forge.pki.rsa.generateKeyPair({ bits: bitlen || 1024, e: exp || 0x10001 }); | ||||||
|  | 
 | ||||||
|  |     keypair.toJSON = notToJson; | ||||||
|  | 
 | ||||||
|  |     cb(null, { | ||||||
|  |       _forge: keypair | ||||||
|  |     }); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   //
 | ||||||
|  |   // Export Public / Private PEMs
 | ||||||
|  |   //
 | ||||||
|  | , exportPrivateKeyPem: function (keypair) { | ||||||
|  |     if (keypair.privateKeyPem) { | ||||||
|  |       return keypair.privateKeyPem; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     if (keypair.privateKeyJwk && !(keypair._forge && keypair._forge.privateKey)) { | ||||||
|  |       keypair._forge = { | ||||||
|  |         privateKey: forge.pki.rsa.setPrivateKey.apply( | ||||||
|  |           forge.pki.rsa | ||||||
|  |         , forgec._privateJwkToComponents(keypair.privateKeyJwk) | ||||||
|  |         ) | ||||||
|  |       }; | ||||||
|  |       keypair._forge.toJSON = notToJson; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     if (keypair._forge && keypair._forge.privateKey) { | ||||||
|  |       return forge.pki.privateKeyToPem(keypair._forge.privateKey); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     throw new Error("None of privateKeyPem, _forge, or privateKeyJwk found. No way to export private key PEM"); | ||||||
|  |   } | ||||||
|  | , exportPublicKeyPem: function (keypair) { | ||||||
|  |     if (keypair.publicKeyPem) { | ||||||
|  |       return keypair.publicKeyPem; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     if ((keypair.privateKeyJwk || keypair.publicKeyJwk) | ||||||
|  |       && !(keypair._forge && (keypair._forge.privateKey || keypair._forge.publicKey)) | ||||||
|  |     ) { | ||||||
|  |       keypair._forge = { | ||||||
|  |         publicKey: forge.pki.rsa.setPublicKey.apply( | ||||||
|  |           forge.pki.rsa | ||||||
|  |         , forgec._publicJwkToComponents(keypair.publicKeyJwk) | ||||||
|  |         ) | ||||||
|  |       }; | ||||||
|  |       keypair._forge.toJSON = notToJson; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     if (keypair._forge) { | ||||||
|  |       return forge.pki.publicKeyToPem(keypair._forge.publicKey || keypair._forge.privateKey); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     throw new Error("None of publicKeyPem, _forge, publicKeyJwk, privateKeyPem, or privateKeyJwk found. No way to export public key PEM"); | ||||||
|  |   } | ||||||
|  | //, exportPrivateKeyJwk: NOT IMPLEMENTED HERE
 | ||||||
|  | //, exportPublicKeyJwk: NOT IMPLEMENTED HERE
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | return forgec; | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user