@@ -32,6 +32,7 @@ import (
3232 "github.com/hyperledger/aries-framework-go/pkg/framework/aries"
3333 "github.com/hyperledger/aries-framework-go/pkg/framework/aries/defaults"
3434 "github.com/hyperledger/aries-framework-go/pkg/framework/context"
35+ "github.com/hyperledger/aries-framework-go/pkg/kms"
3536 "github.com/hyperledger/aries-framework-go/pkg/vdr/httpbinding"
3637 "github.com/hyperledger/aries-framework-go/spi/storage"
3738)
@@ -170,6 +171,30 @@ const (
170171 " Alternatively, this can be set with the following environment variable (in CSV format): " +
171172 agentContextProviderEnvKey
172173
174+ // default verification key type flag.
175+ agentKeyTypeFlagName = "key-type"
176+ agentKeyTypeEnvKey = "ARIESD_KEY_TYPE"
177+ agentKeyTypeUsage = "Default key type supported by this agent." +
178+ " This flag sets the verification (and for DIDComm V1 encryption as well) key type used for key creation in the agent." + //nolint:lll
179+ " Alternatively, this can be set with the following environment variable: " +
180+ agentKeyTypeEnvKey
181+
182+ // default key agreement type flag.
183+ agentKeyAgreementTypeFlagName = "key-agreement-type"
184+ agentKeyAgreementTypeEnvKey = "ARIESD_KEY_AGREEMENT_TYPE"
185+ agentKeyAgreementTypeUsage = "Default key agreement type supported by this agent." +
186+ " Default encryption (used in DIDComm V2) key type used for key agreement creation in the agent." +
187+ " Alternatively, this can be set with the following environment variable: " +
188+ agentKeyAgreementTypeEnvKey
189+
190+ // media type profiles flag.
191+ agentMediaTypeProfilesFlagName = "media-type-profiles"
192+ agentMediaTypeProfilesEnvKey = "ARIESD_MEDIA_TYPE_PROFILES"
193+ agentMediaTypeProfilesUsage = "Media Type Profiles supported by this agent." +
194+ " This flag can be repeated, allowing setting up multiple profiles." +
195+ " Alternatively, this can be set with the following environment variable (in CSV format): " +
196+ agentMediaTypeProfilesEnvKey
197+
173198 httpProtocol = "http"
174199 websocketProtocol = "ws"
175200
@@ -180,16 +205,35 @@ const (
180205var (
181206 errMissingHost = errors .New ("host not provided" )
182207 logger = log .New ("aries-framework/agent-rest" )
208+
209+ //nolint:gochecknoglobals
210+ keyTypes = map [string ]kms.KeyType {
211+ "ed25519" : kms .ED25519Type ,
212+ "ecdsap256ieee1363" : kms .ECDSAP256TypeIEEEP1363 ,
213+ "ecdsap256der" : kms .ECDSAP256TypeDER ,
214+ "ecdsap384ieee1363" : kms .ECDSAP384TypeIEEEP1363 ,
215+ "ecdsap384der" : kms .ECDSAP384TypeDER ,
216+ "ecdsap521ieee1363" : kms .ECDSAP521TypeIEEEP1363 ,
217+ "ecdsap521der" : kms .ECDSAP521TypeDER ,
218+ }
219+
220+ //nolint:gochecknoglobals
221+ keyAgreementTypes = map [string ]kms.KeyType {
222+ "x25519kw" : kms .X25519ECDHKWType ,
223+ "p256kw" : kms .NISTP256ECDHKWType ,
224+ "p384kw" : kms .NISTP384ECDHKWType ,
225+ "p521kw" : kms .NISTP521ECDHKWType ,
226+ }
183227)
184228
185229type agentParameters struct {
186230 server server
187231 host , defaultLabel , transportReturnRoute string
188232 tlsCertFile , tlsKeyFile string
189- token string
233+ token , keyType , keyAgreementType string
190234 webhookURLs , httpResolvers , outboundTransports []string
191235 inboundHostInternals , inboundHostExternals []string
192- contextProviderURLs []string
236+ contextProviderURLs , mediaTypeProfiles []string
193237 autoAccept bool
194238 msgHandler command.MessageHandler
195239 dbParam * dbParam
@@ -332,6 +376,21 @@ func createStartCMD(server server) *cobra.Command { //nolint: funlen,gocyclo,goc
332376 return err
333377 }
334378
379+ keyType , err := getUserSetVar (cmd , agentKeyTypeFlagName , agentKeyTypeEnvKey , true )
380+ if err != nil {
381+ return err
382+ }
383+
384+ keyAgreementType , err := getUserSetVar (cmd , agentKeyAgreementTypeFlagName , agentKeyAgreementTypeEnvKey , true )
385+ if err != nil {
386+ return err
387+ }
388+
389+ mediaTypeProfiles , err := getUserSetVars (cmd , agentMediaTypeProfilesFlagName , agentMediaTypeProfilesEnvKey , true )
390+ if err != nil {
391+ return err
392+ }
393+
335394 parameters := & agentParameters {
336395 server : server ,
337396 host : host ,
@@ -349,6 +408,9 @@ func createStartCMD(server server) *cobra.Command { //nolint: funlen,gocyclo,goc
349408 tlsCertFile : tlsCertFile ,
350409 tlsKeyFile : tlsKeyFile ,
351410 autoExecuteRFC0593 : autoExecuteRFC0593 ,
411+ keyType : keyType ,
412+ keyAgreementType : keyAgreementType ,
413+ mediaTypeProfiles : mediaTypeProfiles ,
352414 }
353415
354416 return startAgent (parameters )
@@ -417,6 +479,7 @@ func getAutoExecuteRFC0593(cmd *cobra.Command) (bool, error) {
417479 return strconv .ParseBool (autoExecuteRFC0593Str )
418480}
419481
482+ //nolint:funlen
420483func createFlags (startCmd * cobra.Command ) {
421484 // agent host flag
422485 startCmd .Flags ().StringP (agentHostFlagName , agentHostFlagShorthand , "" , agentHostFlagUsage )
@@ -477,6 +540,12 @@ func createFlags(startCmd *cobra.Command) {
477540
478541 // db timeout
479542 startCmd .Flags ().StringP (databaseTimeoutFlagName , "" , "" , databaseTimeoutFlagUsage )
543+
544+ startCmd .Flags ().StringP (agentKeyTypeFlagName , "" , "" , agentKeyTypeUsage )
545+
546+ startCmd .Flags ().StringP (agentKeyAgreementTypeFlagName , "" , "" , agentKeyAgreementTypeUsage )
547+
548+ startCmd .Flags ().StringSliceP (agentMediaTypeProfilesFlagName , "" , []string {}, agentMediaTypeProfilesUsage )
480549}
481550
482551func getUserSetVar (cmd * cobra.Command , flagName , envKey string , isOptional bool ) (string , error ) {
@@ -714,6 +783,7 @@ func startAgent(parameters *agentParameters) error {
714783 return nil
715784}
716785
786+ //nolint:funlen,gocyclo
717787func createAriesAgent (parameters * agentParameters ) (* context.Provider , error ) {
718788 var opts []aries.Option
719789
@@ -758,6 +828,18 @@ func createAriesAgent(parameters *agentParameters) (*context.Provider, error) {
758828 opts = append (opts , aries .WithJSONLDContextProviderURL (parameters .contextProviderURLs ... ))
759829 }
760830
831+ if kt , ok := keyTypes [parameters .keyType ]; ok {
832+ opts = append (opts , aries .WithKeyType (kt ))
833+ }
834+
835+ if kat , ok := keyAgreementTypes [parameters .keyAgreementType ]; ok {
836+ opts = append (opts , aries .WithKeyAgreementType (kat ))
837+ }
838+
839+ if len (parameters .mediaTypeProfiles ) > 0 {
840+ opts = append (opts , aries .WithMediaTypeProfiles (parameters .mediaTypeProfiles ))
841+ }
842+
761843 framework , err := aries .New (opts ... )
762844 if err != nil {
763845 return nil , fmt .Errorf ("failed to start aries agent rest on port [%s], failed to initialize framework : %w" ,
0 commit comments