@cheqd/did-provider-cheqd 4.5.4 → 4.6.0-develop.1
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/build/esm/agent/ICheqd.d.ts +305 -89
- package/build/esm/agent/ICheqd.d.ts.map +1 -1
- package/build/esm/agent/ICheqd.js +1567 -87
- package/build/esm/agent/ICheqd.js.map +1 -1
- package/build/esm/did-manager/cheqd-did-provider.d.ts +16 -5
- package/build/esm/did-manager/cheqd-did-provider.d.ts.map +1 -1
- package/build/esm/did-manager/cheqd-did-provider.js +11 -3
- package/build/esm/did-manager/cheqd-did-provider.js.map +1 -1
- package/build/esm/dkg-threshold/lit-protocol/v6.d.ts.map +1 -1
- package/build/esm/dkg-threshold/lit-protocol/v6.js +63 -33
- package/build/esm/dkg-threshold/lit-protocol/v6.js.map +1 -1
- package/build/esm/utils/helpers.d.ts +28 -7
- package/build/esm/utils/helpers.d.ts.map +1 -1
- package/build/esm/utils/helpers.js +120 -29
- package/build/esm/utils/helpers.js.map +1 -1
- package/build/tsconfig.esm.tsbuildinfo +1 -1
- package/build/tsconfig.types.tsbuildinfo +1 -1
- package/build/types/agent/ICheqd.d.ts +305 -89
- package/build/types/agent/ICheqd.d.ts.map +1 -1
- package/build/types/did-manager/cheqd-did-provider.d.ts +16 -5
- package/build/types/did-manager/cheqd-did-provider.d.ts.map +1 -1
- package/build/types/dkg-threshold/lit-protocol/v6.d.ts.map +1 -1
- package/build/types/utils/helpers.d.ts +28 -7
- package/build/types/utils/helpers.d.ts.map +1 -1
- package/package.json +6 -4
- package/src/agent/ICheqd.ts +2440 -379
- package/src/did-manager/cheqd-did-provider.ts +25 -10
- package/src/dkg-threshold/lit-protocol/v6.ts +65 -34
- package/src/utils/helpers.ts +172 -34
- package/tsconfig.json +2 -0
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { fromString, toString } from 'uint8arrays';
|
|
2
|
+
import { randomBytes as cryptoRandomBytes } from 'crypto';
|
|
3
|
+
import { Cheqd } from '../agent/index.js';
|
|
3
4
|
export function isEncodedList(list) {
|
|
4
5
|
return typeof list === 'string' && list.split('-').every((item) => typeof item === 'string' && item && item.length);
|
|
5
6
|
}
|
|
@@ -40,32 +41,9 @@ export async function randomFromRange(min, max, notIn) {
|
|
|
40
41
|
}
|
|
41
42
|
return random;
|
|
42
43
|
}
|
|
43
|
-
export async function randomUniqueSubsetInRange(min, max, count) {
|
|
44
|
-
const subset = [];
|
|
45
|
-
for (let i = 0; i < count; i++) {
|
|
46
|
-
subset.push(await randomFromRange(min, max, subset));
|
|
47
|
-
}
|
|
48
|
-
return subset;
|
|
49
|
-
}
|
|
50
44
|
export async function randomBytes(length) {
|
|
51
45
|
return Buffer.from(Array.from({ length }, () => Math.floor(Math.random() * 256)));
|
|
52
46
|
}
|
|
53
|
-
export async function randomUniqueSecret(options) {
|
|
54
|
-
return generateSecret({
|
|
55
|
-
length: 64,
|
|
56
|
-
numbers: true,
|
|
57
|
-
symbols: true,
|
|
58
|
-
uppercase: true,
|
|
59
|
-
...options,
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
export async function initialiseIndexArray(length) {
|
|
63
|
-
return Array(length).fill(true);
|
|
64
|
-
}
|
|
65
|
-
export async function shuffleArray(array) {
|
|
66
|
-
const shuffled = array.sort(() => Math.random() - 0.5);
|
|
67
|
-
return shuffled;
|
|
68
|
-
}
|
|
69
47
|
export async function toBlob(data) {
|
|
70
48
|
return new Blob([data]);
|
|
71
49
|
}
|
|
@@ -76,10 +54,9 @@ export async function blobToHexString(blob) {
|
|
|
76
54
|
const uint8Array = new Uint8Array(buffer);
|
|
77
55
|
return toString(uint8Array, 'hex');
|
|
78
56
|
}
|
|
79
|
-
export function
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
});
|
|
57
|
+
export async function blobToUint8Array(blob) {
|
|
58
|
+
const arrayBuffer = await blob.arrayBuffer();
|
|
59
|
+
return new Uint8Array(arrayBuffer);
|
|
83
60
|
}
|
|
84
61
|
export function getControllers(didDocument) {
|
|
85
62
|
const controllers = [];
|
|
@@ -93,4 +70,118 @@ export function getControllers(didDocument) {
|
|
|
93
70
|
}
|
|
94
71
|
return controllers;
|
|
95
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* Check if encoded bitstring is valid base64url format
|
|
75
|
+
*/
|
|
76
|
+
export function isValidEncodedBitstring(encodedList) {
|
|
77
|
+
try {
|
|
78
|
+
// Should be valid base64url
|
|
79
|
+
fromString(encodedList, 'base64url');
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// Enhanced encoding function that returns metadata
|
|
87
|
+
export async function encodeWithMetadata(symmetricEncryptionCiphertext, thresholdEncryptionCiphertext) {
|
|
88
|
+
const symmetricBytes = await blobToUint8Array(symmetricEncryptionCiphertext);
|
|
89
|
+
// Concatenate both byte arrays
|
|
90
|
+
const combinedBytes = new Uint8Array(symmetricBytes.length + thresholdEncryptionCiphertext.length);
|
|
91
|
+
combinedBytes.set(symmetricBytes, 0);
|
|
92
|
+
combinedBytes.set(thresholdEncryptionCiphertext, symmetricBytes.length);
|
|
93
|
+
// Encode as base64url
|
|
94
|
+
const encodedList = toString(combinedBytes, 'base64url');
|
|
95
|
+
return { encodedList, symmetricLength: symmetricBytes.length };
|
|
96
|
+
}
|
|
97
|
+
export function decodeWithMetadata(encodedList, symmetricLength) {
|
|
98
|
+
// Decode from base64url to bytes
|
|
99
|
+
const combinedBytes = fromString(encodedList, 'base64url');
|
|
100
|
+
// Split based on the symmetric length
|
|
101
|
+
const symmetricBytes = combinedBytes.slice(0, symmetricLength);
|
|
102
|
+
const thresholdBytes = combinedBytes.slice(symmetricLength);
|
|
103
|
+
// Return as desired types
|
|
104
|
+
return {
|
|
105
|
+
symmetricEncryptionCiphertext: new Blob([symmetricBytes]),
|
|
106
|
+
thresholdEncryptionCiphertext: thresholdBytes,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Generates a random statusListIndex based on external system constraints
|
|
111
|
+
*
|
|
112
|
+
* @param statusOptions - Constraints from external StatusListIndexManager
|
|
113
|
+
* @param config - Bitstring configuration (statusSize, length, etc.)
|
|
114
|
+
* @returns Random statusListIndex that satisfies all constraints
|
|
115
|
+
*/
|
|
116
|
+
export function generateRandomStatusListIndex(statusOptions, config = {}) {
|
|
117
|
+
const { statusSize = Cheqd.DefaultBitstringStatusSize, length = Cheqd.DefaultBitstringLength, maxRetries = 1000, } = config;
|
|
118
|
+
// If external system already provided a specific index, validate and return it
|
|
119
|
+
if (statusOptions.statusListIndex !== undefined) {
|
|
120
|
+
validateStatusListIndex(statusOptions.statusListIndex, statusOptions, config);
|
|
121
|
+
return statusOptions.statusListIndex;
|
|
122
|
+
}
|
|
123
|
+
// Calculate valid range bounds
|
|
124
|
+
const bounds = calculateValidRange(statusOptions, config);
|
|
125
|
+
const excludedIndices = new Set(statusOptions.indexNotIn || []);
|
|
126
|
+
// Check if generation is possible
|
|
127
|
+
const totalPossibleIndices = bounds.end - bounds.start + 1;
|
|
128
|
+
if (excludedIndices.size >= totalPossibleIndices) {
|
|
129
|
+
throw new Error(`Cannot generate index: all indices in range [${bounds.start}, ${bounds.end}] are excluded`);
|
|
130
|
+
}
|
|
131
|
+
let attempts = 0;
|
|
132
|
+
while (attempts < maxRetries) {
|
|
133
|
+
// Generate cryptographically secure random index within range
|
|
134
|
+
const randBytes = cryptoRandomBytes(4);
|
|
135
|
+
const randomValue = randBytes.readUInt32BE(0);
|
|
136
|
+
// Map to valid range [bounds.start, bounds.end]
|
|
137
|
+
const rangeSize = bounds.end - bounds.start + 1;
|
|
138
|
+
const statusListIndex = bounds.start + (randomValue % rangeSize);
|
|
139
|
+
// Check if this index is excluded
|
|
140
|
+
if (!excludedIndices.has(statusListIndex)) {
|
|
141
|
+
return statusListIndex;
|
|
142
|
+
}
|
|
143
|
+
attempts++;
|
|
144
|
+
}
|
|
145
|
+
throw new Error(`Failed to generate unique statusListIndex after ${maxRetries} attempts. ` +
|
|
146
|
+
`Range: [${bounds.start}, ${bounds.end}], Excluded: ${excludedIndices.size} indices`);
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Validates a specific statusListIndex against constraints
|
|
150
|
+
*/
|
|
151
|
+
function validateStatusListIndex(index, statusOptions, config) {
|
|
152
|
+
const bounds = calculateValidRange(statusOptions, config);
|
|
153
|
+
const excludedIndices = statusOptions.indexNotIn || [];
|
|
154
|
+
if (index < bounds.start || index > bounds.end) {
|
|
155
|
+
throw new Error(`StatusListIndex ${index} is outside valid range [${bounds.start}, ${bounds.end}]`);
|
|
156
|
+
}
|
|
157
|
+
if (excludedIndices.includes(index)) {
|
|
158
|
+
throw new Error(`StatusListIndex ${index} is in the excluded list: [${excludedIndices.join(', ')}]`);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Calculates the valid range for statusListIndex generation
|
|
163
|
+
*/
|
|
164
|
+
function calculateValidRange(statusOptions, config) {
|
|
165
|
+
const { statusSize = Cheqd.DefaultBitstringStatusSize, length = Cheqd.DefaultBitstringLength } = config;
|
|
166
|
+
// Calculate maximum possible index based on bitstring configuration
|
|
167
|
+
const totalBits = length * statusSize;
|
|
168
|
+
const alignedLength = Math.ceil(totalBits / 8) * 8;
|
|
169
|
+
const maxPossibleIndex = Math.floor(alignedLength / statusSize) - 1;
|
|
170
|
+
// Start with external system's range constraints
|
|
171
|
+
let start = statusOptions.statusListRangeStart ?? 0;
|
|
172
|
+
let end = statusOptions.statusListRangeEnd ?? maxPossibleIndex;
|
|
173
|
+
// Ensure range is within bitstring bounds
|
|
174
|
+
start = Math.max(0, start);
|
|
175
|
+
end = Math.min(maxPossibleIndex, end);
|
|
176
|
+
// Validate range
|
|
177
|
+
if (start > end) {
|
|
178
|
+
throw new Error(`Invalid range: start (${start}) is greater than end (${end}). ` +
|
|
179
|
+
`Maximum possible index for this configuration: ${maxPossibleIndex}`);
|
|
180
|
+
}
|
|
181
|
+
if (start < 0 || end > maxPossibleIndex) {
|
|
182
|
+
throw new Error(`Range [${start}, ${end}] exceeds valid bounds [0, ${maxPossibleIndex}] ` +
|
|
183
|
+
`for statusSize=${statusSize} and length=${length}`);
|
|
184
|
+
}
|
|
185
|
+
return { start, end };
|
|
186
|
+
}
|
|
96
187
|
//# sourceMappingURL=helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/utils/helpers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/utils/helpers.ts"],"names":[],"mappings":"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"}
|