Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Upgrade github.com/iden3/go-iden3-core to v2 and bump self version to v2 #42

Merged
merged 21 commits into from
Aug 29, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions .github/workflows/ci-test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,6 @@ on:
- main
- develop
pull_request:
branches:
- main
- develop
jobs:
test:
strategy:
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
>


`go get github.com/iden3/go-iden3-auth`
`go get github.com/iden3/go-iden3-auth/v2`

### General description:

Expand Down Expand Up @@ -62,7 +62,7 @@ The blockchain verification algorithm is used
1. A non-empty GIST is returned, equal to the GIST is provided by the user, it means the user is using the latest state.
2. The non-empty GIST is returned and it’s not equal to the GIST is provided by a user. Gets the transition time of the GIST. The verification party can make a decision if it can accept this state based on that time frame.
## How to use:
1. `go get https://github.com/iden3/go-iden3-auth`
1. `go get https://github.com/iden3/go-iden3-auth/v2`
2. Request generation:

basic auth:
Expand Down
138 changes: 97 additions & 41 deletions auth.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,21 +15,33 @@ import (
"github.com/ethereum/go-ethereum/ethclient"
"github.com/google/uuid"
"github.com/iden3/contracts-abi/state/go/abi"
"github.com/iden3/go-circuits"
"github.com/iden3/go-iden3-auth/loaders"
"github.com/iden3/go-iden3-auth/proofs"
"github.com/iden3/go-iden3-auth/pubsignals"
"github.com/iden3/go-iden3-auth/state"
"github.com/iden3/go-jwz"
"github.com/iden3/go-schema-processor/merklize"
"github.com/iden3/go-schema-processor/verifiable"
"github.com/iden3/iden3comm"
"github.com/iden3/iden3comm/packers"
"github.com/iden3/iden3comm/protocol"
"github.com/iden3/go-circuits/v2"
"github.com/iden3/go-iden3-auth/v2/loaders"
"github.com/iden3/go-iden3-auth/v2/proofs"
"github.com/iden3/go-iden3-auth/v2/pubsignals"
"github.com/iden3/go-iden3-auth/v2/state"
"github.com/iden3/go-jwz/v2"
schemaloaders "github.com/iden3/go-schema-processor/v2/loaders"
"github.com/iden3/go-schema-processor/v2/merklize"
"github.com/iden3/go-schema-processor/v2/verifiable"
"github.com/iden3/iden3comm/v2"
"github.com/iden3/iden3comm/v2/packers"
"github.com/iden3/iden3comm/v2/protocol"
shell "github.com/ipfs/go-ipfs-api"
"github.com/piprate/json-gold/ld"
"github.com/pkg/errors"
)

var defaultSchemaLoader ld.DocumentLoader

// SetDocumentLoader sets the default schema loader that would be used if
// other is not set with WithDocumentLoader option. Also, this document loader
// is set for go-schema-processor library to use it for merklize.
func SetDocumentLoader(schemaLoader ld.DocumentLoader) {
defaultSchemaLoader = schemaLoader
merklize.SetDocumentLoader(schemaLoader)
}

// UniversalResolverURL is a url for universal resolver
const UniversalResolverURL = "https://dev.uniresolver.io/1.0/identifiers"

Expand Down Expand Up @@ -86,56 +98,86 @@ var UniversalDIDResolver = packers.DIDResolverHandlerFunc(func(did string) (*ver
// Verifier is a struct for auth instance
type Verifier struct {
verificationKeyLoader loaders.VerificationKeyLoader
claimSchemaLoader loaders.SchemaLoader
documentLoader ld.DocumentLoader
stateResolver map[string]pubsignals.StateResolver
packageManager iden3comm.PackageManager
}

// NewVerifier returns setup instance of auth library
// Deprecated: NewVerifier now return nil it can't set up default package manager for verifier,
// in future major release it will return error
func NewVerifier(
keyLoader loaders.VerificationKeyLoader,
claimSchemaLoader loaders.SchemaLoader,
resolver map[string]pubsignals.StateResolver,
) *Verifier {
v, err := NewVerifierWithExplicitError(keyLoader, claimSchemaLoader,
resolver)
if err != nil {
return nil
// VerifierOption is a function to set options for Verifier instance
type VerifierOption func(opts *verifierOpts)

// WithDocumentLoader sets the document loader for Verifier instance
func WithDocumentLoader(docLoader ld.DocumentLoader) VerifierOption {
return func(opts *verifierOpts) {
opts.docLoader = docLoader
}
return v
}

// NewVerifierWithExplicitError returns verifier instance with default package manager and explicit error if it couldn't register default packers
// in future major release it will be renamed to NewVerifier
func NewVerifierWithExplicitError(
// WithIPFSClient sets the IPFS client for document loader of Verifier instance.
// If document loader is set with WithDocumentLoader function, this option is
// ignored.
func WithIPFSClient(ipfsCli *shell.Shell) VerifierOption {
return func(opts *verifierOpts) {
opts.ipfsCli = ipfsCli
}
}

// WithIPFSGateway sets the IPFS gateway for document loader of Verifier
// instance. If document loader is set with WithDocumentLoader function, this
// option is ignored. If WithIPFSClient is set, this option is ignored also.
func WithIPFSGateway(ipfsGW string) VerifierOption {
return func(opts *verifierOpts) {
opts.ipfsGW = ipfsGW
}
}

// WithDIDResolver sets the DID resolver for Verifier instance. The default
// value is UniversalDIDResolver.
func WithDIDResolver(resolver packers.DIDResolverHandlerFunc) VerifierOption {
return func(opts *verifierOpts) {
opts.didResolver = resolver
}
}

type verifierOpts struct {
docLoader ld.DocumentLoader
ipfsCli *shell.Shell
ipfsGW string
didResolver packers.DIDResolverHandlerFunc
}

func newOpts() verifierOpts {
return verifierOpts{
didResolver: UniversalDIDResolver,
}
}

// NewVerifier returns setup instance of auth library
func NewVerifier(
keyLoader loaders.VerificationKeyLoader,
claimSchemaLoader loaders.SchemaLoader,
resolver map[string]pubsignals.StateResolver,
opts ...VerifierOption,
) (*Verifier, error) {
vOpts := newOpts()
for _, optFn := range opts {
optFn(&vOpts)
}

docLoader := getDocumentLoader(vOpts.docLoader, vOpts.ipfsCli,
vOpts.ipfsGW)
v := &Verifier{
verificationKeyLoader: keyLoader,
claimSchemaLoader: claimSchemaLoader,
documentLoader: docLoader,
stateResolver: resolver,
packageManager: *iden3comm.NewPackageManager(),
}

// try to extract IPFS_URL if the schema loader is the default one
if impl, ok := claimSchemaLoader.(loaders.DefaultSchemaLoader); ok &&
impl.IpfsURL != "" {

ipfsCli := shell.NewShell(impl.IpfsURL)
documentLoader := merklize.NewDocumentLoader(ipfsCli, "")
merklize.SetDocumentLoader(documentLoader)
}

err := v.SetupAuthV2ZKPPacker()
if err != nil {
return nil, err
}

err = v.SetupJWSPacker(UniversalDIDResolver)
err = v.SetupJWSPacker(vOpts.didResolver)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -328,7 +370,7 @@ func (v *Verifier) VerifyAuthResponse(
rawMessage = nil
}

err = cv.VerifyQuery(ctx, query, v.claimSchemaLoader, rawMessage, opts...)
err = cv.VerifyQuery(ctx, query, v.documentLoader, rawMessage, opts...)
if err != nil {
return err
}
Expand Down Expand Up @@ -463,3 +505,17 @@ func findProofByRequestID(arr []protocol.ZeroKnowledgeProofResponse, id uint32)
}
return nil
}

func getDocumentLoader(docLoader ld.DocumentLoader, ipfsCli *shell.Shell,
ipfsGW string) ld.DocumentLoader {

if docLoader != nil {
return docLoader
}

if ipfsCli == nil && ipfsGW == "" && defaultSchemaLoader != nil {
return defaultSchemaLoader
}

return schemaloaders.NewDocumentLoader(ipfsCli, ipfsGW)
}
Loading
Loading