| 12345678910111213141516171819202122232425262728293031 |
- 'use strict';
- const { unescape } = require('querystring');
- const { pki, md, asn1 } = require('node-forge');
- /*
- escapedPemCertificate comes from nginx, it's the client cert in PEM format.
- This function calculates the 10-byte fingerprint required by OpenADR.
- Ref: OpenADR 2.0b protocol specification section 10.5.1
- */
- function calculatePartialFingerprintOfEscapedPemCertificate(
- escapedPemCertificate,
- ) {
- const pemCertificate = unescape(escapedPemCertificate);
- const parsedCertificate = pki.certificateFromPem(pemCertificate);
- const asn1Encoded = pki.certificateToAsn1(parsedCertificate);
- const derEncoded = asn1.toDer(asn1Encoded).getBytes();
- const fullFingerprintDelimited = md.sha256
- .create()
- .update(derEncoded)
- .digest()
- .toHex()
- .match(/.{2}/g)
- .join(':');
- return fullFingerprintDelimited.slice(-29).toUpperCase();
- }
- module.exports = {
- calculatePartialFingerprintOfEscapedPemCertificate,
- };
|