@sd-jwt/core 0.7.2 → 0.8.1-next.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/CHANGELOG.md +11 -0
- package/dist/index.d.mts +142 -2
- package/dist/index.d.ts +142 -2
- package/dist/index.js +481 -33
- package/dist/index.mjs +479 -29
- package/package.json +7 -7
- package/src/flattenJSON.ts +90 -0
- package/src/generalJSON.ts +140 -0
- package/src/index.ts +350 -3
- package/src/sdjwt.ts +14 -6
- package/src/test/flattenJSON.spec.ts +56 -0
- package/src/test/generalJSON.spec.ts +124 -0
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,17 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [0.8.0](https://github.com/openwallet-foundation-labs/sd-jwt-js/compare/v0.7.2...v0.8.0) (2024-11-26)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* add jws serialization feature ([#253](https://github.com/openwallet-foundation-labs/sd-jwt-js/issues/253)) ([e83b494](https://github.com/openwallet-foundation-labs/sd-jwt-js/commit/e83b4946595d043f56647e6cdc98ad34edf0acde))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
6
17
|
## [0.7.2](https://github.com/openwallet-foundation-labs/sd-jwt-js/compare/v0.7.1...v0.7.2) (2024-07-19)
|
|
7
18
|
|
|
8
19
|
**Note:** Version bump only for package @sd-jwt/core
|
package/dist/index.d.mts
CHANGED
|
@@ -59,6 +59,7 @@ declare class SDJwt<Header extends Record<string, unknown> = Record<string, unkn
|
|
|
59
59
|
}>;
|
|
60
60
|
static fromEncode<Header extends Record<string, unknown> = Record<string, unknown>, Payload extends Record<string, unknown> = Record<string, unknown>, KBHeader extends kbHeader = kbHeader, KBPayload extends kbPayload = kbPayload>(encodedSdJwt: SDJWTCompact, hasher: Hasher): Promise<SDJwt<Header, Payload>>;
|
|
61
61
|
present<T extends Record<string, unknown>>(presentFrame: PresentationFrame<T> | undefined, hasher: Hasher): Promise<SDJWTCompact>;
|
|
62
|
+
getPresentDisclosures<T extends Record<string, unknown>>(presentFrame: PresentationFrame<T> | undefined, hasher: Hasher): Promise<Disclosure<unknown>[]>;
|
|
62
63
|
encodeSDJwt(): SDJWTCompact;
|
|
63
64
|
keys(hasher: Hasher): Promise<string[]>;
|
|
64
65
|
presentableKeys(hasher: Hasher): Promise<string[]>;
|
|
@@ -70,12 +71,101 @@ declare const pack: <T extends Record<string, unknown>>(claims: T, disclosureFra
|
|
|
70
71
|
disclosures: Array<Disclosure>;
|
|
71
72
|
}>;
|
|
72
73
|
|
|
74
|
+
type FlattenJSONData = {
|
|
75
|
+
jwtData: {
|
|
76
|
+
protected: string;
|
|
77
|
+
payload: string;
|
|
78
|
+
signature: string;
|
|
79
|
+
};
|
|
80
|
+
disclosures: Array<string>;
|
|
81
|
+
kb_jwt?: string;
|
|
82
|
+
};
|
|
83
|
+
type FlattenJSONSerialized = {
|
|
84
|
+
payload: string;
|
|
85
|
+
signature: string;
|
|
86
|
+
protected: string;
|
|
87
|
+
header: {
|
|
88
|
+
disclosures: Array<string>;
|
|
89
|
+
kb_jwt?: string;
|
|
90
|
+
};
|
|
91
|
+
};
|
|
92
|
+
declare class FlattenJSON {
|
|
93
|
+
disclosures: Array<string>;
|
|
94
|
+
kb_jwt?: string;
|
|
95
|
+
payload: string;
|
|
96
|
+
signature: string;
|
|
97
|
+
protected: string;
|
|
98
|
+
constructor(data: FlattenJSONData);
|
|
99
|
+
static fromEncode(encodedSdJwt: string): FlattenJSON;
|
|
100
|
+
static fromSerialized(json: FlattenJSONSerialized): FlattenJSON;
|
|
101
|
+
toJson(): FlattenJSONSerialized;
|
|
102
|
+
toEncoded(): string;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
type GeneralJSONData = {
|
|
106
|
+
payload: string;
|
|
107
|
+
disclosures: Array<string>;
|
|
108
|
+
kb_jwt?: string;
|
|
109
|
+
signatures: Array<{
|
|
110
|
+
protected: string;
|
|
111
|
+
signature: string;
|
|
112
|
+
kid?: string;
|
|
113
|
+
}>;
|
|
114
|
+
};
|
|
115
|
+
type GeneralJSONSerialized = {
|
|
116
|
+
payload: string;
|
|
117
|
+
signatures: Array<{
|
|
118
|
+
header: {
|
|
119
|
+
disclosures?: Array<string>;
|
|
120
|
+
kid?: string;
|
|
121
|
+
kb_jwt?: string;
|
|
122
|
+
};
|
|
123
|
+
protected: string;
|
|
124
|
+
signature: string;
|
|
125
|
+
}>;
|
|
126
|
+
};
|
|
127
|
+
declare class GeneralJSON {
|
|
128
|
+
payload: string;
|
|
129
|
+
disclosures: Array<string>;
|
|
130
|
+
kb_jwt?: string;
|
|
131
|
+
signatures: Array<{
|
|
132
|
+
protected: string;
|
|
133
|
+
signature: string;
|
|
134
|
+
kid?: string;
|
|
135
|
+
}>;
|
|
136
|
+
constructor(data: GeneralJSONData);
|
|
137
|
+
static fromEncode(encodedSdJwt: string): GeneralJSON;
|
|
138
|
+
static fromSerialized(json: GeneralJSONSerialized): GeneralJSON;
|
|
139
|
+
toJson(): {
|
|
140
|
+
payload: string;
|
|
141
|
+
signatures: ({
|
|
142
|
+
header: {
|
|
143
|
+
kid: string | undefined;
|
|
144
|
+
disclosures?: undefined;
|
|
145
|
+
kb_jwt?: undefined;
|
|
146
|
+
};
|
|
147
|
+
protected: string;
|
|
148
|
+
signature: string;
|
|
149
|
+
} | {
|
|
150
|
+
header: {
|
|
151
|
+
disclosures: string[];
|
|
152
|
+
kid: string | undefined;
|
|
153
|
+
kb_jwt: string | undefined;
|
|
154
|
+
};
|
|
155
|
+
protected: string;
|
|
156
|
+
signature: string;
|
|
157
|
+
})[];
|
|
158
|
+
};
|
|
159
|
+
toEncoded(index: number): string;
|
|
160
|
+
addSignature(protectedHeader: Record<string, unknown>, signer: Signer, kid?: string): Promise<void>;
|
|
161
|
+
}
|
|
162
|
+
|
|
73
163
|
declare const createDecoy: (hash: HasherAndAlg, saltGenerator: SaltGenerator) => Promise<string>;
|
|
74
164
|
|
|
75
165
|
type SdJwtPayload = Record<string, unknown>;
|
|
76
166
|
declare class SDJwtInstance<ExtendedPayload extends SdJwtPayload> {
|
|
77
167
|
protected type?: string;
|
|
78
|
-
static DEFAULT_hashAlg
|
|
168
|
+
static readonly DEFAULT_hashAlg = "sha-256";
|
|
79
169
|
protected userConfig: SDJWTConfig;
|
|
80
170
|
constructor(userConfig?: SDJWTConfig);
|
|
81
171
|
private createKBJwt;
|
|
@@ -116,6 +206,56 @@ declare class SDJwtInstance<ExtendedPayload extends SdJwtPayload> {
|
|
|
116
206
|
keys(endcodedSDJwt: SDJWTCompact): Promise<string[]>;
|
|
117
207
|
presentableKeys(endcodedSDJwt: SDJWTCompact): Promise<string[]>;
|
|
118
208
|
getClaims(endcodedSDJwt: SDJWTCompact): Promise<unknown>;
|
|
209
|
+
toFlattenJSON(endcodedSDJwt: SDJWTCompact): FlattenJSON;
|
|
210
|
+
toGeneralJSON(endcodedSDJwt: SDJWTCompact): GeneralJSON;
|
|
211
|
+
}
|
|
212
|
+
declare class SDJwtGeneralJSONInstance<ExtendedPayload extends SdJwtPayload> {
|
|
213
|
+
protected type?: string;
|
|
214
|
+
static readonly DEFAULT_hashAlg = "sha-256";
|
|
215
|
+
protected userConfig: SDJWTConfig;
|
|
216
|
+
constructor(userConfig?: SDJWTConfig);
|
|
217
|
+
private createKBJwt;
|
|
218
|
+
private encodeObj;
|
|
219
|
+
issue<Payload extends ExtendedPayload>(payload: Payload, disclosureFrame: DisclosureFrame<Payload> | undefined, options: {
|
|
220
|
+
sigs: Array<{
|
|
221
|
+
signer: Signer;
|
|
222
|
+
alg: string;
|
|
223
|
+
kid: string;
|
|
224
|
+
header?: Record<string, unknown>;
|
|
225
|
+
}>;
|
|
226
|
+
}): Promise<GeneralJSON>;
|
|
227
|
+
/**
|
|
228
|
+
* Validates if the disclosureFrame contains any reserved fields. If so it will throw an error.
|
|
229
|
+
* @param disclosureFrame
|
|
230
|
+
* @returns
|
|
231
|
+
*/
|
|
232
|
+
protected validateReservedFields<T extends ExtendedPayload>(disclosureFrame: DisclosureFrame<T>): void;
|
|
233
|
+
present<T extends Record<string, unknown>>(generalJSON: GeneralJSON, presentationFrame?: PresentationFrame<T>, options?: {
|
|
234
|
+
kb?: KBOptions;
|
|
235
|
+
}): Promise<GeneralJSON>;
|
|
236
|
+
verify(generalJSON: GeneralJSON, requiredClaimKeys?: string[], requireKeyBindings?: boolean): Promise<{
|
|
237
|
+
payload: unknown;
|
|
238
|
+
headers: any[];
|
|
239
|
+
kb?: undefined;
|
|
240
|
+
} | {
|
|
241
|
+
payload: unknown;
|
|
242
|
+
headers: any[];
|
|
243
|
+
kb: {
|
|
244
|
+
payload: _sd_jwt_types.kbPayload;
|
|
245
|
+
header: _sd_jwt_types.kbHeader;
|
|
246
|
+
};
|
|
247
|
+
}>;
|
|
248
|
+
private calculateSDHash;
|
|
249
|
+
validate(generalJSON: GeneralJSON): Promise<{
|
|
250
|
+
payload: unknown;
|
|
251
|
+
headers: any[];
|
|
252
|
+
}>;
|
|
253
|
+
config(newConfig: SDJWTConfig): void;
|
|
254
|
+
encode(sdJwt: GeneralJSON, index: number): SDJWTCompact;
|
|
255
|
+
decode(endcodedSDJwt: SDJWTCompact): GeneralJSON;
|
|
256
|
+
keys(generalSdjwt: GeneralJSON): Promise<string[]>;
|
|
257
|
+
presentableKeys(generalSdjwt: GeneralJSON): Promise<string[]>;
|
|
258
|
+
getClaims(generalSdjwt: GeneralJSON): Promise<unknown>;
|
|
119
259
|
}
|
|
120
260
|
|
|
121
|
-
export { Jwt, type JwtData, KBJwt, SDJwt, type SDJwtData, SDJwtInstance, type SdJwtPayload, createDecoy, listKeys, pack };
|
|
261
|
+
export { FlattenJSON, type FlattenJSONData, type FlattenJSONSerialized, GeneralJSON, type GeneralJSONData, type GeneralJSONSerialized, Jwt, type JwtData, KBJwt, SDJwt, type SDJwtData, SDJwtGeneralJSONInstance, SDJwtInstance, type SdJwtPayload, createDecoy, listKeys, pack };
|
package/dist/index.d.ts
CHANGED
|
@@ -59,6 +59,7 @@ declare class SDJwt<Header extends Record<string, unknown> = Record<string, unkn
|
|
|
59
59
|
}>;
|
|
60
60
|
static fromEncode<Header extends Record<string, unknown> = Record<string, unknown>, Payload extends Record<string, unknown> = Record<string, unknown>, KBHeader extends kbHeader = kbHeader, KBPayload extends kbPayload = kbPayload>(encodedSdJwt: SDJWTCompact, hasher: Hasher): Promise<SDJwt<Header, Payload>>;
|
|
61
61
|
present<T extends Record<string, unknown>>(presentFrame: PresentationFrame<T> | undefined, hasher: Hasher): Promise<SDJWTCompact>;
|
|
62
|
+
getPresentDisclosures<T extends Record<string, unknown>>(presentFrame: PresentationFrame<T> | undefined, hasher: Hasher): Promise<Disclosure<unknown>[]>;
|
|
62
63
|
encodeSDJwt(): SDJWTCompact;
|
|
63
64
|
keys(hasher: Hasher): Promise<string[]>;
|
|
64
65
|
presentableKeys(hasher: Hasher): Promise<string[]>;
|
|
@@ -70,12 +71,101 @@ declare const pack: <T extends Record<string, unknown>>(claims: T, disclosureFra
|
|
|
70
71
|
disclosures: Array<Disclosure>;
|
|
71
72
|
}>;
|
|
72
73
|
|
|
74
|
+
type FlattenJSONData = {
|
|
75
|
+
jwtData: {
|
|
76
|
+
protected: string;
|
|
77
|
+
payload: string;
|
|
78
|
+
signature: string;
|
|
79
|
+
};
|
|
80
|
+
disclosures: Array<string>;
|
|
81
|
+
kb_jwt?: string;
|
|
82
|
+
};
|
|
83
|
+
type FlattenJSONSerialized = {
|
|
84
|
+
payload: string;
|
|
85
|
+
signature: string;
|
|
86
|
+
protected: string;
|
|
87
|
+
header: {
|
|
88
|
+
disclosures: Array<string>;
|
|
89
|
+
kb_jwt?: string;
|
|
90
|
+
};
|
|
91
|
+
};
|
|
92
|
+
declare class FlattenJSON {
|
|
93
|
+
disclosures: Array<string>;
|
|
94
|
+
kb_jwt?: string;
|
|
95
|
+
payload: string;
|
|
96
|
+
signature: string;
|
|
97
|
+
protected: string;
|
|
98
|
+
constructor(data: FlattenJSONData);
|
|
99
|
+
static fromEncode(encodedSdJwt: string): FlattenJSON;
|
|
100
|
+
static fromSerialized(json: FlattenJSONSerialized): FlattenJSON;
|
|
101
|
+
toJson(): FlattenJSONSerialized;
|
|
102
|
+
toEncoded(): string;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
type GeneralJSONData = {
|
|
106
|
+
payload: string;
|
|
107
|
+
disclosures: Array<string>;
|
|
108
|
+
kb_jwt?: string;
|
|
109
|
+
signatures: Array<{
|
|
110
|
+
protected: string;
|
|
111
|
+
signature: string;
|
|
112
|
+
kid?: string;
|
|
113
|
+
}>;
|
|
114
|
+
};
|
|
115
|
+
type GeneralJSONSerialized = {
|
|
116
|
+
payload: string;
|
|
117
|
+
signatures: Array<{
|
|
118
|
+
header: {
|
|
119
|
+
disclosures?: Array<string>;
|
|
120
|
+
kid?: string;
|
|
121
|
+
kb_jwt?: string;
|
|
122
|
+
};
|
|
123
|
+
protected: string;
|
|
124
|
+
signature: string;
|
|
125
|
+
}>;
|
|
126
|
+
};
|
|
127
|
+
declare class GeneralJSON {
|
|
128
|
+
payload: string;
|
|
129
|
+
disclosures: Array<string>;
|
|
130
|
+
kb_jwt?: string;
|
|
131
|
+
signatures: Array<{
|
|
132
|
+
protected: string;
|
|
133
|
+
signature: string;
|
|
134
|
+
kid?: string;
|
|
135
|
+
}>;
|
|
136
|
+
constructor(data: GeneralJSONData);
|
|
137
|
+
static fromEncode(encodedSdJwt: string): GeneralJSON;
|
|
138
|
+
static fromSerialized(json: GeneralJSONSerialized): GeneralJSON;
|
|
139
|
+
toJson(): {
|
|
140
|
+
payload: string;
|
|
141
|
+
signatures: ({
|
|
142
|
+
header: {
|
|
143
|
+
kid: string | undefined;
|
|
144
|
+
disclosures?: undefined;
|
|
145
|
+
kb_jwt?: undefined;
|
|
146
|
+
};
|
|
147
|
+
protected: string;
|
|
148
|
+
signature: string;
|
|
149
|
+
} | {
|
|
150
|
+
header: {
|
|
151
|
+
disclosures: string[];
|
|
152
|
+
kid: string | undefined;
|
|
153
|
+
kb_jwt: string | undefined;
|
|
154
|
+
};
|
|
155
|
+
protected: string;
|
|
156
|
+
signature: string;
|
|
157
|
+
})[];
|
|
158
|
+
};
|
|
159
|
+
toEncoded(index: number): string;
|
|
160
|
+
addSignature(protectedHeader: Record<string, unknown>, signer: Signer, kid?: string): Promise<void>;
|
|
161
|
+
}
|
|
162
|
+
|
|
73
163
|
declare const createDecoy: (hash: HasherAndAlg, saltGenerator: SaltGenerator) => Promise<string>;
|
|
74
164
|
|
|
75
165
|
type SdJwtPayload = Record<string, unknown>;
|
|
76
166
|
declare class SDJwtInstance<ExtendedPayload extends SdJwtPayload> {
|
|
77
167
|
protected type?: string;
|
|
78
|
-
static DEFAULT_hashAlg
|
|
168
|
+
static readonly DEFAULT_hashAlg = "sha-256";
|
|
79
169
|
protected userConfig: SDJWTConfig;
|
|
80
170
|
constructor(userConfig?: SDJWTConfig);
|
|
81
171
|
private createKBJwt;
|
|
@@ -116,6 +206,56 @@ declare class SDJwtInstance<ExtendedPayload extends SdJwtPayload> {
|
|
|
116
206
|
keys(endcodedSDJwt: SDJWTCompact): Promise<string[]>;
|
|
117
207
|
presentableKeys(endcodedSDJwt: SDJWTCompact): Promise<string[]>;
|
|
118
208
|
getClaims(endcodedSDJwt: SDJWTCompact): Promise<unknown>;
|
|
209
|
+
toFlattenJSON(endcodedSDJwt: SDJWTCompact): FlattenJSON;
|
|
210
|
+
toGeneralJSON(endcodedSDJwt: SDJWTCompact): GeneralJSON;
|
|
211
|
+
}
|
|
212
|
+
declare class SDJwtGeneralJSONInstance<ExtendedPayload extends SdJwtPayload> {
|
|
213
|
+
protected type?: string;
|
|
214
|
+
static readonly DEFAULT_hashAlg = "sha-256";
|
|
215
|
+
protected userConfig: SDJWTConfig;
|
|
216
|
+
constructor(userConfig?: SDJWTConfig);
|
|
217
|
+
private createKBJwt;
|
|
218
|
+
private encodeObj;
|
|
219
|
+
issue<Payload extends ExtendedPayload>(payload: Payload, disclosureFrame: DisclosureFrame<Payload> | undefined, options: {
|
|
220
|
+
sigs: Array<{
|
|
221
|
+
signer: Signer;
|
|
222
|
+
alg: string;
|
|
223
|
+
kid: string;
|
|
224
|
+
header?: Record<string, unknown>;
|
|
225
|
+
}>;
|
|
226
|
+
}): Promise<GeneralJSON>;
|
|
227
|
+
/**
|
|
228
|
+
* Validates if the disclosureFrame contains any reserved fields. If so it will throw an error.
|
|
229
|
+
* @param disclosureFrame
|
|
230
|
+
* @returns
|
|
231
|
+
*/
|
|
232
|
+
protected validateReservedFields<T extends ExtendedPayload>(disclosureFrame: DisclosureFrame<T>): void;
|
|
233
|
+
present<T extends Record<string, unknown>>(generalJSON: GeneralJSON, presentationFrame?: PresentationFrame<T>, options?: {
|
|
234
|
+
kb?: KBOptions;
|
|
235
|
+
}): Promise<GeneralJSON>;
|
|
236
|
+
verify(generalJSON: GeneralJSON, requiredClaimKeys?: string[], requireKeyBindings?: boolean): Promise<{
|
|
237
|
+
payload: unknown;
|
|
238
|
+
headers: any[];
|
|
239
|
+
kb?: undefined;
|
|
240
|
+
} | {
|
|
241
|
+
payload: unknown;
|
|
242
|
+
headers: any[];
|
|
243
|
+
kb: {
|
|
244
|
+
payload: _sd_jwt_types.kbPayload;
|
|
245
|
+
header: _sd_jwt_types.kbHeader;
|
|
246
|
+
};
|
|
247
|
+
}>;
|
|
248
|
+
private calculateSDHash;
|
|
249
|
+
validate(generalJSON: GeneralJSON): Promise<{
|
|
250
|
+
payload: unknown;
|
|
251
|
+
headers: any[];
|
|
252
|
+
}>;
|
|
253
|
+
config(newConfig: SDJWTConfig): void;
|
|
254
|
+
encode(sdJwt: GeneralJSON, index: number): SDJWTCompact;
|
|
255
|
+
decode(endcodedSDJwt: SDJWTCompact): GeneralJSON;
|
|
256
|
+
keys(generalSdjwt: GeneralJSON): Promise<string[]>;
|
|
257
|
+
presentableKeys(generalSdjwt: GeneralJSON): Promise<string[]>;
|
|
258
|
+
getClaims(generalSdjwt: GeneralJSON): Promise<unknown>;
|
|
119
259
|
}
|
|
120
260
|
|
|
121
|
-
export { Jwt, type JwtData, KBJwt, SDJwt, type SDJwtData, SDJwtInstance, type SdJwtPayload, createDecoy, listKeys, pack };
|
|
261
|
+
export { FlattenJSON, type FlattenJSONData, type FlattenJSONSerialized, GeneralJSON, type GeneralJSONData, type GeneralJSONSerialized, Jwt, type JwtData, KBJwt, SDJwt, type SDJwtData, SDJwtGeneralJSONInstance, SDJwtInstance, type SdJwtPayload, createDecoy, listKeys, pack };
|