diff --git a/cmd/wallet-sdk-gomobile/display/opts.go b/cmd/wallet-sdk-gomobile/display/opts.go index 84beb7bd..c0f1d816 100644 --- a/cmd/wallet-sdk-gomobile/display/opts.go +++ b/cmd/wallet-sdk-gomobile/display/opts.go @@ -21,6 +21,7 @@ type Opts struct { disableHTTPClientTLSVerification bool maskingString *string didResolver api.DIDResolver + skipNonClaimData bool } // NewOpts returns a new Opts object. @@ -108,3 +109,10 @@ func (o *Opts) SetDIDResolver(didResolver api.DIDResolver) *Opts { return o } + +// SkipNonClaimData skips the non-claims related data like issue and expiry date. +func (o *Opts) SkipNonClaimData() *Opts { + o.skipNonClaimData = true + + return o +} diff --git a/cmd/wallet-sdk-gomobile/display/resolve.go b/cmd/wallet-sdk-gomobile/display/resolve.go index 360a1e2f..9142b1d4 100644 --- a/cmd/wallet-sdk-gomobile/display/resolve.go +++ b/cmd/wallet-sdk-gomobile/display/resolve.go @@ -108,6 +108,12 @@ func generateGoAPIOpts(vcs *verifiable.CredentialsArray, issuerURI string, goAPIOpts = append(goAPIOpts, goAPIOpt) } + if opts.skipNonClaimData { + goAPIOpt := goapicredentialschema.WithSkipNonClaimData() + + goAPIOpts = append(goAPIOpts, goAPIOpt) + } + if opts.didResolver != nil { jwtVerifier := defaults.NewDefaultProofChecker( common.NewVDRKeyResolver(&wrapper.VDRResolverWrapper{ diff --git a/pkg/credentialschema/credentialdisplay.go b/pkg/credentialschema/credentialdisplay.go index e747a7a9..997e93a1 100644 --- a/pkg/credentialschema/credentialdisplay.go +++ b/pkg/credentialschema/credentialdisplay.go @@ -416,6 +416,7 @@ func buildCredentialDisplaysAllLocale( vcs []*verifiable.Credential, credentialConfigurationsSupported map[issuer.CredentialConfigurationID]*issuer.CredentialConfigurationSupported, maskingString string, + skipNonClaimData bool, ) ([]Credential, error) { var credentialDisplays []Credential @@ -436,7 +437,8 @@ func buildCredentialDisplaysAllLocale( continue } - credentialDisplay, err := buildCredentialDisplayAllLocale(credentialConfigurationSupported, vc, subject, maskingString) + credentialDisplay, err := buildCredentialDisplayAllLocale(credentialConfigurationSupported, vc, subject, + maskingString, skipNonClaimData) if err != nil { return nil, err } @@ -455,8 +457,10 @@ func buildCredentialDisplayAllLocale( vc *verifiable.Credential, subject *verifiable.Subject, maskingString string, + skipNonClaimData bool, ) (*Credential, error) { - resolvedClaims, err := resolveClaimsAllLocale(credentialConfigurationSupported, vc, subject, maskingString) + resolvedClaims, err := resolveClaimsAllLocale(credentialConfigurationSupported, vc, subject, + maskingString, skipNonClaimData) if err != nil { return nil, err } @@ -480,10 +484,17 @@ func resolveClaimsAllLocale( vc *verifiable.Credential, credentialSubject *verifiable.Subject, maskingString string, + skipNonClaimData bool, ) ([]Subject, error) { var resolvedClaims []Subject for fieldName, claim := range credentialConfigurationSupported.CredentialDefinition.CredentialSubject { + if skipNonClaimData && + strings.HasPrefix(fieldName, "$.") && + !strings.HasPrefix(fieldName, "$.credentialSubject.") { + continue + } + resolvedClaim, err := resolveClaimAllLocale( fieldName, claim, vc, credentialSubject, credentialConfigurationSupported, maskingString) if err != nil && !errors.Is(err, errNoClaimDisplays) && !errors.Is(err, errClaimValueNotFoundInVC) { diff --git a/pkg/credentialschema/credentialschema.go b/pkg/credentialschema/credentialschema.go index d68b6ac5..ac361b81 100644 --- a/pkg/credentialschema/credentialschema.go +++ b/pkg/credentialschema/credentialschema.go @@ -45,13 +45,15 @@ func ResolveCredential(opts ...ResolveOpt) (*ResolvedData, error) { return nil, err } + rOpts := mergeOpts(opts) + if maskingString == nil { defaultMaskingString := "•" maskingString = &defaultMaskingString } credentialDisplays, err := buildCredentialDisplaysAllLocale(vcs, metadata.CredentialConfigurationsSupported, - *maskingString) + *maskingString, rOpts.skipNonClaimData) if err != nil { return nil, err } diff --git a/pkg/credentialschema/opts.go b/pkg/credentialschema/opts.go index 9d0d7c59..6cdd81e6 100644 --- a/pkg/credentialschema/opts.go +++ b/pkg/credentialschema/opts.go @@ -55,6 +55,7 @@ type resolveOpts struct { httpClient httpClient maskingString *string signatureVerifier jwt.ProofChecker + skipNonClaimData bool } // ResolveOpt represents an option for the Resolve function. @@ -162,6 +163,13 @@ func WithJWTSignatureVerifier(signatureVerifier jwt.ProofChecker) ResolveOpt { } } +// WithSkipNonClaimData skips the non-claims related data like issue and expiry date. +func WithSkipNonClaimData() ResolveOpt { + return func(opts *resolveOpts) { + opts.skipNonClaimData = true + } +} + func processOpts(opts []ResolveOpt) ([]*verifiable.Credential, *issuer.Metadata, string, *string, error) { mergedOpts := mergeOpts(opts)