@bsv/sdk 1.2.20 → 1.2.22

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.
Files changed (160) hide show
  1. package/dist/cjs/package.json +3 -3
  2. package/dist/cjs/src/auth/Peer.js +536 -0
  3. package/dist/cjs/src/auth/Peer.js.map +1 -0
  4. package/dist/cjs/src/auth/SessionManager.js +66 -0
  5. package/dist/cjs/src/auth/SessionManager.js.map +1 -0
  6. package/dist/cjs/src/auth/{Certificate.js → certificates/Certificate.js} +22 -26
  7. package/dist/cjs/src/auth/certificates/Certificate.js.map +1 -0
  8. package/dist/cjs/src/auth/certificates/MasterCertificate.js +79 -0
  9. package/dist/cjs/src/auth/certificates/MasterCertificate.js.map +1 -0
  10. package/dist/cjs/src/auth/certificates/VerifiableCertificate.js +49 -0
  11. package/dist/cjs/src/auth/certificates/VerifiableCertificate.js.map +1 -0
  12. package/dist/cjs/src/auth/certificates/index.js +25 -0
  13. package/dist/cjs/src/auth/certificates/index.js.map +1 -0
  14. package/dist/cjs/src/auth/clients/AuthFetch.js +411 -0
  15. package/dist/cjs/src/auth/clients/AuthFetch.js.map +1 -0
  16. package/dist/cjs/src/auth/clients/index.js +18 -0
  17. package/dist/cjs/src/auth/clients/index.js.map +1 -0
  18. package/dist/cjs/src/auth/index.js +20 -5
  19. package/dist/cjs/src/auth/index.js.map +1 -1
  20. package/dist/cjs/src/auth/transports/SimplifiedFetchTransport.js +259 -0
  21. package/dist/cjs/src/auth/transports/SimplifiedFetchTransport.js.map +1 -0
  22. package/dist/cjs/src/auth/transports/index.js +18 -0
  23. package/dist/cjs/src/auth/transports/index.js.map +1 -0
  24. package/dist/cjs/src/auth/types.js +3 -0
  25. package/dist/cjs/src/auth/types.js.map +1 -0
  26. package/dist/cjs/src/auth/utils/certificateHelpers.js +51 -0
  27. package/dist/cjs/src/auth/utils/certificateHelpers.js.map +1 -0
  28. package/dist/cjs/src/auth/utils/createNonce.js +19 -0
  29. package/dist/cjs/src/auth/utils/createNonce.js.map +1 -0
  30. package/dist/cjs/src/auth/utils/getVerifiableCertificates.js +31 -0
  31. package/dist/cjs/src/auth/utils/getVerifiableCertificates.js.map +1 -0
  32. package/dist/cjs/src/auth/utils/index.js +22 -0
  33. package/dist/cjs/src/auth/utils/index.js.map +1 -0
  34. package/dist/cjs/src/auth/utils/validateCertificates.js +42 -0
  35. package/dist/cjs/src/auth/utils/validateCertificates.js.map +1 -0
  36. package/dist/cjs/src/auth/utils/verifyNonce.js +27 -0
  37. package/dist/cjs/src/auth/utils/verifyNonce.js.map +1 -0
  38. package/dist/cjs/src/primitives/Point.js +1 -1
  39. package/dist/cjs/src/primitives/Point.js.map +1 -1
  40. package/dist/cjs/src/wallet/substrates/WalletWireProcessor.js +1 -1
  41. package/dist/cjs/src/wallet/substrates/WalletWireProcessor.js.map +1 -1
  42. package/dist/cjs/src/wallet/substrates/WalletWireTransceiver.js +148 -148
  43. package/dist/cjs/src/wallet/substrates/WalletWireTransceiver.js.map +1 -1
  44. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  45. package/dist/esm/src/auth/Peer.js +533 -0
  46. package/dist/esm/src/auth/Peer.js.map +1 -0
  47. package/dist/esm/src/auth/SessionManager.js +63 -0
  48. package/dist/esm/src/auth/SessionManager.js.map +1 -0
  49. package/dist/esm/src/auth/{Certificate.js → certificates/Certificate.js} +1 -2
  50. package/dist/esm/src/auth/certificates/Certificate.js.map +1 -0
  51. package/dist/esm/src/auth/certificates/MasterCertificate.js +73 -0
  52. package/dist/esm/src/auth/certificates/MasterCertificate.js.map +1 -0
  53. package/dist/esm/src/auth/certificates/VerifiableCertificate.js +44 -0
  54. package/dist/esm/src/auth/certificates/VerifiableCertificate.js.map +1 -0
  55. package/dist/esm/src/auth/certificates/index.js +4 -0
  56. package/dist/esm/src/auth/certificates/index.js.map +1 -0
  57. package/dist/esm/src/auth/clients/AuthFetch.js +409 -0
  58. package/dist/esm/src/auth/clients/AuthFetch.js.map +1 -0
  59. package/dist/esm/src/auth/clients/index.js +2 -0
  60. package/dist/esm/src/auth/clients/index.js.map +1 -0
  61. package/dist/esm/src/auth/index.js +7 -1
  62. package/dist/esm/src/auth/index.js.map +1 -1
  63. package/dist/esm/src/auth/transports/SimplifiedFetchTransport.js +258 -0
  64. package/dist/esm/src/auth/transports/SimplifiedFetchTransport.js.map +1 -0
  65. package/dist/esm/src/auth/transports/index.js +2 -0
  66. package/dist/esm/src/auth/transports/index.js.map +1 -0
  67. package/dist/esm/src/auth/types.js +2 -0
  68. package/dist/esm/src/auth/types.js.map +1 -0
  69. package/dist/esm/src/auth/utils/certificateHelpers.js +47 -0
  70. package/dist/esm/src/auth/utils/certificateHelpers.js.map +1 -0
  71. package/dist/esm/src/auth/utils/createNonce.js +16 -0
  72. package/dist/esm/src/auth/utils/createNonce.js.map +1 -0
  73. package/dist/esm/src/auth/utils/getVerifiableCertificates.js +27 -0
  74. package/dist/esm/src/auth/utils/getVerifiableCertificates.js.map +1 -0
  75. package/dist/esm/src/auth/utils/index.js +6 -0
  76. package/dist/esm/src/auth/utils/index.js.map +1 -0
  77. package/dist/esm/src/auth/utils/validateCertificates.js +38 -0
  78. package/dist/esm/src/auth/utils/validateCertificates.js.map +1 -0
  79. package/dist/esm/src/auth/utils/verifyNonce.js +24 -0
  80. package/dist/esm/src/auth/utils/verifyNonce.js.map +1 -0
  81. package/dist/esm/src/primitives/Point.js +1 -1
  82. package/dist/esm/src/primitives/Point.js.map +1 -1
  83. package/dist/esm/src/wallet/substrates/WalletWireProcessor.js +1 -1
  84. package/dist/esm/src/wallet/substrates/WalletWireProcessor.js.map +1 -1
  85. package/dist/esm/src/wallet/substrates/WalletWireTransceiver.js +1 -1
  86. package/dist/esm/src/wallet/substrates/WalletWireTransceiver.js.map +1 -1
  87. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  88. package/dist/types/src/auth/Peer.d.ts +193 -0
  89. package/dist/types/src/auth/Peer.d.ts.map +1 -0
  90. package/dist/types/src/auth/SessionManager.d.ts +42 -0
  91. package/dist/types/src/auth/SessionManager.d.ts.map +1 -0
  92. package/dist/types/src/auth/{Certificate.d.ts → certificates/Certificate.d.ts} +1 -1
  93. package/dist/types/src/auth/certificates/Certificate.d.ts.map +1 -0
  94. package/dist/types/src/auth/certificates/MasterCertificate.d.ts +38 -0
  95. package/dist/types/src/auth/certificates/MasterCertificate.d.ts.map +1 -0
  96. package/dist/types/src/auth/certificates/VerifiableCertificate.d.ts +26 -0
  97. package/dist/types/src/auth/certificates/VerifiableCertificate.d.ts.map +1 -0
  98. package/dist/types/src/auth/certificates/index.d.ts +4 -0
  99. package/dist/types/src/auth/certificates/index.d.ts.map +1 -0
  100. package/dist/types/src/auth/clients/AuthFetch.d.ts +87 -0
  101. package/dist/types/src/auth/clients/AuthFetch.d.ts.map +1 -0
  102. package/dist/types/src/auth/clients/index.d.ts +2 -0
  103. package/dist/types/src/auth/clients/index.d.ts.map +1 -0
  104. package/dist/types/src/auth/index.d.ts +7 -1
  105. package/dist/types/src/auth/index.d.ts.map +1 -1
  106. package/dist/types/src/auth/transports/SimplifiedFetchTransport.d.ts +51 -0
  107. package/dist/types/src/auth/transports/SimplifiedFetchTransport.d.ts.map +1 -0
  108. package/dist/types/src/auth/transports/index.d.ts +2 -0
  109. package/dist/types/src/auth/transports/index.d.ts.map +1 -0
  110. package/dist/types/src/auth/types.d.ts +31 -0
  111. package/dist/types/src/auth/types.d.ts.map +1 -0
  112. package/dist/types/src/auth/utils/certificateHelpers.d.ts +26 -0
  113. package/dist/types/src/auth/utils/certificateHelpers.d.ts.map +1 -0
  114. package/dist/types/src/auth/utils/createNonce.d.ts +8 -0
  115. package/dist/types/src/auth/utils/createNonce.d.ts.map +1 -0
  116. package/dist/types/src/auth/utils/getVerifiableCertificates.d.ts +13 -0
  117. package/dist/types/src/auth/utils/getVerifiableCertificates.d.ts.map +1 -0
  118. package/dist/types/src/auth/utils/index.d.ts +6 -0
  119. package/dist/types/src/auth/utils/index.d.ts.map +1 -0
  120. package/dist/types/src/auth/utils/validateCertificates.d.ts +12 -0
  121. package/dist/types/src/auth/utils/validateCertificates.d.ts.map +1 -0
  122. package/dist/types/src/auth/utils/verifyNonce.d.ts +9 -0
  123. package/dist/types/src/auth/utils/verifyNonce.d.ts.map +1 -0
  124. package/dist/types/src/primitives/Point.d.ts.map +1 -1
  125. package/dist/types/tsconfig.types.tsbuildinfo +1 -1
  126. package/dist/umd/bundle.js +1 -1
  127. package/docs/README.md +1 -0
  128. package/docs/auth.md +1193 -0
  129. package/package.json +13 -3
  130. package/src/auth/Peer.ts +600 -0
  131. package/src/auth/SessionManager.ts +71 -0
  132. package/src/auth/__tests/Peer.test.ts +599 -0
  133. package/src/auth/__tests/SessionManager.test.ts +87 -0
  134. package/src/auth/{Certificate.ts → certificates/Certificate.ts} +15 -8
  135. package/src/auth/certificates/MasterCertificate.ts +106 -0
  136. package/src/auth/certificates/VerifiableCertificate.ts +73 -0
  137. package/src/auth/certificates/__tests/Certificate.test.ts +282 -0
  138. package/src/auth/certificates/index.ts +3 -0
  139. package/src/auth/clients/AuthFetch.ts +482 -0
  140. package/src/auth/clients/index.ts +1 -0
  141. package/src/auth/index.ts +7 -1
  142. package/src/auth/transports/SimplifiedFetchTransport.ts +288 -0
  143. package/src/auth/transports/index.ts +1 -0
  144. package/src/auth/types.ts +41 -0
  145. package/src/auth/utils/__tests/cryptononce.test.ts +84 -0
  146. package/src/auth/utils/__tests/getVerifiableCertificates.test.ts +126 -0
  147. package/src/auth/utils/__tests/validateCertificates.test.ts +142 -0
  148. package/src/auth/utils/certificateHelpers.ts +86 -0
  149. package/src/auth/utils/createNonce.ts +16 -0
  150. package/src/auth/utils/getVerifiableCertificates.ts +40 -0
  151. package/src/auth/utils/index.ts +5 -0
  152. package/src/auth/utils/validateCertificates.ts +54 -0
  153. package/src/auth/utils/verifyNonce.ts +27 -0
  154. package/src/primitives/Point.ts +59 -59
  155. package/src/wallet/substrates/WalletWireProcessor.ts +1 -1
  156. package/src/wallet/substrates/WalletWireTransceiver.ts +1 -1
  157. package/dist/cjs/src/auth/Certificate.js.map +0 -1
  158. package/dist/esm/src/auth/Certificate.js.map +0 -1
  159. package/dist/types/src/auth/Certificate.d.ts.map +0 -1
  160. package/src/auth/__tests/Certificate.test.ts +0 -282
@@ -0,0 +1,259 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SimplifiedFetchTransport = void 0;
4
+ const mod_js_1 = require("../../../mod.js");
5
+ const SUCCESS_STATUS_CODES = [200, 402];
6
+ /**
7
+ * Implements an HTTP-specific transport for handling Peer mutual authentication messages.
8
+ * This class integrates with fetch to send and receive authenticated messages between peers.
9
+ */
10
+ class SimplifiedFetchTransport {
11
+ /**
12
+ * Constructs a new instance of SimplifiedFetchTransport.
13
+ * @param baseUrl - The base URL for all HTTP requests made by this transport.
14
+ * @param fetchClient - A fetch implementation to use for HTTP requests (default: global fetch).
15
+ */
16
+ constructor(baseUrl, fetchClient = fetch) {
17
+ this.fetchClient = fetchClient;
18
+ this.baseUrl = baseUrl;
19
+ }
20
+ /**
21
+ * Sends a message to an HTTP server using the transport mechanism.
22
+ * Handles both general and authenticated message types. For general messages,
23
+ * the payload is deserialized and sent as an HTTP request. For other message types,
24
+ * the message is sent as a POST request to the `/auth` endpoint.
25
+ *
26
+ * @param message - The AuthMessage to send.
27
+ * @returns A promise that resolves when the message is successfully sent.
28
+ *
29
+ * @throws Will throw an error if no listener has been registered via `onData`.
30
+ */
31
+ async send(message) {
32
+ if (!this.onDataCallback) {
33
+ throw new Error('Listen before you start speaking. God gave you two ears and one mouth for a reason.');
34
+ }
35
+ if (message.messageType !== 'general') {
36
+ const response = await this.fetchClient(`${this.baseUrl}/.well-known/auth`, {
37
+ method: 'POST',
38
+ headers: {
39
+ 'Content-Type': 'application/json'
40
+ },
41
+ body: JSON.stringify(message)
42
+ });
43
+ // Handle the response if data is received and callback is set
44
+ if (response.ok && this.onDataCallback) {
45
+ const responseMessage = await response.json();
46
+ if ((responseMessage === null || responseMessage === void 0 ? void 0 : responseMessage.status) !== 'certificate received') {
47
+ this.onDataCallback(responseMessage);
48
+ }
49
+ }
50
+ else {
51
+ // Server may be a non authenticated server
52
+ throw new Error('HTTP server failed to authenticate');
53
+ }
54
+ }
55
+ else {
56
+ // Parse message payload
57
+ const httpRequest = this.deserializeRequestPayload(message.payload);
58
+ // Send the byte array as the HTTP payload
59
+ const url = `${this.baseUrl}${httpRequest.urlPostfix}`;
60
+ let httpRequestWithAuthHeaders = httpRequest;
61
+ if (typeof httpRequest.headers !== 'object') {
62
+ httpRequestWithAuthHeaders.headers = {};
63
+ }
64
+ // Append auth headers in request to server
65
+ httpRequestWithAuthHeaders.headers['x-bsv-auth-version'] = message.version;
66
+ httpRequestWithAuthHeaders.headers['x-bsv-auth-identity-key'] = message.identityKey;
67
+ httpRequestWithAuthHeaders.headers['x-bsv-auth-nonce'] = message.nonce;
68
+ httpRequestWithAuthHeaders.headers['x-bsv-auth-your-nonce'] = message.yourNonce;
69
+ httpRequestWithAuthHeaders.headers['x-bsv-auth-signature'] = mod_js_1.Utils.toHex(message.signature);
70
+ httpRequestWithAuthHeaders.headers['x-bsv-auth-request-id'] = httpRequest.requestId;
71
+ // Ensure Content-Type is set for requests with a body
72
+ if (httpRequestWithAuthHeaders.body) {
73
+ const headers = httpRequestWithAuthHeaders.headers;
74
+ if (!headers['content-type']) {
75
+ throw new Error('Content-Type header is required for requests with a body.');
76
+ }
77
+ const contentType = headers['content-type'];
78
+ // Transform body based on Content-Type
79
+ if (contentType.includes('application/json')) {
80
+ // Convert byte array to JSON string
81
+ httpRequestWithAuthHeaders.body = mod_js_1.Utils.toUTF8(httpRequestWithAuthHeaders.body);
82
+ }
83
+ else if (contentType.includes('application/x-www-form-urlencoded')) {
84
+ // Convert byte array to URL-encoded string
85
+ httpRequestWithAuthHeaders.body = mod_js_1.Utils.toUTF8(httpRequestWithAuthHeaders.body);
86
+ }
87
+ else if (contentType.includes('text/plain')) {
88
+ // Convert byte array to plain UTF-8 string
89
+ httpRequestWithAuthHeaders.body = mod_js_1.Utils.toUTF8(httpRequestWithAuthHeaders.body);
90
+ }
91
+ else {
92
+ // For all other content types, treat as binary data
93
+ httpRequestWithAuthHeaders.body = new Uint8Array(httpRequestWithAuthHeaders.body);
94
+ }
95
+ }
96
+ // Send the actual fetch request to the server
97
+ const response = await this.fetchClient(url, {
98
+ method: httpRequestWithAuthHeaders.method,
99
+ headers: httpRequestWithAuthHeaders.headers,
100
+ body: httpRequestWithAuthHeaders.body
101
+ });
102
+ // Check for an acceptable status
103
+ if (!SUCCESS_STATUS_CODES.includes(response.status)) {
104
+ // Try parsing JSON error
105
+ let errorInfo;
106
+ try {
107
+ errorInfo = await response.json();
108
+ }
109
+ catch {
110
+ // Fallback to text if JSON parse fails
111
+ const text = await response.text().catch(() => '');
112
+ throw new Error(`HTTP ${response.status} - ${text || 'Unknown error'}`);
113
+ }
114
+ // If we find a known { status: 'error', code, description } structure
115
+ if ((errorInfo === null || errorInfo === void 0 ? void 0 : errorInfo.status) === 'error' && typeof errorInfo.description === 'string') {
116
+ const msg = `HTTP ${response.status} - ${errorInfo.description}`;
117
+ throw new Error(errorInfo.code ? `${msg} (code: ${errorInfo.code})` : msg);
118
+ }
119
+ // Otherwise just throw whatever we got
120
+ throw new Error(`HTTP ${response.status} - ${JSON.stringify(errorInfo)}`);
121
+ }
122
+ const parsedBody = await response.arrayBuffer();
123
+ const payloadWriter = new mod_js_1.Utils.Writer();
124
+ payloadWriter.write(mod_js_1.Utils.toArray(response.headers.get('x-bsv-auth-request-id'), 'base64'));
125
+ payloadWriter.writeVarIntNum(response.status);
126
+ // Filter out headers the server signed:
127
+ // - Custom headers prefixed with x-bsv are included, except auth
128
+ // - x-bsv-auth headers are not allowed
129
+ // - authorization header is signed by the server
130
+ const includedHeaders = [];
131
+ // Collect headers into a raw array for sorting
132
+ const headersArray = [];
133
+ response.headers.forEach((value, key) => {
134
+ const lowerKey = key.toLowerCase();
135
+ if (lowerKey.startsWith('x-bsv-') || lowerKey === 'authorization') {
136
+ if (!lowerKey.startsWith('x-bsv-auth')) {
137
+ headersArray.push([lowerKey, value]);
138
+ }
139
+ }
140
+ });
141
+ // Sort headers explicitly to match server-side order
142
+ headersArray.sort(([keyA], [keyB]) => keyA.localeCompare(keyB));
143
+ includedHeaders.push(...headersArray);
144
+ // nHeaders
145
+ payloadWriter.writeVarIntNum(includedHeaders.length);
146
+ for (let i = 0; i < includedHeaders.length; i++) {
147
+ // headerKeyLength
148
+ const headerKeyAsArray = mod_js_1.Utils.toArray(includedHeaders[i][0], 'utf8');
149
+ payloadWriter.writeVarIntNum(headerKeyAsArray.length);
150
+ // headerKey
151
+ payloadWriter.write(headerKeyAsArray);
152
+ // headerValueLength
153
+ const headerValueAsArray = mod_js_1.Utils.toArray(includedHeaders[i][1], 'utf8');
154
+ payloadWriter.writeVarIntNum(headerValueAsArray.length);
155
+ // headerValue
156
+ payloadWriter.write(headerValueAsArray);
157
+ }
158
+ // Handle body
159
+ if (parsedBody) {
160
+ const bodyAsArray = Array.from(new Uint8Array(parsedBody));
161
+ payloadWriter.writeVarIntNum(bodyAsArray.length);
162
+ payloadWriter.write(bodyAsArray);
163
+ }
164
+ else {
165
+ payloadWriter.writeVarIntNum(-1);
166
+ }
167
+ // Build the correct AuthMessage for the response
168
+ const responseMessage = {
169
+ version: response.headers.get('x-bsv-auth-version'),
170
+ messageType: response.headers.get('x-bsv-auth-message-type') === 'certificateRequest' ? 'certificateRequest' : 'general',
171
+ identityKey: response.headers.get('x-bsv-auth-identity-key'),
172
+ nonce: response.headers.get('x-bsv-auth-nonce'),
173
+ yourNonce: response.headers.get('x-bsv-auth-your-nonce'),
174
+ requestedCertificates: JSON.parse(response.headers.get('x-bsv-auth-requested-certificates')),
175
+ payload: payloadWriter.toArray(),
176
+ signature: mod_js_1.Utils.toArray(response.headers.get('x-bsv-auth-signature'), 'hex'),
177
+ };
178
+ // If the server didn't provide the correct authentication headers, throw an error
179
+ if (!responseMessage.version) {
180
+ throw new Error('HTTP server failed to authenticate');
181
+ }
182
+ // Handle the response if data is received and callback is set
183
+ this.onDataCallback(responseMessage);
184
+ }
185
+ }
186
+ /**
187
+ * Registers a callback to handle incoming messages.
188
+ * This must be called before sending any messages to ensure responses can be processed.
189
+ *
190
+ * @param callback - A function to invoke when an incoming AuthMessage is received.
191
+ * @returns A promise that resolves once the callback is set.
192
+ */
193
+ async onData(callback) {
194
+ this.onDataCallback = (m) => {
195
+ callback(m);
196
+ };
197
+ }
198
+ /**
199
+ * Deserializes a request payload from a byte array into an HTTP request-like structure.
200
+ *
201
+ * @param payload - The serialized payload to deserialize.
202
+ * @returns An object representing the deserialized request, including the method,
203
+ * URL postfix (path and query string), headers, body, and request ID.
204
+ */
205
+ deserializeRequestPayload(payload) {
206
+ // Create a reader
207
+ const requestReader = new mod_js_1.Utils.Reader(payload);
208
+ // The first 32 bytes is the requestId
209
+ const requestId = mod_js_1.Utils.toBase64(requestReader.read(32));
210
+ // Method
211
+ const methodLength = requestReader.readVarIntNum();
212
+ let method = 'GET';
213
+ if (methodLength > 0) {
214
+ method = mod_js_1.Utils.toUTF8(requestReader.read(methodLength));
215
+ }
216
+ // Path
217
+ const pathLength = requestReader.readVarIntNum();
218
+ let path = '';
219
+ if (pathLength > 0) {
220
+ path = mod_js_1.Utils.toUTF8(requestReader.read(pathLength));
221
+ }
222
+ // Search
223
+ const searchLength = requestReader.readVarIntNum();
224
+ let search = '';
225
+ if (searchLength > 0) {
226
+ search = mod_js_1.Utils.toUTF8(requestReader.read(searchLength));
227
+ }
228
+ // Read headers
229
+ const requestHeaders = {};
230
+ const nHeaders = requestReader.readVarIntNum();
231
+ if (nHeaders > 0) {
232
+ for (let i = 0; i < nHeaders; i++) {
233
+ const nHeaderKeyBytes = requestReader.readVarIntNum();
234
+ const headerKeyBytes = requestReader.read(nHeaderKeyBytes);
235
+ const headerKey = mod_js_1.Utils.toUTF8(headerKeyBytes);
236
+ const nHeaderValueBytes = requestReader.readVarIntNum();
237
+ const headerValueBytes = requestReader.read(nHeaderValueBytes);
238
+ const headerValue = mod_js_1.Utils.toUTF8(headerValueBytes);
239
+ requestHeaders[headerKey] = headerValue;
240
+ }
241
+ }
242
+ // Read body
243
+ let requestBody;
244
+ const requestBodyBytes = requestReader.readVarIntNum();
245
+ if (requestBodyBytes > 0) {
246
+ requestBody = requestReader.read(requestBodyBytes);
247
+ }
248
+ // Return the deserialized RequestInit
249
+ return {
250
+ urlPostfix: path + search,
251
+ method,
252
+ headers: requestHeaders,
253
+ body: requestBody,
254
+ requestId
255
+ };
256
+ }
257
+ }
258
+ exports.SimplifiedFetchTransport = SimplifiedFetchTransport;
259
+ //# sourceMappingURL=SimplifiedFetchTransport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SimplifiedFetchTransport.js","sourceRoot":"","sources":["../../../../../src/auth/transports/SimplifiedFetchTransport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
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("./SimplifiedFetchTransport.js"), exports);
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/auth/transports/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gEAA6C"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/auth/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createMasterCertificate = createMasterCertificate;
4
+ exports.createVerifiableCertificate = createVerifiableCertificate;
5
+ const mod_js_1 = require("../../../mod.js");
6
+ const MasterCertificate_js_1 = require("../certificates/MasterCertificate.js");
7
+ const VerifiableCertificate_js_1 = require("../certificates/VerifiableCertificate.js");
8
+ /**
9
+ * Creates a Master Certificate by encrypting provided fields and generating a master keyring.
10
+ *
11
+ * @param {Wallet} wallet - The wallet instance used for encryption and public key retrieval.
12
+ * @param {Record<string, string>} fields - The certificate fields to encrypt.
13
+ * @param {string} certificateType - The type of the certificate being created.
14
+ * @param {string} certificateSerialNumber - The serial number of the certificate.
15
+ * @param {string} certifierPublicKey - The public key of the certifier.
16
+ * @returns {Promise<MasterCertificate>} A promise resolving to the created Master Certificate.
17
+ */
18
+ async function createMasterCertificate(wallet, fields, certificateType, certificateSerialNumber, certifierPublicKey) {
19
+ const certificateFields = {};
20
+ const masterKeyring = {};
21
+ for (const fieldName in fields) {
22
+ const fieldSymmetricKey = mod_js_1.SymmetricKey.fromRandom();
23
+ const encryptedFieldValue = fieldSymmetricKey.encrypt(mod_js_1.Utils.toArray(fields[fieldName], 'utf8'));
24
+ certificateFields[fieldName] = mod_js_1.Utils.toBase64(encryptedFieldValue);
25
+ const encryptedFieldKey = await wallet.encrypt({
26
+ plaintext: fieldSymmetricKey.toArray(),
27
+ protocolID: [2, 'certificate field encryption'],
28
+ keyID: `${certificateSerialNumber} ${fieldName}`,
29
+ counterparty: 'self'
30
+ });
31
+ masterKeyring[fieldName] = mod_js_1.Utils.toBase64(encryptedFieldKey.ciphertext);
32
+ }
33
+ return new MasterCertificate_js_1.MasterCertificate(certificateType, certificateSerialNumber, (await wallet.getPublicKey({ identityKey: true })).publicKey, certifierPublicKey, 'revocationOutpoint', certificateFields, masterKeyring);
34
+ }
35
+ /**
36
+ * Creates a Verifiable Certificate by signing a Master Certificate and generating a keyring for a verifier.
37
+ *
38
+ * @param {MasterCertificate} masterCertificate - The master certificate to convert into a verifiable certificate.
39
+ * @param {Wallet} wallet - The wallet instance used for generating a keyring for the verifier.
40
+ * @param {string} verifierIdentityKey - The identity key of the verifier.
41
+ * @param {string[]} fieldsToReveal - The list of fields to reveal to the verifier.
42
+ * @param {PrivateKey} certifierPrivateKey - The private key of the certifier for signing the certificate.
43
+ * @returns {Promise<VerifiableCertificate>} A promise resolving to the created Verifiable Certificate.
44
+ */
45
+ async function createVerifiableCertificate(masterCertificate, wallet, verifierIdentityKey, fieldsToReveal, certifierPrivateKey) {
46
+ const certifierWallet = new mod_js_1.ProtoWallet(certifierPrivateKey);
47
+ await masterCertificate.sign(certifierWallet);
48
+ const keyringForVerifier = await masterCertificate.createKeyringForVerifier(wallet, verifierIdentityKey, fieldsToReveal);
49
+ return new VerifiableCertificate_js_1.VerifiableCertificate(masterCertificate.type, masterCertificate.serialNumber, masterCertificate.subject, masterCertificate.certifier, masterCertificate.revocationOutpoint, masterCertificate.fields, masterCertificate.signature, keyringForVerifier);
50
+ }
51
+ //# sourceMappingURL=certificateHelpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"certificateHelpers.js","sourceRoot":"","sources":["../../../../../src/auth/utils/certificateHelpers.ts"],"names":[],"mappings":";;AAcA,0DAiCC;AAYD,kEA0BC;AArFD,4CAAsF;AACtF,+EAAwE;AACxE,uFAAgF;AAEhF;;;;;;;;;GASG;AACI,KAAK,UAAU,uBAAuB,CAC3C,MAAc,EACd,MAA8B,EAC9B,eAAuB,EACvB,uBAA+B,EAC/B,kBAA0B;IAE1B,MAAM,iBAAiB,GAA2B,EAAE,CAAA;IACpD,MAAM,aAAa,GAA2B,EAAE,CAAA;IAEhD,KAAK,MAAM,SAAS,IAAI,MAAM,EAAE,CAAC;QAC/B,MAAM,iBAAiB,GAAG,qBAAY,CAAC,UAAU,EAAE,CAAA;QACnD,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,OAAO,CAAC,cAAK,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,CAAC,CAAA;QAC/F,iBAAiB,CAAC,SAAS,CAAC,GAAG,cAAK,CAAC,QAAQ,CAAC,mBAA+B,CAAC,CAAA;QAE9E,MAAM,iBAAiB,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC;YAC7C,SAAS,EAAE,iBAAiB,CAAC,OAAO,EAAE;YACtC,UAAU,EAAE,CAAC,CAAC,EAAE,8BAA8B,CAAC;YAC/C,KAAK,EAAE,GAAG,uBAAuB,IAAI,SAAS,EAAE;YAChD,YAAY,EAAE,MAAM;SACrB,CAAC,CAAA;QACF,aAAa,CAAC,SAAS,CAAC,GAAG,cAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAA;IACzE,CAAC;IAED,OAAO,IAAI,wCAAiB,CAC1B,eAAe,EACf,uBAAuB,EACvB,CAAC,MAAM,MAAM,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,EAC5D,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,EACjB,aAAa,CACd,CAAA;AACH,CAAC;AAED;;;;;;;;;GASG;AACI,KAAK,UAAU,2BAA2B,CAC/C,iBAAoC,EACpC,MAAc,EACd,mBAA2B,EAC3B,cAAwB,EACxB,mBAA+B;IAE/B,MAAM,eAAe,GAAG,IAAI,oBAAW,CAAC,mBAAmB,CAAC,CAAA;IAC5D,MAAM,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;IAE7C,MAAM,kBAAkB,GAAG,MAAM,iBAAiB,CAAC,wBAAwB,CACzE,MAAM,EACN,mBAAmB,EACnB,cAAc,CACf,CAAA;IAED,OAAO,IAAI,gDAAqB,CAC9B,iBAAiB,CAAC,IAAI,EACtB,iBAAiB,CAAC,YAAY,EAC9B,iBAAiB,CAAC,OAAO,EACzB,iBAAiB,CAAC,SAAS,EAC3B,iBAAiB,CAAC,kBAAkB,EACpC,iBAAiB,CAAC,MAAM,EACxB,iBAAiB,CAAC,SAAS,EAC3B,kBAAkB,CACnB,CAAA;AACH,CAAC"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createNonce = createNonce;
4
+ const mod_js_1 = require("../../../mod.js");
5
+ /**
6
+ * Creates a nonce derived from a privateKey
7
+ * @param wallet
8
+ * @returns A random nonce derived with a wallet
9
+ */
10
+ async function createNonce(wallet) {
11
+ // Generate 16 random bytes for the first half of the data
12
+ const firstHalf = (0, mod_js_1.Random)(16);
13
+ // Create an sha256 HMAC
14
+ const { hmac } = await wallet.createHmac({ protocolID: [2, 'server hmac'], keyID: mod_js_1.Utils.toUTF8(firstHalf), data: firstHalf, counterparty: 'self' });
15
+ // Concatenate firstHalf and secondHalf as the nonce bytes
16
+ const nonceBytes = [...firstHalf, ...hmac];
17
+ return mod_js_1.Utils.toBase64(nonceBytes);
18
+ }
19
+ //# sourceMappingURL=createNonce.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createNonce.js","sourceRoot":"","sources":["../../../../../src/auth/utils/createNonce.ts"],"names":[],"mappings":";;AAOA,kCAQC;AAfD,4CAAuD;AAEvD;;;;GAIG;AACI,KAAK,UAAU,WAAW,CAAC,MAAc;IAC9C,0DAA0D;IAC1D,MAAM,SAAS,GAAG,IAAA,eAAM,EAAC,EAAE,CAAC,CAAA;IAC5B,wBAAwB;IACxB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,KAAK,EAAE,cAAK,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAA;IACnJ,0DAA0D;IAC1D,MAAM,UAAU,GAAG,CAAC,GAAG,SAAS,EAAE,GAAG,IAAI,CAAC,CAAA;IAC1C,OAAO,cAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;AACnC,CAAC"}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getVerifiableCertificates = void 0;
4
+ const VerifiableCertificate_js_1 = require("../certificates/VerifiableCertificate.js");
5
+ /**
6
+ * Retrieves an array of verifiable certificates based on the request.
7
+ *
8
+ * @private
9
+ * @param {RequestedCertificateSet} requestedCertificates - The set of certificates requested by the peer.
10
+ * @param {string} verifierIdentityKey - The public key of the verifier requesting the certificates.
11
+ * @returns {Promise<VerifiableCertificate[]>} An array of verifiable certificates.
12
+ */
13
+ const getVerifiableCertificates = async (wallet, requestedCertificates, verifierIdentityKey) => {
14
+ // Find matching certificates we have
15
+ // Note: This may return multiple certificates that match the correct type.
16
+ const matchingCertificates = await wallet.listCertificates({
17
+ certifiers: requestedCertificates.certifiers,
18
+ types: Object.keys(requestedCertificates.types)
19
+ });
20
+ // For each certificate requested, create a verifiable cert with selectively revealed fields
21
+ return await Promise.all(matchingCertificates.certificates.map(async (certificate) => {
22
+ const { keyringForVerifier } = await wallet.proveCertificate({
23
+ certificate,
24
+ fieldsToReveal: requestedCertificates.types[certificate.type],
25
+ verifier: verifierIdentityKey
26
+ });
27
+ return new VerifiableCertificate_js_1.VerifiableCertificate(certificate.type, certificate.serialNumber, certificate.subject, certificate.certifier, certificate.revocationOutpoint, certificate.fields, certificate.signature, keyringForVerifier);
28
+ }));
29
+ };
30
+ exports.getVerifiableCertificates = getVerifiableCertificates;
31
+ //# sourceMappingURL=getVerifiableCertificates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getVerifiableCertificates.js","sourceRoot":"","sources":["../../../../../src/auth/utils/getVerifiableCertificates.ts"],"names":[],"mappings":";;;AAAA,uFAAgF;AAIhF;;;;;;;GAOG;AACI,MAAM,yBAAyB,GAAG,KAAK,EAAE,MAAc,EAAE,qBAA8C,EAAE,mBAA2B,EAAoC,EAAE;IAC/K,qCAAqC;IACrC,2EAA2E;IAC3E,MAAM,oBAAoB,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC;QACzD,UAAU,EAAE,qBAAqB,CAAC,UAAU;QAC5C,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;KAChD,CAAC,CAAA;IAEF,4FAA4F;IAC5F,OAAO,MAAM,OAAO,CAAC,GAAG,CACtB,oBAAoB,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAC,WAAW,EAAC,EAAE;QACxD,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC;YAC3D,WAAW;YACX,cAAc,EAAE,qBAAqB,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC;YAC7D,QAAQ,EAAE,mBAAmB;SAC9B,CAAC,CAAA;QACF,OAAO,IAAI,gDAAqB,CAC9B,WAAW,CAAC,IAAI,EAChB,WAAW,CAAC,YAAY,EACxB,WAAW,CAAC,OAAO,EACnB,WAAW,CAAC,SAAS,EACrB,WAAW,CAAC,kBAAkB,EAC9B,WAAW,CAAC,MAAM,EAClB,WAAW,CAAC,SAAS,EACrB,kBAAkB,CACnB,CAAA;IACH,CAAC,CAAC,CAAC,CAAA;AACP,CAAC,CAAA;AA3BY,QAAA,yBAAyB,6BA2BrC"}
@@ -0,0 +1,22 @@
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("./verifyNonce.js"), exports);
18
+ __exportStar(require("./createNonce.js"), exports);
19
+ __exportStar(require("./getVerifiableCertificates.js"), exports);
20
+ __exportStar(require("./validateCertificates.js"), exports);
21
+ __exportStar(require("./certificateHelpers.js"), exports);
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/auth/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,mDAAgC;AAChC,mDAAgC;AAChC,iEAA8C;AAC9C,4DAAyC;AACzC,0DAAuC"}
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateCertificates = void 0;
4
+ const VerifiableCertificate_js_1 = require("../certificates/VerifiableCertificate.js");
5
+ /**
6
+ * Validates and processes the certificates received from a peer.
7
+ *
8
+ * @private
9
+ * @param {AuthMessage} message - The message containing the certificates to validate.
10
+ * @returns {Promise<void>}
11
+ * @throws Will throw an error if certificate validation or field decryption fails.
12
+ */
13
+ const validateCertificates = async (verifierWallet, message, certificatesRequested) => {
14
+ await Promise.all(message.certificates.map(async (incomingCert) => {
15
+ if (incomingCert.subject !== message.identityKey) {
16
+ throw new Error(`The subject of one of your certificates ("${incomingCert.subject}") is not the same as the request sender ("${message.identityKey}").`);
17
+ }
18
+ // Verify Certificate structure and signature
19
+ const certToVerify = new VerifiableCertificate_js_1.VerifiableCertificate(incomingCert.type, incomingCert.serialNumber, incomingCert.subject, incomingCert.certifier, incomingCert.revocationOutpoint, incomingCert.fields, incomingCert.signature, incomingCert.keyring);
20
+ const isValidCert = await certToVerify.verify();
21
+ if (!isValidCert) {
22
+ throw new Error(`The signature for the certificate with serial number ${certToVerify.serialNumber} is invalid!`);
23
+ }
24
+ // Check if the certificate matches requested certifiers, types, and fields
25
+ if (certificatesRequested) {
26
+ const { certifiers, types } = certificatesRequested;
27
+ // Check certifier matches
28
+ if (!certifiers.includes(certToVerify.certifier)) {
29
+ throw new Error(`Certificate with serial number ${certToVerify.serialNumber} has an unrequested certifier: ${certToVerify.certifier}`);
30
+ }
31
+ // Check type and fields match requested
32
+ const requestedFields = types[certToVerify.type];
33
+ if (!requestedFields) {
34
+ throw new Error(`Certificate with type ${certToVerify.type} was not requested`);
35
+ }
36
+ }
37
+ // Attempt to decrypt fields
38
+ await certToVerify.decryptFields(verifierWallet);
39
+ }));
40
+ };
41
+ exports.validateCertificates = validateCertificates;
42
+ //# sourceMappingURL=validateCertificates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateCertificates.js","sourceRoot":"","sources":["../../../../../src/auth/utils/validateCertificates.ts"],"names":[],"mappings":";;;AAEA,uFAAgF;AAEhF;;;;;;;GAOG;AACI,MAAM,oBAAoB,GAAG,KAAK,EAAE,cAAsB,EAAE,OAAoB,EAAE,qBAA+C,EAAiB,EAAE;IACzJ,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,YAAmC,EAAE,EAAE;QACvF,IAAI,YAAY,CAAC,OAAO,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC;YACjD,MAAM,IAAI,KAAK,CAAC,6CAA6C,YAAY,CAAC,OAAO,8CAA8C,OAAO,CAAC,WAAW,KAAK,CAAC,CAAA;QAC1J,CAAC;QAED,6CAA6C;QAC7C,MAAM,YAAY,GAAG,IAAI,gDAAqB,CAC5C,YAAY,CAAC,IAAI,EACjB,YAAY,CAAC,YAAY,EACzB,YAAY,CAAC,OAAO,EACpB,YAAY,CAAC,SAAS,EACtB,YAAY,CAAC,kBAAkB,EAC/B,YAAY,CAAC,MAAM,EACnB,YAAY,CAAC,SAAS,EACtB,YAAY,CAAC,OAAO,CACrB,CAAA;QACD,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,CAAA;QAC/C,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,wDAAwD,YAAY,CAAC,YAAY,cAAc,CAAC,CAAA;QAClH,CAAC;QAED,2EAA2E;QAC3E,IAAI,qBAAqB,EAAE,CAAC;YAC1B,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,qBAAqB,CAAA;YAEnD,0BAA0B;YAC1B,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC;gBACjD,MAAM,IAAI,KAAK,CAAC,kCAAkC,YAAY,CAAC,YAAY,kCAAkC,YAAY,CAAC,SAAS,EAAE,CAAC,CAAA;YACxI,CAAC;YAED,wCAAwC;YACxC,MAAM,eAAe,GAAG,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;YAChD,IAAI,CAAC,eAAe,EAAE,CAAC;gBACrB,MAAM,IAAI,KAAK,CAAC,yBAAyB,YAAY,CAAC,IAAI,oBAAoB,CAAC,CAAA;YACjF,CAAC;QACH,CAAC;QAED,4BAA4B;QAC5B,MAAM,YAAY,CAAC,aAAa,CAAC,cAAc,CAAC,CAAA;IAClD,CAAC,CAAC,CAAC,CAAA;AACL,CAAC,CAAA;AAzCY,QAAA,oBAAoB,wBAyChC"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.verifyNonce = verifyNonce;
4
+ const mod_js_1 = require("../../../mod.js");
5
+ /**
6
+ * Verifies a nonce derived from a wallet
7
+ * @param nonce - A nonce to verify as a base64 string.
8
+ * @param wallet
9
+ * @returns The status of the validation
10
+ */
11
+ async function verifyNonce(nonce, wallet) {
12
+ // Convert nonce from base64 string to Uint8Array
13
+ const buffer = mod_js_1.Utils.toArray(nonce, 'base64');
14
+ // Split the nonce buffer
15
+ const data = buffer.slice(0, 16);
16
+ const hmac = buffer.slice(16);
17
+ // Calculate the HMAC
18
+ const { valid } = await wallet.verifyHmac({
19
+ data,
20
+ hmac,
21
+ protocolID: [2, 'server hmac'],
22
+ keyID: mod_js_1.Utils.toUTF8(data),
23
+ counterparty: 'self'
24
+ });
25
+ return valid;
26
+ }
27
+ //# sourceMappingURL=verifyNonce.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verifyNonce.js","sourceRoot":"","sources":["../../../../../src/auth/utils/verifyNonce.ts"],"names":[],"mappings":";;AAQA,kCAkBC;AA1BD,4CAA+C;AAE/C;;;;;GAKG;AACI,KAAK,UAAU,WAAW,CAAC,KAAa,EAAE,MAAc;IAC7D,iDAAiD;IACjD,MAAM,MAAM,GAAG,cAAK,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;IAE7C,yBAAyB;IACzB,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAChC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAE7B,qBAAqB;IACrB,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC;QACxC,IAAI;QACJ,IAAI;QACJ,UAAU,EAAE,CAAC,CAAC,EAAE,aAAa,CAAC;QAC9B,KAAK,EAAE,cAAK,CAAC,MAAM,CAAC,IAAI,CAAC;QACzB,YAAY,EAAE,MAAM;KACrB,CAAC,CAAA;IAEF,OAAO,KAAK,CAAA;AACd,CAAC"}
@@ -145,7 +145,7 @@ class Point extends BasePoint_js_1.default {
145
145
  }
146
146
  else if (Array.isArray(x)) {
147
147
  xBigInt = BigInt('0x' +
148
- Buffer.from(x).toString('hex').padStart(64, '0'));
148
+ (0, utils_js_1.toHex)(x).padStart(64, '0'));
149
149
  }
150
150
  else if (typeof x === 'number') {
151
151
  xBigInt = BigInt(x);