@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.
Files changed (190) hide show
  1. package/README.md +20 -168
  2. package/dist/esm/src/addresses.d.ts +20 -0
  3. package/dist/esm/src/addresses.d.ts.map +1 -0
  4. package/dist/esm/src/addresses.js +33 -0
  5. package/dist/esm/src/client/HsrTagIndex.d.ts +77 -0
  6. package/dist/esm/src/client/HsrTagIndex.d.ts.map +1 -0
  7. package/dist/esm/src/client/HsrTagIndex.js +157 -0
  8. package/dist/esm/src/client/PendingManager.d.ts +65 -0
  9. package/dist/esm/src/client/PendingManager.d.ts.map +1 -0
  10. package/dist/esm/src/client/PendingManager.js +84 -0
  11. package/dist/esm/src/client/SessionManager.d.ts +65 -0
  12. package/dist/esm/src/client/SessionManager.d.ts.map +1 -0
  13. package/dist/esm/src/client/SessionManager.js +146 -0
  14. package/dist/esm/src/client/VerbethClient.d.ts +153 -99
  15. package/dist/esm/src/client/VerbethClient.d.ts.map +1 -1
  16. package/dist/esm/src/client/VerbethClient.js +429 -123
  17. package/dist/esm/src/client/VerbethClientBuilder.d.ts +105 -0
  18. package/dist/esm/src/client/VerbethClientBuilder.d.ts.map +1 -0
  19. package/dist/esm/src/client/VerbethClientBuilder.js +146 -0
  20. package/dist/esm/src/client/hsrMatcher.d.ts +22 -0
  21. package/dist/esm/src/client/hsrMatcher.d.ts.map +1 -0
  22. package/dist/esm/src/client/hsrMatcher.js +31 -0
  23. package/dist/esm/src/client/index.d.ts +6 -1
  24. package/dist/esm/src/client/index.d.ts.map +1 -1
  25. package/dist/esm/src/client/index.js +2 -0
  26. package/dist/esm/src/client/types.d.ts +151 -10
  27. package/dist/esm/src/client/types.d.ts.map +1 -1
  28. package/dist/esm/src/crypto(old).d.ts +46 -0
  29. package/dist/esm/src/crypto(old).d.ts.map +1 -0
  30. package/dist/esm/src/crypto(old).js +137 -0
  31. package/dist/esm/src/crypto.d.ts +7 -29
  32. package/dist/esm/src/crypto.d.ts.map +1 -1
  33. package/dist/esm/src/crypto.js +36 -72
  34. package/dist/esm/src/executor.d.ts +17 -18
  35. package/dist/esm/src/executor.d.ts.map +1 -1
  36. package/dist/esm/src/executor.js +54 -70
  37. package/dist/esm/src/handshake.d.ts +51 -0
  38. package/dist/esm/src/handshake.d.ts.map +1 -0
  39. package/dist/esm/src/handshake.js +105 -0
  40. package/dist/esm/src/identity.d.ts +24 -18
  41. package/dist/esm/src/identity.d.ts.map +1 -1
  42. package/dist/esm/src/identity.js +126 -31
  43. package/dist/esm/src/index.d.ts +11 -7
  44. package/dist/esm/src/index.d.ts.map +1 -1
  45. package/dist/esm/src/index.js +10 -7
  46. package/dist/esm/src/payload.d.ts +3 -30
  47. package/dist/esm/src/payload.d.ts.map +1 -1
  48. package/dist/esm/src/payload.js +3 -77
  49. package/dist/esm/src/pq/kem.d.ts +33 -0
  50. package/dist/esm/src/pq/kem.d.ts.map +1 -0
  51. package/dist/esm/src/pq/kem.js +40 -0
  52. package/dist/esm/src/ratchet/auth.d.ts +34 -0
  53. package/dist/esm/src/ratchet/auth.d.ts.map +1 -0
  54. package/dist/esm/src/ratchet/auth.js +88 -0
  55. package/dist/esm/src/ratchet/codec.d.ts +52 -0
  56. package/dist/esm/src/ratchet/codec.d.ts.map +1 -0
  57. package/dist/esm/src/ratchet/codec.js +127 -0
  58. package/dist/esm/src/ratchet/decrypt.d.ts +28 -0
  59. package/dist/esm/src/ratchet/decrypt.d.ts.map +1 -0
  60. package/dist/esm/src/ratchet/decrypt.js +255 -0
  61. package/dist/esm/src/ratchet/encrypt.d.ts +17 -0
  62. package/dist/esm/src/ratchet/encrypt.d.ts.map +1 -0
  63. package/dist/esm/src/ratchet/encrypt.js +78 -0
  64. package/dist/esm/src/ratchet/index.d.ts +8 -0
  65. package/dist/esm/src/ratchet/index.d.ts.map +1 -0
  66. package/dist/esm/src/ratchet/index.js +8 -0
  67. package/dist/esm/src/ratchet/kdf.d.ts +60 -0
  68. package/dist/esm/src/ratchet/kdf.d.ts.map +1 -0
  69. package/dist/esm/src/ratchet/kdf.js +91 -0
  70. package/dist/esm/src/ratchet/session.d.ts +43 -0
  71. package/dist/esm/src/ratchet/session.d.ts.map +1 -0
  72. package/dist/esm/src/ratchet/session.js +139 -0
  73. package/dist/esm/src/ratchet/types.d.ts +168 -0
  74. package/dist/esm/src/ratchet/types.d.ts.map +1 -0
  75. package/dist/esm/src/ratchet/types.js +27 -0
  76. package/dist/esm/src/safeSessionSigner.d.ts +35 -0
  77. package/dist/esm/src/safeSessionSigner.d.ts.map +1 -0
  78. package/dist/esm/src/safeSessionSigner.js +59 -0
  79. package/dist/esm/src/send.d.ts +32 -24
  80. package/dist/esm/src/send.d.ts.map +1 -1
  81. package/dist/esm/src/send.js +84 -39
  82. package/dist/esm/src/types.d.ts +8 -13
  83. package/dist/esm/src/types.d.ts.map +1 -1
  84. package/dist/esm/src/utils/safeSessionSigner.d.ts +23 -0
  85. package/dist/esm/src/utils/safeSessionSigner.d.ts.map +1 -0
  86. package/dist/esm/src/utils/safeSessionSigner.js +59 -0
  87. package/dist/esm/src/utils/txQueue.d.ts +12 -0
  88. package/dist/esm/src/utils/txQueue.d.ts.map +1 -0
  89. package/dist/esm/src/utils/txQueue.js +25 -0
  90. package/dist/esm/src/utils.d.ts +2 -3
  91. package/dist/esm/src/utils.d.ts.map +1 -1
  92. package/dist/esm/src/utils.js +5 -5
  93. package/dist/esm/src/verify.d.ts +9 -25
  94. package/dist/esm/src/verify.d.ts.map +1 -1
  95. package/dist/esm/src/verify.js +49 -50
  96. package/dist/src/addresses.d.ts +20 -0
  97. package/dist/src/addresses.d.ts.map +1 -0
  98. package/dist/src/addresses.js +33 -0
  99. package/dist/src/client/HsrTagIndex.d.ts +77 -0
  100. package/dist/src/client/HsrTagIndex.d.ts.map +1 -0
  101. package/dist/src/client/HsrTagIndex.js +157 -0
  102. package/dist/src/client/PendingManager.d.ts +65 -0
  103. package/dist/src/client/PendingManager.d.ts.map +1 -0
  104. package/dist/src/client/PendingManager.js +84 -0
  105. package/dist/src/client/SessionManager.d.ts +65 -0
  106. package/dist/src/client/SessionManager.d.ts.map +1 -0
  107. package/dist/src/client/SessionManager.js +146 -0
  108. package/dist/src/client/VerbethClient.d.ts +153 -99
  109. package/dist/src/client/VerbethClient.d.ts.map +1 -1
  110. package/dist/src/client/VerbethClient.js +429 -123
  111. package/dist/src/client/VerbethClientBuilder.d.ts +105 -0
  112. package/dist/src/client/VerbethClientBuilder.d.ts.map +1 -0
  113. package/dist/src/client/VerbethClientBuilder.js +146 -0
  114. package/dist/src/client/hsrMatcher.d.ts +22 -0
  115. package/dist/src/client/hsrMatcher.d.ts.map +1 -0
  116. package/dist/src/client/hsrMatcher.js +31 -0
  117. package/dist/src/client/index.d.ts +6 -1
  118. package/dist/src/client/index.d.ts.map +1 -1
  119. package/dist/src/client/index.js +2 -0
  120. package/dist/src/client/types.d.ts +151 -10
  121. package/dist/src/client/types.d.ts.map +1 -1
  122. package/dist/src/crypto(old).d.ts +46 -0
  123. package/dist/src/crypto(old).d.ts.map +1 -0
  124. package/dist/src/crypto(old).js +137 -0
  125. package/dist/src/crypto.d.ts +7 -29
  126. package/dist/src/crypto.d.ts.map +1 -1
  127. package/dist/src/crypto.js +36 -72
  128. package/dist/src/executor.d.ts +17 -18
  129. package/dist/src/executor.d.ts.map +1 -1
  130. package/dist/src/executor.js +54 -70
  131. package/dist/src/handshake.d.ts +51 -0
  132. package/dist/src/handshake.d.ts.map +1 -0
  133. package/dist/src/handshake.js +105 -0
  134. package/dist/src/identity.d.ts +24 -18
  135. package/dist/src/identity.d.ts.map +1 -1
  136. package/dist/src/identity.js +126 -31
  137. package/dist/src/index.d.ts +11 -7
  138. package/dist/src/index.d.ts.map +1 -1
  139. package/dist/src/index.js +10 -7
  140. package/dist/src/payload.d.ts +3 -30
  141. package/dist/src/payload.d.ts.map +1 -1
  142. package/dist/src/payload.js +3 -77
  143. package/dist/src/pq/kem.d.ts +33 -0
  144. package/dist/src/pq/kem.d.ts.map +1 -0
  145. package/dist/src/pq/kem.js +40 -0
  146. package/dist/src/ratchet/auth.d.ts +34 -0
  147. package/dist/src/ratchet/auth.d.ts.map +1 -0
  148. package/dist/src/ratchet/auth.js +88 -0
  149. package/dist/src/ratchet/codec.d.ts +52 -0
  150. package/dist/src/ratchet/codec.d.ts.map +1 -0
  151. package/dist/src/ratchet/codec.js +127 -0
  152. package/dist/src/ratchet/decrypt.d.ts +28 -0
  153. package/dist/src/ratchet/decrypt.d.ts.map +1 -0
  154. package/dist/src/ratchet/decrypt.js +255 -0
  155. package/dist/src/ratchet/encrypt.d.ts +17 -0
  156. package/dist/src/ratchet/encrypt.d.ts.map +1 -0
  157. package/dist/src/ratchet/encrypt.js +78 -0
  158. package/dist/src/ratchet/index.d.ts +8 -0
  159. package/dist/src/ratchet/index.d.ts.map +1 -0
  160. package/dist/src/ratchet/index.js +8 -0
  161. package/dist/src/ratchet/kdf.d.ts +60 -0
  162. package/dist/src/ratchet/kdf.d.ts.map +1 -0
  163. package/dist/src/ratchet/kdf.js +91 -0
  164. package/dist/src/ratchet/session.d.ts +43 -0
  165. package/dist/src/ratchet/session.d.ts.map +1 -0
  166. package/dist/src/ratchet/session.js +139 -0
  167. package/dist/src/ratchet/types.d.ts +168 -0
  168. package/dist/src/ratchet/types.d.ts.map +1 -0
  169. package/dist/src/ratchet/types.js +27 -0
  170. package/dist/src/safeSessionSigner.d.ts +35 -0
  171. package/dist/src/safeSessionSigner.d.ts.map +1 -0
  172. package/dist/src/safeSessionSigner.js +59 -0
  173. package/dist/src/send.d.ts +32 -24
  174. package/dist/src/send.d.ts.map +1 -1
  175. package/dist/src/send.js +84 -39
  176. package/dist/src/types.d.ts +8 -13
  177. package/dist/src/types.d.ts.map +1 -1
  178. package/dist/src/utils/safeSessionSigner.d.ts +23 -0
  179. package/dist/src/utils/safeSessionSigner.d.ts.map +1 -0
  180. package/dist/src/utils/safeSessionSigner.js +59 -0
  181. package/dist/src/utils/txQueue.d.ts +12 -0
  182. package/dist/src/utils/txQueue.d.ts.map +1 -0
  183. package/dist/src/utils/txQueue.js +25 -0
  184. package/dist/src/utils.d.ts +2 -3
  185. package/dist/src/utils.d.ts.map +1 -1
  186. package/dist/src/utils.js +5 -5
  187. package/dist/src/verify.d.ts +9 -25
  188. package/dist/src/verify.d.ts.map +1 -1
  189. package/dist/src/verify.js +49 -50
  190. package/package.json +2 -1
@@ -0,0 +1,137 @@
1
+ // packages/sdk/src/crypto.ts
2
+ import nacl from 'tweetnacl';
3
+ import { keccak256, toUtf8Bytes, dataSlice } from 'ethers';
4
+ import { sha256 } from '@noble/hashes/sha2';
5
+ import { hkdf } from '@noble/hashes/hkdf';
6
+ import { encodePayload, decodePayload, encodeStructuredContent, decodeStructuredContent, extractKeysFromHandshakeResponse } from './payload.js';
7
+ /**
8
+ * Encrypts a structured payload (JSON-serializable objects)
9
+ */
10
+ export function encryptStructuredPayload(payload, recipientPublicKey, ephemeralSecretKey, ephemeralPublicKey, staticSigningSecretKey, staticSigningPublicKey) {
11
+ // encode payload as binary JSON
12
+ const plaintext = encodeStructuredContent(payload);
13
+ const nonce = nacl.randomBytes(nacl.box.nonceLength);
14
+ const box = nacl.box(plaintext, nonce, recipientPublicKey, ephemeralSecretKey);
15
+ let sig;
16
+ if (staticSigningSecretKey && staticSigningPublicKey) {
17
+ const dataToSign = Buffer.concat([ephemeralPublicKey, nonce, box]);
18
+ sig = nacl.sign.detached(dataToSign, staticSigningSecretKey);
19
+ }
20
+ return encodePayload(ephemeralPublicKey, nonce, box, sig);
21
+ }
22
+ /**
23
+ * Decrypts a structured payload with converter function
24
+ */
25
+ export function decryptStructuredPayload(payloadJson, recipientSecretKey, converter, staticSigningPublicKey) {
26
+ const { epk, nonce, ciphertext, sig } = decodePayload(payloadJson);
27
+ if (sig && staticSigningPublicKey) {
28
+ const dataToVerify = Buffer.concat([epk, nonce, ciphertext]);
29
+ const valid = nacl.sign.detached.verify(dataToVerify, sig, staticSigningPublicKey);
30
+ if (!valid)
31
+ return null;
32
+ }
33
+ const box = nacl.box.open(ciphertext, nonce, epk, recipientSecretKey);
34
+ if (!box)
35
+ return null;
36
+ return decodeStructuredContent(box, converter);
37
+ }
38
+ // wrappers for encrypting and decrypting messages
39
+ export function encryptMessage(message, recipientPublicKey, ephemeralSecretKey, ephemeralPublicKey, staticSigningSecretKey, staticSigningPublicKey) {
40
+ const payload = { content: message };
41
+ return encryptStructuredPayload(payload, recipientPublicKey, ephemeralSecretKey, ephemeralPublicKey, staticSigningSecretKey, staticSigningPublicKey);
42
+ }
43
+ export function decryptMessage(payloadJson, recipientSecretKey, staticSigningPublicKey) {
44
+ const result = decryptStructuredPayload(payloadJson, recipientSecretKey, (obj) => obj, staticSigningPublicKey);
45
+ return result ? result.content : null;
46
+ }
47
+ /**
48
+ * Decrypts handshake response and extracts individual keys from unified format
49
+ */
50
+ export function decryptHandshakeResponse(payloadJson, initiatorEphemeralSecretKey) {
51
+ return decryptStructuredPayload(payloadJson, initiatorEphemeralSecretKey, (obj) => {
52
+ if (!obj.identityProof) {
53
+ throw new Error("Invalid handshake response: missing identityProof");
54
+ }
55
+ return {
56
+ unifiedPubKeys: Uint8Array.from(Buffer.from(obj.unifiedPubKeys, 'base64')),
57
+ ephemeralPubKey: Uint8Array.from(Buffer.from(obj.ephemeralPubKey, 'base64')),
58
+ note: obj.note,
59
+ identityProof: obj.identityProof
60
+ };
61
+ });
62
+ }
63
+ /**
64
+ * helper to decrypt handshake response and extract individual keys
65
+ */
66
+ export function decryptAndExtractHandshakeKeys(payloadJson, initiatorEphemeralSecretKey) {
67
+ const decrypted = decryptHandshakeResponse(payloadJson, initiatorEphemeralSecretKey);
68
+ if (!decrypted)
69
+ return null;
70
+ const extracted = extractKeysFromHandshakeResponse(decrypted);
71
+ if (!extracted)
72
+ return null;
73
+ return {
74
+ identityPubKey: extracted.identityPubKey,
75
+ signingPubKey: extracted.signingPubKey,
76
+ ephemeralPubKey: extracted.ephemeralPubKey,
77
+ note: decrypted.note,
78
+ identityProof: decrypted.identityProof
79
+ };
80
+ }
81
+ /**
82
+ * HKDF(sha256) on shared secret, info="verbeth:hsr", then Keccak-256 -> bytes32 (0x...)
83
+ */
84
+ function finalizeHsrTag(shared) {
85
+ const okm = hkdf(sha256, shared, new Uint8Array(0), toUtf8Bytes("verbeth:hsr"), 32);
86
+ return keccak256(okm);
87
+ }
88
+ /**
89
+ * Responder: tag = H( KDF( ECDH(r, viewPubA), "verbeth:hsr"))
90
+ */
91
+ export function computeTagFromResponder(rSecretKey, viewPubA) {
92
+ const shared = nacl.scalarMult(rSecretKey, viewPubA);
93
+ return finalizeHsrTag(shared);
94
+ }
95
+ /**
96
+ * Initiator: tag = H( KDF( ECDH(viewPrivA, R), "verbeth:hsr"))
97
+ */
98
+ export function computeTagFromInitiator(viewPrivA, R) {
99
+ const shared = nacl.scalarMult(viewPrivA, R);
100
+ return finalizeHsrTag(shared);
101
+ }
102
+ /**
103
+ * Derives a bytes32 topic from the shared secret via HKDF(SHA256) + Keccak-256.
104
+ * - info: domain separation (e.g., "verbeth:topic-out:v1")
105
+ * - salt: recommended to use a tag as salt (stable and shareable)
106
+ */
107
+ function deriveTopic(shared, info, salt) {
108
+ const okm = hkdf(sha256, shared, salt ?? new Uint8Array(0), new TextEncoder().encode(info), 32);
109
+ return keccak256(okm);
110
+ }
111
+ export function deriveLongTermShared(myIdentitySecretKey, theirIdentityPublicKey) {
112
+ return nacl.scalarMult(myIdentitySecretKey, theirIdentityPublicKey);
113
+ }
114
+ /**
115
+ * Directional duplex topics (Initiator-Responder, Responder-Initiator).
116
+ * Recommended salt: tag (bytes)
117
+ */
118
+ export function deriveDuplexTopics(myIdentitySecretKey, theirIdentityPublicKey, salt) {
119
+ const shared = deriveLongTermShared(myIdentitySecretKey, theirIdentityPublicKey);
120
+ const topicOut = deriveTopic(shared, "verbeth:topic-out:v1", salt);
121
+ const topicIn = deriveTopic(shared, "verbeth:topic-in:v1", salt);
122
+ const chkFull = keccak256(Buffer.concat([
123
+ toUtf8Bytes("verbeth:topic-chk:v1"),
124
+ Buffer.from(topicOut.slice(2), 'hex'),
125
+ Buffer.from(topicIn.slice(2), 'hex'),
126
+ ]));
127
+ const checksum = dataSlice(chkFull, 8);
128
+ return { topicOut, topicIn, checksum };
129
+ }
130
+ export function verifyDuplexTopicsChecksum(topicOut, topicIn, checksum) {
131
+ const chkFull = keccak256(Buffer.concat([
132
+ toUtf8Bytes("verbeth:topic-chk:v1"),
133
+ Buffer.from(topicOut.slice(2), 'hex'),
134
+ Buffer.from(topicIn.slice(2), 'hex'),
135
+ ]));
136
+ return dataSlice(chkFull, 8) === checksum;
137
+ }
@@ -1,46 +1,24 @@
1
1
  import { HandshakeResponseContent } from './payload.js';
2
2
  import { IdentityProof } from './types.js';
3
3
  /**
4
- * Encrypts a structured payload (JSON-serializable objects)
4
+ * Encrypts a structured payload (JSON-serializable objects) using NaCl box.
5
+ * Used for handshake responses where ratchet is not yet established.
5
6
  */
6
7
  export declare function encryptStructuredPayload<T>(payload: T, recipientPublicKey: Uint8Array, ephemeralSecretKey: Uint8Array, ephemeralPublicKey: Uint8Array, staticSigningSecretKey?: Uint8Array, staticSigningPublicKey?: Uint8Array): string;
7
8
  /**
8
- * Decrypts a structured payload with converter function
9
+ * Decrypts a structured payload with converter function.
10
+ * Used for handshake responses where ratchet is not yet established.
9
11
  */
10
12
  export declare function decryptStructuredPayload<T>(payloadJson: string, recipientSecretKey: Uint8Array, converter: (obj: any) => T, staticSigningPublicKey?: Uint8Array): T | null;
11
- export declare function encryptMessage(message: string, recipientPublicKey: Uint8Array, ephemeralSecretKey: Uint8Array, ephemeralPublicKey: Uint8Array, staticSigningSecretKey?: Uint8Array, staticSigningPublicKey?: Uint8Array): string;
12
- export declare function decryptMessage(payloadJson: string, recipientSecretKey: Uint8Array, staticSigningPublicKey?: Uint8Array): string | null;
13
- /**
14
- * Decrypts handshake response and extracts individual keys from unified format
15
- */
16
13
  export declare function decryptHandshakeResponse(payloadJson: string, initiatorEphemeralSecretKey: Uint8Array): HandshakeResponseContent | null;
17
- /**
18
- * helper to decrypt handshake response and extract individual keys
19
- */
20
14
  export declare function decryptAndExtractHandshakeKeys(payloadJson: string, initiatorEphemeralSecretKey: Uint8Array): {
21
15
  identityPubKey: Uint8Array;
22
16
  signingPubKey: Uint8Array;
23
17
  ephemeralPubKey: Uint8Array;
18
+ kemCiphertext?: Uint8Array;
24
19
  note?: string;
25
20
  identityProof: IdentityProof;
26
21
  } | null;
27
- /**
28
- * Responder: tag = H( KDF( ECDH(r, viewPubA), "verbeth:hsr"))
29
- */
30
- export declare function computeTagFromResponder(rSecretKey: Uint8Array, viewPubA: Uint8Array): `0x${string}`;
31
- /**
32
- * Initiator: tag = H( KDF( ECDH(viewPrivA, R), "verbeth:hsr"))
33
- */
34
- export declare function computeTagFromInitiator(viewPrivA: Uint8Array, R: Uint8Array): `0x${string}`;
35
- export declare function deriveLongTermShared(myIdentitySecretKey: Uint8Array, theirIdentityPublicKey: Uint8Array): Uint8Array;
36
- /**
37
- * Directional duplex topics (Initiator-Responder, Responder-Initiator).
38
- * Recommended salt: tag (bytes)
39
- */
40
- export declare function deriveDuplexTopics(myIdentitySecretKey: Uint8Array, theirIdentityPublicKey: Uint8Array, salt?: Uint8Array): {
41
- topicOut: `0x${string}`;
42
- topicIn: `0x${string}`;
43
- checksum: `0x${string}`;
44
- };
45
- export declare function verifyDuplexTopicsChecksum(topicOut: `0x${string}`, topicIn: `0x${string}`, checksum: `0x${string}`): boolean;
22
+ export declare function computeHybridTagFromResponder(rSecretKey: Uint8Array, viewPubA: Uint8Array, kemSecret: Uint8Array): `0x${string}`;
23
+ export declare function computeHybridTagFromInitiator(viewPrivA: Uint8Array, R: Uint8Array, kemSecret: Uint8Array): `0x${string}`;
46
24
  //# sourceMappingURL=crypto.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../../src/crypto.ts"],"names":[],"mappings":"AAMA,OAAO,EAML,wBAAwB,EAEzB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,CAAC,EACxC,OAAO,EAAE,CAAC,EACV,kBAAkB,EAAE,UAAU,EAC9B,kBAAkB,EAAE,UAAU,EAC9B,kBAAkB,EAAE,UAAU,EAC9B,sBAAsB,CAAC,EAAE,UAAU,EACnC,sBAAsB,CAAC,EAAE,UAAU,GAClC,MAAM,CAcR;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,CAAC,EACxC,WAAW,EAAE,MAAM,EACnB,kBAAkB,EAAE,UAAU,EAC9B,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,EAC1B,sBAAsB,CAAC,EAAE,UAAU,GAClC,CAAC,GAAG,IAAI,CAaV;AAGD,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,kBAAkB,EAAE,UAAU,EAC9B,kBAAkB,EAAE,UAAU,EAC9B,kBAAkB,EAAE,UAAU,EAC9B,sBAAsB,CAAC,EAAE,UAAU,EACnC,sBAAsB,CAAC,EAAE,UAAU,GAClC,MAAM,CAUR;AAED,wBAAgB,cAAc,CAC5B,WAAW,EAAE,MAAM,EACnB,kBAAkB,EAAE,UAAU,EAC9B,sBAAsB,CAAC,EAAE,UAAU,GAClC,MAAM,GAAG,IAAI,CAQf;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,2BAA2B,EAAE,UAAU,GACtC,wBAAwB,GAAG,IAAI,CAgBjC;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAC5C,WAAW,EAAE,MAAM,EACnB,2BAA2B,EAAE,UAAU,GACtC;IACD,cAAc,EAAE,UAAU,CAAC;IAC3B,aAAa,EAAE,UAAU,CAAC;IAC1B,eAAe,EAAE,UAAU,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,aAAa,CAAC;CAC9B,GAAG,IAAI,CAcP;AAWD;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,UAAU,GACnB,KAAK,MAAM,EAAE,CAGf;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,UAAU,EACrB,CAAC,EAAE,UAAU,GACZ,KAAK,MAAM,EAAE,CAGf;AAkBD,wBAAgB,oBAAoB,CAClC,mBAAmB,EAAE,UAAU,EAC/B,sBAAsB,EAAE,UAAU,GACjC,UAAU,CAEZ;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,mBAAmB,EAAE,UAAU,EAC/B,sBAAsB,EAAE,UAAU,EAClC,IAAI,CAAC,EAAE,UAAU,GAChB;IAAE,QAAQ,EAAE,KAAK,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,KAAK,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,KAAK,MAAM,EAAE,CAAA;CAAE,CAW9E;AAED,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,KAAK,MAAM,EAAE,EACvB,OAAO,EAAE,KAAK,MAAM,EAAE,EACtB,QAAQ,EAAE,KAAK,MAAM,EAAE,GACtB,OAAO,CAOT"}
1
+ {"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../../src/crypto.ts"],"names":[],"mappings":"AAkBA,OAAO,EAKL,wBAAwB,EAEzB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAM3C;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,CAAC,EACxC,OAAO,EAAE,CAAC,EACV,kBAAkB,EAAE,UAAU,EAC9B,kBAAkB,EAAE,UAAU,EAC9B,kBAAkB,EAAE,UAAU,EAC9B,sBAAsB,CAAC,EAAE,UAAU,EACnC,sBAAsB,CAAC,EAAE,UAAU,GAClC,MAAM,CAcR;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,CAAC,EACxC,WAAW,EAAE,MAAM,EACnB,kBAAkB,EAAE,UAAU,EAC9B,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,EAC1B,sBAAsB,CAAC,EAAE,UAAU,GAClC,CAAC,GAAG,IAAI,CAaV;AAOD,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,2BAA2B,EAAE,UAAU,GACtC,wBAAwB,GAAG,IAAI,CAiBjC;AAGD,wBAAgB,8BAA8B,CAC5C,WAAW,EAAE,MAAM,EACnB,2BAA2B,EAAE,UAAU,GACtC;IACD,cAAc,EAAE,UAAU,CAAC;IAC3B,aAAa,EAAE,UAAU,CAAC;IAC1B,eAAe,EAAE,UAAU,CAAC;IAC5B,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,aAAa,CAAC;CAC9B,GAAG,IAAI,CAeP;AAWD,wBAAgB,6BAA6B,CAC3C,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,UAAU,EACpB,SAAS,EAAE,UAAU,GACpB,KAAK,MAAM,EAAE,CAGf;AAED,wBAAgB,6BAA6B,CAC3C,SAAS,EAAE,UAAU,EACrB,CAAC,EAAE,UAAU,EACb,SAAS,EAAE,UAAU,GACpB,KAAK,MAAM,EAAE,CAGf"}
@@ -1,11 +1,26 @@
1
1
  // packages/sdk/src/crypto.ts
2
+ /**
3
+ * This module handles:
4
+ * - Handshake encryption/decryption
5
+ * - Tag computation for handshake responses
6
+ *
7
+ * Post-handshake message encryption uses the ratchet module.
8
+ * See `ratchet/encrypt.ts` and `ratchet/decrypt.ts` for Double Ratchet.
9
+ *
10
+ * Topic derivation is handled entirely by the ratchet module.
11
+ * See `ratchet/kdf.ts` for `deriveTopicFromDH`.
12
+ */
2
13
  import nacl from 'tweetnacl';
3
- import { keccak256, toUtf8Bytes, dataSlice } from 'ethers';
14
+ import { keccak256, toUtf8Bytes } from 'ethers';
4
15
  import { sha256 } from '@noble/hashes/sha2';
5
16
  import { hkdf } from '@noble/hashes/hkdf';
6
17
  import { encodePayload, decodePayload, encodeStructuredContent, decodeStructuredContent, extractKeysFromHandshakeResponse } from './payload.js';
18
+ // =============================================================================
19
+ // Handshake Encryption
20
+ // =============================================================================
7
21
  /**
8
- * Encrypts a structured payload (JSON-serializable objects)
22
+ * Encrypts a structured payload (JSON-serializable objects) using NaCl box.
23
+ * Used for handshake responses where ratchet is not yet established.
9
24
  */
10
25
  export function encryptStructuredPayload(payload, recipientPublicKey, ephemeralSecretKey, ephemeralPublicKey, staticSigningSecretKey, staticSigningPublicKey) {
11
26
  // encode payload as binary JSON
@@ -20,7 +35,8 @@ export function encryptStructuredPayload(payload, recipientPublicKey, ephemeralS
20
35
  return encodePayload(ephemeralPublicKey, nonce, box, sig);
21
36
  }
22
37
  /**
23
- * Decrypts a structured payload with converter function
38
+ * Decrypts a structured payload with converter function.
39
+ * Used for handshake responses where ratchet is not yet established.
24
40
  */
25
41
  export function decryptStructuredPayload(payloadJson, recipientSecretKey, converter, staticSigningPublicKey) {
26
42
  const { epk, nonce, ciphertext, sig } = decodePayload(payloadJson);
@@ -35,18 +51,9 @@ export function decryptStructuredPayload(payloadJson, recipientSecretKey, conver
35
51
  return null;
36
52
  return decodeStructuredContent(box, converter);
37
53
  }
38
- // wrappers for encrypting and decrypting messages
39
- export function encryptMessage(message, recipientPublicKey, ephemeralSecretKey, ephemeralPublicKey, staticSigningSecretKey, staticSigningPublicKey) {
40
- const payload = { content: message };
41
- return encryptStructuredPayload(payload, recipientPublicKey, ephemeralSecretKey, ephemeralPublicKey, staticSigningSecretKey, staticSigningPublicKey);
42
- }
43
- export function decryptMessage(payloadJson, recipientSecretKey, staticSigningPublicKey) {
44
- const result = decryptStructuredPayload(payloadJson, recipientSecretKey, (obj) => obj, staticSigningPublicKey);
45
- return result ? result.content : null;
46
- }
47
- /**
48
- * Decrypts handshake response and extracts individual keys from unified format
49
- */
54
+ // =============================================================================
55
+ // Handshake Response Decryption
56
+ // =============================================================================
50
57
  export function decryptHandshakeResponse(payloadJson, initiatorEphemeralSecretKey) {
51
58
  return decryptStructuredPayload(payloadJson, initiatorEphemeralSecretKey, (obj) => {
52
59
  if (!obj.identityProof) {
@@ -55,14 +62,12 @@ export function decryptHandshakeResponse(payloadJson, initiatorEphemeralSecretKe
55
62
  return {
56
63
  unifiedPubKeys: Uint8Array.from(Buffer.from(obj.unifiedPubKeys, 'base64')),
57
64
  ephemeralPubKey: Uint8Array.from(Buffer.from(obj.ephemeralPubKey, 'base64')),
65
+ ...(obj.kemCiphertext && { kemCiphertext: Uint8Array.from(Buffer.from(obj.kemCiphertext, 'base64')) }),
58
66
  note: obj.note,
59
- identityProof: obj.identityProof
67
+ identityProof: obj.identityProof,
60
68
  };
61
69
  });
62
70
  }
63
- /**
64
- * helper to decrypt handshake response and extract individual keys
65
- */
66
71
  export function decryptAndExtractHandshakeKeys(payloadJson, initiatorEphemeralSecretKey) {
67
72
  const decrypted = decryptHandshakeResponse(payloadJson, initiatorEphemeralSecretKey);
68
73
  if (!decrypted)
@@ -74,64 +79,23 @@ export function decryptAndExtractHandshakeKeys(payloadJson, initiatorEphemeralSe
74
79
  identityPubKey: extracted.identityPubKey,
75
80
  signingPubKey: extracted.signingPubKey,
76
81
  ephemeralPubKey: extracted.ephemeralPubKey,
82
+ kemCiphertext: decrypted.kemCiphertext,
77
83
  note: decrypted.note,
78
84
  identityProof: decrypted.identityProof
79
85
  };
80
86
  }
81
- /**
82
- * HKDF(sha256) on shared secret, info="verbeth:hsr", then Keccak-256 -> bytes32 (0x...)
83
- */
84
- function finalizeHsrTag(shared) {
85
- const okm = hkdf(sha256, shared, new Uint8Array(0), toUtf8Bytes("verbeth:hsr"), 32);
87
+ // =============================================================================
88
+ // Hybrid Tag Computation (PQ-Secure)
89
+ // =============================================================================
90
+ function finalizeHybridHsrTag(kemSecret, ecdhShared) {
91
+ const okm = hkdf(sha256, kemSecret, ecdhShared, toUtf8Bytes("verbeth:hsr-hybrid:v1"), 32);
86
92
  return keccak256(okm);
87
93
  }
88
- /**
89
- * Responder: tag = H( KDF( ECDH(r, viewPubA), "verbeth:hsr"))
90
- */
91
- export function computeTagFromResponder(rSecretKey, viewPubA) {
92
- const shared = nacl.scalarMult(rSecretKey, viewPubA);
93
- return finalizeHsrTag(shared);
94
- }
95
- /**
96
- * Initiator: tag = H( KDF( ECDH(viewPrivA, R), "verbeth:hsr"))
97
- */
98
- export function computeTagFromInitiator(viewPrivA, R) {
99
- const shared = nacl.scalarMult(viewPrivA, R);
100
- return finalizeHsrTag(shared);
101
- }
102
- /**
103
- * Derives a bytes32 topic from the shared secret via HKDF(SHA256) + Keccak-256.
104
- * - info: domain separation (e.g., "verbeth:topic-out:v1")
105
- * - salt: recommended to use a tag as salt (stable and shareable)
106
- */
107
- function deriveTopic(shared, info, salt) {
108
- const okm = hkdf(sha256, shared, salt ?? new Uint8Array(0), new TextEncoder().encode(info), 32);
109
- return keccak256(okm);
110
- }
111
- export function deriveLongTermShared(myIdentitySecretKey, theirIdentityPublicKey) {
112
- return nacl.scalarMult(myIdentitySecretKey, theirIdentityPublicKey);
113
- }
114
- /**
115
- * Directional duplex topics (Initiator-Responder, Responder-Initiator).
116
- * Recommended salt: tag (bytes)
117
- */
118
- export function deriveDuplexTopics(myIdentitySecretKey, theirIdentityPublicKey, salt) {
119
- const shared = deriveLongTermShared(myIdentitySecretKey, theirIdentityPublicKey);
120
- const topicOut = deriveTopic(shared, "verbeth:topic-out:v1", salt);
121
- const topicIn = deriveTopic(shared, "verbeth:topic-in:v1", salt);
122
- const chkFull = keccak256(Buffer.concat([
123
- toUtf8Bytes("verbeth:topic-chk:v1"),
124
- Buffer.from(topicOut.slice(2), 'hex'),
125
- Buffer.from(topicIn.slice(2), 'hex'),
126
- ]));
127
- const checksum = dataSlice(chkFull, 8);
128
- return { topicOut, topicIn, checksum };
94
+ export function computeHybridTagFromResponder(rSecretKey, viewPubA, kemSecret) {
95
+ const ecdhShared = nacl.scalarMult(rSecretKey, viewPubA);
96
+ return finalizeHybridHsrTag(kemSecret, ecdhShared);
129
97
  }
130
- export function verifyDuplexTopicsChecksum(topicOut, topicIn, checksum) {
131
- const chkFull = keccak256(Buffer.concat([
132
- toUtf8Bytes("verbeth:topic-chk:v1"),
133
- Buffer.from(topicOut.slice(2), 'hex'),
134
- Buffer.from(topicIn.slice(2), 'hex'),
135
- ]));
136
- return dataSlice(chkFull, 8) === checksum;
98
+ export function computeHybridTagFromInitiator(viewPrivA, R, kemSecret) {
99
+ const ecdhShared = nacl.scalarMult(viewPrivA, R);
100
+ return finalizeHybridHsrTag(kemSecret, ecdhShared);
137
101
  }
@@ -1,5 +1,5 @@
1
1
  import { Signer, Contract, BaseContract } from "ethers";
2
- import type { LogChainV1 } from "@verbeth/contracts/typechain-types";
2
+ import type { VerbethV1 } from "@verbeth/contracts/typechain-types";
3
3
  export declare function split128x128(word: bigint): readonly [bigint, bigint];
4
4
  export interface IExecutor {
5
5
  sendMessage(ciphertext: Uint8Array, topic: string, timestamp: number, nonce: bigint): Promise<any>;
@@ -8,20 +8,19 @@ export interface IExecutor {
8
8
  }
9
9
  export declare class EOAExecutor implements IExecutor {
10
10
  private contract;
11
- constructor(contract: LogChainV1);
11
+ constructor(contract: VerbethV1);
12
12
  sendMessage(ciphertext: Uint8Array, topic: string, timestamp: number, nonce: bigint): Promise<any>;
13
13
  initiateHandshake(recipientHash: string, pubKeys: string, ephemeralPubKey: string, plaintextPayload: Uint8Array): Promise<any>;
14
14
  respondToHandshake(inResponseTo: string, responderEphemeralR: string, ciphertext: Uint8Array): Promise<any>;
15
15
  }
16
16
  export declare class BaseSmartAccountExecutor implements IExecutor {
17
17
  private baseAccountProvider;
18
- private logChainAddress;
18
+ private verbEthAddress;
19
19
  private paymasterServiceUrl?;
20
20
  private subAccountAddress?;
21
- private logChainInterface;
21
+ private verbEthInterface;
22
22
  private chainId;
23
- constructor(baseAccountProvider: any, logChainAddress: string, chainId?: number, // Base mainnet by default
24
- paymasterServiceUrl?: string | undefined, subAccountAddress?: string | undefined);
23
+ constructor(baseAccountProvider: any, verbEthAddress: string, chainId?: number, paymasterServiceUrl?: string | undefined, subAccountAddress?: string | undefined);
25
24
  sendMessage(ciphertext: Uint8Array, topic: string, timestamp: number, nonce: bigint): Promise<any>;
26
25
  initiateHandshake(recipientHash: string, pubKeys: string, ephemeralPubKey: string, plaintextPayload: Uint8Array): Promise<any>;
27
26
  respondToHandshake(inResponseTo: string, responderEphemeralR: string, ciphertext: Uint8Array): Promise<any>;
@@ -29,12 +28,12 @@ export declare class BaseSmartAccountExecutor implements IExecutor {
29
28
  }
30
29
  export declare class UserOpExecutor implements IExecutor {
31
30
  private smartAccountAddress;
32
- private logChainAddress;
31
+ private verbEthAddress;
33
32
  private bundlerClient;
34
33
  private smartAccountClient;
35
- private logChainInterface;
34
+ private verbEthInterface;
36
35
  private smartAccountInterface;
37
- constructor(smartAccountAddress: string, logChainAddress: string, bundlerClient: any, smartAccountClient: any);
36
+ constructor(smartAccountAddress: string, verbEthAddress: string, bundlerClient: any, smartAccountClient: any);
38
37
  sendMessage(ciphertext: Uint8Array, topic: string, timestamp: number, nonce: bigint): Promise<any>;
39
38
  initiateHandshake(recipientHash: string, pubKeys: string, ephemeralPubKey: string, plaintextPayload: Uint8Array): Promise<any>;
40
39
  respondToHandshake(inResponseTo: string, responderEphemeralR: string, ciphertext: Uint8Array): Promise<any>;
@@ -42,28 +41,28 @@ export declare class UserOpExecutor implements IExecutor {
42
41
  }
43
42
  export declare class DirectEntryPointExecutor implements IExecutor {
44
43
  private smartAccountAddress;
45
- private logChainAddress;
44
+ private verbEthAddress;
46
45
  private smartAccountClient;
47
46
  private signer;
48
- private logChainInterface;
47
+ private verbEthInterface;
49
48
  private smartAccountInterface;
50
49
  private entryPointContract;
51
50
  private spec;
52
- constructor(smartAccountAddress: string, entryPointContract: Contract | BaseContract, logChainAddress: string, smartAccountClient: any, signer: Signer);
51
+ constructor(smartAccountAddress: string, entryPointContract: Contract | BaseContract, verbEthAddress: string, smartAccountClient: any, signer: Signer);
53
52
  sendMessage(ciphertext: Uint8Array, topic: string, timestamp: number, nonce: bigint): Promise<any>;
54
53
  initiateHandshake(recipientHash: string, pubKeys: string, ephemeralPubKey: string, plaintextPayload: Uint8Array): Promise<any>;
55
54
  respondToHandshake(inResponseTo: string, responderEphemeralR: string, ciphertext: Uint8Array): Promise<any>;
56
55
  private executeDirectUserOp;
57
56
  }
58
57
  export declare class ExecutorFactory {
59
- static createEOA(contract: LogChainV1): IExecutor;
60
- static createBaseSmartAccount(baseAccountProvider: any, logChainAddress: string, chainId?: number, paymasterServiceUrl?: string, subAccountAddress?: string): IExecutor;
61
- static createUserOp(smartAccountAddress: string, _entryPointAddress: string, logChainAddress: string, bundlerClient: any, smartAccountClient: any): IExecutor;
62
- static createDirectEntryPoint(smartAccountAddress: string, entryPointContract: Contract | BaseContract, logChainAddress: string, smartAccountClient: any, signer: Signer): IExecutor;
63
- static createAuto(signerOrAccount: any, contract: LogChainV1, options?: {
58
+ static createEOA(contract: VerbethV1): IExecutor;
59
+ static createBaseSmartAccount(baseAccountProvider: any, verbEthAddress: string, chainId?: number, paymasterServiceUrl?: string, subAccountAddress?: string): IExecutor;
60
+ static createUserOp(smartAccountAddress: string, _entryPointAddress: string, verbEthAddress: string, bundlerClient: any, smartAccountClient: any): IExecutor;
61
+ static createDirectEntryPoint(smartAccountAddress: string, entryPointContract: Contract | BaseContract, verbEthAddress: string, smartAccountClient: any, signer: Signer): IExecutor;
62
+ static createAuto(signerOrAccount: any, contract: VerbethV1, options?: {
64
63
  entryPointAddress?: string;
65
64
  entryPointContract?: Contract | BaseContract;
66
- logChainAddress?: string;
65
+ verbEthAddress?: string;
67
66
  bundlerClient?: any;
68
67
  baseAccountProvider?: any;
69
68
  chainId?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../../src/executor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../../src/executor.ts"],"names":[],"mappings":"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"}