[lbry] chaincfg: implement LBRY PoW Hash
This commit is contained in:
parent
a5050cf2de
commit
d7bfc9c077
1 changed files with 29 additions and 1 deletions
|
@ -5,7 +5,12 @@
|
||||||
|
|
||||||
package chainhash
|
package chainhash
|
||||||
|
|
||||||
import "crypto/sha256"
|
import (
|
||||||
|
"crypto/sha256"
|
||||||
|
"crypto/sha512"
|
||||||
|
|
||||||
|
"golang.org/x/crypto/ripemd160"
|
||||||
|
)
|
||||||
|
|
||||||
// HashB calculates hash(b) and returns the resulting bytes.
|
// HashB calculates hash(b) and returns the resulting bytes.
|
||||||
func HashB(b []byte) []byte {
|
func HashB(b []byte) []byte {
|
||||||
|
@ -31,3 +36,26 @@ func DoubleHashH(b []byte) Hash {
|
||||||
first := sha256.Sum256(b)
|
first := sha256.Sum256(b)
|
||||||
return Hash(sha256.Sum256(first[:]))
|
return Hash(sha256.Sum256(first[:]))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// LbryPoWHashH calculates returns the PoW Hash.
|
||||||
|
//
|
||||||
|
// doubled := SHA256(SHA256(b))
|
||||||
|
// expanded := SHA512(doubled)
|
||||||
|
// left := RIPEMD160(expanded[0:32])
|
||||||
|
// right := RIPEMD160(expanded[32:64])
|
||||||
|
// result := SHA256(SHA256(left||right))
|
||||||
|
func LbryPoWHashH(b []byte) Hash {
|
||||||
|
doubled := DoubleHashB(b)
|
||||||
|
expanded := sha512.Sum512(doubled)
|
||||||
|
|
||||||
|
r := ripemd160.New()
|
||||||
|
r.Reset()
|
||||||
|
r.Write(expanded[:sha256.Size])
|
||||||
|
left := r.Sum(nil)
|
||||||
|
|
||||||
|
r.Reset()
|
||||||
|
r.Write(expanded[sha256.Size:])
|
||||||
|
|
||||||
|
combined := r.Sum(left)
|
||||||
|
return DoubleHashH(combined)
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue