package ringct import "fmt" import "github.com/deroproject/derosuite/crypto" /* This file implements MLSAG signatures for the transactions */ // get the hash of the transaction which is used to create the mlsag later on, this hash is input to MLSAG // the hash is = hash( message + hash(basehash) + hash(pederson and borromean data)) func Get_pre_mlsag_hash(sig *RctSig) (crypto.Hash) { message_hash := sig.Message base_hash := crypto.Keccak256(sig.SerializeBase()) fmt.Printf("Message hash %x\n", message_hash) fmt.Printf("Base hash %x\n", base_hash) // now join the borromean signature and extract a sig var other_data []byte for i := range sig.rangeSigs { other_data = append(other_data,sig.rangeSigs[i].asig.s0.Serialize()...) other_data = append(other_data,sig.rangeSigs[i].asig.s1.Serialize()...) other_data = append(other_data, sig.rangeSigs[i].ci.Serialize()...) } other_data_hash := crypto.Keccak256(other_data) fmt.Printf("other hash %x\n", other_data_hash) // join all 3 hashes and hash them again to get the data final_data := append(message_hash[:], base_hash[:]...) final_data = append(final_data, other_data_hash[:]...) final_data_hash := crypto.Keccak256(final_data) fmt.Printf("final_data_hash hash %x\n", other_data_hash) return final_data_hash }