/
evm2bit_command.go
65 lines (55 loc) · 1.64 KB
/
evm2bit_command.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package cli
import (
"context"
"fmt"
"log"
"github.com/fatih/color"
skein "github.com/nikola43/stardust/crypto"
"github.com/nikola43/stardust/wallet"
)
type Evm2BitCommand struct {
args *Args
}
const (
evm2bitCommand = "evm2bit"
evm2bitDescription = "generate BTC public and private key from ETH private key"
)
func newEvm2BitCommand() Command {
return Command{
Name: evm2bitCommand,
Description: evm2bitDescription,
Exec: &Evm2BitCommand{},
}
}
func (c *Evm2BitCommand) ExecCommand(ctx context.Context, args []string) error {
c.args = &Args{args}
if len(args) == 0 {
return ErrorFromString(fmt.Sprintf("file not found"))
}
fmt.Println(color.YellowString("BTC to ETH"))
ethWallet, err := wallet.GenerateETHWalletFromPlainPrivateKey(args[0])
if err != nil {
log.Fatal(err)
}
fmt.Println(color.CyanString("ETH Public Key: "), color.YellowString(ethWallet.PublicKey))
fmt.Println(color.CyanString("ETH Private Key: "), color.YellowString(ethWallet.PrivateKey))
fmt.Println()
btcDerivedPrivateKey := HashValue(ethWallet.PrivateKey)
btcDerivedPublicKey, err := GenerateAddressFromPlainPrivateKey(btcDerivedPrivateKey)
if err != nil {
log.Fatal(err)
}
fmt.Println(color.CyanString("BTC Derived Public Key: "), color.YellowString(btcDerivedPublicKey.Hex()))
fmt.Println(color.CyanString("BTC Derived Private Key: "), color.YellowString(btcDerivedPrivateKey))
fmt.Println()
return nil
}
func HashSkein1024(data []byte) []byte {
sk := new(skein.Skein1024)
sk.Init(1024)
sk.Update(data)
outputBuffer := make([]byte, 1024)
sk.Final(outputBuffer)
//return hex.EncodeToString(outputBuffer)
return outputBuffer
}