Files
harheimertc/server/utils/webauthn-encoding.js

35 lines
930 B
JavaScript

export function toBase64Url(buf) {
if (buf == null) return ''
if (typeof buf === 'string') return buf
const b = Buffer.isBuffer(buf) ? buf : Buffer.from(buf)
// Node supports 'base64url' on recent versions; keep fallback for safety.
try {
return b.toString('base64url')
} catch {
return b
.toString('base64')
.replace(/\+/g, '-')
.replace(/\//g, '_')
.replace(/=+$/g, '')
}
}
export function fromBase64Url(s) {
if (!s) return Buffer.alloc(0)
// Node supports 'base64url' on recent versions; keep fallback for safety.
try {
return Buffer.from(String(s), 'base64url')
} catch {
let v = String(s).replace(/-/g, '+').replace(/_/g, '/')
while (v.length % 4) v += '='
return Buffer.from(v, 'base64')
}
}
export function parseClientDataJSON(clientDataJSONB64Url) {
const json = fromBase64Url(clientDataJSONB64Url).toString('utf8')
return JSON.parse(json)
}