OverviewFilesCommitsIssuesDocsReleasesPeers

apds commits / dd954df

attempt to fix der sig
dd954df36bbaff69831f28f2e4ee9d043fbb5fc4
by Everett Bogue <ev@evbogue.com> · 2025-12-13T19:26:15.000Z

Changed files (1) +7 -3

serve.js +7 -3
……@@ -259,8 +259,12 @@ const readDerLength = (bytes, offset) => {
259259 return { length, read: 1 + numBytes }
260260}
261261
262const ecdsaDerToJose = (derSignature, size = 32) => {
263 const bytes = derSignature instanceof Uint8Array ? derSignature : new Uint8Array(derSignature)
262const ecdsaSigToJose = (signature, size = 32) => {
263 const bytes = signature instanceof Uint8Array ? signature : new Uint8Array(signature)
264
265 // Some runtimes already return the JOSE (raw r||s) format for ECDSA signatures.
266 if (bytes.length === size * 2 && bytes[0] !== 0x30) return bytes
267
264268 let offset = 0
265269 if (bytes[offset++] !== 0x30) throw new Error('Invalid DER signature (no sequence)')
266270 const seqLen = readDerLength(bytes, offset)
……@@ -303,7 +307,7 @@ const createVapidJwt = async (endpoint) => {
303307 const derSig = new Uint8Array(
304308 await crypto.subtle.sign({ name: 'ECDSA', hash: 'SHA-256' }, privateKey, encoder.encode(data))
305309 )
306 const joseSig = ecdsaDerToJose(derSig)
310 const joseSig = ecdsaSigToJose(derSig)
307311 const signature = base64UrlEncodeBytes(joseSig)
308312 return `${data}.${signature}`
309313}