@super-protocol/pki-cert-generator 3.0.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.
@@ -0,0 +1,179 @@
1
+ import { Static } from '@sinclair/typebox';
2
+ import { ChallengeType } from '@super-protocol/pki-common';
3
+ declare const OwnChallengeSchema: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"auto">, import("@sinclair/typebox").TLiteral<ChallengeType.TDX>, import("@sinclair/typebox").TLiteral<ChallengeType.SEVSNP>, import("@sinclair/typebox").TLiteral<ChallengeType.Untrusted>]>;
4
+ declare const RootCertificateEntrySchema: import("@sinclair/typebox").TObject<{
5
+ certRole: import("@sinclair/typebox").TLiteral<"root">;
6
+ ownChallenge: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"auto">, import("@sinclair/typebox").TLiteral<ChallengeType.TDX>, import("@sinclair/typebox").TLiteral<ChallengeType.SEVSNP>, import("@sinclair/typebox").TLiteral<ChallengeType.Untrusted>]>;
7
+ networkType: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"trusted">, import("@sinclair/typebox").TLiteral<"untrusted">]>>;
8
+ id: import("@sinclair/typebox").TString;
9
+ certType: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"basic">, import("@sinclair/typebox").TLiteral<"lite">]>;
10
+ certParams: import("@sinclair/typebox").TObject<{
11
+ lifetimeDays: import("@sinclair/typebox").TNumber;
12
+ commonName: import("@sinclair/typebox").TString;
13
+ countryName: import("@sinclair/typebox").TString;
14
+ stateName: import("@sinclair/typebox").TString;
15
+ localityName: import("@sinclair/typebox").TString;
16
+ organizationName: import("@sinclair/typebox").TString;
17
+ organizationUnitName: import("@sinclair/typebox").TString;
18
+ alternativeDnsName: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
19
+ ocspUrl: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
20
+ }>;
21
+ outputPath: import("@sinclair/typebox").TString;
22
+ }>;
23
+ declare const SubrootCertificateEntrySchema: import("@sinclair/typebox").TObject<{
24
+ certRole: import("@sinclair/typebox").TLiteral<"subroot">;
25
+ signer: import("@sinclair/typebox").TString;
26
+ ownChallenge: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"auto">, import("@sinclair/typebox").TLiteral<ChallengeType.TDX>, import("@sinclair/typebox").TLiteral<ChallengeType.SEVSNP>, import("@sinclair/typebox").TLiteral<ChallengeType.Untrusted>]>>;
27
+ id: import("@sinclair/typebox").TString;
28
+ certType: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"basic">, import("@sinclair/typebox").TLiteral<"lite">]>;
29
+ certParams: import("@sinclair/typebox").TObject<{
30
+ lifetimeDays: import("@sinclair/typebox").TNumber;
31
+ commonName: import("@sinclair/typebox").TString;
32
+ countryName: import("@sinclair/typebox").TString;
33
+ stateName: import("@sinclair/typebox").TString;
34
+ localityName: import("@sinclair/typebox").TString;
35
+ organizationName: import("@sinclair/typebox").TString;
36
+ organizationUnitName: import("@sinclair/typebox").TString;
37
+ alternativeDnsName: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
38
+ ocspUrl: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
39
+ }>;
40
+ outputPath: import("@sinclair/typebox").TString;
41
+ }>;
42
+ declare const EntityCertificateEntrySchema: import("@sinclair/typebox").TObject<{
43
+ certRole: import("@sinclair/typebox").TLiteral<"endentity">;
44
+ signer: import("@sinclair/typebox").TString;
45
+ ownChallenge: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"auto">, import("@sinclair/typebox").TLiteral<ChallengeType.TDX>, import("@sinclair/typebox").TLiteral<ChallengeType.SEVSNP>, import("@sinclair/typebox").TLiteral<ChallengeType.Untrusted>]>;
46
+ id: import("@sinclair/typebox").TString;
47
+ certType: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"basic">, import("@sinclair/typebox").TLiteral<"lite">]>;
48
+ certParams: import("@sinclair/typebox").TObject<{
49
+ lifetimeDays: import("@sinclair/typebox").TNumber;
50
+ commonName: import("@sinclair/typebox").TString;
51
+ countryName: import("@sinclair/typebox").TString;
52
+ stateName: import("@sinclair/typebox").TString;
53
+ localityName: import("@sinclair/typebox").TString;
54
+ organizationName: import("@sinclair/typebox").TString;
55
+ organizationUnitName: import("@sinclair/typebox").TString;
56
+ alternativeDnsName: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
57
+ ocspUrl: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
58
+ }>;
59
+ outputPath: import("@sinclair/typebox").TString;
60
+ }>;
61
+ declare const ChainCertificateEntrySchema: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
62
+ certRole: import("@sinclair/typebox").TLiteral<"root">;
63
+ ownChallenge: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"auto">, import("@sinclair/typebox").TLiteral<ChallengeType.TDX>, import("@sinclair/typebox").TLiteral<ChallengeType.SEVSNP>, import("@sinclair/typebox").TLiteral<ChallengeType.Untrusted>]>;
64
+ networkType: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"trusted">, import("@sinclair/typebox").TLiteral<"untrusted">]>>;
65
+ id: import("@sinclair/typebox").TString;
66
+ certType: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"basic">, import("@sinclair/typebox").TLiteral<"lite">]>;
67
+ certParams: import("@sinclair/typebox").TObject<{
68
+ lifetimeDays: import("@sinclair/typebox").TNumber;
69
+ commonName: import("@sinclair/typebox").TString;
70
+ countryName: import("@sinclair/typebox").TString;
71
+ stateName: import("@sinclair/typebox").TString;
72
+ localityName: import("@sinclair/typebox").TString;
73
+ organizationName: import("@sinclair/typebox").TString;
74
+ organizationUnitName: import("@sinclair/typebox").TString;
75
+ alternativeDnsName: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
76
+ ocspUrl: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
77
+ }>;
78
+ outputPath: import("@sinclair/typebox").TString;
79
+ }>, import("@sinclair/typebox").TObject<{
80
+ certRole: import("@sinclair/typebox").TLiteral<"subroot">;
81
+ signer: import("@sinclair/typebox").TString;
82
+ ownChallenge: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"auto">, import("@sinclair/typebox").TLiteral<ChallengeType.TDX>, import("@sinclair/typebox").TLiteral<ChallengeType.SEVSNP>, import("@sinclair/typebox").TLiteral<ChallengeType.Untrusted>]>>;
83
+ id: import("@sinclair/typebox").TString;
84
+ certType: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"basic">, import("@sinclair/typebox").TLiteral<"lite">]>;
85
+ certParams: import("@sinclair/typebox").TObject<{
86
+ lifetimeDays: import("@sinclair/typebox").TNumber;
87
+ commonName: import("@sinclair/typebox").TString;
88
+ countryName: import("@sinclair/typebox").TString;
89
+ stateName: import("@sinclair/typebox").TString;
90
+ localityName: import("@sinclair/typebox").TString;
91
+ organizationName: import("@sinclair/typebox").TString;
92
+ organizationUnitName: import("@sinclair/typebox").TString;
93
+ alternativeDnsName: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
94
+ ocspUrl: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
95
+ }>;
96
+ outputPath: import("@sinclair/typebox").TString;
97
+ }>, import("@sinclair/typebox").TObject<{
98
+ certRole: import("@sinclair/typebox").TLiteral<"endentity">;
99
+ signer: import("@sinclair/typebox").TString;
100
+ ownChallenge: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"auto">, import("@sinclair/typebox").TLiteral<ChallengeType.TDX>, import("@sinclair/typebox").TLiteral<ChallengeType.SEVSNP>, import("@sinclair/typebox").TLiteral<ChallengeType.Untrusted>]>;
101
+ id: import("@sinclair/typebox").TString;
102
+ certType: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"basic">, import("@sinclair/typebox").TLiteral<"lite">]>;
103
+ certParams: import("@sinclair/typebox").TObject<{
104
+ lifetimeDays: import("@sinclair/typebox").TNumber;
105
+ commonName: import("@sinclair/typebox").TString;
106
+ countryName: import("@sinclair/typebox").TString;
107
+ stateName: import("@sinclair/typebox").TString;
108
+ localityName: import("@sinclair/typebox").TString;
109
+ organizationName: import("@sinclair/typebox").TString;
110
+ organizationUnitName: import("@sinclair/typebox").TString;
111
+ alternativeDnsName: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
112
+ ocspUrl: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
113
+ }>;
114
+ outputPath: import("@sinclair/typebox").TString;
115
+ }>]>;
116
+ declare const ChainConfigSchema: import("@sinclair/typebox").TObject<{
117
+ certificates: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
118
+ certRole: import("@sinclair/typebox").TLiteral<"root">;
119
+ ownChallenge: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"auto">, import("@sinclair/typebox").TLiteral<ChallengeType.TDX>, import("@sinclair/typebox").TLiteral<ChallengeType.SEVSNP>, import("@sinclair/typebox").TLiteral<ChallengeType.Untrusted>]>;
120
+ networkType: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"trusted">, import("@sinclair/typebox").TLiteral<"untrusted">]>>;
121
+ id: import("@sinclair/typebox").TString;
122
+ certType: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"basic">, import("@sinclair/typebox").TLiteral<"lite">]>;
123
+ certParams: import("@sinclair/typebox").TObject<{
124
+ lifetimeDays: import("@sinclair/typebox").TNumber;
125
+ commonName: import("@sinclair/typebox").TString;
126
+ countryName: import("@sinclair/typebox").TString;
127
+ stateName: import("@sinclair/typebox").TString;
128
+ localityName: import("@sinclair/typebox").TString;
129
+ organizationName: import("@sinclair/typebox").TString;
130
+ organizationUnitName: import("@sinclair/typebox").TString;
131
+ alternativeDnsName: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
132
+ ocspUrl: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
133
+ }>;
134
+ outputPath: import("@sinclair/typebox").TString;
135
+ }>, import("@sinclair/typebox").TObject<{
136
+ certRole: import("@sinclair/typebox").TLiteral<"subroot">;
137
+ signer: import("@sinclair/typebox").TString;
138
+ ownChallenge: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"auto">, import("@sinclair/typebox").TLiteral<ChallengeType.TDX>, import("@sinclair/typebox").TLiteral<ChallengeType.SEVSNP>, import("@sinclair/typebox").TLiteral<ChallengeType.Untrusted>]>>;
139
+ id: import("@sinclair/typebox").TString;
140
+ certType: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"basic">, import("@sinclair/typebox").TLiteral<"lite">]>;
141
+ certParams: import("@sinclair/typebox").TObject<{
142
+ lifetimeDays: import("@sinclair/typebox").TNumber;
143
+ commonName: import("@sinclair/typebox").TString;
144
+ countryName: import("@sinclair/typebox").TString;
145
+ stateName: import("@sinclair/typebox").TString;
146
+ localityName: import("@sinclair/typebox").TString;
147
+ organizationName: import("@sinclair/typebox").TString;
148
+ organizationUnitName: import("@sinclair/typebox").TString;
149
+ alternativeDnsName: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
150
+ ocspUrl: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
151
+ }>;
152
+ outputPath: import("@sinclair/typebox").TString;
153
+ }>, import("@sinclair/typebox").TObject<{
154
+ certRole: import("@sinclair/typebox").TLiteral<"endentity">;
155
+ signer: import("@sinclair/typebox").TString;
156
+ ownChallenge: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"auto">, import("@sinclair/typebox").TLiteral<ChallengeType.TDX>, import("@sinclair/typebox").TLiteral<ChallengeType.SEVSNP>, import("@sinclair/typebox").TLiteral<ChallengeType.Untrusted>]>;
157
+ id: import("@sinclair/typebox").TString;
158
+ certType: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"basic">, import("@sinclair/typebox").TLiteral<"lite">]>;
159
+ certParams: import("@sinclair/typebox").TObject<{
160
+ lifetimeDays: import("@sinclair/typebox").TNumber;
161
+ commonName: import("@sinclair/typebox").TString;
162
+ countryName: import("@sinclair/typebox").TString;
163
+ stateName: import("@sinclair/typebox").TString;
164
+ localityName: import("@sinclair/typebox").TString;
165
+ organizationName: import("@sinclair/typebox").TString;
166
+ organizationUnitName: import("@sinclair/typebox").TString;
167
+ alternativeDnsName: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
168
+ ocspUrl: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
169
+ }>;
170
+ outputPath: import("@sinclair/typebox").TString;
171
+ }>]>>;
172
+ }>;
173
+ export type OwnChallenge = Static<typeof OwnChallengeSchema>;
174
+ export type RootCertificateEntry = Static<typeof RootCertificateEntrySchema>;
175
+ export type SubrootCertificateEntry = Static<typeof SubrootCertificateEntrySchema>;
176
+ export type EntityCertificateEntry = Static<typeof EntityCertificateEntrySchema>;
177
+ export type ChainCertificateEntry = Static<typeof ChainCertificateEntrySchema>;
178
+ export type ChainConfig = Static<typeof ChainConfigSchema>;
179
+ export { ChainConfigSchema };
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ChainConfigSchema = void 0;
4
+ const typebox_1 = require("@sinclair/typebox");
5
+ const pki_common_1 = require("@super-protocol/pki-common");
6
+ const OwnChallengeSchema = typebox_1.Type.Union([
7
+ typebox_1.Type.Literal('auto'),
8
+ typebox_1.Type.Literal(pki_common_1.ChallengeType.TDX),
9
+ typebox_1.Type.Literal(pki_common_1.ChallengeType.SEVSNP),
10
+ typebox_1.Type.Literal(pki_common_1.ChallengeType.Untrusted),
11
+ ]);
12
+ const BaseCertificateFields = {
13
+ id: typebox_1.Type.String(),
14
+ certType: pki_common_1.CertificateTypeSchema,
15
+ certParams: pki_common_1.PkiCertParamsSchema,
16
+ outputPath: typebox_1.Type.String(),
17
+ };
18
+ const RootCertificateEntrySchema = typebox_1.Type.Object({
19
+ ...BaseCertificateFields,
20
+ certRole: typebox_1.Type.Literal('root'),
21
+ ownChallenge: OwnChallengeSchema,
22
+ networkType: typebox_1.Type.Optional(typebox_1.Type.Union(pki_common_1.NetworkTypeSchema.anyOf, { default: 'trusted' })),
23
+ });
24
+ const SubrootCertificateEntrySchema = typebox_1.Type.Object({
25
+ ...BaseCertificateFields,
26
+ certRole: typebox_1.Type.Literal('subroot'),
27
+ signer: typebox_1.Type.String(),
28
+ ownChallenge: typebox_1.Type.Optional(OwnChallengeSchema),
29
+ });
30
+ const EntityCertificateEntrySchema = typebox_1.Type.Object({
31
+ ...BaseCertificateFields,
32
+ certRole: typebox_1.Type.Literal('endentity'),
33
+ signer: typebox_1.Type.String(),
34
+ ownChallenge: OwnChallengeSchema,
35
+ });
36
+ const ChainCertificateEntrySchema = typebox_1.Type.Union([
37
+ RootCertificateEntrySchema,
38
+ SubrootCertificateEntrySchema,
39
+ EntityCertificateEntrySchema,
40
+ ]);
41
+ const ChainConfigSchema = typebox_1.Type.Object({
42
+ certificates: typebox_1.Type.Array(ChainCertificateEntrySchema, { minItems: 1 }),
43
+ });
44
+ exports.ChainConfigSchema = ChainConfigSchema;
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhaW5Db25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY2hhaW5Db25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0NBQWlEO0FBQ2pELDJEQUtvQztBQUVwQyxNQUFNLGtCQUFrQixHQUFHLGNBQUksQ0FBQyxLQUFLLENBQUM7SUFDbEMsY0FBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7SUFDcEIsY0FBSSxDQUFDLE9BQU8sQ0FBQywwQkFBYSxDQUFDLEdBQUcsQ0FBQztJQUMvQixjQUFJLENBQUMsT0FBTyxDQUFDLDBCQUFhLENBQUMsTUFBTSxDQUFDO0lBQ2xDLGNBQUksQ0FBQyxPQUFPLENBQUMsMEJBQWEsQ0FBQyxTQUFTLENBQUM7Q0FDeEMsQ0FBQyxDQUFDO0FBRUgsTUFBTSxxQkFBcUIsR0FBRztJQUMxQixFQUFFLEVBQUUsY0FBSSxDQUFDLE1BQU0sRUFBRTtJQUNqQixRQUFRLEVBQUUsa0NBQXFCO0lBQy9CLFVBQVUsRUFBRSxnQ0FBbUI7SUFDL0IsVUFBVSxFQUFFLGNBQUksQ0FBQyxNQUFNLEVBQUU7Q0FDNUIsQ0FBQztBQUVGLE1BQU0sMEJBQTBCLEdBQUcsY0FBSSxDQUFDLE1BQU0sQ0FBQztJQUMzQyxHQUFHLHFCQUFxQjtJQUN4QixRQUFRLEVBQUUsY0FBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7SUFDOUIsWUFBWSxFQUFFLGtCQUFrQjtJQUNoQyxXQUFXLEVBQUUsY0FBSSxDQUFDLFFBQVEsQ0FDdEIsY0FBSSxDQUFDLEtBQUssQ0FBQyw4QkFBaUIsQ0FBQyxLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FDOUQ7Q0FDSixDQUFDLENBQUM7QUFFSCxNQUFNLDZCQUE2QixHQUFHLGNBQUksQ0FBQyxNQUFNLENBQUM7SUFDOUMsR0FBRyxxQkFBcUI7SUFDeEIsUUFBUSxFQUFFLGNBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO0lBQ2pDLE1BQU0sRUFBRSxjQUFJLENBQUMsTUFBTSxFQUFFO0lBQ3JCLFlBQVksRUFBRSxjQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDO0NBQ2xELENBQUMsQ0FBQztBQUVILE1BQU0sNEJBQTRCLEdBQUcsY0FBSSxDQUFDLE1BQU0sQ0FBQztJQUM3QyxHQUFHLHFCQUFxQjtJQUN4QixRQUFRLEVBQUUsY0FBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7SUFDbkMsTUFBTSxFQUFFLGNBQUksQ0FBQyxNQUFNLEVBQUU7SUFDckIsWUFBWSxFQUFFLGtCQUFrQjtDQUNuQyxDQUFDLENBQUM7QUFFSCxNQUFNLDJCQUEyQixHQUFHLGNBQUksQ0FBQyxLQUFLLENBQUM7SUFDM0MsMEJBQTBCO0lBQzFCLDZCQUE2QjtJQUM3Qiw0QkFBNEI7Q0FDL0IsQ0FBQyxDQUFDO0FBRUgsTUFBTSxpQkFBaUIsR0FBRyxjQUFJLENBQUMsTUFBTSxDQUFDO0lBQ2xDLFlBQVksRUFBRSxjQUFJLENBQUMsS0FBSyxDQUFDLDJCQUEyQixFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3pFLENBQUMsQ0FBQztBQWFNLDhDQUFpQiJ9
@@ -0,0 +1,17 @@
1
+ import { Log } from '@super-protocol/pki-common';
2
+ import { ChainConfig } from './chainConfig';
3
+ export declare class ChainGenerator {
4
+ private readonly logger?;
5
+ private readonly generated;
6
+ private readonly levelMatch;
7
+ constructor(logger?: Log | undefined);
8
+ private static resolveOwnChallenge;
9
+ private createChallengeProvider;
10
+ private static generateKeyPair;
11
+ private static buildDomains;
12
+ private resolveSubrootCommonName;
13
+ private static writeOutputFiles;
14
+ private processRootCertificate;
15
+ private processSignedCertificate;
16
+ generate(config: ChainConfig): Promise<void>;
17
+ }
@@ -0,0 +1,203 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.ChainGenerator = void 0;
27
+ const fs = __importStar(require("fs"));
28
+ const path = __importStar(require("path"));
29
+ const crypto_1 = require("crypto");
30
+ const pki_common_1 = require("@super-protocol/pki-common");
31
+ const pki_attestation_engine_1 = require("@super-protocol/pki-attestation-engine");
32
+ class ChainGenerator {
33
+ logger;
34
+ generated = new Map();
35
+ levelMatch = /Level\s*(\d+)/;
36
+ constructor(logger) {
37
+ this.logger = logger;
38
+ }
39
+ static resolveOwnChallenge(ownChallenge) {
40
+ if (ownChallenge === 'auto') {
41
+ return (0, pki_common_1.detectCpuType)();
42
+ }
43
+ return ownChallenge;
44
+ }
45
+ createChallengeProvider(ownChallenge) {
46
+ const resolved = ChainGenerator.resolveOwnChallenge(ownChallenge);
47
+ switch (resolved) {
48
+ case pki_common_1.ChallengeType.TDX:
49
+ return new pki_attestation_engine_1.ChallengeProviderTdx(this.logger);
50
+ case pki_common_1.ChallengeType.SEVSNP:
51
+ return new pki_attestation_engine_1.ChallengeProviderSevSnp(this.logger);
52
+ case pki_common_1.ChallengeType.Untrusted:
53
+ return new pki_attestation_engine_1.ChallengeProviderUntrusted((0, crypto_1.randomBytes)(32), this.logger);
54
+ default:
55
+ throw new Error(`Unsupported challenge type: ${resolved}`);
56
+ }
57
+ }
58
+ static generateKeyPair(certType) {
59
+ return certType === pki_common_1.CertificateType.Basic
60
+ ? (0, pki_common_1.generateRsaKeyPair)()
61
+ : (0, pki_common_1.generateEcKeyPair)();
62
+ }
63
+ static buildDomains(certParams) {
64
+ const domains = [certParams.commonName];
65
+ if (certParams.alternativeDnsName) {
66
+ domains.push(certParams.alternativeDnsName);
67
+ }
68
+ return domains;
69
+ }
70
+ resolveSubrootCommonName(commonName, signerCommonName) {
71
+ if (this.levelMatch.test(commonName)) {
72
+ return commonName;
73
+ }
74
+ if (!signerCommonName.includes(commonName)) {
75
+ return `${commonName} Level 1`;
76
+ }
77
+ const signerLevelMatch = signerCommonName.match(this.levelMatch);
78
+ const signerLevelNumber = signerLevelMatch
79
+ ? parseInt(signerLevelMatch[1], 10)
80
+ : null;
81
+ if (!signerLevelNumber) {
82
+ throw new Error(`Can't find SubRoot level number in CA certificate`);
83
+ }
84
+ return `${commonName} Level ${signerLevelNumber + 1}`;
85
+ }
86
+ static writeOutputFiles(outputPath, id, privateKeyPem, certPem, caPem) {
87
+ fs.mkdirSync(outputPath, { recursive: true });
88
+ fs.writeFileSync(path.join(outputPath, `${id}_key.pem`), privateKeyPem);
89
+ fs.writeFileSync(path.join(outputPath, `${id}_cert.pem`), certPem);
90
+ if (caPem) {
91
+ fs.writeFileSync(path.join(outputPath, `${id}_ca.pem`), caPem);
92
+ }
93
+ }
94
+ async processRootCertificate(cert) {
95
+ const keyPair = ChainGenerator.generateKeyPair(cert.certType);
96
+ const publicKeyPem = (0, pki_common_1.getPublicKeyFromPrivate)(keyPair.privateKeyPem);
97
+ const domains = ChainGenerator.buildDomains(cert.certParams);
98
+ const challengeProvider = this.createChallengeProvider(cert.ownChallenge);
99
+ const challenge = await challengeProvider.generateChallenge((0, pki_common_1.getPublicKeyPemHash)(publicKeyPem));
100
+ const certPem = await (0, pki_attestation_engine_1.generateRootCertificate)({
101
+ domains,
102
+ privateKeyPem: keyPair.privateKeyPem,
103
+ publicKeyPem,
104
+ challenge,
105
+ certParams: cert.certParams,
106
+ networkType: cert.networkType,
107
+ });
108
+ ChainGenerator.writeOutputFiles(cert.outputPath, cert.id, keyPair.privateKeyPem, certPem);
109
+ this.logger?.info(`${cert.certRole} certificate generated: ${cert.id}`);
110
+ return {
111
+ certPem,
112
+ privateKeyPem: keyPair.privateKeyPem,
113
+ caBundle: certPem,
114
+ commonName: cert.certParams.commonName,
115
+ };
116
+ }
117
+ async processSignedCertificate(cert, signer) {
118
+ const keyPair = ChainGenerator.generateKeyPair(cert.certType);
119
+ const publicKeyPem = (0, pki_common_1.getPublicKeyFromPrivate)(keyPair.privateKeyPem);
120
+ const certParams = cert.certRole === 'subroot'
121
+ ? {
122
+ ...cert.certParams,
123
+ commonName: this.resolveSubrootCommonName(cert.certParams.commonName, signer.commonName),
124
+ }
125
+ : cert.certParams;
126
+ const domains = ChainGenerator.buildDomains(certParams);
127
+ let challengeInfo;
128
+ const ownChallenge = cert.ownChallenge;
129
+ if (ownChallenge) {
130
+ const challengeProvider = this.createChallengeProvider(ownChallenge);
131
+ const challenge = await challengeProvider.generateChallenge((0, pki_common_1.getPublicKeyPemHash)(publicKeyPem));
132
+ challengeInfo = {
133
+ challenge,
134
+ idHex: (0, pki_common_1.getPublicKeyPemHash)(publicKeyPem).toString('hex'),
135
+ };
136
+ }
137
+ const certType = cert.certType === pki_common_1.CertificateType.Basic
138
+ ? pki_common_1.CertificateType.Basic
139
+ : pki_common_1.CertificateType.Lite;
140
+ const generateFn = cert.certRole === 'subroot'
141
+ ? pki_attestation_engine_1.generateSubrootCertificate
142
+ : pki_attestation_engine_1.generateEndEntityCertificate;
143
+ const result = await generateFn({
144
+ certType,
145
+ domains,
146
+ caBundle: signer.caBundle,
147
+ signingCertPem: signer.certPem,
148
+ signingPrivateKeyPem: signer.privateKeyPem,
149
+ certParams,
150
+ publicKeyPem,
151
+ ocspSigning: false,
152
+ validated: cert.certRole === 'endentity' ? true : undefined,
153
+ challengeInfo,
154
+ });
155
+ const certs = (0, pki_common_1.splitCerts)(result.rootCertsPem).map((item) => item.trim());
156
+ if (certs.length === 0) {
157
+ throw new Error('Generated root certificates chain is empty');
158
+ }
159
+ const ca = `${certs[certs.length - 1]}\n`;
160
+ const intermediateChain = certs.slice(0, -1);
161
+ const certWithChain = [result.certPem.trim(), ...intermediateChain].join('\n') + '\n';
162
+ ChainGenerator.writeOutputFiles(cert.outputPath, cert.id, keyPair.privateKeyPem, certWithChain, ca);
163
+ this.logger?.info(`${cert.certRole} certificate generated: ${cert.id}`);
164
+ return {
165
+ certPem: result.certPem,
166
+ privateKeyPem: keyPair.privateKeyPem,
167
+ caBundle: result.rootCertsPem,
168
+ commonName: certParams.commonName,
169
+ };
170
+ }
171
+ async generate(config) {
172
+ this.generated.clear();
173
+ // Pass 1: Root certificates
174
+ const roots = config.certificates.filter((c) => c.certRole === 'root');
175
+ for (const cert of roots) {
176
+ const result = await this.processRootCertificate(cert);
177
+ this.generated.set(cert.id, result);
178
+ }
179
+ // Pass 2: Subroot certificates
180
+ const subroots = config.certificates.filter((c) => c.certRole === 'subroot');
181
+ for (const cert of subroots) {
182
+ const signer = this.generated.get(cert.signer);
183
+ if (!signer) {
184
+ throw new Error(`Signer "${cert.signer}" for certificate "${cert.id}" not found`);
185
+ }
186
+ const result = await this.processSignedCertificate(cert, signer);
187
+ this.generated.set(cert.id, result);
188
+ }
189
+ // Pass 3: End-entity certificates
190
+ const entities = config.certificates.filter((c) => c.certRole === 'endentity');
191
+ for (const cert of entities) {
192
+ const signer = this.generated.get(cert.signer);
193
+ if (!signer) {
194
+ throw new Error(`Signer "${cert.signer}" for certificate "${cert.id}" not found`);
195
+ }
196
+ const result = await this.processSignedCertificate(cert, signer);
197
+ this.generated.set(cert.id, result);
198
+ }
199
+ this.logger?.info(`Chain generation complete: ${this.generated.size} certificates generated`);
200
+ }
201
+ }
202
+ exports.ChainGenerator = ChainGenerator;
203
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhaW5HZW5lcmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY2hhaW5HZW5lcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx1Q0FBeUI7QUFDekIsMkNBQTZCO0FBQzdCLG1DQUFxQztBQUNyQywyREFhb0M7QUFDcEMsbUZBUWdEO0FBY2hELE1BQWEsY0FBYztJQUlNO0lBSFosU0FBUyxHQUFHLElBQUksR0FBRyxFQUFnQyxDQUFDO0lBQ3BELFVBQVUsR0FBRyxlQUFlLENBQUM7SUFFOUMsWUFBNkIsTUFBWTtRQUFaLFdBQU0sR0FBTixNQUFNLENBQU07SUFBRyxDQUFDO0lBRXJDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FDOUIsWUFBMEI7UUFFMUIsSUFBSSxZQUFZLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDMUIsT0FBTyxJQUFBLDBCQUFhLEdBQUUsQ0FBQztRQUMzQixDQUFDO1FBQ0QsT0FBTyxZQUFZLENBQUM7SUFDeEIsQ0FBQztJQUVPLHVCQUF1QixDQUMzQixZQUEwQjtRQUUxQixNQUFNLFFBQVEsR0FBRyxjQUFjLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFbEUsUUFBUSxRQUFRLEVBQUUsQ0FBQztZQUNmLEtBQUssMEJBQWEsQ0FBQyxHQUFHO2dCQUNsQixPQUFPLElBQUksNkNBQW9CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2pELEtBQUssMEJBQWEsQ0FBQyxNQUFNO2dCQUNyQixPQUFPLElBQUksZ0RBQXVCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3BELEtBQUssMEJBQWEsQ0FBQyxTQUFTO2dCQUN4QixPQUFPLElBQUksbURBQTBCLENBQ2pDLElBQUEsb0JBQVcsRUFBQyxFQUFFLENBQUMsRUFDZixJQUFJLENBQUMsTUFBTSxDQUNkLENBQUM7WUFDTjtnQkFDSSxNQUFNLElBQUksS0FBSyxDQUFD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
package/dist/cli.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
package/dist/cli.js ADDED
@@ -0,0 +1,48 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ const yargs_1 = __importDefault(require("yargs"));
8
+ const helpers_1 = require("yargs/helpers");
9
+ const pki_common_1 = require("@super-protocol/pki-common");
10
+ const configParser_1 = require("./configParser");
11
+ const chainGenerator_1 = require("./chainGenerator");
12
+ async function main() {
13
+ await (0, yargs_1.default)((0, helpers_1.hideBin)(process.argv))
14
+ .usage('Usage: $0 <command> [options]')
15
+ .option('log-level', {
16
+ alias: 'l',
17
+ describe: 'Log level: fatal, error, warn, info, debug, trace',
18
+ choices: Object.values(pki_common_1.LogLevel),
19
+ type: 'string',
20
+ })
21
+ .command('generate-chain', 'Generate a full certificate chain (root -> intermediate -> end-entity)', (yargs) => {
22
+ return yargs.option('config', {
23
+ alias: 'c',
24
+ describe: 'Path to chain configuration file (YAML/JSON)',
25
+ type: 'string',
26
+ demandOption: true,
27
+ });
28
+ }, async (argv) => {
29
+ const logger = argv.logLevel
30
+ ? new pki_common_1.CommonPinoLog(argv.logLevel)
31
+ : undefined;
32
+ const config = (0, configParser_1.parseChainConfig)(argv.config);
33
+ const generator = new chainGenerator_1.ChainGenerator(logger);
34
+ await generator.generate(config);
35
+ })
36
+ .demandCommand(1, 'You must provide a command')
37
+ .help()
38
+ .alias('help', 'h')
39
+ .version()
40
+ .alias('version', 'V')
41
+ .strict()
42
+ .parse();
43
+ }
44
+ main().catch((error) => {
45
+ console.error('Error:', error.message);
46
+ process.exit(1);
47
+ });
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSxrREFBMEI7QUFDMUIsMkNBQXdDO0FBQ3hDLDJEQUFxRTtBQUNyRSxpREFBa0Q7QUFDbEQscURBQWtEO0FBRWxELEtBQUssVUFBVSxJQUFJO0lBQ2YsTUFBTSxJQUFBLGVBQUssRUFBQyxJQUFBLGlCQUFPLEVBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzdCLEtBQUssQ0FBQywrQkFBK0IsQ0FBQztTQUN0QyxNQUFNLENBQUMsV0FBVyxFQUFFO1FBQ2pCLEtBQUssRUFBRSxHQUFHO1FBQ1YsUUFBUSxFQUFFLG1EQUFtRDtRQUM3RCxPQUFPLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxxQkFBUSxDQUFDO1FBQ2hDLElBQUksRUFBRSxRQUFRO0tBQ2pCLENBQUM7U0FDRCxPQUFPLENBQ0osZ0JBQWdCLEVBQ2hCLHdFQUF3RSxFQUN4RSxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ04sT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRTtZQUMxQixLQUFLLEVBQUUsR0FBRztZQUNWLFFBQVEsRUFBRSw4Q0FBOEM7WUFDeEQsSUFBSSxFQUFFLFFBQVE7WUFDZCxZQUFZLEVBQUUsSUFBSTtTQUNyQixDQUFDLENBQUM7SUFDUCxDQUFDLEVBQ0QsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO1FBQ1gsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVE7WUFDeEIsQ0FBQyxDQUFDLElBQUksMEJBQWEsQ0FBQyxJQUFJLENBQUMsUUFBb0IsQ0FBQztZQUM5QyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2hCLE1BQU0sTUFBTSxHQUFHLElBQUEsK0JBQWdCLEVBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdDLE1BQU0sU0FBUyxHQUFHLElBQUksK0JBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QyxNQUFNLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDckMsQ0FBQyxDQUNKO1NBQ0EsYUFBYSxDQUFDLENBQUMsRUFBRSw0QkFBNEIsQ0FBQztTQUM5QyxJQUFJLEVBQUU7U0FDTixLQUFLLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQztTQUNsQixPQUFPLEVBQUU7U0FDVCxLQUFLLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQztTQUNyQixNQUFNLEVBQUU7U0FDUixLQUFLLEVBQUUsQ0FBQztBQUNqQixDQUFDO0FBRUQsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7SUFDbkIsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEIsQ0FBQyxDQUFDLENBQUMifQ==
@@ -0,0 +1,2 @@
1
+ import { ChainConfig } from './chainConfig';
2
+ export declare function parseChainConfig(configPath: string): ChainConfig;
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.parseChainConfig = void 0;
27
+ const fs = __importStar(require("fs"));
28
+ const yaml = __importStar(require("js-yaml"));
29
+ const value_1 = require("@sinclair/typebox/value");
30
+ const chainConfig_1 = require("./chainConfig");
31
+ function parseChainConfig(configPath) {
32
+ if (!fs.existsSync(configPath)) {
33
+ throw new Error(`Config file not found: ${configPath}`);
34
+ }
35
+ const fileContent = fs.readFileSync(configPath, 'utf-8');
36
+ const parsed = yaml.load(fileContent, { schema: yaml.JSON_SCHEMA });
37
+ value_1.Value.Default(chainConfig_1.ChainConfigSchema, parsed);
38
+ if (!value_1.Value.Check(chainConfig_1.ChainConfigSchema, parsed)) {
39
+ const errors = [...value_1.Value.Errors(chainConfig_1.ChainConfigSchema, parsed)];
40
+ throw new Error(`Invalid config file: ${errors.map((e) => `${e.path}: ${e.message}`).join(', ')}`);
41
+ }
42
+ validateReferences(parsed);
43
+ return parsed;
44
+ }
45
+ exports.parseChainConfig = parseChainConfig;
46
+ function validateReferences(config) {
47
+ const ids = config.certificates.map((c) => c.id);
48
+ const duplicates = ids.filter((id, i, arr) => arr.indexOf(id) !== i);
49
+ if (duplicates.length > 0) {
50
+ throw new Error(`Duplicate certificate ids: ${duplicates.join(', ')}`);
51
+ }
52
+ const idSet = new Set(ids);
53
+ for (const cert of config.certificates) {
54
+ if (cert.certRole !== 'root') {
55
+ if (!idSet.has(cert.signer)) {
56
+ throw new Error(`Certificate "${cert.id}" references unknown signer "${cert.signer}"`);
57
+ }
58
+ validateSignerType(cert, config.certificates);
59
+ }
60
+ }
61
+ }
62
+ function validateSignerType(cert, certificates) {
63
+ const signer = certificates.find((c) => c.id === cert.signer);
64
+ if (!signer)
65
+ return;
66
+ if (cert.certRole === 'subroot' &&
67
+ signer.certRole !== 'root' &&
68
+ signer.certRole !== 'subroot') {
69
+ throw new Error(`Subroot certificate "${cert.id}" must be signed by a root or subroot certificate, but signer "${signer.id}" is "${signer.certRole}"`);
70
+ }
71
+ if (cert.certRole === 'endentity' && signer.certRole !== 'subroot') {
72
+ throw new Error(`Entity certificate "${cert.id}" must be signed by a subroot certificate, but signer "${signer.id}" is "${signer.certRole}"`);
73
+ }
74
+ }
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnUGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbmZpZ1BhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHVDQUF5QjtBQUN6Qiw4Q0FBZ0M7QUFDaEMsbURBQWdEO0FBQ2hELCtDQUl1QjtBQUV2QixTQUFnQixnQkFBZ0IsQ0FBQyxVQUFrQjtJQUMvQyxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3pELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBRXBFLGFBQUssQ0FBQyxPQUFPLENBQUMsK0JBQWlCLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFekMsSUFBSSxDQUFDLGFBQUssQ0FBQyxLQUFLLENBQUMsK0JBQWlCLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUMxQyxNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQUcsYUFBSyxDQUFDLE1BQU0sQ0FBQywrQkFBaUIsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQzVELE1BQU0sSUFBSSxLQUFLLENBQ1gsd0JBQXdCLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDcEYsQ0FBQztJQUNOLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUUzQixPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDO0FBcEJELDRDQW9CQztBQUVELFNBQVMsa0JBQWtCLENBQUMsTUFBbUI7SUFDM0MsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUVqRCxNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDckUsSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUUzQixLQUFLLE1BQU0sSUFBSSxJQUFJLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNyQyxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQzFCLE1BQU0sSUFBSSxLQUFLLENBQ1gsZ0JBQWdCLElBQUksQ0FBQyxFQUFFLGdDQUFnQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQ3hFLENBQUM7WUFDTixDQUFDO1lBQ0Qsa0JBQWtCLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNsRCxDQUFDO0lBQ0wsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUN2QixJQUFnRCxFQUNoRCxZQUFxQztJQUVyQyxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5RCxJQUFJLENBQUMsTUFBTTtRQUFFLE9BQU87SUFFcEIsSUFDSSxJQUFJLENBQUMsUUFBUSxLQUFLLFNBQVM7UUFDM0IsTUFBTSxDQUFDLFFBQVEsS0FBSyxNQUFNO1FBQzFCLE1BQU0sQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUMvQixDQUFDO1FBQ0MsTUFBTSxJQUFJLEtBQUssQ0FDWCx3QkFBd0IsSUFBSSxDQUFDLEVBQUUsa0VBQWtFLE1BQU0sQ0FBQyxFQUFFLFNBQVMsTUFBTSxDQUFDLFFBQVEsR0FBRyxDQUN4SSxDQUFDO0lBQ04sQ0FBQztJQUVELElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxXQUFXLElBQUksTUFBTSxDQUFDLFFBQVEsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUNqRSxNQUFNLElBQUksS0FBSyxDQUNYLHVCQUF1QixJQUFJLENBQUMsRUFBRSwwREFBMEQsTUFBTSxDQUFDLEVBQUUsU0FBUyxNQUFNLENBQUMsUUFBUSxHQUFHLENBQy9ILENBQUM7SUFDTixDQUFDO0FBQ0wsQ0FBQyJ9
@@ -0,0 +1,3 @@
1
+ export * from './chainConfig';
2
+ export * from './chainGenerator';
3
+ export * from './configParser';
package/dist/index.js ADDED
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./chainConfig"), exports);
18
+ __exportStar(require("./chainGenerator"), exports);
19
+ __exportStar(require("./configParser"), exports);
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGdEQUE4QjtBQUM5QixtREFBaUM7QUFDakMsaURBQStCIn0=
package/package.json ADDED
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "@super-protocol/pki-cert-generator",
3
+ "version": "3.0.0",
4
+ "description": "CLI utility for generating PKI keys and certificates",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "bin": {
8
+ "pki-cert-generator": "dist/cli.js"
9
+ },
10
+ "files": [
11
+ "dist"
12
+ ],
13
+ "directories": {
14
+ "lib": "dist"
15
+ },
16
+ "scripts": {
17
+ "build": "tsc -b",
18
+ "start": "ts-node src/cli.ts",
19
+ "lint": "eslint --max-warnings=0 src",
20
+ "lint:fix": "eslint --fix src"
21
+ },
22
+ "author": "Super Protocol",
23
+ "license": "ISC",
24
+ "dependencies": {
25
+ "@sinclair/typebox": "0.33.22",
26
+ "@super-protocol/pki-attestation-engine": "^3.0.2",
27
+ "@super-protocol/pki-common": "^3.0.1",
28
+ "js-yaml": "^4.1.0",
29
+ "yargs": "^17.7.2"
30
+ },
31
+ "devDependencies": {
32
+ "@types/js-yaml": "^4.0.9",
33
+ "@types/node": "^20.11.0",
34
+ "@types/yargs": "^17.0.33"
35
+ }
36
+ }