@freedomofpress/sigstore-browser 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/conformance.yml +29 -0
- package/.github/workflows/publish.yml +45 -0
- package/README.md +10 -0
- package/dist/asn1/error.d.ts +5 -0
- package/dist/asn1/error.d.ts.map +1 -0
- package/dist/asn1/error.js +20 -0
- package/dist/asn1/error.js.map +1 -0
- package/dist/asn1/index.d.ts +2 -0
- package/dist/asn1/index.d.ts.map +1 -0
- package/dist/asn1/index.js +17 -0
- package/dist/asn1/index.js.map +1 -0
- package/dist/asn1/length.d.ts +4 -0
- package/dist/asn1/length.d.ts.map +1 -0
- package/dist/asn1/length.js +59 -0
- package/dist/asn1/length.js.map +1 -0
- package/dist/asn1/obj.d.ts +15 -0
- package/dist/asn1/obj.d.ts.map +1 -0
- package/dist/asn1/obj.js +153 -0
- package/dist/asn1/obj.js.map +1 -0
- package/dist/asn1/parse.d.ts +7 -0
- package/dist/asn1/parse.d.ts.map +1 -0
- package/dist/asn1/parse.js +118 -0
- package/dist/asn1/parse.js.map +1 -0
- package/dist/asn1/tag.d.ts +17 -0
- package/dist/asn1/tag.d.ts.map +1 -0
- package/dist/asn1/tag.js +86 -0
- package/dist/asn1/tag.js.map +1 -0
- package/dist/bundle.d.ts +87 -0
- package/dist/bundle.d.ts.map +1 -0
- package/dist/bundle.js +2 -0
- package/dist/bundle.js.map +1 -0
- package/dist/canonicalize.d.ts +2 -0
- package/dist/canonicalize.d.ts.map +1 -0
- package/dist/canonicalize.js +64 -0
- package/dist/canonicalize.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +217 -0
- package/dist/cli.js.map +1 -0
- package/dist/crypto.d.ts +5 -0
- package/dist/crypto.d.ts.map +1 -0
- package/dist/crypto.js +260 -0
- package/dist/crypto.js.map +1 -0
- package/dist/dsse.d.ts +2 -0
- package/dist/dsse.d.ts.map +1 -0
- package/dist/dsse.js +42 -0
- package/dist/dsse.js.map +1 -0
- package/dist/encoding.d.ts +17 -0
- package/dist/encoding.d.ts.map +1 -0
- package/dist/encoding.js +112 -0
- package/dist/encoding.js.map +1 -0
- package/dist/errors.d.ts +39 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +79 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces.d.ts +104 -0
- package/dist/interfaces.d.ts.map +1 -0
- package/dist/interfaces.js +26 -0
- package/dist/interfaces.js.map +1 -0
- package/dist/oid.d.ts +5 -0
- package/dist/oid.d.ts.map +1 -0
- package/dist/oid.js +25 -0
- package/dist/oid.js.map +1 -0
- package/dist/pem.d.ts +3 -0
- package/dist/pem.d.ts.map +1 -0
- package/dist/pem.js +41 -0
- package/dist/pem.js.map +1 -0
- package/dist/rfc3161/error.d.ts +3 -0
- package/dist/rfc3161/error.d.ts.map +1 -0
- package/dist/rfc3161/error.js +18 -0
- package/dist/rfc3161/error.js.map +1 -0
- package/dist/rfc3161/index.d.ts +2 -0
- package/dist/rfc3161/index.d.ts.map +1 -0
- package/dist/rfc3161/index.js +17 -0
- package/dist/rfc3161/index.js.map +1 -0
- package/dist/rfc3161/timestamp.d.ts +36 -0
- package/dist/rfc3161/timestamp.d.ts.map +1 -0
- package/dist/rfc3161/timestamp.js +203 -0
- package/dist/rfc3161/timestamp.js.map +1 -0
- package/dist/rfc3161/tstinfo.d.ts +13 -0
- package/dist/rfc3161/tstinfo.d.ts.map +1 -0
- package/dist/rfc3161/tstinfo.js +47 -0
- package/dist/rfc3161/tstinfo.js.map +1 -0
- package/dist/sigstore.d.ts +33 -0
- package/dist/sigstore.d.ts.map +1 -0
- package/dist/sigstore.js +531 -0
- package/dist/sigstore.js.map +1 -0
- package/dist/stream.d.ts +22 -0
- package/dist/stream.d.ts.map +1 -0
- package/dist/stream.js +114 -0
- package/dist/stream.js.map +1 -0
- package/dist/timestamp/tsa.d.ts +24 -0
- package/dist/timestamp/tsa.d.ts.map +1 -0
- package/dist/timestamp/tsa.js +150 -0
- package/dist/timestamp/tsa.js.map +1 -0
- package/dist/tlog/body.d.ts +8 -0
- package/dist/tlog/body.d.ts.map +1 -0
- package/dist/tlog/body.js +45 -0
- package/dist/tlog/body.js.map +1 -0
- package/dist/tlog/checkpoint.d.ts +23 -0
- package/dist/tlog/checkpoint.d.ts.map +1 -0
- package/dist/tlog/checkpoint.js +187 -0
- package/dist/tlog/checkpoint.js.map +1 -0
- package/dist/tlog/dsse.d.ts +4 -0
- package/dist/tlog/dsse.d.ts.map +1 -0
- package/dist/tlog/dsse.js +85 -0
- package/dist/tlog/dsse.js.map +1 -0
- package/dist/tlog/hashedrekord.d.ts +4 -0
- package/dist/tlog/hashedrekord.d.ts.map +1 -0
- package/dist/tlog/hashedrekord.js +63 -0
- package/dist/tlog/hashedrekord.js.map +1 -0
- package/dist/tlog/intoto.d.ts +4 -0
- package/dist/tlog/intoto.d.ts.map +1 -0
- package/dist/tlog/intoto.js +50 -0
- package/dist/tlog/intoto.js.map +1 -0
- package/dist/tlog/merkle.d.ts +3 -0
- package/dist/tlog/merkle.d.ts.map +1 -0
- package/dist/tlog/merkle.js +112 -0
- package/dist/tlog/merkle.js.map +1 -0
- package/dist/trust/tuf-root.json +1 -0
- package/dist/trust/tuf.d.ts +95 -0
- package/dist/trust/tuf.d.ts.map +1 -0
- package/dist/trust/tuf.js +150 -0
- package/dist/trust/tuf.js.map +1 -0
- package/dist/x509/cert.d.ts +52 -0
- package/dist/x509/cert.d.ts.map +1 -0
- package/dist/x509/cert.js +256 -0
- package/dist/x509/cert.js.map +1 -0
- package/dist/x509/chain.d.ts +20 -0
- package/dist/x509/chain.d.ts.map +1 -0
- package/dist/x509/chain.js +141 -0
- package/dist/x509/chain.js.map +1 -0
- package/dist/x509/ext.d.ts +48 -0
- package/dist/x509/ext.d.ts.map +1 -0
- package/dist/x509/ext.js +164 -0
- package/dist/x509/ext.js.map +1 -0
- package/dist/x509/index.d.ts +4 -0
- package/dist/x509/index.d.ts.map +1 -0
- package/dist/x509/index.js +19 -0
- package/dist/x509/index.js.map +1 -0
- package/dist/x509/sct.d.ts +25 -0
- package/dist/x509/sct.d.ts.map +1 -0
- package/dist/x509/sct.js +123 -0
- package/dist/x509/sct.js.map +1 -0
- package/eslint.config.mjs +31 -0
- package/package.json +39 -0
- package/src/asn1/error.ts +18 -0
- package/src/asn1/index.ts +16 -0
- package/src/asn1/length.ts +71 -0
- package/src/asn1/obj.ts +184 -0
- package/src/asn1/parse.ts +146 -0
- package/src/asn1/tag.ts +105 -0
- package/src/bundle.ts +99 -0
- package/src/canonicalize.ts +61 -0
- package/src/cli.ts +285 -0
- package/src/crypto.ts +310 -0
- package/src/dsse.ts +49 -0
- package/src/encoding.ts +141 -0
- package/src/errors.ts +82 -0
- package/src/index.browser.test.ts +219 -0
- package/src/index.ts +14 -0
- package/src/interfaces.ts +118 -0
- package/src/oid.ts +28 -0
- package/src/pem.ts +48 -0
- package/src/rfc3161/error.ts +16 -0
- package/src/rfc3161/index.ts +17 -0
- package/src/rfc3161/timestamp.ts +270 -0
- package/src/rfc3161/tstinfo.ts +80 -0
- package/src/sigstore.ts +728 -0
- package/src/stream.ts +141 -0
- package/src/timestamp/tsa.ts +205 -0
- package/src/tlog/body.ts +65 -0
- package/src/tlog/checkpoint.ts +248 -0
- package/src/tlog/dsse.ts +147 -0
- package/src/tlog/hashedrekord.ts +130 -0
- package/src/tlog/intoto.ts +102 -0
- package/src/tlog/merkle.ts +152 -0
- package/src/trust/README.md +38 -0
- package/src/trust/tuf-root.json +1 -0
- package/src/trust/tuf.ts +223 -0
- package/src/types/tuf-browser.d.ts +13 -0
- package/src/x509/cert.ts +319 -0
- package/src/x509/chain.ts +212 -0
- package/src/x509/ext.ts +212 -0
- package/src/x509/index.ts +19 -0
- package/src/x509/sct.ts +154 -0
- package/tsconfig.json +18 -0
- package/vite.config.playwright.ts +26 -0
- package/vite.config.ts +18 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tag.js","sourceRoot":"","sources":["../../src/asn1/tag.ts"],"names":[],"mappings":"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"}
|
package/dist/bundle.d.ts
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
type SigstoreBundleBase = {
|
|
2
|
+
mediaType: string;
|
|
3
|
+
verificationMaterial: VerificationMaterial;
|
|
4
|
+
};
|
|
5
|
+
export type SigstoreBundle = (SigstoreBundleBase & {
|
|
6
|
+
messageSignature: MessageSignature;
|
|
7
|
+
dsseEnvelope?: never;
|
|
8
|
+
}) | (SigstoreBundleBase & {
|
|
9
|
+
messageSignature?: never;
|
|
10
|
+
dsseEnvelope: DSSEEnvelope;
|
|
11
|
+
});
|
|
12
|
+
export interface VerificationMaterial {
|
|
13
|
+
certificate?: Certificate;
|
|
14
|
+
x509CertificateChain?: X509CertificateChain;
|
|
15
|
+
tlogEntries: TLogEntry[];
|
|
16
|
+
timestampVerificationData?: TimestampVerificationData;
|
|
17
|
+
}
|
|
18
|
+
export interface Certificate {
|
|
19
|
+
rawBytes: string;
|
|
20
|
+
}
|
|
21
|
+
export interface X509CertificateChain {
|
|
22
|
+
certificates: Certificate[];
|
|
23
|
+
}
|
|
24
|
+
export interface TLogEntry {
|
|
25
|
+
logIndex: string;
|
|
26
|
+
logId: LogId;
|
|
27
|
+
kindVersion: KindVersion;
|
|
28
|
+
integratedTime: string | null;
|
|
29
|
+
inclusionPromise?: InclusionPromise;
|
|
30
|
+
inclusionProof?: InclusionProof;
|
|
31
|
+
canonicalizedBody: string;
|
|
32
|
+
}
|
|
33
|
+
export interface LogId {
|
|
34
|
+
keyId: string;
|
|
35
|
+
}
|
|
36
|
+
export interface KindVersion {
|
|
37
|
+
kind: string;
|
|
38
|
+
version: string;
|
|
39
|
+
}
|
|
40
|
+
export interface InclusionPromise {
|
|
41
|
+
signedEntryTimestamp: string;
|
|
42
|
+
}
|
|
43
|
+
export interface InclusionProof {
|
|
44
|
+
logIndex: string;
|
|
45
|
+
rootHash: string;
|
|
46
|
+
treeSize: string;
|
|
47
|
+
hashes: string[];
|
|
48
|
+
checkpoint: Checkpoint;
|
|
49
|
+
}
|
|
50
|
+
export interface Checkpoint {
|
|
51
|
+
envelope: string;
|
|
52
|
+
}
|
|
53
|
+
export interface MessageSignature {
|
|
54
|
+
messageDigest: MessageDigest;
|
|
55
|
+
signature: string;
|
|
56
|
+
}
|
|
57
|
+
export interface MessageDigest {
|
|
58
|
+
algorithm: string;
|
|
59
|
+
digest: string;
|
|
60
|
+
}
|
|
61
|
+
export interface DSSEEnvelope {
|
|
62
|
+
payload: string;
|
|
63
|
+
payloadType: string;
|
|
64
|
+
signatures: DSSESignature[];
|
|
65
|
+
}
|
|
66
|
+
export interface DSSESignature {
|
|
67
|
+
sig: string;
|
|
68
|
+
keyid?: string;
|
|
69
|
+
}
|
|
70
|
+
export interface TimestampVerificationData {
|
|
71
|
+
rfc3161Timestamps: RFC3161Timestamp[];
|
|
72
|
+
}
|
|
73
|
+
export interface RFC3161Timestamp {
|
|
74
|
+
signedTimestamp: string;
|
|
75
|
+
}
|
|
76
|
+
export interface InTotoStatement {
|
|
77
|
+
_type: string;
|
|
78
|
+
subject: InTotoSubject[];
|
|
79
|
+
predicateType: string;
|
|
80
|
+
predicate: Record<string, unknown>;
|
|
81
|
+
}
|
|
82
|
+
export interface InTotoSubject {
|
|
83
|
+
name: string;
|
|
84
|
+
digest: Record<string, string>;
|
|
85
|
+
}
|
|
86
|
+
export {};
|
|
87
|
+
//# sourceMappingURL=bundle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundle.d.ts","sourceRoot":"","sources":["../src/bundle.ts"],"names":[],"mappings":"AAAA,KAAK,kBAAkB,GAAG;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB,EAAE,oBAAoB,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,cAAc,GACtB,CAAC,kBAAkB,GAAG;IAAE,gBAAgB,EAAE,gBAAgB,CAAC;IAAC,YAAY,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC,GACnF,CAAC,kBAAkB,GAAG;IAAE,gBAAgB,CAAC,EAAE,KAAK,CAAC;IAAC,YAAY,EAAE,YAAY,CAAA;CAAE,CAAC,CAAC;AAEpF,MAAM,WAAW,oBAAoB;IACnC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,WAAW,EAAE,SAAS,EAAE,CAAC;IACzB,yBAAyB,CAAC,EAAE,yBAAyB,CAAC;CACvD;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,WAAW,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,KAAK,CAAC;IACb,WAAW,EAAE,WAAW,CAAC;IACzB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,KAAK;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,EAAE,UAAU,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,aAAa,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,aAAa,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,yBAAyB;IACxC,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;CACvC;AAED,MAAM,WAAW,gBAAgB;IAC/B,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC"}
|
package/dist/bundle.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundle.js","sourceRoot":"","sources":["../src/bundle.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canonicalize.d.ts","sourceRoot":"","sources":["../src/canonicalize.ts"],"names":[],"mappings":"AAkBA,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CA0CnD"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
// From https://github.com/theupdateframework/tuf-js/blob/38d537ea883e8bb38ee6ab17b5f59ee479d0eab2/packages/canonical-json/lib/index.js
|
|
2
|
+
const COMMA = ",";
|
|
3
|
+
const COLON = ":";
|
|
4
|
+
const LEFT_SQUARE_BRACKET = "[";
|
|
5
|
+
const RIGHT_SQUARE_BRACKET = "]";
|
|
6
|
+
const LEFT_CURLY_BRACKET = "{";
|
|
7
|
+
const RIGHT_CURLY_BRACKET = "}";
|
|
8
|
+
function canonicalizeString(string) {
|
|
9
|
+
const escapedString = string.replace(/\\/g, "\\\\").replace(/"/g, '\\"');
|
|
10
|
+
return '"' + escapedString + '"';
|
|
11
|
+
}
|
|
12
|
+
// Recursively encodes the supplied object according to the canonical JSON form
|
|
13
|
+
// as specified at http://wiki.laptop.org/go/Canonical_JSON. It's a restricted
|
|
14
|
+
// dialect of JSON in which keys are lexically sorted, floats are not allowed,
|
|
15
|
+
// and only double quotes and backslashes are escaped.
|
|
16
|
+
export function canonicalize(object) {
|
|
17
|
+
const buffer = [];
|
|
18
|
+
if (typeof object === "string") {
|
|
19
|
+
buffer.push(canonicalizeString(object));
|
|
20
|
+
}
|
|
21
|
+
else if (typeof object === "boolean") {
|
|
22
|
+
buffer.push(JSON.stringify(object));
|
|
23
|
+
}
|
|
24
|
+
else if (Number.isInteger(object)) {
|
|
25
|
+
buffer.push(JSON.stringify(object));
|
|
26
|
+
}
|
|
27
|
+
else if (object === null) {
|
|
28
|
+
buffer.push(JSON.stringify(object));
|
|
29
|
+
}
|
|
30
|
+
else if (Array.isArray(object)) {
|
|
31
|
+
buffer.push(LEFT_SQUARE_BRACKET);
|
|
32
|
+
let first = true;
|
|
33
|
+
object.forEach((element) => {
|
|
34
|
+
if (!first) {
|
|
35
|
+
buffer.push(COMMA);
|
|
36
|
+
}
|
|
37
|
+
first = false;
|
|
38
|
+
buffer.push(canonicalize(element));
|
|
39
|
+
});
|
|
40
|
+
buffer.push(RIGHT_SQUARE_BRACKET);
|
|
41
|
+
}
|
|
42
|
+
else if (typeof object === "object") {
|
|
43
|
+
buffer.push(LEFT_CURLY_BRACKET);
|
|
44
|
+
let first = true;
|
|
45
|
+
Object.keys(object)
|
|
46
|
+
.sort()
|
|
47
|
+
.forEach((property) => {
|
|
48
|
+
if (!first) {
|
|
49
|
+
buffer.push(COMMA);
|
|
50
|
+
}
|
|
51
|
+
first = false;
|
|
52
|
+
buffer.push(canonicalizeString(property));
|
|
53
|
+
buffer.push(COLON);
|
|
54
|
+
// eslint-disable-next-line
|
|
55
|
+
buffer.push(canonicalize(object[property])); // 'any' as a fallback
|
|
56
|
+
});
|
|
57
|
+
buffer.push(RIGHT_CURLY_BRACKET);
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
throw new TypeError("cannot encode " + object);
|
|
61
|
+
}
|
|
62
|
+
return buffer.join("");
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=canonicalize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canonicalize.js","sourceRoot":"","sources":["../src/canonicalize.ts"],"names":[],"mappings":"AAAA,uIAAuI;AAEvI,MAAM,KAAK,GAAG,GAAG,CAAC;AAClB,MAAM,KAAK,GAAG,GAAG,CAAC;AAClB,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAChC,MAAM,oBAAoB,GAAG,GAAG,CAAC;AACjC,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAC/B,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAEhC,SAAS,kBAAkB,CAAC,MAAc;IACxC,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACzE,OAAO,GAAG,GAAG,aAAa,GAAG,GAAG,CAAC;AACnC,CAAC;AAED,+EAA+E;AAC/E,8EAA8E;AAC9E,8EAA8E;AAC9E,sDAAsD;AACtD,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1C,CAAC;SAAM,IAAI,OAAO,MAAM,KAAK,SAAS,EAAE,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IACtC,CAAC;SAAM,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IACtC,CAAC;SAAM,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IACtC,CAAC;SAAM,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACjC,IAAI,KAAK,GAAG,IAAI,CAAC;QACjB,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YACzB,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC;YACD,KAAK,GAAG,KAAK,CAAC;YACd,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACpC,CAAC;SAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAChC,IAAI,KAAK,GAAG,IAAI,CAAC;QACjB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;aAChB,IAAI,EAAE;aACN,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;YACpB,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC;YACD,KAAK,GAAG,KAAK,CAAC;YACd,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC1C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnB,2BAA2B;YAC3B,MAAM,CAAC,IAAI,CAAC,YAAY,CAAE,MAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,sBAAsB;QAC9E,CAAC,CAAC,CAAC;QACL,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACnC,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,SAAS,CAAC,gBAAgB,GAAG,MAAM,CAAC,CAAC;IACjD,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACzB,CAAC"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createHash, webcrypto } from "node:crypto";
|
|
3
|
+
import { access, readFile } from "node:fs/promises";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import { base64ToUint8Array, hexToUint8Array, Uint8ArrayToHex, Uint8ArrayToString } from "./encoding.js";
|
|
6
|
+
import { SigstoreVerifier } from "./sigstore.js";
|
|
7
|
+
import { TrustedRootProvider } from "./trust/tuf.js";
|
|
8
|
+
// Ensure the global Web Crypto implementation is available when running under Node.js
|
|
9
|
+
if (typeof globalThis.crypto === "undefined") {
|
|
10
|
+
globalThis.crypto = webcrypto;
|
|
11
|
+
}
|
|
12
|
+
const USAGE = `Usage: sigstore-browser verify-bundle [--staging] --bundle FILE --certificate-identity IDENTITY --certificate-oidc-issuer URL [--trusted-root FILE] FILE_OR_DIGEST`;
|
|
13
|
+
function printUsage() {
|
|
14
|
+
console.error(USAGE);
|
|
15
|
+
}
|
|
16
|
+
function parseArgs(argv) {
|
|
17
|
+
const options = {};
|
|
18
|
+
let command;
|
|
19
|
+
let artifactInput;
|
|
20
|
+
for (let i = 0; i < argv.length; i++) {
|
|
21
|
+
const current = argv[i];
|
|
22
|
+
if (current === "--help" || current === "-h") {
|
|
23
|
+
printUsage();
|
|
24
|
+
process.exit(0);
|
|
25
|
+
}
|
|
26
|
+
if (current.startsWith("--")) {
|
|
27
|
+
const [name, providedValue] = current.split("=", 2);
|
|
28
|
+
switch (name) {
|
|
29
|
+
case "--bundle": {
|
|
30
|
+
const value = providedValue ?? argv[++i];
|
|
31
|
+
if (!value) {
|
|
32
|
+
throw new Error("Missing value for --bundle");
|
|
33
|
+
}
|
|
34
|
+
options.bundlePath = value;
|
|
35
|
+
break;
|
|
36
|
+
}
|
|
37
|
+
case "--certificate-identity": {
|
|
38
|
+
const value = providedValue ?? argv[++i];
|
|
39
|
+
if (!value) {
|
|
40
|
+
throw new Error("Missing value for --certificate-identity");
|
|
41
|
+
}
|
|
42
|
+
options.certificateIdentity = value;
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
45
|
+
case "--certificate-oidc-issuer": {
|
|
46
|
+
const value = providedValue ?? argv[++i];
|
|
47
|
+
if (!value) {
|
|
48
|
+
throw new Error("Missing value for --certificate-oidc-issuer");
|
|
49
|
+
}
|
|
50
|
+
options.certificateOidcIssuer = value;
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
case "--trusted-root": {
|
|
54
|
+
const value = providedValue ?? argv[++i];
|
|
55
|
+
if (!value) {
|
|
56
|
+
throw new Error("Missing value for --trusted-root");
|
|
57
|
+
}
|
|
58
|
+
options.trustedRootPath = value;
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
default:
|
|
62
|
+
throw new Error(`Unknown option: ${name}`);
|
|
63
|
+
}
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
if (!command) {
|
|
67
|
+
command = current;
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
if (!artifactInput) {
|
|
71
|
+
artifactInput = current;
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
throw new Error(`Unexpected argument: ${current}`);
|
|
75
|
+
}
|
|
76
|
+
if (command !== "verify-bundle") {
|
|
77
|
+
throw new Error("No command provided. Expected 'verify-bundle'.");
|
|
78
|
+
}
|
|
79
|
+
if (!artifactInput) {
|
|
80
|
+
throw new Error("Missing FILE_OR_DIGEST argument.");
|
|
81
|
+
}
|
|
82
|
+
if (!options.bundlePath) {
|
|
83
|
+
throw new Error("Missing required option --bundle");
|
|
84
|
+
}
|
|
85
|
+
if (!options.certificateIdentity) {
|
|
86
|
+
throw new Error("Missing required option --certificate-identity");
|
|
87
|
+
}
|
|
88
|
+
if (!options.certificateOidcIssuer) {
|
|
89
|
+
throw new Error("Missing required option --certificate-oidc-issuer");
|
|
90
|
+
}
|
|
91
|
+
return {
|
|
92
|
+
bundlePath: options.bundlePath,
|
|
93
|
+
certificateIdentity: options.certificateIdentity,
|
|
94
|
+
certificateOidcIssuer: options.certificateOidcIssuer,
|
|
95
|
+
trustedRootPath: options.trustedRootPath,
|
|
96
|
+
artifactInput,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
async function fileExists(filePath) {
|
|
100
|
+
try {
|
|
101
|
+
await access(filePath);
|
|
102
|
+
return true;
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
async function resolveArtifact(input) {
|
|
109
|
+
const digestPrefix = "sha256:";
|
|
110
|
+
if (input.startsWith(digestPrefix) &&
|
|
111
|
+
input.length === digestPrefix.length + 64 &&
|
|
112
|
+
/^[0-9a-fA-F]+$/.test(input.slice(digestPrefix.length)) &&
|
|
113
|
+
!(await fileExists(input))) {
|
|
114
|
+
return {
|
|
115
|
+
type: "digest",
|
|
116
|
+
digestHex: input.slice(digestPrefix.length).toLowerCase(),
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
const resolvedPath = path.resolve(input);
|
|
120
|
+
const artifactBuffer = await readFile(resolvedPath);
|
|
121
|
+
const digestHex = createHash("sha256").update(artifactBuffer).digest("hex");
|
|
122
|
+
return {
|
|
123
|
+
type: "file",
|
|
124
|
+
path: resolvedPath,
|
|
125
|
+
data: new Uint8Array(artifactBuffer),
|
|
126
|
+
digestHex,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
async function loadTrustedRoot(pathInput) {
|
|
130
|
+
if (!pathInput) {
|
|
131
|
+
// Use TUF to fetch the latest trusted root (matches sigstore-js behavior)
|
|
132
|
+
const tufProvider = new TrustedRootProvider({
|
|
133
|
+
metadataUrl: "https://tuf-repo-cdn.sigstore.dev/",
|
|
134
|
+
targetBaseUrl: "https://tuf-repo-cdn.sigstore.dev/targets/",
|
|
135
|
+
});
|
|
136
|
+
return await tufProvider.getTrustedRoot();
|
|
137
|
+
}
|
|
138
|
+
const resolvedPath = path.resolve(pathInput);
|
|
139
|
+
const raw = await readFile(resolvedPath, "utf8");
|
|
140
|
+
return JSON.parse(raw);
|
|
141
|
+
}
|
|
142
|
+
async function loadBundle(bundlePath) {
|
|
143
|
+
const resolved = path.resolve(bundlePath);
|
|
144
|
+
const raw = await readFile(resolved, "utf8");
|
|
145
|
+
return JSON.parse(raw);
|
|
146
|
+
}
|
|
147
|
+
async function verifyBundle(options) {
|
|
148
|
+
const [trustedRoot, bundle, artifact] = await Promise.all([
|
|
149
|
+
loadTrustedRoot(options.trustedRootPath),
|
|
150
|
+
loadBundle(options.bundlePath),
|
|
151
|
+
resolveArtifact(options.artifactInput),
|
|
152
|
+
]);
|
|
153
|
+
const verifier = new SigstoreVerifier();
|
|
154
|
+
await verifier.loadSigstoreRoot(trustedRoot);
|
|
155
|
+
// Extract and verify the artifact digest from the bundle
|
|
156
|
+
let bundleDigestHex;
|
|
157
|
+
let bundleDigestBytes;
|
|
158
|
+
if (bundle.messageSignature) {
|
|
159
|
+
// Regular bundle: digest is in messageSignature
|
|
160
|
+
if (bundle.messageSignature.messageDigest.algorithm !== "SHA2_256") {
|
|
161
|
+
throw new Error(`Unsupported message digest algorithm: ${bundle.messageSignature.messageDigest.algorithm}`);
|
|
162
|
+
}
|
|
163
|
+
bundleDigestBytes = base64ToUint8Array(bundle.messageSignature.messageDigest.digest);
|
|
164
|
+
bundleDigestHex = Uint8ArrayToHex(bundleDigestBytes).toLowerCase();
|
|
165
|
+
}
|
|
166
|
+
else if (bundle.dsseEnvelope) {
|
|
167
|
+
// DSSE bundle: digest is in the in-toto statement payload
|
|
168
|
+
const payloadBytes = base64ToUint8Array(bundle.dsseEnvelope.payload);
|
|
169
|
+
const payload = JSON.parse(Uint8ArrayToString(payloadBytes));
|
|
170
|
+
if (!payload.subject || payload.subject.length === 0) {
|
|
171
|
+
throw new Error("DSSE payload has no subject");
|
|
172
|
+
}
|
|
173
|
+
// Find matching subject by comparing artifact digest with all subjects
|
|
174
|
+
let matchedSubject = null;
|
|
175
|
+
for (const subject of payload.subject) {
|
|
176
|
+
const subjectDigest = subject.digest?.["sha256"];
|
|
177
|
+
if (subjectDigest && artifact.digestHex === subjectDigest.toLowerCase()) {
|
|
178
|
+
matchedSubject = subject;
|
|
179
|
+
break;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
if (!matchedSubject) {
|
|
183
|
+
throw new Error(`Artifact digest ${artifact.digestHex} does not match any subject in DSSE payload`);
|
|
184
|
+
}
|
|
185
|
+
bundleDigestHex = matchedSubject.digest["sha256"].toLowerCase();
|
|
186
|
+
// Convert hex digest to bytes for verification target
|
|
187
|
+
bundleDigestBytes = hexToUint8Array(bundleDigestHex);
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
throw new Error("Bundle does not contain a message signature or DSSE envelope");
|
|
191
|
+
}
|
|
192
|
+
// For non-DSSE bundles, verify the digest matches
|
|
193
|
+
if (bundle.messageSignature && artifact.digestHex !== bundleDigestHex) {
|
|
194
|
+
throw new Error("Artifact digest does not match the digest embedded in the bundle.");
|
|
195
|
+
}
|
|
196
|
+
const verificationTarget = artifact.type === "file" ? artifact.data : bundleDigestBytes;
|
|
197
|
+
const isDigestOnly = artifact.type === "digest";
|
|
198
|
+
await verifier.verifyArtifact(options.certificateIdentity, options.certificateOidcIssuer, bundle, verificationTarget, isDigestOnly);
|
|
199
|
+
}
|
|
200
|
+
async function main() {
|
|
201
|
+
try {
|
|
202
|
+
const options = parseArgs(process.argv.slice(2));
|
|
203
|
+
await verifyBundle(options);
|
|
204
|
+
console.log("Bundle verification succeeded.");
|
|
205
|
+
}
|
|
206
|
+
catch (error) {
|
|
207
|
+
if (error instanceof Error) {
|
|
208
|
+
console.error(error.message);
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
console.error(error);
|
|
212
|
+
}
|
|
213
|
+
process.exitCode = 1;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
await main();
|
|
217
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/crypto.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function importKey(keytype: string, scheme: string, key: string): Promise<CryptoKey>;
|
|
2
|
+
export declare function verifySignature(key: CryptoKey, signed: Uint8Array, sig: Uint8Array, hash?: string): Promise<boolean>;
|
|
3
|
+
export declare function verifySignatureOverDigest(key: CryptoKey, digest: Uint8Array, sig: Uint8Array): Promise<boolean>;
|
|
4
|
+
export { uint8ArrayEqual as bufferEqual } from "./encoding.js";
|
|
5
|
+
//# sourceMappingURL=crypto.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"AAgFA,wBAAsB,SAAS,CAC7B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,SAAS,CAAC,CA2EpB;AAED,wBAAsB,eAAe,CACnC,GAAG,EAAE,SAAS,EACd,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE,UAAU,EACf,IAAI,GAAE,MAAiB,GACtB,OAAO,CAAC,OAAO,CAAC,CAwFlB;AAOD,wBAAsB,yBAAyB,CAC7C,GAAG,EAAE,SAAS,EACd,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE,UAAU,GACd,OAAO,CAAC,OAAO,CAAC,CA0ClB;AAED,OAAO,EAAE,eAAe,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC"}
|