@sphereon/ssi-sdk.vc-status-list 0.33.0 → 0.33.1-feature.vcdm2.4
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/functions.js +140 -168
- package/dist/functions.js.map +1 -1
- package/dist/impl/IStatusList.js +1 -2
- package/dist/impl/OAuthStatusList.js +131 -142
- package/dist/impl/OAuthStatusList.js.map +1 -1
- package/dist/impl/StatusList2021.js +157 -164
- package/dist/impl/StatusList2021.js.map +1 -1
- package/dist/impl/StatusListFactory.js +9 -12
- package/dist/impl/StatusListFactory.js.map +1 -1
- package/dist/impl/encoding/cbor.js +34 -51
- package/dist/impl/encoding/cbor.js.map +1 -1
- package/dist/impl/encoding/common.js +6 -14
- package/dist/impl/encoding/common.js.map +1 -1
- package/dist/impl/encoding/jwt.js +27 -40
- package/dist/impl/encoding/jwt.js.map +1 -1
- package/dist/index.js +2 -18
- package/dist/index.js.map +1 -1
- package/dist/types/index.js +4 -7
- package/dist/types/index.js.map +1 -1
- package/dist/utils.js +22 -31
- package/dist/utils.js.map +1 -1
- package/package.json +3 -3
|
@@ -1,155 +1,144 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
const
|
|
15
|
-
const
|
|
16
|
-
const
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
return
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
const encodedList = statusList.compressStatusList();
|
|
36
|
-
const { statusListCredential } = yield this.createSignedStatusList(proofFormat, context, statusList, issuerString, id, expiresAt, keyRef);
|
|
37
|
-
return {
|
|
38
|
-
encodedList,
|
|
39
|
-
statusListCredential,
|
|
40
|
-
oauthStatusList: { bitsPerStatus },
|
|
41
|
-
length,
|
|
42
|
-
type: ssi_types_1.StatusListType.OAuthStatusList,
|
|
43
|
-
proofFormat,
|
|
44
|
-
id,
|
|
45
|
-
correlationId,
|
|
46
|
-
issuer,
|
|
47
|
-
statuslistContentType: this.buildContentType(proofFormat),
|
|
48
|
-
};
|
|
49
|
-
});
|
|
1
|
+
import { StatusListType } from '@sphereon/ssi-types';
|
|
2
|
+
import { determineProofFormat, getAssertedValue, getAssertedValues } from '../utils';
|
|
3
|
+
import { StatusList } from '@sd-jwt/jwt-status-list';
|
|
4
|
+
import { createSignedJwt, decodeStatusListJWT } from './encoding/jwt';
|
|
5
|
+
import { createSignedCbor, decodeStatusListCWT } from './encoding/cbor';
|
|
6
|
+
export const DEFAULT_BITS_PER_STATUS = 1; // 1 bit is sufficient for 0x00 - "VALID" 0x01 - "INVALID" saving space in the process
|
|
7
|
+
export const DEFAULT_LIST_LENGTH = 250000;
|
|
8
|
+
export const DEFAULT_PROOF_FORMAT = 'jwt';
|
|
9
|
+
export class OAuthStatusListImplementation {
|
|
10
|
+
async createNewStatusList(args, context) {
|
|
11
|
+
if (!args.oauthStatusList) {
|
|
12
|
+
throw new Error('OAuthStatusList options are required for type OAuthStatusList');
|
|
13
|
+
}
|
|
14
|
+
const proofFormat = args?.proofFormat ?? DEFAULT_PROOF_FORMAT;
|
|
15
|
+
const { issuer, id, oauthStatusList, keyRef } = args;
|
|
16
|
+
const { bitsPerStatus, expiresAt } = oauthStatusList;
|
|
17
|
+
const length = args.length ?? DEFAULT_LIST_LENGTH;
|
|
18
|
+
const issuerString = typeof issuer === 'string' ? issuer : issuer.id;
|
|
19
|
+
const correlationId = getAssertedValue('correlationId', args.correlationId);
|
|
20
|
+
const statusList = new StatusList(new Array(length).fill(0), bitsPerStatus ?? DEFAULT_BITS_PER_STATUS);
|
|
21
|
+
const encodedList = statusList.compressStatusList();
|
|
22
|
+
const { statusListCredential } = await this.createSignedStatusList(proofFormat, context, statusList, issuerString, id, expiresAt, keyRef);
|
|
23
|
+
return {
|
|
24
|
+
encodedList,
|
|
25
|
+
statusListCredential,
|
|
26
|
+
oauthStatusList: { bitsPerStatus },
|
|
27
|
+
length,
|
|
28
|
+
type: StatusListType.OAuthStatusList,
|
|
29
|
+
proofFormat,
|
|
30
|
+
id,
|
|
31
|
+
correlationId,
|
|
32
|
+
issuer,
|
|
33
|
+
statuslistContentType: this.buildContentType(proofFormat),
|
|
34
|
+
};
|
|
50
35
|
}
|
|
51
|
-
updateStatusListIndex(args, context) {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
};
|
|
79
|
-
});
|
|
36
|
+
async updateStatusListIndex(args, context) {
|
|
37
|
+
const { statusListCredential, value, expiresAt, keyRef } = args;
|
|
38
|
+
if (typeof statusListCredential !== 'string') {
|
|
39
|
+
return Promise.reject('statusListCredential in neither JWT nor CWT');
|
|
40
|
+
}
|
|
41
|
+
const proofFormat = determineProofFormat(statusListCredential);
|
|
42
|
+
const decoded = proofFormat === 'jwt' ? decodeStatusListJWT(statusListCredential) : decodeStatusListCWT(statusListCredential);
|
|
43
|
+
const { statusList, issuer, id } = decoded;
|
|
44
|
+
const index = typeof args.statusListIndex === 'number' ? args.statusListIndex : parseInt(args.statusListIndex);
|
|
45
|
+
if (index < 0 || index >= statusList.statusList.length) {
|
|
46
|
+
throw new Error('Status list index out of bounds');
|
|
47
|
+
}
|
|
48
|
+
statusList.setStatus(index, value);
|
|
49
|
+
const { statusListCredential: signedCredential, encodedList } = await this.createSignedStatusList(proofFormat, context, statusList, issuer, id, expiresAt, keyRef);
|
|
50
|
+
return {
|
|
51
|
+
statusListCredential: signedCredential,
|
|
52
|
+
encodedList,
|
|
53
|
+
oauthStatusList: {
|
|
54
|
+
bitsPerStatus: statusList.getBitsPerStatus(),
|
|
55
|
+
},
|
|
56
|
+
length: statusList.statusList.length,
|
|
57
|
+
type: StatusListType.OAuthStatusList,
|
|
58
|
+
proofFormat,
|
|
59
|
+
id,
|
|
60
|
+
issuer,
|
|
61
|
+
statuslistContentType: this.buildContentType(proofFormat),
|
|
62
|
+
};
|
|
80
63
|
}
|
|
81
64
|
// FIXME: This still assumes only two values (boolean), whilst this list supports 8 bits max
|
|
82
|
-
updateStatusListFromEncodedList(args, context) {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
};
|
|
110
|
-
});
|
|
65
|
+
async updateStatusListFromEncodedList(args, context) {
|
|
66
|
+
if (!args.oauthStatusList) {
|
|
67
|
+
throw new Error('OAuthStatusList options are required for type OAuthStatusList');
|
|
68
|
+
}
|
|
69
|
+
const { proofFormat, oauthStatusList, keyRef } = args;
|
|
70
|
+
const { bitsPerStatus, expiresAt } = oauthStatusList;
|
|
71
|
+
const { issuer, id } = getAssertedValues(args);
|
|
72
|
+
const issuerString = typeof issuer === 'string' ? issuer : issuer.id;
|
|
73
|
+
const listToUpdate = StatusList.decompressStatusList(args.encodedList, bitsPerStatus ?? DEFAULT_BITS_PER_STATUS);
|
|
74
|
+
const index = typeof args.statusListIndex === 'number' ? args.statusListIndex : parseInt(args.statusListIndex);
|
|
75
|
+
// FIXME: See above.
|
|
76
|
+
listToUpdate.setStatus(index, args.value ? 1 : 0);
|
|
77
|
+
const { statusListCredential, encodedList } = await this.createSignedStatusList(proofFormat ?? DEFAULT_PROOF_FORMAT, context, listToUpdate, issuerString, id, expiresAt, keyRef);
|
|
78
|
+
return {
|
|
79
|
+
encodedList,
|
|
80
|
+
statusListCredential,
|
|
81
|
+
oauthStatusList: {
|
|
82
|
+
bitsPerStatus,
|
|
83
|
+
expiresAt,
|
|
84
|
+
},
|
|
85
|
+
length: listToUpdate.statusList.length,
|
|
86
|
+
type: StatusListType.OAuthStatusList,
|
|
87
|
+
proofFormat: proofFormat ?? DEFAULT_PROOF_FORMAT,
|
|
88
|
+
id,
|
|
89
|
+
issuer,
|
|
90
|
+
statuslistContentType: this.buildContentType(proofFormat),
|
|
91
|
+
};
|
|
111
92
|
}
|
|
112
93
|
buildContentType(proofFormat) {
|
|
113
94
|
return `application/statuslist+${proofFormat === 'cbor' ? 'cwt' : 'jwt'}`;
|
|
114
95
|
}
|
|
115
|
-
checkStatusIndex(args) {
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
return statusList.getStatus(index);
|
|
128
|
-
});
|
|
96
|
+
async checkStatusIndex(args) {
|
|
97
|
+
const { statusListCredential, statusListIndex } = args;
|
|
98
|
+
if (typeof statusListCredential !== 'string') {
|
|
99
|
+
return Promise.reject('statusListCredential in neither JWT nor CWT');
|
|
100
|
+
}
|
|
101
|
+
const proofFormat = determineProofFormat(statusListCredential);
|
|
102
|
+
const { statusList } = proofFormat === 'jwt' ? decodeStatusListJWT(statusListCredential) : decodeStatusListCWT(statusListCredential);
|
|
103
|
+
const index = typeof statusListIndex === 'number' ? statusListIndex : parseInt(statusListIndex);
|
|
104
|
+
if (index < 0 || index >= statusList.statusList.length) {
|
|
105
|
+
throw new Error('Status list index out of bounds');
|
|
106
|
+
}
|
|
107
|
+
return statusList.getStatus(index);
|
|
129
108
|
}
|
|
130
|
-
toStatusListDetails(args) {
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
109
|
+
async toStatusListDetails(args) {
|
|
110
|
+
const { statusListPayload } = args;
|
|
111
|
+
const proofFormat = determineProofFormat(statusListPayload);
|
|
112
|
+
const decoded = proofFormat === 'jwt' ? decodeStatusListJWT(statusListPayload) : decodeStatusListCWT(statusListPayload);
|
|
113
|
+
const { statusList, issuer, id, exp } = decoded;
|
|
114
|
+
return {
|
|
115
|
+
id,
|
|
116
|
+
encodedList: statusList.compressStatusList(),
|
|
117
|
+
issuer,
|
|
118
|
+
type: StatusListType.OAuthStatusList,
|
|
119
|
+
proofFormat,
|
|
120
|
+
length: statusList.statusList.length,
|
|
121
|
+
statusListCredential: statusListPayload,
|
|
122
|
+
statuslistContentType: this.buildContentType(proofFormat),
|
|
123
|
+
oauthStatusList: {
|
|
124
|
+
bitsPerStatus: statusList.getBitsPerStatus(),
|
|
125
|
+
...(exp && { expiresAt: new Date(exp * 1000) }),
|
|
126
|
+
},
|
|
127
|
+
...(args.correlationId && { correlationId: args.correlationId }),
|
|
128
|
+
...(args.driverType && { driverType: args.driverType }),
|
|
129
|
+
};
|
|
138
130
|
}
|
|
139
|
-
createSignedStatusList(proofFormat, context, statusList, issuerString, id, expiresAt, keyRef) {
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
return yield (0, cbor_1.createSignedCbor)(context, statusList, issuerString, id, expiresAt, keyRef);
|
|
147
|
-
}
|
|
148
|
-
default:
|
|
149
|
-
throw new Error(`Invalid proof format '${proofFormat}' for OAuthStatusList`);
|
|
131
|
+
async createSignedStatusList(proofFormat, context, statusList, issuerString, id, expiresAt, keyRef) {
|
|
132
|
+
switch (proofFormat) {
|
|
133
|
+
case 'jwt': {
|
|
134
|
+
return await createSignedJwt(context, statusList, issuerString, id, expiresAt, keyRef);
|
|
135
|
+
}
|
|
136
|
+
case 'cbor': {
|
|
137
|
+
return await createSignedCbor(context, statusList, issuerString, id, expiresAt, keyRef);
|
|
150
138
|
}
|
|
151
|
-
|
|
139
|
+
default:
|
|
140
|
+
throw new Error(`Invalid proof format '${proofFormat}' for OAuthStatusList`);
|
|
141
|
+
}
|
|
152
142
|
}
|
|
153
143
|
}
|
|
154
|
-
exports.OAuthStatusListImplementation = OAuthStatusListImplementation;
|
|
155
144
|
//# sourceMappingURL=OAuthStatusList.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OAuthStatusList.js","sourceRoot":"","sources":["../../src/impl/OAuthStatusList.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"OAuthStatusList.js","sourceRoot":"","sources":["../../src/impl/OAuthStatusList.ts"],"names":[],"mappings":"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"}
|