From 9d84559ac5ebe0e34d8c92532fdce05b81b3648c Mon Sep 17 00:00:00 2001 From: loziniak Date: Thu, 28 Mar 2019 02:04:50 +0100 Subject: [PATCH 1/8] fix: hex! type unsupported --- eth-wallet.red | 6 +++--- rlp.red | 6 +----- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/eth-wallet.red b/eth-wallet.red index 94a9889..7b45b80 100644 --- a/eth-wallet.red +++ b/eth-wallet.red @@ -42,10 +42,10 @@ eth-wallet: context [ ; tx: [ ; nonce [integer!] - ; gas-price [hex!] + ; gas-price [binary!] ; gas-limit [integer!] ; to-address [binary!] - ; amount [hex!] ;-- Wei + ; amount [binary!] ;-- Wei ; data [binary!] ; ] sign-transaction: func [ @@ -107,6 +107,6 @@ print #{49ee230b1605382ac1c40079191bca937fc30e8c2fa845b7de27a96ffcc4ddbf} = eth- print #{eef2c0702151930b84cffcaa642af58e692956314519114e78f3211a6465f28b} = eth-wallet/get-private 2 eth-wallet/private-key: #{4646464646464646464646464646464646464646464646464646464646464646} -data: reduce [9 to hex! #{04A817C800} 21000 #{3535353535353535353535353535353535353535} to hex! #{0DE0B6B3A7640000} #{}] +data: reduce [9 #{04A817C800} 21000 #{3535353535353535353535353535353535353535} #{0DE0B6B3A7640000} #{}] print #{f86c098504a817c800825208943535353535353535353535353535353535353535880de0b6b3a76400008025a028ef61340bd939bc2195fe537567866003e1a15d3c71ff63e1590620aa636276a067cbe9d8997f761aecb703304b3800ccf555c9f3dc64214b297fb1966a3b6d83} = eth-wallet/sign-transaction none data 1 diff --git a/rlp.red b/rlp.red index 6889b5b..48d18cd 100644 --- a/rlp.red +++ b/rlp.red @@ -29,11 +29,7 @@ rlp: context [ ] rejoin [encode-length length? buffer 192 buffer] ][ - buffer: either hex? data [ - trim/head to binary! data - ][ - to binary! data - ] + buffer: to binary! data if number? data [buffer: trim/head buffer] either all [1 = length? buffer buffer/1 < 128][ buffer From 0fd937778c49b3d02c9b710c8f092ba5633164dd Mon Sep 17 00:00:00 2001 From: loziniak Date: Tue, 2 Apr 2019 16:46:44 +0200 Subject: [PATCH 2/8] typo fix --- bip32.red | 6 +++--- secp256k1.red | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/bip32.red b/bip32.red index d7cf188..3fb0066 100644 --- a/bip32.red +++ b/bip32.red @@ -18,7 +18,7 @@ bip32key: context [ /local I Il Ir ][ I: checksum/with bin 'SHA512 "Bitcoin seed" - if not secp256/prikey-valid? Il: copy/part I 32 [return none] + if not secp256/privkey-valid? Il: copy/part I 32 [return none] Ir: copy/part skip I 32 32 reduce [Il Ir] ] @@ -38,7 +38,7 @@ bip32key: context [ repend data [pub to binary! index] ] I: checksum/with data 'SHA512 cpar - if not secp256/prikey-valid? Il: copy/part I 32 [return none] + if not secp256/privkey-valid? Il: copy/part I 32 [return none] Ir: copy/part skip I 32 32 if none? child: secp256/privkey-tweak-add kpar Il [return none] reduce [child Ir] @@ -56,7 +56,7 @@ bip32key: context [ pub: secp256/serialize-pubkey kpar true repend data [pub to binary! index] I: checksum/with data 'SHA512 cpar - if not secp256/prikey-valid? Il: copy/part I 32 [return none] + if not secp256/privkey-valid? Il: copy/part I 32 [return none] Ir: copy/part skip I 32 32 pub2: secp256/create-pubkey Il child: secp256/pubkey-combine reduce [pub2 kpar] diff --git a/secp256k1.red b/secp256k1.red index 6531a03..3c21dcd 100644 --- a/secp256k1.red +++ b/secp256k1.red @@ -305,7 +305,7 @@ secp256: context [ free data ] - prikey-valid?: routine [ + privkey-valid?: routine [ private-key [binary!] return: [logic!] /local From 0471088ba2b2c91b7e99399bf4a5aad62b09d90d Mon Sep 17 00:00:00 2001 From: loziniak Date: Tue, 2 Apr 2019 16:48:12 +0200 Subject: [PATCH 3/8] fix: pobkdf2 bug --- pbkdf2.red | 1 + 1 file changed, 1 insertion(+) diff --git a/pbkdf2.red b/pbkdf2.red index 2378f65..81ff5f8 100644 --- a/pbkdf2.red +++ b/pbkdf2.red @@ -44,6 +44,7 @@ pbkdf2: context [ len: either key-len > blk-size [blk-size][key-len] append/part output sum len key-len: key-len - len + i: i + 1 ] output ] From ac65b7e3cd3947e8d34ac624fb010fe59978a615 Mon Sep 17 00:00:00 2001 From: loziniak Date: Sun, 7 Apr 2019 12:39:47 +0200 Subject: [PATCH 4/8] bip39 urandom function in Red. --- bip39.red | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/bip39.red b/bip39.red index fcefecb..ba65f68 100644 --- a/bip39.red +++ b/bip39.red @@ -8,15 +8,16 @@ Red [ #include %pbkdf2.red -urandom: routine [ +urandom: function [ len [integer!] - /local - data [byte-ptr!] -][ - data: allocate len - crypto/urandom data len - stack/set-last as red-value! binary/load data len - free data + return: [binary!] +] [ + data: make binary! len + loop len [ + insert data + back tail to-binary (random/secure 256) - 1 + ] + data ] word-list: context [ From bec63b13c0a8cfb69f358a984fb59fcef922ceea Mon Sep 17 00:00:00 2001 From: loziniak Date: Sun, 7 Apr 2019 12:40:36 +0200 Subject: [PATCH 5/8] typo: secp256k1.red Red header --- secp256k1.red | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/secp256k1.red b/secp256k1.red index 3c21dcd..084792c 100644 --- a/secp256k1.red +++ b/secp256k1.red @@ -1,7 +1,7 @@ Red [ - Title: "bip39" + Title: "libsecp256k1 bindings" Author: "bitbegin" - File: %bip39.red + File: %secp256k1.red Tabs: 4 License: "BSD-3 - https://github.com/red/red/blob/master/BSD-3-License.txt" ] From 3ff2daa39a31d10efbb2b9a2f7cd1c1e0273299a Mon Sep 17 00:00:00 2001 From: loziniak Date: Sun, 7 Apr 2019 12:44:49 +0200 Subject: [PATCH 6/8] fix: ripemd160 for string argument fix --- ripemd160.red | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ripemd160.red b/ripemd160.red index 8dc4102..460a361 100644 --- a/ripemd160.red +++ b/ripemd160.red @@ -24,7 +24,10 @@ context [ data: binary/rs-head as red-binary! ins len: binary/rs-length? as red-binary! ins ] - TYPE_STRING [data: as byte-ptr! unicode/to-utf8 as red-string! ins :len] + TYPE_STRING [ + len: string/rs-length? as red-string! ins + data: as byte-ptr! unicode/to-utf8 as red-string! ins :len + ] default [ fire [TO_ERROR(script invalid-arg) stack/arguments] ] From 824eb666cfdc1635978bae9fcaffa55e34d05707 Mon Sep 17 00:00:00 2001 From: loziniak Date: Sun, 7 Apr 2019 12:56:19 +0200 Subject: [PATCH 7/8] move eth-wallet tests to separate file --- eth-wallet-test.red | 23 +++++++++++++++++++++++ eth-wallet.red | 16 ---------------- 2 files changed, 23 insertions(+), 16 deletions(-) create mode 100644 eth-wallet-test.red diff --git a/eth-wallet-test.red b/eth-wallet-test.red new file mode 100644 index 0000000..2de9215 --- /dev/null +++ b/eth-wallet-test.red @@ -0,0 +1,23 @@ +Red [ + File: %eth-wallet-test.red + Author: "bitbegin" + Notes: {Primarily a part of %eth-wallet.red} +] + +#include %eth-wallet.red + +eth-wallet/init [abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about] "TREZOR" +;eth-wallet/bip32-path: [8000002Ch 8000003Ch 80000000h 0] + +print "0x9c32F71D4DB8Fb9e1A58B0a80dF79935e7256FA6" == eth-wallet/get-address 0 +print "0x7AF7283bd1462C3b957e8FAc28Dc19cBbF2FAdfe" == eth-wallet/get-address 1 +print "0x05f48E30fCb69ADcd2A591Ebc7123be8BE72D7a1" == eth-wallet/get-address 2 + +print #{62f1d86b246c81bdd8f6c166d56896a4a5e1eddbcaebe06480e5c0bc74c28224} = eth-wallet/get-private 0 +print #{49ee230b1605382ac1c40079191bca937fc30e8c2fa845b7de27a96ffcc4ddbf} = eth-wallet/get-private 1 +print #{eef2c0702151930b84cffcaa642af58e692956314519114e78f3211a6465f28b} = eth-wallet/get-private 2 + +eth-wallet/private-key: #{4646464646464646464646464646464646464646464646464646464646464646} +data: reduce [9 #{04A817C800} 21000 #{3535353535353535353535353535353535353535} #{0DE0B6B3A7640000} #{}] +print #{f86c098504a817c800825208943535353535353535353535353535353535353535880de0b6b3a76400008025a028ef61340bd939bc2195fe537567866003e1a15d3c71ff63e1590620aa636276a067cbe9d8997f761aecb703304b3800ccf555c9f3dc64214b297fb1966a3b6d83} += eth-wallet/sign-transaction none data 1 diff --git a/eth-wallet.red b/eth-wallet.red index 7b45b80..ac4792b 100644 --- a/eth-wallet.red +++ b/eth-wallet.red @@ -94,19 +94,3 @@ eth-wallet: context [ xprv/6 ] ] - -eth-wallet/init [abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about] "TREZOR" -;eth-wallet/bip32-path: [8000002Ch 8000003Ch 80000000h 0] - -print "0x9c32F71D4DB8Fb9e1A58B0a80dF79935e7256FA6" == eth-wallet/get-address 0 -print "0x7AF7283bd1462C3b957e8FAc28Dc19cBbF2FAdfe" == eth-wallet/get-address 1 -print "0x05f48E30fCb69ADcd2A591Ebc7123be8BE72D7a1" == eth-wallet/get-address 2 - -print #{62f1d86b246c81bdd8f6c166d56896a4a5e1eddbcaebe06480e5c0bc74c28224} = eth-wallet/get-private 0 -print #{49ee230b1605382ac1c40079191bca937fc30e8c2fa845b7de27a96ffcc4ddbf} = eth-wallet/get-private 1 -print #{eef2c0702151930b84cffcaa642af58e692956314519114e78f3211a6465f28b} = eth-wallet/get-private 2 - -eth-wallet/private-key: #{4646464646464646464646464646464646464646464646464646464646464646} -data: reduce [9 #{04A817C800} 21000 #{3535353535353535353535353535353535353535} #{0DE0B6B3A7640000} #{}] -print #{f86c098504a817c800825208943535353535353535353535353535353535353535880de0b6b3a76400008025a028ef61340bd939bc2195fe537567866003e1a15d3c71ff63e1590620aa636276a067cbe9d8997f761aecb703304b3800ccf555c9f3dc64214b297fb1966a3b6d83} -= eth-wallet/sign-transaction none data 1 From e3a15f77e7735bad7067631c9d0fe1d8db5d90fa Mon Sep 17 00:00:00 2001 From: loziniak Date: Fri, 7 Feb 2020 11:03:34 +0100 Subject: [PATCH 8/8] FIX: pbkdf2 modified salt --- pbkdf2.red | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pbkdf2.red b/pbkdf2.red index 81ff5f8..295a6c7 100644 --- a/pbkdf2.red +++ b/pbkdf2.red @@ -34,7 +34,7 @@ pbkdf2: context [ blk-size: alg-digest-size alg output: make binary! key-len i: 1 - salt-tail: tail salt + salt-tail: tail copy salt while [key-len > 0][ value: head change salt-tail to-string to-binary i value: sum: checksum/with value alg password