func SignTransaction(transaction *core.Transaction, privateKey string) (*core.Transaction, error) {privateBytes, err := hex.DecodeString(privateKey)
if err != nil {return nil, fmt.Errorf("hex decode private key error: %v", err)
}
pri := crypto.ToECDSAUnsafe(privateBytes)
defer zeroKey(pri)
rawData, err := proto.Marshal(transaction.GetRawData())
if err != nil {return nil, fmt.Errorf("protp marshal tx raw data error: %v", err)
}
h256h := sha256.New()
h256h.Write(rawData)
hash := h256h.Sum(nil)
signature, err := crypto.Sign(hash, pri)
if err != nil {return nil, fmt.Errorf("sign error: %v", err)
}
transaction.Signature = append(transaction.Signature, signature)
return transaction, nil
}
func zeroKey(k *ecdsa.PrivateKey) {b := k.D.Bits()
for i := range b {b[i] = 0
}
}
正文完