1 /*! rsapem-1.1.js (c) 2012 Kenji Urushima | kjur.github.com/jsrsasign/license 2 */ 3 // 4 // rsa-pem.js - adding function for reading/writing PKCS#1 PEM private key 5 // to RSAKey class. 6 // 7 // version: 1.1 (2012-May-10) 8 // 9 // Copyright (c) 2010-2012 Kenji Urushima (kenji.urushima@gmail.com) 10 // 11 // This software is licensed under the terms of the MIT License. 12 // http://kjur.github.com/jsrsasign/license/ 13 // 14 // The above copyright and license notice shall be 15 // included in all copies or substantial portions of the Software. 16 // 17 // 18 // Depends on: 19 // 20 // 21 // 22 // _RSApem_pemToBase64(sPEM) 23 // 24 // removing PEM header, PEM footer and space characters including 25 // new lines from PEM formatted RSA private key string. 26 // 27 28 function _rsapem_pemToBase64(sPEMPrivateKey) { 29 var s = sPEMPrivateKey; 30 s = s.replace("-----BEGIN RSA PRIVATE KEY-----", ""); 31 s = s.replace("-----END RSA PRIVATE KEY-----", ""); 32 s = s.replace(/[ \n]+/g, ""); 33 return s; 34 } 35 36 function _rsapem_getPosArrayOfChildrenFromHex(hPrivateKey) { 37 var a = new Array(); 38 var v1 = ASN1HEX.getStartPosOfV_AtObj(hPrivateKey, 0); 39 var n1 = ASN1HEX.getPosOfNextSibling_AtObj(hPrivateKey, v1); 40 var e1 = ASN1HEX.getPosOfNextSibling_AtObj(hPrivateKey, n1); 41 var d1 = ASN1HEX.getPosOfNextSibling_AtObj(hPrivateKey, e1); 42 var p1 = ASN1HEX.getPosOfNextSibling_AtObj(hPrivateKey, d1); 43 var q1 = ASN1HEX.getPosOfNextSibling_AtObj(hPrivateKey, p1); 44 var dp1 = ASN1HEX.getPosOfNextSibling_AtObj(hPrivateKey, q1); 45 var dq1 = ASN1HEX.getPosOfNextSibling_AtObj(hPrivateKey, dp1); 46 var co1 = ASN1HEX.getPosOfNextSibling_AtObj(hPrivateKey, dq1); 47 a.push(v1, n1, e1, d1, p1, q1, dp1, dq1, co1); 48 return a; 49 } 50 51 function _rsapem_getHexValueArrayOfChildrenFromHex(hPrivateKey) { 52 var posArray = _rsapem_getPosArrayOfChildrenFromHex(hPrivateKey); 53 var v = ASN1HEX.getHexOfV_AtObj(hPrivateKey, posArray[0]); 54 var n = ASN1HEX.getHexOfV_AtObj(hPrivateKey, posArray[1]); 55 var e = ASN1HEX.getHexOfV_AtObj(hPrivateKey, posArray[2]); 56 var d = ASN1HEX.getHexOfV_AtObj(hPrivateKey, posArray[3]); 57 var p = ASN1HEX.getHexOfV_AtObj(hPrivateKey, posArray[4]); 58 var q = ASN1HEX.getHexOfV_AtObj(hPrivateKey, posArray[5]); 59 var dp = ASN1HEX.getHexOfV_AtObj(hPrivateKey, posArray[6]); 60 var dq = ASN1HEX.getHexOfV_AtObj(hPrivateKey, posArray[7]); 61 var co = ASN1HEX.getHexOfV_AtObj(hPrivateKey, posArray[8]); 62 var a = new Array(); 63 a.push(v, n, e, d, p, q, dp, dq, co); 64 return a; 65 } 66 67 /** 68 * read PKCS#1 private key from a string 69 * @name readPrivateKeyFromPEMString 70 * @memberOf RSAKey# 71 * @function 72 * @param {String} keyPEM string of PKCS#1 private key. 73 */ 74 function _rsapem_readPrivateKeyFromPEMString(keyPEM) { 75 var keyB64 = _rsapem_pemToBase64(keyPEM); 76 var keyHex = b64tohex(keyB64) // depends base64.js 77 var a = _rsapem_getHexValueArrayOfChildrenFromHex(keyHex); 78 this.setPrivateEx(a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8]); 79 } 80 81 RSAKey.prototype.readPrivateKeyFromPEMString = _rsapem_readPrivateKeyFromPEMString; 82