func SignFactoidTransaction(n uint64, tx interfaces.ITransaction) { tx.AddAuthorization(NewFactoidRCDAddress(n)) data, err := tx.MarshalBinarySig() if err != nil { panic(err) } sig := factoid.NewSingleSignatureBlock(NewPrivKey(n), data) //str, err := sig.JSONString() //fmt.Printf("sig, err - %v, %v\n", str, err) tx.SetSignatureBlock(0, sig) err = tx.Validate(1) if err != nil { panic(err) } err = tx.ValidateSignatures() if err != nil { panic(err) } }
func (w *SCWallet) SignInputs(trans interfaces.ITransaction) (bool, error) { data, err := trans.MarshalBinarySig() // Get the part of the transaction we sign if err != nil { return false, err } var numSigs int = 0 inputs := trans.GetInputs() rcds := trans.GetRCDs() for i, rcd := range rcds { rcd1, ok := rcd.(*RCD_1) if ok { pub := rcd1.GetPublicKey() wex, err := w.db.Get([]byte(constants.W_ADDRESS_PUB_KEY), pub, new(WalletEntry)) if err != nil { return false, err } we := wex.(*WalletEntry) if we != nil { var pri [constants.SIGNATURE_LENGTH]byte copy(pri[:], we.private[0]) bsig := ed25519.Sign(&pri, data) sig := new(FactoidSignature) sig.SetSignature(bsig[:]) sigblk := new(SignatureBlock) sigblk.AddSignature(sig) trans.SetSignatureBlock(i, sigblk) numSigs += 1 } } } return numSigs == len(inputs), nil }