@verbeth/sdk 0.1.4 → 0.1.6
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/README.md +20 -168
- package/dist/esm/src/addresses.d.ts +20 -0
- package/dist/esm/src/addresses.d.ts.map +1 -0
- package/dist/esm/src/addresses.js +33 -0
- package/dist/esm/src/client/HsrTagIndex.d.ts +77 -0
- package/dist/esm/src/client/HsrTagIndex.d.ts.map +1 -0
- package/dist/esm/src/client/HsrTagIndex.js +157 -0
- package/dist/esm/src/client/PendingManager.d.ts +65 -0
- package/dist/esm/src/client/PendingManager.d.ts.map +1 -0
- package/dist/esm/src/client/PendingManager.js +84 -0
- package/dist/esm/src/client/SessionManager.d.ts +65 -0
- package/dist/esm/src/client/SessionManager.d.ts.map +1 -0
- package/dist/esm/src/client/SessionManager.js +146 -0
- package/dist/esm/src/client/VerbethClient.d.ts +153 -99
- package/dist/esm/src/client/VerbethClient.d.ts.map +1 -1
- package/dist/esm/src/client/VerbethClient.js +429 -123
- package/dist/esm/src/client/VerbethClientBuilder.d.ts +105 -0
- package/dist/esm/src/client/VerbethClientBuilder.d.ts.map +1 -0
- package/dist/esm/src/client/VerbethClientBuilder.js +146 -0
- package/dist/esm/src/client/hsrMatcher.d.ts +22 -0
- package/dist/esm/src/client/hsrMatcher.d.ts.map +1 -0
- package/dist/esm/src/client/hsrMatcher.js +31 -0
- package/dist/esm/src/client/index.d.ts +6 -1
- package/dist/esm/src/client/index.d.ts.map +1 -1
- package/dist/esm/src/client/index.js +2 -0
- package/dist/esm/src/client/types.d.ts +151 -10
- package/dist/esm/src/client/types.d.ts.map +1 -1
- package/dist/esm/src/crypto(old).d.ts +46 -0
- package/dist/esm/src/crypto(old).d.ts.map +1 -0
- package/dist/esm/src/crypto(old).js +137 -0
- package/dist/esm/src/crypto.d.ts +7 -29
- package/dist/esm/src/crypto.d.ts.map +1 -1
- package/dist/esm/src/crypto.js +36 -72
- package/dist/esm/src/executor.d.ts +17 -18
- package/dist/esm/src/executor.d.ts.map +1 -1
- package/dist/esm/src/executor.js +54 -70
- package/dist/esm/src/handshake.d.ts +51 -0
- package/dist/esm/src/handshake.d.ts.map +1 -0
- package/dist/esm/src/handshake.js +105 -0
- package/dist/esm/src/identity.d.ts +24 -18
- package/dist/esm/src/identity.d.ts.map +1 -1
- package/dist/esm/src/identity.js +126 -31
- package/dist/esm/src/index.d.ts +11 -7
- package/dist/esm/src/index.d.ts.map +1 -1
- package/dist/esm/src/index.js +10 -7
- package/dist/esm/src/payload.d.ts +3 -30
- package/dist/esm/src/payload.d.ts.map +1 -1
- package/dist/esm/src/payload.js +3 -77
- package/dist/esm/src/pq/kem.d.ts +33 -0
- package/dist/esm/src/pq/kem.d.ts.map +1 -0
- package/dist/esm/src/pq/kem.js +40 -0
- package/dist/esm/src/ratchet/auth.d.ts +34 -0
- package/dist/esm/src/ratchet/auth.d.ts.map +1 -0
- package/dist/esm/src/ratchet/auth.js +88 -0
- package/dist/esm/src/ratchet/codec.d.ts +52 -0
- package/dist/esm/src/ratchet/codec.d.ts.map +1 -0
- package/dist/esm/src/ratchet/codec.js +127 -0
- package/dist/esm/src/ratchet/decrypt.d.ts +28 -0
- package/dist/esm/src/ratchet/decrypt.d.ts.map +1 -0
- package/dist/esm/src/ratchet/decrypt.js +255 -0
- package/dist/esm/src/ratchet/encrypt.d.ts +17 -0
- package/dist/esm/src/ratchet/encrypt.d.ts.map +1 -0
- package/dist/esm/src/ratchet/encrypt.js +78 -0
- package/dist/esm/src/ratchet/index.d.ts +8 -0
- package/dist/esm/src/ratchet/index.d.ts.map +1 -0
- package/dist/esm/src/ratchet/index.js +8 -0
- package/dist/esm/src/ratchet/kdf.d.ts +60 -0
- package/dist/esm/src/ratchet/kdf.d.ts.map +1 -0
- package/dist/esm/src/ratchet/kdf.js +91 -0
- package/dist/esm/src/ratchet/session.d.ts +43 -0
- package/dist/esm/src/ratchet/session.d.ts.map +1 -0
- package/dist/esm/src/ratchet/session.js +139 -0
- package/dist/esm/src/ratchet/types.d.ts +168 -0
- package/dist/esm/src/ratchet/types.d.ts.map +1 -0
- package/dist/esm/src/ratchet/types.js +27 -0
- package/dist/esm/src/safeSessionSigner.d.ts +35 -0
- package/dist/esm/src/safeSessionSigner.d.ts.map +1 -0
- package/dist/esm/src/safeSessionSigner.js +59 -0
- package/dist/esm/src/send.d.ts +32 -24
- package/dist/esm/src/send.d.ts.map +1 -1
- package/dist/esm/src/send.js +84 -39
- package/dist/esm/src/types.d.ts +8 -13
- package/dist/esm/src/types.d.ts.map +1 -1
- package/dist/esm/src/utils/safeSessionSigner.d.ts +23 -0
- package/dist/esm/src/utils/safeSessionSigner.d.ts.map +1 -0
- package/dist/esm/src/utils/safeSessionSigner.js +59 -0
- package/dist/esm/src/utils/txQueue.d.ts +12 -0
- package/dist/esm/src/utils/txQueue.d.ts.map +1 -0
- package/dist/esm/src/utils/txQueue.js +25 -0
- package/dist/esm/src/utils.d.ts +2 -3
- package/dist/esm/src/utils.d.ts.map +1 -1
- package/dist/esm/src/utils.js +5 -5
- package/dist/esm/src/verify.d.ts +9 -25
- package/dist/esm/src/verify.d.ts.map +1 -1
- package/dist/esm/src/verify.js +49 -50
- package/dist/src/addresses.d.ts +20 -0
- package/dist/src/addresses.d.ts.map +1 -0
- package/dist/src/addresses.js +33 -0
- package/dist/src/client/HsrTagIndex.d.ts +77 -0
- package/dist/src/client/HsrTagIndex.d.ts.map +1 -0
- package/dist/src/client/HsrTagIndex.js +157 -0
- package/dist/src/client/PendingManager.d.ts +65 -0
- package/dist/src/client/PendingManager.d.ts.map +1 -0
- package/dist/src/client/PendingManager.js +84 -0
- package/dist/src/client/SessionManager.d.ts +65 -0
- package/dist/src/client/SessionManager.d.ts.map +1 -0
- package/dist/src/client/SessionManager.js +146 -0
- package/dist/src/client/VerbethClient.d.ts +153 -99
- package/dist/src/client/VerbethClient.d.ts.map +1 -1
- package/dist/src/client/VerbethClient.js +429 -123
- package/dist/src/client/VerbethClientBuilder.d.ts +105 -0
- package/dist/src/client/VerbethClientBuilder.d.ts.map +1 -0
- package/dist/src/client/VerbethClientBuilder.js +146 -0
- package/dist/src/client/hsrMatcher.d.ts +22 -0
- package/dist/src/client/hsrMatcher.d.ts.map +1 -0
- package/dist/src/client/hsrMatcher.js +31 -0
- package/dist/src/client/index.d.ts +6 -1
- package/dist/src/client/index.d.ts.map +1 -1
- package/dist/src/client/index.js +2 -0
- package/dist/src/client/types.d.ts +151 -10
- package/dist/src/client/types.d.ts.map +1 -1
- package/dist/src/crypto(old).d.ts +46 -0
- package/dist/src/crypto(old).d.ts.map +1 -0
- package/dist/src/crypto(old).js +137 -0
- package/dist/src/crypto.d.ts +7 -29
- package/dist/src/crypto.d.ts.map +1 -1
- package/dist/src/crypto.js +36 -72
- package/dist/src/executor.d.ts +17 -18
- package/dist/src/executor.d.ts.map +1 -1
- package/dist/src/executor.js +54 -70
- package/dist/src/handshake.d.ts +51 -0
- package/dist/src/handshake.d.ts.map +1 -0
- package/dist/src/handshake.js +105 -0
- package/dist/src/identity.d.ts +24 -18
- package/dist/src/identity.d.ts.map +1 -1
- package/dist/src/identity.js +126 -31
- package/dist/src/index.d.ts +11 -7
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +10 -7
- package/dist/src/payload.d.ts +3 -30
- package/dist/src/payload.d.ts.map +1 -1
- package/dist/src/payload.js +3 -77
- package/dist/src/pq/kem.d.ts +33 -0
- package/dist/src/pq/kem.d.ts.map +1 -0
- package/dist/src/pq/kem.js +40 -0
- package/dist/src/ratchet/auth.d.ts +34 -0
- package/dist/src/ratchet/auth.d.ts.map +1 -0
- package/dist/src/ratchet/auth.js +88 -0
- package/dist/src/ratchet/codec.d.ts +52 -0
- package/dist/src/ratchet/codec.d.ts.map +1 -0
- package/dist/src/ratchet/codec.js +127 -0
- package/dist/src/ratchet/decrypt.d.ts +28 -0
- package/dist/src/ratchet/decrypt.d.ts.map +1 -0
- package/dist/src/ratchet/decrypt.js +255 -0
- package/dist/src/ratchet/encrypt.d.ts +17 -0
- package/dist/src/ratchet/encrypt.d.ts.map +1 -0
- package/dist/src/ratchet/encrypt.js +78 -0
- package/dist/src/ratchet/index.d.ts +8 -0
- package/dist/src/ratchet/index.d.ts.map +1 -0
- package/dist/src/ratchet/index.js +8 -0
- package/dist/src/ratchet/kdf.d.ts +60 -0
- package/dist/src/ratchet/kdf.d.ts.map +1 -0
- package/dist/src/ratchet/kdf.js +91 -0
- package/dist/src/ratchet/session.d.ts +43 -0
- package/dist/src/ratchet/session.d.ts.map +1 -0
- package/dist/src/ratchet/session.js +139 -0
- package/dist/src/ratchet/types.d.ts +168 -0
- package/dist/src/ratchet/types.d.ts.map +1 -0
- package/dist/src/ratchet/types.js +27 -0
- package/dist/src/safeSessionSigner.d.ts +35 -0
- package/dist/src/safeSessionSigner.d.ts.map +1 -0
- package/dist/src/safeSessionSigner.js +59 -0
- package/dist/src/send.d.ts +32 -24
- package/dist/src/send.d.ts.map +1 -1
- package/dist/src/send.js +84 -39
- package/dist/src/types.d.ts +8 -13
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/utils/safeSessionSigner.d.ts +23 -0
- package/dist/src/utils/safeSessionSigner.d.ts.map +1 -0
- package/dist/src/utils/safeSessionSigner.js +59 -0
- package/dist/src/utils/txQueue.d.ts +12 -0
- package/dist/src/utils/txQueue.d.ts.map +1 -0
- package/dist/src/utils/txQueue.js +25 -0
- package/dist/src/utils.d.ts +2 -3
- package/dist/src/utils.d.ts.map +1 -1
- package/dist/src/utils.js +5 -5
- package/dist/src/verify.d.ts +9 -25
- package/dist/src/verify.d.ts.map +1 -1
- package/dist/src/verify.js +49 -50
- package/package.json +2 -1
package/dist/src/verify.js
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
// packages/sdk/src/verify.ts
|
|
2
2
|
import { getBytes, hexlify, getAddress } from "ethers";
|
|
3
|
-
import { decryptAndExtractHandshakeKeys,
|
|
3
|
+
import { decryptAndExtractHandshakeKeys, computeHybridTagFromInitiator } from "./crypto.js";
|
|
4
|
+
import { kem } from "./pq/kem.js";
|
|
4
5
|
import { parseHandshakePayload, parseHandshakeKeys } from "./payload.js";
|
|
5
6
|
import { makeViemPublicClient, parseBindingMessage, } from "./utils.js";
|
|
6
7
|
// ============= Handshake Verification =============
|
|
7
8
|
/**
|
|
8
9
|
* handshake verification with mandatory identity proof
|
|
9
10
|
*/
|
|
10
|
-
export async function verifyHandshakeIdentity(handshakeEvent, provider) {
|
|
11
|
+
export async function verifyHandshakeIdentity(handshakeEvent, provider, ctx) {
|
|
11
12
|
try {
|
|
12
13
|
let plaintextPayload = handshakeEvent.plaintextPayload;
|
|
13
14
|
if (typeof plaintextPayload === "string" &&
|
|
@@ -27,13 +28,7 @@ export async function verifyHandshakeIdentity(handshakeEvent, provider) {
|
|
|
27
28
|
console.error("Failed to parse unified pubKeys from handshake event");
|
|
28
29
|
return false;
|
|
29
30
|
}
|
|
30
|
-
|
|
31
|
-
// const dp: any = content.identityProof;
|
|
32
|
-
// const sigPrimary: string = dp.signature;
|
|
33
|
-
// const sig6492: string | undefined = dp.signature6492 ?? dp.erc6492;
|
|
34
|
-
// const uses6492 = hasERC6492Suffix(sigPrimary) || !!sig6492;
|
|
35
|
-
// const isContract1271 = await isSmartContract1271(handshakeEvent.sender, provider);
|
|
36
|
-
return await verifyIdentityProof(content.identityProof, handshakeEvent.sender, parsedKeys, provider);
|
|
31
|
+
return await verifyIdentityProof(content.identityProof, handshakeEvent.sender, parsedKeys, provider, ctx);
|
|
37
32
|
}
|
|
38
33
|
catch (err) {
|
|
39
34
|
console.error("verifyHandshakeIdentity error:", err);
|
|
@@ -44,7 +39,7 @@ export async function verifyHandshakeIdentity(handshakeEvent, provider) {
|
|
|
44
39
|
/**
|
|
45
40
|
* handshake response verification with mandatory identity proof
|
|
46
41
|
*/
|
|
47
|
-
export async function verifyHandshakeResponseIdentity(responseEvent, responderIdentityPubKey, initiatorEphemeralSecretKey, provider) {
|
|
42
|
+
export async function verifyHandshakeResponseIdentity(responseEvent, responderIdentityPubKey, initiatorEphemeralSecretKey, provider, ctx) {
|
|
48
43
|
try {
|
|
49
44
|
const extractedResponse = decryptAndExtractHandshakeKeys(responseEvent.ciphertext, initiatorEphemeralSecretKey);
|
|
50
45
|
if (!extractedResponse) {
|
|
@@ -55,21 +50,16 @@ export async function verifyHandshakeResponseIdentity(responseEvent, responderId
|
|
|
55
50
|
console.error("Identity public key mismatch in handshake response");
|
|
56
51
|
return false;
|
|
57
52
|
}
|
|
58
|
-
// 6492 awareness
|
|
59
53
|
const dpAny = extractedResponse.identityProof;
|
|
60
54
|
if (!dpAny) {
|
|
61
55
|
console.error("Missing identityProof in handshake response payload");
|
|
62
56
|
return false;
|
|
63
57
|
}
|
|
64
|
-
// const sigPrimary: string = dpAny.signature;
|
|
65
|
-
// const sig6492: string | undefined = dpAny.signature6492 ?? dpAny.erc6492;
|
|
66
|
-
// const uses6492 = hasERC6492Suffix(sigPrimary) || !!sig6492;
|
|
67
|
-
// const isContract1271 = await isSmartContract1271(responseEvent.responder,provider);
|
|
68
58
|
const expectedKeys = {
|
|
69
59
|
identityPubKey: extractedResponse.identityPubKey,
|
|
70
60
|
signingPubKey: extractedResponse.signingPubKey,
|
|
71
61
|
};
|
|
72
|
-
return await verifyIdentityProof(extractedResponse.identityProof, responseEvent.responder, expectedKeys, provider);
|
|
62
|
+
return await verifyIdentityProof(extractedResponse.identityProof, responseEvent.responder, expectedKeys, provider, ctx);
|
|
73
63
|
}
|
|
74
64
|
catch (err) {
|
|
75
65
|
console.error("verifyHandshakeResponseIdentity error:", err);
|
|
@@ -77,31 +67,36 @@ export async function verifyHandshakeResponseIdentity(responseEvent, responderId
|
|
|
77
67
|
}
|
|
78
68
|
}
|
|
79
69
|
/**
|
|
80
|
-
* Verify
|
|
70
|
+
* Verify IdentityProof for EOAs and smart accounts.
|
|
81
71
|
* - Verifies the signature with viem (EOA / ERC-1271 / ERC-6492).
|
|
82
72
|
* - Parses and checks the expected address and public key against the message content.
|
|
83
73
|
*/
|
|
84
|
-
export async function verifyIdentityProof(identityProof,
|
|
74
|
+
export async function verifyIdentityProof(identityProof, address, expectedUnifiedKeys, provider, ctx) {
|
|
85
75
|
try {
|
|
86
76
|
const client = await makeViemPublicClient(provider);
|
|
87
|
-
const
|
|
77
|
+
const inputAddress = address;
|
|
78
|
+
const parsed = parseBindingMessage(identityProof.message);
|
|
79
|
+
if (!parsed.address) {
|
|
80
|
+
console.error("Parsed address is undefined");
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
const signerAddress = getAddress(parsed.address);
|
|
88
84
|
const okSig = await client.verifyMessage({
|
|
89
|
-
address,
|
|
85
|
+
address: signerAddress,
|
|
90
86
|
message: identityProof.message,
|
|
91
87
|
signature: identityProof.signature,
|
|
92
88
|
});
|
|
93
89
|
if (!okSig) {
|
|
94
|
-
console.error("Binding signature invalid for address");
|
|
90
|
+
console.error("Binding signature invalid for signer address");
|
|
95
91
|
return false;
|
|
96
92
|
}
|
|
97
|
-
const parsed = parseBindingMessage(identityProof.message);
|
|
98
93
|
if (parsed.header && parsed.header !== "VerbEth Key Binding v1") {
|
|
99
94
|
console.error("Unexpected binding header:", parsed.header);
|
|
100
95
|
return false;
|
|
101
96
|
}
|
|
102
|
-
if (!parsed.
|
|
103
|
-
getAddress(parsed.
|
|
104
|
-
console.error("Binding message address mismatch");
|
|
97
|
+
if (!parsed.executorSafeAddress ||
|
|
98
|
+
getAddress(parsed.executorSafeAddress) !== getAddress(inputAddress)) {
|
|
99
|
+
console.error("Binding message Safe address mismatch");
|
|
105
100
|
return false;
|
|
106
101
|
}
|
|
107
102
|
const expectedPkX = hexlify(expectedUnifiedKeys.identityPubKey);
|
|
@@ -122,7 +117,19 @@ export async function verifyIdentityProof(identityProof, smartAccountAddress, ex
|
|
|
122
117
|
console.error("Unexpected version:", parsed.version);
|
|
123
118
|
return false;
|
|
124
119
|
}
|
|
125
|
-
//
|
|
120
|
+
// anti replay cross chain or cross dapp:
|
|
121
|
+
if (typeof ctx?.chainId === "number") {
|
|
122
|
+
if (typeof parsed.chainId !== "number" || parsed.chainId !== ctx.chainId) {
|
|
123
|
+
console.error("ChainId mismatch");
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
if (ctx?.rpId) {
|
|
128
|
+
if (!parsed.rpId || parsed.rpId !== ctx.rpId) {
|
|
129
|
+
console.error("RpId mismatch");
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
126
133
|
return true;
|
|
127
134
|
}
|
|
128
135
|
catch (err) {
|
|
@@ -131,8 +138,8 @@ export async function verifyIdentityProof(identityProof, smartAccountAddress, ex
|
|
|
131
138
|
}
|
|
132
139
|
}
|
|
133
140
|
// ============= Utility Functions =============
|
|
134
|
-
export async function verifyAndExtractHandshakeKeys(handshakeEvent, provider) {
|
|
135
|
-
const isValid = await verifyHandshakeIdentity(handshakeEvent, provider);
|
|
141
|
+
export async function verifyAndExtractHandshakeKeys(handshakeEvent, provider, ctx) {
|
|
142
|
+
const isValid = await verifyHandshakeIdentity(handshakeEvent, provider, ctx);
|
|
136
143
|
if (!isValid) {
|
|
137
144
|
return { isValid: false };
|
|
138
145
|
}
|
|
@@ -145,17 +152,23 @@ export async function verifyAndExtractHandshakeKeys(handshakeEvent, provider) {
|
|
|
145
152
|
keys: parsedKeys,
|
|
146
153
|
};
|
|
147
154
|
}
|
|
148
|
-
export async function verifyAndExtractHandshakeResponseKeys(responseEvent, initiatorEphemeralSecretKey, provider) {
|
|
149
|
-
|
|
150
|
-
const expectedTag = computeTagFromInitiator(initiatorEphemeralSecretKey, Rbytes);
|
|
151
|
-
if (expectedTag !== responseEvent.inResponseTo) {
|
|
152
|
-
return { isValid: false };
|
|
153
|
-
}
|
|
155
|
+
export async function verifyAndExtractHandshakeResponseKeys(responseEvent, initiatorEphemeralSecretKey, initiatorKemSecretKey, provider, ctx) {
|
|
156
|
+
// Decrypt first to get kemCiphertext
|
|
154
157
|
const extractedResponse = decryptAndExtractHandshakeKeys(responseEvent.ciphertext, initiatorEphemeralSecretKey);
|
|
155
158
|
if (!extractedResponse) {
|
|
156
159
|
return { isValid: false };
|
|
157
160
|
}
|
|
158
|
-
|
|
161
|
+
if (!extractedResponse.kemCiphertext) {
|
|
162
|
+
return { isValid: false };
|
|
163
|
+
}
|
|
164
|
+
// Decapsulate and verify hybrid tag
|
|
165
|
+
const Rbytes = getBytes(responseEvent.responderEphemeralR);
|
|
166
|
+
const kemSecret = kem.decapsulate(extractedResponse.kemCiphertext, initiatorKemSecretKey);
|
|
167
|
+
const expectedTag = computeHybridTagFromInitiator(initiatorEphemeralSecretKey, Rbytes, kemSecret);
|
|
168
|
+
if (expectedTag !== responseEvent.inResponseTo) {
|
|
169
|
+
return { isValid: false };
|
|
170
|
+
}
|
|
171
|
+
const isValid = await verifyHandshakeResponseIdentity(responseEvent, extractedResponse.identityPubKey, initiatorEphemeralSecretKey, provider, ctx);
|
|
159
172
|
if (!isValid) {
|
|
160
173
|
return { isValid: false };
|
|
161
174
|
}
|
|
@@ -165,22 +178,8 @@ export async function verifyAndExtractHandshakeResponseKeys(responseEvent, initi
|
|
|
165
178
|
identityPubKey: extractedResponse.identityPubKey,
|
|
166
179
|
signingPubKey: extractedResponse.signingPubKey,
|
|
167
180
|
ephemeralPubKey: extractedResponse.ephemeralPubKey,
|
|
181
|
+
kemCiphertext: extractedResponse.kemCiphertext,
|
|
168
182
|
note: extractedResponse.note,
|
|
169
183
|
},
|
|
170
184
|
};
|
|
171
185
|
}
|
|
172
|
-
/**
|
|
173
|
-
* Verify and derive duplex topics from a long-term DH secret.
|
|
174
|
-
* - Accepts either `tag` (inResponseTo) or a raw salt as KDF input.
|
|
175
|
-
* - Recomputes topicOut/topicIn deterministically from the identity DH.
|
|
176
|
-
* - If topicInfo is provided (from HSR), also verify the checksum.
|
|
177
|
-
* - Used by the initiator after decrypting a HandshakeResponse to confirm responder’s topics.
|
|
178
|
-
*/
|
|
179
|
-
export function verifyDerivedDuplexTopics({ myIdentitySecretKey, theirIdentityPubKey, tag, salt, topicInfo }) {
|
|
180
|
-
const s = salt ?? (tag ? getBytes(tag) : undefined);
|
|
181
|
-
if (!s)
|
|
182
|
-
throw new Error("Provide either salt or inResponseTo");
|
|
183
|
-
const { topicOut, topicIn, checksum } = deriveDuplexTopics(myIdentitySecretKey, theirIdentityPubKey, s);
|
|
184
|
-
const ok = topicInfo ? verifyDuplexTopicsChecksum(topicOut, topicIn, topicInfo.chk) : undefined;
|
|
185
|
-
return { topics: { topicOut, topicIn }, ok };
|
|
186
|
-
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@verbeth/sdk",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.6",
|
|
4
4
|
"private": false,
|
|
5
5
|
"main": "dist/src/index.js",
|
|
6
6
|
"module": "dist/esm/src/index.js",
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
"dependencies": {
|
|
18
18
|
"@noble/curves": "^1.8.1",
|
|
19
19
|
"@noble/hashes": "^1.8.0",
|
|
20
|
+
"@noble/post-quantum": "^0.5.4",
|
|
20
21
|
"@noble/secp256k1": "^2.2.3",
|
|
21
22
|
"ethers": "^6.7.0",
|
|
22
23
|
"tweetnacl": "^1.0.3",
|