Commit 727ffcbf authored by imtase's avatar imtase
Browse files

Modernize crypto secp256k1 implementation

parent 47065870
Loading
Loading
Loading
Loading
+10 −1
Original line number Diff line number Diff line
@@ -251,7 +251,16 @@ const cryptoUtils = {

##### Browser crypto footprint

The browser bundle keeps the public key, signature, transaction digest, and memo-encryption behavior compatible with Node. Hashing is provided by `@noble/hashes`, and memo AES-256-CBC encryption/decryption is provided by `aes-js`, so the bundle does not need the generic Browserify `crypto` shim path (`crypto-browserify`, `browserify-sign`, or `create-ecdh`) for these helpers. The `secp256k1` dependency is still required for key and signature operations; in browser builds it uses its own JavaScript fallback.
The browser bundle keeps the public key, signature, transaction digest, and memo-encryption behavior compatible with Node. Hashing is provided by `@noble/hashes`, secp256k1 key/signature/ECDH operations are provided by `@noble/secp256k1`, and memo AES-256-CBC encryption/decryption is provided by `aes-js`. The bundle does not include the generic Browserify `crypto` shim path (`crypto-browserify`, `browserify-sign`, or `create-ecdh`) and does not include the historical `secp256k1`/`elliptic` dependency path.

##### Runtime compatibility matrix

| Runtime | Support level | Required platform features | Notes |
| --- | --- | --- | --- |
| Node.js 18+ | Supported | CommonJS, `Buffer`, typed arrays, `TextEncoder`/`TextDecoder`, built-in `crypto` for Node consumers/tests | Primary server-side runtime for dblurt. |
| Modern desktop/mobile browsers | Supported through `dist/dblurt.js` | ES2015, typed arrays, `DataView`, `TextEncoder`/`TextDecoder`, `Math.imul` | Covers key generation, key validation, signatures, public-key recovery, transaction signing, transaction digesting, and encrypted memos without Browserify crypto signing/ECDH shims. |
| WebViews based on modern Chromium/WebKit | Supported when the WebView exposes the browser features above | Same as modern browsers | Hosts may need to provide `TextEncoder`/`TextDecoder` on older embedded WebViews. |
| Legacy browsers without ES2015 typed-array support | Unsupported | Missing required primitives | Use a modern browser/WebView or add host-level polyfills before loading dblurt. |

### Tools Class
Some useful functions like mana with regeneration calculation, vote value calculation, etc...
+1 −1

File changed.

Preview size limit exceeded, changes collapsed.

−54.6 KiB (118 KiB)

File changed.

No diff preview for this file type.

+1 −1

File changed.

Preview size limit exceeded, changes collapsed.

+21 −80
Original line number Diff line number Diff line
@@ -11,23 +11,19 @@
      "dependencies": {
        "@beblurt/blurt-rpc-core": "^0.1.0",
        "@noble/hashes": "^1.8.0",
        "@noble/secp256k1": "^1.7.1",
        "aes-js": "^3.1.2",
        "bs58": "^4.0.1",
        "bytebuffer": "^5.0.1",
        "ecurve": "^1.0.6",
        "jsbi": "^3.1.4",
        "long": "^5.3.2",
        "secp256k1": "^4.0.4",
        "verror": "^1.10.0"
      },
      "devDependencies": {
        "@types/bigi": "^1.4.5",
        "@types/bs58": "^4.0.4",
        "@types/bytebuffer": "^5.0.49",
        "@types/ecurve": "^1.0.3",
        "@types/mocha": "^10.0.10",
        "@types/node": "^13.9.2",
        "@types/secp256k1": "^4.0.7",
        "@types/verror": "^1.10.11",
        "@typescript-eslint/eslint-plugin": "^5.62.0",
        "@typescript-eslint/parser": "^5.62.0",
@@ -424,6 +420,18 @@
        "url": "https://paulmillr.com/funding/"
      }
    },
    "node_modules/@noble/secp256k1": {
      "version": "1.7.1",
      "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz",
      "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==",
      "funding": [
        {
          "type": "individual",
          "url": "https://paulmillr.com/funding/"
        }
      ],
      "license": "MIT"
    },
    "node_modules/@nodable/entities": {
      "version": "2.2.0",
      "resolved": "https://registry.npmjs.org/@nodable/entities/-/entities-2.2.0.tgz",
@@ -521,13 +529,6 @@
      "dev": true,
      "license": "MIT"
    },
    "node_modules/@types/bigi": {
      "version": "1.4.5",
      "resolved": "https://registry.npmjs.org/@types/bigi/-/bigi-1.4.5.tgz",
      "integrity": "sha512-fb5MUzazrD2GRnwlStm91HVu3cZbvolX9kJruqpUBdc24eHBWrLLfyt8XN1/C5JpI0stP/MbaFQp+cJh5WOFfw==",
      "dev": true,
      "license": "MIT"
    },
    "node_modules/@types/bs58": {
      "version": "4.0.4",
      "resolved": "https://registry.npmjs.org/@types/bs58/-/bs58-4.0.4.tgz",
@@ -550,17 +551,6 @@
        "@types/node": "*"
      }
    },
    "node_modules/@types/ecurve": {
      "version": "1.0.3",
      "resolved": "https://registry.npmjs.org/@types/ecurve/-/ecurve-1.0.3.tgz",
      "integrity": "sha512-u4vAyBNeKKyPbrXEOaJ83XOHp5korRsNUR1zmN8Uc99+QTb3Dwg3h7agf9fBIRdPagEG9rkphC8hCk2qSi3/Gg==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "@types/bigi": "*",
        "@types/node": "*"
      }
    },
    "node_modules/@types/istanbul-lib-coverage": {
      "version": "2.0.6",
      "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz",
@@ -617,16 +607,6 @@
      "dev": true,
      "license": "MIT"
    },
    "node_modules/@types/secp256k1": {
      "version": "4.0.7",
      "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.7.tgz",
      "integrity": "sha512-Rcvjl6vARGAKRO6jHeKMatGrvOMGrR/AR11N1x2LqintPCyDZ7NBhrh238Z2VZc7aM7KIwnFpFQ7fnfK4H/9Qw==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "@types/node": "*"
      }
    },
    "node_modules/@types/semver": {
      "version": "7.7.1",
      "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.1.tgz",
@@ -1269,15 +1249,11 @@
      ],
      "license": "MIT"
    },
    "node_modules/bigi": {
      "version": "1.4.2",
      "resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.2.tgz",
      "integrity": "sha512-ddkU+dFIuEIW8lE7ZwdIAf2UPoM90eaprg5m3YXAVVTmKlqV/9BX4A2M8BOK2yOq6/VgZFVhK6QAxJebhlbhzw=="
    },
    "node_modules/bn.js": {
      "version": "4.12.3",
      "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz",
      "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==",
      "dev": true,
      "license": "MIT"
    },
    "node_modules/brace-expansion": {
@@ -1308,6 +1284,7 @@
      "version": "1.1.0",
      "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
      "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==",
      "dev": true,
      "license": "MIT"
    },
    "node_modules/browser-pack": {
@@ -3160,20 +3137,11 @@
      "dev": true,
      "license": "MIT"
    },
    "node_modules/ecurve": {
      "version": "1.0.6",
      "resolved": "https://registry.npmjs.org/ecurve/-/ecurve-1.0.6.tgz",
      "integrity": "sha512-/BzEjNfiSuB7jIWKcS/z8FK9jNjmEWvUV2YZ4RLSmcDtP7Lq0m6FvDuSnJpBlDpGRpfRQeTLGLBI8H+kEv0r+w==",
      "license": "MIT",
      "dependencies": {
        "bigi": "^1.1.0",
        "safe-buffer": "^5.0.1"
      }
    },
    "node_modules/elliptic": {
      "version": "6.6.1",
      "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz",
      "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "bn.js": "^4.11.9",
@@ -4804,6 +4772,7 @@
      "version": "1.1.7",
      "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
      "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "inherits": "^2.0.3",
@@ -4837,6 +4806,7 @@
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
      "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "hash.js": "^1.0.3",
@@ -4974,6 +4944,7 @@
      "version": "2.0.4",
      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
      "dev": true,
      "license": "ISC"
    },
    "node_modules/ini": {
@@ -6183,12 +6154,14 @@
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
      "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
      "dev": true,
      "license": "ISC"
    },
    "node_modules/minimalistic-crypto-utils": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
      "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==",
      "dev": true,
      "license": "MIT"
    },
    "node_modules/minimatch": {
@@ -6664,12 +6637,6 @@
      "dev": true,
      "license": "ISC"
    },
    "node_modules/node-addon-api": {
      "version": "5.1.0",
      "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz",
      "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==",
      "license": "MIT"
    },
    "node_modules/node-exports-info": {
      "version": "1.6.2",
      "resolved": "https://registry.npmjs.org/node-exports-info/-/node-exports-info-1.6.2.tgz",
@@ -6689,17 +6656,6 @@
        "url": "https://github.com/sponsors/ljharb"
      }
    },
    "node_modules/node-gyp-build": {
      "version": "4.6.0",
      "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz",
      "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==",
      "license": "MIT",
      "bin": {
        "node-gyp-build": "bin.js",
        "node-gyp-build-optional": "optional.js",
        "node-gyp-build-test": "build-test.js"
      }
    },
    "node_modules/normalize-package-data": {
      "version": "2.5.0",
      "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
@@ -7692,21 +7648,6 @@
        "url": "https://github.com/sponsors/ljharb"
      }
    },
    "node_modules/secp256k1": {
      "version": "4.0.4",
      "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.4.tgz",
      "integrity": "sha512-6JfvwvjUOn8F/jUoBY2Q1v5WY5XS+rj8qSe0v8Y4ezH4InLgTEeOOPQsRll9OV429Pvo6BCHGavIyJfr3TAhsw==",
      "hasInstallScript": true,
      "license": "MIT",
      "dependencies": {
        "elliptic": "^6.5.7",
        "node-addon-api": "^5.0.0",
        "node-gyp-build": "^4.2.0"
      },
      "engines": {
        "node": ">=18.0.0"
      }
    },
    "node_modules/semver": {
      "version": "6.3.1",
      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
Loading