本文整理汇总了Golang中github.com/piotrnar/gocoin/lib/btc.Sha2Sum函数的典型用法代码示例。如果您正苦于以下问题:Golang Sha2Sum函数的具体用法?Golang Sha2Sum怎么用?Golang Sha2Sum使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了Sha2Sum函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: init
func init() {
rd, _ := hex.DecodeString("0100000001b14bdcbc3e01bdaad36cc08e81e69c82e1060bc14e518db2b49aa43ad90ba26000000000490047304402203f16c6f40162ab686621ef3000b04e75418a0c0cb2d8aebeac894ae360ac1e780220ddc15ecdfc3507ac48e1681a33eb60996631bf6bf5bc0a0682c4db743ce7ca2b01ffffffff0140420f00000000001976a914660d4ef3a743e3e696ad990364e555c271ad504b88ac00000000")
dummy_tx, _ := btc.NewTx(rd)
dummy_tx.Size = uint32(len(rd))
ha := btc.Sha2Sum(rd)
dummy_tx.Hash = btc.NewUint256(ha[:])
}
示例2: execute_test_tx
func execute_test_tx(t *testing.T, tv *testvector) bool {
if len(tv.inps) == 0 {
t.Error("Vector has no inputs")
return false
}
rd, er := hex.DecodeString(tv.tx)
if er != nil {
t.Error(er.Error())
return false
}
tx, _ := btc.NewTx(rd)
if tx == nil {
t.Error("Canot decode tx")
return false
}
tx.Size = uint32(len(rd))
ha := btc.Sha2Sum(rd)
tx.Hash = btc.NewUint256(ha[:])
if skip_broken_tests(tx) {
return false
}
if !tx.IsCoinBase() {
for i := range tx.TxIn {
if tx.TxIn[i].Input.IsNull() {
return false
}
}
}
oks := 0
for i := range tx.TxIn {
var j int
for j = range tv.inps {
if bytes.Equal(tx.TxIn[i].Input.Hash[:], tv.inps[j].txid.Hash[:]) &&
tx.TxIn[i].Input.Vout == uint32(tv.inps[j].vout) {
break
}
}
if j >= len(tv.inps) {
t.Error("Matching input not found")
continue
}
pk, er := btc.DecodeScript(tv.inps[j].pkscr)
if er != nil {
t.Error(er.Error())
continue
}
var ss []byte
if tv.inps[j].vout >= 0 {
ss = tx.TxIn[i].ScriptSig
}
if VerifyTxScript(ss, pk, i, tx, tv.ver_flags) {
oks++
}
}
return oks == len(tx.TxIn)
}
示例3: sec2b58unc
// Uncompressed private key
func sec2b58unc(pk []byte) string {
var dat [37]byte
dat[0] = AddrVerSecret()
copy(dat[1:33], pk)
sh := btc.Sha2Sum(dat[0:33])
copy(dat[33:37], sh[:4])
return btc.Encodeb58(dat[:])
}
示例4: sec2b58com
// Compressed private key
func sec2b58com(pk []byte) string {
var dat [38]byte
dat[0] = AddrVerSecret()
copy(dat[1:33], pk)
dat[33] = 1 // compressed
sh := btc.Sha2Sum(dat[0:34])
copy(dat[34:38], sh[:4])
return btc.Encodeb58(dat[:])
}
示例5: sendmsg
func (c *one_net_conn) sendmsg(cmd string, pl []byte) (e error) {
sbuf := make([]byte, 24+len(pl))
binary.LittleEndian.PutUint32(sbuf[0:4], Version)
copy(sbuf[0:4], Magic[:])
copy(sbuf[4:16], cmd)
binary.LittleEndian.PutUint32(sbuf[16:20], uint32(len(pl)))
sh := btc.Sha2Sum(pl[:])
copy(sbuf[20:24], sh[:4])
copy(sbuf[24:], pl)
c.Mutex.Lock()
c.send.buf = append(c.send.buf, sbuf...)
//fmt.Println("...", len(c.send.buf))
c.Mutex.Unlock()
return
}
示例6: mk_out_tx
func mk_out_tx(sig_scr, pk_scr []byte) (output_tx *btc.Tx) {
// We build input_tx only to calculate it's hash for output_tx
input_tx := new(btc.Tx)
input_tx.Version = 1
input_tx.TxIn = []*btc.TxIn{&btc.TxIn{Input: btc.TxPrevOut{Vout: 0xffffffff},
ScriptSig: []byte{0, 0}, Sequence: 0xffffffff}}
input_tx.TxOut = []*btc.TxOut{&btc.TxOut{Pk_script: pk_scr}}
// Lock_time = 0
output_tx = new(btc.Tx)
output_tx.Version = 1
output_tx.TxIn = []*btc.TxIn{&btc.TxIn{Input: btc.TxPrevOut{Hash: btc.Sha2Sum(input_tx.Serialize()), Vout: 0},
ScriptSig: sig_scr, Sequence: 0xffffffff}}
output_tx.TxOut = []*btc.TxOut{&btc.TxOut{}}
// Lock_time = 0
return
}
示例7: SendRawMsg
func (c *OneConnection) SendRawMsg(cmd string, pl []byte) (e error) {
c.Mutex.Lock()
if c.Send.Buf != nil {
// Before adding more data to the buffer, check the limit
if len(c.Send.Buf) > MaxSendBufferSize {
c.Mutex.Unlock()
if common.DebugLevel > 0 {
println(c.PeerAddr.Ip(), "Peer Send Buffer Overflow")
}
c.Disconnect()
common.CountSafe("PeerSendOverflow")
return errors.New("Send buffer overflow")
}
} else {
c.Send.LastSent = time.Now()
}
common.CountSafe("sent_" + cmd)
common.CountSafeAdd("sbts_"+cmd, uint64(len(pl)))
sbuf := make([]byte, 24+len(pl))
c.LastCmdSent = cmd
c.LastBtsSent = uint32(len(pl))
binary.LittleEndian.PutUint32(sbuf[0:4], common.Version)
copy(sbuf[0:4], common.Magic[:])
copy(sbuf[4:16], cmd)
binary.LittleEndian.PutUint32(sbuf[16:20], uint32(len(pl)))
sh := btc.Sha2Sum(pl[:])
copy(sbuf[20:24], sh[:4])
copy(sbuf[24:], pl)
c.Send.Buf = append(c.Send.Buf, sbuf...)
if common.DebugLevel < 0 {
fmt.Println(cmd, len(c.Send.Buf), "->", c.PeerAddr.Ip())
}
c.Mutex.Unlock()
//println(len(c.Send.Buf), "queued for seding to", c.PeerAddr.Ip())
return
}
示例8: SendRawMsg
func (c *OneConnection) SendRawMsg(cmd string, pl []byte) (e error) {
c.Mutex.Lock()
if !c.broken {
// we never allow the buffer to be totally full because then producer would be equal consumer
if bytes_left := SendBufSize - c.BytesToSent(); bytes_left <= len(pl)+24 {
c.Mutex.Unlock()
/*println(c.PeerAddr.Ip(), c.Node.Version, c.Node.Agent, "Peer Send Buffer Overflow @",
cmd, bytes_left, len(pl)+24, c.SendBufProd, c.SendBufCons, c.BytesToSent())*/
c.Disconnect()
common.CountSafe("PeerSendOverflow")
return errors.New("Send buffer overflow")
}
c.counters["sent_"+cmd]++
c.counters["sbts_"+cmd] += uint64(len(pl))
common.CountSafe("sent_" + cmd)
common.CountSafeAdd("sbts_"+cmd, uint64(len(pl)))
var sbuf [24]byte
c.X.LastCmdSent = cmd
c.X.LastBtsSent = uint32(len(pl))
binary.LittleEndian.PutUint32(sbuf[0:4], common.Version)
copy(sbuf[0:4], common.Magic[:])
copy(sbuf[4:16], cmd)
binary.LittleEndian.PutUint32(sbuf[16:20], uint32(len(pl)))
sh := btc.Sha2Sum(pl[:])
copy(sbuf[20:24], sh[:4])
c.append_to_send_buffer(sbuf[:])
c.append_to_send_buffer(pl)
if x := c.BytesToSent(); x > c.X.MaxSentBufSize {
c.X.MaxSentBufSize = x
}
}
c.Mutex.Unlock()
return
}
示例9: mk_spend_tx
func mk_spend_tx(input_tx *btc.Tx, sig_scr []byte, witness [][]byte) (output_tx *btc.Tx) {
output_tx = new(btc.Tx)
output_tx.Version = 1
output_tx.TxIn = []*btc.TxIn{&btc.TxIn{Input: btc.TxPrevOut{Hash: btc.Sha2Sum(input_tx.Serialize()), Vout: 0},
ScriptSig: sig_scr, Sequence: 0xffffffff}}
output_tx.TxOut = []*btc.TxOut{&btc.TxOut{Value: input_tx.TxOut[0].Value}}
// Lock_time = 0
if len(witness) > 0 {
output_tx.SegWit = make([][][]byte, 1)
output_tx.SegWit[0] = witness
if DBG_SCR {
println("tx has", len(witness), "ws")
for xx := range witness {
println("", xx, hex.EncodeToString(witness[xx]))
}
}
}
output_tx.SetHash(output_tx.Serialize())
return
}
示例10: readmsg
func (c *one_net_conn) readmsg() *one_net_cmd {
c.SetReadDeadline(time.Now().Add(10 * time.Millisecond))
if c.recv.hdr_len < 24 {
for {
n, e := c.Read(c.recv.hdr[c.recv.hdr_len:])
if e != nil {
if nerr, ok := e.(net.Error); ok && nerr.Timeout() {
//COUNTER("HDRT")
} else {
c.setbroken(true)
}
return nil
}
c.Lock()
c.bytes_received += uint64(n)
c.Unlock()
c.recv.hdr_len += n
if c.recv.hdr_len >= 4 {
if !bytes.Equal(c.recv.hdr[:4], Magic[:]) {
fmt.Println(c.Ip(), "NetBadMagic")
c.setbroken(true)
return nil
}
if c.recv.hdr_len == 24 {
c.recv.cmd = strings.TrimRight(string(c.recv.hdr[4:16]), "\000")
c.recv.pl_len = binary.LittleEndian.Uint32(c.recv.hdr[16:20])
c.recv.datlen = 0
if c.recv.pl_len > 0 {
c.recv.dat = make([]byte, c.recv.pl_len)
}
break
}
}
}
}
for c.recv.datlen < c.recv.pl_len {
n, e := c.Read(c.recv.dat[c.recv.datlen:])
if e != nil {
if nerr, ok := e.(net.Error); ok && nerr.Timeout() {
//COUNTER("HDRT")
} else {
c.setbroken(true)
}
return nil
}
if n > 0 {
c.recv.datlen += uint32(n)
c.Lock()
c.bytes_received += uint64(n)
c.Unlock()
}
}
sh := btc.Sha2Sum(c.recv.dat)
if !bytes.Equal(c.recv.hdr[20:24], sh[:4]) {
fmt.Println(c.Ip(), "Msg checksum error")
c.setbroken(true)
return nil
}
res := new(one_net_cmd)
res.cmd = c.recv.cmd
res.pl = c.recv.dat
c.recv.hdr_len = 0
c.recv.dat = nil
return res
}
示例11: FetchMessage
func (c *OneConnection) FetchMessage() *BCmsg {
var e error
var n int
for c.recv.hdr_len < 24 {
n, e = common.SockRead(c.NetConn, c.recv.hdr[c.recv.hdr_len:24])
c.Mutex.Lock()
c.recv.hdr_len += n
if e != nil {
c.Mutex.Unlock()
c.HandleError(e)
return nil
}
if c.recv.hdr_len >= 4 && !bytes.Equal(c.recv.hdr[:4], common.Magic[:]) {
c.Mutex.Unlock()
if common.DebugLevel > 0 {
println("FetchMessage: Proto out of sync")
}
common.CountSafe("NetBadMagic")
c.Disconnect()
return nil
}
if c.broken {
c.Mutex.Unlock()
return nil
}
if c.recv.hdr_len >= 24 {
c.recv.pl_len = binary.LittleEndian.Uint32(c.recv.hdr[16:20])
c.recv.cmd = strings.TrimRight(string(c.recv.hdr[4:16]), "\000")
}
c.Mutex.Unlock()
}
if c.recv.pl_len > 0 {
if c.recv.dat == nil {
msi := maxmsgsize(c.recv.cmd)
if c.recv.pl_len > msi {
//println(c.PeerAddr.Ip(), "Command", c.recv.cmd, "is going to be too big", c.recv.pl_len, msi)
c.DoS("MsgTooBig")
return nil
}
c.Mutex.Lock()
c.recv.dat = make([]byte, c.recv.pl_len)
c.recv.datlen = 0
c.Mutex.Unlock()
}
for c.recv.datlen < c.recv.pl_len {
n, e = common.SockRead(c.NetConn, c.recv.dat[c.recv.datlen:])
if n > 0 {
c.Mutex.Lock()
c.recv.datlen += uint32(n)
c.Mutex.Unlock()
if c.recv.datlen > c.recv.pl_len {
println(c.PeerAddr.Ip(), "is sending more of", c.recv.cmd, "then it should have", c.recv.datlen, c.recv.pl_len)
c.DoS("MsgSizeMismatch")
return nil
}
}
if e != nil {
c.HandleError(e)
return nil
}
if c.broken {
return nil
}
}
}
sh := btc.Sha2Sum(c.recv.dat)
if !bytes.Equal(c.recv.hdr[20:24], sh[:4]) {
//println(c.PeerAddr.Ip(), "Msg checksum error")
c.DoS("MsgBadChksum")
return nil
}
ret := new(BCmsg)
ret.cmd = c.recv.cmd
ret.pl = c.recv.dat
c.Mutex.Lock()
c.recv.dat = nil
c.recv.hdr_len = 0
c.BytesReceived += uint64(24 + len(ret.pl))
c.Mutex.Unlock()
return ret
}
示例12: PostCheckBlock
//.........这里部分代码省略.........
// And again...
for i := 1; i < len(bl.Txs); i++ {
if bl.Txs[i].IsCoinBase() {
er = errors.New("CheckBlock() : more than one coinbase: " + bl.Hash.String() + " - RPC_Result:bad-cb-multiple")
return
}
}
// Check Merkle Root - that's importnant
merkle, mutated := btc.GetMerkle(bl.Txs)
if mutated {
er = errors.New("CheckBlock(): duplicate transaction - RPC_Result:bad-txns-duplicate")
return
}
if !bytes.Equal(merkle, bl.MerkleRoot()) {
er = errors.New("CheckBlock() : Merkle Root mismatch - RPC_Result:bad-txnmrklroot")
return
}
}
if bl.BlockTime() >= BIP16SwitchTime {
bl.VerifyFlags = script.VER_P2SH
} else {
bl.VerifyFlags = 0
}
if bl.Height >= ch.Consensus.BIP66Height {
bl.VerifyFlags |= script.VER_DERSIG
}
if bl.Height >= ch.Consensus.BIP65Height {
bl.VerifyFlags |= script.VER_CLTV
}
if ch.Consensus.Enforce_CSV != 0 && bl.Height >= ch.Consensus.Enforce_CSV {
bl.VerifyFlags |= script.VER_CSV
}
if ch.Consensus.Enforce_SEGWIT != 0 && bl.Height >= ch.Consensus.Enforce_SEGWIT {
bl.VerifyFlags |= script.VER_WITNESS | script.VER_NULLDUMMY
}
if !bl.Trusted {
var blockTime uint32
var had_witness bool
if (bl.VerifyFlags & script.VER_CSV) != 0 {
blockTime = bl.MedianPastTime
} else {
blockTime = bl.BlockTime()
}
// Verify merkle root of witness data
if (bl.VerifyFlags & script.VER_WITNESS) != 0 {
var i int
for i = len(bl.Txs[0].TxOut) - 1; i >= 0; i-- {
o := bl.Txs[0].TxOut[i]
if len(o.Pk_script) >= 38 && bytes.Equal(o.Pk_script[:6], []byte{0x6a, 0x24, 0xaa, 0x21, 0xa9, 0xed}) {
if len(bl.Txs[0].SegWit) != 1 || len(bl.Txs[0].SegWit[0]) != 1 || len(bl.Txs[0].SegWit[0][0]) != 32 {
er = errors.New("CheckBlock() : invalid witness nonce size - RPC_Result:bad-witness-nonce-size")
println(er.Error())
println(bl.Hash.String(), len(bl.Txs[0].SegWit))
return
}
// The malleation check is ignored; as the transaction tree itself
// already does not permit it, it is impossible to trigger in the
// witness tree.
merkle, _ := btc.GetWitnessMerkle(bl.Txs)
with_nonce := btc.Sha2Sum(append(merkle, bl.Txs[0].SegWit[0][0]...))
if !bytes.Equal(with_nonce[:], o.Pk_script[6:38]) {
er = errors.New("CheckBlock(): Witness Merkle mismatch - RPC_Result:bad-witness-merkle-match")
return
}
had_witness = true
break
}
}
}
if !had_witness {
for _, t := range bl.Txs {
if t.SegWit != nil {
er = errors.New("CheckBlock(): unexpected witness data found - RPC_Result:unexpected-witness")
return
}
}
}
// Check transactions - this is the most time consuming task
if !CheckTransactions(bl.Txs, bl.Height, blockTime) {
er = errors.New("CheckBlock() : CheckTransactions() failed - RPC_Result:bad-tx")
return
}
}
return
}
示例13: evalScript
//.........这里部分代码省略.........
}
sha := sha1.New()
sha.Write(stack.pop()[:])
stack.push(sha.Sum(nil)[:])
case opcode == 0xa8: //OP_SHA256
if stack.size() < 1 {
if DBG_ERR {
fmt.Println("Stack too short for opcode", opcode)
}
return false
}
sha := sha256.New()
sha.Write(stack.pop()[:])
stack.push(sha.Sum(nil)[:])
case opcode == 0xa9: //OP_HASH160
if stack.size() < 1 {
if DBG_ERR {
fmt.Println("Stack too short for opcode", opcode)
}
return false
}
rim160 := btc.Rimp160AfterSha256(stack.pop())
stack.push(rim160[:])
case opcode == 0xaa: //OP_HASH256
if stack.size() < 1 {
if DBG_ERR {
fmt.Println("Stack too short for opcode", opcode)
}
return false
}
h := btc.Sha2Sum(stack.pop())
stack.push(h[:])
case opcode == 0xab: // OP_CODESEPARATOR
sta = idx
case opcode == 0xac || opcode == 0xad: // OP_CHECKSIG || OP_CHECKSIGVERIFY
if stack.size() < 2 {
if DBG_ERR {
fmt.Println("Stack too short for opcode", opcode)
}
return false
}
var ok bool
pk := stack.pop()
si := stack.pop()
// BIP-0066
if !CheckSignatureEncoding(si, ver_flags) {
if DBG_ERR {
fmt.Println("Invalid Signature Encoding A")
}
return false
}
if len(si) > 0 {
sh := tx.SignatureHash(delSig(p[sta:], si), inp, int32(si[len(si)-1]))
ok = btc.EcdsaVerify(pk, si, sh)
}
if !ok && DBG_ERR {
if DBG_ERR {
fmt.Println("EcdsaVerify fail 1")
示例14: load_balance
// load the content of the "balance/" folder
func load_balance(showbalance bool) {
var unknownInputs, multisigInputs int
f, e := os.Open("balance/unspent.txt")
if e != nil {
println(e.Error())
return
}
rd := bufio.NewReader(f)
for {
l, _, e := rd.ReadLine()
if len(l) == 0 && e != nil {
break
}
if l[64] == '-' {
txid := btc.NewUint256FromString(string(l[:64]))
rst := strings.SplitN(string(l[65:]), " ", 2)
vout, _ := strconv.ParseUint(rst[0], 10, 32)
uns := new(btc.TxPrevOut)
copy(uns.Hash[:], txid.Hash[:])
uns.Vout = uint32(vout)
lab := ""
if len(rst) > 1 {
lab = rst[1]
}
str := string(l)
if sti := strings.Index(str, "_StealthC:"); sti != -1 {
c, e := hex.DecodeString(str[sti+10 : sti+10+64])
if e != nil {
fmt.Println("ERROR at stealth", txid.String(), vout, e.Error())
} else {
// add a new key to the wallet
sec := btc.DeriveNextPrivate(first_seed[:], c)
is_stealth[len(priv_keys)] = true
priv_keys = append(priv_keys, sec)
labels = append(labels, lab)
pub_key := btc.PublicFromPrivate(sec, true)
publ_addrs = append(publ_addrs, btc.NewAddrFromPubkey(pub_key, AddrVerPubkey()))
compressed_key = append(compressed_key, true) // stealth keys are always compressed
}
}
if _, ok := loadedTxs[txid.Hash]; !ok {
tf, _ := os.Open("balance/" + txid.String() + ".tx")
if tf != nil {
siz, _ := tf.Seek(0, os.SEEK_END)
tf.Seek(0, os.SEEK_SET)
buf := make([]byte, siz)
tf.Read(buf)
tf.Close()
th := btc.Sha2Sum(buf)
if bytes.Equal(th[:], txid.Hash[:]) {
tx, _ := btc.NewTx(buf)
if tx != nil {
loadedTxs[txid.Hash] = tx
} else {
println("transaction is corrupt:", txid.String())
}
} else {
println("transaction file is corrupt:", txid.String())
os.Exit(1)
}
} else {
println("transaction file not found:", txid.String())
os.Exit(1)
}
}
// Sum up all the balance and check if we have private key for this input
uo := UO(uns)
add_it := true
if !btc.IsP2SH(uo.Pk_script) {
fnd := false
for j := range publ_addrs {
if publ_addrs[j].Owns(uo.Pk_script) {
fnd = true
break
}
}
if !fnd {
if *onlvalid {
add_it = false
}
if showbalance {
unknownInputs++
if *verbose {
ss := uns.String()
ss = ss[:8] + "..." + ss[len(ss)-12:]
fmt.Println(ss, "does not belong to your wallet (cannot sign it)")
}
}
}
} else {
if *onlvalid {
add_it = false
}
//.........这里部分代码省略.........
示例15: load_others
func load_others() {
f, e := os.Open(RawKeysFilename)
if e == nil {
defer f.Close()
td := bufio.NewReader(f)
for {
li, _, _ := td.ReadLine()
if li == nil {
break
}
if len(li) == 0 {
continue
}
pk := strings.SplitN(strings.Trim(string(li), " "), " ", 2)
if pk[0][0] == '#' {
continue // Just a comment-line
}
pkb := btc.Decodeb58(pk[0])
if pkb == nil {
println("Decodeb58 failed:", pk[0])
continue
}
if len(pkb) < 6 {
println("Syntax error in the raw keys file:", pk[0])
continue
}
if len(pkb) != 37 && len(pkb) != 38 {
println(pk[0][:6], "has wrong key", len(pkb))
println(hex.EncodeToString(pkb))
continue
}
if pkb[0] != AddrVerSecret() {
println(pk[0][:6], "has version", pkb[0], "while we expect", AddrVerSecret())
fmt.Println("You may want to play with -t or -ltc switch")
continue
}
var sh [32]byte
var compr bool
if len(pkb) == 37 {
// old/uncompressed key
sh = btc.Sha2Sum(pkb[0:33])
if !bytes.Equal(sh[:4], pkb[33:37]) {
println(pk[0][:6], "checksum error")
continue
}
compr = false
} else {
if pkb[33] != 1 {
println(pk[0][:6], "a key of length 38 bytes must be compressed")
continue
}
sh = btc.Sha2Sum(pkb[0:34])
if !bytes.Equal(sh[:4], pkb[34:38]) {
println(pk[0][:6], "checksum error")
continue
}
compr = true
}
key := pkb[1:33]
pub := btc.PublicFromPrivate(key, compr)
if pub == nil {
println("PublicFromPrivate failed")
os.Exit(1)
}
priv_keys = append(priv_keys, key)
compressed_key = append(compressed_key, compr)
publ_addrs = append(publ_addrs, btc.NewAddrFromPubkey(pub, AddrVerPubkey()))
if len(pk) > 1 {
labels = append(labels, pk[1])
} else {
labels = append(labels, fmt.Sprint("Other ", len(priv_keys)))
}
}
if *verbose {
fmt.Println(len(priv_keys), "keys imported from", RawKeysFilename)
}
} else {
if *verbose {
fmt.Println("You can also have some dumped (b58 encoded) priv keys in file", RawKeysFilename)
}
}
}