improve cert parsing, add test

This commit is contained in:
Alex Bosworth 2019-11-18 21:48:33 -08:00
parent 7cee8f03e6
commit d8cea9a442
No known key found for this signature in database
GPG key ID: E80D2F3F311FD87E
3 changed files with 88 additions and 7 deletions

View file

@ -2,6 +2,8 @@ const beginCert = '-----BEGIN CERTIFICATE-----';
const beginKey = '-----BEGIN PUBLIC KEY-----';
const endCert = '-----END CERTIFICATE-----';
const endKey = '-----END PUBLIC KEY-----';
const endMarker = 'ENDCERTIFICATE';
const notFoundIndex = -1;
const split = /.{0,64}/g;
/** Get a DER encoded public key as a PEM encoded public key
@ -18,10 +20,20 @@ const split = /.{0,64}/g;
*/
module.exports = ({cert, key}) => {
const base64Key = Buffer.from(cert || key, 'hex').toString('base64');
const endMarkLen = endMarker.length;
const endCertIndex = base64Key.indexOf(endMarker);
const keyLen = base64Key.length;
const hasEndMark = endCertIndex !== notFoundIndex;
const plusCount = keyLen - endCertIndex - endMarkLen;
const endCut = hasEndMark ? -(plusCount + plusCount + endMarkLen) : keyLen;
const pem = []
.concat(!cert ? beginKey : beginCert)
.concat(base64Key.match(split)).filter(n => !!n)
.concat(base64Key.slice(Number(), endCut).match(split).filter(n => !!n))
.concat(!cert ? endKey : endCert)
.join('\n');

77
package-lock.json generated
View file

@ -1,6 +1,6 @@
{
"name": "balanceofsatoshis",
"version": "5.2.0",
"version": "5.2.1",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@ -1992,6 +1992,37 @@
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.0.0.tgz",
"integrity": "sha512-bVwDX8AF+72fIUNuARelKAlQUNtPOfG2fRxorbVvFk4zpHbqLrPdOGfVg5vrKwVzLLePqPBiATaOZNELQzmS0A=="
},
"ln-service": {
"version": "47.2.1",
"resolved": "https://registry.npmjs.org/ln-service/-/ln-service-47.2.1.tgz",
"integrity": "sha512-cyfYvQ3jJl65StEQusDgNMzpTOCS14b+lq6GAgdFzlIRI2vR+tcGEUluIF4dxVmBHnnkqrhOZjohN4wRlAGVBw==",
"requires": {
"@datastructures-js/priority-queue": "1.0.2",
"@grpc/proto-loader": "0.5.3",
"async": "3.1.0",
"asyncjs-util": "1.1.2",
"basicauth-middleware": "3.1.0",
"bech32": "1.1.3",
"bitcoinjs-lib": "5.1.6",
"bn.js": "5.0.0",
"body-parser": "1.19.0",
"bolt07": "1.4.3",
"compression": "1.7.4",
"cors": "2.8.5",
"dotenv": "8.2.0",
"express": "4.17.1",
"grpc": "1.24.2",
"is-base64": "1.0.0",
"is-hex": "1.1.3",
"lodash": "4.17.15",
"morgan": "1.9.1",
"promptly": "3.0.3",
"request": "2.88.0",
"safe-compare": "1.1.4",
"secp256k1": "3.7.1",
"ws": "7.2.0"
}
}
}
},
@ -3245,12 +3276,50 @@
"json2csv": "4.5.4",
"ln-service": "47.2.1",
"request": "2.88.0"
},
"dependencies": {
"bn.js": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.0.0.tgz",
"integrity": "sha512-bVwDX8AF+72fIUNuARelKAlQUNtPOfG2fRxorbVvFk4zpHbqLrPdOGfVg5vrKwVzLLePqPBiATaOZNELQzmS0A=="
},
"ln-service": {
"version": "47.2.1",
"resolved": "https://registry.npmjs.org/ln-service/-/ln-service-47.2.1.tgz",
"integrity": "sha512-cyfYvQ3jJl65StEQusDgNMzpTOCS14b+lq6GAgdFzlIRI2vR+tcGEUluIF4dxVmBHnnkqrhOZjohN4wRlAGVBw==",
"requires": {
"@datastructures-js/priority-queue": "1.0.2",
"@grpc/proto-loader": "0.5.3",
"async": "3.1.0",
"asyncjs-util": "1.1.2",
"basicauth-middleware": "3.1.0",
"bech32": "1.1.3",
"bitcoinjs-lib": "5.1.6",
"bn.js": "5.0.0",
"body-parser": "1.19.0",
"bolt07": "1.4.3",
"compression": "1.7.4",
"cors": "2.8.5",
"dotenv": "8.2.0",
"express": "4.17.1",
"grpc": "1.24.2",
"is-base64": "1.0.0",
"is-hex": "1.1.3",
"lodash": "4.17.15",
"morgan": "1.9.1",
"promptly": "3.0.3",
"request": "2.88.0",
"safe-compare": "1.1.4",
"secp256k1": "3.7.1",
"ws": "7.2.0"
}
}
}
},
"ln-service": {
"version": "47.2.1",
"resolved": "https://registry.npmjs.org/ln-service/-/ln-service-47.2.1.tgz",
"integrity": "sha512-cyfYvQ3jJl65StEQusDgNMzpTOCS14b+lq6GAgdFzlIRI2vR+tcGEUluIF4dxVmBHnnkqrhOZjohN4wRlAGVBw==",
"version": "47.3.0",
"resolved": "https://registry.npmjs.org/ln-service/-/ln-service-47.3.0.tgz",
"integrity": "sha512-fQ75ynP+oreYxh8NdxQJC6s0H/7feB5S4ExK2FknOVgQWSknDw/oveJtIpHk45MSXFUlyK1K1/PnA0VwyU3gNA==",
"requires": {
"@datastructures-js/priority-queue": "1.0.2",
"@grpc/proto-loader": "0.5.3",

View file

@ -23,7 +23,7 @@
"ini": "1.3.5",
"inquirer": "7.0.0",
"ln-accounting": "3.1.4",
"ln-service": "47.2.1",
"ln-service": "47.3.0",
"moment": "2.24.0",
"qrcode-terminal": "0.12.0",
"request": "2.88.0",
@ -58,5 +58,5 @@
"scripts": {
"test": "tap test/arrays/*.js test/balances/*.js test/chain/*.js test/encryption/*.js test/fiat/*.js test/network/*.js test/nodes/*.js test/responses/*.js test/routing/*.js test/swaps/*.js test/telegram/*.js"
},
"version": "5.2.0"
"version": "5.2.1"
}