@sd-jwt/decode 0.2.1 → 2.0.2-next.26
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/LICENSE +201 -0
- package/dist/index.d.mts +57 -0
- package/dist/index.d.ts +57 -0
- package/dist/index.js +282 -0
- package/dist/index.mjs +249 -0
- package/package.json +57 -46
- package/src/decode.ts +323 -0
- package/src/index.ts +1 -0
- package/src/test/decode.spec.ts +150 -0
- package/tsconfig.json +7 -0
- package/vitest.config.mts +4 -0
- package/README.md +0 -97
- package/build/disclosures/calculateDigest.d.ts +0 -4
- package/build/disclosures/calculateDigest.js +0 -14
- package/build/disclosures/calculateDigest.js.map +0 -1
- package/build/disclosures/decodePayload.d.ts +0 -2
- package/build/disclosures/decodePayload.js +0 -75
- package/build/disclosures/decodePayload.js.map +0 -1
- package/build/disclosures/fromArray.d.ts +0 -2
- package/build/disclosures/fromArray.js +0 -8
- package/build/disclosures/fromArray.js.map +0 -1
- package/build/disclosures/fromString.d.ts +0 -2
- package/build/disclosures/fromString.js +0 -11
- package/build/disclosures/fromString.js.map +0 -1
- package/build/disclosures/index.d.ts +0 -5
- package/build/disclosures/index.js +0 -22
- package/build/disclosures/index.js.map +0 -1
- package/build/disclosures/toArray.d.ts +0 -2
- package/build/disclosures/toArray.js +0 -6
- package/build/disclosures/toArray.js.map +0 -1
- package/build/index.d.ts +0 -5
- package/build/index.js +0 -20
- package/build/index.js.map +0 -1
- package/build/jwt/fromCompact.d.ts +0 -5
- package/build/jwt/fromCompact.js +0 -26
- package/build/jwt/fromCompact.js.map +0 -1
- package/build/jwt/index.d.ts +0 -1
- package/build/jwt/index.js +0 -18
- package/build/jwt/index.js.map +0 -1
- package/build/keyBinding/assertValid.d.ts +0 -0
- package/build/keyBinding/assertValid.js +0 -2
- package/build/keyBinding/assertValid.js.map +0 -1
- package/build/keyBinding/fromCompact.d.ts +0 -5
- package/build/keyBinding/fromCompact.js +0 -24
- package/build/keyBinding/fromCompact.js.map +0 -1
- package/build/keyBinding/index.d.ts +0 -2
- package/build/keyBinding/index.js +0 -19
- package/build/keyBinding/index.js.map +0 -1
- package/build/keyBinding/sdHash.d.ts +0 -2
- package/build/keyBinding/sdHash.js +0 -17
- package/build/keyBinding/sdHash.js.map +0 -1
- package/build/sdJwt/fromCompact.d.ts +0 -17
- package/build/sdJwt/fromCompact.js +0 -39
- package/build/sdJwt/fromCompact.js.map +0 -1
- package/build/sdJwt/index.d.ts +0 -1
- package/build/sdJwt/index.js +0 -18
- package/build/sdJwt/index.js.map +0 -1
- package/build/sdJwtVc/decode.d.ts +0 -12
- package/build/sdJwtVc/decode.js +0 -38
- package/build/sdJwtVc/decode.js.map +0 -1
- package/build/sdJwtVc/fromCompact.d.ts +0 -17
- package/build/sdJwtVc/fromCompact.js +0 -24
- package/build/sdJwtVc/fromCompact.js.map +0 -1
- package/build/sdJwtVc/index.d.ts +0 -2
- package/build/sdJwtVc/index.js +0 -19
- package/build/sdJwtVc/index.js.map +0 -1
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { describe, expect, test } from 'vitest';
|
|
2
|
+
import {
|
|
3
|
+
decodeJwt,
|
|
4
|
+
decodeSdJwt,
|
|
5
|
+
decodeSdJwtSync,
|
|
6
|
+
getClaims,
|
|
7
|
+
getClaimsSync,
|
|
8
|
+
splitSdJwt,
|
|
9
|
+
} from '../decode';
|
|
10
|
+
import { digest } from '@sd-jwt/crypto-nodejs';
|
|
11
|
+
|
|
12
|
+
describe('decode tests', () => {
|
|
13
|
+
test('decode jwt', () => {
|
|
14
|
+
const jwt =
|
|
15
|
+
'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c';
|
|
16
|
+
const { header, payload, signature } = decodeJwt(jwt);
|
|
17
|
+
expect(signature).toBeDefined();
|
|
18
|
+
expect(header).toStrictEqual({ alg: 'HS256', typ: 'JWT' });
|
|
19
|
+
expect(payload).toStrictEqual({
|
|
20
|
+
sub: '1234567890',
|
|
21
|
+
name: 'John Doe',
|
|
22
|
+
iat: 1516239022,
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
test('decode jwt with invalid input', () => {
|
|
27
|
+
const jwt = 'invalid.invalid';
|
|
28
|
+
expect(() => decodeJwt(jwt)).toThrow('Invalid JWT as input');
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
test('split sdjwt', () => {
|
|
32
|
+
const sdjwt = 'h.p.s~d1~d2~';
|
|
33
|
+
const { jwt, disclosures, kbJwt } = splitSdJwt(sdjwt);
|
|
34
|
+
expect(jwt).toBe('h.p.s');
|
|
35
|
+
expect(disclosures).toStrictEqual(['d1', 'd2']);
|
|
36
|
+
expect(kbJwt).toBeUndefined();
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
test('split sdjwt with kbjwt', () => {
|
|
40
|
+
const sdjwt = 'h.p.s~d1~d2~kbh.kbp.kbs';
|
|
41
|
+
const { jwt, disclosures, kbJwt } = splitSdJwt(sdjwt);
|
|
42
|
+
expect(jwt).toBe('h.p.s');
|
|
43
|
+
expect(disclosures).toStrictEqual(['d1', 'd2']);
|
|
44
|
+
expect(kbJwt).toBe('kbh.kbp.kbs');
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
test('decode sdjwt', async () => {
|
|
48
|
+
const sdjwt =
|
|
49
|
+
'eyJ0eXAiOiJzZC1qd3QiLCJhbGciOiJFZERTQSJ9.eyJfc2QiOlsiaWQ1azZ1ZVplVTY4bExaMlU2YjJJbF9QR3ZKb1RDMlpkMkpwY0RwMzFIWSJdLCJfc2RfYWxnIjoic2hhLTI1NiJ9.GiLF_HhacrstqCJ223VvWOoJJWU8qk4dYQHklSMwxv36pPF_7ER53Wbty1qYRlQ6NeMUdBRRdj9JQLLCzz1gCQ~WyI2NTMxNDA2ZmVhZmU0YjBmIiwiZm9vIiwiYmFyIl0~';
|
|
50
|
+
const decodedSdJwt = await decodeSdJwt(sdjwt, digest);
|
|
51
|
+
expect(decodedSdJwt).toBeDefined();
|
|
52
|
+
expect(decodedSdJwt.kbJwt).toBeUndefined();
|
|
53
|
+
expect(decodedSdJwt.disclosures.length).toEqual(1);
|
|
54
|
+
expect(decodedSdJwt.jwt).toBeDefined();
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
test('decode jwt', async () => {
|
|
58
|
+
const jwt =
|
|
59
|
+
'eyJhbGciOiJIUzI1NiIsInR5cCI6InNkK2p3dCJ9.eyJsYXN0bmFtZSI6IkRvZSIsInNzbiI6IjEyMy00NS02Nzg5IiwiX3NkIjpbIk4yUXhZV1UxTlRnME1qQmpOR1JpWVRCaU1tRmtaamN5WXpSbFpXUmhaRGd5WkRCbE1qaGhZVGcwTnpJMU9XSXpZek5qWkdNNE1qZG1NVGN6TmpZd05RIiwiWlRSalkyUTVOemRoWkRVM05tWTFZV0UyTmpka01XVmpNRE16WXpOak5qQmtNak5pT0dZelpHSTBOelV4TURsak9EWTRNREEzWm1JeFpUY3daREZqTmciXSwiX3NkX2FsZyI6InNoYS0yNTYifQ.mX14Sw86xy8NFQta7tCfNmhVCqzfaJ_K3VEIhTjbLDY';
|
|
60
|
+
const decodedSdJwt = await decodeSdJwt(jwt, digest);
|
|
61
|
+
expect(decodedSdJwt).toBeDefined();
|
|
62
|
+
expect(decodedSdJwt.kbJwt).toBeUndefined();
|
|
63
|
+
expect(decodedSdJwt.disclosures.length).toEqual(0);
|
|
64
|
+
expect(decodedSdJwt.jwt).toBeDefined();
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
test('decode sdjwt sync', () => {
|
|
68
|
+
const sdjwt =
|
|
69
|
+
'eyJ0eXAiOiJzZC1qd3QiLCJhbGciOiJFZERTQSJ9.eyJfc2QiOlsiaWQ1azZ1ZVplVTY4bExaMlU2YjJJbF9QR3ZKb1RDMlpkMkpwY0RwMzFIWSJdLCJfc2RfYWxnIjoic2hhLTI1NiJ9.GiLF_HhacrstqCJ223VvWOoJJWU8qk4dYQHklSMwxv36pPF_7ER53Wbty1qYRlQ6NeMUdBRRdj9JQLLCzz1gCQ~WyI2NTMxNDA2ZmVhZmU0YjBmIiwiZm9vIiwiYmFyIl0~';
|
|
70
|
+
const decodedSdJwt = decodeSdJwtSync(sdjwt, digest);
|
|
71
|
+
expect(decodedSdJwt).toBeDefined();
|
|
72
|
+
expect(decodedSdJwt.kbJwt).toBeUndefined();
|
|
73
|
+
expect(decodedSdJwt.disclosures.length).toEqual(1);
|
|
74
|
+
expect(decodedSdJwt.jwt).toBeDefined();
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
test('decode jwt sync', () => {
|
|
78
|
+
const jwt =
|
|
79
|
+
'eyJhbGciOiJIUzI1NiIsInR5cCI6InNkK2p3dCJ9.eyJsYXN0bmFtZSI6IkRvZSIsInNzbiI6IjEyMy00NS02Nzg5IiwiX3NkIjpbIk4yUXhZV1UxTlRnME1qQmpOR1JpWVRCaU1tRmtaamN5WXpSbFpXUmhaRGd5WkRCbE1qaGhZVGcwTnpJMU9XSXpZek5qWkdNNE1qZG1NVGN6TmpZd05RIiwiWlRSalkyUTVOemRoWkRVM05tWTFZV0UyTmpka01XVmpNRE16WXpOak5qQmtNak5pT0dZelpHSTBOelV4TURsak9EWTRNREEzWm1JeFpUY3daREZqTmciXSwiX3NkX2FsZyI6InNoYS0yNTYifQ.mX14Sw86xy8NFQta7tCfNmhVCqzfaJ_K3VEIhTjbLDY';
|
|
80
|
+
const decodedSdJwt = decodeSdJwtSync(jwt, digest);
|
|
81
|
+
expect(decodedSdJwt).toBeDefined();
|
|
82
|
+
expect(decodedSdJwt.kbJwt).toBeUndefined();
|
|
83
|
+
expect(decodedSdJwt.disclosures.length).toEqual(0);
|
|
84
|
+
expect(decodedSdJwt.jwt).toBeDefined();
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
test('get claims', async () => {
|
|
88
|
+
const sdjwt =
|
|
89
|
+
'eyJ0eXAiOiJzZC1qd3QiLCJhbGciOiJFZERTQSJ9.eyJfc2QiOlsiaWQ1azZ1ZVplVTY4bExaMlU2YjJJbF9QR3ZKb1RDMlpkMkpwY0RwMzFIWSJdLCJfc2RfYWxnIjoic2hhLTI1NiJ9.GiLF_HhacrstqCJ223VvWOoJJWU8qk4dYQHklSMwxv36pPF_7ER53Wbty1qYRlQ6NeMUdBRRdj9JQLLCzz1gCQ~WyI2NTMxNDA2ZmVhZmU0YjBmIiwiZm9vIiwiYmFyIl0~';
|
|
90
|
+
const decodedSdJwt = await decodeSdJwt(sdjwt, digest);
|
|
91
|
+
const claims = await getClaims(
|
|
92
|
+
decodedSdJwt.jwt.payload,
|
|
93
|
+
decodedSdJwt.disclosures,
|
|
94
|
+
digest,
|
|
95
|
+
);
|
|
96
|
+
expect(claims).toStrictEqual({
|
|
97
|
+
foo: 'bar',
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
test('getClaims #2', async () => {
|
|
102
|
+
const sdjwt =
|
|
103
|
+
'eyJ0eXAiOiJzZC1qd3QiLCJhbGciOiJFZERTQSJ9.eyJ0ZXN0Ijp7Il9zZCI6WyJqVEszMHNleDZhYV9kUk1KSWZDR056Q0FwbVB5MzRRNjNBa3QzS3hhSktzIl19LCJfc2QiOlsiME9nMi1ReG95eW1UOGNnVzZZUjVSSFpQLUJuR2tHUi1NM2otLV92RWlzSSIsIkcwZ3lHNnExVFMyUlQxMkZ3X2RRRDVVcjlZc1AwZlVWOXVtQWdGMC1jQ1EiXSwiX3NkX2FsZyI6InNoYS0yNTYifQ.ggEyE4SeDO2Hu3tol3VLmi7NQj56yKzKQDaafocgkLrUBdivghohtzrfcbrMN7CRufJ_Cnh0EL54kymXLGTdDQ~WyIwNGU0MjAzOWU4ZWFiOWRjIiwiYSIsIjEiXQ~WyIwOGE1Yjc5MjMyYjAzYzBhIiwiMSJd~WyJiNWE2YjUzZGQwYTFmMGIwIiwienp6IiwieHh4Il0~WyIxYzdmOTE4ZTE0MjA2NzZiIiwiZm9vIiwiYmFyIl0~WyJmZjYxYzQ5ZGU2NjFiYzMxIiwiYXJyIixbeyIuLi4iOiJTSG96VW5KNUpkd0ZtTjVCbXB5dXZCWGZfZWRjckVvcExPYThTVlBFUmg0In0sIjIiLHsiX3NkIjpbIkpuODNhZkp0OGx4NG1FMzZpRkZyS2U2R2VnN0dlVUQ4Z3UwdVo3NnRZcW8iXX1dXQ~';
|
|
104
|
+
const decodedSdJwt = await decodeSdJwt(sdjwt, digest);
|
|
105
|
+
const claims = await getClaims(
|
|
106
|
+
decodedSdJwt.jwt.payload,
|
|
107
|
+
decodedSdJwt.disclosures,
|
|
108
|
+
digest,
|
|
109
|
+
);
|
|
110
|
+
expect(claims).toStrictEqual({
|
|
111
|
+
foo: 'bar',
|
|
112
|
+
arr: ['1', '2', { a: '1' }],
|
|
113
|
+
test: {
|
|
114
|
+
zzz: 'xxx',
|
|
115
|
+
},
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
test('get claims sync', () => {
|
|
120
|
+
const sdjwt =
|
|
121
|
+
'eyJ0eXAiOiJzZC1qd3QiLCJhbGciOiJFZERTQSJ9.eyJfc2QiOlsiaWQ1azZ1ZVplVTY4bExaMlU2YjJJbF9QR3ZKb1RDMlpkMkpwY0RwMzFIWSJdLCJfc2RfYWxnIjoic2hhLTI1NiJ9.GiLF_HhacrstqCJ223VvWOoJJWU8qk4dYQHklSMwxv36pPF_7ER53Wbty1qYRlQ6NeMUdBRRdj9JQLLCzz1gCQ~WyI2NTMxNDA2ZmVhZmU0YjBmIiwiZm9vIiwiYmFyIl0~';
|
|
122
|
+
const decodedSdJwt = decodeSdJwtSync(sdjwt, digest);
|
|
123
|
+
const claims = getClaimsSync(
|
|
124
|
+
decodedSdJwt.jwt.payload,
|
|
125
|
+
decodedSdJwt.disclosures,
|
|
126
|
+
digest,
|
|
127
|
+
);
|
|
128
|
+
expect(claims).toStrictEqual({
|
|
129
|
+
foo: 'bar',
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
test('getClaims sync #2', () => {
|
|
134
|
+
const sdjwt =
|
|
135
|
+
'eyJ0eXAiOiJzZC1qd3QiLCJhbGciOiJFZERTQSJ9.eyJ0ZXN0Ijp7Il9zZCI6WyJqVEszMHNleDZhYV9kUk1KSWZDR056Q0FwbVB5MzRRNjNBa3QzS3hhSktzIl19LCJfc2QiOlsiME9nMi1ReG95eW1UOGNnVzZZUjVSSFpQLUJuR2tHUi1NM2otLV92RWlzSSIsIkcwZ3lHNnExVFMyUlQxMkZ3X2RRRDVVcjlZc1AwZlVWOXVtQWdGMC1jQ1EiXSwiX3NkX2FsZyI6InNoYS0yNTYifQ.ggEyE4SeDO2Hu3tol3VLmi7NQj56yKzKQDaafocgkLrUBdivghohtzrfcbrMN7CRufJ_Cnh0EL54kymXLGTdDQ~WyIwNGU0MjAzOWU4ZWFiOWRjIiwiYSIsIjEiXQ~WyIwOGE1Yjc5MjMyYjAzYzBhIiwiMSJd~WyJiNWE2YjUzZGQwYTFmMGIwIiwienp6IiwieHh4Il0~WyIxYzdmOTE4ZTE0MjA2NzZiIiwiZm9vIiwiYmFyIl0~WyJmZjYxYzQ5ZGU2NjFiYzMxIiwiYXJyIixbeyIuLi4iOiJTSG96VW5KNUpkd0ZtTjVCbXB5dXZCWGZfZWRjckVvcExPYThTVlBFUmg0In0sIjIiLHsiX3NkIjpbIkpuODNhZkp0OGx4NG1FMzZpRkZyS2U2R2VnN0dlVUQ4Z3UwdVo3NnRZcW8iXX1dXQ~';
|
|
136
|
+
const decodedSdJwt = decodeSdJwtSync(sdjwt, digest);
|
|
137
|
+
const claims = getClaimsSync(
|
|
138
|
+
decodedSdJwt.jwt.payload,
|
|
139
|
+
decodedSdJwt.disclosures,
|
|
140
|
+
digest,
|
|
141
|
+
);
|
|
142
|
+
expect(claims).toStrictEqual({
|
|
143
|
+
foo: 'bar',
|
|
144
|
+
arr: ['1', '2', { a: '1' }],
|
|
145
|
+
test: {
|
|
146
|
+
zzz: 'xxx',
|
|
147
|
+
},
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
});
|
package/tsconfig.json
ADDED
package/README.md
DELETED
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
# Selective Disclosure JWT (SD-JWT) Draft 06 & Selective Disclosure JWT VC 01
|
|
2
|
-
|
|
3
|
-
## Compliant with
|
|
4
|
-
|
|
5
|
-
- [sd-jwt
|
|
6
|
-
06](https://datatracker.ietf.org/doc/draft-ietf-oauth-selective-disclosure-jwt/06/)
|
|
7
|
-
- [sd-jwt-vc
|
|
8
|
-
01](https://datatracker.ietf.org/doc/draft-ietf-oauth-sd-jwt-vc/01/)
|
|
9
|
-
|
|
10
|
-
## Design decisions
|
|
11
|
-
|
|
12
|
-
### Bring your own crypto
|
|
13
|
-
|
|
14
|
-
This library does not provide any of the cryptographic primitives required for
|
|
15
|
-
encryption, decryption, signing, verification and hashing. It is expected that
|
|
16
|
-
the user of this library provides this. The main reason for this is that most
|
|
17
|
-
libraries have their own library and KMS. Providing private keys to this
|
|
18
|
-
library adds another layer of insecurity which should be avoided. Hashing has
|
|
19
|
-
not been added for platform compatibility between node,js, browser and React
|
|
20
|
-
Native. In the future a platform-independent sha2-256 may be provided.
|
|
21
|
-
|
|
22
|
-
### Specification backwards compatibility
|
|
23
|
-
|
|
24
|
-
Since these specifications are in early drafts, no time will be spend in
|
|
25
|
-
supporting earlier versions of the specifications. This library may work for
|
|
26
|
-
older versions, e.g. the addition of selectively disclosable items in an array
|
|
27
|
-
does not break previous implementations. Once a non-draft specification is
|
|
28
|
-
released it will stay up-to-date with that version.
|
|
29
|
-
|
|
30
|
-
### Dependencies
|
|
31
|
-
|
|
32
|
-
This library only has one dependency on `buffer` which makes sure this library
|
|
33
|
-
works in Node.js, the browser and React Native. Buffer is used internally for
|
|
34
|
-
`base64-url-no-pad` encoding.
|
|
35
|
-
|
|
36
|
-
### Usage
|
|
37
|
-
|
|
38
|
-
I'd highly recommend to check out the [examples folder](example) to see how
|
|
39
|
-
this library can be leveraged.
|
|
40
|
-
|
|
41
|
-
### Issuance API
|
|
42
|
-
|
|
43
|
-
The issuance API takes an object called a `disclosureFrame`. This
|
|
44
|
-
`disclosureFrame` is a Boolean Map of the payload which allows you to specify
|
|
45
|
-
which attributes of the payload may be selectively disclosed. If an attribute is not provided in the `disclosureFrame`, it will be included in the clear-text payload. For example:
|
|
46
|
-
|
|
47
|
-
```jsonc
|
|
48
|
-
// The payload
|
|
49
|
-
{
|
|
50
|
-
"iss": "https://example.org/issuer",
|
|
51
|
-
"is_age_over_21": true,
|
|
52
|
-
"is_age_over_24": true,
|
|
53
|
-
"is_age_over_65": false,
|
|
54
|
-
"date_of_birth": "1990-01-01",
|
|
55
|
-
"address": {
|
|
56
|
-
"street": "some street",
|
|
57
|
-
"house_number": 200,
|
|
58
|
-
"zipcode": "2344GH"
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
```jsonc
|
|
64
|
-
// The disclosure frame
|
|
65
|
-
{
|
|
66
|
-
"is_age_over_21": true,
|
|
67
|
-
"is_age_over_24": true,
|
|
68
|
-
"is_age_over_65": true,
|
|
69
|
-
"date_of_birth": true,
|
|
70
|
-
"address": {
|
|
71
|
-
"street": true,
|
|
72
|
-
"house_number": true,
|
|
73
|
-
"zipcode": true
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
// or to only disclose the address as a group
|
|
78
|
-
{
|
|
79
|
-
"is_age_over_21": true,
|
|
80
|
-
"is_age_over_24": true,
|
|
81
|
-
"is_age_over_65": true,
|
|
82
|
-
"date_of_birth": true,
|
|
83
|
-
"address": true
|
|
84
|
-
}
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
### Presentation and verification API
|
|
88
|
-
|
|
89
|
-
Since there is officially standardized way to request and present a
|
|
90
|
-
presentation, [High Assurance Interoperability
|
|
91
|
-
Profile](https://vcstuff.github.io/oid4vc-haip-sd-jwt-vc/draft-oid4vc-haip-sd-jwt-vc.html)
|
|
92
|
-
may be used, the API is defined in a way which works in a primitive manner for
|
|
93
|
-
now. For example, to present you can provide a list of indices of the
|
|
94
|
-
disclosures which will be included. Examples of this can be found in the
|
|
95
|
-
[examples folder](example). For verification a list of keys or required
|
|
96
|
-
claims can be provided. It does not matter whether these are selectively
|
|
97
|
-
disclosable claims, or if they are included inside the payload.
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import type { AsyncHasher, Hasher, HasherAlgorithm } from '@sd-jwt/types';
|
|
2
|
-
import type { Disclosure } from '@sd-jwt/types';
|
|
3
|
-
export type CalculateDigestReturnType<HasherImplementation extends Hasher | AsyncHasher> = ReturnType<HasherImplementation> extends Promise<any> ? Promise<string> : string;
|
|
4
|
-
export declare const disclosureCalculateDigest: <HI extends Hasher | AsyncHasher>(disclosure: Disclosure, algorithm: HasherAlgorithm, hasher: HI) => CalculateDigestReturnType<HI>;
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.disclosureCalculateDigest = void 0;
|
|
4
|
-
const utils_1 = require("@sd-jwt/utils");
|
|
5
|
-
const toArray_1 = require("./toArray");
|
|
6
|
-
const disclosureCalculateDigest = (disclosure, algorithm, hasher) => {
|
|
7
|
-
const encoded = utils_1.Base64url.encodeFromJson((0, toArray_1.disclosureToArray)(disclosure));
|
|
8
|
-
const digest = hasher(encoded, algorithm);
|
|
9
|
-
return ((0, utils_1.isPromise)(digest)
|
|
10
|
-
? digest.then(utils_1.Base64url.encode)
|
|
11
|
-
: utils_1.Base64url.encode(digest));
|
|
12
|
-
};
|
|
13
|
-
exports.disclosureCalculateDigest = disclosureCalculateDigest;
|
|
14
|
-
//# sourceMappingURL=calculateDigest.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"calculateDigest.js","sourceRoot":"","sources":["../../src/disclosures/calculateDigest.ts"],"names":[],"mappings":";;;AAEA,yCAAoD;AACpD,uCAA6C;AAQtC,MAAM,yBAAyB,GAAG,CACrC,UAAsB,EACtB,SAA0B,EAC1B,MAAU,EACmB,EAAE;IAC/B,MAAM,OAAO,GAAG,iBAAS,CAAC,cAAc,CAAC,IAAA,2BAAiB,EAAC,UAAU,CAAC,CAAC,CAAA;IACvE,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;IAEzC,OAAO,CACH,IAAA,iBAAS,EAAC,MAAM,CAAC;QACb,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAS,CAAC,MAAM,CAAC;QAC/B,CAAC,CAAC,iBAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CACA,CAAA;AACtC,CAAC,CAAA;AAbY,QAAA,yBAAyB,6BAarC"}
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.decodeDisclosuresInPayload = void 0;
|
|
4
|
-
function decodeDisclosuresInPayload(payload, disclosures, newPayload = {}) {
|
|
5
|
-
const entries = Object.entries(payload);
|
|
6
|
-
// Loop over de payload
|
|
7
|
-
for (let i = 0; i < entries.length; i++) {
|
|
8
|
-
const [key, value] = entries[i];
|
|
9
|
-
// See whether we have an `_sd` key with an array of disclosures.
|
|
10
|
-
const foundDisclosures = shouldInsertDisclosure(key, value, disclosures);
|
|
11
|
-
// Add the disclosed items to the pretty payload
|
|
12
|
-
foundDisclosures.forEach((d) => {
|
|
13
|
-
newPayload[d.key] = d.value;
|
|
14
|
-
});
|
|
15
|
-
// Skip the rest as `_sd` is a special case
|
|
16
|
-
if (key === '_sd') {
|
|
17
|
-
continue;
|
|
18
|
-
}
|
|
19
|
-
// Include all the primitive claims into the new payload
|
|
20
|
-
if (shouldIncludeCleartextClaim(key, value)) {
|
|
21
|
-
newPayload[key] = value;
|
|
22
|
-
continue;
|
|
23
|
-
}
|
|
24
|
-
if (typeof value === 'object' && Array.isArray(value)) {
|
|
25
|
-
newPayload[key] = swapClaimsInsideArray(value, disclosures);
|
|
26
|
-
continue;
|
|
27
|
-
}
|
|
28
|
-
if (typeof value === 'object' &&
|
|
29
|
-
value !== null &&
|
|
30
|
-
!Array.isArray(value)) {
|
|
31
|
-
newPayload[key] = decodeDisclosuresInPayload(value, disclosures);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
return newPayload;
|
|
35
|
-
}
|
|
36
|
-
exports.decodeDisclosuresInPayload = decodeDisclosuresInPayload;
|
|
37
|
-
function swapClaimsInsideArray(array, disclosures) {
|
|
38
|
-
const processedArray = [];
|
|
39
|
-
for (const el of array) {
|
|
40
|
-
if (typeof el === 'object' && el !== null && '...' in el) {
|
|
41
|
-
const hash = el['...'];
|
|
42
|
-
let disclosureFound = false;
|
|
43
|
-
let disclosureValue;
|
|
44
|
-
disclosureLoop: for (const d of disclosures) {
|
|
45
|
-
if (d.digest === hash && d.key === undefined) {
|
|
46
|
-
disclosureValue = d.value;
|
|
47
|
-
disclosureFound = true;
|
|
48
|
-
break disclosureLoop;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
processedArray.push(disclosureFound ? disclosureValue : el);
|
|
52
|
-
}
|
|
53
|
-
else {
|
|
54
|
-
processedArray.push(el);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
return processedArray;
|
|
58
|
-
}
|
|
59
|
-
function shouldInsertDisclosure(key, value, disclosures) {
|
|
60
|
-
if (key !== '_sd')
|
|
61
|
-
return [];
|
|
62
|
-
if (!Array.isArray(value))
|
|
63
|
-
return [];
|
|
64
|
-
const filteredDisclosures = [];
|
|
65
|
-
for (const d of disclosures) {
|
|
66
|
-
if (value.includes(d.digest)) {
|
|
67
|
-
filteredDisclosures.push(d);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
return filteredDisclosures;
|
|
71
|
-
}
|
|
72
|
-
function shouldIncludeCleartextClaim(key, value) {
|
|
73
|
-
return key !== '_sd' && key !== '_sd_alg' && typeof value !== 'object';
|
|
74
|
-
}
|
|
75
|
-
//# sourceMappingURL=decodePayload.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"decodePayload.js","sourceRoot":"","sources":["../../src/disclosures/decodePayload.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.disclosureFromArray = void 0;
|
|
4
|
-
const disclosureFromArray = (a) => a[2]
|
|
5
|
-
? { salt: a[0], key: a[1], value: a[2] }
|
|
6
|
-
: { salt: a[0], value: a[1] };
|
|
7
|
-
exports.disclosureFromArray = disclosureFromArray;
|
|
8
|
-
//# sourceMappingURL=fromArray.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fromArray.js","sourceRoot":"","sources":["../../src/disclosures/fromArray.ts"],"names":[],"mappings":";;;AAEO,MAAM,mBAAmB,GAAG,CAC/B,CAAkB,EACS,EAAE,CAC7B,CAAC,CAAC,CAAC,CAAC;IACA,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAW,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;IAClD,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;AALxB,QAAA,mBAAmB,uBAKK"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.disclosureFromString = void 0;
|
|
4
|
-
const utils_1 = require("@sd-jwt/utils");
|
|
5
|
-
const fromArray_1 = require("./fromArray");
|
|
6
|
-
const disclosureFromString = (s) => {
|
|
7
|
-
const item = utils_1.Base64url.decodeToJson(s);
|
|
8
|
-
return Object.assign(Object.assign({}, (0, fromArray_1.disclosureFromArray)(item)), { encoded: s });
|
|
9
|
-
};
|
|
10
|
-
exports.disclosureFromString = disclosureFromString;
|
|
11
|
-
//# sourceMappingURL=fromString.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fromString.js","sourceRoot":"","sources":["../../src/disclosures/fromString.ts"],"names":[],"mappings":";;;AACA,yCAAyC;AACzC,2CAAiD;AAE1C,MAAM,oBAAoB,GAAG,CAAC,CAAS,EAAc,EAAE;IAC1D,MAAM,IAAI,GAAG,iBAAS,CAAC,YAAY,CAAkB,CAAC,CAAC,CAAA;IACvD,uCAAY,IAAA,+BAAmB,EAAC,IAAI,CAAC,KAAE,OAAO,EAAE,CAAC,IAAE;AACvD,CAAC,CAAA;AAHY,QAAA,oBAAoB,wBAGhC"}
|
|
@@ -1,22 +0,0 @@
|
|
|
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("./toArray"), exports);
|
|
18
|
-
__exportStar(require("./fromArray"), exports);
|
|
19
|
-
__exportStar(require("./fromString"), exports);
|
|
20
|
-
__exportStar(require("./calculateDigest"), exports);
|
|
21
|
-
__exportStar(require("./decodePayload"), exports);
|
|
22
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/disclosures/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4CAAyB;AACzB,8CAA2B;AAC3B,+CAA4B;AAC5B,oDAAiC;AACjC,kDAA+B"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.disclosureToArray = void 0;
|
|
4
|
-
const disclosureToArray = (d) => d.key ? [d.salt, d.key, d.value] : [d.salt, d.value];
|
|
5
|
-
exports.disclosureToArray = disclosureToArray;
|
|
6
|
-
//# sourceMappingURL=toArray.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"toArray.js","sourceRoot":"","sources":["../../src/disclosures/toArray.ts"],"names":[],"mappings":";;;AAEO,MAAM,iBAAiB,GAAG,CAAC,CAAa,EAAmB,EAAE,CAChE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAA;AAD3C,QAAA,iBAAiB,qBAC0B"}
|
package/build/index.d.ts
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
export { jwtFromCompact } from './jwt';
|
|
2
|
-
export { sdJwtFromCompact } from './sdJwt';
|
|
3
|
-
export { decodeSdJwtVc, sdJwtVcFromCompact } from './sdJwtVc';
|
|
4
|
-
export { keyBindingFromCompact, calculateSdHash } from './keyBinding';
|
|
5
|
-
export { disclosureCalculateDigest, disclosureToArray, disclosureFromArray, disclosureFromString, decodeDisclosuresInPayload } from './disclosures';
|
package/build/index.js
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.decodeDisclosuresInPayload = exports.disclosureFromString = exports.disclosureFromArray = exports.disclosureToArray = exports.disclosureCalculateDigest = exports.calculateSdHash = exports.keyBindingFromCompact = exports.sdJwtVcFromCompact = exports.decodeSdJwtVc = exports.sdJwtFromCompact = exports.jwtFromCompact = void 0;
|
|
4
|
-
var jwt_1 = require("./jwt");
|
|
5
|
-
Object.defineProperty(exports, "jwtFromCompact", { enumerable: true, get: function () { return jwt_1.jwtFromCompact; } });
|
|
6
|
-
var sdJwt_1 = require("./sdJwt");
|
|
7
|
-
Object.defineProperty(exports, "sdJwtFromCompact", { enumerable: true, get: function () { return sdJwt_1.sdJwtFromCompact; } });
|
|
8
|
-
var sdJwtVc_1 = require("./sdJwtVc");
|
|
9
|
-
Object.defineProperty(exports, "decodeSdJwtVc", { enumerable: true, get: function () { return sdJwtVc_1.decodeSdJwtVc; } });
|
|
10
|
-
Object.defineProperty(exports, "sdJwtVcFromCompact", { enumerable: true, get: function () { return sdJwtVc_1.sdJwtVcFromCompact; } });
|
|
11
|
-
var keyBinding_1 = require("./keyBinding");
|
|
12
|
-
Object.defineProperty(exports, "keyBindingFromCompact", { enumerable: true, get: function () { return keyBinding_1.keyBindingFromCompact; } });
|
|
13
|
-
Object.defineProperty(exports, "calculateSdHash", { enumerable: true, get: function () { return keyBinding_1.calculateSdHash; } });
|
|
14
|
-
var disclosures_1 = require("./disclosures");
|
|
15
|
-
Object.defineProperty(exports, "disclosureCalculateDigest", { enumerable: true, get: function () { return disclosures_1.disclosureCalculateDigest; } });
|
|
16
|
-
Object.defineProperty(exports, "disclosureToArray", { enumerable: true, get: function () { return disclosures_1.disclosureToArray; } });
|
|
17
|
-
Object.defineProperty(exports, "disclosureFromArray", { enumerable: true, get: function () { return disclosures_1.disclosureFromArray; } });
|
|
18
|
-
Object.defineProperty(exports, "disclosureFromString", { enumerable: true, get: function () { return disclosures_1.disclosureFromString; } });
|
|
19
|
-
Object.defineProperty(exports, "decodeDisclosuresInPayload", { enumerable: true, get: function () { return disclosures_1.decodeDisclosuresInPayload; } });
|
|
20
|
-
//# sourceMappingURL=index.js.map
|
package/build/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,6BAAsC;AAA7B,qGAAA,cAAc,OAAA;AACvB,iCAA0C;AAAjC,yGAAA,gBAAgB,OAAA;AACzB,qCAA6D;AAApD,wGAAA,aAAa,OAAA;AAAE,6GAAA,kBAAkB,OAAA;AAC1C,2CAAqE;AAA5D,mHAAA,qBAAqB,OAAA;AAAE,6GAAA,eAAe,OAAA;AAE/C,6CAMsB;AALlB,wHAAA,yBAAyB,OAAA;AACzB,gHAAA,iBAAiB,OAAA;AACjB,kHAAA,mBAAmB,OAAA;AACnB,mHAAA,oBAAoB,OAAA;AACpB,yHAAA,0BAA0B,OAAA"}
|
package/build/jwt/fromCompact.js
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.jwtFromCompact = void 0;
|
|
4
|
-
const utils_1 = require("@sd-jwt/utils");
|
|
5
|
-
const jwtFromCompact = (compact) => {
|
|
6
|
-
if (compact.includes('~')) {
|
|
7
|
-
throw new Error('compact JWT includes `~` which is only allowed in an sd-jwt. Please use sdJwtFromCompact() instead.');
|
|
8
|
-
}
|
|
9
|
-
if ((compact.match(/\./g) || []).length !== 2) {
|
|
10
|
-
throw new Error('compact JWT must include two periods (.)');
|
|
11
|
-
}
|
|
12
|
-
const [compactHeader, compactPayload, encodedSignature] = compact.split('.');
|
|
13
|
-
if (!encodedSignature || encodedSignature.length === 0) {
|
|
14
|
-
throw new Error('A signature must be provided within the context of sd-jwt');
|
|
15
|
-
}
|
|
16
|
-
const header = utils_1.Base64url.decodeToJson(compactHeader);
|
|
17
|
-
const payload = utils_1.Base64url.decodeToJson(compactPayload);
|
|
18
|
-
const signature = utils_1.Base64url.decode(encodedSignature);
|
|
19
|
-
return {
|
|
20
|
-
header,
|
|
21
|
-
payload,
|
|
22
|
-
signature
|
|
23
|
-
};
|
|
24
|
-
};
|
|
25
|
-
exports.jwtFromCompact = jwtFromCompact;
|
|
26
|
-
//# sourceMappingURL=fromCompact.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fromCompact.js","sourceRoot":"","sources":["../../src/jwt/fromCompact.ts"],"names":[],"mappings":";;;AAAA,yCAAyC;AAElC,MAAM,cAAc,GAAG,CAI1B,OAAe,EACjB,EAAE;IACA,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACX,qGAAqG,CACxG,CAAA;IACL,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;IAC/D,CAAC;IAED,MAAM,CAAC,aAAa,EAAE,cAAc,EAAE,gBAAgB,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAE5E,IAAI,CAAC,gBAAgB,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,KAAK,CACX,2DAA2D,CAC9D,CAAA;IACL,CAAC;IAED,MAAM,MAAM,GAAG,iBAAS,CAAC,YAAY,CAAS,aAAa,CAAC,CAAA;IAC5D,MAAM,OAAO,GAAG,iBAAS,CAAC,YAAY,CAAU,cAAc,CAAC,CAAA;IAC/D,MAAM,SAAS,GAAG,iBAAS,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;IAEpD,OAAO;QACH,MAAM;QACN,OAAO;QACP,SAAS;KACZ,CAAA;AACL,CAAC,CAAA;AAjCY,QAAA,cAAc,kBAiC1B"}
|
package/build/jwt/index.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './fromCompact';
|
package/build/jwt/index.js
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
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("./fromCompact"), exports);
|
|
18
|
-
//# sourceMappingURL=index.js.map
|
package/build/jwt/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/jwt/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA6B"}
|
|
File without changes
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"assertValid.js","sourceRoot":"","sources":["../../src/keyBinding/assertValid.ts"],"names":[],"mappings":""}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.keyBindingFromCompact = void 0;
|
|
4
|
-
const utils_1 = require("@sd-jwt/utils");
|
|
5
|
-
const jwt_1 = require("../jwt");
|
|
6
|
-
const keyBindingFromCompact = (compact) => {
|
|
7
|
-
const jwt = (0, jwt_1.jwtFromCompact)(compact);
|
|
8
|
-
try {
|
|
9
|
-
(0, utils_1.assertClaimInObject)(jwt.header, 'typ', 'kb+jwt');
|
|
10
|
-
(0, utils_1.assertClaimInObject)(jwt.header, 'alg');
|
|
11
|
-
(0, utils_1.assertClaimInObject)(jwt.payload, 'iat');
|
|
12
|
-
(0, utils_1.assertClaimInObject)(jwt.payload, 'nonce');
|
|
13
|
-
(0, utils_1.assertClaimInObject)(jwt.payload, 'aud');
|
|
14
|
-
}
|
|
15
|
-
catch (e) {
|
|
16
|
-
if (e instanceof Error) {
|
|
17
|
-
e.message = `jwt is not valid for usage with key binding. Error: ${e.message}`;
|
|
18
|
-
}
|
|
19
|
-
throw e;
|
|
20
|
-
}
|
|
21
|
-
return jwt;
|
|
22
|
-
};
|
|
23
|
-
exports.keyBindingFromCompact = keyBindingFromCompact;
|
|
24
|
-
//# sourceMappingURL=fromCompact.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fromCompact.js","sourceRoot":"","sources":["../../src/keyBinding/fromCompact.ts"],"names":[],"mappings":";;;AAAA,yCAAmD;AACnD,gCAAuC;AAEhC,MAAM,qBAAqB,GAAG,CAIjC,OAAe,EACjB,EAAE;IACA,MAAM,GAAG,GAAG,IAAA,oBAAc,EAAkB,OAAO,CAAC,CAAA;IAEpD,IAAI,CAAC;QACD,IAAA,2BAAmB,EAAC,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAA;QAChD,IAAA,2BAAmB,EAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;QAEtC,IAAA,2BAAmB,EAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QACvC,IAAA,2BAAmB,EAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QACzC,IAAA,2BAAmB,EAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;IAC3C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,IAAI,CAAC,YAAY,KAAK,EAAE,CAAC;YACrB,CAAC,CAAC,OAAO,GAAG,uDAAuD,CAAC,CAAC,OAAO,EAAE,CAAA;QAClF,CAAC;QAED,MAAM,CAAC,CAAA;IACX,CAAC;IAED,OAAO,GAAG,CAAA;AACd,CAAC,CAAA;AAxBY,QAAA,qBAAqB,yBAwBjC"}
|
|
@@ -1,19 +0,0 @@
|
|
|
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("./fromCompact"), exports);
|
|
18
|
-
__exportStar(require("./sdHash"), exports);
|
|
19
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/keyBinding/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA6B;AAC7B,2CAAwB"}
|