@sd-jwt/decode 0.6.1 → 0.6.2-next.2
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/dist/index.d.mts +2 -6
- package/dist/index.d.ts +2 -6
- package/dist/index.js +9 -23
- package/dist/index.mjs +9 -22
- package/package.json +5 -5
- package/src/decode.ts +17 -23
- package/src/test/decode.spec.ts +38 -0
package/dist/index.d.mts
CHANGED
|
@@ -16,11 +16,7 @@ declare const decodeSdJwt: (sdjwt: string, hasher: Hasher) => Promise<DecodedSDJ
|
|
|
16
16
|
declare const decodeSdJwtSync: (sdjwt: string, hasher: HasherSync) => DecodedSDJwt;
|
|
17
17
|
declare const getClaims: <T>(rawPayload: Record<string, unknown>, disclosures: Array<Disclosure>, hasher: Hasher) => Promise<T>;
|
|
18
18
|
declare const getClaimsSync: <T>(rawPayload: Record<string, unknown>, disclosures: Array<Disclosure>, hasher: HasherSync) => T;
|
|
19
|
-
declare const
|
|
20
|
-
unpackedObj: unknown;
|
|
21
|
-
disclosureKeymap: Record<string, string>;
|
|
22
|
-
};
|
|
23
|
-
declare const unpackObj: (obj: unknown, map: Record<string, Disclosure>, prefix?: string) => {
|
|
19
|
+
declare const unpackObj: (obj: unknown, map: Record<string, Disclosure>) => {
|
|
24
20
|
unpackedObj: unknown;
|
|
25
21
|
disclosureKeymap: Record<string, string>;
|
|
26
22
|
};
|
|
@@ -54,4 +50,4 @@ type DecodedSDJwt = {
|
|
|
54
50
|
};
|
|
55
51
|
};
|
|
56
52
|
|
|
57
|
-
export { type DecodedSDJwt, createHashMapping, createHashMappingSync, decodeJwt, decodeSdJwt, decodeSdJwtSync, getClaims, getClaimsSync, getSDAlgAndPayload, splitSdJwt, unpack,
|
|
53
|
+
export { type DecodedSDJwt, createHashMapping, createHashMappingSync, decodeJwt, decodeSdJwt, decodeSdJwtSync, getClaims, getClaimsSync, getSDAlgAndPayload, splitSdJwt, unpack, unpackObj, unpackSync };
|
package/dist/index.d.ts
CHANGED
|
@@ -16,11 +16,7 @@ declare const decodeSdJwt: (sdjwt: string, hasher: Hasher) => Promise<DecodedSDJ
|
|
|
16
16
|
declare const decodeSdJwtSync: (sdjwt: string, hasher: HasherSync) => DecodedSDJwt;
|
|
17
17
|
declare const getClaims: <T>(rawPayload: Record<string, unknown>, disclosures: Array<Disclosure>, hasher: Hasher) => Promise<T>;
|
|
18
18
|
declare const getClaimsSync: <T>(rawPayload: Record<string, unknown>, disclosures: Array<Disclosure>, hasher: HasherSync) => T;
|
|
19
|
-
declare const
|
|
20
|
-
unpackedObj: unknown;
|
|
21
|
-
disclosureKeymap: Record<string, string>;
|
|
22
|
-
};
|
|
23
|
-
declare const unpackObj: (obj: unknown, map: Record<string, Disclosure>, prefix?: string) => {
|
|
19
|
+
declare const unpackObj: (obj: unknown, map: Record<string, Disclosure>) => {
|
|
24
20
|
unpackedObj: unknown;
|
|
25
21
|
disclosureKeymap: Record<string, string>;
|
|
26
22
|
};
|
|
@@ -54,4 +50,4 @@ type DecodedSDJwt = {
|
|
|
54
50
|
};
|
|
55
51
|
};
|
|
56
52
|
|
|
57
|
-
export { type DecodedSDJwt, createHashMapping, createHashMappingSync, decodeJwt, decodeSdJwt, decodeSdJwtSync, getClaims, getClaimsSync, getSDAlgAndPayload, splitSdJwt, unpack,
|
|
53
|
+
export { type DecodedSDJwt, createHashMapping, createHashMappingSync, decodeJwt, decodeSdJwt, decodeSdJwtSync, getClaims, getClaimsSync, getSDAlgAndPayload, splitSdJwt, unpack, unpackObj, unpackSync };
|
package/dist/index.js
CHANGED
|
@@ -64,7 +64,6 @@ __export(src_exports, {
|
|
|
64
64
|
getSDAlgAndPayload: () => getSDAlgAndPayload,
|
|
65
65
|
splitSdJwt: () => splitSdJwt,
|
|
66
66
|
unpack: () => unpack,
|
|
67
|
-
unpackArray: () => unpackArray,
|
|
68
67
|
unpackObj: () => unpackObj,
|
|
69
68
|
unpackSync: () => unpackSync
|
|
70
69
|
});
|
|
@@ -162,21 +161,13 @@ var unpackArray = (arr, map, prefix = "") => {
|
|
|
162
161
|
if (disclosed) {
|
|
163
162
|
const presentKey = prefix ? `${prefix}.${idx}` : `${idx}`;
|
|
164
163
|
keys[presentKey] = hash;
|
|
165
|
-
const { unpackedObj, disclosureKeymap: disclosureKeys } =
|
|
166
|
-
disclosed.value,
|
|
167
|
-
map,
|
|
168
|
-
presentKey
|
|
169
|
-
);
|
|
164
|
+
const { unpackedObj, disclosureKeymap: disclosureKeys } = unpackObjInternal(disclosed.value, map, presentKey);
|
|
170
165
|
unpackedArray.push(unpackedObj);
|
|
171
166
|
Object.assign(keys, disclosureKeys);
|
|
172
167
|
}
|
|
173
168
|
} else {
|
|
174
169
|
const newKey = prefix ? `${prefix}.${idx}` : `${idx}`;
|
|
175
|
-
const { unpackedObj, disclosureKeymap: disclosureKeys } =
|
|
176
|
-
item,
|
|
177
|
-
map,
|
|
178
|
-
newKey
|
|
179
|
-
);
|
|
170
|
+
const { unpackedObj, disclosureKeymap: disclosureKeys } = unpackObjInternal(item, map, newKey);
|
|
180
171
|
unpackedArray.push(unpackedObj);
|
|
181
172
|
Object.assign(keys, disclosureKeys);
|
|
182
173
|
}
|
|
@@ -186,7 +177,11 @@ var unpackArray = (arr, map, prefix = "") => {
|
|
|
186
177
|
});
|
|
187
178
|
return { unpackedObj: unpackedArray, disclosureKeymap: keys };
|
|
188
179
|
};
|
|
189
|
-
var unpackObj = (obj, map
|
|
180
|
+
var unpackObj = (obj, map) => {
|
|
181
|
+
const copiedObj = JSON.parse(JSON.stringify(obj));
|
|
182
|
+
return unpackObjInternal(copiedObj, map);
|
|
183
|
+
};
|
|
184
|
+
var unpackObjInternal = (obj, map, prefix = "") => {
|
|
190
185
|
const keys = {};
|
|
191
186
|
if (typeof obj === "object" && obj !== null) {
|
|
192
187
|
if (Array.isArray(obj)) {
|
|
@@ -195,11 +190,7 @@ var unpackObj = (obj, map, prefix = "") => {
|
|
|
195
190
|
for (const key in obj) {
|
|
196
191
|
if (key !== import_types.SD_DIGEST && key !== import_types.SD_LIST_KEY && typeof obj[key] === "object") {
|
|
197
192
|
const newKey = prefix ? `${prefix}.${key}` : key;
|
|
198
|
-
const { unpackedObj: unpackedObj2, disclosureKeymap: disclosureKeys } =
|
|
199
|
-
obj[key],
|
|
200
|
-
map,
|
|
201
|
-
newKey
|
|
202
|
-
);
|
|
193
|
+
const { unpackedObj: unpackedObj2, disclosureKeymap: disclosureKeys } = unpackObjInternal(obj[key], map, newKey);
|
|
203
194
|
obj[key] = unpackedObj2;
|
|
204
195
|
Object.assign(keys, disclosureKeys);
|
|
205
196
|
}
|
|
@@ -212,11 +203,7 @@ var unpackObj = (obj, map, prefix = "") => {
|
|
|
212
203
|
if (disclosed == null ? void 0 : disclosed.key) {
|
|
213
204
|
const presentKey = prefix ? `${prefix}.${disclosed.key}` : disclosed.key;
|
|
214
205
|
keys[presentKey] = hash;
|
|
215
|
-
const { unpackedObj: unpackedObj2, disclosureKeymap: disclosureKeys } =
|
|
216
|
-
disclosed.value,
|
|
217
|
-
map,
|
|
218
|
-
presentKey
|
|
219
|
-
);
|
|
206
|
+
const { unpackedObj: unpackedObj2, disclosureKeymap: disclosureKeys } = unpackObjInternal(disclosed.value, map, presentKey);
|
|
220
207
|
claims[disclosed.key] = unpackedObj2;
|
|
221
208
|
Object.assign(keys, disclosureKeys);
|
|
222
209
|
}
|
|
@@ -276,7 +263,6 @@ var unpackSync = (SdJwtPayload, disclosures, hasher) => {
|
|
|
276
263
|
getSDAlgAndPayload,
|
|
277
264
|
splitSdJwt,
|
|
278
265
|
unpack,
|
|
279
|
-
unpackArray,
|
|
280
266
|
unpackObj,
|
|
281
267
|
unpackSync
|
|
282
268
|
});
|
package/dist/index.mjs
CHANGED
|
@@ -130,21 +130,13 @@ var unpackArray = (arr, map, prefix = "") => {
|
|
|
130
130
|
if (disclosed) {
|
|
131
131
|
const presentKey = prefix ? `${prefix}.${idx}` : `${idx}`;
|
|
132
132
|
keys[presentKey] = hash;
|
|
133
|
-
const { unpackedObj, disclosureKeymap: disclosureKeys } =
|
|
134
|
-
disclosed.value,
|
|
135
|
-
map,
|
|
136
|
-
presentKey
|
|
137
|
-
);
|
|
133
|
+
const { unpackedObj, disclosureKeymap: disclosureKeys } = unpackObjInternal(disclosed.value, map, presentKey);
|
|
138
134
|
unpackedArray.push(unpackedObj);
|
|
139
135
|
Object.assign(keys, disclosureKeys);
|
|
140
136
|
}
|
|
141
137
|
} else {
|
|
142
138
|
const newKey = prefix ? `${prefix}.${idx}` : `${idx}`;
|
|
143
|
-
const { unpackedObj, disclosureKeymap: disclosureKeys } =
|
|
144
|
-
item,
|
|
145
|
-
map,
|
|
146
|
-
newKey
|
|
147
|
-
);
|
|
139
|
+
const { unpackedObj, disclosureKeymap: disclosureKeys } = unpackObjInternal(item, map, newKey);
|
|
148
140
|
unpackedArray.push(unpackedObj);
|
|
149
141
|
Object.assign(keys, disclosureKeys);
|
|
150
142
|
}
|
|
@@ -154,7 +146,11 @@ var unpackArray = (arr, map, prefix = "") => {
|
|
|
154
146
|
});
|
|
155
147
|
return { unpackedObj: unpackedArray, disclosureKeymap: keys };
|
|
156
148
|
};
|
|
157
|
-
var unpackObj = (obj, map
|
|
149
|
+
var unpackObj = (obj, map) => {
|
|
150
|
+
const copiedObj = JSON.parse(JSON.stringify(obj));
|
|
151
|
+
return unpackObjInternal(copiedObj, map);
|
|
152
|
+
};
|
|
153
|
+
var unpackObjInternal = (obj, map, prefix = "") => {
|
|
158
154
|
const keys = {};
|
|
159
155
|
if (typeof obj === "object" && obj !== null) {
|
|
160
156
|
if (Array.isArray(obj)) {
|
|
@@ -163,11 +159,7 @@ var unpackObj = (obj, map, prefix = "") => {
|
|
|
163
159
|
for (const key in obj) {
|
|
164
160
|
if (key !== SD_DIGEST && key !== SD_LIST_KEY && typeof obj[key] === "object") {
|
|
165
161
|
const newKey = prefix ? `${prefix}.${key}` : key;
|
|
166
|
-
const { unpackedObj: unpackedObj2, disclosureKeymap: disclosureKeys } =
|
|
167
|
-
obj[key],
|
|
168
|
-
map,
|
|
169
|
-
newKey
|
|
170
|
-
);
|
|
162
|
+
const { unpackedObj: unpackedObj2, disclosureKeymap: disclosureKeys } = unpackObjInternal(obj[key], map, newKey);
|
|
171
163
|
obj[key] = unpackedObj2;
|
|
172
164
|
Object.assign(keys, disclosureKeys);
|
|
173
165
|
}
|
|
@@ -180,11 +172,7 @@ var unpackObj = (obj, map, prefix = "") => {
|
|
|
180
172
|
if (disclosed == null ? void 0 : disclosed.key) {
|
|
181
173
|
const presentKey = prefix ? `${prefix}.${disclosed.key}` : disclosed.key;
|
|
182
174
|
keys[presentKey] = hash;
|
|
183
|
-
const { unpackedObj: unpackedObj2, disclosureKeymap: disclosureKeys } =
|
|
184
|
-
disclosed.value,
|
|
185
|
-
map,
|
|
186
|
-
presentKey
|
|
187
|
-
);
|
|
175
|
+
const { unpackedObj: unpackedObj2, disclosureKeymap: disclosureKeys } = unpackObjInternal(disclosed.value, map, presentKey);
|
|
188
176
|
claims[disclosed.key] = unpackedObj2;
|
|
189
177
|
Object.assign(keys, disclosureKeys);
|
|
190
178
|
}
|
|
@@ -243,7 +231,6 @@ export {
|
|
|
243
231
|
getSDAlgAndPayload,
|
|
244
232
|
splitSdJwt,
|
|
245
233
|
unpack,
|
|
246
|
-
unpackArray,
|
|
247
234
|
unpackObj,
|
|
248
235
|
unpackSync
|
|
249
236
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sd-jwt/decode",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.2-next.2+2e92cb3",
|
|
4
4
|
"description": "sd-jwt draft 7 implementation in typescript",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.mjs",
|
|
@@ -37,11 +37,11 @@
|
|
|
37
37
|
},
|
|
38
38
|
"license": "Apache-2.0",
|
|
39
39
|
"devDependencies": {
|
|
40
|
-
"@sd-jwt/crypto-nodejs": "0.6.
|
|
40
|
+
"@sd-jwt/crypto-nodejs": "0.6.2-next.2+2e92cb3"
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@sd-jwt/types": "0.6.
|
|
44
|
-
"@sd-jwt/utils": "0.6.
|
|
43
|
+
"@sd-jwt/types": "0.6.2-next.2+2e92cb3",
|
|
44
|
+
"@sd-jwt/utils": "0.6.2-next.2+2e92cb3"
|
|
45
45
|
},
|
|
46
46
|
"publishConfig": {
|
|
47
47
|
"access": "public"
|
|
@@ -59,5 +59,5 @@
|
|
|
59
59
|
"esm"
|
|
60
60
|
]
|
|
61
61
|
},
|
|
62
|
-
"gitHead": "
|
|
62
|
+
"gitHead": "2e92cb3abc27f6dbde19c7c016bc1f8ba60f9ff6"
|
|
63
63
|
}
|
package/src/decode.ts
CHANGED
|
@@ -144,7 +144,7 @@ export const getClaimsSync = <T>(
|
|
|
144
144
|
return unpackedObj as T;
|
|
145
145
|
};
|
|
146
146
|
|
|
147
|
-
|
|
147
|
+
const unpackArray = (
|
|
148
148
|
arr: Array<unknown>,
|
|
149
149
|
map: Record<string, Disclosure>,
|
|
150
150
|
prefix = '',
|
|
@@ -160,21 +160,15 @@ export const unpackArray = (
|
|
|
160
160
|
const presentKey = prefix ? `${prefix}.${idx}` : `${idx}`;
|
|
161
161
|
keys[presentKey] = hash;
|
|
162
162
|
|
|
163
|
-
const { unpackedObj, disclosureKeymap: disclosureKeys } =
|
|
164
|
-
disclosed.value,
|
|
165
|
-
map,
|
|
166
|
-
presentKey,
|
|
167
|
-
);
|
|
163
|
+
const { unpackedObj, disclosureKeymap: disclosureKeys } =
|
|
164
|
+
unpackObjInternal(disclosed.value, map, presentKey);
|
|
168
165
|
unpackedArray.push(unpackedObj);
|
|
169
166
|
Object.assign(keys, disclosureKeys);
|
|
170
167
|
}
|
|
171
168
|
} else {
|
|
172
169
|
const newKey = prefix ? `${prefix}.${idx}` : `${idx}`;
|
|
173
|
-
const { unpackedObj, disclosureKeymap: disclosureKeys } =
|
|
174
|
-
item,
|
|
175
|
-
map,
|
|
176
|
-
newKey,
|
|
177
|
-
);
|
|
170
|
+
const { unpackedObj, disclosureKeymap: disclosureKeys } =
|
|
171
|
+
unpackObjInternal(item, map, newKey);
|
|
178
172
|
unpackedArray.push(unpackedObj);
|
|
179
173
|
Object.assign(keys, disclosureKeys);
|
|
180
174
|
}
|
|
@@ -185,7 +179,12 @@ export const unpackArray = (
|
|
|
185
179
|
return { unpackedObj: unpackedArray, disclosureKeymap: keys };
|
|
186
180
|
};
|
|
187
181
|
|
|
188
|
-
export const unpackObj = (
|
|
182
|
+
export const unpackObj = (obj: unknown, map: Record<string, Disclosure>) => {
|
|
183
|
+
const copiedObj = JSON.parse(JSON.stringify(obj));
|
|
184
|
+
return unpackObjInternal(copiedObj, map);
|
|
185
|
+
};
|
|
186
|
+
|
|
187
|
+
const unpackObjInternal = (
|
|
189
188
|
obj: unknown,
|
|
190
189
|
map: Record<string, Disclosure>,
|
|
191
190
|
prefix = '',
|
|
@@ -203,11 +202,8 @@ export const unpackObj = (
|
|
|
203
202
|
typeof (obj as Record<string, unknown>)[key] === 'object'
|
|
204
203
|
) {
|
|
205
204
|
const newKey = prefix ? `${prefix}.${key}` : key;
|
|
206
|
-
const { unpackedObj, disclosureKeymap: disclosureKeys } =
|
|
207
|
-
(obj as Record<string, unknown>)[key],
|
|
208
|
-
map,
|
|
209
|
-
newKey,
|
|
210
|
-
);
|
|
205
|
+
const { unpackedObj, disclosureKeymap: disclosureKeys } =
|
|
206
|
+
unpackObjInternal((obj as Record<string, unknown>)[key], map, newKey);
|
|
211
207
|
(obj as Record<string, unknown>)[key] = unpackedObj;
|
|
212
208
|
Object.assign(keys, disclosureKeys);
|
|
213
209
|
}
|
|
@@ -226,11 +222,8 @@ export const unpackObj = (
|
|
|
226
222
|
: disclosed.key;
|
|
227
223
|
keys[presentKey] = hash;
|
|
228
224
|
|
|
229
|
-
const { unpackedObj, disclosureKeymap: disclosureKeys } =
|
|
230
|
-
disclosed.value,
|
|
231
|
-
map,
|
|
232
|
-
presentKey,
|
|
233
|
-
);
|
|
225
|
+
const { unpackedObj, disclosureKeymap: disclosureKeys } =
|
|
226
|
+
unpackObjInternal(disclosed.value, map, presentKey);
|
|
234
227
|
claims[disclosed.key] = unpackedObj;
|
|
235
228
|
Object.assign(keys, disclosureKeys);
|
|
236
229
|
}
|
|
@@ -281,7 +274,8 @@ export const getSDAlgAndPayload = (SdJwtPayload: Record<string, unknown>) => {
|
|
|
281
274
|
};
|
|
282
275
|
|
|
283
276
|
// Match the digests of the disclosures with the claims and extract the claims
|
|
284
|
-
// unpack function use
|
|
277
|
+
// unpack function use unpackObjInternal and unpackArray to recursively unpack the claims
|
|
278
|
+
// Since getSDAlgAndPayload create new object So we don't need to clone it again
|
|
285
279
|
export const unpack = async (
|
|
286
280
|
SdJwtPayload: Record<string, unknown>,
|
|
287
281
|
disclosures: Array<Disclosure>,
|
package/src/test/decode.spec.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { describe, expect, test } from 'vitest';
|
|
2
2
|
import {
|
|
3
|
+
createHashMapping,
|
|
3
4
|
decodeJwt,
|
|
4
5
|
decodeSdJwt,
|
|
5
6
|
decodeSdJwtSync,
|
|
@@ -7,6 +8,7 @@ import {
|
|
|
7
8
|
getClaimsSync,
|
|
8
9
|
getSDAlgAndPayload,
|
|
9
10
|
splitSdJwt,
|
|
11
|
+
unpackObj,
|
|
10
12
|
} from '../index';
|
|
11
13
|
import { digest } from '@sd-jwt/crypto-nodejs';
|
|
12
14
|
|
|
@@ -93,6 +95,26 @@ describe('decode tests', () => {
|
|
|
93
95
|
expect(decodedSdJwt.jwt).toBeDefined();
|
|
94
96
|
});
|
|
95
97
|
|
|
98
|
+
test('decode sdjwt sync (with KB)', () => {
|
|
99
|
+
const sdjwt =
|
|
100
|
+
'eyJ0eXAiOiJzZCtqd3QiLCJhbGciOiJFUzI1NiJ9.eyJpZCI6IjEyMzQiLCJfc2QiOlsiYkRUUnZtNS1Zbi1IRzdjcXBWUjVPVlJJWHNTYUJrNTdKZ2lPcV9qMVZJNCIsImV0M1VmUnlsd1ZyZlhkUEt6Zzc5aGNqRDFJdHpvUTlvQm9YUkd0TW9zRmsiLCJ6V2ZaTlMxOUF0YlJTVGJvN3NKUm4wQlpRdldSZGNob0M3VVphYkZyalk4Il0sIl9zZF9hbGciOiJzaGEtMjU2In0.n27NCtnuwytlBYtUNjgkesDP_7gN7bhaLhWNL4SWT6MaHsOjZ2ZMp987GgQRL6ZkLbJ7Cd3hlePHS84GBXPuvg~WyI1ZWI4Yzg2MjM0MDJjZjJlIiwiZmlyc3RuYW1lIiwiSm9obiJd~WyJjNWMzMWY2ZWYzNTg4MWJjIiwibGFzdG5hbWUiLCJEb2UiXQ~WyJmYTlkYTUzZWJjOTk3OThlIiwic3NuIiwiMTIzLTQ1LTY3ODkiXQ~eyJ0eXAiOiJrYitqd3QiLCJhbGciOiJFUzI1NiJ9.eyJpYXQiOjE3MTAwNjk3MjIsImF1ZCI6ImRpZDpleGFtcGxlOjEyMyIsIm5vbmNlIjoiazh2ZGYwbmQ2Iiwic2RfaGFzaCI6Il8tTmJWSzNmczl3VzNHaDNOUktSNEt1NmZDMUwzN0R2MFFfalBXd0ppRkUifQ.pqw2OB5IA5ya9Mxf60hE3nr2gsJEIoIlnuCa4qIisijHbwg3WzTDFmW2SuNvK_ORN0WU6RoGbJx5uYZh8k4EbA';
|
|
101
|
+
const decodedSdJwt = decodeSdJwtSync(sdjwt, digest);
|
|
102
|
+
expect(decodedSdJwt).toBeDefined();
|
|
103
|
+
expect(decodedSdJwt.kbJwt).toBeDefined();
|
|
104
|
+
expect(decodedSdJwt.disclosures.length).toEqual(3);
|
|
105
|
+
expect(decodedSdJwt.jwt).toBeDefined();
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
test('decode sdjwt (with KB)', async () => {
|
|
109
|
+
const sdjwt =
|
|
110
|
+
'eyJ0eXAiOiJzZCtqd3QiLCJhbGciOiJFUzI1NiJ9.eyJpZCI6IjEyMzQiLCJfc2QiOlsiYkRUUnZtNS1Zbi1IRzdjcXBWUjVPVlJJWHNTYUJrNTdKZ2lPcV9qMVZJNCIsImV0M1VmUnlsd1ZyZlhkUEt6Zzc5aGNqRDFJdHpvUTlvQm9YUkd0TW9zRmsiLCJ6V2ZaTlMxOUF0YlJTVGJvN3NKUm4wQlpRdldSZGNob0M3VVphYkZyalk4Il0sIl9zZF9hbGciOiJzaGEtMjU2In0.n27NCtnuwytlBYtUNjgkesDP_7gN7bhaLhWNL4SWT6MaHsOjZ2ZMp987GgQRL6ZkLbJ7Cd3hlePHS84GBXPuvg~WyI1ZWI4Yzg2MjM0MDJjZjJlIiwiZmlyc3RuYW1lIiwiSm9obiJd~WyJjNWMzMWY2ZWYzNTg4MWJjIiwibGFzdG5hbWUiLCJEb2UiXQ~WyJmYTlkYTUzZWJjOTk3OThlIiwic3NuIiwiMTIzLTQ1LTY3ODkiXQ~eyJ0eXAiOiJrYitqd3QiLCJhbGciOiJFUzI1NiJ9.eyJpYXQiOjE3MTAwNjk3MjIsImF1ZCI6ImRpZDpleGFtcGxlOjEyMyIsIm5vbmNlIjoiazh2ZGYwbmQ2Iiwic2RfaGFzaCI6Il8tTmJWSzNmczl3VzNHaDNOUktSNEt1NmZDMUwzN0R2MFFfalBXd0ppRkUifQ.pqw2OB5IA5ya9Mxf60hE3nr2gsJEIoIlnuCa4qIisijHbwg3WzTDFmW2SuNvK_ORN0WU6RoGbJx5uYZh8k4EbA';
|
|
111
|
+
const decodedSdJwt = await decodeSdJwt(sdjwt, digest);
|
|
112
|
+
expect(decodedSdJwt).toBeDefined();
|
|
113
|
+
expect(decodedSdJwt.kbJwt).toBeDefined();
|
|
114
|
+
expect(decodedSdJwt.disclosures.length).toEqual(3);
|
|
115
|
+
expect(decodedSdJwt.jwt).toBeDefined();
|
|
116
|
+
});
|
|
117
|
+
|
|
96
118
|
test('get claims', async () => {
|
|
97
119
|
const sdjwt =
|
|
98
120
|
'eyJ0eXAiOiJzZC1qd3QiLCJhbGciOiJFZERTQSJ9.eyJfc2QiOlsiaWQ1azZ1ZVplVTY4bExaMlU2YjJJbF9QR3ZKb1RDMlpkMkpwY0RwMzFIWSJdLCJfc2RfYWxnIjoic2hhLTI1NiJ9.GiLF_HhacrstqCJ223VvWOoJJWU8qk4dYQHklSMwxv36pPF_7ER53Wbty1qYRlQ6NeMUdBRRdj9JQLLCzz1gCQ~WyI2NTMxNDA2ZmVhZmU0YjBmIiwiZm9vIiwiYmFyIl0~';
|
|
@@ -161,4 +183,20 @@ describe('decode tests', () => {
|
|
|
161
183
|
const { _sd_alg, payload } = getSDAlgAndPayload({});
|
|
162
184
|
expect(_sd_alg).toBe('sha-256');
|
|
163
185
|
});
|
|
186
|
+
|
|
187
|
+
test('unpackObj clone', async () => {
|
|
188
|
+
const sdjwt =
|
|
189
|
+
'eyJ0eXAiOiJzZC1qd3QiLCJhbGciOiJFZERTQSJ9.eyJ0ZXN0Ijp7Il9zZCI6WyJqVEszMHNleDZhYV9kUk1KSWZDR056Q0FwbVB5MzRRNjNBa3QzS3hhSktzIl19LCJfc2QiOlsiME9nMi1ReG95eW1UOGNnVzZZUjVSSFpQLUJuR2tHUi1NM2otLV92RWlzSSIsIkcwZ3lHNnExVFMyUlQxMkZ3X2RRRDVVcjlZc1AwZlVWOXVtQWdGMC1jQ1EiXSwiX3NkX2FsZyI6InNoYS0yNTYifQ.ggEyE4SeDO2Hu3tol3VLmi7NQj56yKzKQDaafocgkLrUBdivghohtzrfcbrMN7CRufJ_Cnh0EL54kymXLGTdDQ~WyIwNGU0MjAzOWU4ZWFiOWRjIiwiYSIsIjEiXQ~WyIwOGE1Yjc5MjMyYjAzYzBhIiwiMSJd~WyJiNWE2YjUzZGQwYTFmMGIwIiwienp6IiwieHh4Il0~WyIxYzdmOTE4ZTE0MjA2NzZiIiwiZm9vIiwiYmFyIl0~WyJmZjYxYzQ5ZGU2NjFiYzMxIiwiYXJyIixbeyIuLi4iOiJTSG96VW5KNUpkd0ZtTjVCbXB5dXZCWGZfZWRjckVvcExPYThTVlBFUmg0In0sIjIiLHsiX3NkIjpbIkpuODNhZkp0OGx4NG1FMzZpRkZyS2U2R2VnN0dlVUQ4Z3UwdVo3NnRZcW8iXX1dXQ~';
|
|
190
|
+
const decodedSdJwt = await decodeSdJwt(sdjwt, digest);
|
|
191
|
+
const jwtPayload = JSON.parse(JSON.stringify(decodedSdJwt.jwt.payload));
|
|
192
|
+
|
|
193
|
+
const { _sd_alg, payload } = getSDAlgAndPayload(decodedSdJwt.jwt.payload);
|
|
194
|
+
const hash = { hasher: digest, alg: _sd_alg };
|
|
195
|
+
const map = await createHashMapping(decodedSdJwt.disclosures, hash);
|
|
196
|
+
|
|
197
|
+
const { unpackedObj } = unpackObj(decodedSdJwt.jwt.payload, map);
|
|
198
|
+
|
|
199
|
+
expect(unpackedObj).toBeDefined();
|
|
200
|
+
expect(jwtPayload).toStrictEqual(decodedSdJwt.jwt.payload);
|
|
201
|
+
});
|
|
164
202
|
});
|