Bitcoin Forum
November 14, 2024, 12:26:44 PM *
News: Check out the artwork 1Dq created to commemorate this forum's 15th anniversary
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: I need a source code of WIF checksum checking  (Read 1394 times)
tywors (OP)
Sr. Member
****
Offline Offline

Activity: 414
Merit: 250


View Profile
September 17, 2014, 04:38:40 PM
 #1

Hello! I have one problem with this exemple:



I try duplicate this form to my hosting but i can't.  I try convertirn to Base58 but my result is different.  Huh

Any have the source code of this form?    In Java/PHP/etc..

Thanks!  Wink

davec
Newbie
*
Offline Offline

Activity: 39
Merit: 0


View Profile
September 17, 2014, 06:59:53 PM
Last edit: September 17, 2014, 07:24:32 PM by davec
 #2

It's not for the form, but this is code to encode and decode a WIF written in Go and is used by the btcd suite and fully tested.

https://github.com/conformal/btcutil/blob/master/wif.go

In particular, look at the DecodeWIF function:

DecodeWIF -- https://github.com/conformal/btcutil/blob/master/wif.go#L84-L121
tywors (OP)
Sr. Member
****
Offline Offline

Activity: 414
Merit: 250


View Profile
September 17, 2014, 07:22:33 PM
 #3

It's not for the form, but this is code to encode and decode a WIF written in Go and is used by the btcd suite and fully tested.

https://github.com/conformal/btcutil/blob/master/wif.go

In particular, look at the DecodeWIF function:

DecodeWIF -- https://github.com/conformal/btcutil/blob/master/wif.go#L84-L121


Thanks!!  Grin

davec
Newbie
*
Offline Offline

Activity: 39
Merit: 0


View Profile
September 17, 2014, 07:25:05 PM
Last edit: September 17, 2014, 07:52:51 PM by davec
 #4

Also, here is some Go code to do exactly what's in the screenshot using the btcd suite packages:

package main

import (
   "fmt"
   "github.com/conformal/btcutil"
   "github.com/conformal/btcwire"
)

func main() {
   step1 := "5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvyTJ"
   fmt.Printf("1 - Wallet import format: %s\n", step1)

   step2 := btcutil.Base58Decode(step1)
   fmt.Printf("2 - Converting WIF as Base58 string to byte array: %x\n", step2)

   step3 := step2[:len(step2)-4]
   fmt.Printf("3 - Dropping last 4 checksum bytes from 2: %x\n", step3)

   step5 := btcwire.DoubleSha256(step3)
   fmt.Printf("4/5 - Double SHA-256 hash of 3: %x\n", step5)

   fmt.Printf("6 - First 4 bytes of 5, this is the calculated checksum: %x\n", step5[:4])

   step7 := step2[len(step2)-4:]
   fmt.Printf("7 - Take the last 4 bytes of 2, this is the original checksum: %x\n", step7)
}


And the result of running that program:

1 - Wallet import format: 5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvyTJ
2 - Converting WIF as Base58 string to byte array: 800c28fca386c7a227600b2fe50b7cae11ec86d3bf1fbe471be89827e19d72aa1d507a5b8d
3 - Dropping last 4 checksum bytes from 2: 800c28fca386c7a227600b2fe50b7cae11ec86d3bf1fbe471be89827e19d72aa1d
4/5 - Double SHA-256 hash of 3: 507a5b8dfed0fc6fe8801743720cedec06aa5c6fca72b07c49964492fb98a714
6 - First 4 bytes of 5, this is the calculated checksum: 507a5b8d
7 - Take the last 4 bytes of 2, this is the original checksum: 507a5b8d
tywors (OP)
Sr. Member
****
Offline Offline

Activity: 414
Merit: 250


View Profile
September 18, 2014, 10:46:09 AM
 #5

Also, here is some Go code to do exactly what's in the screenshot using the btcd suite packages:

package main

import (
   "fmt"
   "github.com/conformal/btcutil"
   "github.com/conformal/btcwire"
)

func main() {
   step1 := "5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvyTJ"
   fmt.Printf("1 - Wallet import format: %s\n", step1)

   step2 := btcutil.Base58Decode(step1)
   fmt.Printf("2 - Converting WIF as Base58 string to byte array: %x\n", step2)

   step3 := step2[:len(step2)-4]
   fmt.Printf("3 - Dropping last 4 checksum bytes from 2: %x\n", step3)

   step5 := btcwire.DoubleSha256(step3)
   fmt.Printf("4/5 - Double SHA-256 hash of 3: %x\n", step5)

   fmt.Printf("6 - First 4 bytes of 5, this is the calculated checksum: %x\n", step5[:4])

   step7 := step2[len(step2)-4:]
   fmt.Printf("7 - Take the last 4 bytes of 2, this is the original checksum: %x\n", step7)
}


And the result of running that program:

1 - Wallet import format: 5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvyTJ
2 - Converting WIF as Base58 string to byte array: 800c28fca386c7a227600b2fe50b7cae11ec86d3bf1fbe471be89827e19d72aa1d507a5b8d
3 - Dropping last 4 checksum bytes from 2: 800c28fca386c7a227600b2fe50b7cae11ec86d3bf1fbe471be89827e19d72aa1d
4/5 - Double SHA-256 hash of 3: 507a5b8dfed0fc6fe8801743720cedec06aa5c6fca72b07c49964492fb98a714
6 - First 4 bytes of 5, this is the calculated checksum: 507a5b8d
7 - Take the last 4 bytes of 2, this is the original checksum: 507a5b8d


Perfect!!

i never dev in GO. One question i need strings.EqualFold("Go", "go") but i need to differentiate between uppercase and lowercase.

Thanks!

davec
Newbie
*
Offline Offline

Activity: 39
Merit: 0


View Profile
September 19, 2014, 10:59:01 PM
 #6

The == and != operators work with strings in a case sensitive fashion in Go.

fmt.Println("Go" == "Go")
fmt.Println("Go" == "go")

Result:

true
false
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!