on master help sign in
Merge pull request #508 from urbit/m/better-token-keyfiles
89c47adFang
src/lib/keys.js+9−4
@@ -143,12 +143,17 @@ const deriveNetworkSeedFromMnemonic = async (
143};
143};
144
144
145/**
145/**
146+ * @param {number} point
146 * @param {string} authToken
147 * @param {string} authToken
147− * @param {number} number
148+ * @param {number} revision
148 * @return {Maybe<string>}
149 * @return {Maybe<string>}
149 */
150 */
150−export const deriveNetworkSeedFromAuthToken = (authToken, revision, point) => {
151+export const deriveNetworkSeedFromAuthToken = (point, authToken, revision) => {
152+ //NOTE revision is the point's on-chain revision number.
153+ // since deriveNetworkSeedFromMnemonic does this too, we decrement the
154+ // revision number by one before deriving from it.
155+ const salt = Buffer.from(`revision-${point}-${revision - 1}`);
151− const networkSeed = shas(authToken, `revision-${point}-${revision}`)
156+ const networkSeed = shas(authToken, salt)
152 .toString('hex')
157 .toString('hex')
153 .slice(0, 32);
158 .slice(0, 32);
154 return Just(networkSeed);
159 return Just(networkSeed);
@@ -168,7 +173,7 @@ export const attemptNetworkSeedDerivation = async ({
168 }
173 }
169
174
170 if (Just.hasInstance(authToken)) {
175 if (Just.hasInstance(authToken)) {
171− return deriveNetworkSeedFromAuthToken(authToken.value, point, revision);
176+ return deriveNetworkSeedFromAuthToken(point, authToken.value, revision);
172 }
177 }
173
178
174 return Nothing();
179 return Nothing();
src/lib/networkCode.js+5
@@ -23,6 +23,11 @@ export function shas(buf, salt) {
23}
23}
24
24
25function xor(a, b) {
25function xor(a, b) {
26+ if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
27+ console.log('a', a);
28+ console.log('b', b);
29+ throw new Error('only xor buffers!');
30+ }
26 const length = Math.max(a.byteLength, b.byteLength);
31 const length = Math.max(a.byteLength, b.byteLength);
27 const result = new Uint8Array(length);
32 const result = new Uint8Array(length);
28 for (let i = 0; i < length; i++) {
33 for (let i = 0; i < length; i++) {