/*! rsapem-1.1.js (c) 2012 Kenji Urushima | kjur.github.com/jsrsasign/license */ // // rsa-pem.js - adding function for reading/writing PKCS#1 PEM private key // to RSAKey class. // // version: 1.1.1 (2013-Apr-12) // // Copyright (c) 2010-2013 Kenji Urushima (kenji.urushima@gmail.com) // // This software is licensed under the terms of the MIT License. // http://kjur.github.com/jsrsasign/license/ // // The above copyright and license notice shall be // included in all copies or substantial portions of the Software. // // // Depends on: // // // // _RSApem_pemToBase64(sPEM) // // removing PEM header, PEM footer and space characters including // new lines from PEM formatted RSA private key string. // /** * @fileOverview * @name rsapem-1.1.js * @author Kenji Urushima kenji.urushima@gmail.com * @version 1.1 * @license MIT License */ function _rsapem_pemToBase64(sPEMPrivateKey) { var s = sPEMPrivateKey; s = s.replace("-----BEGIN RSA PRIVATE KEY-----", ""); s = s.replace("-----END RSA PRIVATE KEY-----", ""); s = s.replace(/[ \n]+/g, ""); return s; } function _rsapem_getPosArrayOfChildrenFromHex(hPrivateKey) { var a = new Array(); var v1 = ASN1HEX.getStartPosOfV_AtObj(hPrivateKey, 0); var n1 = ASN1HEX.getPosOfNextSibling_AtObj(hPrivateKey, v1); var e1 = ASN1HEX.getPosOfNextSibling_AtObj(hPrivateKey, n1); var d1 = ASN1HEX.getPosOfNextSibling_AtObj(hPrivateKey, e1); var p1 = ASN1HEX.getPosOfNextSibling_AtObj(hPrivateKey, d1); var q1 = ASN1HEX.getPosOfNextSibling_AtObj(hPrivateKey, p1); var dp1 = ASN1HEX.getPosOfNextSibling_AtObj(hPrivateKey, q1); var dq1 = ASN1HEX.getPosOfNextSibling_AtObj(hPrivateKey, dp1); var co1 = ASN1HEX.getPosOfNextSibling_AtObj(hPrivateKey, dq1); a.push(v1, n1, e1, d1, p1, q1, dp1, dq1, co1); return a; } function _rsapem_getHexValueArrayOfChildrenFromHex(hPrivateKey) { var posArray = _rsapem_getPosArrayOfChildrenFromHex(hPrivateKey); var v = ASN1HEX.getHexOfV_AtObj(hPrivateKey, posArray[0]); var n = ASN1HEX.getHexOfV_AtObj(hPrivateKey, posArray[1]); var e = ASN1HEX.getHexOfV_AtObj(hPrivateKey, posArray[2]); var d = ASN1HEX.getHexOfV_AtObj(hPrivateKey, posArray[3]); var p = ASN1HEX.getHexOfV_AtObj(hPrivateKey, posArray[4]); var q = ASN1HEX.getHexOfV_AtObj(hPrivateKey, posArray[5]); var dp = ASN1HEX.getHexOfV_AtObj(hPrivateKey, posArray[6]); var dq = ASN1HEX.getHexOfV_AtObj(hPrivateKey, posArray[7]); var co = ASN1HEX.getHexOfV_AtObj(hPrivateKey, posArray[8]); var a = new Array(); a.push(v, n, e, d, p, q, dp, dq, co); return a; } /** * read RSA private key from a ASN.1 hexadecimal string * @name readPrivateKeyFromASN1HexString * @memberOf RSAKey# * @function * @param {String} keyHex ASN.1 hexadecimal string of PKCS#1 private key. * @since 1.1.1 */ function _rsapem_readPrivateKeyFromASN1HexString(keyHex) { var a = _rsapem_getHexValueArrayOfChildrenFromHex(keyHex); this.setPrivateEx(a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8]); } /** * read PKCS#1 private key from a string * @name readPrivateKeyFromPEMString * @memberOf RSAKey# * @function * @param {String} keyPEM string of PKCS#1 private key. */ function _rsapem_readPrivateKeyFromPEMString(keyPEM) { var keyB64 = _rsapem_pemToBase64(keyPEM); var keyHex = b64tohex(keyB64) // depends base64.js var a = _rsapem_getHexValueArrayOfChildrenFromHex(keyHex); this.setPrivateEx(a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8]); } RSAKey.prototype.readPrivateKeyFromPEMString = _rsapem_readPrivateKeyFromPEMString; RSAKey.prototype.readPrivateKeyFromASN1HexString = _rsapem_readPrivateKeyFromASN1HexString;