cose
Usage
🔥 This package is not stable or suitable for production use 🚧
npm install '@transmute/cose'
import * as cose from "@transmute/cose";
const cose = require("@transmute/cose");
const issuerSecretKeyJwk = await cose.key.generate<cose.SecretKeyJwk>(
"ES256",
"application/jwk+json"
);
const issuerPublicKeyJwk = await cose.key.publicFromPrivate<cose.PublicKeyJwk>(
issuerSecretKeyJwk
);
const notarySecretKeyJwk = await cose.key.generate<cose.SecretKeyJwk>(
"ES256",
"application/jwk+json"
);
const notaryPublicKeyJwk = await cose.key.publicFromPrivate<cose.PublicKeyJwk>(
notarySecretKeyJwk
);
const issuer = cose.detached.signer({ secretKeyJwk: issuerSecretKeyJwk });
const notary = cose.detached.signer({ secretKeyJwk: notarySecretKeyJwk });
const content = fs.readFileSync("./examples/image.png");
const signatureForImage = await issuer.sign({
protectedHeader: new Map<number, any>([
[1, -7],
[3, "image/png"],
[4, issuerPublicKeyJwk.kid],
]),
unprotectedHeader: new Map(),
payload: content,
});
const transparencyLogContainingImageSignatures = [
await cose.receipt.leaf(signatureForImage),
];
const receiptForImageSignature = await cose.receipt.inclusion.issue({
protectedHeader: new Map<number, any>([
[1, -7],
[-111, 1],
[4, notaryPublicKeyJwk.kid],
]),
entry: 0,
entries: transparencyLogContainingImageSignatures,
signer: notary,
});
const transparentSignature = await cose.receipt.add(
signatureForImage,
receiptForImageSignature
);
const resolve = async (
header: cose.ProtectedHeaderMap
): Promise<cose.PublicKeyJwk> => {
const kid = header.get(4);
if (kid === issuerPublicKeyJwk.kid) {
return issuerPublicKeyJwk;
}
if (kid === notaryPublicKeyJwk.kid) {
return notaryPublicKeyJwk;
}
throw new Error("No verification key found in trust store.");
};
const verifier = await cose.receipt.verifier({
resolve,
});
const verified = await verifier.verify({
coseSign1: transparentSignature,
payload: content,
});
IETF
RFCs
Drafts
Develop
npm i
npm t
npm run lint
npm run build