@bounded-sh/client 0.0.1 → 0.0.3
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/dist/auth/providers/phantom-wallet-provider.d.ts +1 -1
- package/dist/auth/providers/privy-expo-provider.d.ts +1 -1
- package/dist/auth/providers/solana-mobile-wallet-provider.d.ts +3 -3
- package/dist/{index-VGx-869x.js → index-2UpSvA7V.js} +2586 -124
- package/dist/index-2UpSvA7V.js.map +1 -0
- package/dist/{index-C1VOdmRN.js → index-C2JpxGAC.js} +1202 -450
- package/dist/index-C2JpxGAC.js.map +1 -0
- package/dist/{index-CT2j1oic.esm.js → index-C2yvle9S.esm.js} +1202 -450
- package/dist/index-C2yvle9S.esm.js.map +1 -0
- package/dist/{index-sKqrgk0t.js → index-CYVVTWs4.js} +1202 -450
- package/dist/index-CYVVTWs4.js.map +1 -0
- package/dist/{index-BHTfW8CV.esm.js → index-DJg-Dduo.esm.js} +1202 -450
- package/dist/index-DJg-Dduo.esm.js.map +1 -0
- package/dist/{index-o5Hv9pfS.esm.js → index-DyfiK3_X.esm.js} +2585 -124
- package/dist/index-DyfiK3_X.esm.js.map +1 -0
- package/dist/{index.browser-BJZ7fYwv.js → index.browser-BTJZmhY1.js} +766 -773
- package/dist/index.browser-BTJZmhY1.js.map +1 -0
- package/dist/{index.browser-DaNhOhkQ.esm.js → index.browser-C_TToxuO.esm.js} +230 -242
- package/dist/index.browser-C_TToxuO.esm.js.map +1 -0
- package/dist/{index.browser-utVKQsEC.js → index.browser-DcHalmEf.js} +230 -242
- package/dist/index.browser-DcHalmEf.js.map +1 -0
- package/dist/{index.browser-DhAcjdpV.esm.js → index.browser-pymH6o1X.esm.js} +766 -773
- package/dist/index.browser-pymH6o1X.esm.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/{index.native-JPUkdHJj.esm.js → index.native-BTjBgNiE.esm.js} +2556 -95
- package/dist/index.native-BTjBgNiE.esm.js.map +1 -0
- package/dist/{index.native-B5IBOdv_.js → index.native-BvsmNFXn.js} +2557 -95
- package/dist/index.native-BvsmNFXn.js.map +1 -0
- package/dist/index.native.d.ts +1 -1
- package/dist/index.native.esm.js +1 -1
- package/dist/index.native.js +2 -1
- package/dist/index.native.js.map +1 -1
- package/dist/{phantom-wallet-provider-CDLyxrih.js → phantom-wallet-provider-BXMvoOrI.js} +10 -10
- package/dist/phantom-wallet-provider-BXMvoOrI.js.map +1 -0
- package/dist/{phantom-wallet-provider-DMlaSrAl.esm.js → phantom-wallet-provider-CTossIFB.esm.js} +10 -10
- package/dist/phantom-wallet-provider-CTossIFB.esm.js.map +1 -0
- package/dist/{privy-wallet-provider-nR52lXzI.esm.js → privy-wallet-provider-1qE_f-DF.esm.js} +6 -6
- package/dist/privy-wallet-provider-1qE_f-DF.esm.js.map +1 -0
- package/dist/{privy-wallet-provider-DiHHTDbZ.js → privy-wallet-provider-D64DJ3u4.js} +6 -6
- package/dist/privy-wallet-provider-D64DJ3u4.js.map +1 -0
- package/dist/{solana-mobile-wallet-provider-B4CeMMQd.esm.js → solana-mobile-wallet-provider-9M8U6AA7.esm.js} +22 -22
- package/dist/solana-mobile-wallet-provider-9M8U6AA7.esm.js.map +1 -0
- package/dist/{solana-mobile-wallet-provider-BYMfFjZb.js → solana-mobile-wallet-provider-C1wQ1DRK.js} +22 -22
- package/dist/solana-mobile-wallet-provider-C1wQ1DRK.js.map +1 -0
- package/package.json +2 -2
- package/dist/index-BHTfW8CV.esm.js.map +0 -1
- package/dist/index-C1VOdmRN.js.map +0 -1
- package/dist/index-CT2j1oic.esm.js.map +0 -1
- package/dist/index-VGx-869x.js.map +0 -1
- package/dist/index-o5Hv9pfS.esm.js.map +0 -1
- package/dist/index-sKqrgk0t.js.map +0 -1
- package/dist/index.browser-BJZ7fYwv.js.map +0 -1
- package/dist/index.browser-DaNhOhkQ.esm.js.map +0 -1
- package/dist/index.browser-DhAcjdpV.esm.js.map +0 -1
- package/dist/index.browser-utVKQsEC.js.map +0 -1
- package/dist/index.native-B5IBOdv_.js.map +0 -1
- package/dist/index.native-JPUkdHJj.esm.js.map +0 -1
- package/dist/phantom-wallet-provider-CDLyxrih.js.map +0 -1
- package/dist/phantom-wallet-provider-DMlaSrAl.esm.js.map +0 -1
- package/dist/privy-wallet-provider-DiHHTDbZ.js.map +0 -1
- package/dist/privy-wallet-provider-nR52lXzI.esm.js.map +0 -1
- package/dist/solana-mobile-wallet-provider-B4CeMMQd.esm.js.map +0 -1
- package/dist/solana-mobile-wallet-provider-BYMfFjZb.js.map +0 -1
|
@@ -18,7 +18,7 @@ function commonjsRequire(path) {
|
|
|
18
18
|
throw new Error('Could not dynamically require "' + path + '". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.');
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
var naclFast = {exports: {}};
|
|
21
|
+
var naclFast$1 = {exports: {}};
|
|
22
22
|
|
|
23
23
|
var _nodeResolve_empty = {};
|
|
24
24
|
|
|
@@ -29,11 +29,11 @@ var _nodeResolve_empty$1 = /*#__PURE__*/Object.freeze({
|
|
|
29
29
|
|
|
30
30
|
var require$$0 = /*@__PURE__*/getDefaultExportFromNamespaceIfNotNamed(_nodeResolve_empty$1);
|
|
31
31
|
|
|
32
|
-
var hasRequiredNaclFast;
|
|
32
|
+
var hasRequiredNaclFast$1;
|
|
33
33
|
|
|
34
|
-
function requireNaclFast () {
|
|
35
|
-
if (hasRequiredNaclFast) return naclFast.exports;
|
|
36
|
-
hasRequiredNaclFast = 1;
|
|
34
|
+
function requireNaclFast$1 () {
|
|
35
|
+
if (hasRequiredNaclFast$1) return naclFast$1.exports;
|
|
36
|
+
hasRequiredNaclFast$1 = 1;
|
|
37
37
|
(function (module) {
|
|
38
38
|
(function(nacl) {
|
|
39
39
|
|
|
@@ -2425,12 +2425,12 @@ function requireNaclFast () {
|
|
|
2425
2425
|
})();
|
|
2426
2426
|
|
|
2427
2427
|
})(module.exports ? module.exports : (self.nacl = self.nacl || {}));
|
|
2428
|
-
} (naclFast));
|
|
2429
|
-
return naclFast.exports;
|
|
2428
|
+
} (naclFast$1));
|
|
2429
|
+
return naclFast$1.exports;
|
|
2430
2430
|
}
|
|
2431
2431
|
|
|
2432
|
-
var naclFastExports = requireNaclFast();
|
|
2433
|
-
var nacl = /*@__PURE__*/getDefaultExportFromCjs$1(naclFastExports);
|
|
2432
|
+
var naclFastExports$1 = requireNaclFast$1();
|
|
2433
|
+
var nacl$1 = /*@__PURE__*/getDefaultExportFromCjs$1(naclFastExports$1);
|
|
2434
2434
|
|
|
2435
2435
|
var bn$1 = {exports: {}};
|
|
2436
2436
|
|
|
@@ -6450,7 +6450,7 @@ function getWebhookKeysUrl() {
|
|
|
6450
6450
|
/**
|
|
6451
6451
|
* True when init() configured a Bounded network (the Cloudflare-native stack).
|
|
6452
6452
|
* Synchronous + non-blocking. Used to route reads/writes that behave differently
|
|
6453
|
-
* on Bounded vs the legacy
|
|
6453
|
+
* on Bounded vs the legacy backend (e.g. `count`/`aggregate`, which on
|
|
6454
6454
|
* Bounded must use the deterministic server aggregation, not the legacy AI query).
|
|
6455
6455
|
*/
|
|
6456
6456
|
function isBoundedNetwork() {
|
|
@@ -9305,7 +9305,7 @@ class WebSessionManager {
|
|
|
9305
9305
|
// the RIGHT /session/refresh. Email overrides with humanAuthApiUrl; all
|
|
9306
9306
|
// wallet/guest/signature flows default to authApiUrl (the bounded-auth issuer).
|
|
9307
9307
|
const sessionIssuer = (issuer || config.authApiUrl || "").replace(/\/$/, "");
|
|
9308
|
-
localStorage.setItem(this.
|
|
9308
|
+
localStorage.setItem(this.BOUNDED_SESSION_STORAGE_KEY, JSON.stringify(Object.assign({ address,
|
|
9309
9309
|
accessToken,
|
|
9310
9310
|
idToken,
|
|
9311
9311
|
refreshToken, appId: currentAppId }, (sessionIssuer ? { issuer: sessionIssuer } : {}))));
|
|
@@ -9316,7 +9316,7 @@ class WebSessionManager {
|
|
|
9316
9316
|
static async getSession() {
|
|
9317
9317
|
if (typeof window === "undefined")
|
|
9318
9318
|
return null;
|
|
9319
|
-
const session = localStorage.getItem(this.
|
|
9319
|
+
const session = localStorage.getItem(this.BOUNDED_SESSION_STORAGE_KEY);
|
|
9320
9320
|
if (!session)
|
|
9321
9321
|
return null;
|
|
9322
9322
|
const sessionObj = JSON.parse(session);
|
|
@@ -9340,7 +9340,7 @@ class WebSessionManager {
|
|
|
9340
9340
|
// Persist the ROTATED refresh token — the old one is now
|
|
9341
9341
|
// single-use spent; reusing it would revoke the family.
|
|
9342
9342
|
refreshed.refreshToken);
|
|
9343
|
-
const newSession = localStorage.getItem(this.
|
|
9343
|
+
const newSession = localStorage.getItem(this.BOUNDED_SESSION_STORAGE_KEY);
|
|
9344
9344
|
if (!newSession)
|
|
9345
9345
|
return null;
|
|
9346
9346
|
const newObj = JSON.parse(newSession);
|
|
@@ -9364,14 +9364,14 @@ class WebSessionManager {
|
|
|
9364
9364
|
static clearSession() {
|
|
9365
9365
|
if (typeof window === "undefined")
|
|
9366
9366
|
return;
|
|
9367
|
-
localStorage.removeItem(this.
|
|
9367
|
+
localStorage.removeItem(this.BOUNDED_SESSION_STORAGE_KEY);
|
|
9368
9368
|
}
|
|
9369
9369
|
/* ------------------------------------------------------------------ */
|
|
9370
9370
|
/* IS-AUTH */
|
|
9371
9371
|
/* ------------------------------------------------------------------ */
|
|
9372
9372
|
static isAuthenticated() {
|
|
9373
9373
|
// NOTE: this remains synchronous to stay backward compatible
|
|
9374
|
-
return !!localStorage.getItem(this.
|
|
9374
|
+
return !!localStorage.getItem(this.BOUNDED_SESSION_STORAGE_KEY);
|
|
9375
9375
|
}
|
|
9376
9376
|
/* ------------------------------------------------------------------ */
|
|
9377
9377
|
/* TOKEN HELPERS */
|
|
@@ -9379,13 +9379,13 @@ class WebSessionManager {
|
|
|
9379
9379
|
static getIdToken() {
|
|
9380
9380
|
if (typeof window === "undefined")
|
|
9381
9381
|
return null;
|
|
9382
|
-
const session = localStorage.getItem(this.
|
|
9382
|
+
const session = localStorage.getItem(this.BOUNDED_SESSION_STORAGE_KEY);
|
|
9383
9383
|
return session ? JSON.parse(session).idToken : null;
|
|
9384
9384
|
}
|
|
9385
9385
|
static getRefreshToken() {
|
|
9386
9386
|
if (typeof window === "undefined")
|
|
9387
9387
|
return null;
|
|
9388
|
-
const session = localStorage.getItem(this.
|
|
9388
|
+
const session = localStorage.getItem(this.BOUNDED_SESSION_STORAGE_KEY);
|
|
9389
9389
|
return session ? JSON.parse(session).refreshToken : null;
|
|
9390
9390
|
}
|
|
9391
9391
|
/** The issuer base that minted this session (for routing silent refresh). */
|
|
@@ -9393,7 +9393,7 @@ class WebSessionManager {
|
|
|
9393
9393
|
var _a;
|
|
9394
9394
|
if (typeof window === "undefined")
|
|
9395
9395
|
return null;
|
|
9396
|
-
const session = localStorage.getItem(this.
|
|
9396
|
+
const session = localStorage.getItem(this.BOUNDED_SESSION_STORAGE_KEY);
|
|
9397
9397
|
return session ? ((_a = JSON.parse(session).issuer) !== null && _a !== void 0 ? _a : null) : null;
|
|
9398
9398
|
}
|
|
9399
9399
|
/* ------------------------------------------------------------------ */
|
|
@@ -9403,7 +9403,7 @@ class WebSessionManager {
|
|
|
9403
9403
|
var _a;
|
|
9404
9404
|
if (typeof window === "undefined")
|
|
9405
9405
|
return;
|
|
9406
|
-
const session = localStorage.getItem(this.
|
|
9406
|
+
const session = localStorage.getItem(this.BOUNDED_SESSION_STORAGE_KEY);
|
|
9407
9407
|
if (!session)
|
|
9408
9408
|
return;
|
|
9409
9409
|
const sessionObj = JSON.parse(session);
|
|
@@ -9420,10 +9420,10 @@ class WebSessionManager {
|
|
|
9420
9420
|
sessionObj.refreshToken = refreshToken;
|
|
9421
9421
|
}
|
|
9422
9422
|
(_a = sessionObj.appId) !== null && _a !== void 0 ? _a : (sessionObj.appId = config.appId);
|
|
9423
|
-
localStorage.setItem(this.
|
|
9423
|
+
localStorage.setItem(this.BOUNDED_SESSION_STORAGE_KEY, JSON.stringify(sessionObj));
|
|
9424
9424
|
}
|
|
9425
9425
|
}
|
|
9426
|
-
WebSessionManager.
|
|
9426
|
+
WebSessionManager.BOUNDED_SESSION_STORAGE_KEY = "bounded_session_storage";
|
|
9427
9427
|
|
|
9428
9428
|
let _config = null;
|
|
9429
9429
|
class ReactNativeSessionManager {
|
|
@@ -9516,7 +9516,7 @@ class ReactNativeSessionManager {
|
|
|
9516
9516
|
// Issuer base for silent refresh (email overrides w/ humanAuthApiUrl; wallet/
|
|
9517
9517
|
// guest default to authApiUrl). See WebSessionManager for the rationale.
|
|
9518
9518
|
const sessionIssuer = (issuer || config.authApiUrl || "").replace(/\/$/, "");
|
|
9519
|
-
this.getStorage().setItem(this.
|
|
9519
|
+
this.getStorage().setItem(this.BOUNDED_SESSION_STORAGE_KEY, JSON.stringify(Object.assign({ address,
|
|
9520
9520
|
accessToken,
|
|
9521
9521
|
idToken,
|
|
9522
9522
|
refreshToken, appId: currentAppId }, (sessionIssuer ? { issuer: sessionIssuer } : {}))));
|
|
@@ -9525,7 +9525,7 @@ class ReactNativeSessionManager {
|
|
|
9525
9525
|
/* GET */
|
|
9526
9526
|
/* ------------------------------------------------------------------ */
|
|
9527
9527
|
static async getSession() {
|
|
9528
|
-
const session = this.getStorage().getItem(this.
|
|
9528
|
+
const session = this.getStorage().getItem(this.BOUNDED_SESSION_STORAGE_KEY);
|
|
9529
9529
|
if (!session)
|
|
9530
9530
|
return null;
|
|
9531
9531
|
const sessionObj = JSON.parse(session);
|
|
@@ -9546,7 +9546,7 @@ class ReactNativeSessionManager {
|
|
|
9546
9546
|
const refreshed = await refreshSession(refreshToken, sessionObj.issuer);
|
|
9547
9547
|
if ((refreshed === null || refreshed === void 0 ? void 0 : refreshed.idToken) && (refreshed === null || refreshed === void 0 ? void 0 : refreshed.accessToken)) {
|
|
9548
9548
|
await this.updateIdTokenAndAccessToken(refreshed.idToken, refreshed.accessToken, refreshed.refreshToken);
|
|
9549
|
-
const newSession = this.getStorage().getItem(this.
|
|
9549
|
+
const newSession = this.getStorage().getItem(this.BOUNDED_SESSION_STORAGE_KEY);
|
|
9550
9550
|
if (!newSession)
|
|
9551
9551
|
return null;
|
|
9552
9552
|
const newObj = JSON.parse(newSession);
|
|
@@ -9568,20 +9568,20 @@ class ReactNativeSessionManager {
|
|
|
9568
9568
|
/* CLEAR */
|
|
9569
9569
|
/* ------------------------------------------------------------------ */
|
|
9570
9570
|
static clearSession() {
|
|
9571
|
-
this.getStorage().removeItem(this.
|
|
9571
|
+
this.getStorage().removeItem(this.BOUNDED_SESSION_STORAGE_KEY);
|
|
9572
9572
|
}
|
|
9573
9573
|
/* ------------------------------------------------------------------ */
|
|
9574
9574
|
/* IS-AUTH */
|
|
9575
9575
|
/* ------------------------------------------------------------------ */
|
|
9576
9576
|
static isAuthenticated() {
|
|
9577
|
-
return !!this.getStorage().getItem(this.
|
|
9577
|
+
return !!this.getStorage().getItem(this.BOUNDED_SESSION_STORAGE_KEY);
|
|
9578
9578
|
}
|
|
9579
9579
|
/* ------------------------------------------------------------------ */
|
|
9580
9580
|
/* TOKEN HELPERS */
|
|
9581
9581
|
/* ------------------------------------------------------------------ */
|
|
9582
9582
|
static getIdToken() {
|
|
9583
9583
|
try {
|
|
9584
|
-
const session = this.getStorage().getItem(this.
|
|
9584
|
+
const session = this.getStorage().getItem(this.BOUNDED_SESSION_STORAGE_KEY);
|
|
9585
9585
|
return session ? JSON.parse(session).idToken : null;
|
|
9586
9586
|
}
|
|
9587
9587
|
catch (_a) {
|
|
@@ -9592,7 +9592,7 @@ class ReactNativeSessionManager {
|
|
|
9592
9592
|
static getIssuer() {
|
|
9593
9593
|
var _a;
|
|
9594
9594
|
try {
|
|
9595
|
-
const session = this.getStorage().getItem(this.
|
|
9595
|
+
const session = this.getStorage().getItem(this.BOUNDED_SESSION_STORAGE_KEY);
|
|
9596
9596
|
return session ? ((_a = JSON.parse(session).issuer) !== null && _a !== void 0 ? _a : null) : null;
|
|
9597
9597
|
}
|
|
9598
9598
|
catch (_b) {
|
|
@@ -9601,7 +9601,7 @@ class ReactNativeSessionManager {
|
|
|
9601
9601
|
}
|
|
9602
9602
|
static getRefreshToken() {
|
|
9603
9603
|
try {
|
|
9604
|
-
const session = this.getStorage().getItem(this.
|
|
9604
|
+
const session = this.getStorage().getItem(this.BOUNDED_SESSION_STORAGE_KEY);
|
|
9605
9605
|
return session ? JSON.parse(session).refreshToken : null;
|
|
9606
9606
|
}
|
|
9607
9607
|
catch (_a) {
|
|
@@ -9613,7 +9613,7 @@ class ReactNativeSessionManager {
|
|
|
9613
9613
|
/* ------------------------------------------------------------------ */
|
|
9614
9614
|
static async updateIdTokenAndAccessToken(idToken, accessToken, refreshToken) {
|
|
9615
9615
|
var _a;
|
|
9616
|
-
const session = this.getStorage().getItem(this.
|
|
9616
|
+
const session = this.getStorage().getItem(this.BOUNDED_SESSION_STORAGE_KEY);
|
|
9617
9617
|
if (!session)
|
|
9618
9618
|
return;
|
|
9619
9619
|
const sessionObj = JSON.parse(session);
|
|
@@ -9629,10 +9629,10 @@ class ReactNativeSessionManager {
|
|
|
9629
9629
|
sessionObj.refreshToken = refreshToken;
|
|
9630
9630
|
}
|
|
9631
9631
|
(_a = sessionObj.appId) !== null && _a !== void 0 ? _a : (sessionObj.appId = config.appId);
|
|
9632
|
-
this.getStorage().setItem(this.
|
|
9632
|
+
this.getStorage().setItem(this.BOUNDED_SESSION_STORAGE_KEY, JSON.stringify(sessionObj));
|
|
9633
9633
|
}
|
|
9634
9634
|
}
|
|
9635
|
-
ReactNativeSessionManager.
|
|
9635
|
+
ReactNativeSessionManager.BOUNDED_SESSION_STORAGE_KEY = "bounded_session_storage";
|
|
9636
9636
|
|
|
9637
9637
|
/**
|
|
9638
9638
|
* Return the active CLIENT session manager for the current runtime.
|
|
@@ -10153,9 +10153,9 @@ async function buildSetDocumentsTransaction(connection, idl, anchorProvider, pay
|
|
|
10153
10153
|
/* ENV helpers */
|
|
10154
10154
|
/* ------------------------------------------------------------------ */
|
|
10155
10155
|
// Canonical `BOUNDED_PRIVATE_KEY` (matches the CLI); legacy
|
|
10156
|
-
// `
|
|
10156
|
+
// `BOUNDED_SOLANA_KEYPAIR` still honored. Only consulted when no explicit
|
|
10157
10157
|
// keypair was provided (createWalletClient passes one).
|
|
10158
|
-
const ENV_KEYPAIRS = ["BOUNDED_PRIVATE_KEY", "
|
|
10158
|
+
const ENV_KEYPAIRS = ["BOUNDED_PRIVATE_KEY", "BOUNDED_SOLANA_KEYPAIR"];
|
|
10159
10159
|
function loadKeypairFromEnv() {
|
|
10160
10160
|
let secret;
|
|
10161
10161
|
let found;
|
|
@@ -10213,7 +10213,7 @@ class ServerSessionManager {
|
|
|
10213
10213
|
const nonce = await genAuthNonce();
|
|
10214
10214
|
const message = await genSolanaMessage(address, nonce);
|
|
10215
10215
|
/* sign the message */
|
|
10216
|
-
const sigBytes = nacl.sign.detached(new TextEncoder().encode(message), kp.secretKey);
|
|
10216
|
+
const sigBytes = nacl$1.sign.detached(new TextEncoder().encode(message), kp.secretKey);
|
|
10217
10217
|
const signature = bufferExports$1.Buffer.from(sigBytes).toString("base64");
|
|
10218
10218
|
/* call auth API */
|
|
10219
10219
|
const { accessToken, idToken, refreshToken, } = await createSessionWithSignature(address, message, signature);
|
|
@@ -10278,7 +10278,7 @@ var serverSessionManager = /*#__PURE__*/Object.freeze({
|
|
|
10278
10278
|
});
|
|
10279
10279
|
|
|
10280
10280
|
/**
|
|
10281
|
-
* Safe base64 helpers for
|
|
10281
|
+
* Safe base64 helpers for bounded-core.
|
|
10282
10282
|
*
|
|
10283
10283
|
* Uses the global atob/btoa when available (browser, RN with polyfill),
|
|
10284
10284
|
* falls back to the 'buffer' package (Node.js / SSR / RN without polyfill).
|
|
@@ -10458,7 +10458,7 @@ axiosRetry(apiClient, {
|
|
|
10458
10458
|
shouldResetTimeout: true,
|
|
10459
10459
|
onRetry: (retryCount, error, requestConfig) => {
|
|
10460
10460
|
var _a;
|
|
10461
|
-
console.warn(`[
|
|
10461
|
+
console.warn(`[bounded-sdk] retry ${retryCount} for ${(_a = requestConfig.method) === null || _a === void 0 ? void 0 : _a.toUpperCase()} ${requestConfig.url} — ${error.code || error.message}`);
|
|
10462
10462
|
},
|
|
10463
10463
|
});
|
|
10464
10464
|
const refreshInFlight = new Map();
|
|
@@ -10517,8 +10517,8 @@ async function makeApiRequest(method, urlPath, data, _overrides) {
|
|
|
10517
10517
|
: await createAuthHeader(config.isServer);
|
|
10518
10518
|
const headers = Object.assign({ "Content-Type": "application/json", "X-Public-App-Id": config.appId, "X-App-Id": config.appId }, authHeader);
|
|
10519
10519
|
if (typeof window !== "undefined" &&
|
|
10520
|
-
window.
|
|
10521
|
-
const customAppId = window.
|
|
10520
|
+
window.CUSTOM_BOUNDED_APP_ID_HEADER) {
|
|
10521
|
+
const customAppId = window.CUSTOM_BOUNDED_APP_ID_HEADER;
|
|
10522
10522
|
if (customAppId) {
|
|
10523
10523
|
headers["X-App-Id"] = customAppId;
|
|
10524
10524
|
}
|
|
@@ -10777,7 +10777,7 @@ function parseAggregateValue(result) {
|
|
|
10777
10777
|
* Count items in a collection path. Returns a numeric result.
|
|
10778
10778
|
*
|
|
10779
10779
|
* This uses the AI query engine with a count-specific prompt prefix,
|
|
10780
|
-
* so
|
|
10780
|
+
* so Bounded will generate a $count aggregation pipeline and return
|
|
10781
10781
|
* just the count rather than full documents.
|
|
10782
10782
|
*
|
|
10783
10783
|
* IMPORTANT: This only works for collections where the read policy is "true".
|
|
@@ -11284,6 +11284,13 @@ async function runExpressionMany(many) {
|
|
|
11284
11284
|
throw error;
|
|
11285
11285
|
}
|
|
11286
11286
|
}
|
|
11287
|
+
/**
|
|
11288
|
+
* Write a document at `path`. Sugar for a one-element {@link setMany}.
|
|
11289
|
+
*
|
|
11290
|
+
* **Delete:** pass `null` as the document to delete it — `set(path, null)` is
|
|
11291
|
+
* the delete (there is no separate `del`/`remove`). It is routed through the
|
|
11292
|
+
* collection's policy `delete` rule and broadcasts a delete to subscribers.
|
|
11293
|
+
*/
|
|
11287
11294
|
async function set(path, document, options) {
|
|
11288
11295
|
const result = await setMany([{ path, document }], options);
|
|
11289
11296
|
// Clear cache entries that might be affected by this update
|
|
@@ -11302,10 +11309,10 @@ async function setMany(many, options) {
|
|
|
11302
11309
|
let documents = [];
|
|
11303
11310
|
const pathsToInvalidate = new Set();
|
|
11304
11311
|
for (const { path, document: documentWithReservedFields } of many) {
|
|
11305
|
-
// for setting, we should remove any pieces of the document that start with '
|
|
11312
|
+
// for setting, we should remove any pieces of the document that start with '_' as they are internal and shouldn't be updated. The API would block it if it is one of the reserved ones
|
|
11306
11313
|
let document = documentWithReservedFields;
|
|
11307
11314
|
if (documentWithReservedFields) {
|
|
11308
|
-
document = Object.fromEntries(Object.entries(documentWithReservedFields).filter(([key]) => !key.startsWith('
|
|
11315
|
+
document = Object.fromEntries(Object.entries(documentWithReservedFields).filter(([key]) => !key.startsWith('_')));
|
|
11309
11316
|
}
|
|
11310
11317
|
const normalizedPath = path.startsWith("/") ? path.slice(1) : path;
|
|
11311
11318
|
pathsToInvalidate.add(normalizedPath);
|
|
@@ -11429,7 +11436,7 @@ async function setMany(many, options) {
|
|
|
11429
11436
|
var _a, _b, _c, _d, _e;
|
|
11430
11437
|
// NOTE (backwards-compat revert): a program-allowlist on server-supplied
|
|
11431
11438
|
// `preInstructions` was tried here for the audit-8 SOL-drain concern, but it
|
|
11432
|
-
// broke legitimate onchain DeFi flows —
|
|
11439
|
+
// broke legitimate onchain DeFi flows — bounded routes Phoenix, Jupiter/swap,
|
|
11433
11440
|
// SPL-Token and ATA-creation instructions through standard-path preInstructions
|
|
11434
11441
|
// (see sol-helper remaining-accounts-extractor). A correct audit-8 fix must be
|
|
11435
11442
|
// DeFi-aware (e.g. block ONLY a raw System Transfer/TransferWithSeed, never a
|
|
@@ -11513,10 +11520,10 @@ async function setMany(many, options) {
|
|
|
11513
11520
|
const transaction = VersionedTransaction.deserialize(txBytes);
|
|
11514
11521
|
// Validate the transaction before signing: ensure only allowed programs
|
|
11515
11522
|
// and no unauthorized System program instructions (e.g., SOL transfers)
|
|
11516
|
-
const
|
|
11523
|
+
const BOUNDED_PROGRAM = 'poof4b5pk1L9tmThvBmaABjcyjfhFGbMbQP5BXk2QZp';
|
|
11517
11524
|
const COMPUTE_BUDGET = 'ComputeBudget111111111111111111111111111111';
|
|
11518
11525
|
const SYSTEM_PROGRAM = '11111111111111111111111111111111';
|
|
11519
|
-
const ALLOWED_PROGRAMS = new Set([
|
|
11526
|
+
const ALLOWED_PROGRAMS = new Set([BOUNDED_PROGRAM, COMPUTE_BUDGET, SYSTEM_PROGRAM]);
|
|
11520
11527
|
// System program instruction discriminators (first 4 bytes, little-endian u32)
|
|
11521
11528
|
const SYSTEM_TRANSFER = 2; // Transfer instruction index
|
|
11522
11529
|
const SYSTEM_TRANSFER_WITH_SEED = 11;
|
|
@@ -12110,8 +12117,8 @@ async function getOrCreateConnection(appId, isServer, routePath, authTokenProvid
|
|
|
12110
12117
|
if (appId && appId !== config.appId) {
|
|
12111
12118
|
wsUrl.searchParams.append('appId', appId);
|
|
12112
12119
|
}
|
|
12113
|
-
else if (typeof window !== 'undefined' && window.
|
|
12114
|
-
wsUrl.searchParams.append('appId', window.
|
|
12120
|
+
else if (typeof window !== 'undefined' && window.CUSTOM_BOUNDED_APP_ID_HEADER) {
|
|
12121
|
+
wsUrl.searchParams.append('appId', window.CUSTOM_BOUNDED_APP_ID_HEADER);
|
|
12115
12122
|
}
|
|
12116
12123
|
else {
|
|
12117
12124
|
wsUrl.searchParams.append('appId', config.appId);
|
|
@@ -12971,7 +12978,7 @@ function serverTimestamp() {
|
|
|
12971
12978
|
// ---------------------------------------------------------------------------
|
|
12972
12979
|
// IDB helpers (lazy-loaded, non-blocking)
|
|
12973
12980
|
// ---------------------------------------------------------------------------
|
|
12974
|
-
const IDB_NAME$1 = '
|
|
12981
|
+
const IDB_NAME$1 = 'bounded-realtime';
|
|
12975
12982
|
const IDB_STORE$1 = 'subscriptions';
|
|
12976
12983
|
const IDB_VERSION = 1;
|
|
12977
12984
|
let idbPromise = null;
|
|
@@ -13409,10 +13416,10 @@ class RealtimeStore {
|
|
|
13409
13416
|
const normalizedPath = path.startsWith('/') ? path.slice(1) : path;
|
|
13410
13417
|
const collectionPath = this.getCollectionPath(normalizedPath);
|
|
13411
13418
|
const optimisticDoc = Object.assign(Object.assign({ _id: normalizedPath, pathId: normalizedPath }, resolvedDoc), {
|
|
13412
|
-
// System timestamp field name
|
|
13413
|
-
//
|
|
13419
|
+
// System timestamp field name: the Bounded worker stamps the neutral
|
|
13420
|
+
// `_updatedAt`; the underscore-prefixed `_updated_at` metadata mirror.
|
|
13414
13421
|
// Match it so the optimistic doc lines up with the server's confirmation.
|
|
13415
|
-
[isBoundedNetwork() ? '_updatedAt' : '
|
|
13422
|
+
[isBoundedNetwork() ? '_updatedAt' : '_updated_at']: Date.now() });
|
|
13416
13423
|
const sub = this.findSubscriptionByPath(collectionPath);
|
|
13417
13424
|
let prevDoc = null;
|
|
13418
13425
|
if (sub) {
|
|
@@ -13865,6 +13872,7 @@ const functions = { invoke };
|
|
|
13865
13872
|
// collection. This file is the consumer surface around that runtime:
|
|
13866
13873
|
//
|
|
13867
13874
|
// bounded.live.intent(roomPath, intent) -> POST {realtime}/live/intent
|
|
13875
|
+
// bounded.live.status(roomPath) -> GET {realtime}/live/status
|
|
13868
13876
|
//
|
|
13869
13877
|
// It mirrors `functions.invoke` exactly: it attaches the caller's session token
|
|
13870
13878
|
// AUTOMATICALLY (the same token the SDK uses for data reads/writes), and throws
|
|
@@ -13877,18 +13885,14 @@ const functions = { invoke };
|
|
|
13877
13885
|
// Addressing: clients address rooms BY PATH (the `path` field in the body). The
|
|
13878
13886
|
// worker derives the roomId from `body.path` and sets X-Room-Id internally;
|
|
13879
13887
|
// clients NEVER set X-Room-Id. The caller's address is taken server-side from
|
|
13880
|
-
// the Authorization header (auth.userAddress) — it is NOT sent in the
|
|
13888
|
+
// the Authorization header (auth.userId/userAddress) — it is NOT sent in the
|
|
13889
|
+
// body.
|
|
13881
13890
|
//
|
|
13882
13891
|
// Subscribing to your view: a per-player view doc lives at
|
|
13883
|
-
// `<roomPath>/view/<
|
|
13884
|
-
// `rooms/$roomId/view/$
|
|
13885
|
-
//
|
|
13886
|
-
//
|
|
13887
|
-
// `subscribeView()` below is thin sugar over that (path construction + address
|
|
13888
|
-
// defaulting); it adds zero new transport.
|
|
13889
|
-
//
|
|
13890
|
-
// Status polling (GET /live/status?path=<sessionCollection>/<roomId>) is out of
|
|
13891
|
-
// scope for this piece — see follow-up.
|
|
13892
|
+
// `<roomPath>/view/<myUserId>` (the policy declares
|
|
13893
|
+
// `rooms/$roomId/view/$userId` ephemeral with `read: $userId == @user.id`).
|
|
13894
|
+
// Wallet-address keyed view paths remain supported through opts.address for
|
|
13895
|
+
// older policies, but new live rooms should key views by @user.id.
|
|
13892
13896
|
// ---------------------------------------------------------------------------
|
|
13893
13897
|
class LiveIntentError extends Error {
|
|
13894
13898
|
constructor(message, statusCode, details) {
|
|
@@ -13969,7 +13973,7 @@ async function intent(roomPath, intent, opts = {}) {
|
|
|
13969
13973
|
res = await fetch(`${base}/live/intent`, {
|
|
13970
13974
|
method: 'POST',
|
|
13971
13975
|
headers,
|
|
13972
|
-
body: JSON.stringify({ path:
|
|
13976
|
+
body: JSON.stringify({ path: normalizedRoomPath, intent }),
|
|
13973
13977
|
signal: controller.signal,
|
|
13974
13978
|
});
|
|
13975
13979
|
}
|
|
@@ -13997,43 +14001,95 @@ async function intent(roomPath, intent, opts = {}) {
|
|
|
13997
14001
|
}
|
|
13998
14002
|
return (body !== null && body !== void 0 ? body : { ok: true });
|
|
13999
14003
|
}
|
|
14004
|
+
/**
|
|
14005
|
+
* Fetch the runtime status for a live room.
|
|
14006
|
+
*
|
|
14007
|
+
* const s = await bounded.live.status('rooms/abc');
|
|
14008
|
+
* console.log(s.running, s.stopReason, s.generation, s.etag);
|
|
14009
|
+
*
|
|
14010
|
+
* This is diagnostic/ops surface. It reports whether the room facet exists,
|
|
14011
|
+
* whether it is currently ticking, why it last stopped, which module etag is
|
|
14012
|
+
* loaded, and the current generation used after terminal restarts.
|
|
14013
|
+
*/
|
|
14014
|
+
async function status(roomPath, opts = {}) {
|
|
14015
|
+
var _a, _b, _c, _d, _e;
|
|
14016
|
+
if (!roomPath || typeof roomPath !== 'string') {
|
|
14017
|
+
throw new LiveIntentError('A room path is required');
|
|
14018
|
+
}
|
|
14019
|
+
const normalizedRoomPath = roomPath.replace(/\/$/, '');
|
|
14020
|
+
const config = await getConfig();
|
|
14021
|
+
const base = realtimeHttpBase(config.wsApiUrl);
|
|
14022
|
+
const headers = Object.assign({ 'X-App-Id': config.appId, 'X-Public-App-Id': config.appId }, ((_a = opts.headers) !== null && _a !== void 0 ? _a : {}));
|
|
14023
|
+
const controller = new AbortController();
|
|
14024
|
+
const timeoutMs = (_b = opts.timeoutMs) !== null && _b !== void 0 ? _b : 15000;
|
|
14025
|
+
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
14026
|
+
let res;
|
|
14027
|
+
try {
|
|
14028
|
+
res = await fetch(`${base}/live/status?path=${encodeURIComponent(normalizedRoomPath)}`, {
|
|
14029
|
+
method: 'GET',
|
|
14030
|
+
headers,
|
|
14031
|
+
signal: controller.signal,
|
|
14032
|
+
});
|
|
14033
|
+
}
|
|
14034
|
+
catch (err) {
|
|
14035
|
+
clearTimeout(timer);
|
|
14036
|
+
if ((err === null || err === void 0 ? void 0 : err.name) === 'AbortError') {
|
|
14037
|
+
throw new LiveIntentError(`Live status for "${normalizedRoomPath}" timed out after ${timeoutMs}ms`);
|
|
14038
|
+
}
|
|
14039
|
+
throw new LiveIntentError(`Failed to reach the realtime worker: ${(_c = err === null || err === void 0 ? void 0 : err.message) !== null && _c !== void 0 ? _c : String(err)}`);
|
|
14040
|
+
}
|
|
14041
|
+
clearTimeout(timer);
|
|
14042
|
+
let body = null;
|
|
14043
|
+
const text = await res.text();
|
|
14044
|
+
if (text) {
|
|
14045
|
+
try {
|
|
14046
|
+
body = JSON.parse(text);
|
|
14047
|
+
}
|
|
14048
|
+
catch (_f) {
|
|
14049
|
+
body = { raw: text };
|
|
14050
|
+
}
|
|
14051
|
+
}
|
|
14052
|
+
if (!res.ok) {
|
|
14053
|
+
const message = (_e = (_d = body === null || body === void 0 ? void 0 : body.error) !== null && _d !== void 0 ? _d : body === null || body === void 0 ? void 0 : body.message) !== null && _e !== void 0 ? _e : `Live status failed with HTTP ${res.status}`;
|
|
14054
|
+
throw new LiveIntentError(message, res.status, body);
|
|
14055
|
+
}
|
|
14056
|
+
return body;
|
|
14057
|
+
}
|
|
14000
14058
|
/**
|
|
14001
14059
|
* Subscribe to YOUR per-player view of a room. Thin sugar over:
|
|
14002
14060
|
*
|
|
14003
|
-
* subscribe('<roomPath>/view/<
|
|
14061
|
+
* subscribe('<roomPath>/view/<myUserId>', { onData, onError })
|
|
14004
14062
|
*
|
|
14005
|
-
* The
|
|
14006
|
-
*
|
|
14063
|
+
* The view id defaults to the logged-in user's @user.id (from the session token
|
|
14064
|
+
* claims); pass `opts.userId` to override. `opts.address` is kept as a legacy
|
|
14065
|
+
* alias for older wallet-address keyed policies. Returns the unsubscribe
|
|
14007
14066
|
* function (a Promise<() => Promise<void>>, same as `subscribe`).
|
|
14008
14067
|
*
|
|
14009
14068
|
* Note: this is a browser-first helper (the WS subscription manager is
|
|
14010
14069
|
* browser-oriented). Server consumers should use `live.intent`.
|
|
14011
14070
|
*/
|
|
14012
14071
|
async function subscribeView(roomPath, opts) {
|
|
14013
|
-
var _a;
|
|
14072
|
+
var _a, _b, _c;
|
|
14014
14073
|
if (!roomPath || typeof roomPath !== 'string') {
|
|
14015
14074
|
throw new LiveIntentError('A room path is required');
|
|
14016
14075
|
}
|
|
14017
14076
|
if (!opts || typeof opts.onData !== 'function') {
|
|
14018
14077
|
throw new LiveIntentError('subscribeView requires an onData callback');
|
|
14019
14078
|
}
|
|
14020
|
-
let
|
|
14021
|
-
if (!
|
|
14079
|
+
let viewUserId = (_a = opts.userId) !== null && _a !== void 0 ? _a : opts.address;
|
|
14080
|
+
if (!viewUserId) {
|
|
14022
14081
|
const config = await getConfig();
|
|
14023
14082
|
const info = await getUserInfo(config.isServer);
|
|
14024
|
-
// getUserInfo returns the RAW idToken payload
|
|
14025
|
-
//
|
|
14026
|
-
//
|
|
14027
|
-
|
|
14028
|
-
// identity it already authenticated. Resolve it from the actual claim so a
|
|
14029
|
-
// logged-in caller never needs to pass its own address.
|
|
14030
|
-
address = (_a = info === null || info === void 0 ? void 0 : info.address) !== null && _a !== void 0 ? _a : info === null || info === void 0 ? void 0 : info['custom:walletAddress'];
|
|
14083
|
+
// getUserInfo returns the RAW idToken payload. The universal live view key
|
|
14084
|
+
// is @user.id (`custom:userId`); wallet-address keyed views are still
|
|
14085
|
+
// resolved as a compatibility fallback for older policies.
|
|
14086
|
+
viewUserId = (_c = (_b = info === null || info === void 0 ? void 0 : info['custom:userId']) !== null && _b !== void 0 ? _b : info === null || info === void 0 ? void 0 : info['custom:walletAddress']) !== null && _c !== void 0 ? _c : info === null || info === void 0 ? void 0 : info.address;
|
|
14031
14087
|
}
|
|
14032
|
-
if (!
|
|
14033
|
-
throw new LiveIntentError('Could not resolve a player
|
|
14088
|
+
if (!viewUserId || typeof viewUserId !== 'string') {
|
|
14089
|
+
throw new LiveIntentError('Could not resolve a player view id for subscribeView; pass opts.userId or log in first');
|
|
14034
14090
|
}
|
|
14035
14091
|
const normalizedRoomPath = roomPath.replace(/\/$/, '');
|
|
14036
|
-
const viewPath = `${normalizedRoomPath}/view/${
|
|
14092
|
+
const viewPath = `${normalizedRoomPath}/view/${viewUserId}`;
|
|
14037
14093
|
// This is a LIVE/room subscription by construction (the caller hands us the
|
|
14038
14094
|
// room path), so we route its connection to the per-room DO where the live
|
|
14039
14095
|
// view fan-out runs. App code passes NO routing — the room path is the helper's
|
|
@@ -14044,7 +14100,7 @@ async function subscribeView(roomPath, opts) {
|
|
|
14044
14100
|
return subscribeV2(viewPath, { onData: opts.onData, onError: opts.onError }, normalizedRoomPath);
|
|
14045
14101
|
}
|
|
14046
14102
|
/** The `bounded.live` namespace surface. */
|
|
14047
|
-
const live = { intent, subscribeView };
|
|
14103
|
+
const live = { intent, status, subscribeView };
|
|
14048
14104
|
|
|
14049
14105
|
// ---------------------------------------------------------------------------
|
|
14050
14106
|
// live-effects.ts -- AUTHOR-facing types + helpers for writing a Bounded live
|
|
@@ -17688,13 +17744,2418 @@ var srcExports = requireSrc();
|
|
|
17688
17744
|
var basex = /*@__PURE__*/getDefaultExportFromCjs$1(srcExports);
|
|
17689
17745
|
|
|
17690
17746
|
var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
|
|
17691
|
-
var
|
|
17747
|
+
var bs582 = basex(ALPHABET);
|
|
17692
17748
|
|
|
17693
17749
|
var index = /*#__PURE__*/Object.freeze({
|
|
17694
17750
|
__proto__: null,
|
|
17695
|
-
default:
|
|
17751
|
+
default: bs582
|
|
17696
17752
|
});
|
|
17697
17753
|
|
|
17754
|
+
var naclFast = {exports: {}};
|
|
17755
|
+
|
|
17756
|
+
var hasRequiredNaclFast;
|
|
17757
|
+
|
|
17758
|
+
function requireNaclFast () {
|
|
17759
|
+
if (hasRequiredNaclFast) return naclFast.exports;
|
|
17760
|
+
hasRequiredNaclFast = 1;
|
|
17761
|
+
(function (module) {
|
|
17762
|
+
(function(nacl) {
|
|
17763
|
+
|
|
17764
|
+
// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri.
|
|
17765
|
+
// Public domain.
|
|
17766
|
+
//
|
|
17767
|
+
// Implementation derived from TweetNaCl version 20140427.
|
|
17768
|
+
// See for details: http://tweetnacl.cr.yp.to/
|
|
17769
|
+
|
|
17770
|
+
var gf = function(init) {
|
|
17771
|
+
var i, r = new Float64Array(16);
|
|
17772
|
+
if (init) for (i = 0; i < init.length; i++) r[i] = init[i];
|
|
17773
|
+
return r;
|
|
17774
|
+
};
|
|
17775
|
+
|
|
17776
|
+
// Pluggable, initialized in high-level API below.
|
|
17777
|
+
var randombytes = function(/* x, n */) { throw new Error('no PRNG'); };
|
|
17778
|
+
|
|
17779
|
+
var _0 = new Uint8Array(16);
|
|
17780
|
+
var _9 = new Uint8Array(32); _9[0] = 9;
|
|
17781
|
+
|
|
17782
|
+
var gf0 = gf(),
|
|
17783
|
+
gf1 = gf([1]),
|
|
17784
|
+
_121665 = gf([0xdb41, 1]),
|
|
17785
|
+
D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]),
|
|
17786
|
+
D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]),
|
|
17787
|
+
X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]),
|
|
17788
|
+
Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]),
|
|
17789
|
+
I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]);
|
|
17790
|
+
|
|
17791
|
+
function ts64(x, i, h, l) {
|
|
17792
|
+
x[i] = (h >> 24) & 0xff;
|
|
17793
|
+
x[i+1] = (h >> 16) & 0xff;
|
|
17794
|
+
x[i+2] = (h >> 8) & 0xff;
|
|
17795
|
+
x[i+3] = h & 0xff;
|
|
17796
|
+
x[i+4] = (l >> 24) & 0xff;
|
|
17797
|
+
x[i+5] = (l >> 16) & 0xff;
|
|
17798
|
+
x[i+6] = (l >> 8) & 0xff;
|
|
17799
|
+
x[i+7] = l & 0xff;
|
|
17800
|
+
}
|
|
17801
|
+
|
|
17802
|
+
function vn(x, xi, y, yi, n) {
|
|
17803
|
+
var i,d = 0;
|
|
17804
|
+
for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i];
|
|
17805
|
+
return (1 & ((d - 1) >>> 8)) - 1;
|
|
17806
|
+
}
|
|
17807
|
+
|
|
17808
|
+
function crypto_verify_16(x, xi, y, yi) {
|
|
17809
|
+
return vn(x,xi,y,yi,16);
|
|
17810
|
+
}
|
|
17811
|
+
|
|
17812
|
+
function crypto_verify_32(x, xi, y, yi) {
|
|
17813
|
+
return vn(x,xi,y,yi,32);
|
|
17814
|
+
}
|
|
17815
|
+
|
|
17816
|
+
function core_salsa20(o, p, k, c) {
|
|
17817
|
+
var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,
|
|
17818
|
+
j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,
|
|
17819
|
+
j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,
|
|
17820
|
+
j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,
|
|
17821
|
+
j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,
|
|
17822
|
+
j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,
|
|
17823
|
+
j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,
|
|
17824
|
+
j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,
|
|
17825
|
+
j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,
|
|
17826
|
+
j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,
|
|
17827
|
+
j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,
|
|
17828
|
+
j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,
|
|
17829
|
+
j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,
|
|
17830
|
+
j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,
|
|
17831
|
+
j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,
|
|
17832
|
+
j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;
|
|
17833
|
+
|
|
17834
|
+
var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,
|
|
17835
|
+
x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,
|
|
17836
|
+
x15 = j15, u;
|
|
17837
|
+
|
|
17838
|
+
for (var i = 0; i < 20; i += 2) {
|
|
17839
|
+
u = x0 + x12 | 0;
|
|
17840
|
+
x4 ^= u<<7 | u>>>(32-7);
|
|
17841
|
+
u = x4 + x0 | 0;
|
|
17842
|
+
x8 ^= u<<9 | u>>>(32-9);
|
|
17843
|
+
u = x8 + x4 | 0;
|
|
17844
|
+
x12 ^= u<<13 | u>>>(32-13);
|
|
17845
|
+
u = x12 + x8 | 0;
|
|
17846
|
+
x0 ^= u<<18 | u>>>(32-18);
|
|
17847
|
+
|
|
17848
|
+
u = x5 + x1 | 0;
|
|
17849
|
+
x9 ^= u<<7 | u>>>(32-7);
|
|
17850
|
+
u = x9 + x5 | 0;
|
|
17851
|
+
x13 ^= u<<9 | u>>>(32-9);
|
|
17852
|
+
u = x13 + x9 | 0;
|
|
17853
|
+
x1 ^= u<<13 | u>>>(32-13);
|
|
17854
|
+
u = x1 + x13 | 0;
|
|
17855
|
+
x5 ^= u<<18 | u>>>(32-18);
|
|
17856
|
+
|
|
17857
|
+
u = x10 + x6 | 0;
|
|
17858
|
+
x14 ^= u<<7 | u>>>(32-7);
|
|
17859
|
+
u = x14 + x10 | 0;
|
|
17860
|
+
x2 ^= u<<9 | u>>>(32-9);
|
|
17861
|
+
u = x2 + x14 | 0;
|
|
17862
|
+
x6 ^= u<<13 | u>>>(32-13);
|
|
17863
|
+
u = x6 + x2 | 0;
|
|
17864
|
+
x10 ^= u<<18 | u>>>(32-18);
|
|
17865
|
+
|
|
17866
|
+
u = x15 + x11 | 0;
|
|
17867
|
+
x3 ^= u<<7 | u>>>(32-7);
|
|
17868
|
+
u = x3 + x15 | 0;
|
|
17869
|
+
x7 ^= u<<9 | u>>>(32-9);
|
|
17870
|
+
u = x7 + x3 | 0;
|
|
17871
|
+
x11 ^= u<<13 | u>>>(32-13);
|
|
17872
|
+
u = x11 + x7 | 0;
|
|
17873
|
+
x15 ^= u<<18 | u>>>(32-18);
|
|
17874
|
+
|
|
17875
|
+
u = x0 + x3 | 0;
|
|
17876
|
+
x1 ^= u<<7 | u>>>(32-7);
|
|
17877
|
+
u = x1 + x0 | 0;
|
|
17878
|
+
x2 ^= u<<9 | u>>>(32-9);
|
|
17879
|
+
u = x2 + x1 | 0;
|
|
17880
|
+
x3 ^= u<<13 | u>>>(32-13);
|
|
17881
|
+
u = x3 + x2 | 0;
|
|
17882
|
+
x0 ^= u<<18 | u>>>(32-18);
|
|
17883
|
+
|
|
17884
|
+
u = x5 + x4 | 0;
|
|
17885
|
+
x6 ^= u<<7 | u>>>(32-7);
|
|
17886
|
+
u = x6 + x5 | 0;
|
|
17887
|
+
x7 ^= u<<9 | u>>>(32-9);
|
|
17888
|
+
u = x7 + x6 | 0;
|
|
17889
|
+
x4 ^= u<<13 | u>>>(32-13);
|
|
17890
|
+
u = x4 + x7 | 0;
|
|
17891
|
+
x5 ^= u<<18 | u>>>(32-18);
|
|
17892
|
+
|
|
17893
|
+
u = x10 + x9 | 0;
|
|
17894
|
+
x11 ^= u<<7 | u>>>(32-7);
|
|
17895
|
+
u = x11 + x10 | 0;
|
|
17896
|
+
x8 ^= u<<9 | u>>>(32-9);
|
|
17897
|
+
u = x8 + x11 | 0;
|
|
17898
|
+
x9 ^= u<<13 | u>>>(32-13);
|
|
17899
|
+
u = x9 + x8 | 0;
|
|
17900
|
+
x10 ^= u<<18 | u>>>(32-18);
|
|
17901
|
+
|
|
17902
|
+
u = x15 + x14 | 0;
|
|
17903
|
+
x12 ^= u<<7 | u>>>(32-7);
|
|
17904
|
+
u = x12 + x15 | 0;
|
|
17905
|
+
x13 ^= u<<9 | u>>>(32-9);
|
|
17906
|
+
u = x13 + x12 | 0;
|
|
17907
|
+
x14 ^= u<<13 | u>>>(32-13);
|
|
17908
|
+
u = x14 + x13 | 0;
|
|
17909
|
+
x15 ^= u<<18 | u>>>(32-18);
|
|
17910
|
+
}
|
|
17911
|
+
x0 = x0 + j0 | 0;
|
|
17912
|
+
x1 = x1 + j1 | 0;
|
|
17913
|
+
x2 = x2 + j2 | 0;
|
|
17914
|
+
x3 = x3 + j3 | 0;
|
|
17915
|
+
x4 = x4 + j4 | 0;
|
|
17916
|
+
x5 = x5 + j5 | 0;
|
|
17917
|
+
x6 = x6 + j6 | 0;
|
|
17918
|
+
x7 = x7 + j7 | 0;
|
|
17919
|
+
x8 = x8 + j8 | 0;
|
|
17920
|
+
x9 = x9 + j9 | 0;
|
|
17921
|
+
x10 = x10 + j10 | 0;
|
|
17922
|
+
x11 = x11 + j11 | 0;
|
|
17923
|
+
x12 = x12 + j12 | 0;
|
|
17924
|
+
x13 = x13 + j13 | 0;
|
|
17925
|
+
x14 = x14 + j14 | 0;
|
|
17926
|
+
x15 = x15 + j15 | 0;
|
|
17927
|
+
|
|
17928
|
+
o[ 0] = x0 >>> 0 & 0xff;
|
|
17929
|
+
o[ 1] = x0 >>> 8 & 0xff;
|
|
17930
|
+
o[ 2] = x0 >>> 16 & 0xff;
|
|
17931
|
+
o[ 3] = x0 >>> 24 & 0xff;
|
|
17932
|
+
|
|
17933
|
+
o[ 4] = x1 >>> 0 & 0xff;
|
|
17934
|
+
o[ 5] = x1 >>> 8 & 0xff;
|
|
17935
|
+
o[ 6] = x1 >>> 16 & 0xff;
|
|
17936
|
+
o[ 7] = x1 >>> 24 & 0xff;
|
|
17937
|
+
|
|
17938
|
+
o[ 8] = x2 >>> 0 & 0xff;
|
|
17939
|
+
o[ 9] = x2 >>> 8 & 0xff;
|
|
17940
|
+
o[10] = x2 >>> 16 & 0xff;
|
|
17941
|
+
o[11] = x2 >>> 24 & 0xff;
|
|
17942
|
+
|
|
17943
|
+
o[12] = x3 >>> 0 & 0xff;
|
|
17944
|
+
o[13] = x3 >>> 8 & 0xff;
|
|
17945
|
+
o[14] = x3 >>> 16 & 0xff;
|
|
17946
|
+
o[15] = x3 >>> 24 & 0xff;
|
|
17947
|
+
|
|
17948
|
+
o[16] = x4 >>> 0 & 0xff;
|
|
17949
|
+
o[17] = x4 >>> 8 & 0xff;
|
|
17950
|
+
o[18] = x4 >>> 16 & 0xff;
|
|
17951
|
+
o[19] = x4 >>> 24 & 0xff;
|
|
17952
|
+
|
|
17953
|
+
o[20] = x5 >>> 0 & 0xff;
|
|
17954
|
+
o[21] = x5 >>> 8 & 0xff;
|
|
17955
|
+
o[22] = x5 >>> 16 & 0xff;
|
|
17956
|
+
o[23] = x5 >>> 24 & 0xff;
|
|
17957
|
+
|
|
17958
|
+
o[24] = x6 >>> 0 & 0xff;
|
|
17959
|
+
o[25] = x6 >>> 8 & 0xff;
|
|
17960
|
+
o[26] = x6 >>> 16 & 0xff;
|
|
17961
|
+
o[27] = x6 >>> 24 & 0xff;
|
|
17962
|
+
|
|
17963
|
+
o[28] = x7 >>> 0 & 0xff;
|
|
17964
|
+
o[29] = x7 >>> 8 & 0xff;
|
|
17965
|
+
o[30] = x7 >>> 16 & 0xff;
|
|
17966
|
+
o[31] = x7 >>> 24 & 0xff;
|
|
17967
|
+
|
|
17968
|
+
o[32] = x8 >>> 0 & 0xff;
|
|
17969
|
+
o[33] = x8 >>> 8 & 0xff;
|
|
17970
|
+
o[34] = x8 >>> 16 & 0xff;
|
|
17971
|
+
o[35] = x8 >>> 24 & 0xff;
|
|
17972
|
+
|
|
17973
|
+
o[36] = x9 >>> 0 & 0xff;
|
|
17974
|
+
o[37] = x9 >>> 8 & 0xff;
|
|
17975
|
+
o[38] = x9 >>> 16 & 0xff;
|
|
17976
|
+
o[39] = x9 >>> 24 & 0xff;
|
|
17977
|
+
|
|
17978
|
+
o[40] = x10 >>> 0 & 0xff;
|
|
17979
|
+
o[41] = x10 >>> 8 & 0xff;
|
|
17980
|
+
o[42] = x10 >>> 16 & 0xff;
|
|
17981
|
+
o[43] = x10 >>> 24 & 0xff;
|
|
17982
|
+
|
|
17983
|
+
o[44] = x11 >>> 0 & 0xff;
|
|
17984
|
+
o[45] = x11 >>> 8 & 0xff;
|
|
17985
|
+
o[46] = x11 >>> 16 & 0xff;
|
|
17986
|
+
o[47] = x11 >>> 24 & 0xff;
|
|
17987
|
+
|
|
17988
|
+
o[48] = x12 >>> 0 & 0xff;
|
|
17989
|
+
o[49] = x12 >>> 8 & 0xff;
|
|
17990
|
+
o[50] = x12 >>> 16 & 0xff;
|
|
17991
|
+
o[51] = x12 >>> 24 & 0xff;
|
|
17992
|
+
|
|
17993
|
+
o[52] = x13 >>> 0 & 0xff;
|
|
17994
|
+
o[53] = x13 >>> 8 & 0xff;
|
|
17995
|
+
o[54] = x13 >>> 16 & 0xff;
|
|
17996
|
+
o[55] = x13 >>> 24 & 0xff;
|
|
17997
|
+
|
|
17998
|
+
o[56] = x14 >>> 0 & 0xff;
|
|
17999
|
+
o[57] = x14 >>> 8 & 0xff;
|
|
18000
|
+
o[58] = x14 >>> 16 & 0xff;
|
|
18001
|
+
o[59] = x14 >>> 24 & 0xff;
|
|
18002
|
+
|
|
18003
|
+
o[60] = x15 >>> 0 & 0xff;
|
|
18004
|
+
o[61] = x15 >>> 8 & 0xff;
|
|
18005
|
+
o[62] = x15 >>> 16 & 0xff;
|
|
18006
|
+
o[63] = x15 >>> 24 & 0xff;
|
|
18007
|
+
}
|
|
18008
|
+
|
|
18009
|
+
function core_hsalsa20(o,p,k,c) {
|
|
18010
|
+
var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,
|
|
18011
|
+
j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,
|
|
18012
|
+
j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,
|
|
18013
|
+
j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,
|
|
18014
|
+
j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,
|
|
18015
|
+
j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,
|
|
18016
|
+
j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,
|
|
18017
|
+
j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,
|
|
18018
|
+
j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,
|
|
18019
|
+
j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,
|
|
18020
|
+
j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,
|
|
18021
|
+
j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,
|
|
18022
|
+
j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,
|
|
18023
|
+
j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,
|
|
18024
|
+
j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,
|
|
18025
|
+
j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;
|
|
18026
|
+
|
|
18027
|
+
var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,
|
|
18028
|
+
x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,
|
|
18029
|
+
x15 = j15, u;
|
|
18030
|
+
|
|
18031
|
+
for (var i = 0; i < 20; i += 2) {
|
|
18032
|
+
u = x0 + x12 | 0;
|
|
18033
|
+
x4 ^= u<<7 | u>>>(32-7);
|
|
18034
|
+
u = x4 + x0 | 0;
|
|
18035
|
+
x8 ^= u<<9 | u>>>(32-9);
|
|
18036
|
+
u = x8 + x4 | 0;
|
|
18037
|
+
x12 ^= u<<13 | u>>>(32-13);
|
|
18038
|
+
u = x12 + x8 | 0;
|
|
18039
|
+
x0 ^= u<<18 | u>>>(32-18);
|
|
18040
|
+
|
|
18041
|
+
u = x5 + x1 | 0;
|
|
18042
|
+
x9 ^= u<<7 | u>>>(32-7);
|
|
18043
|
+
u = x9 + x5 | 0;
|
|
18044
|
+
x13 ^= u<<9 | u>>>(32-9);
|
|
18045
|
+
u = x13 + x9 | 0;
|
|
18046
|
+
x1 ^= u<<13 | u>>>(32-13);
|
|
18047
|
+
u = x1 + x13 | 0;
|
|
18048
|
+
x5 ^= u<<18 | u>>>(32-18);
|
|
18049
|
+
|
|
18050
|
+
u = x10 + x6 | 0;
|
|
18051
|
+
x14 ^= u<<7 | u>>>(32-7);
|
|
18052
|
+
u = x14 + x10 | 0;
|
|
18053
|
+
x2 ^= u<<9 | u>>>(32-9);
|
|
18054
|
+
u = x2 + x14 | 0;
|
|
18055
|
+
x6 ^= u<<13 | u>>>(32-13);
|
|
18056
|
+
u = x6 + x2 | 0;
|
|
18057
|
+
x10 ^= u<<18 | u>>>(32-18);
|
|
18058
|
+
|
|
18059
|
+
u = x15 + x11 | 0;
|
|
18060
|
+
x3 ^= u<<7 | u>>>(32-7);
|
|
18061
|
+
u = x3 + x15 | 0;
|
|
18062
|
+
x7 ^= u<<9 | u>>>(32-9);
|
|
18063
|
+
u = x7 + x3 | 0;
|
|
18064
|
+
x11 ^= u<<13 | u>>>(32-13);
|
|
18065
|
+
u = x11 + x7 | 0;
|
|
18066
|
+
x15 ^= u<<18 | u>>>(32-18);
|
|
18067
|
+
|
|
18068
|
+
u = x0 + x3 | 0;
|
|
18069
|
+
x1 ^= u<<7 | u>>>(32-7);
|
|
18070
|
+
u = x1 + x0 | 0;
|
|
18071
|
+
x2 ^= u<<9 | u>>>(32-9);
|
|
18072
|
+
u = x2 + x1 | 0;
|
|
18073
|
+
x3 ^= u<<13 | u>>>(32-13);
|
|
18074
|
+
u = x3 + x2 | 0;
|
|
18075
|
+
x0 ^= u<<18 | u>>>(32-18);
|
|
18076
|
+
|
|
18077
|
+
u = x5 + x4 | 0;
|
|
18078
|
+
x6 ^= u<<7 | u>>>(32-7);
|
|
18079
|
+
u = x6 + x5 | 0;
|
|
18080
|
+
x7 ^= u<<9 | u>>>(32-9);
|
|
18081
|
+
u = x7 + x6 | 0;
|
|
18082
|
+
x4 ^= u<<13 | u>>>(32-13);
|
|
18083
|
+
u = x4 + x7 | 0;
|
|
18084
|
+
x5 ^= u<<18 | u>>>(32-18);
|
|
18085
|
+
|
|
18086
|
+
u = x10 + x9 | 0;
|
|
18087
|
+
x11 ^= u<<7 | u>>>(32-7);
|
|
18088
|
+
u = x11 + x10 | 0;
|
|
18089
|
+
x8 ^= u<<9 | u>>>(32-9);
|
|
18090
|
+
u = x8 + x11 | 0;
|
|
18091
|
+
x9 ^= u<<13 | u>>>(32-13);
|
|
18092
|
+
u = x9 + x8 | 0;
|
|
18093
|
+
x10 ^= u<<18 | u>>>(32-18);
|
|
18094
|
+
|
|
18095
|
+
u = x15 + x14 | 0;
|
|
18096
|
+
x12 ^= u<<7 | u>>>(32-7);
|
|
18097
|
+
u = x12 + x15 | 0;
|
|
18098
|
+
x13 ^= u<<9 | u>>>(32-9);
|
|
18099
|
+
u = x13 + x12 | 0;
|
|
18100
|
+
x14 ^= u<<13 | u>>>(32-13);
|
|
18101
|
+
u = x14 + x13 | 0;
|
|
18102
|
+
x15 ^= u<<18 | u>>>(32-18);
|
|
18103
|
+
}
|
|
18104
|
+
|
|
18105
|
+
o[ 0] = x0 >>> 0 & 0xff;
|
|
18106
|
+
o[ 1] = x0 >>> 8 & 0xff;
|
|
18107
|
+
o[ 2] = x0 >>> 16 & 0xff;
|
|
18108
|
+
o[ 3] = x0 >>> 24 & 0xff;
|
|
18109
|
+
|
|
18110
|
+
o[ 4] = x5 >>> 0 & 0xff;
|
|
18111
|
+
o[ 5] = x5 >>> 8 & 0xff;
|
|
18112
|
+
o[ 6] = x5 >>> 16 & 0xff;
|
|
18113
|
+
o[ 7] = x5 >>> 24 & 0xff;
|
|
18114
|
+
|
|
18115
|
+
o[ 8] = x10 >>> 0 & 0xff;
|
|
18116
|
+
o[ 9] = x10 >>> 8 & 0xff;
|
|
18117
|
+
o[10] = x10 >>> 16 & 0xff;
|
|
18118
|
+
o[11] = x10 >>> 24 & 0xff;
|
|
18119
|
+
|
|
18120
|
+
o[12] = x15 >>> 0 & 0xff;
|
|
18121
|
+
o[13] = x15 >>> 8 & 0xff;
|
|
18122
|
+
o[14] = x15 >>> 16 & 0xff;
|
|
18123
|
+
o[15] = x15 >>> 24 & 0xff;
|
|
18124
|
+
|
|
18125
|
+
o[16] = x6 >>> 0 & 0xff;
|
|
18126
|
+
o[17] = x6 >>> 8 & 0xff;
|
|
18127
|
+
o[18] = x6 >>> 16 & 0xff;
|
|
18128
|
+
o[19] = x6 >>> 24 & 0xff;
|
|
18129
|
+
|
|
18130
|
+
o[20] = x7 >>> 0 & 0xff;
|
|
18131
|
+
o[21] = x7 >>> 8 & 0xff;
|
|
18132
|
+
o[22] = x7 >>> 16 & 0xff;
|
|
18133
|
+
o[23] = x7 >>> 24 & 0xff;
|
|
18134
|
+
|
|
18135
|
+
o[24] = x8 >>> 0 & 0xff;
|
|
18136
|
+
o[25] = x8 >>> 8 & 0xff;
|
|
18137
|
+
o[26] = x8 >>> 16 & 0xff;
|
|
18138
|
+
o[27] = x8 >>> 24 & 0xff;
|
|
18139
|
+
|
|
18140
|
+
o[28] = x9 >>> 0 & 0xff;
|
|
18141
|
+
o[29] = x9 >>> 8 & 0xff;
|
|
18142
|
+
o[30] = x9 >>> 16 & 0xff;
|
|
18143
|
+
o[31] = x9 >>> 24 & 0xff;
|
|
18144
|
+
}
|
|
18145
|
+
|
|
18146
|
+
function crypto_core_salsa20(out,inp,k,c) {
|
|
18147
|
+
core_salsa20(out,inp,k,c);
|
|
18148
|
+
}
|
|
18149
|
+
|
|
18150
|
+
function crypto_core_hsalsa20(out,inp,k,c) {
|
|
18151
|
+
core_hsalsa20(out,inp,k,c);
|
|
18152
|
+
}
|
|
18153
|
+
|
|
18154
|
+
var sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]);
|
|
18155
|
+
// "expand 32-byte k"
|
|
18156
|
+
|
|
18157
|
+
function crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) {
|
|
18158
|
+
var z = new Uint8Array(16), x = new Uint8Array(64);
|
|
18159
|
+
var u, i;
|
|
18160
|
+
for (i = 0; i < 16; i++) z[i] = 0;
|
|
18161
|
+
for (i = 0; i < 8; i++) z[i] = n[i];
|
|
18162
|
+
while (b >= 64) {
|
|
18163
|
+
crypto_core_salsa20(x,z,k,sigma);
|
|
18164
|
+
for (i = 0; i < 64; i++) c[cpos+i] = m[mpos+i] ^ x[i];
|
|
18165
|
+
u = 1;
|
|
18166
|
+
for (i = 8; i < 16; i++) {
|
|
18167
|
+
u = u + (z[i] & 0xff) | 0;
|
|
18168
|
+
z[i] = u & 0xff;
|
|
18169
|
+
u >>>= 8;
|
|
18170
|
+
}
|
|
18171
|
+
b -= 64;
|
|
18172
|
+
cpos += 64;
|
|
18173
|
+
mpos += 64;
|
|
18174
|
+
}
|
|
18175
|
+
if (b > 0) {
|
|
18176
|
+
crypto_core_salsa20(x,z,k,sigma);
|
|
18177
|
+
for (i = 0; i < b; i++) c[cpos+i] = m[mpos+i] ^ x[i];
|
|
18178
|
+
}
|
|
18179
|
+
return 0;
|
|
18180
|
+
}
|
|
18181
|
+
|
|
18182
|
+
function crypto_stream_salsa20(c,cpos,b,n,k) {
|
|
18183
|
+
var z = new Uint8Array(16), x = new Uint8Array(64);
|
|
18184
|
+
var u, i;
|
|
18185
|
+
for (i = 0; i < 16; i++) z[i] = 0;
|
|
18186
|
+
for (i = 0; i < 8; i++) z[i] = n[i];
|
|
18187
|
+
while (b >= 64) {
|
|
18188
|
+
crypto_core_salsa20(x,z,k,sigma);
|
|
18189
|
+
for (i = 0; i < 64; i++) c[cpos+i] = x[i];
|
|
18190
|
+
u = 1;
|
|
18191
|
+
for (i = 8; i < 16; i++) {
|
|
18192
|
+
u = u + (z[i] & 0xff) | 0;
|
|
18193
|
+
z[i] = u & 0xff;
|
|
18194
|
+
u >>>= 8;
|
|
18195
|
+
}
|
|
18196
|
+
b -= 64;
|
|
18197
|
+
cpos += 64;
|
|
18198
|
+
}
|
|
18199
|
+
if (b > 0) {
|
|
18200
|
+
crypto_core_salsa20(x,z,k,sigma);
|
|
18201
|
+
for (i = 0; i < b; i++) c[cpos+i] = x[i];
|
|
18202
|
+
}
|
|
18203
|
+
return 0;
|
|
18204
|
+
}
|
|
18205
|
+
|
|
18206
|
+
function crypto_stream(c,cpos,d,n,k) {
|
|
18207
|
+
var s = new Uint8Array(32);
|
|
18208
|
+
crypto_core_hsalsa20(s,n,k,sigma);
|
|
18209
|
+
var sn = new Uint8Array(8);
|
|
18210
|
+
for (var i = 0; i < 8; i++) sn[i] = n[i+16];
|
|
18211
|
+
return crypto_stream_salsa20(c,cpos,d,sn,s);
|
|
18212
|
+
}
|
|
18213
|
+
|
|
18214
|
+
function crypto_stream_xor(c,cpos,m,mpos,d,n,k) {
|
|
18215
|
+
var s = new Uint8Array(32);
|
|
18216
|
+
crypto_core_hsalsa20(s,n,k,sigma);
|
|
18217
|
+
var sn = new Uint8Array(8);
|
|
18218
|
+
for (var i = 0; i < 8; i++) sn[i] = n[i+16];
|
|
18219
|
+
return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,sn,s);
|
|
18220
|
+
}
|
|
18221
|
+
|
|
18222
|
+
/*
|
|
18223
|
+
* Port of Andrew Moon's Poly1305-donna-16. Public domain.
|
|
18224
|
+
* https://github.com/floodyberry/poly1305-donna
|
|
18225
|
+
*/
|
|
18226
|
+
|
|
18227
|
+
var poly1305 = function(key) {
|
|
18228
|
+
this.buffer = new Uint8Array(16);
|
|
18229
|
+
this.r = new Uint16Array(10);
|
|
18230
|
+
this.h = new Uint16Array(10);
|
|
18231
|
+
this.pad = new Uint16Array(8);
|
|
18232
|
+
this.leftover = 0;
|
|
18233
|
+
this.fin = 0;
|
|
18234
|
+
|
|
18235
|
+
var t0, t1, t2, t3, t4, t5, t6, t7;
|
|
18236
|
+
|
|
18237
|
+
t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0 ) & 0x1fff;
|
|
18238
|
+
t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff;
|
|
18239
|
+
t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03;
|
|
18240
|
+
t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff;
|
|
18241
|
+
t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff;
|
|
18242
|
+
this.r[5] = ((t4 >>> 1)) & 0x1ffe;
|
|
18243
|
+
t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff;
|
|
18244
|
+
t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81;
|
|
18245
|
+
t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff;
|
|
18246
|
+
this.r[9] = ((t7 >>> 5)) & 0x007f;
|
|
18247
|
+
|
|
18248
|
+
this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8;
|
|
18249
|
+
this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8;
|
|
18250
|
+
this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8;
|
|
18251
|
+
this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8;
|
|
18252
|
+
this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8;
|
|
18253
|
+
this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8;
|
|
18254
|
+
this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8;
|
|
18255
|
+
this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8;
|
|
18256
|
+
};
|
|
18257
|
+
|
|
18258
|
+
poly1305.prototype.blocks = function(m, mpos, bytes) {
|
|
18259
|
+
var hibit = this.fin ? 0 : (1 << 11);
|
|
18260
|
+
var t0, t1, t2, t3, t4, t5, t6, t7, c;
|
|
18261
|
+
var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9;
|
|
18262
|
+
|
|
18263
|
+
var h0 = this.h[0],
|
|
18264
|
+
h1 = this.h[1],
|
|
18265
|
+
h2 = this.h[2],
|
|
18266
|
+
h3 = this.h[3],
|
|
18267
|
+
h4 = this.h[4],
|
|
18268
|
+
h5 = this.h[5],
|
|
18269
|
+
h6 = this.h[6],
|
|
18270
|
+
h7 = this.h[7],
|
|
18271
|
+
h8 = this.h[8],
|
|
18272
|
+
h9 = this.h[9];
|
|
18273
|
+
|
|
18274
|
+
var r0 = this.r[0],
|
|
18275
|
+
r1 = this.r[1],
|
|
18276
|
+
r2 = this.r[2],
|
|
18277
|
+
r3 = this.r[3],
|
|
18278
|
+
r4 = this.r[4],
|
|
18279
|
+
r5 = this.r[5],
|
|
18280
|
+
r6 = this.r[6],
|
|
18281
|
+
r7 = this.r[7],
|
|
18282
|
+
r8 = this.r[8],
|
|
18283
|
+
r9 = this.r[9];
|
|
18284
|
+
|
|
18285
|
+
while (bytes >= 16) {
|
|
18286
|
+
t0 = m[mpos+ 0] & 0xff | (m[mpos+ 1] & 0xff) << 8; h0 += ( t0 ) & 0x1fff;
|
|
18287
|
+
t1 = m[mpos+ 2] & 0xff | (m[mpos+ 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 << 3)) & 0x1fff;
|
|
18288
|
+
t2 = m[mpos+ 4] & 0xff | (m[mpos+ 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 << 6)) & 0x1fff;
|
|
18289
|
+
t3 = m[mpos+ 6] & 0xff | (m[mpos+ 7] & 0xff) << 8; h3 += ((t2 >>> 7) | (t3 << 9)) & 0x1fff;
|
|
18290
|
+
t4 = m[mpos+ 8] & 0xff | (m[mpos+ 9] & 0xff) << 8; h4 += ((t3 >>> 4) | (t4 << 12)) & 0x1fff;
|
|
18291
|
+
h5 += ((t4 >>> 1)) & 0x1fff;
|
|
18292
|
+
t5 = m[mpos+10] & 0xff | (m[mpos+11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 << 2)) & 0x1fff;
|
|
18293
|
+
t6 = m[mpos+12] & 0xff | (m[mpos+13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 << 5)) & 0x1fff;
|
|
18294
|
+
t7 = m[mpos+14] & 0xff | (m[mpos+15] & 0xff) << 8; h8 += ((t6 >>> 8) | (t7 << 8)) & 0x1fff;
|
|
18295
|
+
h9 += ((t7 >>> 5)) | hibit;
|
|
18296
|
+
|
|
18297
|
+
c = 0;
|
|
18298
|
+
|
|
18299
|
+
d0 = c;
|
|
18300
|
+
d0 += h0 * r0;
|
|
18301
|
+
d0 += h1 * (5 * r9);
|
|
18302
|
+
d0 += h2 * (5 * r8);
|
|
18303
|
+
d0 += h3 * (5 * r7);
|
|
18304
|
+
d0 += h4 * (5 * r6);
|
|
18305
|
+
c = (d0 >>> 13); d0 &= 0x1fff;
|
|
18306
|
+
d0 += h5 * (5 * r5);
|
|
18307
|
+
d0 += h6 * (5 * r4);
|
|
18308
|
+
d0 += h7 * (5 * r3);
|
|
18309
|
+
d0 += h8 * (5 * r2);
|
|
18310
|
+
d0 += h9 * (5 * r1);
|
|
18311
|
+
c += (d0 >>> 13); d0 &= 0x1fff;
|
|
18312
|
+
|
|
18313
|
+
d1 = c;
|
|
18314
|
+
d1 += h0 * r1;
|
|
18315
|
+
d1 += h1 * r0;
|
|
18316
|
+
d1 += h2 * (5 * r9);
|
|
18317
|
+
d1 += h3 * (5 * r8);
|
|
18318
|
+
d1 += h4 * (5 * r7);
|
|
18319
|
+
c = (d1 >>> 13); d1 &= 0x1fff;
|
|
18320
|
+
d1 += h5 * (5 * r6);
|
|
18321
|
+
d1 += h6 * (5 * r5);
|
|
18322
|
+
d1 += h7 * (5 * r4);
|
|
18323
|
+
d1 += h8 * (5 * r3);
|
|
18324
|
+
d1 += h9 * (5 * r2);
|
|
18325
|
+
c += (d1 >>> 13); d1 &= 0x1fff;
|
|
18326
|
+
|
|
18327
|
+
d2 = c;
|
|
18328
|
+
d2 += h0 * r2;
|
|
18329
|
+
d2 += h1 * r1;
|
|
18330
|
+
d2 += h2 * r0;
|
|
18331
|
+
d2 += h3 * (5 * r9);
|
|
18332
|
+
d2 += h4 * (5 * r8);
|
|
18333
|
+
c = (d2 >>> 13); d2 &= 0x1fff;
|
|
18334
|
+
d2 += h5 * (5 * r7);
|
|
18335
|
+
d2 += h6 * (5 * r6);
|
|
18336
|
+
d2 += h7 * (5 * r5);
|
|
18337
|
+
d2 += h8 * (5 * r4);
|
|
18338
|
+
d2 += h9 * (5 * r3);
|
|
18339
|
+
c += (d2 >>> 13); d2 &= 0x1fff;
|
|
18340
|
+
|
|
18341
|
+
d3 = c;
|
|
18342
|
+
d3 += h0 * r3;
|
|
18343
|
+
d3 += h1 * r2;
|
|
18344
|
+
d3 += h2 * r1;
|
|
18345
|
+
d3 += h3 * r0;
|
|
18346
|
+
d3 += h4 * (5 * r9);
|
|
18347
|
+
c = (d3 >>> 13); d3 &= 0x1fff;
|
|
18348
|
+
d3 += h5 * (5 * r8);
|
|
18349
|
+
d3 += h6 * (5 * r7);
|
|
18350
|
+
d3 += h7 * (5 * r6);
|
|
18351
|
+
d3 += h8 * (5 * r5);
|
|
18352
|
+
d3 += h9 * (5 * r4);
|
|
18353
|
+
c += (d3 >>> 13); d3 &= 0x1fff;
|
|
18354
|
+
|
|
18355
|
+
d4 = c;
|
|
18356
|
+
d4 += h0 * r4;
|
|
18357
|
+
d4 += h1 * r3;
|
|
18358
|
+
d4 += h2 * r2;
|
|
18359
|
+
d4 += h3 * r1;
|
|
18360
|
+
d4 += h4 * r0;
|
|
18361
|
+
c = (d4 >>> 13); d4 &= 0x1fff;
|
|
18362
|
+
d4 += h5 * (5 * r9);
|
|
18363
|
+
d4 += h6 * (5 * r8);
|
|
18364
|
+
d4 += h7 * (5 * r7);
|
|
18365
|
+
d4 += h8 * (5 * r6);
|
|
18366
|
+
d4 += h9 * (5 * r5);
|
|
18367
|
+
c += (d4 >>> 13); d4 &= 0x1fff;
|
|
18368
|
+
|
|
18369
|
+
d5 = c;
|
|
18370
|
+
d5 += h0 * r5;
|
|
18371
|
+
d5 += h1 * r4;
|
|
18372
|
+
d5 += h2 * r3;
|
|
18373
|
+
d5 += h3 * r2;
|
|
18374
|
+
d5 += h4 * r1;
|
|
18375
|
+
c = (d5 >>> 13); d5 &= 0x1fff;
|
|
18376
|
+
d5 += h5 * r0;
|
|
18377
|
+
d5 += h6 * (5 * r9);
|
|
18378
|
+
d5 += h7 * (5 * r8);
|
|
18379
|
+
d5 += h8 * (5 * r7);
|
|
18380
|
+
d5 += h9 * (5 * r6);
|
|
18381
|
+
c += (d5 >>> 13); d5 &= 0x1fff;
|
|
18382
|
+
|
|
18383
|
+
d6 = c;
|
|
18384
|
+
d6 += h0 * r6;
|
|
18385
|
+
d6 += h1 * r5;
|
|
18386
|
+
d6 += h2 * r4;
|
|
18387
|
+
d6 += h3 * r3;
|
|
18388
|
+
d6 += h4 * r2;
|
|
18389
|
+
c = (d6 >>> 13); d6 &= 0x1fff;
|
|
18390
|
+
d6 += h5 * r1;
|
|
18391
|
+
d6 += h6 * r0;
|
|
18392
|
+
d6 += h7 * (5 * r9);
|
|
18393
|
+
d6 += h8 * (5 * r8);
|
|
18394
|
+
d6 += h9 * (5 * r7);
|
|
18395
|
+
c += (d6 >>> 13); d6 &= 0x1fff;
|
|
18396
|
+
|
|
18397
|
+
d7 = c;
|
|
18398
|
+
d7 += h0 * r7;
|
|
18399
|
+
d7 += h1 * r6;
|
|
18400
|
+
d7 += h2 * r5;
|
|
18401
|
+
d7 += h3 * r4;
|
|
18402
|
+
d7 += h4 * r3;
|
|
18403
|
+
c = (d7 >>> 13); d7 &= 0x1fff;
|
|
18404
|
+
d7 += h5 * r2;
|
|
18405
|
+
d7 += h6 * r1;
|
|
18406
|
+
d7 += h7 * r0;
|
|
18407
|
+
d7 += h8 * (5 * r9);
|
|
18408
|
+
d7 += h9 * (5 * r8);
|
|
18409
|
+
c += (d7 >>> 13); d7 &= 0x1fff;
|
|
18410
|
+
|
|
18411
|
+
d8 = c;
|
|
18412
|
+
d8 += h0 * r8;
|
|
18413
|
+
d8 += h1 * r7;
|
|
18414
|
+
d8 += h2 * r6;
|
|
18415
|
+
d8 += h3 * r5;
|
|
18416
|
+
d8 += h4 * r4;
|
|
18417
|
+
c = (d8 >>> 13); d8 &= 0x1fff;
|
|
18418
|
+
d8 += h5 * r3;
|
|
18419
|
+
d8 += h6 * r2;
|
|
18420
|
+
d8 += h7 * r1;
|
|
18421
|
+
d8 += h8 * r0;
|
|
18422
|
+
d8 += h9 * (5 * r9);
|
|
18423
|
+
c += (d8 >>> 13); d8 &= 0x1fff;
|
|
18424
|
+
|
|
18425
|
+
d9 = c;
|
|
18426
|
+
d9 += h0 * r9;
|
|
18427
|
+
d9 += h1 * r8;
|
|
18428
|
+
d9 += h2 * r7;
|
|
18429
|
+
d9 += h3 * r6;
|
|
18430
|
+
d9 += h4 * r5;
|
|
18431
|
+
c = (d9 >>> 13); d9 &= 0x1fff;
|
|
18432
|
+
d9 += h5 * r4;
|
|
18433
|
+
d9 += h6 * r3;
|
|
18434
|
+
d9 += h7 * r2;
|
|
18435
|
+
d9 += h8 * r1;
|
|
18436
|
+
d9 += h9 * r0;
|
|
18437
|
+
c += (d9 >>> 13); d9 &= 0x1fff;
|
|
18438
|
+
|
|
18439
|
+
c = (((c << 2) + c)) | 0;
|
|
18440
|
+
c = (c + d0) | 0;
|
|
18441
|
+
d0 = c & 0x1fff;
|
|
18442
|
+
c = (c >>> 13);
|
|
18443
|
+
d1 += c;
|
|
18444
|
+
|
|
18445
|
+
h0 = d0;
|
|
18446
|
+
h1 = d1;
|
|
18447
|
+
h2 = d2;
|
|
18448
|
+
h3 = d3;
|
|
18449
|
+
h4 = d4;
|
|
18450
|
+
h5 = d5;
|
|
18451
|
+
h6 = d6;
|
|
18452
|
+
h7 = d7;
|
|
18453
|
+
h8 = d8;
|
|
18454
|
+
h9 = d9;
|
|
18455
|
+
|
|
18456
|
+
mpos += 16;
|
|
18457
|
+
bytes -= 16;
|
|
18458
|
+
}
|
|
18459
|
+
this.h[0] = h0;
|
|
18460
|
+
this.h[1] = h1;
|
|
18461
|
+
this.h[2] = h2;
|
|
18462
|
+
this.h[3] = h3;
|
|
18463
|
+
this.h[4] = h4;
|
|
18464
|
+
this.h[5] = h5;
|
|
18465
|
+
this.h[6] = h6;
|
|
18466
|
+
this.h[7] = h7;
|
|
18467
|
+
this.h[8] = h8;
|
|
18468
|
+
this.h[9] = h9;
|
|
18469
|
+
};
|
|
18470
|
+
|
|
18471
|
+
poly1305.prototype.finish = function(mac, macpos) {
|
|
18472
|
+
var g = new Uint16Array(10);
|
|
18473
|
+
var c, mask, f, i;
|
|
18474
|
+
|
|
18475
|
+
if (this.leftover) {
|
|
18476
|
+
i = this.leftover;
|
|
18477
|
+
this.buffer[i++] = 1;
|
|
18478
|
+
for (; i < 16; i++) this.buffer[i] = 0;
|
|
18479
|
+
this.fin = 1;
|
|
18480
|
+
this.blocks(this.buffer, 0, 16);
|
|
18481
|
+
}
|
|
18482
|
+
|
|
18483
|
+
c = this.h[1] >>> 13;
|
|
18484
|
+
this.h[1] &= 0x1fff;
|
|
18485
|
+
for (i = 2; i < 10; i++) {
|
|
18486
|
+
this.h[i] += c;
|
|
18487
|
+
c = this.h[i] >>> 13;
|
|
18488
|
+
this.h[i] &= 0x1fff;
|
|
18489
|
+
}
|
|
18490
|
+
this.h[0] += (c * 5);
|
|
18491
|
+
c = this.h[0] >>> 13;
|
|
18492
|
+
this.h[0] &= 0x1fff;
|
|
18493
|
+
this.h[1] += c;
|
|
18494
|
+
c = this.h[1] >>> 13;
|
|
18495
|
+
this.h[1] &= 0x1fff;
|
|
18496
|
+
this.h[2] += c;
|
|
18497
|
+
|
|
18498
|
+
g[0] = this.h[0] + 5;
|
|
18499
|
+
c = g[0] >>> 13;
|
|
18500
|
+
g[0] &= 0x1fff;
|
|
18501
|
+
for (i = 1; i < 10; i++) {
|
|
18502
|
+
g[i] = this.h[i] + c;
|
|
18503
|
+
c = g[i] >>> 13;
|
|
18504
|
+
g[i] &= 0x1fff;
|
|
18505
|
+
}
|
|
18506
|
+
g[9] -= (1 << 13);
|
|
18507
|
+
|
|
18508
|
+
mask = (c ^ 1) - 1;
|
|
18509
|
+
for (i = 0; i < 10; i++) g[i] &= mask;
|
|
18510
|
+
mask = ~mask;
|
|
18511
|
+
for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i];
|
|
18512
|
+
|
|
18513
|
+
this.h[0] = ((this.h[0] ) | (this.h[1] << 13) ) & 0xffff;
|
|
18514
|
+
this.h[1] = ((this.h[1] >>> 3) | (this.h[2] << 10) ) & 0xffff;
|
|
18515
|
+
this.h[2] = ((this.h[2] >>> 6) | (this.h[3] << 7) ) & 0xffff;
|
|
18516
|
+
this.h[3] = ((this.h[3] >>> 9) | (this.h[4] << 4) ) & 0xffff;
|
|
18517
|
+
this.h[4] = ((this.h[4] >>> 12) | (this.h[5] << 1) | (this.h[6] << 14)) & 0xffff;
|
|
18518
|
+
this.h[5] = ((this.h[6] >>> 2) | (this.h[7] << 11) ) & 0xffff;
|
|
18519
|
+
this.h[6] = ((this.h[7] >>> 5) | (this.h[8] << 8) ) & 0xffff;
|
|
18520
|
+
this.h[7] = ((this.h[8] >>> 8) | (this.h[9] << 5) ) & 0xffff;
|
|
18521
|
+
|
|
18522
|
+
f = this.h[0] + this.pad[0];
|
|
18523
|
+
this.h[0] = f & 0xffff;
|
|
18524
|
+
for (i = 1; i < 8; i++) {
|
|
18525
|
+
f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0;
|
|
18526
|
+
this.h[i] = f & 0xffff;
|
|
18527
|
+
}
|
|
18528
|
+
|
|
18529
|
+
mac[macpos+ 0] = (this.h[0] >>> 0) & 0xff;
|
|
18530
|
+
mac[macpos+ 1] = (this.h[0] >>> 8) & 0xff;
|
|
18531
|
+
mac[macpos+ 2] = (this.h[1] >>> 0) & 0xff;
|
|
18532
|
+
mac[macpos+ 3] = (this.h[1] >>> 8) & 0xff;
|
|
18533
|
+
mac[macpos+ 4] = (this.h[2] >>> 0) & 0xff;
|
|
18534
|
+
mac[macpos+ 5] = (this.h[2] >>> 8) & 0xff;
|
|
18535
|
+
mac[macpos+ 6] = (this.h[3] >>> 0) & 0xff;
|
|
18536
|
+
mac[macpos+ 7] = (this.h[3] >>> 8) & 0xff;
|
|
18537
|
+
mac[macpos+ 8] = (this.h[4] >>> 0) & 0xff;
|
|
18538
|
+
mac[macpos+ 9] = (this.h[4] >>> 8) & 0xff;
|
|
18539
|
+
mac[macpos+10] = (this.h[5] >>> 0) & 0xff;
|
|
18540
|
+
mac[macpos+11] = (this.h[5] >>> 8) & 0xff;
|
|
18541
|
+
mac[macpos+12] = (this.h[6] >>> 0) & 0xff;
|
|
18542
|
+
mac[macpos+13] = (this.h[6] >>> 8) & 0xff;
|
|
18543
|
+
mac[macpos+14] = (this.h[7] >>> 0) & 0xff;
|
|
18544
|
+
mac[macpos+15] = (this.h[7] >>> 8) & 0xff;
|
|
18545
|
+
};
|
|
18546
|
+
|
|
18547
|
+
poly1305.prototype.update = function(m, mpos, bytes) {
|
|
18548
|
+
var i, want;
|
|
18549
|
+
|
|
18550
|
+
if (this.leftover) {
|
|
18551
|
+
want = (16 - this.leftover);
|
|
18552
|
+
if (want > bytes)
|
|
18553
|
+
want = bytes;
|
|
18554
|
+
for (i = 0; i < want; i++)
|
|
18555
|
+
this.buffer[this.leftover + i] = m[mpos+i];
|
|
18556
|
+
bytes -= want;
|
|
18557
|
+
mpos += want;
|
|
18558
|
+
this.leftover += want;
|
|
18559
|
+
if (this.leftover < 16)
|
|
18560
|
+
return;
|
|
18561
|
+
this.blocks(this.buffer, 0, 16);
|
|
18562
|
+
this.leftover = 0;
|
|
18563
|
+
}
|
|
18564
|
+
|
|
18565
|
+
if (bytes >= 16) {
|
|
18566
|
+
want = bytes - (bytes % 16);
|
|
18567
|
+
this.blocks(m, mpos, want);
|
|
18568
|
+
mpos += want;
|
|
18569
|
+
bytes -= want;
|
|
18570
|
+
}
|
|
18571
|
+
|
|
18572
|
+
if (bytes) {
|
|
18573
|
+
for (i = 0; i < bytes; i++)
|
|
18574
|
+
this.buffer[this.leftover + i] = m[mpos+i];
|
|
18575
|
+
this.leftover += bytes;
|
|
18576
|
+
}
|
|
18577
|
+
};
|
|
18578
|
+
|
|
18579
|
+
function crypto_onetimeauth(out, outpos, m, mpos, n, k) {
|
|
18580
|
+
var s = new poly1305(k);
|
|
18581
|
+
s.update(m, mpos, n);
|
|
18582
|
+
s.finish(out, outpos);
|
|
18583
|
+
return 0;
|
|
18584
|
+
}
|
|
18585
|
+
|
|
18586
|
+
function crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) {
|
|
18587
|
+
var x = new Uint8Array(16);
|
|
18588
|
+
crypto_onetimeauth(x,0,m,mpos,n,k);
|
|
18589
|
+
return crypto_verify_16(h,hpos,x,0);
|
|
18590
|
+
}
|
|
18591
|
+
|
|
18592
|
+
function crypto_secretbox(c,m,d,n,k) {
|
|
18593
|
+
var i;
|
|
18594
|
+
if (d < 32) return -1;
|
|
18595
|
+
crypto_stream_xor(c,0,m,0,d,n,k);
|
|
18596
|
+
crypto_onetimeauth(c, 16, c, 32, d - 32, c);
|
|
18597
|
+
for (i = 0; i < 16; i++) c[i] = 0;
|
|
18598
|
+
return 0;
|
|
18599
|
+
}
|
|
18600
|
+
|
|
18601
|
+
function crypto_secretbox_open(m,c,d,n,k) {
|
|
18602
|
+
var i;
|
|
18603
|
+
var x = new Uint8Array(32);
|
|
18604
|
+
if (d < 32) return -1;
|
|
18605
|
+
crypto_stream(x,0,32,n,k);
|
|
18606
|
+
if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1;
|
|
18607
|
+
crypto_stream_xor(m,0,c,0,d,n,k);
|
|
18608
|
+
for (i = 0; i < 32; i++) m[i] = 0;
|
|
18609
|
+
return 0;
|
|
18610
|
+
}
|
|
18611
|
+
|
|
18612
|
+
function set25519(r, a) {
|
|
18613
|
+
var i;
|
|
18614
|
+
for (i = 0; i < 16; i++) r[i] = a[i]|0;
|
|
18615
|
+
}
|
|
18616
|
+
|
|
18617
|
+
function car25519(o) {
|
|
18618
|
+
var i, v, c = 1;
|
|
18619
|
+
for (i = 0; i < 16; i++) {
|
|
18620
|
+
v = o[i] + c + 65535;
|
|
18621
|
+
c = Math.floor(v / 65536);
|
|
18622
|
+
o[i] = v - c * 65536;
|
|
18623
|
+
}
|
|
18624
|
+
o[0] += c-1 + 37 * (c-1);
|
|
18625
|
+
}
|
|
18626
|
+
|
|
18627
|
+
function sel25519(p, q, b) {
|
|
18628
|
+
var t, c = ~(b-1);
|
|
18629
|
+
for (var i = 0; i < 16; i++) {
|
|
18630
|
+
t = c & (p[i] ^ q[i]);
|
|
18631
|
+
p[i] ^= t;
|
|
18632
|
+
q[i] ^= t;
|
|
18633
|
+
}
|
|
18634
|
+
}
|
|
18635
|
+
|
|
18636
|
+
function pack25519(o, n) {
|
|
18637
|
+
var i, j, b;
|
|
18638
|
+
var m = gf(), t = gf();
|
|
18639
|
+
for (i = 0; i < 16; i++) t[i] = n[i];
|
|
18640
|
+
car25519(t);
|
|
18641
|
+
car25519(t);
|
|
18642
|
+
car25519(t);
|
|
18643
|
+
for (j = 0; j < 2; j++) {
|
|
18644
|
+
m[0] = t[0] - 0xffed;
|
|
18645
|
+
for (i = 1; i < 15; i++) {
|
|
18646
|
+
m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1);
|
|
18647
|
+
m[i-1] &= 0xffff;
|
|
18648
|
+
}
|
|
18649
|
+
m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1);
|
|
18650
|
+
b = (m[15]>>16) & 1;
|
|
18651
|
+
m[14] &= 0xffff;
|
|
18652
|
+
sel25519(t, m, 1-b);
|
|
18653
|
+
}
|
|
18654
|
+
for (i = 0; i < 16; i++) {
|
|
18655
|
+
o[2*i] = t[i] & 0xff;
|
|
18656
|
+
o[2*i+1] = t[i]>>8;
|
|
18657
|
+
}
|
|
18658
|
+
}
|
|
18659
|
+
|
|
18660
|
+
function neq25519(a, b) {
|
|
18661
|
+
var c = new Uint8Array(32), d = new Uint8Array(32);
|
|
18662
|
+
pack25519(c, a);
|
|
18663
|
+
pack25519(d, b);
|
|
18664
|
+
return crypto_verify_32(c, 0, d, 0);
|
|
18665
|
+
}
|
|
18666
|
+
|
|
18667
|
+
function par25519(a) {
|
|
18668
|
+
var d = new Uint8Array(32);
|
|
18669
|
+
pack25519(d, a);
|
|
18670
|
+
return d[0] & 1;
|
|
18671
|
+
}
|
|
18672
|
+
|
|
18673
|
+
function unpack25519(o, n) {
|
|
18674
|
+
var i;
|
|
18675
|
+
for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8);
|
|
18676
|
+
o[15] &= 0x7fff;
|
|
18677
|
+
}
|
|
18678
|
+
|
|
18679
|
+
function A(o, a, b) {
|
|
18680
|
+
for (var i = 0; i < 16; i++) o[i] = a[i] + b[i];
|
|
18681
|
+
}
|
|
18682
|
+
|
|
18683
|
+
function Z(o, a, b) {
|
|
18684
|
+
for (var i = 0; i < 16; i++) o[i] = a[i] - b[i];
|
|
18685
|
+
}
|
|
18686
|
+
|
|
18687
|
+
function M(o, a, b) {
|
|
18688
|
+
var v, c,
|
|
18689
|
+
t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0,
|
|
18690
|
+
t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0,
|
|
18691
|
+
t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0,
|
|
18692
|
+
t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0,
|
|
18693
|
+
b0 = b[0],
|
|
18694
|
+
b1 = b[1],
|
|
18695
|
+
b2 = b[2],
|
|
18696
|
+
b3 = b[3],
|
|
18697
|
+
b4 = b[4],
|
|
18698
|
+
b5 = b[5],
|
|
18699
|
+
b6 = b[6],
|
|
18700
|
+
b7 = b[7],
|
|
18701
|
+
b8 = b[8],
|
|
18702
|
+
b9 = b[9],
|
|
18703
|
+
b10 = b[10],
|
|
18704
|
+
b11 = b[11],
|
|
18705
|
+
b12 = b[12],
|
|
18706
|
+
b13 = b[13],
|
|
18707
|
+
b14 = b[14],
|
|
18708
|
+
b15 = b[15];
|
|
18709
|
+
|
|
18710
|
+
v = a[0];
|
|
18711
|
+
t0 += v * b0;
|
|
18712
|
+
t1 += v * b1;
|
|
18713
|
+
t2 += v * b2;
|
|
18714
|
+
t3 += v * b3;
|
|
18715
|
+
t4 += v * b4;
|
|
18716
|
+
t5 += v * b5;
|
|
18717
|
+
t6 += v * b6;
|
|
18718
|
+
t7 += v * b7;
|
|
18719
|
+
t8 += v * b8;
|
|
18720
|
+
t9 += v * b9;
|
|
18721
|
+
t10 += v * b10;
|
|
18722
|
+
t11 += v * b11;
|
|
18723
|
+
t12 += v * b12;
|
|
18724
|
+
t13 += v * b13;
|
|
18725
|
+
t14 += v * b14;
|
|
18726
|
+
t15 += v * b15;
|
|
18727
|
+
v = a[1];
|
|
18728
|
+
t1 += v * b0;
|
|
18729
|
+
t2 += v * b1;
|
|
18730
|
+
t3 += v * b2;
|
|
18731
|
+
t4 += v * b3;
|
|
18732
|
+
t5 += v * b4;
|
|
18733
|
+
t6 += v * b5;
|
|
18734
|
+
t7 += v * b6;
|
|
18735
|
+
t8 += v * b7;
|
|
18736
|
+
t9 += v * b8;
|
|
18737
|
+
t10 += v * b9;
|
|
18738
|
+
t11 += v * b10;
|
|
18739
|
+
t12 += v * b11;
|
|
18740
|
+
t13 += v * b12;
|
|
18741
|
+
t14 += v * b13;
|
|
18742
|
+
t15 += v * b14;
|
|
18743
|
+
t16 += v * b15;
|
|
18744
|
+
v = a[2];
|
|
18745
|
+
t2 += v * b0;
|
|
18746
|
+
t3 += v * b1;
|
|
18747
|
+
t4 += v * b2;
|
|
18748
|
+
t5 += v * b3;
|
|
18749
|
+
t6 += v * b4;
|
|
18750
|
+
t7 += v * b5;
|
|
18751
|
+
t8 += v * b6;
|
|
18752
|
+
t9 += v * b7;
|
|
18753
|
+
t10 += v * b8;
|
|
18754
|
+
t11 += v * b9;
|
|
18755
|
+
t12 += v * b10;
|
|
18756
|
+
t13 += v * b11;
|
|
18757
|
+
t14 += v * b12;
|
|
18758
|
+
t15 += v * b13;
|
|
18759
|
+
t16 += v * b14;
|
|
18760
|
+
t17 += v * b15;
|
|
18761
|
+
v = a[3];
|
|
18762
|
+
t3 += v * b0;
|
|
18763
|
+
t4 += v * b1;
|
|
18764
|
+
t5 += v * b2;
|
|
18765
|
+
t6 += v * b3;
|
|
18766
|
+
t7 += v * b4;
|
|
18767
|
+
t8 += v * b5;
|
|
18768
|
+
t9 += v * b6;
|
|
18769
|
+
t10 += v * b7;
|
|
18770
|
+
t11 += v * b8;
|
|
18771
|
+
t12 += v * b9;
|
|
18772
|
+
t13 += v * b10;
|
|
18773
|
+
t14 += v * b11;
|
|
18774
|
+
t15 += v * b12;
|
|
18775
|
+
t16 += v * b13;
|
|
18776
|
+
t17 += v * b14;
|
|
18777
|
+
t18 += v * b15;
|
|
18778
|
+
v = a[4];
|
|
18779
|
+
t4 += v * b0;
|
|
18780
|
+
t5 += v * b1;
|
|
18781
|
+
t6 += v * b2;
|
|
18782
|
+
t7 += v * b3;
|
|
18783
|
+
t8 += v * b4;
|
|
18784
|
+
t9 += v * b5;
|
|
18785
|
+
t10 += v * b6;
|
|
18786
|
+
t11 += v * b7;
|
|
18787
|
+
t12 += v * b8;
|
|
18788
|
+
t13 += v * b9;
|
|
18789
|
+
t14 += v * b10;
|
|
18790
|
+
t15 += v * b11;
|
|
18791
|
+
t16 += v * b12;
|
|
18792
|
+
t17 += v * b13;
|
|
18793
|
+
t18 += v * b14;
|
|
18794
|
+
t19 += v * b15;
|
|
18795
|
+
v = a[5];
|
|
18796
|
+
t5 += v * b0;
|
|
18797
|
+
t6 += v * b1;
|
|
18798
|
+
t7 += v * b2;
|
|
18799
|
+
t8 += v * b3;
|
|
18800
|
+
t9 += v * b4;
|
|
18801
|
+
t10 += v * b5;
|
|
18802
|
+
t11 += v * b6;
|
|
18803
|
+
t12 += v * b7;
|
|
18804
|
+
t13 += v * b8;
|
|
18805
|
+
t14 += v * b9;
|
|
18806
|
+
t15 += v * b10;
|
|
18807
|
+
t16 += v * b11;
|
|
18808
|
+
t17 += v * b12;
|
|
18809
|
+
t18 += v * b13;
|
|
18810
|
+
t19 += v * b14;
|
|
18811
|
+
t20 += v * b15;
|
|
18812
|
+
v = a[6];
|
|
18813
|
+
t6 += v * b0;
|
|
18814
|
+
t7 += v * b1;
|
|
18815
|
+
t8 += v * b2;
|
|
18816
|
+
t9 += v * b3;
|
|
18817
|
+
t10 += v * b4;
|
|
18818
|
+
t11 += v * b5;
|
|
18819
|
+
t12 += v * b6;
|
|
18820
|
+
t13 += v * b7;
|
|
18821
|
+
t14 += v * b8;
|
|
18822
|
+
t15 += v * b9;
|
|
18823
|
+
t16 += v * b10;
|
|
18824
|
+
t17 += v * b11;
|
|
18825
|
+
t18 += v * b12;
|
|
18826
|
+
t19 += v * b13;
|
|
18827
|
+
t20 += v * b14;
|
|
18828
|
+
t21 += v * b15;
|
|
18829
|
+
v = a[7];
|
|
18830
|
+
t7 += v * b0;
|
|
18831
|
+
t8 += v * b1;
|
|
18832
|
+
t9 += v * b2;
|
|
18833
|
+
t10 += v * b3;
|
|
18834
|
+
t11 += v * b4;
|
|
18835
|
+
t12 += v * b5;
|
|
18836
|
+
t13 += v * b6;
|
|
18837
|
+
t14 += v * b7;
|
|
18838
|
+
t15 += v * b8;
|
|
18839
|
+
t16 += v * b9;
|
|
18840
|
+
t17 += v * b10;
|
|
18841
|
+
t18 += v * b11;
|
|
18842
|
+
t19 += v * b12;
|
|
18843
|
+
t20 += v * b13;
|
|
18844
|
+
t21 += v * b14;
|
|
18845
|
+
t22 += v * b15;
|
|
18846
|
+
v = a[8];
|
|
18847
|
+
t8 += v * b0;
|
|
18848
|
+
t9 += v * b1;
|
|
18849
|
+
t10 += v * b2;
|
|
18850
|
+
t11 += v * b3;
|
|
18851
|
+
t12 += v * b4;
|
|
18852
|
+
t13 += v * b5;
|
|
18853
|
+
t14 += v * b6;
|
|
18854
|
+
t15 += v * b7;
|
|
18855
|
+
t16 += v * b8;
|
|
18856
|
+
t17 += v * b9;
|
|
18857
|
+
t18 += v * b10;
|
|
18858
|
+
t19 += v * b11;
|
|
18859
|
+
t20 += v * b12;
|
|
18860
|
+
t21 += v * b13;
|
|
18861
|
+
t22 += v * b14;
|
|
18862
|
+
t23 += v * b15;
|
|
18863
|
+
v = a[9];
|
|
18864
|
+
t9 += v * b0;
|
|
18865
|
+
t10 += v * b1;
|
|
18866
|
+
t11 += v * b2;
|
|
18867
|
+
t12 += v * b3;
|
|
18868
|
+
t13 += v * b4;
|
|
18869
|
+
t14 += v * b5;
|
|
18870
|
+
t15 += v * b6;
|
|
18871
|
+
t16 += v * b7;
|
|
18872
|
+
t17 += v * b8;
|
|
18873
|
+
t18 += v * b9;
|
|
18874
|
+
t19 += v * b10;
|
|
18875
|
+
t20 += v * b11;
|
|
18876
|
+
t21 += v * b12;
|
|
18877
|
+
t22 += v * b13;
|
|
18878
|
+
t23 += v * b14;
|
|
18879
|
+
t24 += v * b15;
|
|
18880
|
+
v = a[10];
|
|
18881
|
+
t10 += v * b0;
|
|
18882
|
+
t11 += v * b1;
|
|
18883
|
+
t12 += v * b2;
|
|
18884
|
+
t13 += v * b3;
|
|
18885
|
+
t14 += v * b4;
|
|
18886
|
+
t15 += v * b5;
|
|
18887
|
+
t16 += v * b6;
|
|
18888
|
+
t17 += v * b7;
|
|
18889
|
+
t18 += v * b8;
|
|
18890
|
+
t19 += v * b9;
|
|
18891
|
+
t20 += v * b10;
|
|
18892
|
+
t21 += v * b11;
|
|
18893
|
+
t22 += v * b12;
|
|
18894
|
+
t23 += v * b13;
|
|
18895
|
+
t24 += v * b14;
|
|
18896
|
+
t25 += v * b15;
|
|
18897
|
+
v = a[11];
|
|
18898
|
+
t11 += v * b0;
|
|
18899
|
+
t12 += v * b1;
|
|
18900
|
+
t13 += v * b2;
|
|
18901
|
+
t14 += v * b3;
|
|
18902
|
+
t15 += v * b4;
|
|
18903
|
+
t16 += v * b5;
|
|
18904
|
+
t17 += v * b6;
|
|
18905
|
+
t18 += v * b7;
|
|
18906
|
+
t19 += v * b8;
|
|
18907
|
+
t20 += v * b9;
|
|
18908
|
+
t21 += v * b10;
|
|
18909
|
+
t22 += v * b11;
|
|
18910
|
+
t23 += v * b12;
|
|
18911
|
+
t24 += v * b13;
|
|
18912
|
+
t25 += v * b14;
|
|
18913
|
+
t26 += v * b15;
|
|
18914
|
+
v = a[12];
|
|
18915
|
+
t12 += v * b0;
|
|
18916
|
+
t13 += v * b1;
|
|
18917
|
+
t14 += v * b2;
|
|
18918
|
+
t15 += v * b3;
|
|
18919
|
+
t16 += v * b4;
|
|
18920
|
+
t17 += v * b5;
|
|
18921
|
+
t18 += v * b6;
|
|
18922
|
+
t19 += v * b7;
|
|
18923
|
+
t20 += v * b8;
|
|
18924
|
+
t21 += v * b9;
|
|
18925
|
+
t22 += v * b10;
|
|
18926
|
+
t23 += v * b11;
|
|
18927
|
+
t24 += v * b12;
|
|
18928
|
+
t25 += v * b13;
|
|
18929
|
+
t26 += v * b14;
|
|
18930
|
+
t27 += v * b15;
|
|
18931
|
+
v = a[13];
|
|
18932
|
+
t13 += v * b0;
|
|
18933
|
+
t14 += v * b1;
|
|
18934
|
+
t15 += v * b2;
|
|
18935
|
+
t16 += v * b3;
|
|
18936
|
+
t17 += v * b4;
|
|
18937
|
+
t18 += v * b5;
|
|
18938
|
+
t19 += v * b6;
|
|
18939
|
+
t20 += v * b7;
|
|
18940
|
+
t21 += v * b8;
|
|
18941
|
+
t22 += v * b9;
|
|
18942
|
+
t23 += v * b10;
|
|
18943
|
+
t24 += v * b11;
|
|
18944
|
+
t25 += v * b12;
|
|
18945
|
+
t26 += v * b13;
|
|
18946
|
+
t27 += v * b14;
|
|
18947
|
+
t28 += v * b15;
|
|
18948
|
+
v = a[14];
|
|
18949
|
+
t14 += v * b0;
|
|
18950
|
+
t15 += v * b1;
|
|
18951
|
+
t16 += v * b2;
|
|
18952
|
+
t17 += v * b3;
|
|
18953
|
+
t18 += v * b4;
|
|
18954
|
+
t19 += v * b5;
|
|
18955
|
+
t20 += v * b6;
|
|
18956
|
+
t21 += v * b7;
|
|
18957
|
+
t22 += v * b8;
|
|
18958
|
+
t23 += v * b9;
|
|
18959
|
+
t24 += v * b10;
|
|
18960
|
+
t25 += v * b11;
|
|
18961
|
+
t26 += v * b12;
|
|
18962
|
+
t27 += v * b13;
|
|
18963
|
+
t28 += v * b14;
|
|
18964
|
+
t29 += v * b15;
|
|
18965
|
+
v = a[15];
|
|
18966
|
+
t15 += v * b0;
|
|
18967
|
+
t16 += v * b1;
|
|
18968
|
+
t17 += v * b2;
|
|
18969
|
+
t18 += v * b3;
|
|
18970
|
+
t19 += v * b4;
|
|
18971
|
+
t20 += v * b5;
|
|
18972
|
+
t21 += v * b6;
|
|
18973
|
+
t22 += v * b7;
|
|
18974
|
+
t23 += v * b8;
|
|
18975
|
+
t24 += v * b9;
|
|
18976
|
+
t25 += v * b10;
|
|
18977
|
+
t26 += v * b11;
|
|
18978
|
+
t27 += v * b12;
|
|
18979
|
+
t28 += v * b13;
|
|
18980
|
+
t29 += v * b14;
|
|
18981
|
+
t30 += v * b15;
|
|
18982
|
+
|
|
18983
|
+
t0 += 38 * t16;
|
|
18984
|
+
t1 += 38 * t17;
|
|
18985
|
+
t2 += 38 * t18;
|
|
18986
|
+
t3 += 38 * t19;
|
|
18987
|
+
t4 += 38 * t20;
|
|
18988
|
+
t5 += 38 * t21;
|
|
18989
|
+
t6 += 38 * t22;
|
|
18990
|
+
t7 += 38 * t23;
|
|
18991
|
+
t8 += 38 * t24;
|
|
18992
|
+
t9 += 38 * t25;
|
|
18993
|
+
t10 += 38 * t26;
|
|
18994
|
+
t11 += 38 * t27;
|
|
18995
|
+
t12 += 38 * t28;
|
|
18996
|
+
t13 += 38 * t29;
|
|
18997
|
+
t14 += 38 * t30;
|
|
18998
|
+
// t15 left as is
|
|
18999
|
+
|
|
19000
|
+
// first car
|
|
19001
|
+
c = 1;
|
|
19002
|
+
v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;
|
|
19003
|
+
v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;
|
|
19004
|
+
v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;
|
|
19005
|
+
v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;
|
|
19006
|
+
v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;
|
|
19007
|
+
v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;
|
|
19008
|
+
v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;
|
|
19009
|
+
v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;
|
|
19010
|
+
v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;
|
|
19011
|
+
v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;
|
|
19012
|
+
v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;
|
|
19013
|
+
v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;
|
|
19014
|
+
v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;
|
|
19015
|
+
v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;
|
|
19016
|
+
v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;
|
|
19017
|
+
v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;
|
|
19018
|
+
t0 += c-1 + 37 * (c-1);
|
|
19019
|
+
|
|
19020
|
+
// second car
|
|
19021
|
+
c = 1;
|
|
19022
|
+
v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;
|
|
19023
|
+
v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;
|
|
19024
|
+
v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;
|
|
19025
|
+
v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;
|
|
19026
|
+
v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;
|
|
19027
|
+
v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;
|
|
19028
|
+
v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;
|
|
19029
|
+
v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;
|
|
19030
|
+
v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;
|
|
19031
|
+
v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;
|
|
19032
|
+
v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;
|
|
19033
|
+
v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;
|
|
19034
|
+
v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;
|
|
19035
|
+
v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;
|
|
19036
|
+
v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;
|
|
19037
|
+
v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;
|
|
19038
|
+
t0 += c-1 + 37 * (c-1);
|
|
19039
|
+
|
|
19040
|
+
o[ 0] = t0;
|
|
19041
|
+
o[ 1] = t1;
|
|
19042
|
+
o[ 2] = t2;
|
|
19043
|
+
o[ 3] = t3;
|
|
19044
|
+
o[ 4] = t4;
|
|
19045
|
+
o[ 5] = t5;
|
|
19046
|
+
o[ 6] = t6;
|
|
19047
|
+
o[ 7] = t7;
|
|
19048
|
+
o[ 8] = t8;
|
|
19049
|
+
o[ 9] = t9;
|
|
19050
|
+
o[10] = t10;
|
|
19051
|
+
o[11] = t11;
|
|
19052
|
+
o[12] = t12;
|
|
19053
|
+
o[13] = t13;
|
|
19054
|
+
o[14] = t14;
|
|
19055
|
+
o[15] = t15;
|
|
19056
|
+
}
|
|
19057
|
+
|
|
19058
|
+
function S(o, a) {
|
|
19059
|
+
M(o, a, a);
|
|
19060
|
+
}
|
|
19061
|
+
|
|
19062
|
+
function inv25519(o, i) {
|
|
19063
|
+
var c = gf();
|
|
19064
|
+
var a;
|
|
19065
|
+
for (a = 0; a < 16; a++) c[a] = i[a];
|
|
19066
|
+
for (a = 253; a >= 0; a--) {
|
|
19067
|
+
S(c, c);
|
|
19068
|
+
if(a !== 2 && a !== 4) M(c, c, i);
|
|
19069
|
+
}
|
|
19070
|
+
for (a = 0; a < 16; a++) o[a] = c[a];
|
|
19071
|
+
}
|
|
19072
|
+
|
|
19073
|
+
function pow2523(o, i) {
|
|
19074
|
+
var c = gf();
|
|
19075
|
+
var a;
|
|
19076
|
+
for (a = 0; a < 16; a++) c[a] = i[a];
|
|
19077
|
+
for (a = 250; a >= 0; a--) {
|
|
19078
|
+
S(c, c);
|
|
19079
|
+
if(a !== 1) M(c, c, i);
|
|
19080
|
+
}
|
|
19081
|
+
for (a = 0; a < 16; a++) o[a] = c[a];
|
|
19082
|
+
}
|
|
19083
|
+
|
|
19084
|
+
function crypto_scalarmult(q, n, p) {
|
|
19085
|
+
var z = new Uint8Array(32);
|
|
19086
|
+
var x = new Float64Array(80), r, i;
|
|
19087
|
+
var a = gf(), b = gf(), c = gf(),
|
|
19088
|
+
d = gf(), e = gf(), f = gf();
|
|
19089
|
+
for (i = 0; i < 31; i++) z[i] = n[i];
|
|
19090
|
+
z[31]=(n[31]&127)|64;
|
|
19091
|
+
z[0]&=248;
|
|
19092
|
+
unpack25519(x,p);
|
|
19093
|
+
for (i = 0; i < 16; i++) {
|
|
19094
|
+
b[i]=x[i];
|
|
19095
|
+
d[i]=a[i]=c[i]=0;
|
|
19096
|
+
}
|
|
19097
|
+
a[0]=d[0]=1;
|
|
19098
|
+
for (i=254; i>=0; --i) {
|
|
19099
|
+
r=(z[i>>>3]>>>(i&7))&1;
|
|
19100
|
+
sel25519(a,b,r);
|
|
19101
|
+
sel25519(c,d,r);
|
|
19102
|
+
A(e,a,c);
|
|
19103
|
+
Z(a,a,c);
|
|
19104
|
+
A(c,b,d);
|
|
19105
|
+
Z(b,b,d);
|
|
19106
|
+
S(d,e);
|
|
19107
|
+
S(f,a);
|
|
19108
|
+
M(a,c,a);
|
|
19109
|
+
M(c,b,e);
|
|
19110
|
+
A(e,a,c);
|
|
19111
|
+
Z(a,a,c);
|
|
19112
|
+
S(b,a);
|
|
19113
|
+
Z(c,d,f);
|
|
19114
|
+
M(a,c,_121665);
|
|
19115
|
+
A(a,a,d);
|
|
19116
|
+
M(c,c,a);
|
|
19117
|
+
M(a,d,f);
|
|
19118
|
+
M(d,b,x);
|
|
19119
|
+
S(b,e);
|
|
19120
|
+
sel25519(a,b,r);
|
|
19121
|
+
sel25519(c,d,r);
|
|
19122
|
+
}
|
|
19123
|
+
for (i = 0; i < 16; i++) {
|
|
19124
|
+
x[i+16]=a[i];
|
|
19125
|
+
x[i+32]=c[i];
|
|
19126
|
+
x[i+48]=b[i];
|
|
19127
|
+
x[i+64]=d[i];
|
|
19128
|
+
}
|
|
19129
|
+
var x32 = x.subarray(32);
|
|
19130
|
+
var x16 = x.subarray(16);
|
|
19131
|
+
inv25519(x32,x32);
|
|
19132
|
+
M(x16,x16,x32);
|
|
19133
|
+
pack25519(q,x16);
|
|
19134
|
+
return 0;
|
|
19135
|
+
}
|
|
19136
|
+
|
|
19137
|
+
function crypto_scalarmult_base(q, n) {
|
|
19138
|
+
return crypto_scalarmult(q, n, _9);
|
|
19139
|
+
}
|
|
19140
|
+
|
|
19141
|
+
function crypto_box_keypair(y, x) {
|
|
19142
|
+
randombytes(x, 32);
|
|
19143
|
+
return crypto_scalarmult_base(y, x);
|
|
19144
|
+
}
|
|
19145
|
+
|
|
19146
|
+
function crypto_box_beforenm(k, y, x) {
|
|
19147
|
+
var s = new Uint8Array(32);
|
|
19148
|
+
crypto_scalarmult(s, x, y);
|
|
19149
|
+
return crypto_core_hsalsa20(k, _0, s, sigma);
|
|
19150
|
+
}
|
|
19151
|
+
|
|
19152
|
+
var crypto_box_afternm = crypto_secretbox;
|
|
19153
|
+
var crypto_box_open_afternm = crypto_secretbox_open;
|
|
19154
|
+
|
|
19155
|
+
function crypto_box(c, m, d, n, y, x) {
|
|
19156
|
+
var k = new Uint8Array(32);
|
|
19157
|
+
crypto_box_beforenm(k, y, x);
|
|
19158
|
+
return crypto_box_afternm(c, m, d, n, k);
|
|
19159
|
+
}
|
|
19160
|
+
|
|
19161
|
+
function crypto_box_open(m, c, d, n, y, x) {
|
|
19162
|
+
var k = new Uint8Array(32);
|
|
19163
|
+
crypto_box_beforenm(k, y, x);
|
|
19164
|
+
return crypto_box_open_afternm(m, c, d, n, k);
|
|
19165
|
+
}
|
|
19166
|
+
|
|
19167
|
+
var K = [
|
|
19168
|
+
0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
|
|
19169
|
+
0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
|
|
19170
|
+
0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
|
|
19171
|
+
0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
|
|
19172
|
+
0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
|
|
19173
|
+
0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
|
|
19174
|
+
0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
|
|
19175
|
+
0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
|
|
19176
|
+
0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
|
|
19177
|
+
0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
|
|
19178
|
+
0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
|
|
19179
|
+
0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
|
|
19180
|
+
0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
|
|
19181
|
+
0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
|
|
19182
|
+
0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
|
|
19183
|
+
0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
|
|
19184
|
+
0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
|
|
19185
|
+
0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
|
|
19186
|
+
0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
|
|
19187
|
+
0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
|
|
19188
|
+
0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
|
|
19189
|
+
0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
|
|
19190
|
+
0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
|
|
19191
|
+
0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
|
|
19192
|
+
0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
|
|
19193
|
+
0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
|
|
19194
|
+
0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
|
|
19195
|
+
0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
|
|
19196
|
+
0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
|
|
19197
|
+
0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
|
|
19198
|
+
0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
|
|
19199
|
+
0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
|
|
19200
|
+
0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
|
|
19201
|
+
0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
|
|
19202
|
+
0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
|
|
19203
|
+
0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
|
|
19204
|
+
0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
|
|
19205
|
+
0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
|
|
19206
|
+
0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
|
|
19207
|
+
0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
|
|
19208
|
+
];
|
|
19209
|
+
|
|
19210
|
+
function crypto_hashblocks_hl(hh, hl, m, n) {
|
|
19211
|
+
var wh = new Int32Array(16), wl = new Int32Array(16),
|
|
19212
|
+
bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7,
|
|
19213
|
+
bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7,
|
|
19214
|
+
th, tl, i, j, h, l, a, b, c, d;
|
|
19215
|
+
|
|
19216
|
+
var ah0 = hh[0],
|
|
19217
|
+
ah1 = hh[1],
|
|
19218
|
+
ah2 = hh[2],
|
|
19219
|
+
ah3 = hh[3],
|
|
19220
|
+
ah4 = hh[4],
|
|
19221
|
+
ah5 = hh[5],
|
|
19222
|
+
ah6 = hh[6],
|
|
19223
|
+
ah7 = hh[7],
|
|
19224
|
+
|
|
19225
|
+
al0 = hl[0],
|
|
19226
|
+
al1 = hl[1],
|
|
19227
|
+
al2 = hl[2],
|
|
19228
|
+
al3 = hl[3],
|
|
19229
|
+
al4 = hl[4],
|
|
19230
|
+
al5 = hl[5],
|
|
19231
|
+
al6 = hl[6],
|
|
19232
|
+
al7 = hl[7];
|
|
19233
|
+
|
|
19234
|
+
var pos = 0;
|
|
19235
|
+
while (n >= 128) {
|
|
19236
|
+
for (i = 0; i < 16; i++) {
|
|
19237
|
+
j = 8 * i + pos;
|
|
19238
|
+
wh[i] = (m[j+0] << 24) | (m[j+1] << 16) | (m[j+2] << 8) | m[j+3];
|
|
19239
|
+
wl[i] = (m[j+4] << 24) | (m[j+5] << 16) | (m[j+6] << 8) | m[j+7];
|
|
19240
|
+
}
|
|
19241
|
+
for (i = 0; i < 80; i++) {
|
|
19242
|
+
bh0 = ah0;
|
|
19243
|
+
bh1 = ah1;
|
|
19244
|
+
bh2 = ah2;
|
|
19245
|
+
bh3 = ah3;
|
|
19246
|
+
bh4 = ah4;
|
|
19247
|
+
bh5 = ah5;
|
|
19248
|
+
bh6 = ah6;
|
|
19249
|
+
bh7 = ah7;
|
|
19250
|
+
|
|
19251
|
+
bl0 = al0;
|
|
19252
|
+
bl1 = al1;
|
|
19253
|
+
bl2 = al2;
|
|
19254
|
+
bl3 = al3;
|
|
19255
|
+
bl4 = al4;
|
|
19256
|
+
bl5 = al5;
|
|
19257
|
+
bl6 = al6;
|
|
19258
|
+
bl7 = al7;
|
|
19259
|
+
|
|
19260
|
+
// add
|
|
19261
|
+
h = ah7;
|
|
19262
|
+
l = al7;
|
|
19263
|
+
|
|
19264
|
+
a = l & 0xffff; b = l >>> 16;
|
|
19265
|
+
c = h & 0xffff; d = h >>> 16;
|
|
19266
|
+
|
|
19267
|
+
// Sigma1
|
|
19268
|
+
h = ((ah4 >>> 14) | (al4 << (32-14))) ^ ((ah4 >>> 18) | (al4 << (32-18))) ^ ((al4 >>> (41-32)) | (ah4 << (32-(41-32))));
|
|
19269
|
+
l = ((al4 >>> 14) | (ah4 << (32-14))) ^ ((al4 >>> 18) | (ah4 << (32-18))) ^ ((ah4 >>> (41-32)) | (al4 << (32-(41-32))));
|
|
19270
|
+
|
|
19271
|
+
a += l & 0xffff; b += l >>> 16;
|
|
19272
|
+
c += h & 0xffff; d += h >>> 16;
|
|
19273
|
+
|
|
19274
|
+
// Ch
|
|
19275
|
+
h = (ah4 & ah5) ^ (~ah4 & ah6);
|
|
19276
|
+
l = (al4 & al5) ^ (~al4 & al6);
|
|
19277
|
+
|
|
19278
|
+
a += l & 0xffff; b += l >>> 16;
|
|
19279
|
+
c += h & 0xffff; d += h >>> 16;
|
|
19280
|
+
|
|
19281
|
+
// K
|
|
19282
|
+
h = K[i*2];
|
|
19283
|
+
l = K[i*2+1];
|
|
19284
|
+
|
|
19285
|
+
a += l & 0xffff; b += l >>> 16;
|
|
19286
|
+
c += h & 0xffff; d += h >>> 16;
|
|
19287
|
+
|
|
19288
|
+
// w
|
|
19289
|
+
h = wh[i%16];
|
|
19290
|
+
l = wl[i%16];
|
|
19291
|
+
|
|
19292
|
+
a += l & 0xffff; b += l >>> 16;
|
|
19293
|
+
c += h & 0xffff; d += h >>> 16;
|
|
19294
|
+
|
|
19295
|
+
b += a >>> 16;
|
|
19296
|
+
c += b >>> 16;
|
|
19297
|
+
d += c >>> 16;
|
|
19298
|
+
|
|
19299
|
+
th = c & 0xffff | d << 16;
|
|
19300
|
+
tl = a & 0xffff | b << 16;
|
|
19301
|
+
|
|
19302
|
+
// add
|
|
19303
|
+
h = th;
|
|
19304
|
+
l = tl;
|
|
19305
|
+
|
|
19306
|
+
a = l & 0xffff; b = l >>> 16;
|
|
19307
|
+
c = h & 0xffff; d = h >>> 16;
|
|
19308
|
+
|
|
19309
|
+
// Sigma0
|
|
19310
|
+
h = ((ah0 >>> 28) | (al0 << (32-28))) ^ ((al0 >>> (34-32)) | (ah0 << (32-(34-32)))) ^ ((al0 >>> (39-32)) | (ah0 << (32-(39-32))));
|
|
19311
|
+
l = ((al0 >>> 28) | (ah0 << (32-28))) ^ ((ah0 >>> (34-32)) | (al0 << (32-(34-32)))) ^ ((ah0 >>> (39-32)) | (al0 << (32-(39-32))));
|
|
19312
|
+
|
|
19313
|
+
a += l & 0xffff; b += l >>> 16;
|
|
19314
|
+
c += h & 0xffff; d += h >>> 16;
|
|
19315
|
+
|
|
19316
|
+
// Maj
|
|
19317
|
+
h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2);
|
|
19318
|
+
l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2);
|
|
19319
|
+
|
|
19320
|
+
a += l & 0xffff; b += l >>> 16;
|
|
19321
|
+
c += h & 0xffff; d += h >>> 16;
|
|
19322
|
+
|
|
19323
|
+
b += a >>> 16;
|
|
19324
|
+
c += b >>> 16;
|
|
19325
|
+
d += c >>> 16;
|
|
19326
|
+
|
|
19327
|
+
bh7 = (c & 0xffff) | (d << 16);
|
|
19328
|
+
bl7 = (a & 0xffff) | (b << 16);
|
|
19329
|
+
|
|
19330
|
+
// add
|
|
19331
|
+
h = bh3;
|
|
19332
|
+
l = bl3;
|
|
19333
|
+
|
|
19334
|
+
a = l & 0xffff; b = l >>> 16;
|
|
19335
|
+
c = h & 0xffff; d = h >>> 16;
|
|
19336
|
+
|
|
19337
|
+
h = th;
|
|
19338
|
+
l = tl;
|
|
19339
|
+
|
|
19340
|
+
a += l & 0xffff; b += l >>> 16;
|
|
19341
|
+
c += h & 0xffff; d += h >>> 16;
|
|
19342
|
+
|
|
19343
|
+
b += a >>> 16;
|
|
19344
|
+
c += b >>> 16;
|
|
19345
|
+
d += c >>> 16;
|
|
19346
|
+
|
|
19347
|
+
bh3 = (c & 0xffff) | (d << 16);
|
|
19348
|
+
bl3 = (a & 0xffff) | (b << 16);
|
|
19349
|
+
|
|
19350
|
+
ah1 = bh0;
|
|
19351
|
+
ah2 = bh1;
|
|
19352
|
+
ah3 = bh2;
|
|
19353
|
+
ah4 = bh3;
|
|
19354
|
+
ah5 = bh4;
|
|
19355
|
+
ah6 = bh5;
|
|
19356
|
+
ah7 = bh6;
|
|
19357
|
+
ah0 = bh7;
|
|
19358
|
+
|
|
19359
|
+
al1 = bl0;
|
|
19360
|
+
al2 = bl1;
|
|
19361
|
+
al3 = bl2;
|
|
19362
|
+
al4 = bl3;
|
|
19363
|
+
al5 = bl4;
|
|
19364
|
+
al6 = bl5;
|
|
19365
|
+
al7 = bl6;
|
|
19366
|
+
al0 = bl7;
|
|
19367
|
+
|
|
19368
|
+
if (i%16 === 15) {
|
|
19369
|
+
for (j = 0; j < 16; j++) {
|
|
19370
|
+
// add
|
|
19371
|
+
h = wh[j];
|
|
19372
|
+
l = wl[j];
|
|
19373
|
+
|
|
19374
|
+
a = l & 0xffff; b = l >>> 16;
|
|
19375
|
+
c = h & 0xffff; d = h >>> 16;
|
|
19376
|
+
|
|
19377
|
+
h = wh[(j+9)%16];
|
|
19378
|
+
l = wl[(j+9)%16];
|
|
19379
|
+
|
|
19380
|
+
a += l & 0xffff; b += l >>> 16;
|
|
19381
|
+
c += h & 0xffff; d += h >>> 16;
|
|
19382
|
+
|
|
19383
|
+
// sigma0
|
|
19384
|
+
th = wh[(j+1)%16];
|
|
19385
|
+
tl = wl[(j+1)%16];
|
|
19386
|
+
h = ((th >>> 1) | (tl << (32-1))) ^ ((th >>> 8) | (tl << (32-8))) ^ (th >>> 7);
|
|
19387
|
+
l = ((tl >>> 1) | (th << (32-1))) ^ ((tl >>> 8) | (th << (32-8))) ^ ((tl >>> 7) | (th << (32-7)));
|
|
19388
|
+
|
|
19389
|
+
a += l & 0xffff; b += l >>> 16;
|
|
19390
|
+
c += h & 0xffff; d += h >>> 16;
|
|
19391
|
+
|
|
19392
|
+
// sigma1
|
|
19393
|
+
th = wh[(j+14)%16];
|
|
19394
|
+
tl = wl[(j+14)%16];
|
|
19395
|
+
h = ((th >>> 19) | (tl << (32-19))) ^ ((tl >>> (61-32)) | (th << (32-(61-32)))) ^ (th >>> 6);
|
|
19396
|
+
l = ((tl >>> 19) | (th << (32-19))) ^ ((th >>> (61-32)) | (tl << (32-(61-32)))) ^ ((tl >>> 6) | (th << (32-6)));
|
|
19397
|
+
|
|
19398
|
+
a += l & 0xffff; b += l >>> 16;
|
|
19399
|
+
c += h & 0xffff; d += h >>> 16;
|
|
19400
|
+
|
|
19401
|
+
b += a >>> 16;
|
|
19402
|
+
c += b >>> 16;
|
|
19403
|
+
d += c >>> 16;
|
|
19404
|
+
|
|
19405
|
+
wh[j] = (c & 0xffff) | (d << 16);
|
|
19406
|
+
wl[j] = (a & 0xffff) | (b << 16);
|
|
19407
|
+
}
|
|
19408
|
+
}
|
|
19409
|
+
}
|
|
19410
|
+
|
|
19411
|
+
// add
|
|
19412
|
+
h = ah0;
|
|
19413
|
+
l = al0;
|
|
19414
|
+
|
|
19415
|
+
a = l & 0xffff; b = l >>> 16;
|
|
19416
|
+
c = h & 0xffff; d = h >>> 16;
|
|
19417
|
+
|
|
19418
|
+
h = hh[0];
|
|
19419
|
+
l = hl[0];
|
|
19420
|
+
|
|
19421
|
+
a += l & 0xffff; b += l >>> 16;
|
|
19422
|
+
c += h & 0xffff; d += h >>> 16;
|
|
19423
|
+
|
|
19424
|
+
b += a >>> 16;
|
|
19425
|
+
c += b >>> 16;
|
|
19426
|
+
d += c >>> 16;
|
|
19427
|
+
|
|
19428
|
+
hh[0] = ah0 = (c & 0xffff) | (d << 16);
|
|
19429
|
+
hl[0] = al0 = (a & 0xffff) | (b << 16);
|
|
19430
|
+
|
|
19431
|
+
h = ah1;
|
|
19432
|
+
l = al1;
|
|
19433
|
+
|
|
19434
|
+
a = l & 0xffff; b = l >>> 16;
|
|
19435
|
+
c = h & 0xffff; d = h >>> 16;
|
|
19436
|
+
|
|
19437
|
+
h = hh[1];
|
|
19438
|
+
l = hl[1];
|
|
19439
|
+
|
|
19440
|
+
a += l & 0xffff; b += l >>> 16;
|
|
19441
|
+
c += h & 0xffff; d += h >>> 16;
|
|
19442
|
+
|
|
19443
|
+
b += a >>> 16;
|
|
19444
|
+
c += b >>> 16;
|
|
19445
|
+
d += c >>> 16;
|
|
19446
|
+
|
|
19447
|
+
hh[1] = ah1 = (c & 0xffff) | (d << 16);
|
|
19448
|
+
hl[1] = al1 = (a & 0xffff) | (b << 16);
|
|
19449
|
+
|
|
19450
|
+
h = ah2;
|
|
19451
|
+
l = al2;
|
|
19452
|
+
|
|
19453
|
+
a = l & 0xffff; b = l >>> 16;
|
|
19454
|
+
c = h & 0xffff; d = h >>> 16;
|
|
19455
|
+
|
|
19456
|
+
h = hh[2];
|
|
19457
|
+
l = hl[2];
|
|
19458
|
+
|
|
19459
|
+
a += l & 0xffff; b += l >>> 16;
|
|
19460
|
+
c += h & 0xffff; d += h >>> 16;
|
|
19461
|
+
|
|
19462
|
+
b += a >>> 16;
|
|
19463
|
+
c += b >>> 16;
|
|
19464
|
+
d += c >>> 16;
|
|
19465
|
+
|
|
19466
|
+
hh[2] = ah2 = (c & 0xffff) | (d << 16);
|
|
19467
|
+
hl[2] = al2 = (a & 0xffff) | (b << 16);
|
|
19468
|
+
|
|
19469
|
+
h = ah3;
|
|
19470
|
+
l = al3;
|
|
19471
|
+
|
|
19472
|
+
a = l & 0xffff; b = l >>> 16;
|
|
19473
|
+
c = h & 0xffff; d = h >>> 16;
|
|
19474
|
+
|
|
19475
|
+
h = hh[3];
|
|
19476
|
+
l = hl[3];
|
|
19477
|
+
|
|
19478
|
+
a += l & 0xffff; b += l >>> 16;
|
|
19479
|
+
c += h & 0xffff; d += h >>> 16;
|
|
19480
|
+
|
|
19481
|
+
b += a >>> 16;
|
|
19482
|
+
c += b >>> 16;
|
|
19483
|
+
d += c >>> 16;
|
|
19484
|
+
|
|
19485
|
+
hh[3] = ah3 = (c & 0xffff) | (d << 16);
|
|
19486
|
+
hl[3] = al3 = (a & 0xffff) | (b << 16);
|
|
19487
|
+
|
|
19488
|
+
h = ah4;
|
|
19489
|
+
l = al4;
|
|
19490
|
+
|
|
19491
|
+
a = l & 0xffff; b = l >>> 16;
|
|
19492
|
+
c = h & 0xffff; d = h >>> 16;
|
|
19493
|
+
|
|
19494
|
+
h = hh[4];
|
|
19495
|
+
l = hl[4];
|
|
19496
|
+
|
|
19497
|
+
a += l & 0xffff; b += l >>> 16;
|
|
19498
|
+
c += h & 0xffff; d += h >>> 16;
|
|
19499
|
+
|
|
19500
|
+
b += a >>> 16;
|
|
19501
|
+
c += b >>> 16;
|
|
19502
|
+
d += c >>> 16;
|
|
19503
|
+
|
|
19504
|
+
hh[4] = ah4 = (c & 0xffff) | (d << 16);
|
|
19505
|
+
hl[4] = al4 = (a & 0xffff) | (b << 16);
|
|
19506
|
+
|
|
19507
|
+
h = ah5;
|
|
19508
|
+
l = al5;
|
|
19509
|
+
|
|
19510
|
+
a = l & 0xffff; b = l >>> 16;
|
|
19511
|
+
c = h & 0xffff; d = h >>> 16;
|
|
19512
|
+
|
|
19513
|
+
h = hh[5];
|
|
19514
|
+
l = hl[5];
|
|
19515
|
+
|
|
19516
|
+
a += l & 0xffff; b += l >>> 16;
|
|
19517
|
+
c += h & 0xffff; d += h >>> 16;
|
|
19518
|
+
|
|
19519
|
+
b += a >>> 16;
|
|
19520
|
+
c += b >>> 16;
|
|
19521
|
+
d += c >>> 16;
|
|
19522
|
+
|
|
19523
|
+
hh[5] = ah5 = (c & 0xffff) | (d << 16);
|
|
19524
|
+
hl[5] = al5 = (a & 0xffff) | (b << 16);
|
|
19525
|
+
|
|
19526
|
+
h = ah6;
|
|
19527
|
+
l = al6;
|
|
19528
|
+
|
|
19529
|
+
a = l & 0xffff; b = l >>> 16;
|
|
19530
|
+
c = h & 0xffff; d = h >>> 16;
|
|
19531
|
+
|
|
19532
|
+
h = hh[6];
|
|
19533
|
+
l = hl[6];
|
|
19534
|
+
|
|
19535
|
+
a += l & 0xffff; b += l >>> 16;
|
|
19536
|
+
c += h & 0xffff; d += h >>> 16;
|
|
19537
|
+
|
|
19538
|
+
b += a >>> 16;
|
|
19539
|
+
c += b >>> 16;
|
|
19540
|
+
d += c >>> 16;
|
|
19541
|
+
|
|
19542
|
+
hh[6] = ah6 = (c & 0xffff) | (d << 16);
|
|
19543
|
+
hl[6] = al6 = (a & 0xffff) | (b << 16);
|
|
19544
|
+
|
|
19545
|
+
h = ah7;
|
|
19546
|
+
l = al7;
|
|
19547
|
+
|
|
19548
|
+
a = l & 0xffff; b = l >>> 16;
|
|
19549
|
+
c = h & 0xffff; d = h >>> 16;
|
|
19550
|
+
|
|
19551
|
+
h = hh[7];
|
|
19552
|
+
l = hl[7];
|
|
19553
|
+
|
|
19554
|
+
a += l & 0xffff; b += l >>> 16;
|
|
19555
|
+
c += h & 0xffff; d += h >>> 16;
|
|
19556
|
+
|
|
19557
|
+
b += a >>> 16;
|
|
19558
|
+
c += b >>> 16;
|
|
19559
|
+
d += c >>> 16;
|
|
19560
|
+
|
|
19561
|
+
hh[7] = ah7 = (c & 0xffff) | (d << 16);
|
|
19562
|
+
hl[7] = al7 = (a & 0xffff) | (b << 16);
|
|
19563
|
+
|
|
19564
|
+
pos += 128;
|
|
19565
|
+
n -= 128;
|
|
19566
|
+
}
|
|
19567
|
+
|
|
19568
|
+
return n;
|
|
19569
|
+
}
|
|
19570
|
+
|
|
19571
|
+
function crypto_hash(out, m, n) {
|
|
19572
|
+
var hh = new Int32Array(8),
|
|
19573
|
+
hl = new Int32Array(8),
|
|
19574
|
+
x = new Uint8Array(256),
|
|
19575
|
+
i, b = n;
|
|
19576
|
+
|
|
19577
|
+
hh[0] = 0x6a09e667;
|
|
19578
|
+
hh[1] = 0xbb67ae85;
|
|
19579
|
+
hh[2] = 0x3c6ef372;
|
|
19580
|
+
hh[3] = 0xa54ff53a;
|
|
19581
|
+
hh[4] = 0x510e527f;
|
|
19582
|
+
hh[5] = 0x9b05688c;
|
|
19583
|
+
hh[6] = 0x1f83d9ab;
|
|
19584
|
+
hh[7] = 0x5be0cd19;
|
|
19585
|
+
|
|
19586
|
+
hl[0] = 0xf3bcc908;
|
|
19587
|
+
hl[1] = 0x84caa73b;
|
|
19588
|
+
hl[2] = 0xfe94f82b;
|
|
19589
|
+
hl[3] = 0x5f1d36f1;
|
|
19590
|
+
hl[4] = 0xade682d1;
|
|
19591
|
+
hl[5] = 0x2b3e6c1f;
|
|
19592
|
+
hl[6] = 0xfb41bd6b;
|
|
19593
|
+
hl[7] = 0x137e2179;
|
|
19594
|
+
|
|
19595
|
+
crypto_hashblocks_hl(hh, hl, m, n);
|
|
19596
|
+
n %= 128;
|
|
19597
|
+
|
|
19598
|
+
for (i = 0; i < n; i++) x[i] = m[b-n+i];
|
|
19599
|
+
x[n] = 128;
|
|
19600
|
+
|
|
19601
|
+
n = 256-128*(n<112?1:0);
|
|
19602
|
+
x[n-9] = 0;
|
|
19603
|
+
ts64(x, n-8, (b / 0x20000000) | 0, b << 3);
|
|
19604
|
+
crypto_hashblocks_hl(hh, hl, x, n);
|
|
19605
|
+
|
|
19606
|
+
for (i = 0; i < 8; i++) ts64(out, 8*i, hh[i], hl[i]);
|
|
19607
|
+
|
|
19608
|
+
return 0;
|
|
19609
|
+
}
|
|
19610
|
+
|
|
19611
|
+
function add(p, q) {
|
|
19612
|
+
var a = gf(), b = gf(), c = gf(),
|
|
19613
|
+
d = gf(), e = gf(), f = gf(),
|
|
19614
|
+
g = gf(), h = gf(), t = gf();
|
|
19615
|
+
|
|
19616
|
+
Z(a, p[1], p[0]);
|
|
19617
|
+
Z(t, q[1], q[0]);
|
|
19618
|
+
M(a, a, t);
|
|
19619
|
+
A(b, p[0], p[1]);
|
|
19620
|
+
A(t, q[0], q[1]);
|
|
19621
|
+
M(b, b, t);
|
|
19622
|
+
M(c, p[3], q[3]);
|
|
19623
|
+
M(c, c, D2);
|
|
19624
|
+
M(d, p[2], q[2]);
|
|
19625
|
+
A(d, d, d);
|
|
19626
|
+
Z(e, b, a);
|
|
19627
|
+
Z(f, d, c);
|
|
19628
|
+
A(g, d, c);
|
|
19629
|
+
A(h, b, a);
|
|
19630
|
+
|
|
19631
|
+
M(p[0], e, f);
|
|
19632
|
+
M(p[1], h, g);
|
|
19633
|
+
M(p[2], g, f);
|
|
19634
|
+
M(p[3], e, h);
|
|
19635
|
+
}
|
|
19636
|
+
|
|
19637
|
+
function cswap(p, q, b) {
|
|
19638
|
+
var i;
|
|
19639
|
+
for (i = 0; i < 4; i++) {
|
|
19640
|
+
sel25519(p[i], q[i], b);
|
|
19641
|
+
}
|
|
19642
|
+
}
|
|
19643
|
+
|
|
19644
|
+
function pack(r, p) {
|
|
19645
|
+
var tx = gf(), ty = gf(), zi = gf();
|
|
19646
|
+
inv25519(zi, p[2]);
|
|
19647
|
+
M(tx, p[0], zi);
|
|
19648
|
+
M(ty, p[1], zi);
|
|
19649
|
+
pack25519(r, ty);
|
|
19650
|
+
r[31] ^= par25519(tx) << 7;
|
|
19651
|
+
}
|
|
19652
|
+
|
|
19653
|
+
function scalarmult(p, q, s) {
|
|
19654
|
+
var b, i;
|
|
19655
|
+
set25519(p[0], gf0);
|
|
19656
|
+
set25519(p[1], gf1);
|
|
19657
|
+
set25519(p[2], gf1);
|
|
19658
|
+
set25519(p[3], gf0);
|
|
19659
|
+
for (i = 255; i >= 0; --i) {
|
|
19660
|
+
b = (s[(i/8)|0] >> (i&7)) & 1;
|
|
19661
|
+
cswap(p, q, b);
|
|
19662
|
+
add(q, p);
|
|
19663
|
+
add(p, p);
|
|
19664
|
+
cswap(p, q, b);
|
|
19665
|
+
}
|
|
19666
|
+
}
|
|
19667
|
+
|
|
19668
|
+
function scalarbase(p, s) {
|
|
19669
|
+
var q = [gf(), gf(), gf(), gf()];
|
|
19670
|
+
set25519(q[0], X);
|
|
19671
|
+
set25519(q[1], Y);
|
|
19672
|
+
set25519(q[2], gf1);
|
|
19673
|
+
M(q[3], X, Y);
|
|
19674
|
+
scalarmult(p, q, s);
|
|
19675
|
+
}
|
|
19676
|
+
|
|
19677
|
+
function crypto_sign_keypair(pk, sk, seeded) {
|
|
19678
|
+
var d = new Uint8Array(64);
|
|
19679
|
+
var p = [gf(), gf(), gf(), gf()];
|
|
19680
|
+
var i;
|
|
19681
|
+
|
|
19682
|
+
if (!seeded) randombytes(sk, 32);
|
|
19683
|
+
crypto_hash(d, sk, 32);
|
|
19684
|
+
d[0] &= 248;
|
|
19685
|
+
d[31] &= 127;
|
|
19686
|
+
d[31] |= 64;
|
|
19687
|
+
|
|
19688
|
+
scalarbase(p, d);
|
|
19689
|
+
pack(pk, p);
|
|
19690
|
+
|
|
19691
|
+
for (i = 0; i < 32; i++) sk[i+32] = pk[i];
|
|
19692
|
+
return 0;
|
|
19693
|
+
}
|
|
19694
|
+
|
|
19695
|
+
var L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]);
|
|
19696
|
+
|
|
19697
|
+
function modL(r, x) {
|
|
19698
|
+
var carry, i, j, k;
|
|
19699
|
+
for (i = 63; i >= 32; --i) {
|
|
19700
|
+
carry = 0;
|
|
19701
|
+
for (j = i - 32, k = i - 12; j < k; ++j) {
|
|
19702
|
+
x[j] += carry - 16 * x[i] * L[j - (i - 32)];
|
|
19703
|
+
carry = Math.floor((x[j] + 128) / 256);
|
|
19704
|
+
x[j] -= carry * 256;
|
|
19705
|
+
}
|
|
19706
|
+
x[j] += carry;
|
|
19707
|
+
x[i] = 0;
|
|
19708
|
+
}
|
|
19709
|
+
carry = 0;
|
|
19710
|
+
for (j = 0; j < 32; j++) {
|
|
19711
|
+
x[j] += carry - (x[31] >> 4) * L[j];
|
|
19712
|
+
carry = x[j] >> 8;
|
|
19713
|
+
x[j] &= 255;
|
|
19714
|
+
}
|
|
19715
|
+
for (j = 0; j < 32; j++) x[j] -= carry * L[j];
|
|
19716
|
+
for (i = 0; i < 32; i++) {
|
|
19717
|
+
x[i+1] += x[i] >> 8;
|
|
19718
|
+
r[i] = x[i] & 255;
|
|
19719
|
+
}
|
|
19720
|
+
}
|
|
19721
|
+
|
|
19722
|
+
function reduce(r) {
|
|
19723
|
+
var x = new Float64Array(64), i;
|
|
19724
|
+
for (i = 0; i < 64; i++) x[i] = r[i];
|
|
19725
|
+
for (i = 0; i < 64; i++) r[i] = 0;
|
|
19726
|
+
modL(r, x);
|
|
19727
|
+
}
|
|
19728
|
+
|
|
19729
|
+
// Note: difference from C - smlen returned, not passed as argument.
|
|
19730
|
+
function crypto_sign(sm, m, n, sk) {
|
|
19731
|
+
var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64);
|
|
19732
|
+
var i, j, x = new Float64Array(64);
|
|
19733
|
+
var p = [gf(), gf(), gf(), gf()];
|
|
19734
|
+
|
|
19735
|
+
crypto_hash(d, sk, 32);
|
|
19736
|
+
d[0] &= 248;
|
|
19737
|
+
d[31] &= 127;
|
|
19738
|
+
d[31] |= 64;
|
|
19739
|
+
|
|
19740
|
+
var smlen = n + 64;
|
|
19741
|
+
for (i = 0; i < n; i++) sm[64 + i] = m[i];
|
|
19742
|
+
for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i];
|
|
19743
|
+
|
|
19744
|
+
crypto_hash(r, sm.subarray(32), n+32);
|
|
19745
|
+
reduce(r);
|
|
19746
|
+
scalarbase(p, r);
|
|
19747
|
+
pack(sm, p);
|
|
19748
|
+
|
|
19749
|
+
for (i = 32; i < 64; i++) sm[i] = sk[i];
|
|
19750
|
+
crypto_hash(h, sm, n + 64);
|
|
19751
|
+
reduce(h);
|
|
19752
|
+
|
|
19753
|
+
for (i = 0; i < 64; i++) x[i] = 0;
|
|
19754
|
+
for (i = 0; i < 32; i++) x[i] = r[i];
|
|
19755
|
+
for (i = 0; i < 32; i++) {
|
|
19756
|
+
for (j = 0; j < 32; j++) {
|
|
19757
|
+
x[i+j] += h[i] * d[j];
|
|
19758
|
+
}
|
|
19759
|
+
}
|
|
19760
|
+
|
|
19761
|
+
modL(sm.subarray(32), x);
|
|
19762
|
+
return smlen;
|
|
19763
|
+
}
|
|
19764
|
+
|
|
19765
|
+
function unpackneg(r, p) {
|
|
19766
|
+
var t = gf(), chk = gf(), num = gf(),
|
|
19767
|
+
den = gf(), den2 = gf(), den4 = gf(),
|
|
19768
|
+
den6 = gf();
|
|
19769
|
+
|
|
19770
|
+
set25519(r[2], gf1);
|
|
19771
|
+
unpack25519(r[1], p);
|
|
19772
|
+
S(num, r[1]);
|
|
19773
|
+
M(den, num, D);
|
|
19774
|
+
Z(num, num, r[2]);
|
|
19775
|
+
A(den, r[2], den);
|
|
19776
|
+
|
|
19777
|
+
S(den2, den);
|
|
19778
|
+
S(den4, den2);
|
|
19779
|
+
M(den6, den4, den2);
|
|
19780
|
+
M(t, den6, num);
|
|
19781
|
+
M(t, t, den);
|
|
19782
|
+
|
|
19783
|
+
pow2523(t, t);
|
|
19784
|
+
M(t, t, num);
|
|
19785
|
+
M(t, t, den);
|
|
19786
|
+
M(t, t, den);
|
|
19787
|
+
M(r[0], t, den);
|
|
19788
|
+
|
|
19789
|
+
S(chk, r[0]);
|
|
19790
|
+
M(chk, chk, den);
|
|
19791
|
+
if (neq25519(chk, num)) M(r[0], r[0], I);
|
|
19792
|
+
|
|
19793
|
+
S(chk, r[0]);
|
|
19794
|
+
M(chk, chk, den);
|
|
19795
|
+
if (neq25519(chk, num)) return -1;
|
|
19796
|
+
|
|
19797
|
+
if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]);
|
|
19798
|
+
|
|
19799
|
+
M(r[3], r[0], r[1]);
|
|
19800
|
+
return 0;
|
|
19801
|
+
}
|
|
19802
|
+
|
|
19803
|
+
function crypto_sign_open(m, sm, n, pk) {
|
|
19804
|
+
var i;
|
|
19805
|
+
var t = new Uint8Array(32), h = new Uint8Array(64);
|
|
19806
|
+
var p = [gf(), gf(), gf(), gf()],
|
|
19807
|
+
q = [gf(), gf(), gf(), gf()];
|
|
19808
|
+
|
|
19809
|
+
if (n < 64) return -1;
|
|
19810
|
+
|
|
19811
|
+
if (unpackneg(q, pk)) return -1;
|
|
19812
|
+
|
|
19813
|
+
for (i = 0; i < n; i++) m[i] = sm[i];
|
|
19814
|
+
for (i = 0; i < 32; i++) m[i+32] = pk[i];
|
|
19815
|
+
crypto_hash(h, m, n);
|
|
19816
|
+
reduce(h);
|
|
19817
|
+
scalarmult(p, q, h);
|
|
19818
|
+
|
|
19819
|
+
scalarbase(q, sm.subarray(32));
|
|
19820
|
+
add(p, q);
|
|
19821
|
+
pack(t, p);
|
|
19822
|
+
|
|
19823
|
+
n -= 64;
|
|
19824
|
+
if (crypto_verify_32(sm, 0, t, 0)) {
|
|
19825
|
+
for (i = 0; i < n; i++) m[i] = 0;
|
|
19826
|
+
return -1;
|
|
19827
|
+
}
|
|
19828
|
+
|
|
19829
|
+
for (i = 0; i < n; i++) m[i] = sm[i + 64];
|
|
19830
|
+
return n;
|
|
19831
|
+
}
|
|
19832
|
+
|
|
19833
|
+
var crypto_secretbox_KEYBYTES = 32,
|
|
19834
|
+
crypto_secretbox_NONCEBYTES = 24,
|
|
19835
|
+
crypto_secretbox_ZEROBYTES = 32,
|
|
19836
|
+
crypto_secretbox_BOXZEROBYTES = 16,
|
|
19837
|
+
crypto_scalarmult_BYTES = 32,
|
|
19838
|
+
crypto_scalarmult_SCALARBYTES = 32,
|
|
19839
|
+
crypto_box_PUBLICKEYBYTES = 32,
|
|
19840
|
+
crypto_box_SECRETKEYBYTES = 32,
|
|
19841
|
+
crypto_box_BEFORENMBYTES = 32,
|
|
19842
|
+
crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES,
|
|
19843
|
+
crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES,
|
|
19844
|
+
crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES,
|
|
19845
|
+
crypto_sign_BYTES = 64,
|
|
19846
|
+
crypto_sign_PUBLICKEYBYTES = 32,
|
|
19847
|
+
crypto_sign_SECRETKEYBYTES = 64,
|
|
19848
|
+
crypto_sign_SEEDBYTES = 32,
|
|
19849
|
+
crypto_hash_BYTES = 64;
|
|
19850
|
+
|
|
19851
|
+
nacl.lowlevel = {
|
|
19852
|
+
crypto_core_hsalsa20: crypto_core_hsalsa20,
|
|
19853
|
+
crypto_stream_xor: crypto_stream_xor,
|
|
19854
|
+
crypto_stream: crypto_stream,
|
|
19855
|
+
crypto_stream_salsa20_xor: crypto_stream_salsa20_xor,
|
|
19856
|
+
crypto_stream_salsa20: crypto_stream_salsa20,
|
|
19857
|
+
crypto_onetimeauth: crypto_onetimeauth,
|
|
19858
|
+
crypto_onetimeauth_verify: crypto_onetimeauth_verify,
|
|
19859
|
+
crypto_verify_16: crypto_verify_16,
|
|
19860
|
+
crypto_verify_32: crypto_verify_32,
|
|
19861
|
+
crypto_secretbox: crypto_secretbox,
|
|
19862
|
+
crypto_secretbox_open: crypto_secretbox_open,
|
|
19863
|
+
crypto_scalarmult: crypto_scalarmult,
|
|
19864
|
+
crypto_scalarmult_base: crypto_scalarmult_base,
|
|
19865
|
+
crypto_box_beforenm: crypto_box_beforenm,
|
|
19866
|
+
crypto_box_afternm: crypto_box_afternm,
|
|
19867
|
+
crypto_box: crypto_box,
|
|
19868
|
+
crypto_box_open: crypto_box_open,
|
|
19869
|
+
crypto_box_keypair: crypto_box_keypair,
|
|
19870
|
+
crypto_hash: crypto_hash,
|
|
19871
|
+
crypto_sign: crypto_sign,
|
|
19872
|
+
crypto_sign_keypair: crypto_sign_keypair,
|
|
19873
|
+
crypto_sign_open: crypto_sign_open,
|
|
19874
|
+
|
|
19875
|
+
crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES,
|
|
19876
|
+
crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES,
|
|
19877
|
+
crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES,
|
|
19878
|
+
crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES,
|
|
19879
|
+
crypto_scalarmult_BYTES: crypto_scalarmult_BYTES,
|
|
19880
|
+
crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES,
|
|
19881
|
+
crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES,
|
|
19882
|
+
crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES,
|
|
19883
|
+
crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES,
|
|
19884
|
+
crypto_box_NONCEBYTES: crypto_box_NONCEBYTES,
|
|
19885
|
+
crypto_box_ZEROBYTES: crypto_box_ZEROBYTES,
|
|
19886
|
+
crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES,
|
|
19887
|
+
crypto_sign_BYTES: crypto_sign_BYTES,
|
|
19888
|
+
crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES,
|
|
19889
|
+
crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES,
|
|
19890
|
+
crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES,
|
|
19891
|
+
crypto_hash_BYTES: crypto_hash_BYTES,
|
|
19892
|
+
|
|
19893
|
+
gf: gf,
|
|
19894
|
+
D: D,
|
|
19895
|
+
L: L,
|
|
19896
|
+
pack25519: pack25519,
|
|
19897
|
+
unpack25519: unpack25519,
|
|
19898
|
+
M: M,
|
|
19899
|
+
A: A,
|
|
19900
|
+
S: S,
|
|
19901
|
+
Z: Z,
|
|
19902
|
+
pow2523: pow2523,
|
|
19903
|
+
add: add,
|
|
19904
|
+
set25519: set25519,
|
|
19905
|
+
modL: modL,
|
|
19906
|
+
scalarmult: scalarmult,
|
|
19907
|
+
scalarbase: scalarbase,
|
|
19908
|
+
};
|
|
19909
|
+
|
|
19910
|
+
/* High-level API */
|
|
19911
|
+
|
|
19912
|
+
function checkLengths(k, n) {
|
|
19913
|
+
if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size');
|
|
19914
|
+
if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size');
|
|
19915
|
+
}
|
|
19916
|
+
|
|
19917
|
+
function checkBoxLengths(pk, sk) {
|
|
19918
|
+
if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size');
|
|
19919
|
+
if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size');
|
|
19920
|
+
}
|
|
19921
|
+
|
|
19922
|
+
function checkArrayTypes() {
|
|
19923
|
+
for (var i = 0; i < arguments.length; i++) {
|
|
19924
|
+
if (!(arguments[i] instanceof Uint8Array))
|
|
19925
|
+
throw new TypeError('unexpected type, use Uint8Array');
|
|
19926
|
+
}
|
|
19927
|
+
}
|
|
19928
|
+
|
|
19929
|
+
function cleanup(arr) {
|
|
19930
|
+
for (var i = 0; i < arr.length; i++) arr[i] = 0;
|
|
19931
|
+
}
|
|
19932
|
+
|
|
19933
|
+
nacl.randomBytes = function(n) {
|
|
19934
|
+
var b = new Uint8Array(n);
|
|
19935
|
+
randombytes(b, n);
|
|
19936
|
+
return b;
|
|
19937
|
+
};
|
|
19938
|
+
|
|
19939
|
+
nacl.secretbox = function(msg, nonce, key) {
|
|
19940
|
+
checkArrayTypes(msg, nonce, key);
|
|
19941
|
+
checkLengths(key, nonce);
|
|
19942
|
+
var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length);
|
|
19943
|
+
var c = new Uint8Array(m.length);
|
|
19944
|
+
for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i];
|
|
19945
|
+
crypto_secretbox(c, m, m.length, nonce, key);
|
|
19946
|
+
return c.subarray(crypto_secretbox_BOXZEROBYTES);
|
|
19947
|
+
};
|
|
19948
|
+
|
|
19949
|
+
nacl.secretbox.open = function(box, nonce, key) {
|
|
19950
|
+
checkArrayTypes(box, nonce, key);
|
|
19951
|
+
checkLengths(key, nonce);
|
|
19952
|
+
var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length);
|
|
19953
|
+
var m = new Uint8Array(c.length);
|
|
19954
|
+
for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i];
|
|
19955
|
+
if (c.length < 32) return null;
|
|
19956
|
+
if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return null;
|
|
19957
|
+
return m.subarray(crypto_secretbox_ZEROBYTES);
|
|
19958
|
+
};
|
|
19959
|
+
|
|
19960
|
+
nacl.secretbox.keyLength = crypto_secretbox_KEYBYTES;
|
|
19961
|
+
nacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES;
|
|
19962
|
+
nacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES;
|
|
19963
|
+
|
|
19964
|
+
nacl.scalarMult = function(n, p) {
|
|
19965
|
+
checkArrayTypes(n, p);
|
|
19966
|
+
if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');
|
|
19967
|
+
if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size');
|
|
19968
|
+
var q = new Uint8Array(crypto_scalarmult_BYTES);
|
|
19969
|
+
crypto_scalarmult(q, n, p);
|
|
19970
|
+
return q;
|
|
19971
|
+
};
|
|
19972
|
+
|
|
19973
|
+
nacl.scalarMult.base = function(n) {
|
|
19974
|
+
checkArrayTypes(n);
|
|
19975
|
+
if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');
|
|
19976
|
+
var q = new Uint8Array(crypto_scalarmult_BYTES);
|
|
19977
|
+
crypto_scalarmult_base(q, n);
|
|
19978
|
+
return q;
|
|
19979
|
+
};
|
|
19980
|
+
|
|
19981
|
+
nacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES;
|
|
19982
|
+
nacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES;
|
|
19983
|
+
|
|
19984
|
+
nacl.box = function(msg, nonce, publicKey, secretKey) {
|
|
19985
|
+
var k = nacl.box.before(publicKey, secretKey);
|
|
19986
|
+
return nacl.secretbox(msg, nonce, k);
|
|
19987
|
+
};
|
|
19988
|
+
|
|
19989
|
+
nacl.box.before = function(publicKey, secretKey) {
|
|
19990
|
+
checkArrayTypes(publicKey, secretKey);
|
|
19991
|
+
checkBoxLengths(publicKey, secretKey);
|
|
19992
|
+
var k = new Uint8Array(crypto_box_BEFORENMBYTES);
|
|
19993
|
+
crypto_box_beforenm(k, publicKey, secretKey);
|
|
19994
|
+
return k;
|
|
19995
|
+
};
|
|
19996
|
+
|
|
19997
|
+
nacl.box.after = nacl.secretbox;
|
|
19998
|
+
|
|
19999
|
+
nacl.box.open = function(msg, nonce, publicKey, secretKey) {
|
|
20000
|
+
var k = nacl.box.before(publicKey, secretKey);
|
|
20001
|
+
return nacl.secretbox.open(msg, nonce, k);
|
|
20002
|
+
};
|
|
20003
|
+
|
|
20004
|
+
nacl.box.open.after = nacl.secretbox.open;
|
|
20005
|
+
|
|
20006
|
+
nacl.box.keyPair = function() {
|
|
20007
|
+
var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);
|
|
20008
|
+
var sk = new Uint8Array(crypto_box_SECRETKEYBYTES);
|
|
20009
|
+
crypto_box_keypair(pk, sk);
|
|
20010
|
+
return {publicKey: pk, secretKey: sk};
|
|
20011
|
+
};
|
|
20012
|
+
|
|
20013
|
+
nacl.box.keyPair.fromSecretKey = function(secretKey) {
|
|
20014
|
+
checkArrayTypes(secretKey);
|
|
20015
|
+
if (secretKey.length !== crypto_box_SECRETKEYBYTES)
|
|
20016
|
+
throw new Error('bad secret key size');
|
|
20017
|
+
var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);
|
|
20018
|
+
crypto_scalarmult_base(pk, secretKey);
|
|
20019
|
+
return {publicKey: pk, secretKey: new Uint8Array(secretKey)};
|
|
20020
|
+
};
|
|
20021
|
+
|
|
20022
|
+
nacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES;
|
|
20023
|
+
nacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES;
|
|
20024
|
+
nacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES;
|
|
20025
|
+
nacl.box.nonceLength = crypto_box_NONCEBYTES;
|
|
20026
|
+
nacl.box.overheadLength = nacl.secretbox.overheadLength;
|
|
20027
|
+
|
|
20028
|
+
nacl.sign = function(msg, secretKey) {
|
|
20029
|
+
checkArrayTypes(msg, secretKey);
|
|
20030
|
+
if (secretKey.length !== crypto_sign_SECRETKEYBYTES)
|
|
20031
|
+
throw new Error('bad secret key size');
|
|
20032
|
+
var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length);
|
|
20033
|
+
crypto_sign(signedMsg, msg, msg.length, secretKey);
|
|
20034
|
+
return signedMsg;
|
|
20035
|
+
};
|
|
20036
|
+
|
|
20037
|
+
nacl.sign.open = function(signedMsg, publicKey) {
|
|
20038
|
+
checkArrayTypes(signedMsg, publicKey);
|
|
20039
|
+
if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)
|
|
20040
|
+
throw new Error('bad public key size');
|
|
20041
|
+
var tmp = new Uint8Array(signedMsg.length);
|
|
20042
|
+
var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey);
|
|
20043
|
+
if (mlen < 0) return null;
|
|
20044
|
+
var m = new Uint8Array(mlen);
|
|
20045
|
+
for (var i = 0; i < m.length; i++) m[i] = tmp[i];
|
|
20046
|
+
return m;
|
|
20047
|
+
};
|
|
20048
|
+
|
|
20049
|
+
nacl.sign.detached = function(msg, secretKey) {
|
|
20050
|
+
var signedMsg = nacl.sign(msg, secretKey);
|
|
20051
|
+
var sig = new Uint8Array(crypto_sign_BYTES);
|
|
20052
|
+
for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i];
|
|
20053
|
+
return sig;
|
|
20054
|
+
};
|
|
20055
|
+
|
|
20056
|
+
nacl.sign.detached.verify = function(msg, sig, publicKey) {
|
|
20057
|
+
checkArrayTypes(msg, sig, publicKey);
|
|
20058
|
+
if (sig.length !== crypto_sign_BYTES)
|
|
20059
|
+
throw new Error('bad signature size');
|
|
20060
|
+
if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)
|
|
20061
|
+
throw new Error('bad public key size');
|
|
20062
|
+
var sm = new Uint8Array(crypto_sign_BYTES + msg.length);
|
|
20063
|
+
var m = new Uint8Array(crypto_sign_BYTES + msg.length);
|
|
20064
|
+
var i;
|
|
20065
|
+
for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i];
|
|
20066
|
+
for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i];
|
|
20067
|
+
return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0);
|
|
20068
|
+
};
|
|
20069
|
+
|
|
20070
|
+
nacl.sign.keyPair = function() {
|
|
20071
|
+
var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);
|
|
20072
|
+
var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);
|
|
20073
|
+
crypto_sign_keypair(pk, sk);
|
|
20074
|
+
return {publicKey: pk, secretKey: sk};
|
|
20075
|
+
};
|
|
20076
|
+
|
|
20077
|
+
nacl.sign.keyPair.fromSecretKey = function(secretKey) {
|
|
20078
|
+
checkArrayTypes(secretKey);
|
|
20079
|
+
if (secretKey.length !== crypto_sign_SECRETKEYBYTES)
|
|
20080
|
+
throw new Error('bad secret key size');
|
|
20081
|
+
var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);
|
|
20082
|
+
for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i];
|
|
20083
|
+
return {publicKey: pk, secretKey: new Uint8Array(secretKey)};
|
|
20084
|
+
};
|
|
20085
|
+
|
|
20086
|
+
nacl.sign.keyPair.fromSeed = function(seed) {
|
|
20087
|
+
checkArrayTypes(seed);
|
|
20088
|
+
if (seed.length !== crypto_sign_SEEDBYTES)
|
|
20089
|
+
throw new Error('bad seed size');
|
|
20090
|
+
var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);
|
|
20091
|
+
var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);
|
|
20092
|
+
for (var i = 0; i < 32; i++) sk[i] = seed[i];
|
|
20093
|
+
crypto_sign_keypair(pk, sk, true);
|
|
20094
|
+
return {publicKey: pk, secretKey: sk};
|
|
20095
|
+
};
|
|
20096
|
+
|
|
20097
|
+
nacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES;
|
|
20098
|
+
nacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES;
|
|
20099
|
+
nacl.sign.seedLength = crypto_sign_SEEDBYTES;
|
|
20100
|
+
nacl.sign.signatureLength = crypto_sign_BYTES;
|
|
20101
|
+
|
|
20102
|
+
nacl.hash = function(msg) {
|
|
20103
|
+
checkArrayTypes(msg);
|
|
20104
|
+
var h = new Uint8Array(crypto_hash_BYTES);
|
|
20105
|
+
crypto_hash(h, msg, msg.length);
|
|
20106
|
+
return h;
|
|
20107
|
+
};
|
|
20108
|
+
|
|
20109
|
+
nacl.hash.hashLength = crypto_hash_BYTES;
|
|
20110
|
+
|
|
20111
|
+
nacl.verify = function(x, y) {
|
|
20112
|
+
checkArrayTypes(x, y);
|
|
20113
|
+
// Zero length arguments are considered not equal.
|
|
20114
|
+
if (x.length === 0 || y.length === 0) return false;
|
|
20115
|
+
if (x.length !== y.length) return false;
|
|
20116
|
+
return (vn(x, 0, y, 0, x.length) === 0) ? true : false;
|
|
20117
|
+
};
|
|
20118
|
+
|
|
20119
|
+
nacl.setPRNG = function(fn) {
|
|
20120
|
+
randombytes = fn;
|
|
20121
|
+
};
|
|
20122
|
+
|
|
20123
|
+
(function() {
|
|
20124
|
+
// Initialize PRNG if environment provides CSPRNG.
|
|
20125
|
+
// If not, methods calling randombytes will throw.
|
|
20126
|
+
var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null;
|
|
20127
|
+
if (crypto && crypto.getRandomValues) {
|
|
20128
|
+
// Browsers.
|
|
20129
|
+
var QUOTA = 65536;
|
|
20130
|
+
nacl.setPRNG(function(x, n) {
|
|
20131
|
+
var i, v = new Uint8Array(n);
|
|
20132
|
+
for (i = 0; i < n; i += QUOTA) {
|
|
20133
|
+
crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA)));
|
|
20134
|
+
}
|
|
20135
|
+
for (i = 0; i < n; i++) x[i] = v[i];
|
|
20136
|
+
cleanup(v);
|
|
20137
|
+
});
|
|
20138
|
+
} else if (typeof commonjsRequire !== 'undefined') {
|
|
20139
|
+
// Node.js.
|
|
20140
|
+
crypto = require$$0;
|
|
20141
|
+
if (crypto && crypto.randomBytes) {
|
|
20142
|
+
nacl.setPRNG(function(x, n) {
|
|
20143
|
+
var i, v = crypto.randomBytes(n);
|
|
20144
|
+
for (i = 0; i < n; i++) x[i] = v[i];
|
|
20145
|
+
cleanup(v);
|
|
20146
|
+
});
|
|
20147
|
+
}
|
|
20148
|
+
}
|
|
20149
|
+
})();
|
|
20150
|
+
|
|
20151
|
+
})(module.exports ? module.exports : (self.nacl = self.nacl || {}));
|
|
20152
|
+
} (naclFast));
|
|
20153
|
+
return naclFast.exports;
|
|
20154
|
+
}
|
|
20155
|
+
|
|
20156
|
+
var naclFastExports = requireNaclFast();
|
|
20157
|
+
var nacl = /*@__PURE__*/getDefaultExportFromCjs$1(naclFastExports);
|
|
20158
|
+
|
|
17698
20159
|
// guest-keystore.ts — durable per-device keypair for anonymous ("guest") auth.
|
|
17699
20160
|
//
|
|
17700
20161
|
// A guest is an ed25519 keypair generated on the device. Its public key is the
|
|
@@ -17765,7 +20226,7 @@ async function tryWebCrypto() {
|
|
|
17765
20226
|
await idbPut(db, IDB_KEY, pair); // CryptoKey is structured-cloneable; bytes never exposed
|
|
17766
20227
|
}
|
|
17767
20228
|
const raw = new Uint8Array(await s.exportKey('raw', pair.publicKey)); // public is exportable
|
|
17768
|
-
const address =
|
|
20229
|
+
const address = bs582.encode(raw);
|
|
17769
20230
|
return {
|
|
17770
20231
|
address,
|
|
17771
20232
|
nonExtractable: true,
|
|
@@ -17786,12 +20247,12 @@ function fallbackKey() {
|
|
|
17786
20247
|
let secret;
|
|
17787
20248
|
const saved = store.getItem(FALLBACK_STORE_KEY);
|
|
17788
20249
|
if (saved) {
|
|
17789
|
-
secret =
|
|
20250
|
+
secret = bs582.decode(saved);
|
|
17790
20251
|
}
|
|
17791
20252
|
else {
|
|
17792
20253
|
const kp = Keypair.generate();
|
|
17793
20254
|
secret = kp.secretKey; // 64 bytes
|
|
17794
|
-
store.setItem(FALLBACK_STORE_KEY,
|
|
20255
|
+
store.setItem(FALLBACK_STORE_KEY, bs582.encode(secret));
|
|
17795
20256
|
}
|
|
17796
20257
|
const kp = Keypair.fromSecretKey(secret);
|
|
17797
20258
|
const address = kp.publicKey.toBase58();
|
|
@@ -18526,7 +20987,7 @@ let currentAuthProvider = null;
|
|
|
18526
20987
|
let currentAuthMethod = null;
|
|
18527
20988
|
let initConfig = null;
|
|
18528
20989
|
// --- localStorage helpers: track which auth method the user last logged in with ---
|
|
18529
|
-
const STORED_AUTH_METHOD_KEY$1 = '
|
|
20990
|
+
const STORED_AUTH_METHOD_KEY$1 = 'bounded_last_auth_method';
|
|
18530
20991
|
function getStoredAuthMethod() {
|
|
18531
20992
|
try {
|
|
18532
20993
|
return getPlatform().storage.getItem(STORED_AUTH_METHOD_KEY$1);
|
|
@@ -19279,7 +21740,7 @@ async function loadDependencies() {
|
|
|
19279
21740
|
const [reactModule, reactDomModule, phantomModule] = await Promise.all([
|
|
19280
21741
|
import('react'),
|
|
19281
21742
|
import('react-dom/client'),
|
|
19282
|
-
import('./index-
|
|
21743
|
+
import('./index-DJg-Dduo.esm.js')
|
|
19283
21744
|
]);
|
|
19284
21745
|
// Extract default export from ESM module namespace
|
|
19285
21746
|
// Dynamic import() returns { default: Module, ...exports }, not the module directly
|
|
@@ -19469,7 +21930,7 @@ class PhantomWalletProvider {
|
|
|
19469
21930
|
};
|
|
19470
21931
|
}
|
|
19471
21932
|
}, [phantom, phantom === null || phantom === void 0 ? void 0 : phantom.isConnected, phantom === null || phantom === void 0 ? void 0 : phantom.addresses, phantom === null || phantom === void 0 ? void 0 : phantom.isLoading, connect, disconnect, isDisconnecting, modal, modal.isOpened, solana, solana === null || solana === void 0 ? void 0 : solana.connected, solanaHook.isAvailable, connectError]);
|
|
19472
|
-
// Auto-login: If connected but no
|
|
21933
|
+
// Auto-login: If connected but no Bounded session, try to create one.
|
|
19473
21934
|
// This handles social login callbacks where user returns from OAuth already connected.
|
|
19474
21935
|
React.useEffect(() => {
|
|
19475
21936
|
const autoCreateSession = async () => {
|
|
@@ -19483,7 +21944,7 @@ class PhantomWalletProvider {
|
|
|
19483
21944
|
// and clears it on logout, so this guard is correct in both
|
|
19484
21945
|
// steady-state and post-logout cases.
|
|
19485
21946
|
try {
|
|
19486
|
-
if (getPlatform().storage.getItem('
|
|
21947
|
+
if (getPlatform().storage.getItem('bounded_last_auth_method') === 'mobile-wallet-adapter') {
|
|
19487
21948
|
return;
|
|
19488
21949
|
}
|
|
19489
21950
|
}
|
|
@@ -19521,7 +21982,7 @@ class PhantomWalletProvider {
|
|
|
19521
21982
|
// in flight. If MWA owns the auth method now, abort before we
|
|
19522
21983
|
// overwrite its session (or its in-flight session).
|
|
19523
21984
|
try {
|
|
19524
|
-
if (getPlatform().storage.getItem('
|
|
21985
|
+
if (getPlatform().storage.getItem('bounded_last_auth_method') === 'mobile-wallet-adapter') {
|
|
19525
21986
|
return;
|
|
19526
21987
|
}
|
|
19527
21988
|
}
|
|
@@ -19529,7 +21990,7 @@ class PhantomWalletProvider {
|
|
|
19529
21990
|
await WebSessionManager.storeSession(publicKey, createSessionResult.accessToken, createSessionResult.idToken, createSessionResult.refreshToken);
|
|
19530
21991
|
// Mark auth method so clearIncompatibleSession() doesn't wipe this session
|
|
19531
21992
|
try {
|
|
19532
|
-
getPlatform().storage.setItem('
|
|
21993
|
+
getPlatform().storage.setItem('bounded_last_auth_method', 'phantom');
|
|
19533
21994
|
}
|
|
19534
21995
|
catch (_d) { }
|
|
19535
21996
|
setCurrentUser({ provider: that, address: publicKey });
|
|
@@ -19627,7 +22088,7 @@ class PhantomWalletProvider {
|
|
|
19627
22088
|
await WebSessionManager.storeSession(publicKey, createSessionResult.accessToken, createSessionResult.idToken, createSessionResult.refreshToken);
|
|
19628
22089
|
// Mark auth method so clearIncompatibleSession() doesn't wipe this session
|
|
19629
22090
|
try {
|
|
19630
|
-
getPlatform().storage.setItem('
|
|
22091
|
+
getPlatform().storage.setItem('bounded_last_auth_method', 'phantom');
|
|
19631
22092
|
}
|
|
19632
22093
|
catch (_b) { }
|
|
19633
22094
|
const user = { provider: that, address: publicKey };
|
|
@@ -20242,8 +22703,8 @@ class PhantomWalletProvider {
|
|
|
20242
22703
|
try {
|
|
20243
22704
|
const remainingAccounts = convertRemainingAccounts(solTransactionData.txArgs[0].remainingAccounts);
|
|
20244
22705
|
let app_id = solTransactionData.appId;
|
|
20245
|
-
if (typeof window !== 'undefined' && window.
|
|
20246
|
-
app_id = window.
|
|
22706
|
+
if (typeof window !== 'undefined' && window.CUSTOM_BOUNDED_APP_ID_HEADER) {
|
|
22707
|
+
app_id = window.CUSTOM_BOUNDED_APP_ID_HEADER;
|
|
20247
22708
|
}
|
|
20248
22709
|
if (!app_id) {
|
|
20249
22710
|
throw new Error("App ID is required");
|
|
@@ -20660,7 +23121,7 @@ var phantomWalletProvider = /*#__PURE__*/Object.freeze({
|
|
|
20660
23121
|
* doesn't force the user back into Phantom's approval flow when the
|
|
20661
23122
|
* underlying wallet authorization is still valid.
|
|
20662
23123
|
*/
|
|
20663
|
-
const MWA_AUTH_TOKEN_STORAGE_KEY = '
|
|
23124
|
+
const MWA_AUTH_TOKEN_STORAGE_KEY = 'bounded_mwa_auth_token';
|
|
20664
23125
|
/**
|
|
20665
23126
|
* Detects whether the current environment is a mobile browser capable of
|
|
20666
23127
|
* Mobile Wallet Adapter (MWA) communication.
|
|
@@ -20674,7 +23135,7 @@ function isMobileWalletAvailable() {
|
|
|
20674
23135
|
return detectAndroid();
|
|
20675
23136
|
}
|
|
20676
23137
|
const ED25519_SIGNATURE_LENGTH = 64;
|
|
20677
|
-
const STORED_AUTH_METHOD_KEY = '
|
|
23138
|
+
const STORED_AUTH_METHOD_KEY = 'bounded_last_auth_method';
|
|
20678
23139
|
const MWA_AUTH_METHOD = 'mobile-wallet-adapter';
|
|
20679
23140
|
function findMwaError(e, maxDepth = 5) {
|
|
20680
23141
|
var _a;
|
|
@@ -20777,7 +23238,7 @@ async function withMwaAssociationRetry(fn) {
|
|
|
20777
23238
|
* no `blur` event fires, the protocol's `getDetectionPromise` (3000ms
|
|
20778
23239
|
* timeout, line 433) rejects, and we get `ERROR_WALLET_NOT_FOUND`.
|
|
20779
23240
|
*
|
|
20780
|
-
* Fix: show a
|
|
23241
|
+
* Fix: show a Bounded-controlled modal between the two transacts. When the
|
|
20781
23242
|
* user taps the modal's "Sign in" button, that tap IS a fresh user
|
|
20782
23243
|
* activation. We invoke the sign function directly inside the click handler
|
|
20783
23244
|
* — no `await` between the tap and the call — so the activation propagates
|
|
@@ -20815,7 +23276,7 @@ async function awaitSignInGestureAndSign(theme, signFn, noResultError = 'MWA ret
|
|
|
20815
23276
|
const closeColor = isDark ? '#71717a' : '#a1a1aa';
|
|
20816
23277
|
const fontStack = '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif';
|
|
20817
23278
|
const overlay = document.createElement('div');
|
|
20818
|
-
overlay.setAttribute('data-
|
|
23279
|
+
overlay.setAttribute('data-bounded-mwa-gesture', 'true');
|
|
20819
23280
|
overlay.style.cssText = [
|
|
20820
23281
|
'position: fixed',
|
|
20821
23282
|
'inset: 0',
|
|
@@ -21180,7 +23641,7 @@ async function registerMobileWalletAdapter(config) {
|
|
|
21180
23641
|
if (typeof window === 'undefined')
|
|
21181
23642
|
return;
|
|
21182
23643
|
try {
|
|
21183
|
-
const walletStandardMobile = await import('./index.browser-
|
|
23644
|
+
const walletStandardMobile = await import('./index.browser-pymH6o1X.esm.js');
|
|
21184
23645
|
const registerMwa = walletStandardMobile.registerMwa || ((_a = walletStandardMobile.default) === null || _a === void 0 ? void 0 : _a.registerMwa);
|
|
21185
23646
|
if (!registerMwa) {
|
|
21186
23647
|
console.warn('[SolanaMobileWallet] registerMwa not found in @solana-mobile/wallet-standard-mobile');
|
|
@@ -21238,7 +23699,7 @@ async function registerMobileWalletAdapter(config) {
|
|
|
21238
23699
|
* does.
|
|
21239
23700
|
*
|
|
21240
23701
|
* Notes on UX: login uses two wallet popups in succession — `standard:connect`
|
|
21241
|
-
* (authorize) and `solana:signMessage` (sign the
|
|
23702
|
+
* (authorize) and `solana:signMessage` (sign the Bounded nonce). The
|
|
21242
23703
|
* previous implementation combined both inside a single `transact` callback;
|
|
21243
23704
|
* splitting them is the cost of going through wallet-standard, and is
|
|
21244
23705
|
* acceptable given the alternative was broken on Seeker.
|
|
@@ -21281,9 +23742,9 @@ class SolanaMobileWalletProvider {
|
|
|
21281
23742
|
// entirely via `config.appIdentity.uri`.
|
|
21282
23743
|
const fallbackUri = hasDOM
|
|
21283
23744
|
? getPlatform().getLocationOrigin()
|
|
21284
|
-
: '
|
|
23745
|
+
: 'bounded://app';
|
|
21285
23746
|
this.appIdentity = config.appIdentity || {
|
|
21286
|
-
name: '
|
|
23747
|
+
name: 'Bounded App',
|
|
21287
23748
|
uri: fallbackUri,
|
|
21288
23749
|
};
|
|
21289
23750
|
this.cluster = config.cluster || 'mainnet-beta';
|
|
@@ -21319,7 +23780,7 @@ class SolanaMobileWalletProvider {
|
|
|
21319
23780
|
async ensureWallet() {
|
|
21320
23781
|
if (this.wallet)
|
|
21321
23782
|
return this.wallet;
|
|
21322
|
-
const mod = await import('./index.browser-
|
|
23783
|
+
const mod = await import('./index.browser-pymH6o1X.esm.js');
|
|
21323
23784
|
const chain = mapChainToWalletStandard(this.cluster);
|
|
21324
23785
|
this.wallet = new mod.LocalSolanaMobileWalletAdapterWallet({
|
|
21325
23786
|
appIdentity: this.appIdentity,
|
|
@@ -21339,7 +23800,7 @@ class SolanaMobileWalletProvider {
|
|
|
21339
23800
|
return this.wallet;
|
|
21340
23801
|
}
|
|
21341
23802
|
/**
|
|
21342
|
-
* Ensure the wallet has an active authorization. After a
|
|
23803
|
+
* Ensure the wallet has an active authorization. After a Bounded session
|
|
21343
23804
|
* is restored from storage on cold-start, `wallet.accounts` is empty until
|
|
21344
23805
|
* we silently reconnect from the AuthorizationCache. If the cache is also
|
|
21345
23806
|
* empty, fall back to interactive `login()` (which surfaces the three-stage
|
|
@@ -21450,7 +23911,7 @@ class SolanaMobileWalletProvider {
|
|
|
21450
23911
|
}
|
|
21451
23912
|
const account = auth.accounts[0];
|
|
21452
23913
|
// account.address is base64-encoded per MWA spec; convert to
|
|
21453
|
-
// the base58 form
|
|
23914
|
+
// the base58 form Bounded + the rest of the SDK use.
|
|
21454
23915
|
const base58Addr = new PublicKey(bufferExports.Buffer.from(account.address, 'base64')).toBase58();
|
|
21455
23916
|
// Reuse session if already valid for this address — skip the
|
|
21456
23917
|
// signMessages roundtrip entirely.
|
|
@@ -21487,7 +23948,7 @@ class SolanaMobileWalletProvider {
|
|
|
21487
23948
|
setCurrentUser(user);
|
|
21488
23949
|
return user;
|
|
21489
23950
|
}
|
|
21490
|
-
// Create
|
|
23951
|
+
// Create Bounded session on the server.
|
|
21491
23952
|
if (!result.signatureBase64 || !result.messageText) {
|
|
21492
23953
|
throw new Error('MWA login completed without signature');
|
|
21493
23954
|
}
|
|
@@ -21516,7 +23977,7 @@ class SolanaMobileWalletProvider {
|
|
|
21516
23977
|
}
|
|
21517
23978
|
const wallet = await this.ensureWallet();
|
|
21518
23979
|
// Quick-check: wallet may already have authorization (e.g. from a
|
|
21519
|
-
// previous in-page login) and a matching
|
|
23980
|
+
// previous in-page login) and a matching Bounded session — skip
|
|
21520
23981
|
// popups in that case.
|
|
21521
23982
|
if (wallet.accounts.length > 0) {
|
|
21522
23983
|
const accountPubkey = new PublicKey(wallet.accounts[0].publicKey);
|
|
@@ -21547,14 +24008,14 @@ class SolanaMobileWalletProvider {
|
|
|
21547
24008
|
const account = accounts[0];
|
|
21548
24009
|
const accountPubkey = new PublicKey(account.publicKey);
|
|
21549
24010
|
const base58Addr = accountPubkey.toBase58();
|
|
21550
|
-
// If we happen to already have a matching
|
|
24011
|
+
// If we happen to already have a matching Bounded session, reuse it.
|
|
21551
24012
|
const existingSession = await getActiveSessionManager().getSession();
|
|
21552
24013
|
if (existingSession && existingSession.address === base58Addr) {
|
|
21553
24014
|
const user = { provider: this, address: base58Addr };
|
|
21554
24015
|
setCurrentUser(user);
|
|
21555
24016
|
return user;
|
|
21556
24017
|
}
|
|
21557
|
-
// Wallet popup #2: sign the
|
|
24018
|
+
// Wallet popup #2: sign the Bounded nonce message.
|
|
21558
24019
|
//
|
|
21559
24020
|
// We cannot call signMessageFeat.signMessage() directly here:
|
|
21560
24021
|
// it would run as a JS continuation from the connect() resolve,
|
|
@@ -21567,7 +24028,7 @@ class SolanaMobileWalletProvider {
|
|
|
21567
24028
|
// protocol's 3-second getDetectionPromise rejects with
|
|
21568
24029
|
// ERROR_WALLET_NOT_FOUND.
|
|
21569
24030
|
//
|
|
21570
|
-
// Insert a
|
|
24031
|
+
// Insert a Bounded modal: the user's tap on "Sign in" provides a
|
|
21571
24032
|
// fresh activation, and signMessage is invoked synchronously
|
|
21572
24033
|
// inside the click handler so the activation propagates.
|
|
21573
24034
|
// C1: fetch the nonce HERE (after connect), not before — a pre-connect
|
|
@@ -21584,7 +24045,7 @@ class SolanaMobileWalletProvider {
|
|
|
21584
24045
|
}
|
|
21585
24046
|
const { signature: sigBytes } = signResult;
|
|
21586
24047
|
const signatureBase64 = bufferExports.Buffer.from(sigBytes).toString('base64');
|
|
21587
|
-
// Create
|
|
24048
|
+
// Create Bounded session on the server.
|
|
21588
24049
|
const createSessionResult = await createSessionWithSignature(base58Addr, messageText, signatureBase64);
|
|
21589
24050
|
await getActiveSessionManager().storeSession(base58Addr, createSessionResult.accessToken, createSessionResult.idToken, createSessionResult.refreshToken);
|
|
21590
24051
|
// Auth-method marker is already 'mobile-wallet-adapter' from above.
|
|
@@ -21937,7 +24398,7 @@ class SolanaMobileWalletProvider {
|
|
|
21937
24398
|
options: { commitment: 'confirmed' },
|
|
21938
24399
|
}));
|
|
21939
24400
|
const { signature: sigBytes } = sendResult;
|
|
21940
|
-
const signature =
|
|
24401
|
+
const signature = bs582.encode(sigBytes);
|
|
21941
24402
|
await confirmAndCheckTransaction(connection, signature);
|
|
21942
24403
|
return signature;
|
|
21943
24404
|
}
|
|
@@ -21973,8 +24434,8 @@ class SolanaMobileWalletProvider {
|
|
|
21973
24434
|
try {
|
|
21974
24435
|
const remainingAccounts = convertRemainingAccounts(solTransactionData.txArgs[0].remainingAccounts);
|
|
21975
24436
|
let app_id = solTransactionData.appId;
|
|
21976
|
-
if (typeof window !== 'undefined' && window.
|
|
21977
|
-
app_id = window.
|
|
24437
|
+
if (typeof window !== 'undefined' && window.CUSTOM_BOUNDED_APP_ID_HEADER) {
|
|
24438
|
+
app_id = window.CUSTOM_BOUNDED_APP_ID_HEADER;
|
|
21978
24439
|
}
|
|
21979
24440
|
if (!app_id) {
|
|
21980
24441
|
throw new Error('App ID is required');
|
|
@@ -22085,7 +24546,7 @@ class SolanaMobileWalletProvider {
|
|
|
22085
24546
|
throw new Error('MWA returned no signature');
|
|
22086
24547
|
}
|
|
22087
24548
|
const { signature: sigBytes } = sendResult;
|
|
22088
|
-
const signature =
|
|
24549
|
+
const signature = bs582.encode(sigBytes);
|
|
22089
24550
|
const txInfo = await confirmAndCheckTransaction(connection, signature);
|
|
22090
24551
|
return {
|
|
22091
24552
|
transactionSignature: signature,
|
|
@@ -22581,8 +25042,8 @@ class PrivyWalletProvider {
|
|
|
22581
25042
|
const connection = new Connection(rpcUrl, "confirmed");
|
|
22582
25043
|
const remainingAccounts = convertRemainingAccounts(solTransactionData.txArgs[0].remainingAccounts);
|
|
22583
25044
|
let app_id = solTransactionData.appId;
|
|
22584
|
-
if (typeof window !== 'undefined' && window.
|
|
22585
|
-
const customAppId = window.
|
|
25045
|
+
if (typeof window !== 'undefined' && window.CUSTOM_BOUNDED_APP_ID_HEADER) {
|
|
25046
|
+
const customAppId = window.CUSTOM_BOUNDED_APP_ID_HEADER;
|
|
22586
25047
|
if (customAppId) {
|
|
22587
25048
|
app_id = customAppId;
|
|
22588
25049
|
}
|
|
@@ -22922,7 +25383,7 @@ class PrivyWalletProvider {
|
|
|
22922
25383
|
// Handle case where signature might be bytes instead of string
|
|
22923
25384
|
const rawSig = result.signature;
|
|
22924
25385
|
if (rawSig instanceof Uint8Array || Array.isArray(rawSig)) {
|
|
22925
|
-
signature =
|
|
25386
|
+
signature = bs582.encode(rawSig instanceof Uint8Array ? rawSig : new Uint8Array(rawSig));
|
|
22926
25387
|
}
|
|
22927
25388
|
else {
|
|
22928
25389
|
signature = rawSig;
|
|
@@ -23193,7 +25654,7 @@ class PrivyExpoProvider {
|
|
|
23193
25654
|
if (!wallet) {
|
|
23194
25655
|
throw new Error('No embedded Solana wallet found after login. Ensure embeddedWallets.solana.createOnLogin is configured.');
|
|
23195
25656
|
}
|
|
23196
|
-
// Mint a
|
|
25657
|
+
// Mint a Bounded session by having the Privy Solana wallet sign the
|
|
23197
25658
|
// standard SIWS challenge — identical to Phantom/MWA, so the backend mints
|
|
23198
25659
|
// the session via the proven wallet-signature path (no Privy-specific
|
|
23199
25660
|
// token verification needed).
|
|
@@ -23213,8 +25674,8 @@ class PrivyExpoProvider {
|
|
|
23213
25674
|
const connection = new Connection(rpcUrl, 'confirmed');
|
|
23214
25675
|
const remainingAccounts = convertRemainingAccounts(solTransactionData.txArgs[0].remainingAccounts);
|
|
23215
25676
|
let app_id = solTransactionData.appId;
|
|
23216
|
-
if (typeof globalThis !== 'undefined' && globalThis.
|
|
23217
|
-
app_id = globalThis.
|
|
25677
|
+
if (typeof globalThis !== 'undefined' && globalThis.CUSTOM_BOUNDED_APP_ID_HEADER) {
|
|
25678
|
+
app_id = globalThis.CUSTOM_BOUNDED_APP_ID_HEADER;
|
|
23218
25679
|
}
|
|
23219
25680
|
if (!app_id) {
|
|
23220
25681
|
throw new Error('App ID is required');
|
|
@@ -23284,7 +25745,7 @@ class PrivyExpoProvider {
|
|
|
23284
25745
|
const wallet = await this.getWalletOrThrow();
|
|
23285
25746
|
const messageBytes = getPlatform().textEncode(message);
|
|
23286
25747
|
const result = await wallet.signMessage(messageBytes);
|
|
23287
|
-
return
|
|
25748
|
+
return bs582.encode(result.signature);
|
|
23288
25749
|
}
|
|
23289
25750
|
async signTransaction(transaction) {
|
|
23290
25751
|
await this.ensureReady();
|
|
@@ -23368,7 +25829,7 @@ class PrivyExpoProvider {
|
|
|
23368
25829
|
// Private helpers
|
|
23369
25830
|
// -------------------------------------------------------------------
|
|
23370
25831
|
/**
|
|
23371
|
-
* Mint a
|
|
25832
|
+
* Mint a Bounded session from a Privy Solana wallet by signing the canonical
|
|
23372
25833
|
* SIWS challenge (nonce -> genSolanaMessage -> wallet.signMessage). This reuses
|
|
23373
25834
|
* createSessionWithSignature — the exact path Phantom, the mobile wallet
|
|
23374
25835
|
* adapter, and the guest device-key use — so the bounded /session issuer mints
|
|
@@ -23452,5 +25913,5 @@ class PrivyExpoProvider {
|
|
|
23452
25913
|
}
|
|
23453
25914
|
}
|
|
23454
25915
|
|
|
23455
|
-
export { EFFECT_INTENT_ADDRESS as $, getFiles as A, search as B, queryAggregate as C, runQuery as D, runQueryMany as E, runExpression as F, runExpressionMany as G, signMessage as H, signTransaction as I, signAndSubmitTransaction as J, count as K, aggregate as L, subscribe as M, useAuth as N, deserializeTransaction as O, getIdToken as P, setPlatform as Q, getPlatform as R, PhantomWalletProvider as S, MockAuthProvider as T, DEFAULT_TEST_ADDRESS as U, OffchainAuthProvider as V, SolanaMobileWalletProvider as W, isMobileWalletAvailable as X, registerMobileWalletAdapter as Y, PrivyWalletProvider as Z, PrivyExpoProvider as _,
|
|
23456
|
-
//# sourceMappingURL=index-
|
|
25916
|
+
export { EFFECT_INTENT_ADDRESS as $, getFiles as A, search as B, queryAggregate as C, runQuery as D, runQueryMany as E, runExpression as F, runExpressionMany as G, signMessage as H, signTransaction as I, signAndSubmitTransaction as J, count as K, aggregate as L, subscribe as M, useAuth as N, deserializeTransaction as O, getIdToken as P, setPlatform as Q, getPlatform as R, PhantomWalletProvider as S, MockAuthProvider as T, DEFAULT_TEST_ADDRESS as U, OffchainAuthProvider as V, SolanaMobileWalletProvider as W, isMobileWalletAvailable as X, registerMobileWalletAdapter as Y, PrivyWalletProvider as Z, PrivyExpoProvider as _, bs582 as a, FunctionInvokeError as a0, InsufficientBalanceError as a1, LiveIntentError as a2, ReactNativeSessionManager as a3, RealtimeStore as a4, ServerSessionManager as a5, WebSessionManager as a6, buildSetDocumentsTransaction as a7, clearCache as a8, closeAllSubscriptions as a9, withEffects as aA, wsDelete as aB, wsGet as aC, wsGetMany as aD, wsQuery as aE, wsSet as aF, convertRemainingAccounts as aa, createSessionWithSignature as ab, defineLiveModule as ac, deriveUserIdentityFromIdToken as ad, functions as ae, genAuthNonce as af, genSolanaMessage as ag, getActiveSessionManager as ah, getCachedData as ai, getMany as aj, getRealtimeStore as ak, getWebhookKeysUrl as al, hasActiveConnection as am, increment as an, invoke as ao, isEffectResult as ap, live as aq, intent as ar, status as as, reconnectWithNewAuth as at, refreshSession as au, resetRealtimeStore as av, revokeSession as aw, serverTimestamp as ax, signSessionCreateMessage as ay, subscribeView as az, bufferExports as b, getCurrentUser as c, onAuthLoadingChanged as d, getAuthLoading as e, logout as f, getDefaultExportFromCjs$1 as g, getConfig as h, init as i, getAuthProvider as j, sendEmailOtp as k, login as l, linkEmail as m, loginWithPrivy as n, onAuthStateChanged as o, loginWithRedirect as p, linkWithRedirect as q, completeLoginFromRedirect as r, signInAnonymously as s, loginWithPopup as t, completeLoginInPopup as u, verifyEmailOtp as v, get as w, set as x, setMany as y, setFile as z };
|
|
25917
|
+
//# sourceMappingURL=index-DyfiK3_X.esm.js.map
|