2import { Just, Nothing } from 'folktale/maybe';
3import * as need from './need';
5import * as noun from '../nockjs/noun';
6import * as serial from '../nockjs/serial';
7import * as kg from 'urbit-key-generation/dist';
9import { eqAddr, addHexPrefix } from './wallet';
11const NETWORK_KEY_CURVE_PARAMETER = '42';
15 let hex = buf.reverse().toString('hex');
16 let n = new BN(hex, 'hex');
18 while (1 === n.cmpn(0)) {
19 c.push(n.andln(0x3f));
39 String.fromCharCode(trans(b)) + (i && 0 === i % 5 ? '.' : '') + a,
50 const pad = hex.length % 2 === 0 ? hex : '0' + hex;
51 return Buffer.from(pad, 'hex').reverse();
54// simple alias to avoid importing kg into component scope
55export const deriveNetworkKeys = seed => kg.deriveNetworkKeys(seed);
58 * @param {object} pair
59 * @param {number} point
60 * @param {number} revision
63export const compileNetworkingKey = (pair, point, revision) => {
65 pair.crypt.private + pair.auth.private + NETWORK_KEY_CURVE_PARAMETER,
69 const sed = noun.dwim(
70 noun.Atom.fromInt(point),
71 noun.Atom.fromInt(revision),
72 noun.Atom.fromString(bnsec.toString()),
80 * @param {Maybe<any>} urbitWallet
81 * @param {number} revision
82 * @return {Promise<Maybe<string>>}
84export const deriveNetworkSeedFromUrbitWallet = async (
88 const _urbitWallet = need.wallet(urbitWallet);
89 return deriveNetworkSeedFromSeed(_urbitWallet.management.seed, revision);
93 * @param {Maybe<any>} wallet
94 * @param {Maybe<string>} authMnemonic
95 * @param {object} details
96 * @param {number} revision
97 * @return {Promise<Maybe<string>>}
99export const deriveNetworkSeedFromMnemonic = async (
105 const _wallet = need.wallet(wallet);
106 const _mnemonic = need.authMnemonic(authMnemonic);
107 const isManagementProxy = eqAddr(_wallet.address, details.managementProxy);
109 if (isManagementProxy) {
110 return await deriveNetworkSeedFromSeed(_mnemonic, revision);
117 * @param {string} seed
118 * @param {number} revision
119 * @return {Promise<Maybe<string>>}
121const deriveNetworkSeedFromSeed = async (seed, revision) => {
122 const networkSeed = await kg.deriveNetworkSeed(seed, '', revision);
123 // apparently deriveNetworkSeed can return empty string
124 // and perhaps even malformed
125 return networkSeed === '' ? Nothing() : Just(networkSeed);
129 * @return {Promise<Maybe<string>>}
131export const attemptNetworkSeedDerivation = async ({
138 if (Just.hasInstance(urbitWallet)) {
139 return await deriveNetworkSeedFromUrbitWallet(urbitWallet, revision);
142 if (Just.hasInstance(wallet) && Just.hasInstance(authMnemonic)) {
143 return await deriveNetworkSeedFromMnemonic(
156 * @param {object} pair
157 * @param {object} details
160export const keysMatchChain = (pair, details) => {
161 const { crypt, auth } = pair;
162 const { encryptionKey, authenticationKey } = details;
165 encryptionKey === addHexPrefix(crypt.public) &&
166 authenticationKey === addHexPrefix(auth.public)
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list