@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,104 @@
|
|
|
1
|
+
import { X509Certificate } from "./x509/index.js";
|
|
2
|
+
export declare enum SigstoreRoots {
|
|
3
|
+
certificateAuthorities = "certificateAuthorities",
|
|
4
|
+
ctlogs = "ctlogs",
|
|
5
|
+
timestampAuthorities = "timestampAuthorities",
|
|
6
|
+
tlogs = "tlogs"
|
|
7
|
+
}
|
|
8
|
+
export type RawTimestampAuthorities = RawTimestampAuthority[];
|
|
9
|
+
export interface TrustedRoot {
|
|
10
|
+
mediaType: string;
|
|
11
|
+
tlogs: RawLogs;
|
|
12
|
+
certificateAuthorities: RawCAs;
|
|
13
|
+
ctlogs: RawLogs;
|
|
14
|
+
timestampAuthorities: RawTimestampAuthorities;
|
|
15
|
+
}
|
|
16
|
+
export interface RawTimestampAuthority {
|
|
17
|
+
subject: {
|
|
18
|
+
organization: string;
|
|
19
|
+
commonName: string;
|
|
20
|
+
};
|
|
21
|
+
certChain: {
|
|
22
|
+
certificates: {
|
|
23
|
+
rawBytes: string;
|
|
24
|
+
}[];
|
|
25
|
+
};
|
|
26
|
+
validFor: {
|
|
27
|
+
start: string;
|
|
28
|
+
end?: string;
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export interface CTLog {
|
|
32
|
+
logID: Uint8Array;
|
|
33
|
+
publicKey: CryptoKey;
|
|
34
|
+
validFor: {
|
|
35
|
+
start: Date;
|
|
36
|
+
end: Date;
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
export interface RekorKeyInfo {
|
|
40
|
+
publicKey: CryptoKey;
|
|
41
|
+
logId: Uint8Array;
|
|
42
|
+
}
|
|
43
|
+
export interface CertAuthority {
|
|
44
|
+
certChain: X509Certificate[];
|
|
45
|
+
validFor: {
|
|
46
|
+
start: Date;
|
|
47
|
+
end: Date;
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
export interface Sigstore {
|
|
51
|
+
rekor: RekorKeyInfo | undefined;
|
|
52
|
+
ctlogs: CTLog[];
|
|
53
|
+
certificateAuthorities: CertAuthority[];
|
|
54
|
+
timestampAuthorities: CertAuthority[];
|
|
55
|
+
}
|
|
56
|
+
export interface RawLog {
|
|
57
|
+
baseUrl: string;
|
|
58
|
+
hashAlgorithm: string;
|
|
59
|
+
publicKey: {
|
|
60
|
+
rawBytes: string;
|
|
61
|
+
keyDetails: string;
|
|
62
|
+
validFor: {
|
|
63
|
+
start: string;
|
|
64
|
+
end?: string;
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
logId: {
|
|
68
|
+
keyId: string;
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
export type RawLogs = RawLog[];
|
|
72
|
+
export interface RawCA {
|
|
73
|
+
subject: {
|
|
74
|
+
organization: string;
|
|
75
|
+
commonName: string;
|
|
76
|
+
};
|
|
77
|
+
uri: string;
|
|
78
|
+
certChain: {
|
|
79
|
+
certificates: {
|
|
80
|
+
rawBytes: string;
|
|
81
|
+
}[];
|
|
82
|
+
};
|
|
83
|
+
validFor: {
|
|
84
|
+
start: string;
|
|
85
|
+
end?: string;
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
export type RawCAs = RawCA[];
|
|
89
|
+
export declare enum KeyTypes {
|
|
90
|
+
Ecdsa = "ECDSA",
|
|
91
|
+
Ed25519 = "Ed25519",
|
|
92
|
+
RSA = "RSA"
|
|
93
|
+
}
|
|
94
|
+
export declare enum EcdsaTypes {
|
|
95
|
+
P256 = "P-256",
|
|
96
|
+
P384 = "P-384",
|
|
97
|
+
P521 = "P-521"
|
|
98
|
+
}
|
|
99
|
+
export declare enum HashAlgorithms {
|
|
100
|
+
SHA256 = "SHA-256",
|
|
101
|
+
SHA384 = "SHA-384",
|
|
102
|
+
SHA512 = "SHA-512"
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=interfaces.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,oBAAY,aAAa;IACvB,sBAAsB,2BAA2B;IACjD,MAAM,WAAW;IACjB,oBAAoB,yBAAyB;IAC7C,KAAK,UAAU;CAChB;AAED,MAAM,MAAM,uBAAuB,GAAG,qBAAqB,EAAE,CAAC;AAE9D,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,sBAAsB,EAAE,MAAM,CAAC;IAC/B,MAAM,EAAE,OAAO,CAAC;IAChB,oBAAoB,EAAE,uBAAuB,CAAC;CAC/C;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE;QACP,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,SAAS,EAAE;QACT,YAAY,EAAE;YACZ,QAAQ,EAAE,MAAM,CAAC;SAClB,EAAE,CAAC;KACL,CAAC;IACF,QAAQ,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED,MAAM,WAAW,KAAK;IACpB,KAAK,EAAE,UAAU,CAAC;IAClB,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE;QACR,KAAK,EAAE,IAAI,CAAC;QACZ,GAAG,EAAE,IAAI,CAAC;KACX,CAAC;CACH;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,SAAS,CAAC;IACrB,KAAK,EAAE,UAAU,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,QAAQ,EAAE;QACR,KAAK,EAAE,IAAI,CAAC;QACZ,GAAG,EAAE,IAAI,CAAC;KACX,CAAC;CACH;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,YAAY,GAAG,SAAS,CAAC;IAChC,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,sBAAsB,EAAE,aAAa,EAAE,CAAC;IACxC,oBAAoB,EAAE,aAAa,EAAE,CAAC;CACvC;AAED,MAAM,WAAW,MAAM;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE;QACT,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE;YACR,KAAK,EAAE,MAAM,CAAC;YACd,GAAG,CAAC,EAAE,MAAM,CAAC;SACd,CAAC;KACH,CAAC;IACF,KAAK,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED,MAAM,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC;AAE/B,MAAM,WAAW,KAAK;IACpB,OAAO,EAAE;QACP,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE;QACT,YAAY,EAAE;YACZ,QAAQ,EAAE,MAAM,CAAC;SAClB,EAAE,CAAC;KACL,CAAC;IACF,QAAQ,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED,MAAM,MAAM,MAAM,GAAG,KAAK,EAAE,CAAC;AAE7B,oBAAY,QAAQ;IAClB,KAAK,UAAU;IACf,OAAO,YAAY;IACnB,GAAG,QAAQ;CACZ;AAED,oBAAY,UAAU;IACpB,IAAI,UAAU;IACd,IAAI,UAAU;IACd,IAAI,UAAU;CACf;AAED,oBAAY,cAAc;IACxB,MAAM,YAAY;IAClB,MAAM,YAAY;IAClB,MAAM,YAAY;CACnB"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export var SigstoreRoots;
|
|
2
|
+
(function (SigstoreRoots) {
|
|
3
|
+
SigstoreRoots["certificateAuthorities"] = "certificateAuthorities";
|
|
4
|
+
SigstoreRoots["ctlogs"] = "ctlogs";
|
|
5
|
+
SigstoreRoots["timestampAuthorities"] = "timestampAuthorities";
|
|
6
|
+
SigstoreRoots["tlogs"] = "tlogs";
|
|
7
|
+
})(SigstoreRoots || (SigstoreRoots = {}));
|
|
8
|
+
export var KeyTypes;
|
|
9
|
+
(function (KeyTypes) {
|
|
10
|
+
KeyTypes["Ecdsa"] = "ECDSA";
|
|
11
|
+
KeyTypes["Ed25519"] = "Ed25519";
|
|
12
|
+
KeyTypes["RSA"] = "RSA";
|
|
13
|
+
})(KeyTypes || (KeyTypes = {}));
|
|
14
|
+
export var EcdsaTypes;
|
|
15
|
+
(function (EcdsaTypes) {
|
|
16
|
+
EcdsaTypes["P256"] = "P-256";
|
|
17
|
+
EcdsaTypes["P384"] = "P-384";
|
|
18
|
+
EcdsaTypes["P521"] = "P-521";
|
|
19
|
+
})(EcdsaTypes || (EcdsaTypes = {}));
|
|
20
|
+
export var HashAlgorithms;
|
|
21
|
+
(function (HashAlgorithms) {
|
|
22
|
+
HashAlgorithms["SHA256"] = "SHA-256";
|
|
23
|
+
HashAlgorithms["SHA384"] = "SHA-384";
|
|
24
|
+
HashAlgorithms["SHA512"] = "SHA-512";
|
|
25
|
+
})(HashAlgorithms || (HashAlgorithms = {}));
|
|
26
|
+
//# sourceMappingURL=interfaces.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":"AAEA,MAAM,CAAN,IAAY,aAKX;AALD,WAAY,aAAa;IACvB,kEAAiD,CAAA;IACjD,kCAAiB,CAAA;IACjB,8DAA6C,CAAA;IAC7C,gCAAe,CAAA;AACjB,CAAC,EALW,aAAa,KAAb,aAAa,QAKxB;AA8FD,MAAM,CAAN,IAAY,QAIX;AAJD,WAAY,QAAQ;IAClB,2BAAe,CAAA;IACf,+BAAmB,CAAA;IACnB,uBAAW,CAAA;AACb,CAAC,EAJW,QAAQ,KAAR,QAAQ,QAInB;AAED,MAAM,CAAN,IAAY,UAIX;AAJD,WAAY,UAAU;IACpB,4BAAc,CAAA;IACd,4BAAc,CAAA;IACd,4BAAc,CAAA;AAChB,CAAC,EAJW,UAAU,KAAV,UAAU,QAIrB;AAED,MAAM,CAAN,IAAY,cAIX;AAJD,WAAY,cAAc;IACxB,oCAAkB,CAAA;IAClB,oCAAkB,CAAA;IAClB,oCAAkB,CAAA;AACpB,CAAC,EAJW,cAAc,KAAd,cAAc,QAIzB"}
|
package/dist/oid.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare const ECDSA_SIGNATURE_ALGOS: Record<string, string>;
|
|
2
|
+
export declare const RSA_SIGNATURE_ALGOS: Record<string, string>;
|
|
3
|
+
export declare const SHA2_HASH_ALGOS: Record<string, string>;
|
|
4
|
+
export declare const ECDSA_CURVE_NAMES: Record<string, string>;
|
|
5
|
+
//# sourceMappingURL=oid.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oid.d.ts","sourceRoot":"","sources":["../src/oid.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAKxD,CAAC;AAGF,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAKtD,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAIlD,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAIpD,CAAC"}
|
package/dist/oid.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// From https://github.com/sigstore/sigstore-js/blob/main/packages/core/src/oid.ts
|
|
2
|
+
export const ECDSA_SIGNATURE_ALGOS = {
|
|
3
|
+
"1.2.840.10045.4.3.1": "sha224",
|
|
4
|
+
"1.2.840.10045.4.3.2": "sha256",
|
|
5
|
+
"1.2.840.10045.4.3.3": "sha384",
|
|
6
|
+
"1.2.840.10045.4.3.4": "sha512",
|
|
7
|
+
};
|
|
8
|
+
// RSA signature algorithms
|
|
9
|
+
export const RSA_SIGNATURE_ALGOS = {
|
|
10
|
+
"1.2.840.113549.1.1.11": "sha256", // sha256WithRSAEncryption
|
|
11
|
+
"1.2.840.113549.1.1.12": "sha384", // sha384WithRSAEncryption
|
|
12
|
+
"1.2.840.113549.1.1.13": "sha512", // sha512WithRSAEncryption
|
|
13
|
+
"1.2.840.113549.1.1.5": "sha1", // sha1WithRSAEncryption
|
|
14
|
+
};
|
|
15
|
+
export const SHA2_HASH_ALGOS = {
|
|
16
|
+
"2.16.840.1.101.3.4.2.1": "sha256",
|
|
17
|
+
"2.16.840.1.101.3.4.2.2": "sha384",
|
|
18
|
+
"2.16.840.1.101.3.4.2.3": "sha512",
|
|
19
|
+
};
|
|
20
|
+
export const ECDSA_CURVE_NAMES = {
|
|
21
|
+
"1.2.840.10045.3.1.7": "secp256r1",
|
|
22
|
+
"1.3.132.0.34": "secp384r1",
|
|
23
|
+
"1.3.132.0.35": "secp521r1",
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=oid.js.map
|
package/dist/oid.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oid.js","sourceRoot":"","sources":["../src/oid.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAElF,MAAM,CAAC,MAAM,qBAAqB,GAA2B;IAC3D,qBAAqB,EAAE,QAAQ;IAC/B,qBAAqB,EAAE,QAAQ;IAC/B,qBAAqB,EAAE,QAAQ;IAC/B,qBAAqB,EAAE,QAAQ;CAChC,CAAC;AAEF,2BAA2B;AAC3B,MAAM,CAAC,MAAM,mBAAmB,GAA2B;IACzD,uBAAuB,EAAE,QAAQ,EAAE,0BAA0B;IAC7D,uBAAuB,EAAE,QAAQ,EAAE,0BAA0B;IAC7D,uBAAuB,EAAE,QAAQ,EAAE,0BAA0B;IAC7D,sBAAsB,EAAE,MAAM,EAAK,wBAAwB;CAC5D,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAA2B;IACrD,wBAAwB,EAAE,QAAQ;IAClC,wBAAwB,EAAE,QAAQ;IAClC,wBAAwB,EAAE,QAAQ;CACnC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAA2B;IACvD,qBAAqB,EAAE,WAAW;IAClC,cAAc,EAAE,WAAW;IAC3B,cAAc,EAAE,WAAW;CAC5B,CAAC"}
|
package/dist/pem.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pem.d.ts","sourceRoot":"","sources":["../src/pem.ts"],"names":[],"mappings":"AAqBA,wBAAgB,KAAK,CAAC,WAAW,EAAE,MAAM,GAAG,UAAU,CAYrD;AAKD,wBAAgB,OAAO,CAAC,WAAW,EAAE,UAAU,EAAE,IAAI,SAAgB,GAAG,MAAM,CAS7E"}
|
package/dist/pem.js
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Copyright 2023 The Sigstore Authors.
|
|
3
|
+
|
|
4
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
you may not use this file except in compliance with the License.
|
|
6
|
+
You may obtain a copy of the License at
|
|
7
|
+
|
|
8
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
|
|
10
|
+
Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
See the License for the specific language governing permissions and
|
|
14
|
+
limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import { base64ToUint8Array, Uint8ArrayToBase64 } from "./encoding.js";
|
|
17
|
+
const PEM_HEADER = /-----BEGIN (.*)-----/;
|
|
18
|
+
const PEM_FOOTER = /-----END (.*)-----/;
|
|
19
|
+
export function toDER(certificate) {
|
|
20
|
+
let der = "";
|
|
21
|
+
certificate.split("\n").forEach((line) => {
|
|
22
|
+
if (line.match(PEM_HEADER) || line.match(PEM_FOOTER)) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
der += line;
|
|
26
|
+
});
|
|
27
|
+
return base64ToUint8Array(der);
|
|
28
|
+
}
|
|
29
|
+
// Translates a DER-encoded buffer into a PEM-encoded string. Standard PEM
|
|
30
|
+
// encoding dictates that each certificate should have a trailing newline after
|
|
31
|
+
// the footer.
|
|
32
|
+
export function fromDER(certificate, type = "CERTIFICATE") {
|
|
33
|
+
// Base64-encode the certificate.
|
|
34
|
+
const der = Uint8ArrayToBase64(certificate);
|
|
35
|
+
// Split the certificate into lines of 64 characters.
|
|
36
|
+
const lines = der.match(/.{1,64}/g) || "";
|
|
37
|
+
return [`-----BEGIN ${type}-----`, ...lines, `-----END ${type}-----`]
|
|
38
|
+
.join("\n")
|
|
39
|
+
.concat("\n");
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=pem.js.map
|
package/dist/pem.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pem.js","sourceRoot":"","sources":["../src/pem.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;EAcE;AAEF,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEvE,MAAM,UAAU,GAAG,sBAAsB,CAAC;AAC1C,MAAM,UAAU,GAAG,oBAAoB,CAAC;AAExC,MAAM,UAAU,KAAK,CAAC,WAAmB;IACvC,IAAI,GAAG,GAAG,EAAE,CAAC;IAEb,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACvC,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;YACrD,OAAO;QACT,CAAC;QAED,GAAG,IAAI,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,OAAO,kBAAkB,CAAC,GAAG,CAAC,CAAC;AACjC,CAAC;AAED,0EAA0E;AAC1E,+EAA+E;AAC/E,cAAc;AACd,MAAM,UAAU,OAAO,CAAC,WAAuB,EAAE,IAAI,GAAG,aAAa;IACnE,iCAAiC;IACjC,MAAM,GAAG,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAC5C,qDAAqD;IACrD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;IAE1C,OAAO,CAAC,cAAc,IAAI,OAAO,EAAE,GAAG,KAAK,EAAE,YAAY,IAAI,OAAO,CAAC;SAClE,IAAI,CAAC,IAAI,CAAC;SACV,MAAM,CAAC,IAAI,CAAC,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../src/rfc3161/error.ts"],"names":[],"mappings":"AAeA,qBAAa,iCAAkC,SAAQ,KAAK;CAAG"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Copyright 2023 The Sigstore Authors.
|
|
3
|
+
|
|
4
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
you may not use this file except in compliance with the License.
|
|
6
|
+
You may obtain a copy of the License at
|
|
7
|
+
|
|
8
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
|
|
10
|
+
Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
See the License for the specific language governing permissions and
|
|
14
|
+
limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
export class RFC3161TimestampVerificationError extends Error {
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error.js","sourceRoot":"","sources":["../../src/rfc3161/error.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;EAcE;AACF,MAAM,OAAO,iCAAkC,SAAQ,KAAK;CAAG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rfc3161/index.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Copyright 2023 The Sigstore Authors.
|
|
3
|
+
|
|
4
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
you may not use this file except in compliance with the License.
|
|
6
|
+
You may obtain a copy of the License at
|
|
7
|
+
|
|
8
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
|
|
10
|
+
Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
See the License for the specific language governing permissions and
|
|
14
|
+
limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
export { RFC3161Timestamp } from "./timestamp.js";
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rfc3161/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;EAcE;AAEF,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { ASN1Obj } from "../asn1/index.js";
|
|
2
|
+
import { TSTInfo } from "./tstinfo.js";
|
|
3
|
+
export declare class RFC3161Timestamp {
|
|
4
|
+
root: ASN1Obj;
|
|
5
|
+
constructor(asn1: ASN1Obj);
|
|
6
|
+
static parse(der: Uint8Array): RFC3161Timestamp;
|
|
7
|
+
get status(): bigint;
|
|
8
|
+
get contentType(): string;
|
|
9
|
+
get eContentType(): string;
|
|
10
|
+
get signingTime(): Date;
|
|
11
|
+
get signerIssuer(): Uint8Array;
|
|
12
|
+
get signerSerialNumber(): Uint8Array;
|
|
13
|
+
get signerDigestAlgorithm(): string;
|
|
14
|
+
get signatureAlgorithm(): string;
|
|
15
|
+
get signatureValue(): Uint8Array;
|
|
16
|
+
get tstInfo(): TSTInfo;
|
|
17
|
+
verify(data: Uint8Array, publicKey: CryptoKey): Promise<void>;
|
|
18
|
+
private verifyMessageDigest;
|
|
19
|
+
private verifySignature;
|
|
20
|
+
private get pkiStatusInfoObj();
|
|
21
|
+
private get timeStampTokenObj();
|
|
22
|
+
private get contentTypeObj();
|
|
23
|
+
private get signedDataObj();
|
|
24
|
+
private get encapContentInfoObj();
|
|
25
|
+
private get signerInfosObj();
|
|
26
|
+
private get signerInfoObj();
|
|
27
|
+
private get eContentTypeObj();
|
|
28
|
+
private get eContentObj();
|
|
29
|
+
private get signedAttrsObj();
|
|
30
|
+
private get messageDigestAttributeObj();
|
|
31
|
+
private get signerSidObj();
|
|
32
|
+
private get signerDigestAlgorithmObj();
|
|
33
|
+
private get signatureAlgorithmObj();
|
|
34
|
+
private get signatureValueObj();
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=timestamp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timestamp.d.ts","sourceRoot":"","sources":["../../src/rfc3161/timestamp.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAM3C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAMvC,qBAAa,gBAAgB;IACpB,IAAI,EAAE,OAAO,CAAC;gBAET,IAAI,EAAE,OAAO;WAIX,KAAK,CAAC,GAAG,EAAE,UAAU,GAAG,gBAAgB;IAKtD,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,IAAI,WAAW,IAAI,IAAI,CAEtB;IAED,IAAI,YAAY,IAAI,UAAU,CAE7B;IAED,IAAI,kBAAkB,IAAI,UAAU,CAEnC;IAED,IAAI,qBAAqB,IAAI,MAAM,CAOlC;IAED,IAAI,kBAAkB,IAAI,MAAM,CAI/B;IAED,IAAI,cAAc,IAAI,UAAU,CAE/B;IAED,IAAI,OAAO,IAAI,OAAO,CAGrB;IAEY,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;YA2B5D,mBAAmB;YAsBnB,eAAe;IA+B7B,OAAO,KAAK,gBAAgB,GAG3B;IAGD,OAAO,KAAK,iBAAiB,GAG5B;IAGD,OAAO,KAAK,cAAc,GAEzB;IAED,OAAO,KAAK,aAAa,GAUxB;IAGD,OAAO,KAAK,mBAAmB,GAE9B;IAGD,OAAO,KAAK,cAAc,GAIzB;IAGD,OAAO,KAAK,aAAa,GAGxB;IAGD,OAAO,KAAK,eAAe,GAE1B;IAGD,OAAO,KAAK,WAAW,GAEtB;IAGD,OAAO,KAAK,cAAc,GAQzB;IAGD,OAAO,KAAK,yBAAyB,GAUpC;IAGD,OAAO,KAAK,YAAY,GAEvB;IAGD,OAAO,KAAK,wBAAwB,GAGnC;IAGD,OAAO,KAAK,qBAAqB,GAGhC;IAGD,OAAO,KAAK,iBAAiB,GAG5B;CACF"}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Copyright 2023 The Sigstore Authors.
|
|
3
|
+
|
|
4
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
you may not use this file except in compliance with the License.
|
|
6
|
+
You may obtain a copy of the License at
|
|
7
|
+
|
|
8
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
|
|
10
|
+
Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
See the License for the specific language governing permissions and
|
|
14
|
+
limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import { ASN1Obj } from "../asn1/index.js";
|
|
17
|
+
import { bufferEqual, verifySignature } from "../crypto.js";
|
|
18
|
+
import { toArrayBuffer } from "../encoding.js";
|
|
19
|
+
import { HashAlgorithms } from "../interfaces.js";
|
|
20
|
+
import { ECDSA_SIGNATURE_ALGOS, RSA_SIGNATURE_ALGOS, SHA2_HASH_ALGOS } from "../oid.js";
|
|
21
|
+
import { RFC3161TimestampVerificationError } from "./error.js";
|
|
22
|
+
import { TSTInfo } from "./tstinfo.js";
|
|
23
|
+
const OID_PKCS9_CONTENT_TYPE_SIGNED_DATA = "1.2.840.113549.1.7.2";
|
|
24
|
+
const OID_PKCS9_CONTENT_TYPE_TSTINFO = "1.2.840.113549.1.9.16.1.4";
|
|
25
|
+
const OID_PKCS9_MESSAGE_DIGEST_KEY = "1.2.840.113549.1.9.4";
|
|
26
|
+
export class RFC3161Timestamp {
|
|
27
|
+
root;
|
|
28
|
+
constructor(asn1) {
|
|
29
|
+
this.root = asn1;
|
|
30
|
+
}
|
|
31
|
+
static parse(der) {
|
|
32
|
+
const asn1 = ASN1Obj.parseBuffer(der);
|
|
33
|
+
return new RFC3161Timestamp(asn1);
|
|
34
|
+
}
|
|
35
|
+
get status() {
|
|
36
|
+
return this.pkiStatusInfoObj.subs[0].toInteger();
|
|
37
|
+
}
|
|
38
|
+
get contentType() {
|
|
39
|
+
return this.contentTypeObj.toOID();
|
|
40
|
+
}
|
|
41
|
+
get eContentType() {
|
|
42
|
+
return this.eContentTypeObj.toOID();
|
|
43
|
+
}
|
|
44
|
+
get signingTime() {
|
|
45
|
+
return this.tstInfo.genTime;
|
|
46
|
+
}
|
|
47
|
+
get signerIssuer() {
|
|
48
|
+
return this.signerSidObj.subs[0].value;
|
|
49
|
+
}
|
|
50
|
+
get signerSerialNumber() {
|
|
51
|
+
return this.signerSidObj.subs[1].value;
|
|
52
|
+
}
|
|
53
|
+
get signerDigestAlgorithm() {
|
|
54
|
+
const oid = this.signerDigestAlgorithmObj.subs[0].toOID();
|
|
55
|
+
const algo = SHA2_HASH_ALGOS[oid];
|
|
56
|
+
if (!algo) {
|
|
57
|
+
throw new Error(`Unknown digest algorithm OID: ${oid}`);
|
|
58
|
+
}
|
|
59
|
+
return algo;
|
|
60
|
+
}
|
|
61
|
+
get signatureAlgorithm() {
|
|
62
|
+
const oid = this.signatureAlgorithmObj.subs[0].toOID();
|
|
63
|
+
const algo = ECDSA_SIGNATURE_ALGOS[oid] || RSA_SIGNATURE_ALGOS[oid];
|
|
64
|
+
return algo;
|
|
65
|
+
}
|
|
66
|
+
get signatureValue() {
|
|
67
|
+
return this.signatureValueObj.value;
|
|
68
|
+
}
|
|
69
|
+
get tstInfo() {
|
|
70
|
+
// Need to unpack tstInfo from an OCTET STRING
|
|
71
|
+
return new TSTInfo(this.eContentObj.subs[0].subs[0]);
|
|
72
|
+
}
|
|
73
|
+
async verify(data, publicKey) {
|
|
74
|
+
if (!this.timeStampTokenObj) {
|
|
75
|
+
throw new RFC3161TimestampVerificationError("timeStampToken is missing");
|
|
76
|
+
}
|
|
77
|
+
// Check for expected ContentInfo content type
|
|
78
|
+
if (this.contentType !== OID_PKCS9_CONTENT_TYPE_SIGNED_DATA) {
|
|
79
|
+
throw new RFC3161TimestampVerificationError(`incorrect content type: ${this.contentType}`);
|
|
80
|
+
}
|
|
81
|
+
// Check for expected encapsulated content type
|
|
82
|
+
if (this.eContentType !== OID_PKCS9_CONTENT_TYPE_TSTINFO) {
|
|
83
|
+
throw new RFC3161TimestampVerificationError(`incorrect encapsulated content type: ${this.eContentType}`);
|
|
84
|
+
}
|
|
85
|
+
// Check that the tstInfo references the correct artifact
|
|
86
|
+
await this.tstInfo.verify(data);
|
|
87
|
+
// Check that the signed message digest matches the tstInfo
|
|
88
|
+
await this.verifyMessageDigest();
|
|
89
|
+
// Check that the signature is valid for the signed attributes
|
|
90
|
+
await this.verifySignature(publicKey);
|
|
91
|
+
}
|
|
92
|
+
async verifyMessageDigest() {
|
|
93
|
+
// Check that the tstInfo matches the signed data
|
|
94
|
+
const hashAlg = this.signerDigestAlgorithm;
|
|
95
|
+
// Convert hash algorithm name to the format expected by WebCrypto
|
|
96
|
+
const hashAlgName = hashAlg === "sha256" ? HashAlgorithms.SHA256 :
|
|
97
|
+
hashAlg === "sha384" ? HashAlgorithms.SHA384 :
|
|
98
|
+
hashAlg === "sha512" ? HashAlgorithms.SHA512 : hashAlg;
|
|
99
|
+
const tstInfoDigest = await crypto.subtle.digest(hashAlgName, toArrayBuffer(this.tstInfo.raw));
|
|
100
|
+
const expectedDigest = this.messageDigestAttributeObj.subs[1].subs[0].value;
|
|
101
|
+
if (!bufferEqual(new Uint8Array(tstInfoDigest), expectedDigest)) {
|
|
102
|
+
throw new RFC3161TimestampVerificationError("signed data does not match tstInfo");
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
async verifySignature(key) {
|
|
106
|
+
// Encode the signed attributes for verification
|
|
107
|
+
const signedAttrs = this.signedAttrsObj.toDER();
|
|
108
|
+
signedAttrs[0] = 0x31; // Change context-specific tag to SET
|
|
109
|
+
const oid = this.signatureAlgorithmObj.subs[0].toOID();
|
|
110
|
+
// Try both ECDSA and RSA signature algorithms
|
|
111
|
+
const algo = ECDSA_SIGNATURE_ALGOS[oid] || RSA_SIGNATURE_ALGOS[oid];
|
|
112
|
+
if (!algo) {
|
|
113
|
+
throw new RFC3161TimestampVerificationError(`Unsupported signature algorithm OID: ${oid}`);
|
|
114
|
+
}
|
|
115
|
+
// Check that the signature is valid for the signed attributes
|
|
116
|
+
const verified = await verifySignature(key, signedAttrs, this.signatureValue, algo);
|
|
117
|
+
if (!verified) {
|
|
118
|
+
throw new RFC3161TimestampVerificationError("signature verification failed");
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
// https://www.rfc-editor.org/rfc/rfc3161#section-2.4.2
|
|
122
|
+
get pkiStatusInfoObj() {
|
|
123
|
+
// pkiStatusInfo is the first element of the timestamp response sequence
|
|
124
|
+
return this.root.subs[0];
|
|
125
|
+
}
|
|
126
|
+
// https://www.rfc-editor.org/rfc/rfc3161#section-2.4.2
|
|
127
|
+
get timeStampTokenObj() {
|
|
128
|
+
// timeStampToken is the first element of the timestamp response sequence
|
|
129
|
+
return this.root.subs[1];
|
|
130
|
+
}
|
|
131
|
+
// https://datatracker.ietf.org/doc/html/rfc5652#section-3
|
|
132
|
+
get contentTypeObj() {
|
|
133
|
+
return this.timeStampTokenObj.subs[0];
|
|
134
|
+
}
|
|
135
|
+
// https://www.rfc-editor.org/rfc/rfc5652#section-3
|
|
136
|
+
get signedDataObj() {
|
|
137
|
+
const obj = this.timeStampTokenObj.subs.find((sub) => sub.tag.isContextSpecific(0x00));
|
|
138
|
+
if (!obj) {
|
|
139
|
+
throw new RFC3161TimestampVerificationError("Missing timeStampTokenObj sub.");
|
|
140
|
+
}
|
|
141
|
+
return obj.subs[0];
|
|
142
|
+
}
|
|
143
|
+
// https://datatracker.ietf.org/doc/html/rfc5652#section-5.1
|
|
144
|
+
get encapContentInfoObj() {
|
|
145
|
+
return this.signedDataObj.subs[2];
|
|
146
|
+
}
|
|
147
|
+
// https://datatracker.ietf.org/doc/html/rfc5652#section-5.1
|
|
148
|
+
get signerInfosObj() {
|
|
149
|
+
// SignerInfos is the last element of the signed data sequence
|
|
150
|
+
const sd = this.signedDataObj;
|
|
151
|
+
return sd.subs[sd.subs.length - 1];
|
|
152
|
+
}
|
|
153
|
+
// https://www.rfc-editor.org/rfc/rfc5652#section-5.1
|
|
154
|
+
get signerInfoObj() {
|
|
155
|
+
// Only supporting one signer
|
|
156
|
+
return this.signerInfosObj.subs[0];
|
|
157
|
+
}
|
|
158
|
+
// https://datatracker.ietf.org/doc/html/rfc5652#section-5.2
|
|
159
|
+
get eContentTypeObj() {
|
|
160
|
+
return this.encapContentInfoObj.subs[0];
|
|
161
|
+
}
|
|
162
|
+
// https://datatracker.ietf.org/doc/html/rfc5652#section-5.2
|
|
163
|
+
get eContentObj() {
|
|
164
|
+
return this.encapContentInfoObj.subs[1];
|
|
165
|
+
}
|
|
166
|
+
// https://datatracker.ietf.org/doc/html/rfc5652#section-5.3
|
|
167
|
+
get signedAttrsObj() {
|
|
168
|
+
const signedAttrs = this.signerInfoObj.subs.find((sub) => sub.tag.isContextSpecific(0x00));
|
|
169
|
+
if (!signedAttrs) {
|
|
170
|
+
throw new RFC3161TimestampVerificationError("Missing signedAttrsObj.");
|
|
171
|
+
}
|
|
172
|
+
return signedAttrs;
|
|
173
|
+
}
|
|
174
|
+
// https://datatracker.ietf.org/doc/html/rfc5652#section-5.3
|
|
175
|
+
get messageDigestAttributeObj() {
|
|
176
|
+
const messageDigest = this.signedAttrsObj.subs.find((sub) => sub.subs[0].tag.isOID() &&
|
|
177
|
+
sub.subs[0].toOID() === OID_PKCS9_MESSAGE_DIGEST_KEY);
|
|
178
|
+
if (!messageDigest) {
|
|
179
|
+
throw new RFC3161TimestampVerificationError("Missing messageDigest.");
|
|
180
|
+
}
|
|
181
|
+
return messageDigest;
|
|
182
|
+
}
|
|
183
|
+
// https://datatracker.ietf.org/doc/html/rfc5652#section-5.3
|
|
184
|
+
get signerSidObj() {
|
|
185
|
+
return this.signerInfoObj.subs[1];
|
|
186
|
+
}
|
|
187
|
+
// https://datatracker.ietf.org/doc/html/rfc5652#section-5.3
|
|
188
|
+
get signerDigestAlgorithmObj() {
|
|
189
|
+
// Signature is the 2nd element of the signerInfoObj object
|
|
190
|
+
return this.signerInfoObj.subs[2];
|
|
191
|
+
}
|
|
192
|
+
// https://datatracker.ietf.org/doc/html/rfc5652#section-5.3
|
|
193
|
+
get signatureAlgorithmObj() {
|
|
194
|
+
// Signature is the 4th element of the signerInfoObj object
|
|
195
|
+
return this.signerInfoObj.subs[4];
|
|
196
|
+
}
|
|
197
|
+
// https://datatracker.ietf.org/doc/html/rfc5652#section-5.3
|
|
198
|
+
get signatureValueObj() {
|
|
199
|
+
// Signature is the 6th element of the signerInfoObj object
|
|
200
|
+
return this.signerInfoObj.subs[5];
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=timestamp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timestamp.js","sourceRoot":"","sources":["../../src/rfc3161/timestamp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ASN1Obj } from "../asn1/index.js";
|
|
2
|
+
export declare class TSTInfo {
|
|
3
|
+
root: ASN1Obj;
|
|
4
|
+
constructor(asn1: ASN1Obj);
|
|
5
|
+
get version(): bigint;
|
|
6
|
+
get genTime(): Date;
|
|
7
|
+
get messageImprintHashAlgorithm(): string;
|
|
8
|
+
get messageImprintHashedMessage(): Uint8Array;
|
|
9
|
+
get raw(): Uint8Array;
|
|
10
|
+
verify(data: Uint8Array): Promise<void>;
|
|
11
|
+
private get messageImprintObj();
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=tstinfo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tstinfo.d.ts","sourceRoot":"","sources":["../../src/rfc3161/tstinfo.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAO3C,qBAAa,OAAO;IACX,IAAI,EAAE,OAAO,CAAC;gBAET,IAAI,EAAE,OAAO;IAIzB,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,OAAO,IAAI,IAAI,CAElB;IAED,IAAI,2BAA2B,IAAI,MAAM,CAOxC;IAED,IAAI,2BAA2B,IAAI,UAAU,CAE5C;IAED,IAAI,GAAG,IAAI,UAAU,CAEpB;IAEY,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBpD,OAAO,KAAK,iBAAiB,GAE5B;CACF"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { bufferEqual } from "../crypto.js";
|
|
2
|
+
import { toArrayBuffer } from "../encoding.js";
|
|
3
|
+
import { HashAlgorithms } from "../interfaces.js";
|
|
4
|
+
import { SHA2_HASH_ALGOS } from "../oid.js";
|
|
5
|
+
import { RFC3161TimestampVerificationError } from "./error.js";
|
|
6
|
+
export class TSTInfo {
|
|
7
|
+
root;
|
|
8
|
+
constructor(asn1) {
|
|
9
|
+
this.root = asn1;
|
|
10
|
+
}
|
|
11
|
+
get version() {
|
|
12
|
+
return this.root.subs[0].toInteger();
|
|
13
|
+
}
|
|
14
|
+
get genTime() {
|
|
15
|
+
return this.root.subs[4].toDate();
|
|
16
|
+
}
|
|
17
|
+
get messageImprintHashAlgorithm() {
|
|
18
|
+
const oid = this.messageImprintObj.subs[0].subs[0].toOID();
|
|
19
|
+
const algo = SHA2_HASH_ALGOS[oid];
|
|
20
|
+
if (!algo) {
|
|
21
|
+
throw new Error(`Unknown message imprint hash algorithm OID: ${oid}`);
|
|
22
|
+
}
|
|
23
|
+
return algo;
|
|
24
|
+
}
|
|
25
|
+
get messageImprintHashedMessage() {
|
|
26
|
+
return this.messageImprintObj.subs[1].value;
|
|
27
|
+
}
|
|
28
|
+
get raw() {
|
|
29
|
+
return this.root.toDER();
|
|
30
|
+
}
|
|
31
|
+
async verify(data) {
|
|
32
|
+
const hashAlg = this.messageImprintHashAlgorithm;
|
|
33
|
+
// Convert hash algorithm name to the format expected by WebCrypto
|
|
34
|
+
const hashAlgName = hashAlg === "sha256" ? HashAlgorithms.SHA256 :
|
|
35
|
+
hashAlg === "sha384" ? HashAlgorithms.SHA384 :
|
|
36
|
+
hashAlg === "sha512" ? HashAlgorithms.SHA512 : hashAlg;
|
|
37
|
+
const digest = await crypto.subtle.digest(hashAlgName, toArrayBuffer(data));
|
|
38
|
+
if (!bufferEqual(new Uint8Array(digest), this.messageImprintHashedMessage)) {
|
|
39
|
+
throw new RFC3161TimestampVerificationError("message imprint does not match artifact");
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// https://www.rfc-editor.org/rfc/rfc3161#section-2.4.2
|
|
43
|
+
get messageImprintObj() {
|
|
44
|
+
return this.root.subs[2];
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=tstinfo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tstinfo.js","sourceRoot":"","sources":["../../src/rfc3161/tstinfo.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,iCAAiC,EAAE,MAAM,YAAY,CAAC;AAE/D,MAAM,OAAO,OAAO;IACX,IAAI,CAAU;IAErB,YAAY,IAAa;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;IACvC,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACpC,CAAC;IAED,IAAI,2BAA2B;QAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;QAC3D,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,+CAA+C,GAAG,EAAE,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,2BAA2B;QAC7B,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC9C,CAAC;IAED,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,IAAgB;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,2BAA2B,CAAC;QAEjD,kEAAkE;QAClE,MAAM,WAAW,GAAG,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YAC/C,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;gBAC9C,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;QAE1E,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CACvC,WAAW,EACX,aAAa,CAAC,IAAI,CAAC,CACpB,CAAC;QACF,IACE,CAAC,WAAW,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,2BAA2B,CAAC,EACtE,CAAC;YACD,MAAM,IAAI,iCAAiC,CACzC,yCAAyC,CAC1C,CAAC;QACJ,CAAC;IACH,CAAC;IAED,uDAAuD;IACvD,IAAY,iBAAiB;QAC3B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;CACF"}
|