on master help sign in
keyfiles: make all keyfiles deterministic
commitf6b288d51ee584f6c5086ae9db2ae9dac0ee9a02 authorLiam Fitzgerald <liam@urizen.co> dateTue 21 Jul 2020, 14:46 (6 years ago) parentd48ead3
7 files changed+31−30
migrations/1_migration.js+3 src/lib/keys.js+17−10 src/lib/useInviter.js+1 src/lib/useKeyfileGenerator.js+4−6 src/views/Invite/Cohort.js+1−1 src/views/IssueChild.js+1−1 src/views/UrbitOS/NetworkingKeys.js+4−12
migrations/1_migration.js+3
@@ -119,6 +119,7 @@ module.exports = async function(deployer) {
119119 await lsr.deposit(user1, offset);
120120 await csr.deposit(user1, offset + 1);
121121 }
122+ break;
122123 case 'INVITES':
123124 await ecliptic.createGalaxy(0, own);
124125 await ecliptic.configureKeys(0, '0x123', '0x456', 1, false);
@@ -130,6 +131,7 @@ module.exports = async function(deployer) {
130131 await ecliptic.spawn(131328, own);
131132 await ecliptic.spawn(512, own);
132133 await sending.setPoolSize(256, 65792, 1000);
134+ break;
133135 case 'RESIDENTS':
134136 await ecliptic.createGalaxy(0, own);
135137 await ecliptic.configureKeys(0, '0x123', '0x456', 1, false);
@@ -141,6 +143,7 @@ module.exports = async function(deployer) {
141143 await ecliptic.spawn(offset + 256, own);
142144 await ecliptic.transferPoint(offset + 256, user1, false);
143145 }
146+ break;
144147
145148 default:
146149 return;
src/lib/keys.js+17−10
@@ -6,6 +6,7 @@ import * as serial from '../nockjs/serial';
66import * as kg from 'urbit-key-generation';
77
88import { eqAddr, addHexPrefix } from './wallet';
9+import { shas } from './networkCode';
910
1011// the curve param for the network keys
1112export const NETWORK_KEY_CURVE_PARAMETER = '42';
@@ -141,27 +142,33 @@ const deriveNetworkSeedFromMnemonic = async (
141142 return Just(await kg.deriveNetworkSeed(mnemonic, passphrase, revision - 1));
142143};
143144
145+/**
146+ * @param {string} authToken
147+ * @param {number} number
148+ * @return {Maybe<string>}
149+ */
150+export const deriveNetworkSeedFromAuthToken = (authToken, revision, point) => {
151+ const networkSeed = shas(authToken, `revision-${point}-${revision}`)
152+ .toString('hex')
153+ .slice(0, 32);
154+ return Just(networkSeed);
155+};
156+
144157/**
145158 * @return {Promise<Maybe<string>>}
146159 */
147160export const attemptNetworkSeedDerivation = async ({
148161 urbitWallet,
149− wallet,
150− authMnemonic,
151− details,
162+ point,
163+ authToken,
152164 revision,
153165}) => {
154166 if (Just.hasInstance(urbitWallet)) {
155167 return await deriveNetworkSeedFromUrbitWallet(urbitWallet.value, revision);
156168 }
157169
158− if (Just.hasInstance(wallet) && Just.hasInstance(authMnemonic)) {
159− return await deriveNetworkSeedFromManagementMnemonic(
160− wallet.value,
161− authMnemonic.value,
162− details,
163− revision
164− );
170+ if (Just.hasInstance(authToken)) {
171+ return deriveNetworkSeedFromAuthToken(authToken.value, point, revision);
165172 }
166173
167174 return Nothing();
src/lib/useInviter.js+1
@@ -204,6 +204,7 @@ const useInviter = () => {
204204 return { invites: confirmedInvites };
205205 },
206206 [
207+ authToken,
207208 contracts,
208209 gasPrice,
209210 networkType,
src/lib/useKeyfileGenerator.js+4−6
@@ -20,7 +20,7 @@ import useCurrentPermissions from './useCurrentPermissions';
2020import convertToInt from './convertToInt';
2121
2222export default function useKeyfileGenerator(manualNetworkSeed) {
23− const { urbitWallet, wallet, authMnemonic } = useWallet();
23+ const { urbitWallet, wallet, authMnemonic, authToken } = useWallet();
2424 const { pointCursor } = usePointCursor();
2525 const { getDetails } = usePointCache();
2626
@@ -60,9 +60,8 @@ export default function useKeyfileGenerator(manualNetworkSeed) {
6060 ? Just(manualNetworkSeed)
6161 : await attemptNetworkSeedDerivation({
6262 urbitWallet,
63− wallet,
64− authMnemonic,
65− details: _details,
63+ authToken,
64+ point: _point,
6665 revision: networkRevision,
6766 });
6867
@@ -95,11 +94,10 @@ export default function useKeyfileGenerator(manualNetworkSeed) {
9594 hasNetworkingKeys,
9695 manualNetworkSeed,
9796 urbitWallet,
98− wallet,
99− authMnemonic,
10097 setCode,
10198 details,
10299 _point,
100+ authToken,
103101 ]);
104102
105103 const filename = useMemo(() => {
src/views/Invite/Cohort.js+1−1
@@ -205,7 +205,7 @@ function CohortMemberExpanded({ point, className, ...rest }) {
205205 }
206206 };
207207 fetchWallet();
208− }, [codeVisible]);
208+ }, [authToken, codeVisible, contracts, details, point]);
209209
210210 useEffect(() => {
211211 setCodeVisible(false);
src/views/IssueChild.js+1−1
@@ -117,7 +117,7 @@ export default function IssueChild() {
117117 },
118118 validateForm
119119 ),
120− [validateForm]
120+ [_point, validateForm]
121121 );
122122
123123 const onValues = useCallback(
src/views/UrbitOS/NetworkingKeys.js+4−12
@@ -38,7 +38,7 @@ import FormError from 'form/FormError';
3838import convertToInt from 'lib/convertToInt';
3939
4040function useSetKeys(manualNetworkSeed, setManualNetworkSeed) {
41− const { urbitWallet, wallet, authMnemonic } = useWallet();
41+ const { urbitWallet, wallet, authMnemonic, authToken } = useWallet();
4242 const { pointCursor } = usePointCursor();
4343 const { syncDetails, syncRekeyDate, getDetails } = usePointCache();
4444 const { contracts } = useNetwork();
@@ -68,9 +68,8 @@ function useSetKeys(manualNetworkSeed, setManualNetworkSeed) {
6868
6969 const networkSeed = await attemptNetworkSeedDerivation({
7070 urbitWallet,
71− wallet,
72− authMnemonic,
73− details: _details,
71+ point: _point,
72+ authToken,
7473 revision: newNetworkRevision,
7574 });
7675
@@ -84,14 +83,7 @@ function useSetKeys(manualNetworkSeed, setManualNetworkSeed) {
8483 return randomSeed.current;
8584 }
8685 },
87− [
88− _details,
89− authMnemonic,
90− networkRevision,
91− setManualNetworkSeed,
92− urbitWallet,
93− wallet,
94− ]
86+ [setManualNetworkSeed, networkRevision, urbitWallet, _point, authToken]
9587 );
9688
9789 const { completed: _completed, ...rest } = useEthereumTransaction(