diff --git a/javascript/package.json b/javascript/package.json index c5cfef3d0a040be51f69793a8137e639782623cc..b824108e21b83389eaaf17f5648be233a7627d20 100644 --- a/javascript/package.json +++ b/javascript/package.json @@ -34,6 +34,7 @@ "penpal": "^3.0.3", "pkijs": "^2.1.69", "pvutils": "^1.0.16", + "secrets.js-grempe": "^2.0.0", "webcrypto-liner": "^1.1.4" }, "devDependencies": { diff --git a/javascript/src/iframe/viamapi-iframe.js b/javascript/src/iframe/viamapi-iframe.js index f9daffc6ea6b15c0fd01b8718633099a5310a5a0..a60244e62857d2f2ca2b4e80a58d49b96a2e61fa 100644 --- a/javascript/src/iframe/viamapi-iframe.js +++ b/javascript/src/iframe/viamapi-iframe.js @@ -40,6 +40,11 @@ import { STATUS_USER_BLOCKED } from "../constants/statuses"; import generateQrCode from "../utilities/generateQrCode"; +import { + generateRecoveryKey, + divideSecretToShares, + combineSecret +} from "../utilities/secrets"; const penpalMethods = require("../../temp/penpal-methods").default; const WopiAPI = require("./wopiapi-iframe"); @@ -979,6 +984,26 @@ const connection = Penpal.connectToParent({ console.log({ response }); if (response.code !== "200") return response; + const responseData = response.data; + console.log({ responseData }); + const contactsPublicKeys = Object.values(responseData).flat(); + console.log({ contactsPublicKeys }); + const sharesNumber = contactsPublicKeys.length; + const getThreshold = () => + sharesNumber === 3 ? 2 : parseInt(sharesNumber / 2); + const threshold = getThreshold(); + console.log({ threshold }); + const recoveryKey = generateRecoveryKey(512); + console.log({ recoveryKey }); + const recoveryKeyShares = divideSecretToShares( + recoveryKey, + sharesNumber, + threshold + ); + // Sanity check + const checkKey = combineSecret(recoveryKeyShares.slice(0, 1)); + console.log("first sanity check", checkKey === recoveryKey); + return response; } catch (error) { return { diff --git a/javascript/src/utilities/secrets.js b/javascript/src/utilities/secrets.js index d41a335a4d774f77206d948fc55238a648e9216e..679358193ac96d9ba9a484b644f0d8f621970383 100644 --- a/javascript/src/utilities/secrets.js +++ b/javascript/src/utilities/secrets.js @@ -1,5 +1,5 @@ import { encryptMessage } from "./signingUtilities.js"; -// const secrets = require("secrets.js-grempe"); +const secrets = require("secrets.js-grempe"); /** * Function generates a random bits length string, and output it in hexadecimal format diff --git a/javascript/yarn.lock b/javascript/yarn.lock index e0a36ac486014152da670433c3925a3127ccdbdc..46577e93cf9ffe3aabaa5431f2c5eb209f8a244e 100644 --- a/javascript/yarn.lock +++ b/javascript/yarn.lock @@ -4289,6 +4289,11 @@ schema-utils@^1.0.0: ajv-errors "^1.0.0" ajv-keywords "^3.1.0" +secrets.js-grempe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/secrets.js-grempe/-/secrets.js-grempe-2.0.0.tgz#65b32bf6bfe4f40e8ed0e44dc74f469e293a4ab8" + integrity sha512-4xkOIaDAg998dTFXZUJTOoVbdLHfB818SMeLJ69ABccgGEKokxsoRFupAFfAImloUSKv4QUGNMgKVbKMf6z0Ug== + select-hose@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca"