From 42f32d89092f23b78d3bbf92fa601b431a3e0e86 Mon Sep 17 00:00:00 2001 From: Jakub Rojek Date: Wed, 20 Jan 2021 17:16:11 +0100 Subject: [PATCH] Add privkey in WIF format --- docker-compose.yml | 5 ++++- .../pages/keyGenerator/KeyGeneratorContent.tsx | 9 +++++++-- src/components/pages/keyGenerator/KeyGeneratorPdf.tsx | 3 ++- src/locale/en.ts | 1 + src/service/KeyGenerator.ts | 9 +++++++++ 5 files changed, 23 insertions(+), 4 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 75338b7..36e4f75 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -25,4 +25,7 @@ services: - "/app/node_modules" # set the environment to development environment: - - NODE_ENV=development \ No newline at end of file + - NODE_ENV=development + - REACT_APP_NETWORK=mainnet + + diff --git a/src/components/pages/keyGenerator/KeyGeneratorContent.tsx b/src/components/pages/keyGenerator/KeyGeneratorContent.tsx index c1d7ecb..da7fbe1 100644 --- a/src/components/pages/keyGenerator/KeyGeneratorContent.tsx +++ b/src/components/pages/keyGenerator/KeyGeneratorContent.tsx @@ -14,6 +14,7 @@ import './keyGeneratorContent.scss'; export interface GeneratedKey { privateKey: string; + privateKeyWIF: string; publicKey: string; words: string[]; } @@ -28,6 +29,7 @@ export class KeyGeneratorContent extends React.PureComponent super(props); this.state = { privateKey: '', + privateKeyWIF: '', publicKey: '', words: [], publicKeyImgUrl: '', @@ -43,6 +45,7 @@ export class KeyGeneratorContent extends React.PureComponent const keys = generateNewKeys(); this.setState({ privateKey: keys.privateKey, + privateKeyWIF: keys.privateKeyWIF, publicKey: keys.publicKey, words: keys.words }); @@ -60,7 +63,7 @@ export class KeyGeneratorContent extends React.PureComponent } render() { - const { privateKey, publicKey, words, privateKeyImgUrl, publicKeyImgUrl } = this.state; + const { privateKey, privateKeyWIF, publicKey, words, privateKeyImgUrl, publicKeyImgUrl } = this.state; return (

{en.content.title}

@@ -83,6 +86,8 @@ export class KeyGeneratorContent extends React.PureComponent
{words?.map((word, index) => ())}
+
); diff --git a/src/components/pages/keyGenerator/KeyGeneratorPdf.tsx b/src/components/pages/keyGenerator/KeyGeneratorPdf.tsx index b2f0bf7..e7ffd87 100644 --- a/src/components/pages/keyGenerator/KeyGeneratorPdf.tsx +++ b/src/components/pages/keyGenerator/KeyGeneratorPdf.tsx @@ -56,7 +56,7 @@ const breakWord = (word: string) => { } export const KeyGeneratorPdf = (props: KeyGenerator) => { - const { publicKey, publicKeyImgUrl, privateKeyImgUrl, words } = props; + const { publicKey, publicKeyImgUrl, privateKeyImgUrl, words, privateKeyWIF } = props; return ( @@ -68,6 +68,7 @@ export const KeyGeneratorPdf = (props: KeyGenerator) => { {en.pdf.privateKey} + {breakWord(privateKeyWIF).map((word) => `${word}\n`)} {words.map((word: string, index: number) => ({index + 1}. {word}))} diff --git a/src/locale/en.ts b/src/locale/en.ts index 787fc34..11a1aa2 100644 --- a/src/locale/en.ts +++ b/src/locale/en.ts @@ -9,6 +9,7 @@ export const en = { multiline: 'Multiline', publicKeyQrCode: 'Public key QR code', privateKey: 'Private key', + privateKeyWIF: 'Private key in WIF', phrase: 'Phrase', privateKeyQrCode: 'Private key QR code', generateNewKey: 'Generate new key', diff --git a/src/service/KeyGenerator.ts b/src/service/KeyGenerator.ts index 6dfe151..b55eeee 100644 --- a/src/service/KeyGenerator.ts +++ b/src/service/KeyGenerator.ts @@ -5,6 +5,7 @@ import { pbkdf2Sync } from 'pbkdf2'; import * as ecurve from 'ecurve'; import { GeneratedKey } from '../components/pages/keyGenerator/KeyGeneratorContent'; const bigi = require('bigi'); +const wif = require('wif'); const getBitsFromBytes = (bytes: Buffer) => { let bits = ''; @@ -40,9 +41,17 @@ export const generateNewKeys = (): GeneratedKey => { const privateKey = pbkdf2Sync(random128bits, random132bits.slice(0, 4), 1, 32, 'sha256'); const curve = ecurve.getCurveByName('secp256k1'); const publicKey = curve.G.multiply(bigi.fromBuffer(privateKey)).getEncoded(false).toString('hex'); + let networkWIF; + if (process.env.REACT_APP_NETWORK === 'testnet' || process.env.REACT_APP_NETWORK === 'regtest') { + networkWIF = 0xef; + } else { + networkWIF = 0x80; + } + return { publicKey, privateKey: privateKey.toString('hex'), + privateKeyWIF: wif.encode(networkWIF, privateKey, false), words: generatedWords || [] }; }