UNPKG

1.74 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.certToPEM = certToPEM;
7exports.rsaPublicKeyToPEM = rsaPublicKeyToPEM;
8function certToPEM(cert) {
9 cert = cert.match(/.{1,64}/g).join('\n');
10 cert = '-----BEGIN CERTIFICATE-----\n' + cert + '\n-----END CERTIFICATE-----\n';
11 return cert;
12};
13
14function prepadSigned(hexStr) {
15 var msb = hexStr[0];
16 if (msb < '0' || msb > '7') {
17 return '00' + hexStr;
18 }
19 return hexStr;
20}
21
22function toHex(number) {
23 var nstr = number.toString(16);
24 if (nstr.length % 2) {
25 return '0' + nstr;
26 }
27 return nstr;
28}
29
30function encodeLengthHex(n) {
31 if (n <= 127) {
32 return toHex(n);
33 }
34 var nHex = toHex(n);
35 var lengthOfLengthByte = 128 + nHex.length / 2;
36 return toHex(lengthOfLengthByte) + nHex;
37}
38
39/*
40 * Source: http://stackoverflow.com/questions/18835132/xml-to-pem-in-node-js
41 */
42function rsaPublicKeyToPEM(modulusB64, exponentB64) {
43 var modulus = new Buffer(modulusB64, 'base64');
44 var exponent = new Buffer(exponentB64, 'base64');
45 var modulusHex = prepadSigned(modulus.toString('hex'));
46 var exponentHex = prepadSigned(exponent.toString('hex'));
47 var modlen = modulusHex.length / 2;
48 var explen = exponentHex.length / 2;
49
50 var encodedModlen = encodeLengthHex(modlen);
51 var encodedExplen = encodeLengthHex(explen);
52 var encodedPubkey = '30' + encodeLengthHex(modlen + explen + encodedModlen.length / 2 + encodedExplen.length / 2 + 2) + '02' + encodedModlen + modulusHex + '02' + encodedExplen + exponentHex;
53
54 var der = new Buffer(encodedPubkey, 'hex').toString('base64');
55
56 var pem = '-----BEGIN RSA PUBLIC KEY-----\n';
57 pem += '' + der.match(/.{1,64}/g).join('\n');
58 pem += '\n-----END RSA PUBLIC KEY-----\n';
59 return pem;
60};
\No newline at end of file