diff --git a/javascript/src/constants/secrets.js b/javascript/src/constants/secrets.js index d4adfa2e72594e0c5f44803d9ccb07bf170d8f11..41b9ef5ee76b93cffcc5141a9534e013ff065dbb 100644 --- a/javascript/src/constants/secrets.js +++ b/javascript/src/constants/secrets.js @@ -1 +1,2 @@ export const RECOMMENDED_TRUSTEES = 3; +export const THRESHOLD = 2; diff --git a/javascript/src/utilities/secrets.js b/javascript/src/utilities/secrets.js index 52307d750ce940b0ea06b8d7fc1c7f6b8e48b16b..8da18979d13f3466b644d85b7c016041962332bc 100644 --- a/javascript/src/utilities/secrets.js +++ b/javascript/src/utilities/secrets.js @@ -2,8 +2,7 @@ import secrets from "../lib/secrets"; import { encryptMessage } from "./signingUtilities"; import { encodeResponse } from "./appUtility"; import { getSliceRange } from "./numberUtilities"; - -const THRESHOLD = 2; +import { THRESHOLD } from "../constants/secrets"; /** Initialize */ @@ -58,21 +57,29 @@ export const getRecoveryKeyShares = (recoveryKey, sharesNumber) => { return divideSecretToShares(recoveryKey, sharesNumber, THRESHOLD); }; +function getSecretSliceRange(max) { + const { beginIndex, endIndex } = getSliceRange(max); + if (endIndex - beginIndex < THRESHOLD) { + return getSecretSliceRange(max); + } + + return { beginIndex, endIndex }; +} + export const checkRecoveryKeyCombine = (recoveryKey, recoveryKeyShares) => { let checkKey; - if (recoveryKeyShares.length > 1) { - const { beginIndex, endIndex } = getSliceRange( - recoveryKeyShares.length - 1 - ); - checkKey = combineSecret(recoveryKeyShares.slice(beginIndex, endIndex)); - if (checkKey !== recoveryKey) { - return encodeResponse("400", "", "First sanity check failed"); - } - checkKey = combineSecret(recoveryKeyShares.slice(0, 1)); - if (checkKey === recoveryKey) { - return encodeResponse("400", "", "Second sanity check failed"); - } + const { beginIndex, endIndex } = getSecretSliceRange( + recoveryKeyShares.length + 1 + ); + console.log({ beginIndex, endIndex }); + checkKey = combineSecret(recoveryKeyShares.slice(beginIndex, endIndex)); + if (checkKey !== recoveryKey) { + return encodeResponse("400", "", "First sanity check failed"); + } + checkKey = combineSecret(recoveryKeyShares.slice(0, 2)); + if (checkKey === recoveryKey) { + return encodeResponse("400", "", "Second sanity check failed"); } checkKey = combineSecret(recoveryKeyShares); if (checkKey !== recoveryKey) {