From 8d3244fe64305ad902b2210c1cb5c45fd009f1a6 Mon Sep 17 00:00:00 2001 From: Stepan Usatiuk Date: Sat, 26 Apr 2025 14:09:05 +0200 Subject: [PATCH] Webui: use node-forge for hashing apparently crypto works only on ssl websites --- webui/package-lock.json | 38 ++++++++++++++++++++++++++++++++++++++ webui/package.json | 2 ++ webui/src/hash.ts | 10 +++++----- 3 files changed, 45 insertions(+), 5 deletions(-) diff --git a/webui/package-lock.json b/webui/package-lock.json index d970b014..3b7e515c 100644 --- a/webui/package-lock.json +++ b/webui/package-lock.json @@ -9,6 +9,7 @@ "version": "0.0.1", "dependencies": { "jwt-decode": "^4.0.0", + "node-forge": "^1.3.1", "react": "^19.1.0", "react-dom": "^19.1.0", "react-router": "^7.5.2", @@ -21,6 +22,7 @@ "@parcel/validator-typescript": "^2.14.4", "@types/eslint": "^9.6.1", "@types/eslint-config-prettier": "^6.11.3", + "@types/node-forge": "^1.3.11", "@types/react": "^19.0.12", "@types/react-dom": "^19.0.4", "@typescript-eslint/eslint-plugin": "^8.28.0", @@ -2436,6 +2438,26 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/node": { + "version": "22.15.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.2.tgz", + "integrity": "sha512-uKXqKN9beGoMdBfcaTY1ecwz6ctxuJAcUlwE55938g0ZJ8lRxwAZqRz2AJ4pzpt5dHdTPMB863UZ0ESiFUcP7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/react": { "version": "19.0.12", "resolved": "https://registry.npmjs.org/@types/react/-/react-19.0.12.tgz", @@ -5465,6 +5487,15 @@ "dev": true, "license": "MIT" }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.13.0" + } + }, "node_modules/node-gyp-build-optional-packages": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.1.1.tgz", @@ -6871,6 +6902,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, "node_modules/update-browserslist-db": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", diff --git a/webui/package.json b/webui/package.json index 147e4d3d..53f8cf78 100644 --- a/webui/package.json +++ b/webui/package.json @@ -10,6 +10,7 @@ "browserslist": "> 0.5%, last 2 versions, not dead", "dependencies": { "jwt-decode": "^4.0.0", + "node-forge": "^1.3.1", "react": "^19.1.0", "react-dom": "^19.1.0", "react-router": "^7.5.2", @@ -25,6 +26,7 @@ "@parcel/validator-typescript": "^2.14.4", "@types/eslint": "^9.6.1", "@types/eslint-config-prettier": "^6.11.3", + "@types/node-forge": "^1.3.11", "@types/react": "^19.0.12", "@types/react-dom": "^19.0.4", "@typescript-eslint/eslint-plugin": "^8.28.0", diff --git a/webui/src/hash.ts b/webui/src/hash.ts index 2894edf0..0a0eb049 100644 --- a/webui/src/hash.ts +++ b/webui/src/hash.ts @@ -1,7 +1,7 @@ +import * as forge from "node-forge"; + export async function hashCert(cert: string) { - const hash = await crypto.subtle.digest( - "SHA-1", - new TextEncoder().encode(cert), - ); - return btoa(String.fromCharCode(...new Uint8Array(hash))); + const md = forge.md.sha1.create(); + md.update(cert); + return md.digest().toHex(); }