@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,52 @@
|
|
|
1
|
+
import { ASN1Obj } from "../asn1/index.js";
|
|
2
|
+
import { X509AuthorityKeyIDExtension, X509BasicConstraintsExtension, X509Extension, X509FulcioIssuerV1, X509FulcioIssuerV2, X509KeyUsageExtension, X509SCTExtension, X509SubjectAlternativeNameExtension, X509SubjectKeyIDExtension } from "./ext.js";
|
|
3
|
+
export declare const EXTENSION_OID_SCT = "1.3.6.1.4.1.11129.2.4.2";
|
|
4
|
+
export declare class X509Certificate {
|
|
5
|
+
root: ASN1Obj;
|
|
6
|
+
constructor(asn1: ASN1Obj);
|
|
7
|
+
static parse(cert: Uint8Array | string): X509Certificate;
|
|
8
|
+
get tbsCertificate(): ASN1Obj;
|
|
9
|
+
get version(): string;
|
|
10
|
+
get serialNumber(): Uint8Array;
|
|
11
|
+
get notBefore(): Date;
|
|
12
|
+
get notAfter(): Date;
|
|
13
|
+
get issuer(): Uint8Array;
|
|
14
|
+
get subject(): Uint8Array;
|
|
15
|
+
get publicKey(): Uint8Array;
|
|
16
|
+
/**
|
|
17
|
+
* Import the public key with a specific hash algorithm for RSA keys
|
|
18
|
+
* For ECDSA keys, the hash parameter is ignored
|
|
19
|
+
*/
|
|
20
|
+
getPublicKeyObj(hashAlg?: string): Promise<CryptoKey>;
|
|
21
|
+
get publicKeyObj(): Promise<CryptoKey>;
|
|
22
|
+
get signatureAlgorithm(): string;
|
|
23
|
+
get signatureValue(): Uint8Array;
|
|
24
|
+
get subjectAltName(): string | undefined;
|
|
25
|
+
get extensions(): ASN1Obj[];
|
|
26
|
+
get extKeyUsage(): X509KeyUsageExtension | undefined;
|
|
27
|
+
get extBasicConstraints(): X509BasicConstraintsExtension | undefined;
|
|
28
|
+
get extSubjectAltName(): X509SubjectAlternativeNameExtension | undefined;
|
|
29
|
+
get extAuthorityKeyID(): X509AuthorityKeyIDExtension | undefined;
|
|
30
|
+
get extSubjectKeyID(): X509SubjectKeyIDExtension | undefined;
|
|
31
|
+
get extSCT(): X509SCTExtension | undefined;
|
|
32
|
+
get extFulcioIssuerV1(): X509FulcioIssuerV1 | undefined;
|
|
33
|
+
get extFulcioIssuerV2(): X509FulcioIssuerV2 | undefined;
|
|
34
|
+
get isCA(): boolean;
|
|
35
|
+
extension(oid: string): X509Extension | undefined;
|
|
36
|
+
verify(issuerCertificate?: X509Certificate): Promise<boolean>;
|
|
37
|
+
validForDate(date: Date): boolean;
|
|
38
|
+
equals(other: X509Certificate): boolean;
|
|
39
|
+
clone(): X509Certificate;
|
|
40
|
+
private findExtension;
|
|
41
|
+
private get tbsCertificateObj();
|
|
42
|
+
private get signatureAlgorithmObj();
|
|
43
|
+
private get signatureValueObj();
|
|
44
|
+
private get versionObj();
|
|
45
|
+
private get serialNumberObj();
|
|
46
|
+
private get issuerObj();
|
|
47
|
+
private get validityObj();
|
|
48
|
+
private get subjectObj();
|
|
49
|
+
private get subjectPublicKeyInfoObj();
|
|
50
|
+
private get extensionsObj();
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=cert.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cert.d.ts","sourceRoot":"","sources":["../../src/x509/cert.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAM3C,OAAO,EACL,2BAA2B,EAC3B,6BAA6B,EAC7B,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,EAChB,mCAAmC,EACnC,yBAAyB,EAC1B,MAAM,UAAU,CAAC;AAWlB,eAAO,MAAM,iBAAiB,4BAA4B,CAAC;AAE3D,qBAAa,eAAe;IACnB,IAAI,EAAE,OAAO,CAAC;gBAET,IAAI,EAAE,OAAO;WAIX,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,eAAe;IAM/D,IAAI,cAAc,IAAI,OAAO,CAE5B;IAED,IAAI,OAAO,IAAI,MAAM,CAIpB;IAED,IAAI,YAAY,IAAI,UAAU,CAE7B;IAED,IAAI,SAAS,IAAI,IAAI,CAGpB;IAED,IAAI,QAAQ,IAAI,IAAI,CAGnB;IAED,IAAI,MAAM,IAAI,UAAU,CAEvB;IAED,IAAI,OAAO,IAAI,UAAU,CAExB;IAED,IAAI,SAAS,IAAI,UAAU,CAE1B;IAED;;;OAGG;IACU,eAAe,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IA6BlE,IAAI,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC,CAErC;IAED,IAAI,kBAAkB,IAAI,MAAM,CAG/B;IAED,IAAI,cAAc,IAAI,UAAU,CAG/B;IAED,IAAI,cAAc,IAAI,MAAM,GAAG,SAAS,CAGvC;IAED,IAAI,UAAU,IAAI,OAAO,EAAE,CAK1B;IAED,IAAI,WAAW,IAAI,qBAAqB,GAAG,SAAS,CAGnD;IAED,IAAI,mBAAmB,IAAI,6BAA6B,GAAG,SAAS,CAGnE;IAED,IAAI,iBAAiB,IAAI,mCAAmC,GAAG,SAAS,CAGvE;IAED,IAAI,iBAAiB,IAAI,2BAA2B,GAAG,SAAS,CAG/D;IAED,IAAI,eAAe,IAAI,yBAAyB,GAAG,SAAS,CAK3D;IAED,IAAI,MAAM,IAAI,gBAAgB,GAAG,SAAS,CAGzC;IAED,IAAI,iBAAiB,IAAI,kBAAkB,GAAG,SAAS,CAGtD;IAED,IAAI,iBAAiB,IAAI,kBAAkB,GAAG,SAAS,CAGtD;IAED,IAAI,IAAI,IAAI,OAAO,CASlB;IAEM,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAK3C,MAAM,CAAC,iBAAiB,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC;IAoBnE,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO;IAIjC,MAAM,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO;IAKvC,KAAK,IAAI,eAAe;IAM/B,OAAO,CAAC,aAAa;IAYrB,OAAO,KAAK,iBAAiB,GAG5B;IAGD,OAAO,KAAK,qBAAqB,GAGhC;IAGD,OAAO,KAAK,iBAAiB,GAG5B;IAGD,OAAO,KAAK,UAAU,GAGrB;IAGD,OAAO,KAAK,eAAe,GAG1B;IAGD,OAAO,KAAK,SAAS,GAGpB;IAGD,OAAO,KAAK,WAAW,GAGtB;IAGD,OAAO,KAAK,UAAU,GAGrB;IAGD,OAAO,KAAK,uBAAuB,GAGlC;IAKD,OAAO,KAAK,aAAa,GAIxB;CACF"}
|
|
@@ -0,0 +1,256 @@
|
|
|
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, importKey, verifySignature } from "../crypto.js";
|
|
18
|
+
import { Uint8ArrayToBase64 } from "../encoding.js";
|
|
19
|
+
import { KeyTypes } from "../interfaces.js";
|
|
20
|
+
import { ECDSA_CURVE_NAMES, ECDSA_SIGNATURE_ALGOS, RSA_SIGNATURE_ALGOS } from "../oid.js";
|
|
21
|
+
import * as pem from "../pem.js";
|
|
22
|
+
import { X509AuthorityKeyIDExtension, X509BasicConstraintsExtension, X509Extension, X509FulcioIssuerV1, X509FulcioIssuerV2, X509KeyUsageExtension, X509SCTExtension, X509SubjectAlternativeNameExtension, X509SubjectKeyIDExtension, } from "./ext.js";
|
|
23
|
+
// https://github.com/sigstore/fulcio/blob/main/docs/oid-info.md
|
|
24
|
+
const EXTENSION_OID_SUBJECT_KEY_ID = "2.5.29.14";
|
|
25
|
+
const EXTENSION_OID_KEY_USAGE = "2.5.29.15";
|
|
26
|
+
const EXTENSION_OID_SUBJECT_ALT_NAME = "2.5.29.17";
|
|
27
|
+
const EXTENSION_OID_BASIC_CONSTRAINTS = "2.5.29.19";
|
|
28
|
+
const EXTENSION_OID_AUTHORITY_KEY_ID = "2.5.29.35";
|
|
29
|
+
const EXTENSION_OID_FULCIO_ISSUER_V1 = "1.3.6.1.4.1.57264.1.1";
|
|
30
|
+
const EXTENSION_OID_FULCIO_ISSUER_V2 = "1.3.6.1.4.1.57264.1.8";
|
|
31
|
+
export const EXTENSION_OID_SCT = "1.3.6.1.4.1.11129.2.4.2";
|
|
32
|
+
export class X509Certificate {
|
|
33
|
+
root;
|
|
34
|
+
constructor(asn1) {
|
|
35
|
+
this.root = asn1;
|
|
36
|
+
}
|
|
37
|
+
static parse(cert) {
|
|
38
|
+
const der = typeof cert === "string" ? pem.toDER(cert) : cert;
|
|
39
|
+
const asn1 = ASN1Obj.parseBuffer(der);
|
|
40
|
+
return new X509Certificate(asn1);
|
|
41
|
+
}
|
|
42
|
+
get tbsCertificate() {
|
|
43
|
+
return this.tbsCertificateObj;
|
|
44
|
+
}
|
|
45
|
+
get version() {
|
|
46
|
+
// version number is the first element of the version context specific tag
|
|
47
|
+
const ver = this.versionObj.subs[0].toInteger();
|
|
48
|
+
return `v${(ver + BigInt(1)).toString()}`;
|
|
49
|
+
}
|
|
50
|
+
get serialNumber() {
|
|
51
|
+
return this.serialNumberObj.value;
|
|
52
|
+
}
|
|
53
|
+
get notBefore() {
|
|
54
|
+
// notBefore is the first element of the validity sequence
|
|
55
|
+
return this.validityObj.subs[0].toDate();
|
|
56
|
+
}
|
|
57
|
+
get notAfter() {
|
|
58
|
+
// notAfter is the second element of the validity sequence
|
|
59
|
+
return this.validityObj.subs[1].toDate();
|
|
60
|
+
}
|
|
61
|
+
get issuer() {
|
|
62
|
+
return this.issuerObj.value;
|
|
63
|
+
}
|
|
64
|
+
get subject() {
|
|
65
|
+
return this.subjectObj.value;
|
|
66
|
+
}
|
|
67
|
+
get publicKey() {
|
|
68
|
+
return this.subjectPublicKeyInfoObj.toDER();
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Import the public key with a specific hash algorithm for RSA keys
|
|
72
|
+
* For ECDSA keys, the hash parameter is ignored
|
|
73
|
+
*/
|
|
74
|
+
async getPublicKeyObj(hashAlg) {
|
|
75
|
+
const publicKey = this.subjectPublicKeyInfoObj.toDER();
|
|
76
|
+
const spki = ASN1Obj.parseBuffer(publicKey);
|
|
77
|
+
const algorithmOID = spki.subs[0].subs[0].toOID();
|
|
78
|
+
// Check if it's an RSA key (OID 1.2.840.113549.1.1.1)
|
|
79
|
+
if (algorithmOID === "1.2.840.113549.1.1.1") {
|
|
80
|
+
// RSA key - use provided hash or default to SHA-256
|
|
81
|
+
const hash = hashAlg || "sha256";
|
|
82
|
+
let scheme;
|
|
83
|
+
if (hash.includes("384")) {
|
|
84
|
+
scheme = "SHA384";
|
|
85
|
+
}
|
|
86
|
+
else if (hash.includes("512")) {
|
|
87
|
+
scheme = "SHA512";
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
scheme = "SHA256";
|
|
91
|
+
}
|
|
92
|
+
return importKey("RSA", `RSA_PKCS1V5_${scheme}`, Uint8ArrayToBase64(publicKey));
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
// ECDSA key - the curve OID is in the second element
|
|
96
|
+
const curveOID = spki.subs[0].subs[1]?.toOID();
|
|
97
|
+
const curve = ECDSA_CURVE_NAMES[curveOID];
|
|
98
|
+
if (!curve) {
|
|
99
|
+
throw new Error(`Unknown ECDSA curve OID: ${curveOID}`);
|
|
100
|
+
}
|
|
101
|
+
return importKey(KeyTypes.Ecdsa, curve, Uint8ArrayToBase64(publicKey));
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
get publicKeyObj() {
|
|
105
|
+
return this.getPublicKeyObj();
|
|
106
|
+
}
|
|
107
|
+
get signatureAlgorithm() {
|
|
108
|
+
const oid = this.signatureAlgorithmObj.subs[0].toOID();
|
|
109
|
+
return ECDSA_SIGNATURE_ALGOS[oid];
|
|
110
|
+
}
|
|
111
|
+
get signatureValue() {
|
|
112
|
+
// Signature value is a bit string, so we need to skip the first byte
|
|
113
|
+
return this.signatureValueObj.value.subarray(1);
|
|
114
|
+
}
|
|
115
|
+
get subjectAltName() {
|
|
116
|
+
const ext = this.extSubjectAltName;
|
|
117
|
+
return ext?.uri || ext?.rfc822Name;
|
|
118
|
+
}
|
|
119
|
+
get extensions() {
|
|
120
|
+
// The extension list is the first (and only) element of the extensions
|
|
121
|
+
// context specific tag
|
|
122
|
+
const extSeq = this.extensionsObj?.subs[0];
|
|
123
|
+
return extSeq?.subs || /* istanbul ignore next */ [];
|
|
124
|
+
}
|
|
125
|
+
get extKeyUsage() {
|
|
126
|
+
const ext = this.findExtension(EXTENSION_OID_KEY_USAGE);
|
|
127
|
+
return ext ? new X509KeyUsageExtension(ext) : undefined;
|
|
128
|
+
}
|
|
129
|
+
get extBasicConstraints() {
|
|
130
|
+
const ext = this.findExtension(EXTENSION_OID_BASIC_CONSTRAINTS);
|
|
131
|
+
return ext ? new X509BasicConstraintsExtension(ext) : undefined;
|
|
132
|
+
}
|
|
133
|
+
get extSubjectAltName() {
|
|
134
|
+
const ext = this.findExtension(EXTENSION_OID_SUBJECT_ALT_NAME);
|
|
135
|
+
return ext ? new X509SubjectAlternativeNameExtension(ext) : undefined;
|
|
136
|
+
}
|
|
137
|
+
get extAuthorityKeyID() {
|
|
138
|
+
const ext = this.findExtension(EXTENSION_OID_AUTHORITY_KEY_ID);
|
|
139
|
+
return ext ? new X509AuthorityKeyIDExtension(ext) : undefined;
|
|
140
|
+
}
|
|
141
|
+
get extSubjectKeyID() {
|
|
142
|
+
const ext = this.findExtension(EXTENSION_OID_SUBJECT_KEY_ID);
|
|
143
|
+
return ext
|
|
144
|
+
? new X509SubjectKeyIDExtension(ext)
|
|
145
|
+
: /* istanbul ignore next */ undefined;
|
|
146
|
+
}
|
|
147
|
+
get extSCT() {
|
|
148
|
+
const ext = this.findExtension(EXTENSION_OID_SCT);
|
|
149
|
+
return ext ? new X509SCTExtension(ext) : undefined;
|
|
150
|
+
}
|
|
151
|
+
get extFulcioIssuerV1() {
|
|
152
|
+
const ext = this.findExtension(EXTENSION_OID_FULCIO_ISSUER_V1);
|
|
153
|
+
return ext ? new X509FulcioIssuerV1(ext) : undefined;
|
|
154
|
+
}
|
|
155
|
+
get extFulcioIssuerV2() {
|
|
156
|
+
const ext = this.findExtension(EXTENSION_OID_FULCIO_ISSUER_V2);
|
|
157
|
+
return ext ? new X509FulcioIssuerV2(ext) : undefined;
|
|
158
|
+
}
|
|
159
|
+
get isCA() {
|
|
160
|
+
const ca = this.extBasicConstraints?.isCA || false;
|
|
161
|
+
// If the KeyUsage extension is present, keyCertSign must be set
|
|
162
|
+
if (this.extKeyUsage) {
|
|
163
|
+
return ca && this.extKeyUsage.keyCertSign;
|
|
164
|
+
}
|
|
165
|
+
return ca;
|
|
166
|
+
}
|
|
167
|
+
extension(oid) {
|
|
168
|
+
const ext = this.findExtension(oid);
|
|
169
|
+
return ext ? new X509Extension(ext) : undefined;
|
|
170
|
+
}
|
|
171
|
+
async verify(issuerCertificate) {
|
|
172
|
+
// Extract the hash algorithm from this certificate's signature algorithm
|
|
173
|
+
// (not the issuer's own signature algorithm)
|
|
174
|
+
const sigAlgOID = this.signatureAlgorithmObj.subs[0].toOID();
|
|
175
|
+
const hashAlg = RSA_SIGNATURE_ALGOS[sigAlgOID] || ECDSA_SIGNATURE_ALGOS[sigAlgOID];
|
|
176
|
+
// Use the issuer's public key if provided, otherwise use the subject's (for self-signed certs)
|
|
177
|
+
// Import with the correct hash algorithm for this certificate's signature
|
|
178
|
+
const publicKeyObj = issuerCertificate
|
|
179
|
+
? await issuerCertificate.getPublicKeyObj(hashAlg)
|
|
180
|
+
: await this.getPublicKeyObj(hashAlg);
|
|
181
|
+
return await verifySignature(publicKeyObj, this.tbsCertificate.toDER(), this.signatureValue, this.signatureAlgorithm);
|
|
182
|
+
}
|
|
183
|
+
validForDate(date) {
|
|
184
|
+
return this.notBefore <= date && date <= this.notAfter;
|
|
185
|
+
}
|
|
186
|
+
equals(other) {
|
|
187
|
+
return bufferEqual(this.root.toDER(), other.root.toDER());
|
|
188
|
+
}
|
|
189
|
+
// Creates a copy of the certificate with a new buffer
|
|
190
|
+
clone() {
|
|
191
|
+
const der = this.root.toDER();
|
|
192
|
+
const clone = new Uint8Array(der);
|
|
193
|
+
return X509Certificate.parse(clone);
|
|
194
|
+
}
|
|
195
|
+
findExtension(oid) {
|
|
196
|
+
// Find the extension with the given OID. The OID will always be the first
|
|
197
|
+
// element of the extension sequence
|
|
198
|
+
return this.extensions.find((ext) => ext.subs[0].toOID() === oid);
|
|
199
|
+
}
|
|
200
|
+
/////////////////////////////////////////////////////////////////////////////
|
|
201
|
+
// The following properties use the documented x509 structure to locate the
|
|
202
|
+
// desired ASN.1 object
|
|
203
|
+
// https://www.rfc-editor.org/rfc/rfc5280#section-4.1
|
|
204
|
+
// https://www.rfc-editor.org/rfc/rfc5280#section-4.1.1.1
|
|
205
|
+
get tbsCertificateObj() {
|
|
206
|
+
// tbsCertificate is the first element of the certificate sequence
|
|
207
|
+
return this.root.subs[0];
|
|
208
|
+
}
|
|
209
|
+
// https://www.rfc-editor.org/rfc/rfc5280#section-4.1.1.2
|
|
210
|
+
get signatureAlgorithmObj() {
|
|
211
|
+
// signatureAlgorithm is the second element of the certificate sequence
|
|
212
|
+
return this.root.subs[1];
|
|
213
|
+
}
|
|
214
|
+
// https://www.rfc-editor.org/rfc/rfc5280#section-4.1.1.3
|
|
215
|
+
get signatureValueObj() {
|
|
216
|
+
// signatureValue is the third element of the certificate sequence
|
|
217
|
+
return this.root.subs[2];
|
|
218
|
+
}
|
|
219
|
+
// https://www.rfc-editor.org/rfc/rfc5280#section-4.1.2.1
|
|
220
|
+
get versionObj() {
|
|
221
|
+
// version is the first element of the tbsCertificate sequence
|
|
222
|
+
return this.tbsCertificateObj.subs[0];
|
|
223
|
+
}
|
|
224
|
+
// https://www.rfc-editor.org/rfc/rfc5280#section-4.1.2.2
|
|
225
|
+
get serialNumberObj() {
|
|
226
|
+
// serialNumber is the second element of the tbsCertificate sequence
|
|
227
|
+
return this.tbsCertificateObj.subs[1];
|
|
228
|
+
}
|
|
229
|
+
// https://www.rfc-editor.org/rfc/rfc5280#section-4.1.2.4
|
|
230
|
+
get issuerObj() {
|
|
231
|
+
// issuer is the fourth element of the tbsCertificate sequence
|
|
232
|
+
return this.tbsCertificateObj.subs[3];
|
|
233
|
+
}
|
|
234
|
+
// https://www.rfc-editor.org/rfc/rfc5280#section-4.1.2.5
|
|
235
|
+
get validityObj() {
|
|
236
|
+
// version is the fifth element of the tbsCertificate sequence
|
|
237
|
+
return this.tbsCertificateObj.subs[4];
|
|
238
|
+
}
|
|
239
|
+
// https://www.rfc-editor.org/rfc/rfc5280#section-4.1.2.6
|
|
240
|
+
get subjectObj() {
|
|
241
|
+
// subject is the sixth element of the tbsCertificate sequence
|
|
242
|
+
return this.tbsCertificateObj.subs[5];
|
|
243
|
+
}
|
|
244
|
+
// https://www.rfc-editor.org/rfc/rfc5280#section-4.1.2.7
|
|
245
|
+
get subjectPublicKeyInfoObj() {
|
|
246
|
+
// subjectPublicKeyInfo is the seventh element of the tbsCertificate sequence
|
|
247
|
+
return this.tbsCertificateObj.subs[6];
|
|
248
|
+
}
|
|
249
|
+
// Extensions can't be located by index because their position varies. Instead,
|
|
250
|
+
// we need to find the extensions context specific tag
|
|
251
|
+
// https://www.rfc-editor.org/rfc/rfc5280#section-4.1.2.9
|
|
252
|
+
get extensionsObj() {
|
|
253
|
+
return this.tbsCertificateObj.subs.find((sub) => sub.tag.isContextSpecific(0x03));
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
//# sourceMappingURL=cert.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cert.js","sourceRoot":"","sources":["../../src/x509/cert.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { X509Certificate } from "./cert.js";
|
|
2
|
+
interface CertificateChainVerifierOptions {
|
|
3
|
+
trustedCerts: X509Certificate[];
|
|
4
|
+
untrustedCert: X509Certificate;
|
|
5
|
+
timestamp: Date;
|
|
6
|
+
}
|
|
7
|
+
export declare class CertificateChainVerifier {
|
|
8
|
+
private untrustedCert;
|
|
9
|
+
private trustedCerts;
|
|
10
|
+
private localCerts;
|
|
11
|
+
private timestamp;
|
|
12
|
+
constructor(opts: CertificateChainVerifierOptions);
|
|
13
|
+
verify(): Promise<X509Certificate[]>;
|
|
14
|
+
private sort;
|
|
15
|
+
private buildPaths;
|
|
16
|
+
private findIssuer;
|
|
17
|
+
private checkPath;
|
|
18
|
+
}
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=chain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chain.d.ts","sourceRoot":"","sources":["../../src/x509/chain.ts"],"names":[],"mappings":"AA4BA,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAG5C,UAAU,+BAA+B;IACvC,YAAY,EAAE,eAAe,EAAE,CAAC;IAChC,aAAa,EAAE,eAAe,CAAC;IAC/B,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,qBAAa,wBAAwB;IACnC,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,YAAY,CAAoB;IACxC,OAAO,CAAC,UAAU,CAAoB;IACtC,OAAO,CAAC,SAAS,CAAO;gBAEZ,IAAI,EAAE,+BAA+B;IAUpC,MAAM,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;YAkBnC,IAAI;YAoBJ,UAAU;YA4BV,UAAU;IAkDxB,OAAO,CAAC,SAAS;CA8BlB"}
|
|
@@ -0,0 +1,141 @@
|
|
|
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 { bufferEqual } from "../crypto.js";
|
|
17
|
+
export class CertificateChainVerifier {
|
|
18
|
+
untrustedCert;
|
|
19
|
+
trustedCerts;
|
|
20
|
+
localCerts;
|
|
21
|
+
timestamp;
|
|
22
|
+
constructor(opts) {
|
|
23
|
+
this.untrustedCert = opts.untrustedCert;
|
|
24
|
+
this.trustedCerts = opts.trustedCerts;
|
|
25
|
+
this.localCerts = dedupeCertificates([
|
|
26
|
+
...opts.trustedCerts,
|
|
27
|
+
opts.untrustedCert,
|
|
28
|
+
]);
|
|
29
|
+
this.timestamp = opts.timestamp;
|
|
30
|
+
}
|
|
31
|
+
async verify() {
|
|
32
|
+
const certificatePath = await this.sort();
|
|
33
|
+
this.checkPath(certificatePath);
|
|
34
|
+
const validForDate = certificatePath.every((cert) => cert.validForDate(this.timestamp));
|
|
35
|
+
if (!validForDate) {
|
|
36
|
+
throw new Error("certificate is not valid or expired at the specified date");
|
|
37
|
+
}
|
|
38
|
+
return certificatePath;
|
|
39
|
+
}
|
|
40
|
+
async sort() {
|
|
41
|
+
const leafCert = this.untrustedCert;
|
|
42
|
+
let paths = await this.buildPaths(leafCert);
|
|
43
|
+
paths = paths.filter((path) => path.some((cert) => this.trustedCerts.includes(cert)));
|
|
44
|
+
if (paths.length === 0) {
|
|
45
|
+
throw new Error("no trusted certificate path found");
|
|
46
|
+
}
|
|
47
|
+
const path = paths.reduce((prev, curr) => prev.length < curr.length ? prev : curr);
|
|
48
|
+
return [leafCert, ...path].slice(0, -1);
|
|
49
|
+
}
|
|
50
|
+
async buildPaths(certificate) {
|
|
51
|
+
const paths = [];
|
|
52
|
+
const issuers = await this.findIssuer(certificate);
|
|
53
|
+
if (issuers.length === 0) {
|
|
54
|
+
throw new Error("no valid certificate path found");
|
|
55
|
+
}
|
|
56
|
+
for (let i = 0; i < issuers.length; i++) {
|
|
57
|
+
const issuer = issuers[i];
|
|
58
|
+
if (issuer.equals(certificate)) {
|
|
59
|
+
paths.push([certificate]);
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
const subPaths = await this.buildPaths(issuer);
|
|
63
|
+
for (let j = 0; j < subPaths.length; j++) {
|
|
64
|
+
paths.push([issuer, ...subPaths[j]]);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return paths;
|
|
68
|
+
}
|
|
69
|
+
async findIssuer(certificate) {
|
|
70
|
+
let issuers = [];
|
|
71
|
+
let keyIdentifier;
|
|
72
|
+
if (bufferEqual(certificate.subject, certificate.issuer)) {
|
|
73
|
+
if (await certificate.verify()) {
|
|
74
|
+
return [certificate];
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
if (certificate.extAuthorityKeyID) {
|
|
78
|
+
keyIdentifier = certificate.extAuthorityKeyID.keyIdentifier;
|
|
79
|
+
}
|
|
80
|
+
this.localCerts.forEach((possibleIssuer) => {
|
|
81
|
+
if (keyIdentifier) {
|
|
82
|
+
if (possibleIssuer.extSubjectKeyID) {
|
|
83
|
+
if (bufferEqual(possibleIssuer.extSubjectKeyID.keyIdentifier, keyIdentifier)) {
|
|
84
|
+
issuers.push(possibleIssuer);
|
|
85
|
+
}
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
if (bufferEqual(possibleIssuer.subject, certificate.issuer)) {
|
|
90
|
+
issuers.push(possibleIssuer);
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
const verifiedIssuers = [];
|
|
94
|
+
for (const issuer of issuers) {
|
|
95
|
+
try {
|
|
96
|
+
if (await certificate.verify(issuer)) {
|
|
97
|
+
verifiedIssuers.push(issuer);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
catch (ex) {
|
|
101
|
+
// Ignore verification failures
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return verifiedIssuers;
|
|
105
|
+
}
|
|
106
|
+
checkPath(path) {
|
|
107
|
+
if (path.length < 1) {
|
|
108
|
+
throw new Error("certificate chain must contain at least one certificate");
|
|
109
|
+
}
|
|
110
|
+
const validCAs = path.slice(1).every((cert) => cert.isCA);
|
|
111
|
+
if (!validCAs) {
|
|
112
|
+
throw new Error("intermediate certificate is not a CA");
|
|
113
|
+
}
|
|
114
|
+
for (let i = path.length - 2; i >= 0; i--) {
|
|
115
|
+
if (!bufferEqual(path[i].issuer, path[i + 1].subject)) {
|
|
116
|
+
throw new Error("incorrect certificate name chaining");
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
for (let i = 0; i < path.length; i++) {
|
|
120
|
+
const cert = path[i];
|
|
121
|
+
if (cert.extBasicConstraints?.isCA) {
|
|
122
|
+
const pathLength = cert.extBasicConstraints.pathLenConstraint;
|
|
123
|
+
if (pathLength !== undefined && pathLength < BigInt(i - 1)) {
|
|
124
|
+
throw new Error("path length constraint exceeded");
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
function dedupeCertificates(certs) {
|
|
131
|
+
for (let i = 0; i < certs.length; i++) {
|
|
132
|
+
for (let j = i + 1; j < certs.length; j++) {
|
|
133
|
+
if (certs[i].equals(certs[j])) {
|
|
134
|
+
certs.splice(j, 1);
|
|
135
|
+
j--;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return certs;
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=chain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chain.js","sourceRoot":"","sources":["../../src/x509/chain.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { ASN1Obj } from "../asn1/index.js";
|
|
2
|
+
import { SignedCertificateTimestamp } from "./sct.js";
|
|
3
|
+
export declare class X509Extension {
|
|
4
|
+
protected root: ASN1Obj;
|
|
5
|
+
constructor(asn1: ASN1Obj);
|
|
6
|
+
get oid(): string;
|
|
7
|
+
get critical(): boolean;
|
|
8
|
+
get value(): Uint8Array;
|
|
9
|
+
get valueObj(): ASN1Obj;
|
|
10
|
+
protected get extnValueObj(): ASN1Obj;
|
|
11
|
+
}
|
|
12
|
+
export declare class X509BasicConstraintsExtension extends X509Extension {
|
|
13
|
+
get isCA(): boolean;
|
|
14
|
+
get pathLenConstraint(): bigint | undefined;
|
|
15
|
+
private get sequence();
|
|
16
|
+
}
|
|
17
|
+
export declare class X509KeyUsageExtension extends X509Extension {
|
|
18
|
+
get digitalSignature(): boolean;
|
|
19
|
+
get keyCertSign(): boolean;
|
|
20
|
+
get crlSign(): boolean;
|
|
21
|
+
private get bitString();
|
|
22
|
+
}
|
|
23
|
+
export declare class X509SubjectAlternativeNameExtension extends X509Extension {
|
|
24
|
+
get rfc822Name(): string | undefined;
|
|
25
|
+
get uri(): string | undefined;
|
|
26
|
+
otherName(oid: string): string | undefined;
|
|
27
|
+
private findGeneralName;
|
|
28
|
+
private get generalNames();
|
|
29
|
+
}
|
|
30
|
+
export declare class X509AuthorityKeyIDExtension extends X509Extension {
|
|
31
|
+
get keyIdentifier(): Uint8Array | undefined;
|
|
32
|
+
private findSequenceMember;
|
|
33
|
+
private get sequence();
|
|
34
|
+
}
|
|
35
|
+
export declare class X509SubjectKeyIDExtension extends X509Extension {
|
|
36
|
+
get keyIdentifier(): Uint8Array;
|
|
37
|
+
}
|
|
38
|
+
export declare class X509FulcioIssuerV1 extends X509Extension {
|
|
39
|
+
get issuer(): string;
|
|
40
|
+
}
|
|
41
|
+
export declare class X509FulcioIssuerV2 extends X509Extension {
|
|
42
|
+
get issuer(): string;
|
|
43
|
+
}
|
|
44
|
+
export declare class X509SCTExtension extends X509Extension {
|
|
45
|
+
constructor(asn1: ASN1Obj);
|
|
46
|
+
get signedCertificateTimestamps(): SignedCertificateTimestamp[];
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=ext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ext.d.ts","sourceRoot":"","sources":["../../src/x509/ext.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAG3C,OAAO,EAAE,0BAA0B,EAAE,MAAM,UAAU,CAAC;AAGtD,qBAAa,aAAa;IACxB,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC;gBAEZ,IAAI,EAAE,OAAO;IAIzB,IAAI,GAAG,IAAI,MAAM,CAEhB;IAED,IAAI,QAAQ,IAAI,OAAO,CAItB;IAED,IAAI,KAAK,IAAI,UAAU,CAEtB;IAED,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,SAAS,KAAK,YAAY,IAAI,OAAO,CAGpC;CACF;AAGD,qBAAa,6BAA8B,SAAQ,aAAa;IAC9D,IAAI,IAAI,IAAI,OAAO,CAElB;IAED,IAAI,iBAAiB,IAAI,MAAM,GAAG,SAAS,CAI1C;IAID,OAAO,KAAK,QAAQ,GAEnB;CACF;AAGD,qBAAa,qBAAsB,SAAQ,aAAa;IACtD,IAAI,gBAAgB,IAAI,OAAO,CAE9B;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,IAAI,OAAO,IAAI,OAAO,CAErB;IAID,OAAO,KAAK,SAAS,GAEpB;CACF;AAGD,qBAAa,mCAAoC,SAAQ,aAAa;IACpE,IAAI,UAAU,IAAI,MAAM,GAAG,SAAS,CAOnC;IAED,IAAI,GAAG,IAAI,MAAM,GAAG,SAAS,CAO5B;IAGM,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAmBjD,OAAO,CAAC,eAAe;IAKvB,OAAO,KAAK,YAAY,GAEvB;CACF;AAGD,qBAAa,2BAA4B,SAAQ,aAAa;IAC5D,IAAI,aAAa,IAAI,UAAU,GAAG,SAAS,CAE1C;IAED,OAAO,CAAC,kBAAkB;IAK1B,OAAO,KAAK,QAAQ,GAEnB;CACF;AAGD,qBAAa,yBAA0B,SAAQ,aAAa;IAC1D,IAAI,aAAa,IAAI,UAAU,CAE9B;CACF;AAID,qBAAa,kBAAmB,SAAQ,aAAa;IACnD,IAAI,MAAM,IAAI,MAAM,CAEnB;CACF;AAID,qBAAa,kBAAmB,SAAQ,aAAa;IACnD,IAAI,MAAM,IAAI,MAAM,CAEnB;CACF;AAGD,qBAAa,gBAAiB,SAAQ,aAAa;gBACrC,IAAI,EAAE,OAAO;IAIzB,IAAI,2BAA2B,IAAI,0BAA0B,EAAE,CAuB9D;CACF"}
|