acme-http-01-azure-key-vault-middleware
Version:
Use Let's Encrypt and other RFC 8555 providers natively and securely on Azure
37 lines (27 loc) • 1.09 kB
JavaScript
const { CryptographyClient } = require('@azure/keyvault-keys');
const crypto = require('crypto');
const toBase64URL = require('../../util/toBase64URL');
module.exports = async function signAsFlattenedJWS(credential, keyVaultKey, keyId, protectedHeaders, payload) {
const base64URLPayload = payload ? toBase64URL(JSON.stringify(payload)) : '';
const { key } = keyVaultKey;
const jwk = {
...key,
x: toBase64URL(key.x),
y: toBase64URL(key.y)
};
protectedHeaders = JSON.stringify({
alg: 'ES256',
...(keyId ? { kid: keyId } : { jwk }),
...protectedHeaders
});
const base64URLProtectedHeaders = toBase64URL(protectedHeaders);
const hash = crypto.createHash('sha256');
const digest = hash.update(base64URLProtectedHeaders + '.' + base64URLPayload).digest();
const cryptographyClient = new CryptographyClient(keyVaultKey, credential);
const signature = toBase64URL((await cryptographyClient.sign('ES256', digest)).result);
return JSON.stringify({
protected: base64URLProtectedHeaders,
payload: base64URLPayload,
signature
});
};