cose-kit
Version:
This is an early prototype of a RFC8152 COSE library for node.js.
45 lines (44 loc) • 1.64 kB
JavaScript
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 };
};