UNPKG

cose-kit

Version:

This is an early prototype of a RFC8152 COSE library for node.js.

45 lines (44 loc) 1.64 kB
import { encoder } from "./cbor.js"; import { Sign1 } from "./cose/Sign1.js"; import { Sign } from "./cose/Sign.js"; import { Mac0 } from "./cose/Mac0.js"; export const coseVerify = async (cose, key, externalAAD = new Uint8Array()) => { let decoded = encoder.decode(cose); if (Array.isArray(decoded) && decoded.length === 4) { const params = decoded; decoded = new Sign1(...params); } if (!(decoded instanceof Sign1)) { throw new Error('unknown COSE type'); } const isValid = await decoded.verify(key, externalAAD); return { isValid, decoded }; }; export const coseVerifyMultiSignature = async (cose, keys) => { const decoded = encoder.decode(cose); if (!(decoded instanceof Sign)) { throw new Error('unexpected COSE type'); } const isValid = await decoded.verify(keys); return { isValid, decoded }; }; export const coseVerifyX509 = async (cose, roots) => { const decoded = encoder.decode(cose); if (!(decoded instanceof Sign1 || decoded instanceof Sign)) { throw new Error('unknown COSE type'); } const isValid = await decoded.verifyX509(roots); return { isValid, decoded }; }; export const coseVerifyMAC0 = async (cose, key, externalAAD = new Uint8Array()) => { let decoded = encoder.decode(cose); if (Array.isArray(decoded) && decoded.length === 4) { const params = decoded; decoded = new Mac0(...params); } if (!(decoded instanceof Mac0)) { throw new Error('unexpected COSE type'); } const isValid = await decoded.verify(key, externalAAD); return { isValid, decoded }; };