shogun-core 5.2.0 โ†’ 5.2.2

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 (186) hide show
  1. package/README.md +145 -1143
  2. package/dist/browser/defaultVendors-node_modules_hpke_chacha20poly1305_esm_mod_js.shogun-core.js +1220 -0
  3. package/dist/browser/defaultVendors-node_modules_hpke_chacha20poly1305_esm_mod_js.shogun-core.js.map +1 -0
  4. package/dist/browser/defaultVendors-node_modules_hpke_hybridkem-x-wing_esm_mod_js.shogun-core.js +844 -0
  5. package/dist/browser/defaultVendors-node_modules_hpke_hybridkem-x-wing_esm_mod_js.shogun-core.js.map +1 -0
  6. package/dist/browser/defaultVendors-node_modules_mlkem_esm_mod_js.shogun-core.js +2335 -0
  7. package/dist/browser/defaultVendors-node_modules_mlkem_esm_mod_js.shogun-core.js.map +1 -0
  8. package/dist/browser/defaultVendors-node_modules_noble_ciphers_chacha_js.shogun-core.js +999 -0
  9. package/dist/browser/defaultVendors-node_modules_noble_ciphers_chacha_js.shogun-core.js.map +1 -0
  10. package/dist/browser/defaultVendors-node_modules_noble_curves_esm_abstract_curve_js-node_modules_noble_curves_esm_-1ce4ed.shogun-core.js +1651 -0
  11. package/dist/browser/defaultVendors-node_modules_noble_curves_esm_abstract_curve_js-node_modules_noble_curves_esm_-1ce4ed.shogun-core.js.map +1 -0
  12. package/dist/browser/defaultVendors-node_modules_noble_curves_esm_abstract_edwards_js-node_modules_noble_curves_es-a82056.shogun-core.js +825 -0
  13. package/dist/browser/defaultVendors-node_modules_noble_curves_esm_abstract_edwards_js-node_modules_noble_curves_es-a82056.shogun-core.js.map +1 -0
  14. package/dist/browser/defaultVendors-node_modules_noble_curves_esm_ed25519_js.shogun-core.js +508 -0
  15. package/dist/browser/defaultVendors-node_modules_noble_curves_esm_ed25519_js.shogun-core.js.map +1 -0
  16. package/dist/browser/defaultVendors-node_modules_noble_curves_esm_ed448_js.shogun-core.js +747 -0
  17. package/dist/browser/defaultVendors-node_modules_noble_curves_esm_ed448_js.shogun-core.js.map +1 -0
  18. package/dist/browser/defaultVendors-node_modules_noble_curves_esm_nist_js.shogun-core.js +1608 -0
  19. package/dist/browser/defaultVendors-node_modules_noble_curves_esm_nist_js.shogun-core.js.map +1 -0
  20. package/dist/browser/defaultVendors-node_modules_noble_post-quantum_ml-dsa_js.shogun-core.js +2117 -0
  21. package/dist/browser/defaultVendors-node_modules_noble_post-quantum_ml-dsa_js.shogun-core.js.map +1 -0
  22. package/dist/browser/defaultVendors-node_modules_openpgp_dist_openpgp_min_mjs.shogun-core.js +86 -0
  23. package/dist/browser/defaultVendors-node_modules_openpgp_dist_openpgp_min_mjs.shogun-core.js.map +1 -0
  24. package/dist/browser/node_modules_hpke_ml-kem_esm_mod_js.shogun-core.js +539 -0
  25. package/dist/browser/node_modules_hpke_ml-kem_esm_mod_js.shogun-core.js.map +1 -0
  26. package/dist/browser/shogun-core.js +160386 -0
  27. package/dist/browser/shogun-core.js.map +1 -0
  28. package/dist/config/simplified-config.js +236 -0
  29. package/dist/core.js +329 -0
  30. package/dist/crypto/asymmetric.js +99 -0
  31. package/dist/crypto/double-ratchet.js +370 -0
  32. package/dist/crypto/file-encryption.js +213 -0
  33. package/dist/crypto/hashing.js +87 -0
  34. package/dist/crypto/index.js +34 -0
  35. package/dist/crypto/mls-codec.js +202 -0
  36. package/dist/crypto/mls.js +550 -0
  37. package/dist/crypto/pgp.js +390 -0
  38. package/dist/crypto/random-generation.js +341 -0
  39. package/dist/crypto/sframe.js +350 -0
  40. package/dist/crypto/signal-protocol.js +376 -0
  41. package/dist/crypto/symmetric.js +91 -0
  42. package/dist/crypto/types.js +2 -0
  43. package/dist/crypto/utils.js +140 -0
  44. package/dist/examples/auth-test.js +253 -0
  45. package/dist/examples/crypto-identity-example.js +151 -0
  46. package/dist/examples/crypto-working-test.js +83 -0
  47. package/dist/examples/double-ratchet-test.js +155 -0
  48. package/dist/examples/mls-advanced-example.js +294 -0
  49. package/dist/examples/mls-sframe-test.js +304 -0
  50. package/dist/examples/pgp-example.js +200 -0
  51. package/dist/examples/quick-auth-test.js +61 -0
  52. package/dist/examples/random-generation-test.js +151 -0
  53. package/dist/examples/signal-protocol-test.js +38 -0
  54. package/dist/examples/simple-api-test.js +114 -0
  55. package/dist/examples/simple-crypto-identity-example.js +84 -0
  56. package/dist/examples/timeout-test.js +227 -0
  57. package/dist/examples/zkproof-credentials-example.js +212 -0
  58. package/dist/examples/zkproof-example.js +201 -0
  59. package/dist/gundb/api.js +435 -0
  60. package/dist/gundb/crypto.js +283 -0
  61. package/dist/gundb/db.js +1946 -0
  62. package/dist/gundb/derive.js +232 -0
  63. package/dist/gundb/errors.js +76 -0
  64. package/dist/gundb/index.js +22 -0
  65. package/dist/gundb/rxjs.js +447 -0
  66. package/dist/gundb/types.js +5 -0
  67. package/dist/index.js +58 -0
  68. package/dist/interfaces/common.js +2 -0
  69. package/dist/interfaces/events.js +40 -0
  70. package/dist/interfaces/plugin.js +2 -0
  71. package/dist/interfaces/shogun.js +37 -0
  72. package/dist/managers/AuthManager.js +226 -0
  73. package/dist/managers/CoreInitializer.js +228 -0
  74. package/dist/managers/CryptoIdentityManager.js +366 -0
  75. package/dist/managers/EventManager.js +70 -0
  76. package/dist/managers/PluginManager.js +299 -0
  77. package/dist/plugins/base.js +50 -0
  78. package/dist/plugins/index.js +32 -0
  79. package/dist/plugins/nostr/index.js +20 -0
  80. package/dist/plugins/nostr/nostrConnector.js +419 -0
  81. package/dist/plugins/nostr/nostrConnectorPlugin.js +453 -0
  82. package/dist/plugins/nostr/nostrSigner.js +319 -0
  83. package/dist/plugins/nostr/types.js +2 -0
  84. package/dist/plugins/smartwallet/index.js +18 -0
  85. package/dist/plugins/smartwallet/smartWalletPlugin.js +511 -0
  86. package/dist/plugins/smartwallet/types.js +2 -0
  87. package/dist/plugins/web3/index.js +20 -0
  88. package/dist/plugins/web3/types.js +2 -0
  89. package/dist/plugins/web3/web3Connector.js +533 -0
  90. package/dist/plugins/web3/web3ConnectorPlugin.js +455 -0
  91. package/dist/plugins/web3/web3Signer.js +314 -0
  92. package/dist/plugins/webauthn/index.js +19 -0
  93. package/dist/plugins/webauthn/types.js +14 -0
  94. package/dist/plugins/webauthn/webauthn.js +496 -0
  95. package/dist/plugins/webauthn/webauthnPlugin.js +489 -0
  96. package/dist/plugins/webauthn/webauthnSigner.js +310 -0
  97. package/dist/plugins/zkproof/index.js +53 -0
  98. package/dist/plugins/zkproof/types.js +2 -0
  99. package/dist/plugins/zkproof/zkCredentials.js +213 -0
  100. package/dist/plugins/zkproof/zkProofConnector.js +198 -0
  101. package/dist/plugins/zkproof/zkProofPlugin.js +272 -0
  102. package/dist/storage/storage.js +145 -0
  103. package/dist/types/config/simplified-config.d.ts +114 -0
  104. package/dist/types/core.d.ts +305 -0
  105. package/dist/types/crypto/asymmetric.d.ts +6 -0
  106. package/dist/types/crypto/double-ratchet.d.ts +22 -0
  107. package/dist/types/crypto/file-encryption.d.ts +19 -0
  108. package/dist/types/crypto/hashing.d.ts +9 -0
  109. package/dist/types/crypto/index.d.ts +13 -0
  110. package/dist/types/crypto/mls-codec.d.ts +39 -0
  111. package/dist/types/crypto/mls.d.ts +130 -0
  112. package/dist/types/crypto/pgp.d.ts +95 -0
  113. package/dist/types/crypto/random-generation.d.ts +35 -0
  114. package/dist/types/crypto/sframe.d.ts +102 -0
  115. package/dist/types/crypto/signal-protocol.d.ts +26 -0
  116. package/dist/types/crypto/symmetric.d.ts +9 -0
  117. package/dist/types/crypto/types.d.ts +144 -0
  118. package/dist/types/crypto/utils.d.ts +22 -0
  119. package/dist/types/examples/auth-test.d.ts +8 -0
  120. package/dist/types/examples/crypto-identity-example.d.ts +5 -0
  121. package/dist/types/examples/crypto-working-test.d.ts +1 -0
  122. package/dist/types/examples/double-ratchet-test.d.ts +1 -0
  123. package/dist/types/examples/mls-advanced-example.d.ts +53 -0
  124. package/dist/types/examples/mls-sframe-test.d.ts +1 -0
  125. package/dist/types/examples/pgp-example.d.ts +75 -0
  126. package/dist/types/examples/quick-auth-test.d.ts +8 -0
  127. package/dist/types/examples/random-generation-test.d.ts +1 -0
  128. package/dist/types/examples/signal-protocol-test.d.ts +1 -0
  129. package/dist/types/examples/simple-api-test.d.ts +10 -0
  130. package/dist/types/examples/simple-crypto-identity-example.d.ts +6 -0
  131. package/dist/types/examples/timeout-test.d.ts +8 -0
  132. package/dist/types/examples/zkproof-credentials-example.d.ts +12 -0
  133. package/dist/types/examples/zkproof-example.d.ts +11 -0
  134. package/dist/types/gundb/api.d.ts +185 -0
  135. package/dist/types/gundb/crypto.d.ts +95 -0
  136. package/dist/types/gundb/db.d.ts +397 -0
  137. package/dist/types/gundb/derive.d.ts +21 -0
  138. package/dist/types/gundb/errors.d.ts +42 -0
  139. package/dist/types/gundb/index.d.ts +3 -0
  140. package/dist/types/gundb/rxjs.d.ts +110 -0
  141. package/dist/types/gundb/types.d.ts +255 -0
  142. package/dist/types/index.d.ts +16 -0
  143. package/dist/types/interfaces/common.d.ts +85 -0
  144. package/dist/types/interfaces/events.d.ts +131 -0
  145. package/dist/types/interfaces/plugin.d.ts +162 -0
  146. package/dist/types/interfaces/shogun.d.ts +208 -0
  147. package/dist/types/managers/AuthManager.d.ts +72 -0
  148. package/dist/types/managers/CoreInitializer.d.ts +40 -0
  149. package/dist/types/managers/CryptoIdentityManager.d.ts +102 -0
  150. package/dist/types/managers/EventManager.d.ts +49 -0
  151. package/dist/types/managers/PluginManager.d.ts +145 -0
  152. package/dist/types/plugins/base.d.ts +35 -0
  153. package/dist/types/plugins/index.d.ts +18 -0
  154. package/dist/types/plugins/nostr/index.d.ts +4 -0
  155. package/dist/types/plugins/nostr/nostrConnector.d.ts +119 -0
  156. package/dist/types/plugins/nostr/nostrConnectorPlugin.d.ts +163 -0
  157. package/dist/types/plugins/nostr/nostrSigner.d.ts +105 -0
  158. package/dist/types/plugins/nostr/types.d.ts +122 -0
  159. package/dist/types/plugins/smartwallet/index.d.ts +2 -0
  160. package/dist/types/plugins/smartwallet/smartWalletPlugin.d.ts +67 -0
  161. package/dist/types/plugins/smartwallet/types.d.ts +80 -0
  162. package/dist/types/plugins/web3/index.d.ts +4 -0
  163. package/dist/types/plugins/web3/types.d.ts +107 -0
  164. package/dist/types/plugins/web3/web3Connector.d.ts +129 -0
  165. package/dist/types/plugins/web3/web3ConnectorPlugin.d.ts +160 -0
  166. package/dist/types/plugins/web3/web3Signer.d.ts +114 -0
  167. package/dist/types/plugins/webauthn/index.d.ts +3 -0
  168. package/dist/types/plugins/webauthn/types.d.ts +183 -0
  169. package/dist/types/plugins/webauthn/webauthn.d.ts +129 -0
  170. package/dist/types/plugins/webauthn/webauthnPlugin.d.ts +179 -0
  171. package/dist/types/plugins/webauthn/webauthnSigner.d.ts +91 -0
  172. package/dist/types/plugins/zkproof/index.d.ts +48 -0
  173. package/dist/types/plugins/zkproof/types.d.ts +123 -0
  174. package/dist/types/plugins/zkproof/zkCredentials.d.ts +112 -0
  175. package/dist/types/plugins/zkproof/zkProofConnector.d.ts +46 -0
  176. package/dist/types/plugins/zkproof/zkProofPlugin.d.ts +76 -0
  177. package/dist/types/storage/storage.d.ts +51 -0
  178. package/dist/types/utils/errorHandler.d.ts +119 -0
  179. package/dist/types/utils/eventEmitter.d.ts +39 -0
  180. package/dist/types/utils/seedPhrase.d.ts +50 -0
  181. package/dist/types/utils/validation.d.ts +27 -0
  182. package/dist/utils/errorHandler.js +246 -0
  183. package/dist/utils/eventEmitter.js +79 -0
  184. package/dist/utils/seedPhrase.js +97 -0
  185. package/dist/utils/validation.js +81 -0
  186. package/package.json +10 -57
@@ -0,0 +1,253 @@
1
+ "use strict";
2
+ /**
3
+ * Authentication Test Script
4
+ *
5
+ * Tests signup and login functionality with username and password
6
+ * Includes timeout handling and error recovery testing
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.authTest = authTest;
10
+ const api_1 = require("../gundb/api");
11
+ async function authTest() {
12
+ console.log("๐Ÿ” ShogunCore Authentication Test\n");
13
+ // === INITIALIZATION ===
14
+ console.log("๐Ÿ“ฆ === INITIALIZATION ===\n");
15
+ // Use AutoQuickStart for easy setup with multiple peers for reliability
16
+ const quickStart = new api_1.AutoQuickStart({
17
+ peers: [
18
+ "https://peer.wallie.io/gun",
19
+ "https://gun-manhattan.herokuapp.com/gun",
20
+ "https://gun.defucc.me/gun",
21
+ ],
22
+ appScope: "auth-test",
23
+ // Enable debug logging
24
+ enableGunDebug: true,
25
+ enableConnectionMonitoring: true,
26
+ });
27
+ try {
28
+ await quickStart.init();
29
+ console.log("โœ“ ShogunCore initialized successfully");
30
+ }
31
+ catch (error) {
32
+ console.error("โŒ Failed to initialize ShogunCore:", error);
33
+ return;
34
+ }
35
+ const api = quickStart.api;
36
+ const db = api.database;
37
+ console.log("- Database instance:", db ? "Available" : "Not available");
38
+ console.log("- Current user:", db.getCurrentUser()?.alias || "None");
39
+ console.log("- Is logged in:", db.isLoggedIn());
40
+ console.log("");
41
+ // === TEST 1: BASIC SIGNUP AND LOGIN ===
42
+ console.log("๐Ÿงช === TEST 1: BASIC SIGNUP AND LOGIN ===\n");
43
+ const testUsername = `testuser_${Date.now()}`;
44
+ const testPassword = "testpass123!@#";
45
+ console.log(`Testing with username: ${testUsername}`);
46
+ console.log(`Password: ${testPassword}\n`);
47
+ // Test signup
48
+ console.log("๐Ÿ”„ Attempting signup...");
49
+ const signupStartTime = Date.now();
50
+ try {
51
+ const signupResult = await db.signUp(testUsername, testPassword);
52
+ const signupDuration = Date.now() - signupStartTime;
53
+ console.log(`โœ“ Signup completed in ${signupDuration}ms`);
54
+ console.log("Signup result:", {
55
+ success: signupResult.success,
56
+ userPub: signupResult.userPub
57
+ ? `${signupResult.userPub.substring(0, 20)}...`
58
+ : "None",
59
+ username: signupResult.username,
60
+ isNewUser: signupResult.isNewUser,
61
+ error: signupResult.error || "None",
62
+ });
63
+ if (!signupResult.success) {
64
+ console.error("โŒ Signup failed:", signupResult.error);
65
+ return;
66
+ }
67
+ }
68
+ catch (error) {
69
+ console.error("โŒ Signup threw exception:", error);
70
+ return;
71
+ }
72
+ console.log("");
73
+ // Test login
74
+ console.log("๐Ÿ”„ Attempting login...");
75
+ const loginStartTime = Date.now();
76
+ try {
77
+ const loginResult = await db.login(testUsername, testPassword);
78
+ const loginDuration = Date.now() - loginStartTime;
79
+ console.log(`โœ“ Login completed in ${loginDuration}ms`);
80
+ console.log("Login result:", {
81
+ success: loginResult.success,
82
+ userPub: loginResult.userPub
83
+ ? `${loginResult.userPub.substring(0, 20)}...`
84
+ : "None",
85
+ username: loginResult.username,
86
+ error: loginResult.error || "None",
87
+ });
88
+ if (!loginResult.success) {
89
+ console.error("โŒ Login failed:", loginResult.error);
90
+ return;
91
+ }
92
+ // Verify user state
93
+ console.log("\n๐Ÿ” Verifying user state...");
94
+ const currentUser = db.getCurrentUser();
95
+ const isLoggedIn = db.isLoggedIn();
96
+ console.log("Current user:", {
97
+ alias: currentUser?.alias || "None",
98
+ pub: currentUser?.pub ? `${currentUser.pub.substring(0, 20)}...` : "None",
99
+ epub: currentUser?.epub
100
+ ? `${currentUser.epub.substring(0, 20)}...`
101
+ : "None",
102
+ });
103
+ console.log("Is logged in:", isLoggedIn);
104
+ if (!isLoggedIn || !currentUser) {
105
+ console.error("โŒ User state verification failed");
106
+ return;
107
+ }
108
+ }
109
+ catch (error) {
110
+ console.error("โŒ Login threw exception:", error);
111
+ return;
112
+ }
113
+ console.log("");
114
+ // === TEST 2: DATA OPERATIONS WHILE LOGGED IN ===
115
+ console.log("๐Ÿ’พ === TEST 2: DATA OPERATIONS WHILE LOGGED IN ===\n");
116
+ try {
117
+ // Test encrypted data storage
118
+ const testData = {
119
+ message: "Hello from auth test!",
120
+ timestamp: Date.now(),
121
+ secret: "This is encrypted data",
122
+ };
123
+ console.log("๐Ÿ”„ Storing encrypted data...");
124
+ await db.put("test/encrypted-data", testData);
125
+ console.log("โœ“ Data stored successfully");
126
+ console.log("๐Ÿ”„ Retrieving encrypted data...");
127
+ const retrievedData = await db.getData("test/encrypted-data");
128
+ console.log("โœ“ Data retrieved:", retrievedData);
129
+ // Test profile operations
130
+ console.log("\n๐Ÿ”„ Testing profile operations...");
131
+ await api.updateProfile({
132
+ name: "Auth Test User",
133
+ email: "authtest@example.com",
134
+ bio: "Testing authentication flow",
135
+ });
136
+ console.log("โœ“ Profile updated");
137
+ const profile = await api.getProfile();
138
+ console.log("โœ“ Profile retrieved:", profile);
139
+ }
140
+ catch (error) {
141
+ console.error("โŒ Data operations failed:", error);
142
+ }
143
+ console.log("");
144
+ // === TEST 3: LOGOUT ===
145
+ console.log("๐Ÿšช === TEST 3: LOGOUT ===\n");
146
+ try {
147
+ console.log("๐Ÿ”„ Attempting logout...");
148
+ db.logout();
149
+ // Wait a moment for logout to complete
150
+ await new Promise((resolve) => setTimeout(resolve, 500));
151
+ const isStillLoggedIn = db.isLoggedIn();
152
+ const currentUserAfterLogout = db.getCurrentUser();
153
+ console.log("โœ“ Logout completed");
154
+ console.log("Is logged in after logout:", isStillLoggedIn);
155
+ console.log("Current user after logout:", currentUserAfterLogout?.alias || "None");
156
+ if (isStillLoggedIn) {
157
+ console.warn("โš ๏ธ User still appears to be logged in after logout");
158
+ }
159
+ else {
160
+ console.log("โœ“ Logout successful - user is no longer logged in");
161
+ }
162
+ }
163
+ catch (error) {
164
+ console.error("โŒ Logout failed:", error);
165
+ }
166
+ console.log("");
167
+ // === TEST 4: RE-LOGIN ===
168
+ console.log("๐Ÿ”„ === TEST 4: RE-LOGIN ===\n");
169
+ try {
170
+ console.log("๐Ÿ”„ Attempting re-login with same credentials...");
171
+ const reloginResult = await db.login(testUsername, testPassword);
172
+ console.log("Re-login result:", {
173
+ success: reloginResult.success,
174
+ userPub: reloginResult.userPub
175
+ ? `${reloginResult.userPub.substring(0, 20)}...`
176
+ : "None",
177
+ username: reloginResult.username,
178
+ error: reloginResult.error || "None",
179
+ });
180
+ if (reloginResult.success) {
181
+ console.log("โœ“ Re-login successful");
182
+ console.log("Current user:", db.getCurrentUser()?.alias || "None");
183
+ }
184
+ else {
185
+ console.error("โŒ Re-login failed:", reloginResult.error);
186
+ }
187
+ }
188
+ catch (error) {
189
+ console.error("โŒ Re-login threw exception:", error);
190
+ }
191
+ console.log("");
192
+ // === TEST 5: ERROR HANDLING ===
193
+ console.log("โš ๏ธ === TEST 5: ERROR HANDLING ===\n");
194
+ // Test invalid credentials
195
+ console.log("๐Ÿ”„ Testing invalid password...");
196
+ try {
197
+ const invalidLoginResult = await db.login(testUsername, "wrongpassword");
198
+ console.log("Invalid login result:", {
199
+ success: invalidLoginResult.success,
200
+ error: invalidLoginResult.error || "None",
201
+ });
202
+ if (!invalidLoginResult.success) {
203
+ console.log("โœ“ Invalid password correctly rejected");
204
+ }
205
+ else {
206
+ console.warn("โš ๏ธ Invalid password was accepted (unexpected)");
207
+ }
208
+ }
209
+ catch (error) {
210
+ console.log("โœ“ Invalid password threw exception (expected):", error instanceof Error ? error.message : String(error));
211
+ }
212
+ // Test non-existent user
213
+ console.log("\n๐Ÿ”„ Testing non-existent user...");
214
+ try {
215
+ const nonexistentLoginResult = await db.login("nonexistentuser123", "password");
216
+ console.log("Non-existent user login result:", {
217
+ success: nonexistentLoginResult.success,
218
+ error: nonexistentLoginResult.error || "None",
219
+ });
220
+ if (!nonexistentLoginResult.success) {
221
+ console.log("โœ“ Non-existent user correctly rejected");
222
+ }
223
+ else {
224
+ console.warn("โš ๏ธ Non-existent user was accepted (unexpected)");
225
+ }
226
+ }
227
+ catch (error) {
228
+ console.log("โœ“ Non-existent user threw exception (expected):", error instanceof Error ? error.message : String(error));
229
+ }
230
+ console.log("");
231
+ // === FINAL LOGOUT ===
232
+ console.log("๐Ÿšช === FINAL CLEANUP ===\n");
233
+ try {
234
+ db.logout();
235
+ console.log("โœ“ Final logout completed");
236
+ }
237
+ catch (error) {
238
+ console.error("โŒ Final logout failed:", error);
239
+ }
240
+ console.log("\nโœ… Authentication test completed!");
241
+ console.log("\n๐Ÿ“Š Test Summary:");
242
+ console.log("- โœ“ Signup with username/password");
243
+ console.log("- โœ“ Login with username/password");
244
+ console.log("- โœ“ Data operations while logged in");
245
+ console.log("- โœ“ Logout functionality");
246
+ console.log("- โœ“ Re-login capability");
247
+ console.log("- โœ“ Error handling for invalid credentials");
248
+ console.log("- โœ“ Error handling for non-existent users");
249
+ }
250
+ // Esegui il test
251
+ if (require.main === module) {
252
+ authTest().catch(console.error);
253
+ }
@@ -0,0 +1,151 @@
1
+ "use strict";
2
+ /**
3
+ * Esempio di utilizzo del CryptoIdentityManager
4
+ * Mostra come le identitร  crypto vengono generate automaticamente dopo l'autenticazione SEA
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.runCryptoIdentityExamples = runCryptoIdentityExamples;
8
+ const index_1 = require("../index");
9
+ // Esempio di utilizzo
10
+ async function cryptoIdentityExample() {
11
+ console.log("๐Ÿš€ Avvio esempio CryptoIdentityManager");
12
+ // 1. Inizializza ShogunCore
13
+ const core = new index_1.ShogunCore({
14
+ gunOptions: {
15
+ peers: ["https://peer.wallie.io/gun"],
16
+ radisk: true,
17
+ localStorage: false,
18
+ },
19
+ });
20
+ console.log("โœ… ShogunCore inizializzato");
21
+ // 2. Registra un nuovo utente (genera automaticamente SEA pair)
22
+ const username = `mario_rossi_${Date.now()}`;
23
+ const signupResult = await core.signUp(username, "password123");
24
+ if (!signupResult.success) {
25
+ console.error("โŒ Registrazione fallita:", signupResult.error);
26
+ return;
27
+ }
28
+ console.log("โœ… Utente registrato:", {
29
+ username: signupResult.username,
30
+ userPub: signupResult.userPub,
31
+ hasSEAPair: !!signupResult.sea,
32
+ });
33
+ // 3. Le identitร  crypto sono state generate automaticamente durante la registrazione
34
+ // Possiamo accedervi tramite il CryptoIdentityManager
35
+ const cryptoManager = new index_1.CryptoIdentityManager(core);
36
+ // 4. Recupera le identitร  crypto dell'utente corrente
37
+ const identitiesResult = await cryptoManager.getCurrentUserIdentities();
38
+ if (identitiesResult.success && identitiesResult.identities) {
39
+ const identities = identitiesResult.identities;
40
+ console.log("๐Ÿ” Identitร  crypto generate automaticamente:");
41
+ console.log("- RSA Key Pair:", !!identities.rsa);
42
+ console.log("- AES Symmetric Key:", !!identities.aes);
43
+ console.log("- Signal Protocol Identity:", !!identities.signal);
44
+ console.log("- PGP Key Pair:", !!identities.pgp);
45
+ console.log("- MLS Group:", !!identities.mls);
46
+ console.log("- SFrame Key:", !!identities.sframe);
47
+ console.log("- Created At:", new Date(identities.createdAt).toISOString());
48
+ console.log("- Version:", identities.version);
49
+ }
50
+ else {
51
+ console.error("โŒ Errore nel recupero delle identitร :", identitiesResult.error);
52
+ }
53
+ // 5. Esempio di login con utente esistente
54
+ console.log("\n๐Ÿ”„ Test login con utente esistente...");
55
+ const loginResult = await core.login(username, "password123");
56
+ if (loginResult.success) {
57
+ console.log("โœ… Login riuscito");
58
+ // Le identitร  crypto esistenti vengono recuperate automaticamente
59
+ const existingIdentities = await cryptoManager.getCurrentUserIdentities();
60
+ if (existingIdentities.success) {
61
+ console.log("โœ… Identitร  crypto esistenti recuperate");
62
+ }
63
+ }
64
+ else {
65
+ console.error("โŒ Login fallito:", loginResult.error);
66
+ }
67
+ // 6. Esempio di rigenerazione forzata delle identitร 
68
+ console.log("\n๐Ÿ”„ Test rigenerazione identitร ...");
69
+ if (signupResult.sea) {
70
+ const regenerateResult = await cryptoManager.setupCryptoIdentities(username, signupResult.sea, true);
71
+ if (regenerateResult.success) {
72
+ console.log("โœ… Identitร  crypto rigenerate:", regenerateResult.savedKeys);
73
+ }
74
+ else {
75
+ console.error("โŒ Rigenerazione fallita:", regenerateResult.error);
76
+ }
77
+ }
78
+ console.log("\n๐ŸŽ‰ Esempio completato!");
79
+ }
80
+ // Esempio di utilizzo con diversi metodi di autenticazione
81
+ async function multiAuthExample() {
82
+ console.log("\n๐Ÿ” Esempio con diversi metodi di autenticazione");
83
+ const core = new index_1.ShogunCore({
84
+ gunOptions: {
85
+ peers: ["https://peer.wallie.io/gun"],
86
+ radisk: true,
87
+ localStorage: false,
88
+ },
89
+ });
90
+ // Esempio con WebAuthn (se disponibile)
91
+ try {
92
+ const webauthnPlugin = core.getAuthenticationMethod("webauthn");
93
+ if (webauthnPlugin) {
94
+ console.log("๐Ÿ” Test WebAuthn signup...");
95
+ const webauthnResult = await webauthnPlugin.signUp("alice_webauthn");
96
+ if (webauthnResult.success) {
97
+ console.log("โœ… WebAuthn signup riuscito");
98
+ // Le identitร  crypto vengono generate automaticamente anche con WebAuthn
99
+ const cryptoManager = new index_1.CryptoIdentityManager(core);
100
+ const identities = await cryptoManager.getCurrentUserIdentities();
101
+ if (identities.success) {
102
+ console.log("โœ… Identitร  crypto generate con WebAuthn");
103
+ }
104
+ }
105
+ }
106
+ }
107
+ catch (error) {
108
+ console.log("โ„น๏ธ WebAuthn non disponibile:", error);
109
+ }
110
+ // Esempio con ZK-Proof (se disponibile)
111
+ try {
112
+ const zkPlugin = core.getAuthenticationMethod("zkproof");
113
+ if (zkPlugin) {
114
+ console.log("๐Ÿ” Test ZK-Proof signup...");
115
+ // ZK-Proof non richiede password, usa il metodo corretto
116
+ const zkResult = await zkPlugin.signUp();
117
+ if (zkResult.success) {
118
+ console.log("โœ… ZK-Proof signup riuscito");
119
+ // Le identitร  crypto vengono generate automaticamente anche con ZK-Proof
120
+ const cryptoManager = new index_1.CryptoIdentityManager(core);
121
+ const identities = await cryptoManager.getCurrentUserIdentities();
122
+ if (identities.success) {
123
+ console.log("โœ… Identitร  crypto generate con ZK-Proof");
124
+ }
125
+ }
126
+ else {
127
+ console.log("โ„น๏ธ ZK-Proof signup non riuscito:", zkResult.error);
128
+ }
129
+ }
130
+ else {
131
+ console.log("โ„น๏ธ ZK-Proof plugin non disponibile");
132
+ }
133
+ }
134
+ catch (error) {
135
+ console.log("โ„น๏ธ ZK-Proof test saltato:", error instanceof Error ? error.message : String(error));
136
+ }
137
+ }
138
+ // Funzione principale per eseguire gli esempi
139
+ async function runCryptoIdentityExamples() {
140
+ try {
141
+ await cryptoIdentityExample();
142
+ await multiAuthExample();
143
+ }
144
+ catch (error) {
145
+ console.error("โŒ Errore durante l'esecuzione degli esempi:", error);
146
+ }
147
+ }
148
+ // Esegui gli esempi se il file viene eseguito direttamente
149
+ if (typeof window === "undefined" && require.main === module) {
150
+ runCryptoIdentityExamples();
151
+ }
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ // Simple crypto test that actually works
4
+ const crypto_1 = require("../crypto");
5
+ // Simple test function
6
+ async function testCrypto() {
7
+ try {
8
+ console.log("๐Ÿ” Starting crypto test...");
9
+ // Test 1: Random string generation
10
+ console.log("\n1. Testing random string generation...");
11
+ const randomStr = (0, crypto_1.randomString)("test-");
12
+ console.log("โœ… Random string:", randomStr);
13
+ // Test 2: Hashing
14
+ console.log("\n2. Testing hashing...");
15
+ const hash = await (0, crypto_1.sha256Hash)({
16
+ message: "Hello Crypto!",
17
+ timestamp: Date.now(),
18
+ });
19
+ console.log("โœ… SHA-256 hash:", hash.substring(0, 20) + "...");
20
+ // Test 3: RSA key generation and encryption
21
+ console.log("\n3. Testing RSA encryption...");
22
+ const keyPair = await (0, crypto_1.generateKeyPair)();
23
+ console.log("โœ… RSA key pair generated");
24
+ const publicKey = await (0, crypto_1.deserializePublicKey)(keyPair.publicKey);
25
+ const privateKey = await (0, crypto_1.deserializePrivateKey)(keyPair.privateKey);
26
+ const encryptedMessage = await (0, crypto_1.encrypt)("Secret RSA message", publicKey);
27
+ const decryptedMessage = await (0, crypto_1.decrypt)(encryptedMessage, privateKey);
28
+ console.log("โœ… RSA encrypted:", encryptedMessage.substring(0, 30) + "...");
29
+ console.log("โœ… RSA decrypted:", decryptedMessage);
30
+ // Test 4: AES symmetric encryption
31
+ console.log("\n4. Testing AES symmetric encryption...");
32
+ const symmetricKey = await (0, crypto_1.generateSymmetricKey)();
33
+ const deserializedKey = await (0, crypto_1.deserializeSymmetricKey)(symmetricKey);
34
+ const encryptedData = await (0, crypto_1.encryptWithSymmetricKey)("Secret AES message", deserializedKey);
35
+ const decryptedData = await (0, crypto_1.decryptWithSymmetricKey)(encryptedData, deserializedKey);
36
+ console.log("โœ… AES encrypted:", encryptedData.ciphertext.substring(0, 30) + "...");
37
+ console.log("โœ… AES decrypted:", decryptedData);
38
+ // Test 5: File encryption
39
+ console.log("\n5. Testing file encryption...");
40
+ const fileContent = "This is a secret file content for testing!";
41
+ const password = "testPassword123";
42
+ const encryptedFile = await (0, crypto_1.encryptTextFile)(fileContent, password, "test.txt");
43
+ const decryptedFile = await (0, crypto_1.decryptTextFile)(encryptedFile, password);
44
+ console.log("โœ… File encrypted:", encryptedFile.fileName);
45
+ console.log("โœ… File decrypted:", decryptedFile.textContent);
46
+ console.log("\n๐ŸŽ‰ All crypto tests completed successfully!");
47
+ return {
48
+ success: true,
49
+ tests: {
50
+ randomString: randomStr,
51
+ hash: hash.substring(0, 20) + "...",
52
+ rsaEncryption: {
53
+ encrypted: encryptedMessage.substring(0, 30) + "...",
54
+ decrypted: decryptedMessage,
55
+ },
56
+ aesEncryption: {
57
+ encrypted: encryptedData.ciphertext.substring(0, 30) + "...",
58
+ decrypted: decryptedData,
59
+ },
60
+ fileEncryption: {
61
+ fileName: encryptedFile.fileName,
62
+ decrypted: decryptedFile.textContent,
63
+ },
64
+ },
65
+ };
66
+ }
67
+ catch (error) {
68
+ console.error("โŒ Crypto test failed:", error);
69
+ return {
70
+ success: false,
71
+ error: error instanceof Error ? error.message : "Unknown error",
72
+ };
73
+ }
74
+ }
75
+ // Run the test
76
+ testCrypto()
77
+ .then((result) => {
78
+ console.log("\n๐Ÿ“Š Final Result:");
79
+ console.log(JSON.stringify(result, null, 2));
80
+ })
81
+ .catch((error) => {
82
+ console.error("๐Ÿ’ฅ Test execution failed:", error);
83
+ });
@@ -0,0 +1,155 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ // Double Ratchet Protocol test
4
+ const crypto_1 = require("../crypto");
5
+ // Test Double Ratchet Protocol
6
+ async function testDoubleRatchet() {
7
+ try {
8
+ console.log("๐Ÿ”„ Starting Double Ratchet Protocol test...");
9
+ const result = await (0, crypto_1.demonstrateDoubleRatchet)();
10
+ if (result.success) {
11
+ console.log("โœ… Double Ratchet Protocol test successful!");
12
+ console.log("Messages exchanged:", result.messagesExchanged);
13
+ console.log("Forward secrecy:", result.demonstration.forwardSecrecy);
14
+ console.log("Out-of-order handling:", result.demonstration.outOfOrderHandling);
15
+ console.log("DH ratcheting:", result.demonstration.dhRatcheting);
16
+ console.log("Chain key updating:", result.demonstration.chainKeyUpdating);
17
+ // Test individual functions
18
+ console.log("\n๐Ÿงช Testing individual Double Ratchet functions...");
19
+ // Test state serialization
20
+ const aliceStateSerialized = result.aliceState;
21
+ console.log("โœ… Alice state serialized:", aliceStateSerialized.substring(0, 100) + "...");
22
+ // Test conversation
23
+ console.log("โœ… Conversation messages:", result.conversation.length);
24
+ result.conversation.forEach((msg, index) => {
25
+ console.log(` Message ${index + 1}: ${msg.from} โ†’ Message #${msg.envelope.messageNumber}`);
26
+ });
27
+ }
28
+ else {
29
+ console.log("โŒ Double Ratchet Protocol test failed");
30
+ }
31
+ return result;
32
+ }
33
+ catch (error) {
34
+ console.error("โŒ Double Ratchet Protocol test error:", error);
35
+ return {
36
+ success: false,
37
+ error: error instanceof Error ? error.message : "Unknown error",
38
+ };
39
+ }
40
+ }
41
+ // Test interactive Double Ratchet messaging
42
+ async function testInteractiveDoubleRatchet() {
43
+ try {
44
+ console.log("๐Ÿ”„ Starting Interactive Double Ratchet test...");
45
+ // Initialize X3DH for shared secret
46
+ const { initializeSignalUser, getSignalPublicKeyBundle, performSignalX3DHKeyExchange, } = await import("../crypto/signal-protocol.js");
47
+ const alice = await initializeSignalUser("Alice");
48
+ const bob = await initializeSignalUser("Bob");
49
+ const bobBundle = await getSignalPublicKeyBundle(bob);
50
+ const exchangeResult = await performSignalX3DHKeyExchange(alice, bobBundle);
51
+ console.log("โœ… X3DH key exchange completed");
52
+ // Initialize Double Ratchet states
53
+ const aliceState = await (0, crypto_1.initializeDoubleRatchet)(exchangeResult.masterSecret, true);
54
+ const bobState = await (0, crypto_1.initializeDoubleRatchet)(exchangeResult.masterSecret, false);
55
+ console.log("โœ… Double Ratchet states initialized");
56
+ // Test message exchange
57
+ const messages = [
58
+ "Hello Bob! This is our first Double Ratchet message! ๐Ÿ”’",
59
+ "Hi Alice! The Double Ratchet is working perfectly! ๐ŸŽ‰",
60
+ "This is message 3 with forward secrecy! ๐Ÿ›ก๏ธ",
61
+ "And this is message 4 - each with a unique key! ๐Ÿ”‘",
62
+ ];
63
+ const conversation = [];
64
+ for (let i = 0; i < messages.length; i++) {
65
+ const sender = i % 2 === 0 ? "Alice" : "Bob";
66
+ const senderState = sender === "Alice" ? aliceState : bobState;
67
+ const receiverState = sender === "Alice" ? bobState : aliceState;
68
+ console.log(`\n๐Ÿ“ค ${sender} sending message ${i + 1}: "${messages[i]}"`);
69
+ // Encrypt
70
+ const envelope = await (0, crypto_1.doubleRatchetEncrypt)(senderState, messages[i]);
71
+ console.log(`โœ… ${sender} encrypted message #${envelope.messageNumber}`);
72
+ // Decrypt
73
+ const decrypted = await (0, crypto_1.doubleRatchetDecrypt)(receiverState, envelope);
74
+ console.log(`โœ… ${sender === "Alice" ? "Bob" : "Alice"} decrypted: "${decrypted}"`);
75
+ // Verify
76
+ if (decrypted === messages[i]) {
77
+ console.log(`โœ… Message ${i + 1} verified successfully`);
78
+ conversation.push({
79
+ sender,
80
+ receiver: sender === "Alice" ? "Bob" : "Alice",
81
+ original: messages[i],
82
+ decrypted,
83
+ messageNumber: envelope.messageNumber,
84
+ verified: true,
85
+ });
86
+ }
87
+ else {
88
+ console.log(`โŒ Message ${i + 1} verification failed`);
89
+ conversation.push({
90
+ sender,
91
+ receiver: sender === "Alice" ? "Bob" : "Alice",
92
+ original: messages[i],
93
+ decrypted,
94
+ messageNumber: envelope.messageNumber,
95
+ verified: false,
96
+ });
97
+ }
98
+ }
99
+ // Test state serialization
100
+ const aliceSerialized = await (0, crypto_1.serializeDoubleRatchetState)(aliceState);
101
+ const bobSerialized = await (0, crypto_1.serializeDoubleRatchetState)(bobState);
102
+ console.log("\n๐Ÿ“Š Interactive Double Ratchet test results:");
103
+ console.log(`Messages exchanged: ${conversation.length}`);
104
+ console.log(`All messages verified: ${conversation.every((msg) => msg.verified)}`);
105
+ console.log(`Alice state serialized: ${aliceSerialized.length} characters`);
106
+ console.log(`Bob state serialized: ${bobSerialized.length} characters`);
107
+ return {
108
+ success: true,
109
+ messagesExchanged: conversation.length,
110
+ allVerified: conversation.every((msg) => msg.verified),
111
+ conversation,
112
+ aliceState: aliceSerialized,
113
+ bobState: bobSerialized,
114
+ };
115
+ }
116
+ catch (error) {
117
+ console.error("โŒ Interactive Double Ratchet test error:", error);
118
+ return {
119
+ success: false,
120
+ error: error instanceof Error ? error.message : "Unknown error",
121
+ };
122
+ }
123
+ }
124
+ // Run the tests
125
+ async function runAllTests() {
126
+ console.log("๐Ÿš€ Running all Double Ratchet tests...\n");
127
+ // Test 1: Basic demonstration
128
+ console.log("=== Test 1: Basic Double Ratchet Demonstration ===");
129
+ const basicResult = await testDoubleRatchet();
130
+ console.log("\n=== Test 2: Interactive Double Ratchet Messaging ===");
131
+ const interactiveResult = await testInteractiveDoubleRatchet();
132
+ console.log("\n๐Ÿ“Š Final Results:");
133
+ console.log("Basic test:", basicResult.success ? "โœ… PASSED" : "โŒ FAILED");
134
+ console.log("Interactive test:", interactiveResult.success ? "โœ… PASSED" : "โŒ FAILED");
135
+ if (basicResult.success && interactiveResult.success) {
136
+ console.log("\n๐ŸŽ‰ All Double Ratchet tests completed successfully!");
137
+ }
138
+ else {
139
+ console.log("\nโŒ Some tests failed");
140
+ }
141
+ return {
142
+ basic: basicResult,
143
+ interactive: interactiveResult,
144
+ allPassed: basicResult.success && interactiveResult.success,
145
+ };
146
+ }
147
+ // Run the tests
148
+ runAllTests()
149
+ .then((result) => {
150
+ console.log("\n๐Ÿ“Š Final Test Summary:");
151
+ console.log(JSON.stringify(result, null, 2));
152
+ })
153
+ .catch((error) => {
154
+ console.error("๐Ÿ’ฅ Test execution failed:", error);
155
+ });