Skip to content

Commit

Permalink
Query.Values could be nil for V3 circuits (#83)
Browse files Browse the repository at this point in the history
  • Loading branch information
olomix authored Mar 18, 2024
1 parent ca562ac commit 04673c8
Show file tree
Hide file tree
Showing 6 changed files with 1,000 additions and 8 deletions.
4 changes: 0 additions & 4 deletions credentialAtomicQueryV3.go
Original file line number Diff line number Diff line change
Expand Up @@ -123,10 +123,6 @@ func (a AtomicQueryV3Inputs) Validate() error {
return errors.New(ErrorEmptyClaimNonRevProof)
}

if a.Query.Values == nil {
return errors.New(ErrorEmptyQueryValue)
}

if err := a.Query.ValidateValueArraySize(a.GetValueArrSize()); err != nil {
return err
}
Expand Down
4 changes: 0 additions & 4 deletions credentialAtomicQueryV3OnChain.go
Original file line number Diff line number Diff line change
Expand Up @@ -159,10 +159,6 @@ func (a AtomicQueryV3OnChainInputs) Validate() error {
return errors.New(ErrorEmptyClaimNonRevProof)
}

if a.Query.Values == nil {
return errors.New(ErrorEmptyQueryValue)
}

if err := a.Query.ValidateValueArraySize(a.GetValueArrSize()); err != nil {
return err
}
Expand Down
105 changes: 105 additions & 0 deletions credentialAtomicQueryV3OnChain_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,111 @@ func TestAttrQueryV3OnChain_SigPart_PrepareInputs(t *testing.T) {
require.JSONEq(t, exp, string(bytesInputs))
}

func TestAttrQueryV3OnChain_SigPart_Noop_PrepareInputs(t *testing.T) {

user := it.NewIdentity(t, userPK)

issuer := it.NewIdentity(t, issuerPK)

subjectID := user.ID
profileNonce := big.NewInt(0)

nonceSubject := big.NewInt(0)

claim := it.DefaultUserClaim(t, subjectID)

// Sig claim
claimSig := issuer.SignClaim(t, claim)

issuerClaimNonRevMtp, _ := issuer.ClaimRevMTPRaw(t, claim)

issuerAuthClaimNonRevMtp, _ := issuer.ClaimRevMTPRaw(t, issuer.AuthClaim)
issuerAuthClaimMtp, _ := issuer.ClaimMTPRaw(t, issuer.AuthClaim)

gTree := it.GISTTree(context.Background())
err := gTree.Add(context.Background(), issuer.ID.BigInt(), issuer.State(t).BigInt())
require.NoError(t, err)
globalProof, _, err := gTree.GenerateProof(context.Background(), user.ID.BigInt(), nil)
require.NoError(t, err)
authClaimIncMTP, _ := user.ClaimMTPRaw(t, user.AuthClaim)
authClaimNonRevMTP, _ := user.ClaimRevMTPRaw(t, user.AuthClaim)
require.NoError(t, err)
challenge := big.NewInt(10)
signature, err := user.SignBBJJ(challenge.Bytes())
require.NoError(t, err)

in := AtomicQueryV3OnChainInputs{
RequestID: big.NewInt(23),
ID: &user.ID,
ProfileNonce: profileNonce,
ClaimSubjectProfileNonce: nonceSubject,
Claim: ClaimWithSigAndMTPProof{
IssuerID: &issuer.ID,
Claim: claim,
NonRevProof: MTProof{
TreeState: TreeState{
State: issuer.State(t),
ClaimsRoot: issuer.Clt.Root(),
RevocationRoot: issuer.Ret.Root(),
RootOfRoots: issuer.Rot.Root(),
},
Proof: issuerClaimNonRevMtp,
},
SignatureProof: &BJJSignatureProof{
Signature: claimSig,
IssuerAuthClaim: issuer.AuthClaim,
IssuerAuthIncProof: MTProof{
TreeState: TreeState{
State: issuer.State(t),
ClaimsRoot: issuer.Clt.Root(),
RevocationRoot: issuer.Ret.Root(),
RootOfRoots: issuer.Rot.Root(),
},
Proof: issuerAuthClaimMtp,
},
IssuerAuthNonRevProof: MTProof{
TreeState: TreeState{
State: issuer.State(t),
ClaimsRoot: issuer.Clt.Root(),
RevocationRoot: issuer.Ret.Root(),
RootOfRoots: issuer.Rot.Root(),
},
Proof: issuerAuthClaimNonRevMtp,
},
},
},
Query: Query{
ValueProof: nil,
Operator: NOOP,
Values: nil,
SlotIndex: 2,
},
CurrentTimeStamp: timestamp,
ProofType: BJJSignatureProofType,
AuthClaim: user.AuthClaim,
AuthClaimIncMtp: authClaimIncMTP,
AuthClaimNonRevMtp: authClaimNonRevMTP,
TreeState: GetTreeState(t, user),
GISTProof: GISTProof{
Root: gTree.Root(),
Proof: globalProof,
},
Signature: signature,
Challenge: challenge,
LinkNonce: big.NewInt(0),
VerifierID: it.IDFromStr(
t, "21929109382993718606847853573861987353620810345503358891473103689157378049"),
NullifierSessionID: big.NewInt(32),
IsBJJAuthEnabled: 1,
}

bytesInputs, err := in.InputsMarshal()
require.Nil(t, err)

exp := it.TestData(t, "onchain_V3_sig_noop_inputs", string(bytesInputs), *generate)
require.JSONEq(t, exp, string(bytesInputs))
}

func TestAttrQueryV3OnChain_MTPPart_PrepareInputs(t *testing.T) {

user := it.NewIdentity(t, userPK)
Expand Down
66 changes: 66 additions & 0 deletions credentialAtomicQueryV3_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,72 @@ func TestAttrQueryV3_MTPPart_PrepareInputs(t *testing.T) {

}

func TestAttrQueryV3_MTPPart_Noop_PrepareInputs(t *testing.T) {
user := it.NewIdentity(t, userPK)
issuer := it.NewIdentity(t, issuerPK)

nonce := big.NewInt(0)

subjectID := user.ID
nonceSubject := big.NewInt(0)

claim := it.DefaultUserClaim(t, subjectID)

issuer.AddClaim(t, claim)

issuerClaimMtp, _ := issuer.ClaimMTPRaw(t, claim)

issuerClaimNonRevMtp, _ := issuer.ClaimRevMTPRaw(t, claim)

in := AtomicQueryV3Inputs{
RequestID: big.NewInt(23),
ID: &user.ID,
ProfileNonce: nonce,
ClaimSubjectProfileNonce: nonceSubject,
Claim: ClaimWithSigAndMTPProof{
IssuerID: &issuer.ID,
Claim: claim,
IncProof: &MTProof{
Proof: issuerClaimMtp,
TreeState: TreeState{
State: issuer.State(t),
ClaimsRoot: issuer.Clt.Root(),
RevocationRoot: issuer.Ret.Root(),
RootOfRoots: issuer.Rot.Root(),
},
},
NonRevProof: MTProof{
TreeState: TreeState{
State: issuer.State(t),
ClaimsRoot: issuer.Clt.Root(),
RevocationRoot: issuer.Ret.Root(),
RootOfRoots: issuer.Rot.Root(),
},
Proof: issuerClaimNonRevMtp,
},
},
Query: Query{
ValueProof: nil,
Operator: NOOP,
Values: nil,
SlotIndex: 2,
},
CurrentTimeStamp: timestamp,
ProofType: Iden3SparseMerkleTreeProofType,
LinkNonce: big.NewInt(0),
VerifierID: it.IDFromStr(
t, "21929109382993718606847853573861987353620810345503358891473103689157378049"),
NullifierSessionID: big.NewInt(32),
}

bytesInputs, err := in.InputsMarshal()
require.Nil(t, err)

exp := it.TestData(t, "V3_mtp_noop_inputs", string(bytesInputs), *generate)
require.JSONEq(t, exp, string(bytesInputs))

}

func TestAtomicQueryV3Outputs_Sig_CircuitUnmarshal(t *testing.T) {
out := new(AtomicQueryV3PubSignals)
err := out.PubSignalsUnmarshal([]byte(
Expand Down
Loading

0 comments on commit 04673c8

Please sign in to comment.