You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
102 lines
3.6 KiB
102 lines
3.6 KiB
/*! 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 <a href="http://kjur.github.io/jsrsasign/license/">MIT License</a> |
|
*/ |
|
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;
|
|
|