Skip to content

Instantly share code, notes, and snippets.

@dalion619
Created August 1, 2023 05:36
Show Gist options
  • Save dalion619/c3ddffc3010db1034e6f2b0fb529948d to your computer and use it in GitHub Desktop.
Save dalion619/c3ddffc3010db1034e6f2b0fb529948d to your computer and use it in GitHub Desktop.
Cloudflare Worker ECDSA ES256 Signing
import { Buffer } from "buffer";
import * as rs from 'jsrsasign';
addEventListener('fetch', event => {
try {
event.respondWith(generateSignature(event.request));
} catch (e) {
return event.respondWith(new Response('Error thrown ' + e.message));
}
})
async function generateSignature(req) {
const url = new URL(req.url);
const privateKey = `-----BEGIN PRIVATE KEY-----
-----END PRIVATE KEY-----`;
const key = rs.KEYUTIL.getKey(privateKey);
const sig = new rs.KJUR.crypto.Signature({ "alg": "SHA256withECDSA" });
sig.init(key);
const signatureASN1Hex = sig.signString(url);
const signatureBase64 = Buffer.from(rs.KJUR.crypto.ECDSA.asn1SigToConcatSig(signatureASN1Hex), 'hex').toString('base64');
const signatureHeader = {
headers: {
"ES256": signatureBase64
},
};
return await fetch(url, signatureHeader);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment