diff --git a/javascript/src/iframe/viamapi-iframe.js b/javascript/src/iframe/viamapi-iframe.js index 944bf6743e4244b63e6207b0b8953048fa3a9646..3c8b7db3e46cf6823c2200e2c6c30abe8fb390c4 100644 --- a/javascript/src/iframe/viamapi-iframe.js +++ b/javascript/src/iframe/viamapi-iframe.js @@ -40,6 +40,12 @@ import { STATUS_USER_BLOCKED } from "../constants/statuses"; import generateQrCode from "../utilities/generateQrCode"; +import { + generateRecoveryKey, + divideSecretToShares, + combineSecret, + encryptShare +} from "../utilities/secrets"; const penpalMethods = require("../../temp/penpal-methods").default; const WopiAPI = require("./wopiapi-iframe"); @@ -282,6 +288,28 @@ const handleIdentityLogin = (identity, uuid, token) => { setKeyForUUID(uuid, publicKey); }; +const getTrusteeContactsPublicKeys = async () => { + const { viamApi } = window; + const response = await viamApi.contactsGetTrusteeContactsPublicKeys(); + console.log({ response }); + if (response.data.code !== "200") return response.data; + + const sharesNumber = response.data.data; + const getThreshold = () => + sharesNumber === 3 ? 2 : parseInt(sharesNumber / 2); + const threshold = getThreshold(); + console.log({ threshold }); + const recoveryKey = generateRecoveryKey(512); + const recoveryKeyShares = divideSecretToShares( + recoveryKey, + sharesNumber, + threshold + ); + // Sanity check + const checkKey = combineSecret(recoveryKeyShares.slice(0, 1)); + console.log("first sanity check", checkKey === recoveryKey); +}; + async function executeRestfulFunction(type, that, fn, config, ...args) { const { currentlyAuthenticatedIdentity, @@ -394,7 +422,7 @@ function loadIdentityInternal(identityKey, pinCode) { window.viamAnonymousApi.setIdentity( window.currentlyLoadedIdentity.authentication.publicKey ); - + getTrusteeContactsPublicKeys(); const { publicKey, x509Certificate } = loadedIdentity.authentication; result({ @@ -717,10 +745,7 @@ const connection = Penpal.connectToParent({ }); }); }, - finalizeEmployeeRegistration: async ( - identity, - identifier - ) => { + finalizeEmployeeRegistration: async (identity, identifier) => { viamApi.setIdentity(identity.authentication.publicKey); return executeRestfulFunction( "public", diff --git a/javascript/src/utilities/secrets.js b/javascript/src/utilities/secrets.js index da682e9d32035c81f0aac2cd8f25f4ddcdd901f7..42fe98db7161c052893a93f30e40aa825ad0468d 100644 --- a/javascript/src/utilities/secrets.js +++ b/javascript/src/utilities/secrets.js @@ -5,6 +5,7 @@ export /** * Function generates a random bits length string, and output it in hexadecimal format * * @param {number} bits + * @returns {string} hex */ const generateRecoveryKey = bits => secrets.random(bits); @@ -15,6 +16,7 @@ const generateRecoveryKey = bits => secrets.random(bits); * @param {number} numShares * @param {number} threshold * @param {number} [padLength=128] + * @returns {array} */ export const divideSecretToShares = ( secret, @@ -27,6 +29,7 @@ export const divideSecretToShares = ( * Reconstructs a secret from shares * * @param {array} shares + * @returns {string} */ export const combineSecret = shares => secrets.combine(shares);