github.com/s7techlab/cckit@v0.10.5/extensions/encryption/invoke.go (about) 1 package encryption 2 3 import ( 4 "github.com/hyperledger/fabric-chaincode-go/shim" 5 "github.com/pkg/errors" 6 "github.com/s7techlab/cckit/convert" 7 "github.com/s7techlab/cckit/state" 8 ) 9 10 // InvokeChaincode decrypts received payload 11 func InvokeChaincode( 12 stub shim.ChaincodeStubInterface, encKey []byte, chaincodeName string, 13 args []interface{}, channel string, target interface{}) (interface{}, error) { 14 15 // args are not encrypted cause we cannot pass encryption key in transient map while invoking cc from cc 16 // thus target cc cannot decrypt args 17 aa, err := convert.ArgsToBytes(args...) 18 if err != nil { 19 return nil, errors.Wrap(err, `encrypt args`) 20 } 21 22 response := stub.InvokeChaincode(chaincodeName, aa, channel) 23 if response.Status != shim.OK { 24 return nil, errors.New(response.Message) 25 } 26 27 if len(response.Payload) == 0 { 28 return nil, state.ErrEmptyChaincodeResponsePayload 29 } 30 31 decrypted, err := Decrypt(encKey, response.Payload) 32 if err != nil { 33 return nil, errors.Wrap(err, `decrypt payload`) 34 } 35 return convert.FromBytes(decrypted, target) 36 }