on master help sign in
Merge pull request #508 from urbit/m/better-token-keyfiles

deterministic keyfiles: fixes and improvements

commit89c47adc32e39d890f5fdc837342294066d63e31 authorFang <git@fang.io> dateFri 24 Jul 2020, 14:15 (6 years ago) parentf6b288deae5e1c
2 files changed+14−4
src/lib/keys.js+9−4 src/lib/networkCode.js+5
src/lib/keys.js+9−4
@@ -143,12 +143,17 @@ const deriveNetworkSeedFromMnemonic = async (
143143};
144144
145145/**
146+ * @param {number} point
146147 * @param {string} authToken
147− * @param {number} number
148+ * @param {number} revision
148149 * @return {Maybe<string>}
149150 */
150−export const deriveNetworkSeedFromAuthToken = (authToken, revision, point) => {
151− const networkSeed = shas(authToken, `revision-${point}-${revision}`)
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}`);
156+ const networkSeed = shas(authToken, salt)
152157 .toString('hex')
153158 .slice(0, 32);
154159 return Just(networkSeed);
@@ -168,7 +173,7 @@ export const attemptNetworkSeedDerivation = async ({
168173 }
169174
170175 if (Just.hasInstance(authToken)) {
171− return deriveNetworkSeedFromAuthToken(authToken.value, point, revision);
176+ return deriveNetworkSeedFromAuthToken(point, authToken.value, revision);
172177 }
173178
174179 return Nothing();
src/lib/networkCode.js+5
@@ -23,6 +23,11 @@ export function shas(buf, salt) {
2323}
2424
2525function 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+ }
2631 const length = Math.max(a.byteLength, b.byteLength);
2732 const result = new Uint8Array(length);
2833 for (let i = 0; i < length; i++) {