func (o *Operation) Derive(rw http.ResponseWriter, req *http.Request) {
	rest.Execute(o.command.Derive, rw, req.Body)
}
Derive swagger:route POST /vcwallet/derive vcwallet deriveReq

derives a Verifiable Credential.

https://w3c-ccg.github.io/universal-wallet-interop-spec/#derive

Responses:
default: genericError
200: deriveRes
package vcwallet
import (
	"bytes"
	"fmt"
	"net/http"
	"github.com/gorilla/mux"
	"github.com/piprate/json-gold/ld"
	"github.com/hyperledger/aries-framework-go/pkg/controller/command/vcwallet"
	"github.com/hyperledger/aries-framework-go/pkg/controller/internal/cmdutil"
	"github.com/hyperledger/aries-framework-go/pkg/controller/rest"
	"github.com/hyperledger/aries-framework-go/pkg/crypto"
	"github.com/hyperledger/aries-framework-go/pkg/framework/aries/api/vdr"
	"github.com/hyperledger/aries-framework-go/pkg/kms"
	"github.com/hyperledger/aries-framework-go/spi/storage"
)
const (
	OperationID = "/vcwallet"
	CreateProfilePath       = OperationID + "/create-profile"
	UpdateProfilePath       = OperationID + "/update-profile"
	ProfileExistsPath       = OperationID + "profile/{id}"
	OpenPath                = OperationID + "/open"
	ClosePath               = OperationID + "/close"
	AddPath                 = OperationID + "/add"
	RemovePath              = OperationID + "/remove"
	GetPath                 = OperationID + "/get"
	GetAllPath              = OperationID + "/getall"
	QueryPath               = OperationID + "/query"
	IssuePath               = OperationID + "/issue"
	ProvePath               = OperationID + "/prove"
	VerifyPath              = OperationID + "/verify"
	DerivePath              = OperationID + "/derive"
	CreateKeyPairPath       = OperationID + "/create-key-pair"
	ConnectPath             = OperationID + "/connect"
	ProposePresentationPath = OperationID + "/propose-presentation"
	PresentProofPath        = OperationID + "/present-proof"
)
type provider interface {
	StorageProvider() storage.Provider
	VDRegistry() vdr.Registry
	Crypto() crypto.Crypto
	JSONLDDocumentLoader() ld.DocumentLoader
	MediaTypeProfiles() []string
	didCommProvider  
}
type didCommProvider interface {
	KMS() kms.KeyManager
	ServiceEndpoint() string
	ProtocolStateStorageProvider() storage.Provider
	Service(id string) (interface{}, error)
	KeyType() kms.KeyType
	KeyAgreementType() kms.KeyType
}
type Operation struct {
	handlers []rest.Handler
	command  *vcwallet.Command
}
func New(p provider, config *vcwallet.Config) *Operation {
	cmd := vcwallet.New(p, config)
	o := &Operation{command: cmd}
	o.registerHandler()
	return o
}
func (o *Operation) GetRESTHandlers() []rest.Handler {
	return o.handlers
}
func (o *Operation) registerHandler() {
	o.handlers = []rest.Handler{
		cmdutil.NewHTTPHandler(CreateProfilePath, http.MethodPost, o.CreateProfile),
		cmdutil.NewHTTPHandler(UpdateProfilePath, http.MethodPost, o.UpdateProfile),
		cmdutil.NewHTTPHandler(ProfileExistsPath, http.MethodGet, o.ProfileExists),
		cmdutil.NewHTTPHandler(OpenPath, http.MethodPost, o.Open),
		cmdutil.NewHTTPHandler(ClosePath, http.MethodPost, o.Close),
		cmdutil.NewHTTPHandler(AddPath, http.MethodPost, o.Add),
		cmdutil.NewHTTPHandler(RemovePath, http.MethodPost, o.Remove),
		cmdutil.NewHTTPHandler(GetPath, http.MethodPost, o.Get),
		cmdutil.NewHTTPHandler(GetAllPath, http.MethodPost, o.GetAll),
		cmdutil.NewHTTPHandler(QueryPath, http.MethodPost, o.Query),
		cmdutil.NewHTTPHandler(IssuePath, http.MethodPost, o.Issue),
		cmdutil.NewHTTPHandler(ProvePath, http.MethodPost, o.Prove),
		cmdutil.NewHTTPHandler(VerifyPath, http.MethodPost, o.Verify),
		cmdutil.NewHTTPHandler(DerivePath, http.MethodPost, o.Derive),
		cmdutil.NewHTTPHandler(CreateKeyPairPath, http.MethodPost, o.CreateKeyPair),
		cmdutil.NewHTTPHandler(ConnectPath, http.MethodPost, o.Connect),
		cmdutil.NewHTTPHandler(ProposePresentationPath, http.MethodPost, o.ProposePresentation),
		cmdutil.NewHTTPHandler(PresentProofPath, http.MethodPost, o.PresentProof),
	}
}
func (o *Operation) CreateProfile(rw http.ResponseWriter, req *http.Request) {
	rest.Execute(o.command.CreateProfile, rw, req.Body)
}
func (o *Operation) UpdateProfile(rw http.ResponseWriter, req *http.Request) {
	rest.Execute(o.command.UpdateProfile, rw, req.Body)
}
func (o *Operation) ProfileExists(rw http.ResponseWriter, req *http.Request) {
	id, found := getIDFromRequest(rw, req)
	if !found {
		return
	}
	rest.Execute(o.command.ProfileExists, rw, bytes.NewBufferString(fmt.Sprintf(`{"userID": "%s"}`, id)))
}
func (o *Operation) Open(rw http.ResponseWriter, req *http.Request) {
	rest.Execute(o.command.Open, rw, req.Body)
}
func (o *Operation) Close(rw http.ResponseWriter, req *http.Request) {
	rest.Execute(o.command.Close, rw, req.Body)
}
func (o *Operation) Add(rw http.ResponseWriter, req *http.Request) {
	rest.Execute(o.command.Add, rw, req.Body)
}
func (o *Operation) Remove(rw http.ResponseWriter, req *http.Request) {
	rest.Execute(o.command.Remove, rw, req.Body)
}
func (o *Operation) Get(rw http.ResponseWriter, req *http.Request) {
	rest.Execute(o.command.Get, rw, req.Body)
}
func (o *Operation) GetAll(rw http.ResponseWriter, req *http.Request) {
	rest.Execute(o.command.GetAll, rw, req.Body)
}
func (o *Operation) Query(rw http.ResponseWriter, req *http.Request) {
	rest.Execute(o.command.Query, rw, req.Body)
}
func (o *Operation) Issue(rw http.ResponseWriter, req *http.Request) {
	rest.Execute(o.command.Issue, rw, req.Body)
}
func (o *Operation) Prove(rw http.ResponseWriter, req *http.Request) {
	rest.Execute(o.command.Prove, rw, req.Body)
}
func (o *Operation) Verify(rw http.ResponseWriter, req *http.Request) {
	rest.Execute(o.command.Verify, rw, req.Body)
}