Skip to content

Latest commit

 

History

History
1101 lines (1071 loc) · 63.9 KB

README.md

File metadata and controls

1101 lines (1071 loc) · 63.9 KB

Delegatable Anonymous Credentials Library

This is the Go implementation of the Delegatable Anonymous Credentials (DAC) library presented in Anonymous Transactions with Revocation and Auditing in Hyperledger Fabric (with the base protocol first introduced in Practical UC-secure delegatable credentials with attributes and their application to blockchain). Hereafter, the references are made to Anonymous Transactions with Revocation and Auditing in Hyperledger Fabric.

This work has been supported in part by the European Union's Horizon 2020 research and innovation programme under grant agreement No. 780477 PRIViLEDGE. The publication has appeared in CANS 2021. This work should be cited as

Bogatov D., De Caro A., Elkhiyaoui K., Tackmann B. (2021) Anonymous Transactions with Revocation and Auditing in Hyperledger Fabric. In: Krenn S., Conti M., Stevens M. (eds) Cryptology and Network Security. CANS 2021. Lecture Notes in Computer Science. Springer, Cham.

or with bibtex
@inproceedings{dac-revocation-auditing,
  author       = {Dmytro Bogatov and Angelo De Caro and Kaoutar Elkhiyaoui and Björn Tackmann},
  editor       = {Stephan Krenn and Mauro Conti and Marc Stevens},
  title        = {Anonymous Transactions with Revocation and Auditing in Hyperledger Fabric},
  year         = {2021},
  publisher    = {Springer International Publishing}
}

What's implemented

This library is implemented as a Go 13 module with over 470 tests. The documentation is automatically generated on pkg.go.dev: dbogatov/dac-lib.

On a high level, here is the API (all objects can be marshalled).

  • Schnorr signatures (the signature object, key generation, signing, verifying and marshalling routines) are in schnorr.go. The mechanism works for both groups $\mathbb{G}_1$ and $\mathbb{G}_2$.

  • Groth signatures (the signature object, key generation, signing, randomizing, verifying and marshalling routines) are in groth.go. The mechanism works for both groups $\mathbb{G}_1$ and $\mathbb{G}_2$.

  • Sibling signatures is a wrapper around Schnorr and Groth to be used in DAC itself, see siblings.go.

  • scheme.go has routines to generate empty credentials, extending them by delegation, verifying the credentials, generating a proof of these credentials and verifying the proof. Generating and verifying proof is in Algorithm 6 in the paper.

  • revocation.go has routines to generate a proof of non-revocation and verify it, see Algorithm 4 in the paper.

  • auditing.go has routines to generate an encryption, decrypt it, generate the proof and verify it, see Algorithm 5 in the paper.

  • pseudonym.go manipulates pseudonyms (Algorithm 3 in the paper), credrequest.go has a secure way to request a credential and util.go includes the helpers.

  • See TestHappyPath in scheme_test.go for the end-to-end example of creating credentials, revoking, auditing and manipulating marshalled objects. dbogatov/fabric-simulator is the example of a project (distributed system communicating over the network) that uses this library. For example:

import "github.com/dbogatov/dac-lib/dac"

// ...
// assume we have helpers
schnorr := dac.MakeSchnorr(helpers.NewRand(), false)

// ...

How to run the tests

Quite simple: go test ./dac/ -v

sample output
=== RUN   TestAuditing
=== RUN   TestAuditing/h_in_g1
=== RUN   TestAuditing/h_in_g1/test_auditing_happy_path
=== RUN   TestAuditing/h_in_g1/test_auditing_decryption_fail
=== RUN   TestAuditing/h_in_g1/test_auditing_verification_fail
=== RUN   TestAuditing/h_in_g1/test_auditing_marshal
=== RUN   TestAuditing/h_in_g1/test_auditing_encryption_un_marshal_fails
=== RUN   TestAuditing/h_in_g1/test_auditing_proof_un_marshal_fails
=== RUN   TestAuditing/h_in_g2
=== RUN   TestAuditing/h_in_g2/test_auditing_happy_path
=== RUN   TestAuditing/h_in_g2/test_auditing_decryption_fail
=== RUN   TestAuditing/h_in_g2/test_auditing_verification_fail
=== RUN   TestAuditing/h_in_g2/test_auditing_marshal
=== RUN   TestAuditing/h_in_g2/test_auditing_encryption_un_marshal_fails
=== RUN   TestAuditing/h_in_g2/test_auditing_proof_un_marshal_fails
--- PASS: TestAuditing (0.48s)
    --- PASS: TestAuditing/h_in_g1 (0.11s)
        --- PASS: TestAuditing/h_in_g1/test_auditing_happy_path (0.03s)
        --- PASS: TestAuditing/h_in_g1/test_auditing_decryption_fail (0.01s)
        --- PASS: TestAuditing/h_in_g1/test_auditing_verification_fail (0.03s)
        --- PASS: TestAuditing/h_in_g1/test_auditing_marshal (0.04s)
        --- PASS: TestAuditing/h_in_g1/test_auditing_encryption_un_marshal_fails (0.00s)
        --- PASS: TestAuditing/h_in_g1/test_auditing_proof_un_marshal_fails (0.00s)
    --- PASS: TestAuditing/h_in_g2 (0.37s)
        --- PASS: TestAuditing/h_in_g2/test_auditing_happy_path (0.10s)
        --- PASS: TestAuditing/h_in_g2/test_auditing_decryption_fail (0.03s)
        --- PASS: TestAuditing/h_in_g2/test_auditing_verification_fail (0.11s)
        --- PASS: TestAuditing/h_in_g2/test_auditing_marshal (0.13s)
        --- PASS: TestAuditing/h_in_g2/test_auditing_encryption_un_marshal_fails (0.00s)
        --- PASS: TestAuditing/h_in_g2/test_auditing_proof_un_marshal_fails (0.00s)
=== RUN   TestCredRequest
=== RUN   TestCredRequest/l=1
=== RUN   TestCredRequest/l=1/test_cred_request_make_no_crash
=== RUN   TestCredRequest/l=1/test_cred_request_make_deterministic
=== RUN   TestCredRequest/l=1/test_cred_request_make_randomized
=== RUN   TestCredRequest/l=1/test_cred_request_equality
=== RUN   TestCredRequest/l=1/test_cred_request_equality/correct
=== RUN   TestCredRequest/l=1/test_cred_request_equality/wrong_nonce
=== RUN   TestCredRequest/l=1/test_cred_request_equality/wrong_nonce_length
=== RUN   TestCredRequest/l=1/test_cred_request_equality/wrong_resR
=== RUN   TestCredRequest/l=1/test_cred_request_equality/wrong_resT
=== RUN   TestCredRequest/l=1/test_cred_request_equality/wrong_public_key
=== RUN   TestCredRequest/l=1/test_cred_request_validate_no_crash
=== RUN   TestCredRequest/l=1/test_cred_request_validate_correct
=== RUN   TestCredRequest/l=1/test_cred_request_validate_tampered
=== RUN   TestCredRequest/l=1/test_cred_request_validate_tampered/wrong_nonce
=== RUN   TestCredRequest/l=1/test_cred_request_validate_tampered/wrong_resR
=== RUN   TestCredRequest/l=1/test_cred_request_validate_tampered/wrong_resT
=== RUN   TestCredRequest/l=1/test_cred_request_validate_tampered/wrong_public_key
=== RUN   TestCredRequest/l=1/test_cred_request_marshaling
=== RUN   TestCredRequest/l=1/test_cred_request_un_marshaling_fail
=== RUN   TestCredRequest/l=2
=== RUN   TestCredRequest/l=2/test_cred_request_make_no_crash
=== RUN   TestCredRequest/l=2/test_cred_request_make_deterministic
=== RUN   TestCredRequest/l=2/test_cred_request_make_randomized
=== RUN   TestCredRequest/l=2/test_cred_request_equality
=== RUN   TestCredRequest/l=2/test_cred_request_equality/correct
=== RUN   TestCredRequest/l=2/test_cred_request_equality/wrong_nonce
=== RUN   TestCredRequest/l=2/test_cred_request_equality/wrong_nonce_length
=== RUN   TestCredRequest/l=2/test_cred_request_equality/wrong_resR
=== RUN   TestCredRequest/l=2/test_cred_request_equality/wrong_resT
=== RUN   TestCredRequest/l=2/test_cred_request_equality/wrong_public_key
=== RUN   TestCredRequest/l=2/test_cred_request_validate_no_crash
=== RUN   TestCredRequest/l=2/test_cred_request_validate_correct
=== RUN   TestCredRequest/l=2/test_cred_request_validate_tampered
=== RUN   TestCredRequest/l=2/test_cred_request_validate_tampered/wrong_nonce
=== RUN   TestCredRequest/l=2/test_cred_request_validate_tampered/wrong_resR
=== RUN   TestCredRequest/l=2/test_cred_request_validate_tampered/wrong_resT
=== RUN   TestCredRequest/l=2/test_cred_request_validate_tampered/wrong_public_key
=== RUN   TestCredRequest/l=2/test_cred_request_marshaling
=== RUN   TestCredRequest/l=2/test_cred_request_un_marshaling_fail
--- PASS: TestCredRequest (0.59s)
    --- PASS: TestCredRequest/l=1 (0.16s)
        --- PASS: TestCredRequest/l=1/test_cred_request_make_no_crash (0.01s)
        --- PASS: TestCredRequest/l=1/test_cred_request_make_deterministic (0.01s)
        --- PASS: TestCredRequest/l=1/test_cred_request_make_randomized (0.01s)
        --- PASS: TestCredRequest/l=1/test_cred_request_equality (0.07s)
            --- PASS: TestCredRequest/l=1/test_cred_request_equality/correct (0.01s)
            --- PASS: TestCredRequest/l=1/test_cred_request_equality/wrong_nonce (0.01s)
            --- PASS: TestCredRequest/l=1/test_cred_request_equality/wrong_nonce_length (0.01s)
            --- PASS: TestCredRequest/l=1/test_cred_request_equality/wrong_resR (0.01s)
            --- PASS: TestCredRequest/l=1/test_cred_request_equality/wrong_resT (0.01s)
            --- PASS: TestCredRequest/l=1/test_cred_request_equality/wrong_public_key (0.01s)
        --- PASS: TestCredRequest/l=1/test_cred_request_validate_no_crash (0.01s)
        --- PASS: TestCredRequest/l=1/test_cred_request_validate_correct (0.01s)
        --- PASS: TestCredRequest/l=1/test_cred_request_validate_tampered (0.04s)
            --- PASS: TestCredRequest/l=1/test_cred_request_validate_tampered/wrong_nonce (0.01s)
            --- PASS: TestCredRequest/l=1/test_cred_request_validate_tampered/wrong_resR (0.01s)
            --- PASS: TestCredRequest/l=1/test_cred_request_validate_tampered/wrong_resT (0.01s)
            --- PASS: TestCredRequest/l=1/test_cred_request_validate_tampered/wrong_public_key (0.01s)
        --- PASS: TestCredRequest/l=1/test_cred_request_marshaling (0.01s)
        --- PASS: TestCredRequest/l=1/test_cred_request_un_marshaling_fail (0.00s)
    --- PASS: TestCredRequest/l=2 (0.43s)
        --- PASS: TestCredRequest/l=2/test_cred_request_make_no_crash (0.02s)
        --- PASS: TestCredRequest/l=2/test_cred_request_make_deterministic (0.04s)
        --- PASS: TestCredRequest/l=2/test_cred_request_make_randomized (0.03s)
        --- PASS: TestCredRequest/l=2/test_cred_request_equality (0.16s)
            --- PASS: TestCredRequest/l=2/test_cred_request_equality/correct (0.03s)
            --- PASS: TestCredRequest/l=2/test_cred_request_equality/wrong_nonce (0.03s)
            --- PASS: TestCredRequest/l=2/test_cred_request_equality/wrong_nonce_length (0.03s)
            --- PASS: TestCredRequest/l=2/test_cred_request_equality/wrong_resR (0.02s)
            --- PASS: TestCredRequest/l=2/test_cred_request_equality/wrong_resT (0.03s)
            --- PASS: TestCredRequest/l=2/test_cred_request_equality/wrong_public_key (0.02s)
        --- PASS: TestCredRequest/l=2/test_cred_request_validate_no_crash (0.03s)
        --- PASS: TestCredRequest/l=2/test_cred_request_validate_correct (0.03s)
        --- PASS: TestCredRequest/l=2/test_cred_request_validate_tampered (0.10s)
            --- PASS: TestCredRequest/l=2/test_cred_request_validate_tampered/wrong_nonce (0.02s)
            --- PASS: TestCredRequest/l=2/test_cred_request_validate_tampered/wrong_resR (0.02s)
            --- PASS: TestCredRequest/l=2/test_cred_request_validate_tampered/wrong_resT (0.03s)
            --- PASS: TestCredRequest/l=2/test_cred_request_validate_tampered/wrong_public_key (0.03s)
        --- PASS: TestCredRequest/l=2/test_cred_request_marshaling (0.02s)
        --- PASS: TestCredRequest/l=2/test_cred_request_un_marshaling_fail (0.00s)
=== RUN   TestGroth
=== RUN   TestGroth/b=1
=== RUN   TestGroth/b=1/test_groth_consistency_checks
=== RUN   TestGroth/b=1/test_groth_consistency_checks/wrong_message_for_sign
=== RUN   TestGroth/b=1/test_groth_consistency_checks/wrong_ts_for_randomize
=== RUN   TestGroth/b=1/test_groth_consistency_checks/wrong_m_and_ts_for_verify
=== RUN   TestGroth/b=1/test_groth_deterministic_generate
=== RUN   TestGroth/b=1/test_groth_randomize_different_seed
=== RUN   TestGroth/b=1/test_groth_randomize_no_crash
=== RUN   TestGroth/b=1/test_groth_randomize_same_seed
=== RUN   TestGroth/b=1/test_groth_randomized_generate
=== RUN   TestGroth/b=1/test_groth_sign_no_crash
=== RUN   TestGroth/b=1/test_groth_signature_working_after_randomization
=== RUN   TestGroth/b=1/test_groth_verify_correct
=== RUN   TestGroth/b=1/test_groth_verify_tampered_signature
=== RUN   TestGroth/b=1/test_groth_verify_wrong_message
=== RUN   TestGroth/b=1/test_groth_verify_no_crash
=== RUN   TestGroth/b=1/test_groth_signature_equality
=== RUN   TestGroth/b=1/test_groth_signature_equality/correct
=== RUN   TestGroth/b=1/test_groth_signature_equality/wrong_r
=== RUN   TestGroth/b=1/test_groth_signature_equality/wrong_s
=== RUN   TestGroth/b=1/test_groth_signature_equality/wrong_ts
=== RUN   TestGroth/b=1/test_groth_signature_marshal
=== RUN   TestGroth/b=1/test_groth_signature_un_marshal_fails
=== RUN   TestGroth/b=2
=== RUN   TestGroth/b=2/test_groth_consistency_checks
=== RUN   TestGroth/b=2/test_groth_consistency_checks/wrong_message_for_sign
=== RUN   TestGroth/b=2/test_groth_consistency_checks/wrong_ts_for_randomize
=== RUN   TestGroth/b=2/test_groth_consistency_checks/wrong_m_and_ts_for_verify
=== RUN   TestGroth/b=2/test_groth_deterministic_generate
=== RUN   TestGroth/b=2/test_groth_randomize_different_seed
=== RUN   TestGroth/b=2/test_groth_randomize_no_crash
=== RUN   TestGroth/b=2/test_groth_randomize_same_seed
=== RUN   TestGroth/b=2/test_groth_randomized_generate
=== RUN   TestGroth/b=2/test_groth_sign_no_crash
=== RUN   TestGroth/b=2/test_groth_signature_working_after_randomization
=== RUN   TestGroth/b=2/test_groth_verify_correct
=== RUN   TestGroth/b=2/test_groth_verify_tampered_signature
=== RUN   TestGroth/b=2/test_groth_verify_wrong_message
=== RUN   TestGroth/b=2/test_groth_verify_no_crash
=== RUN   TestGroth/b=2/test_groth_signature_equality
=== RUN   TestGroth/b=2/test_groth_signature_equality/correct
=== RUN   TestGroth/b=2/test_groth_signature_equality/wrong_r
=== RUN   TestGroth/b=2/test_groth_signature_equality/wrong_s
=== RUN   TestGroth/b=2/test_groth_signature_equality/wrong_ts
=== RUN   TestGroth/b=2/test_groth_signature_marshal
=== RUN   TestGroth/b=2/test_groth_signature_un_marshal_fails
--- PASS: TestGroth (2.27s)
    --- PASS: TestGroth/b=1 (0.90s)
        --- PASS: TestGroth/b=1/test_groth_consistency_checks (0.03s)
            --- PASS: TestGroth/b=1/test_groth_consistency_checks/wrong_message_for_sign (0.00s)
            --- PASS: TestGroth/b=1/test_groth_consistency_checks/wrong_ts_for_randomize (0.00s)
            --- PASS: TestGroth/b=1/test_groth_consistency_checks/wrong_m_and_ts_for_verify (0.00s)
        --- PASS: TestGroth/b=1/test_groth_deterministic_generate (0.02s)
        --- PASS: TestGroth/b=1/test_groth_randomize_different_seed (0.05s)
        --- PASS: TestGroth/b=1/test_groth_randomize_no_crash (0.04s)
        --- PASS: TestGroth/b=1/test_groth_randomize_same_seed (0.03s)
        --- PASS: TestGroth/b=1/test_groth_randomized_generate (0.01s)
        --- PASS: TestGroth/b=1/test_groth_sign_no_crash (0.02s)
        --- PASS: TestGroth/b=1/test_groth_signature_working_after_randomization (0.09s)
        --- PASS: TestGroth/b=1/test_groth_verify_correct (0.08s)
        --- PASS: TestGroth/b=1/test_groth_verify_tampered_signature (0.09s)
        --- PASS: TestGroth/b=1/test_groth_verify_wrong_message (0.09s)
        --- PASS: TestGroth/b=1/test_groth_verify_no_crash (0.08s)
        --- PASS: TestGroth/b=1/test_groth_signature_equality (0.24s)
            --- PASS: TestGroth/b=1/test_groth_signature_equality/correct (0.06s)
            --- PASS: TestGroth/b=1/test_groth_signature_equality/wrong_r (0.06s)
            --- PASS: TestGroth/b=1/test_groth_signature_equality/wrong_s (0.06s)
            --- PASS: TestGroth/b=1/test_groth_signature_equality/wrong_ts (0.06s)
        --- PASS: TestGroth/b=1/test_groth_signature_marshal (0.02s)
        --- PASS: TestGroth/b=1/test_groth_signature_un_marshal_fails (0.00s)
    --- PASS: TestGroth/b=2 (1.32s)
        --- PASS: TestGroth/b=2/test_groth_consistency_checks (0.06s)
            --- PASS: TestGroth/b=2/test_groth_consistency_checks/wrong_message_for_sign (0.00s)
            --- PASS: TestGroth/b=2/test_groth_consistency_checks/wrong_ts_for_randomize (0.00s)
            --- PASS: TestGroth/b=2/test_groth_consistency_checks/wrong_m_and_ts_for_verify (0.00s)
        --- PASS: TestGroth/b=2/test_groth_deterministic_generate (0.03s)
        --- PASS: TestGroth/b=2/test_groth_randomize_different_seed (0.08s)
        --- PASS: TestGroth/b=2/test_groth_randomize_no_crash (0.08s)
        --- PASS: TestGroth/b=2/test_groth_randomize_same_seed (0.07s)
        --- PASS: TestGroth/b=2/test_groth_randomized_generate (0.00s)
        --- PASS: TestGroth/b=2/test_groth_sign_no_crash (0.04s)
        --- PASS: TestGroth/b=2/test_groth_signature_working_after_randomization (0.10s)
        --- PASS: TestGroth/b=2/test_groth_verify_correct (0.10s)
        --- PASS: TestGroth/b=2/test_groth_verify_tampered_signature (0.09s)
        --- PASS: TestGroth/b=2/test_groth_verify_wrong_message (0.10s)
        --- PASS: TestGroth/b=2/test_groth_verify_no_crash (0.10s)
        --- PASS: TestGroth/b=2/test_groth_signature_equality (0.42s)
            --- PASS: TestGroth/b=2/test_groth_signature_equality/correct (0.11s)
            --- PASS: TestGroth/b=2/test_groth_signature_equality/wrong_r (0.10s)
            --- PASS: TestGroth/b=2/test_groth_signature_equality/wrong_s (0.11s)
            --- PASS: TestGroth/b=2/test_groth_signature_equality/wrong_ts (0.11s)
        --- PASS: TestGroth/b=2/test_groth_signature_marshal (0.04s)
        --- PASS: TestGroth/b=2/test_groth_signature_un_marshal_fails (0.00s)
=== RUN   TestNoIdemix
=== RUN   TestNoIdemix/ecdsa_standard_P224
=== RUN   TestNoIdemix/ecdsa_standard_P256
=== RUN   TestNoIdemix/ecdsa_standard_P384
=== RUN   TestNoIdemix/ecdsa_standard_P521
--- PASS: TestNoIdemix (0.03s)
    --- PASS: TestNoIdemix/ecdsa_standard_P224 (0.00s)
    --- PASS: TestNoIdemix/ecdsa_standard_P256 (0.00s)
    --- PASS: TestNoIdemix/ecdsa_standard_P384 (0.02s)
    --- PASS: TestNoIdemix/ecdsa_standard_P521 (0.01s)
=== RUN   TestNym
=== RUN   TestNym/h_in_g1
=== RUN   TestNym/h_in_g1/test_nym_deterministic_generate
=== RUN   TestNym/h_in_g1/test_nym_equality
=== RUN   TestNym/h_in_g1/test_nym_equality/correct
=== RUN   TestNym/h_in_g1/test_nym_equality/wrong_resSk
=== RUN   TestNym/h_in_g1/test_nym_equality/wrong_resSkNym
=== RUN   TestNym/h_in_g1/test_nym_equality/wrong_commitment
=== RUN   TestNym/h_in_g1/test_nym_marshal
=== RUN   TestNym/h_in_g1/test_nym_randomized_generate
=== RUN   TestNym/h_in_g1/test_nym_sign_no_crash
=== RUN   TestNym/h_in_g1/test_nym_verify_correct
=== RUN   TestNym/h_in_g1/test_nym_verify_no_crash
=== RUN   TestNym/h_in_g1/test_nym_verify_tampered_signature
=== RUN   TestNym/h_in_g1/test_nym_verify_tampered_signature/wrong_resSk
=== RUN   TestNym/h_in_g1/test_nym_verify_tampered_signature/wrong_resSkNym
=== RUN   TestNym/h_in_g1/test_nym_verify_tampered_signature/wrong_commitment
=== RUN   TestNym/h_in_g1/test_nym_verify_wrong_message
=== RUN   TestNym/h_in_g1/test_nym_un_marshaling_fail
=== RUN   TestNym/h_in_g2
=== RUN   TestNym/h_in_g2/test_nym_deterministic_generate
=== RUN   TestNym/h_in_g2/test_nym_equality
=== RUN   TestNym/h_in_g2/test_nym_equality/correct
=== RUN   TestNym/h_in_g2/test_nym_equality/wrong_resSk
=== RUN   TestNym/h_in_g2/test_nym_equality/wrong_resSkNym
=== RUN   TestNym/h_in_g2/test_nym_equality/wrong_commitment
=== RUN   TestNym/h_in_g2/test_nym_marshal
=== RUN   TestNym/h_in_g2/test_nym_randomized_generate
=== RUN   TestNym/h_in_g2/test_nym_sign_no_crash
=== RUN   TestNym/h_in_g2/test_nym_verify_correct
=== RUN   TestNym/h_in_g2/test_nym_verify_no_crash
=== RUN   TestNym/h_in_g2/test_nym_verify_tampered_signature
=== RUN   TestNym/h_in_g2/test_nym_verify_tampered_signature/wrong_resSk
=== RUN   TestNym/h_in_g2/test_nym_verify_tampered_signature/wrong_resSkNym
=== RUN   TestNym/h_in_g2/test_nym_verify_tampered_signature/wrong_commitment
=== RUN   TestNym/h_in_g2/test_nym_verify_wrong_message
=== RUN   TestNym/h_in_g2/test_nym_un_marshaling_fail
--- PASS: TestNym (0.80s)
    --- PASS: TestNym/h_in_g1 (0.23s)
        --- PASS: TestNym/h_in_g1/test_nym_deterministic_generate (0.01s)
        --- PASS: TestNym/h_in_g1/test_nym_equality (0.07s)
            --- PASS: TestNym/h_in_g1/test_nym_equality/correct (0.02s)
            --- PASS: TestNym/h_in_g1/test_nym_equality/wrong_resSk (0.02s)
            --- PASS: TestNym/h_in_g1/test_nym_equality/wrong_resSkNym (0.02s)
            --- PASS: TestNym/h_in_g1/test_nym_equality/wrong_commitment (0.02s)
        --- PASS: TestNym/h_in_g1/test_nym_marshal (0.01s)
        --- PASS: TestNym/h_in_g1/test_nym_randomized_generate (0.01s)
        --- PASS: TestNym/h_in_g1/test_nym_sign_no_crash (0.01s)
        --- PASS: TestNym/h_in_g1/test_nym_verify_correct (0.02s)
        --- PASS: TestNym/h_in_g1/test_nym_verify_no_crash (0.02s)
        --- PASS: TestNym/h_in_g1/test_nym_verify_tampered_signature (0.05s)
            --- PASS: TestNym/h_in_g1/test_nym_verify_tampered_signature/wrong_resSk (0.02s)
            --- PASS: TestNym/h_in_g1/test_nym_verify_tampered_signature/wrong_resSkNym (0.02s)
            --- PASS: TestNym/h_in_g1/test_nym_verify_tampered_signature/wrong_commitment (0.02s)
        --- PASS: TestNym/h_in_g1/test_nym_verify_wrong_message (0.02s)
        --- PASS: TestNym/h_in_g1/test_nym_un_marshaling_fail (0.00s)
    --- PASS: TestNym/h_in_g2 (0.56s)
        --- PASS: TestNym/h_in_g2/test_nym_deterministic_generate (0.03s)
        --- PASS: TestNym/h_in_g2/test_nym_equality (0.17s)
            --- PASS: TestNym/h_in_g2/test_nym_equality/correct (0.04s)
            --- PASS: TestNym/h_in_g2/test_nym_equality/wrong_resSk (0.04s)
            --- PASS: TestNym/h_in_g2/test_nym_equality/wrong_resSkNym (0.04s)
            --- PASS: TestNym/h_in_g2/test_nym_equality/wrong_commitment (0.04s)
        --- PASS: TestNym/h_in_g2/test_nym_marshal (0.03s)
        --- PASS: TestNym/h_in_g2/test_nym_randomized_generate (0.03s)
        --- PASS: TestNym/h_in_g2/test_nym_sign_no_crash (0.03s)
        --- PASS: TestNym/h_in_g2/test_nym_verify_correct (0.04s)
        --- PASS: TestNym/h_in_g2/test_nym_verify_no_crash (0.06s)
        --- PASS: TestNym/h_in_g2/test_nym_verify_tampered_signature (0.13s)
            --- PASS: TestNym/h_in_g2/test_nym_verify_tampered_signature/wrong_resSk (0.04s)
            --- PASS: TestNym/h_in_g2/test_nym_verify_tampered_signature/wrong_resSkNym (0.04s)
            --- PASS: TestNym/h_in_g2/test_nym_verify_tampered_signature/wrong_commitment (0.05s)
        --- PASS: TestNym/h_in_g2/test_nym_verify_wrong_message (0.05s)
        --- PASS: TestNym/h_in_g2/test_nym_un_marshaling_fail (0.00s)
=== RUN   TestRevocation
=== RUN   TestRevocation/h_in_g1
=== RUN   TestRevocation/h_in_g1/test_revocation_happy_path
=== RUN   TestRevocation/h_in_g1/test_revocation_verification_fails_early
=== RUN   TestRevocation/h_in_g1/test_revocation_verification_fails_later
=== RUN   TestRevocation/h_in_g1/test_revocation_marshal
=== RUN   TestRevocation/h_in_g1/test_revocation_un_marshal_fails
=== RUN   TestRevocation/h_in_g2
=== RUN   TestRevocation/h_in_g2/test_revocation_happy_path
=== RUN   TestRevocation/h_in_g2/test_revocation_verification_fails_early
=== RUN   TestRevocation/h_in_g2/test_revocation_verification_fails_later
=== RUN   TestRevocation/h_in_g2/test_revocation_marshal
=== RUN   TestRevocation/h_in_g2/test_revocation_un_marshal_fails
--- PASS: TestRevocation (2.34s)
    --- PASS: TestRevocation/h_in_g1 (1.31s)
        --- PASS: TestRevocation/h_in_g1/test_revocation_happy_path (0.37s)
        --- PASS: TestRevocation/h_in_g1/test_revocation_verification_fails_early (0.26s)
        --- PASS: TestRevocation/h_in_g1/test_revocation_verification_fails_later (0.35s)
        --- PASS: TestRevocation/h_in_g1/test_revocation_marshal (0.33s)
        --- PASS: TestRevocation/h_in_g1/test_revocation_un_marshal_fails (0.00s)
    --- PASS: TestRevocation/h_in_g2 (1.04s)
        --- PASS: TestRevocation/h_in_g2/test_revocation_happy_path (0.29s)
        --- PASS: TestRevocation/h_in_g2/test_revocation_verification_fails_early (0.19s)
        --- PASS: TestRevocation/h_in_g2/test_revocation_verification_fails_later (0.29s)
        --- PASS: TestRevocation/h_in_g2/test_revocation_marshal (0.28s)
        --- PASS: TestRevocation/h_in_g2/test_revocation_un_marshal_fails (0.00s)
=== RUN   TestHappyPath
--- PASS: TestHappyPath (0.56s)
=== RUN   TestSchemeDelegateNoCrash
--- PASS: TestSchemeDelegateNoCrash (0.16s)
=== RUN   TestSchemeVerifyNoCrash
--- PASS: TestSchemeVerifyNoCrash (0.27s)
=== RUN   TestSchemeVerifyCorrect
=== RUN   TestSchemeVerifyCorrect/L=1
=== RUN   TestSchemeVerifyCorrect/L=2
=== RUN   TestSchemeVerifyCorrect/L=3
=== RUN   TestSchemeVerifyCorrect/L=5
=== RUN   TestSchemeVerifyCorrect/L=10
--- PASS: TestSchemeVerifyCorrect (2.17s)
    --- PASS: TestSchemeVerifyCorrect/L=1 (0.14s)
    --- PASS: TestSchemeVerifyCorrect/L=2 (0.25s)
    --- PASS: TestSchemeVerifyCorrect/L=3 (0.33s)
    --- PASS: TestSchemeVerifyCorrect/L=5 (0.47s)
    --- PASS: TestSchemeVerifyCorrect/L=10 (0.97s)
=== RUN   TestSchemeVerifyTamperedCreds
=== RUN   TestSchemeVerifyTamperedCreds/wrong_public_key
=== RUN   TestSchemeVerifyTamperedCreds/wrong_secret_key
=== RUN   TestSchemeVerifyTamperedCreds/wrong_credentials_link
--- PASS: TestSchemeVerifyTamperedCreds (0.81s)
    --- PASS: TestSchemeVerifyTamperedCreds/wrong_public_key (0.17s)
    --- PASS: TestSchemeVerifyTamperedCreds/wrong_secret_key (0.32s)
    --- PASS: TestSchemeVerifyTamperedCreds/wrong_credentials_link (0.32s)
=== RUN   TestSchemeProveNoCrash
--- PASS: TestSchemeProveNoCrash (0.39s)
=== RUN   TestSchemeProveDeterministic
--- PASS: TestSchemeProveDeterministic (0.79s)
=== RUN   TestSchemeProveRandomized
--- PASS: TestSchemeProveRandomized (0.83s)
=== RUN   TestSchemeVerifyProofNoCrash
--- PASS: TestSchemeVerifyProofNoCrash (0.54s)
=== RUN   TestSchemeVerifyProofCorrect
=== RUN   TestSchemeVerifyProofCorrect/L=1
=== RUN   TestSchemeVerifyProofCorrect/L=2
=== RUN   TestSchemeVerifyProofCorrect/L=3
=== RUN   TestSchemeVerifyProofCorrect/L=5
=== RUN   TestSchemeVerifyProofCorrect/L=10
=== RUN   TestSchemeVerifyProofCorrect/disclosed_level=1
=== RUN   TestSchemeVerifyProofCorrect/disclosed_level=2
=== RUN   TestSchemeVerifyProofCorrect/disclosed_level=3
=== RUN   TestSchemeVerifyProofCorrect/disclosed_level=4
=== RUN   TestSchemeVerifyProofCorrect/disclosed_level=5
=== RUN   TestSchemeVerifyProofCorrect/all_disclosed
=== RUN   TestSchemeVerifyProofCorrect/all_hidden
--- PASS: TestSchemeVerifyProofCorrect (10.87s)
    --- PASS: TestSchemeVerifyProofCorrect/L=1 (0.21s)
    --- PASS: TestSchemeVerifyProofCorrect/L=2 (0.42s)
    --- PASS: TestSchemeVerifyProofCorrect/L=3 (0.53s)
    --- PASS: TestSchemeVerifyProofCorrect/L=5 (0.93s)
    --- PASS: TestSchemeVerifyProofCorrect/L=10 (1.92s)
    --- PASS: TestSchemeVerifyProofCorrect/disclosed_level=1 (0.91s)
    --- PASS: TestSchemeVerifyProofCorrect/disclosed_level=2 (0.91s)
    --- PASS: TestSchemeVerifyProofCorrect/disclosed_level=3 (0.91s)
    --- PASS: TestSchemeVerifyProofCorrect/disclosed_level=4 (0.89s)
    --- PASS: TestSchemeVerifyProofCorrect/disclosed_level=5 (1.08s)
    --- PASS: TestSchemeVerifyProofCorrect/all_disclosed (1.08s)
    --- PASS: TestSchemeVerifyProofCorrect/all_hidden (1.07s)
=== RUN   TestSchemeVerifyProofTampered
=== RUN   TestSchemeVerifyProofTampered/l=1
=== RUN   TestSchemeVerifyProofTampered/l=1/wrong_rPrime
=== RUN   TestSchemeVerifyProofTampered/l=1/wrong_resA
=== RUN   TestSchemeVerifyProofTampered/l=1/wrong_resT
=== RUN   TestSchemeVerifyProofTampered/l=1/wrong_resS
=== RUN   TestSchemeVerifyProofTampered/l=1/wrong_y-value
=== RUN   TestSchemeVerifyProofTampered/l=1/wrong_public_key
=== RUN   TestSchemeVerifyProofTampered/l=1/wrong_message
=== RUN   TestSchemeVerifyProofTampered/l=1/wrong_resCsk
=== RUN   TestSchemeVerifyProofTampered/l=1/wrong_disclosed_attribute
=== RUN   TestSchemeVerifyProofTampered/l=1/wrong_resCpk
=== RUN   TestSchemeVerifyProofTampered/l=2
=== RUN   TestSchemeVerifyProofTampered/l=2/wrong_rPrime
=== RUN   TestSchemeVerifyProofTampered/l=2/wrong_resA
=== RUN   TestSchemeVerifyProofTampered/l=2/wrong_resT
=== RUN   TestSchemeVerifyProofTampered/l=2/wrong_resS
=== RUN   TestSchemeVerifyProofTampered/l=2/wrong_y-value
=== RUN   TestSchemeVerifyProofTampered/l=2/wrong_resCpk
=== RUN   TestSchemeVerifyProofTampered/l=3
=== RUN   TestSchemeVerifyProofTampered/l=3/wrong_rPrime
=== RUN   TestSchemeVerifyProofTampered/l=3/wrong_resA
=== RUN   TestSchemeVerifyProofTampered/l=3/wrong_resT
=== RUN   TestSchemeVerifyProofTampered/l=3/wrong_resS
=== RUN   TestSchemeVerifyProofTampered/l=3/wrong_y-value
--- PASS: TestSchemeVerifyProofTampered (16.60s)
    --- PASS: TestSchemeVerifyProofTampered/l=1 (6.91s)
        --- PASS: TestSchemeVerifyProofTampered/l=1/wrong_rPrime (0.69s)
        --- PASS: TestSchemeVerifyProofTampered/l=1/wrong_resA (0.81s)
        --- PASS: TestSchemeVerifyProofTampered/l=1/wrong_resT (0.79s)
        --- PASS: TestSchemeVerifyProofTampered/l=1/wrong_resS (0.78s)
        --- PASS: TestSchemeVerifyProofTampered/l=1/wrong_y-value (0.77s)
        --- PASS: TestSchemeVerifyProofTampered/l=1/wrong_public_key (0.61s)
        --- PASS: TestSchemeVerifyProofTampered/l=1/wrong_message (0.66s)
        --- PASS: TestSchemeVerifyProofTampered/l=1/wrong_resCsk (0.65s)
        --- PASS: TestSchemeVerifyProofTampered/l=1/wrong_disclosed_attribute (0.60s)
        --- PASS: TestSchemeVerifyProofTampered/l=1/wrong_resCpk (0.55s)
    --- PASS: TestSchemeVerifyProofTampered/l=2 (5.44s)
        --- PASS: TestSchemeVerifyProofTampered/l=2/wrong_rPrime (0.75s)
        --- PASS: TestSchemeVerifyProofTampered/l=2/wrong_resA (0.89s)
        --- PASS: TestSchemeVerifyProofTampered/l=2/wrong_resT (1.07s)
        --- PASS: TestSchemeVerifyProofTampered/l=2/wrong_resS (0.94s)
        --- PASS: TestSchemeVerifyProofTampered/l=2/wrong_y-value (0.80s)
        --- PASS: TestSchemeVerifyProofTampered/l=2/wrong_resCpk (1.00s)
    --- PASS: TestSchemeVerifyProofTampered/l=3 (4.24s)
        --- PASS: TestSchemeVerifyProofTampered/l=3/wrong_rPrime (1.03s)
        --- PASS: TestSchemeVerifyProofTampered/l=3/wrong_resA (1.07s)
        --- PASS: TestSchemeVerifyProofTampered/l=3/wrong_resT (0.73s)
        --- PASS: TestSchemeVerifyProofTampered/l=3/wrong_resS (0.75s)
        --- PASS: TestSchemeVerifyProofTampered/l=3/wrong_y-value (0.67s)
=== RUN   TestSchemeProofMarshal
=== RUN   TestSchemeProofMarshal/toBytes_no_crash
=== RUN   TestSchemeProofMarshal/fromBytes_no_crash
=== RUN   TestSchemeProofMarshal/marshal_correct
--- PASS: TestSchemeProofMarshal (1.70s)
    --- PASS: TestSchemeProofMarshal/toBytes_no_crash (0.49s)
    --- PASS: TestSchemeProofMarshal/fromBytes_no_crash (0.65s)
    --- PASS: TestSchemeProofMarshal/marshal_correct (0.57s)
=== RUN   TestSchemeMarshalSizes
L     n     attributes      size

1     0     all disclosed   398 B
1     0     all hidden      398 B
1     0     one disclosed   398 B
1     1     all disclosed   469 B
1     1     all hidden      534 B
1     1     one disclosed   469 B
1     2     all disclosed   538 B
1     2     all hidden      670 B
1     2     one disclosed   603 B
1     3     all disclosed   609 B
1     3     all hidden      806 B
1     3     one disclosed   741 B
1     4     all disclosed   678 B
1     4     all hidden      942 B
1     4     one disclosed   875 B

2     0     all disclosed   801 B
2     0     all hidden      801 B
2     0     one disclosed   801 B
2     1     all disclosed   1.0 kB
2     1     all hidden      1.2 kB
2     1     one disclosed   1.1 kB
2     2     all disclosed   1.2 kB
2     2     all hidden      1.6 kB
2     2     one disclosed   1.5 kB
2     3     all disclosed   1.4 kB
2     3     all hidden      2.0 kB
2     3     one disclosed   1.9 kB
2     4     all disclosed   1.6 kB
2     4     all hidden      2.4 kB
2     4     one disclosed   2.3 kB

3     0     all disclosed   1.2 kB
3     0     all hidden      1.2 kB
3     0     one disclosed   1.2 kB
3     1     all disclosed   1.5 kB
3     1     all hidden      1.7 kB
3     1     one disclosed   1.7 kB
3     2     all disclosed   1.8 kB
3     2     all hidden      2.3 kB
3     2     one disclosed   2.2 kB
3     3     all disclosed   2.0 kB
3     3     all hidden      2.8 kB
3     3     one disclosed   2.7 kB
3     4     all disclosed   2.3 kB
3     4     all hidden      3.3 kB
3     4     one disclosed   3.3 kB

5     0     all disclosed   2.0 kB
5     0     all hidden      2.0 kB
5     0     one disclosed   2.0 kB
5     1     all disclosed   2.5 kB
5     1     all hidden      2.9 kB
5     1     one disclosed   2.9 kB
5     2     all disclosed   3.0 kB
5     2     all hidden      3.9 kB
5     2     one disclosed   3.8 kB
5     3     all disclosed   3.4 kB
5     3     all hidden      4.8 kB
5     3     one disclosed   4.7 kB
5     4     all disclosed   3.9 kB
5     4     all hidden      5.7 kB
5     4     one disclosed   5.7 kB

10    0     all disclosed   4.0 kB
10    0     all hidden      4.0 kB
10    0     one disclosed   4.0 kB
10    1     all disclosed   5.0 kB
10    1     all hidden      6.0 kB
10    1     one disclosed   5.9 kB
10    2     all disclosed   6.0 kB
10    2     all hidden      8.0 kB
10    2     one disclosed   7.9 kB
10    3     all disclosed   7.1 kB
10    3     all hidden      10 kB
10    3     one disclosed   9.9 kB
10    4     all disclosed   8.1 kB
10    4     all hidden      12 kB
10    4     one disclosed   12 kB
--- PASS: TestSchemeMarshalSizes (54.04s)
=== RUN   TestSchemeUserErrors
=== RUN   TestSchemeUserErrors/delegate
=== RUN   TestSchemeUserErrors/verify
=== RUN   TestSchemeUserErrors/prove_commitment_failure
=== RUN   TestSchemeUserErrors/prove
=== RUN   TestSchemeUserErrors/verify_proof_commitment_failure
=== RUN   TestSchemeUserErrors/verify_proof
--- PASS: TestSchemeUserErrors (2.41s)
    --- PASS: TestSchemeUserErrors/delegate (0.11s)
    --- PASS: TestSchemeUserErrors/verify (0.43s)
    --- PASS: TestSchemeUserErrors/prove_commitment_failure (0.43s)
    --- PASS: TestSchemeUserErrors/prove (0.22s)
    --- PASS: TestSchemeUserErrors/verify_proof_commitment_failure (0.65s)
    --- PASS: TestSchemeUserErrors/verify_proof (0.55s)
=== RUN   TestSchemeProofEquality
=== RUN   TestSchemeProofEquality/wrong_c
=== RUN   TestSchemeProofEquality/wrong_rPrime
=== RUN   TestSchemeProofEquality/wrong_resA
=== RUN   TestSchemeProofEquality/wrong_resT
=== RUN   TestSchemeProofEquality/wrong_resS
=== RUN   TestSchemeProofEquality/wrong_resCpk
=== RUN   TestSchemeProofEquality/wrong_resCsk
=== RUN   TestSchemeProofEquality/wrong_resNym
=== RUN   TestSchemeProofEquality/correct
--- PASS: TestSchemeProofEquality (8.18s)
    --- PASS: TestSchemeProofEquality/wrong_c (0.83s)
    --- PASS: TestSchemeProofEquality/wrong_rPrime (0.81s)
    --- PASS: TestSchemeProofEquality/wrong_resA (0.87s)
    --- PASS: TestSchemeProofEquality/wrong_resT (0.98s)
    --- PASS: TestSchemeProofEquality/wrong_resS (1.02s)
    --- PASS: TestSchemeProofEquality/wrong_resCpk (0.96s)
    --- PASS: TestSchemeProofEquality/wrong_resCsk (0.92s)
    --- PASS: TestSchemeProofEquality/wrong_resNym (0.91s)
    --- PASS: TestSchemeProofEquality/correct (0.90s)
=== RUN   TestSchemeCredentialsMarshal
--- PASS: TestSchemeCredentialsMarshal (0.20s)
=== RUN   TestSchemeCredentialsEquality
=== RUN   TestSchemeCredentialsEquality/correct
=== RUN   TestSchemeCredentialsEquality/wrong_public_key
=== RUN   TestSchemeCredentialsEquality/wrong_attribute
=== RUN   TestSchemeCredentialsEquality/wrong_signature
=== RUN   TestSchemeCredentialsEquality/wrong_number_of_signatures
--- PASS: TestSchemeCredentialsEquality (2.10s)
    --- PASS: TestSchemeCredentialsEquality/correct (0.41s)
    --- PASS: TestSchemeCredentialsEquality/wrong_public_key (0.41s)
    --- PASS: TestSchemeCredentialsEquality/wrong_attribute (0.44s)
    --- PASS: TestSchemeCredentialsEquality/wrong_signature (0.44s)
    --- PASS: TestSchemeCredentialsEquality/wrong_number_of_signatures (0.39s)
=== RUN   TestSchemeOptimizations
=== RUN   TestSchemeOptimizations/parallel=true_tate=true
=== RUN   TestSchemeOptimizations/parallel=true_tate=false
=== RUN   TestSchemeOptimizations/parallel=false_tate=true
=== RUN   TestSchemeOptimizations/parallel=false_tate=false
--- PASS: TestSchemeOptimizations (5.64s)
    --- PASS: TestSchemeOptimizations/parallel=true_tate=true (0.79s)
    --- PASS: TestSchemeOptimizations/parallel=true_tate=false (1.34s)
    --- PASS: TestSchemeOptimizations/parallel=false_tate=true (1.34s)
    --- PASS: TestSchemeOptimizations/parallel=false_tate=false (2.18s)
=== RUN   TestSchemeWorkersVary
=== RUN   TestSchemeWorkersVary/workers=0
=== RUN   TestSchemeWorkersVary/workers=1
=== RUN   TestSchemeWorkersVary/workers=2
=== RUN   TestSchemeWorkersVary/workers=3
=== RUN   TestSchemeWorkersVary/workers=4
=== RUN   TestSchemeWorkersVary/workers=5
=== RUN   TestSchemeWorkersVary/workers=6
=== RUN   TestSchemeWorkersVary/workers=7
=== RUN   TestSchemeWorkersVary/workers=8
=== RUN   TestSchemeWorkersVary/workers=9
=== RUN   TestSchemeWorkersVary/workers=10
=== RUN   TestSchemeWorkersVary/workers=11
=== RUN   TestSchemeWorkersVary/workers=12
=== RUN   TestSchemeWorkersVary/workers=13
=== RUN   TestSchemeWorkersVary/workers=14
--- PASS: TestSchemeWorkersVary (13.86s)
    --- PASS: TestSchemeWorkersVary/workers=0 (0.80s)
    --- PASS: TestSchemeWorkersVary/workers=1 (1.54s)
    --- PASS: TestSchemeWorkersVary/workers=2 (1.12s)
    --- PASS: TestSchemeWorkersVary/workers=3 (0.94s)
    --- PASS: TestSchemeWorkersVary/workers=4 (0.94s)
    --- PASS: TestSchemeWorkersVary/workers=5 (0.87s)
    --- PASS: TestSchemeWorkersVary/workers=6 (0.83s)
    --- PASS: TestSchemeWorkersVary/workers=7 (0.85s)
    --- PASS: TestSchemeWorkersVary/workers=8 (0.79s)
    --- PASS: TestSchemeWorkersVary/workers=9 (0.76s)
    --- PASS: TestSchemeWorkersVary/workers=10 (0.84s)
    --- PASS: TestSchemeWorkersVary/workers=11 (0.83s)
    --- PASS: TestSchemeWorkersVary/workers=12 (0.92s)
    --- PASS: TestSchemeWorkersVary/workers=13 (0.95s)
    --- PASS: TestSchemeWorkersVary/workers=14 (0.88s)
=== RUN   TestSchemeHInGTwo
=== RUN   TestSchemeHInGTwo/L=1
=== RUN   TestSchemeHInGTwo/L=2
=== RUN   TestSchemeHInGTwo/L=3
=== RUN   TestSchemeHInGTwo/L=5
=== RUN   TestSchemeHInGTwo/L=10
--- PASS: TestSchemeHInGTwo (9.30s)
    --- PASS: TestSchemeHInGTwo/L=1 (0.41s)
    --- PASS: TestSchemeHInGTwo/L=2 (0.78s)
    --- PASS: TestSchemeHInGTwo/L=3 (1.14s)
    --- PASS: TestSchemeHInGTwo/L=5 (1.92s)
    --- PASS: TestSchemeHInGTwo/L=10 (5.05s)
=== RUN   TestSchemeCredentialsUnMarshalingFail
--- PASS: TestSchemeCredentialsUnMarshalingFail (0.00s)
=== RUN   TestSchemeProofUnMarshalingFail
--- PASS: TestSchemeProofUnMarshalingFail (0.00s)
=== RUN   TestSchnorr
=== RUN   TestSchnorr/b=1
=== RUN   TestSchnorr/b=1/test_schnorr_deterministic_generate
=== RUN   TestSchnorr/b=1/test_schnorr_randomized_generate
=== RUN   TestSchnorr/b=1/test_schnorr_sign_no_crash
=== RUN   TestSchnorr/b=1/test_schnorr_verify_no_crash
=== RUN   TestSchnorr/b=1/test_schnorr_verify_correct
=== RUN   TestSchnorr/b=1/test_schnorr_verify_tampered_signature
=== RUN   TestSchnorr/b=1/test_schnorr_verify_wrong_message
=== RUN   TestSchnorr/b=1/test_schnorr_marshal
=== RUN   TestSchnorr/b=1/test_schnorr_un_marshal_fails
=== RUN   TestSchnorr/b=2
=== RUN   TestSchnorr/b=2/test_schnorr_deterministic_generate
=== RUN   TestSchnorr/b=2/test_schnorr_randomized_generate
=== RUN   TestSchnorr/b=2/test_schnorr_sign_no_crash
=== RUN   TestSchnorr/b=2/test_schnorr_verify_no_crash
=== RUN   TestSchnorr/b=2/test_schnorr_verify_correct
=== RUN   TestSchnorr/b=2/test_schnorr_verify_tampered_signature
=== RUN   TestSchnorr/b=2/test_schnorr_verify_wrong_message
=== RUN   TestSchnorr/b=2/test_schnorr_marshal
=== RUN   TestSchnorr/b=2/test_schnorr_un_marshal_fails
--- PASS: TestSchnorr (0.24s)
    --- PASS: TestSchnorr/b=1 (0.05s)
        --- PASS: TestSchnorr/b=1/test_schnorr_deterministic_generate (0.01s)
        --- PASS: TestSchnorr/b=1/test_schnorr_randomized_generate (0.00s)
        --- PASS: TestSchnorr/b=1/test_schnorr_sign_no_crash (0.01s)
        --- PASS: TestSchnorr/b=1/test_schnorr_verify_no_crash (0.01s)
        --- PASS: TestSchnorr/b=1/test_schnorr_verify_correct (0.01s)
        --- PASS: TestSchnorr/b=1/test_schnorr_verify_tampered_signature (0.01s)
        --- PASS: TestSchnorr/b=1/test_schnorr_verify_wrong_message (0.01s)
        --- PASS: TestSchnorr/b=1/test_schnorr_marshal (0.01s)
        --- PASS: TestSchnorr/b=1/test_schnorr_un_marshal_fails (0.00s)
    --- PASS: TestSchnorr/b=2 (0.19s)
        --- PASS: TestSchnorr/b=2/test_schnorr_deterministic_generate (0.01s)
        --- PASS: TestSchnorr/b=2/test_schnorr_randomized_generate (0.01s)
        --- PASS: TestSchnorr/b=2/test_schnorr_sign_no_crash (0.01s)
        --- PASS: TestSchnorr/b=2/test_schnorr_verify_no_crash (0.02s)
        --- PASS: TestSchnorr/b=2/test_schnorr_verify_correct (0.03s)
        --- PASS: TestSchnorr/b=2/test_schnorr_verify_tampered_signature (0.04s)
        --- PASS: TestSchnorr/b=2/test_schnorr_verify_wrong_message (0.02s)
        --- PASS: TestSchnorr/b=2/test_schnorr_marshal (0.03s)
        --- PASS: TestSchnorr/b=2/test_schnorr_un_marshal_fails (0.00s)
=== RUN   TestSiblings
=== RUN   TestSiblings/b=1
=== RUN   TestSiblings/b=1/test_siblings_schnorr
=== RUN   TestSiblings/b=1/test_siblings_groth
=== RUN   TestSiblings/b=2
=== RUN   TestSiblings/b=2/test_siblings_schnorr
=== RUN   TestSiblings/b=2/test_siblings_groth
--- PASS: TestSiblings (0.56s)
    --- PASS: TestSiblings/b=1 (0.24s)
        --- PASS: TestSiblings/b=1/test_siblings_schnorr (0.03s)
        --- PASS: TestSiblings/b=1/test_siblings_groth (0.21s)
    --- PASS: TestSiblings/b=2 (0.26s)
        --- PASS: TestSiblings/b=2/test_siblings_schnorr (0.01s)
        --- PASS: TestSiblings/b=2/test_siblings_groth (0.25s)
=== RUN   TestAMCLAssumptions
=== RUN   TestAMCLAssumptions/SEED=0
=== RUN   TestAMCLAssumptions/SEED=0/exponent_in_or_out_fexp
=== RUN   TestAMCLAssumptions/SEED=0/tate_times_tate_is_tate2
=== RUN   TestAMCLAssumptions/SEED=0/regular_pairings
=== RUN   TestAMCLAssumptions/SEED=0/tate_plus_fexp_pairings
=== RUN   TestAMCLAssumptions/SEED=0/tate2_plus_fexp_pairings
=== RUN   TestAMCLAssumptions/SEED=0/tate2_plus_tate_plus_fexp_pairings
=== RUN   TestAMCLAssumptions/SEED=0/3_tate_plus_fexp_pairings
=== RUN   TestAMCLAssumptions/SEED=0/fexp_homomorphism
=== RUN   TestAMCLAssumptions/SEED=0/power_operation_for_fp12_
=== RUN   TestAMCLAssumptions/SEED=0/exponentiation_distributivity
=== RUN   TestAMCLAssumptions/SEED=0/wrong_inverse
=== RUN   TestAMCLAssumptions/SEED=0/right_inverse
=== RUN   TestAMCLAssumptions/SEED=0/group_element_inverse_vs_neg
=== RUN   TestAMCLAssumptions/SEED=0/invert_by_raising_to_-1
=== RUN   TestAMCLAssumptions/SEED=0/invert_argument_vs_invert_result
=== RUN   TestAMCLAssumptions/SEED=1
=== RUN   TestAMCLAssumptions/SEED=1/exponent_in_or_out_fexp
=== RUN   TestAMCLAssumptions/SEED=1/tate_times_tate_is_tate2
=== RUN   TestAMCLAssumptions/SEED=1/regular_pairings
=== RUN   TestAMCLAssumptions/SEED=1/tate_plus_fexp_pairings
=== RUN   TestAMCLAssumptions/SEED=1/tate2_plus_fexp_pairings
=== RUN   TestAMCLAssumptions/SEED=1/tate2_plus_tate_plus_fexp_pairings
=== RUN   TestAMCLAssumptions/SEED=1/3_tate_plus_fexp_pairings
=== RUN   TestAMCLAssumptions/SEED=1/fexp_homomorphism
=== RUN   TestAMCLAssumptions/SEED=1/power_operation_for_fp12_
=== RUN   TestAMCLAssumptions/SEED=1/exponentiation_distributivity
=== RUN   TestAMCLAssumptions/SEED=1/wrong_inverse
=== RUN   TestAMCLAssumptions/SEED=1/right_inverse
=== RUN   TestAMCLAssumptions/SEED=1/group_element_inverse_vs_neg
=== RUN   TestAMCLAssumptions/SEED=1/invert_by_raising_to_-1
=== RUN   TestAMCLAssumptions/SEED=1/invert_argument_vs_invert_result
=== RUN   TestAMCLAssumptions/SEED=2
=== RUN   TestAMCLAssumptions/SEED=2/exponent_in_or_out_fexp
=== RUN   TestAMCLAssumptions/SEED=2/tate_times_tate_is_tate2
=== RUN   TestAMCLAssumptions/SEED=2/regular_pairings
=== RUN   TestAMCLAssumptions/SEED=2/tate_plus_fexp_pairings
=== RUN   TestAMCLAssumptions/SEED=2/tate2_plus_fexp_pairings
=== RUN   TestAMCLAssumptions/SEED=2/tate2_plus_tate_plus_fexp_pairings
=== RUN   TestAMCLAssumptions/SEED=2/3_tate_plus_fexp_pairings
=== RUN   TestAMCLAssumptions/SEED=2/fexp_homomorphism
=== RUN   TestAMCLAssumptions/SEED=2/power_operation_for_fp12_
=== RUN   TestAMCLAssumptions/SEED=2/exponentiation_distributivity
=== RUN   TestAMCLAssumptions/SEED=2/wrong_inverse
=== RUN   TestAMCLAssumptions/SEED=2/right_inverse
=== RUN   TestAMCLAssumptions/SEED=2/group_element_inverse_vs_neg
=== RUN   TestAMCLAssumptions/SEED=2/invert_by_raising_to_-1
=== RUN   TestAMCLAssumptions/SEED=2/invert_argument_vs_invert_result
=== RUN   TestAMCLAssumptions/SEED=3
=== RUN   TestAMCLAssumptions/SEED=3/exponent_in_or_out_fexp
=== RUN   TestAMCLAssumptions/SEED=3/tate_times_tate_is_tate2
=== RUN   TestAMCLAssumptions/SEED=3/regular_pairings
=== RUN   TestAMCLAssumptions/SEED=3/tate_plus_fexp_pairings
=== RUN   TestAMCLAssumptions/SEED=3/tate2_plus_fexp_pairings
=== RUN   TestAMCLAssumptions/SEED=3/tate2_plus_tate_plus_fexp_pairings
=== RUN   TestAMCLAssumptions/SEED=3/3_tate_plus_fexp_pairings
=== RUN   TestAMCLAssumptions/SEED=3/fexp_homomorphism
=== RUN   TestAMCLAssumptions/SEED=3/power_operation_for_fp12_
=== RUN   TestAMCLAssumptions/SEED=3/exponentiation_distributivity
=== RUN   TestAMCLAssumptions/SEED=3/wrong_inverse
=== RUN   TestAMCLAssumptions/SEED=3/right_inverse
=== RUN   TestAMCLAssumptions/SEED=3/group_element_inverse_vs_neg
=== RUN   TestAMCLAssumptions/SEED=3/invert_by_raising_to_-1
=== RUN   TestAMCLAssumptions/SEED=3/invert_argument_vs_invert_result
=== RUN   TestAMCLAssumptions/SEED=4
=== RUN   TestAMCLAssumptions/SEED=4/exponent_in_or_out_fexp
=== RUN   TestAMCLAssumptions/SEED=4/tate_times_tate_is_tate2
=== RUN   TestAMCLAssumptions/SEED=4/regular_pairings
=== RUN   TestAMCLAssumptions/SEED=4/tate_plus_fexp_pairings
=== RUN   TestAMCLAssumptions/SEED=4/tate2_plus_fexp_pairings
=== RUN   TestAMCLAssumptions/SEED=4/tate2_plus_tate_plus_fexp_pairings
=== RUN   TestAMCLAssumptions/SEED=4/3_tate_plus_fexp_pairings
=== RUN   TestAMCLAssumptions/SEED=4/fexp_homomorphism
=== RUN   TestAMCLAssumptions/SEED=4/power_operation_for_fp12_
=== RUN   TestAMCLAssumptions/SEED=4/exponentiation_distributivity
=== RUN   TestAMCLAssumptions/SEED=4/wrong_inverse
=== RUN   TestAMCLAssumptions/SEED=4/right_inverse
=== RUN   TestAMCLAssumptions/SEED=4/group_element_inverse_vs_neg
=== RUN   TestAMCLAssumptions/SEED=4/invert_by_raising_to_-1
=== RUN   TestAMCLAssumptions/SEED=4/invert_argument_vs_invert_result
=== RUN   TestAMCLAssumptions/SEED=5
=== RUN   TestAMCLAssumptions/SEED=5/exponent_in_or_out_fexp
=== RUN   TestAMCLAssumptions/SEED=5/tate_times_tate_is_tate2
=== RUN   TestAMCLAssumptions/SEED=5/regular_pairings
=== RUN   TestAMCLAssumptions/SEED=5/tate_plus_fexp_pairings
=== RUN   TestAMCLAssumptions/SEED=5/tate2_plus_fexp_pairings
=== RUN   TestAMCLAssumptions/SEED=5/tate2_plus_tate_plus_fexp_pairings
=== RUN   TestAMCLAssumptions/SEED=5/3_tate_plus_fexp_pairings
=== RUN   TestAMCLAssumptions/SEED=5/fexp_homomorphism
=== RUN   TestAMCLAssumptions/SEED=5/power_operation_for_fp12_
=== RUN   TestAMCLAssumptions/SEED=5/exponentiation_distributivity
=== RUN   TestAMCLAssumptions/SEED=5/wrong_inverse
=== RUN   TestAMCLAssumptions/SEED=5/right_inverse
=== RUN   TestAMCLAssumptions/SEED=5/group_element_inverse_vs_neg
=== RUN   TestAMCLAssumptions/SEED=5/invert_by_raising_to_-1
=== RUN   TestAMCLAssumptions/SEED=5/invert_argument_vs_invert_result
=== RUN   TestAMCLAssumptions/SEED=6
=== RUN   TestAMCLAssumptions/SEED=6/exponent_in_or_out_fexp
=== RUN   TestAMCLAssumptions/SEED=6/tate_times_tate_is_tate2
=== RUN   TestAMCLAssumptions/SEED=6/regular_pairings
=== RUN   TestAMCLAssumptions/SEED=6/tate_plus_fexp_pairings
=== RUN   TestAMCLAssumptions/SEED=6/tate2_plus_fexp_pairings
=== RUN   TestAMCLAssumptions/SEED=6/tate2_plus_tate_plus_fexp_pairings
=== RUN   TestAMCLAssumptions/SEED=6/3_tate_plus_fexp_pairings
=== RUN   TestAMCLAssumptions/SEED=6/fexp_homomorphism
=== RUN   TestAMCLAssumptions/SEED=6/power_operation_for_fp12_
=== RUN   TestAMCLAssumptions/SEED=6/exponentiation_distributivity
=== RUN   TestAMCLAssumptions/SEED=6/wrong_inverse
=== RUN   TestAMCLAssumptions/SEED=6/right_inverse
=== RUN   TestAMCLAssumptions/SEED=6/group_element_inverse_vs_neg
=== RUN   TestAMCLAssumptions/SEED=6/invert_by_raising_to_-1
=== RUN   TestAMCLAssumptions/SEED=6/invert_argument_vs_invert_result
=== RUN   TestAMCLAssumptions/SEED=7
=== RUN   TestAMCLAssumptions/SEED=7/exponent_in_or_out_fexp
=== RUN   TestAMCLAssumptions/SEED=7/tate_times_tate_is_tate2
=== RUN   TestAMCLAssumptions/SEED=7/regular_pairings
=== RUN   TestAMCLAssumptions/SEED=7/tate_plus_fexp_pairings
=== RUN   TestAMCLAssumptions/SEED=7/tate2_plus_fexp_pairings
=== RUN   TestAMCLAssumptions/SEED=7/tate2_plus_tate_plus_fexp_pairings
=== RUN   TestAMCLAssumptions/SEED=7/3_tate_plus_fexp_pairings
=== RUN   TestAMCLAssumptions/SEED=7/fexp_homomorphism
=== RUN   TestAMCLAssumptions/SEED=7/power_operation_for_fp12_
=== RUN   TestAMCLAssumptions/SEED=7/exponentiation_distributivity
=== RUN   TestAMCLAssumptions/SEED=7/wrong_inverse
=== RUN   TestAMCLAssumptions/SEED=7/right_inverse
=== RUN   TestAMCLAssumptions/SEED=7/group_element_inverse_vs_neg
=== RUN   TestAMCLAssumptions/SEED=7/invert_by_raising_to_-1
=== RUN   TestAMCLAssumptions/SEED=7/invert_argument_vs_invert_result
=== RUN   TestAMCLAssumptions/SEED=8
=== RUN   TestAMCLAssumptions/SEED=8/exponent_in_or_out_fexp
=== RUN   TestAMCLAssumptions/SEED=8/tate_times_tate_is_tate2
=== RUN   TestAMCLAssumptions/SEED=8/regular_pairings
=== RUN   TestAMCLAssumptions/SEED=8/tate_plus_fexp_pairings
=== RUN   TestAMCLAssumptions/SEED=8/tate2_plus_fexp_pairings
=== RUN   TestAMCLAssumptions/SEED=8/tate2_plus_tate_plus_fexp_pairings
=== RUN   TestAMCLAssumptions/SEED=8/3_tate_plus_fexp_pairings
=== RUN   TestAMCLAssumptions/SEED=8/fexp_homomorphism
=== RUN   TestAMCLAssumptions/SEED=8/power_operation_for_fp12_
=== RUN   TestAMCLAssumptions/SEED=8/exponentiation_distributivity
=== RUN   TestAMCLAssumptions/SEED=8/wrong_inverse
=== RUN   TestAMCLAssumptions/SEED=8/right_inverse
=== RUN   TestAMCLAssumptions/SEED=8/group_element_inverse_vs_neg
=== RUN   TestAMCLAssumptions/SEED=8/invert_by_raising_to_-1
=== RUN   TestAMCLAssumptions/SEED=8/invert_argument_vs_invert_result
=== RUN   TestAMCLAssumptions/SEED=9
=== RUN   TestAMCLAssumptions/SEED=9/exponent_in_or_out_fexp
=== RUN   TestAMCLAssumptions/SEED=9/tate_times_tate_is_tate2
=== RUN   TestAMCLAssumptions/SEED=9/regular_pairings
=== RUN   TestAMCLAssumptions/SEED=9/tate_plus_fexp_pairings
=== RUN   TestAMCLAssumptions/SEED=9/tate2_plus_fexp_pairings
=== RUN   TestAMCLAssumptions/SEED=9/tate2_plus_tate_plus_fexp_pairings
=== RUN   TestAMCLAssumptions/SEED=9/3_tate_plus_fexp_pairings
=== RUN   TestAMCLAssumptions/SEED=9/fexp_homomorphism
=== RUN   TestAMCLAssumptions/SEED=9/power_operation_for_fp12_
=== RUN   TestAMCLAssumptions/SEED=9/exponentiation_distributivity
=== RUN   TestAMCLAssumptions/SEED=9/wrong_inverse
=== RUN   TestAMCLAssumptions/SEED=9/right_inverse
=== RUN   TestAMCLAssumptions/SEED=9/group_element_inverse_vs_neg
=== RUN   TestAMCLAssumptions/SEED=9/invert_by_raising_to_-1
=== RUN   TestAMCLAssumptions/SEED=9/invert_argument_vs_invert_result
--- PASS: TestAMCLAssumptions (11.83s)
    --- PASS: TestAMCLAssumptions/SEED=0 (1.19s)
        --- PASS: TestAMCLAssumptions/SEED=0/exponent_in_or_out_fexp (0.08s)
        --- PASS: TestAMCLAssumptions/SEED=0/tate_times_tate_is_tate2 (0.06s)
        --- PASS: TestAMCLAssumptions/SEED=0/regular_pairings (0.15s)
        --- PASS: TestAMCLAssumptions/SEED=0/tate_plus_fexp_pairings (0.13s)
        --- PASS: TestAMCLAssumptions/SEED=0/tate2_plus_fexp_pairings (0.12s)
        --- PASS: TestAMCLAssumptions/SEED=0/tate2_plus_tate_plus_fexp_pairings (0.16s)
        --- PASS: TestAMCLAssumptions/SEED=0/3_tate_plus_fexp_pairings (0.18s)
        --- PASS: TestAMCLAssumptions/SEED=0/fexp_homomorphism (0.05s)
        --- PASS: TestAMCLAssumptions/SEED=0/power_operation_for_fp12_ (0.03s)
        --- PASS: TestAMCLAssumptions/SEED=0/exponentiation_distributivity (0.01s)
        --- PASS: TestAMCLAssumptions/SEED=0/wrong_inverse (0.05s)
        --- PASS: TestAMCLAssumptions/SEED=0/right_inverse (0.05s)
        --- PASS: TestAMCLAssumptions/SEED=0/group_element_inverse_vs_neg (0.00s)
        --- PASS: TestAMCLAssumptions/SEED=0/invert_by_raising_to_-1 (0.04s)
        --- PASS: TestAMCLAssumptions/SEED=0/invert_argument_vs_invert_result (0.05s)
    --- PASS: TestAMCLAssumptions/SEED=1 (1.35s)
        --- PASS: TestAMCLAssumptions/SEED=1/exponent_in_or_out_fexp (0.08s)
        --- PASS: TestAMCLAssumptions/SEED=1/tate_times_tate_is_tate2 (0.06s)
        --- PASS: TestAMCLAssumptions/SEED=1/regular_pairings (0.15s)
        --- PASS: TestAMCLAssumptions/SEED=1/tate_plus_fexp_pairings (0.13s)
        --- PASS: TestAMCLAssumptions/SEED=1/tate2_plus_fexp_pairings (0.13s)
        --- PASS: TestAMCLAssumptions/SEED=1/tate2_plus_tate_plus_fexp_pairings (0.17s)
        --- PASS: TestAMCLAssumptions/SEED=1/3_tate_plus_fexp_pairings (0.25s)
        --- PASS: TestAMCLAssumptions/SEED=1/fexp_homomorphism (0.07s)
        --- PASS: TestAMCLAssumptions/SEED=1/power_operation_for_fp12_ (0.04s)
        --- PASS: TestAMCLAssumptions/SEED=1/exponentiation_distributivity (0.01s)
        --- PASS: TestAMCLAssumptions/SEED=1/wrong_inverse (0.08s)
        --- PASS: TestAMCLAssumptions/SEED=1/right_inverse (0.07s)
        --- PASS: TestAMCLAssumptions/SEED=1/group_element_inverse_vs_neg (0.00s)
        --- PASS: TestAMCLAssumptions/SEED=1/invert_by_raising_to_-1 (0.03s)
        --- PASS: TestAMCLAssumptions/SEED=1/invert_argument_vs_invert_result (0.06s)
    --- PASS: TestAMCLAssumptions/SEED=2 (1.16s)
        --- PASS: TestAMCLAssumptions/SEED=2/exponent_in_or_out_fexp (0.08s)
        --- PASS: TestAMCLAssumptions/SEED=2/tate_times_tate_is_tate2 (0.07s)
        --- PASS: TestAMCLAssumptions/SEED=2/regular_pairings (0.15s)
        --- PASS: TestAMCLAssumptions/SEED=2/tate_plus_fexp_pairings (0.13s)
        --- PASS: TestAMCLAssumptions/SEED=2/tate2_plus_fexp_pairings (0.12s)
        --- PASS: TestAMCLAssumptions/SEED=2/tate2_plus_tate_plus_fexp_pairings (0.16s)
        --- PASS: TestAMCLAssumptions/SEED=2/3_tate_plus_fexp_pairings (0.16s)
        --- PASS: TestAMCLAssumptions/SEED=2/fexp_homomorphism (0.05s)
        --- PASS: TestAMCLAssumptions/SEED=2/power_operation_for_fp12_ (0.03s)
        --- PASS: TestAMCLAssumptions/SEED=2/exponentiation_distributivity (0.01s)
        --- PASS: TestAMCLAssumptions/SEED=2/wrong_inverse (0.05s)
        --- PASS: TestAMCLAssumptions/SEED=2/right_inverse (0.05s)
        --- PASS: TestAMCLAssumptions/SEED=2/group_element_inverse_vs_neg (0.00s)
        --- PASS: TestAMCLAssumptions/SEED=2/invert_by_raising_to_-1 (0.03s)
        --- PASS: TestAMCLAssumptions/SEED=2/invert_argument_vs_invert_result (0.05s)
    --- PASS: TestAMCLAssumptions/SEED=3 (1.11s)
        --- PASS: TestAMCLAssumptions/SEED=3/exponent_in_or_out_fexp (0.07s)
        --- PASS: TestAMCLAssumptions/SEED=3/tate_times_tate_is_tate2 (0.06s)
        --- PASS: TestAMCLAssumptions/SEED=3/regular_pairings (0.14s)
        --- PASS: TestAMCLAssumptions/SEED=3/tate_plus_fexp_pairings (0.12s)
        --- PASS: TestAMCLAssumptions/SEED=3/tate2_plus_fexp_pairings (0.11s)
        --- PASS: TestAMCLAssumptions/SEED=3/tate2_plus_tate_plus_fexp_pairings (0.15s)
        --- PASS: TestAMCLAssumptions/SEED=3/3_tate_plus_fexp_pairings (0.17s)
        --- PASS: TestAMCLAssumptions/SEED=3/fexp_homomorphism (0.06s)
        --- PASS: TestAMCLAssumptions/SEED=3/power_operation_for_fp12_ (0.03s)
        --- PASS: TestAMCLAssumptions/SEED=3/exponentiation_distributivity (0.01s)
        --- PASS: TestAMCLAssumptions/SEED=3/wrong_inverse (0.05s)
        --- PASS: TestAMCLAssumptions/SEED=3/right_inverse (0.05s)
        --- PASS: TestAMCLAssumptions/SEED=3/group_element_inverse_vs_neg (0.00s)
        --- PASS: TestAMCLAssumptions/SEED=3/invert_by_raising_to_-1 (0.03s)
        --- PASS: TestAMCLAssumptions/SEED=3/invert_argument_vs_invert_result (0.04s)
    --- PASS: TestAMCLAssumptions/SEED=4 (1.15s)
        --- PASS: TestAMCLAssumptions/SEED=4/exponent_in_or_out_fexp (0.07s)
        --- PASS: TestAMCLAssumptions/SEED=4/tate_times_tate_is_tate2 (0.05s)
        --- PASS: TestAMCLAssumptions/SEED=4/regular_pairings (0.13s)
        --- PASS: TestAMCLAssumptions/SEED=4/tate_plus_fexp_pairings (0.12s)
        --- PASS: TestAMCLAssumptions/SEED=4/tate2_plus_fexp_pairings (0.11s)
        --- PASS: TestAMCLAssumptions/SEED=4/tate2_plus_tate_plus_fexp_pairings (0.16s)
        --- PASS: TestAMCLAssumptions/SEED=4/3_tate_plus_fexp_pairings (0.18s)
        --- PASS: TestAMCLAssumptions/SEED=4/fexp_homomorphism (0.05s)
        --- PASS: TestAMCLAssumptions/SEED=4/power_operation_for_fp12_ (0.04s)
        --- PASS: TestAMCLAssumptions/SEED=4/exponentiation_distributivity (0.01s)
        --- PASS: TestAMCLAssumptions/SEED=4/wrong_inverse (0.06s)
        --- PASS: TestAMCLAssumptions/SEED=4/right_inverse (0.05s)
        --- PASS: TestAMCLAssumptions/SEED=4/group_element_inverse_vs_neg (0.00s)
        --- PASS: TestAMCLAssumptions/SEED=4/invert_by_raising_to_-1 (0.03s)
        --- PASS: TestAMCLAssumptions/SEED=4/invert_argument_vs_invert_result (0.05s)
    --- PASS: TestAMCLAssumptions/SEED=5 (1.18s)
        --- PASS: TestAMCLAssumptions/SEED=5/exponent_in_or_out_fexp (0.07s)
        --- PASS: TestAMCLAssumptions/SEED=5/tate_times_tate_is_tate2 (0.05s)
        --- PASS: TestAMCLAssumptions/SEED=5/regular_pairings (0.17s)
        --- PASS: TestAMCLAssumptions/SEED=5/tate_plus_fexp_pairings (0.12s)
        --- PASS: TestAMCLAssumptions/SEED=5/tate2_plus_fexp_pairings (0.11s)
        --- PASS: TestAMCLAssumptions/SEED=5/tate2_plus_tate_plus_fexp_pairings (0.18s)
        --- PASS: TestAMCLAssumptions/SEED=5/3_tate_plus_fexp_pairings (0.17s)
        --- PASS: TestAMCLAssumptions/SEED=5/fexp_homomorphism (0.05s)
        --- PASS: TestAMCLAssumptions/SEED=5/power_operation_for_fp12_ (0.03s)
        --- PASS: TestAMCLAssumptions/SEED=5/exponentiation_distributivity (0.01s)
        --- PASS: TestAMCLAssumptions/SEED=5/wrong_inverse (0.06s)
        --- PASS: TestAMCLAssumptions/SEED=5/right_inverse (0.05s)
        --- PASS: TestAMCLAssumptions/SEED=5/group_element_inverse_vs_neg (0.00s)
        --- PASS: TestAMCLAssumptions/SEED=5/invert_by_raising_to_-1 (0.03s)
        --- PASS: TestAMCLAssumptions/SEED=5/invert_argument_vs_invert_result (0.05s)
    --- PASS: TestAMCLAssumptions/SEED=6 (1.13s)
        --- PASS: TestAMCLAssumptions/SEED=6/exponent_in_or_out_fexp (0.07s)
        --- PASS: TestAMCLAssumptions/SEED=6/tate_times_tate_is_tate2 (0.06s)
        --- PASS: TestAMCLAssumptions/SEED=6/regular_pairings (0.14s)
        --- PASS: TestAMCLAssumptions/SEED=6/tate_plus_fexp_pairings (0.12s)
        --- PASS: TestAMCLAssumptions/SEED=6/tate2_plus_fexp_pairings (0.13s)
        --- PASS: TestAMCLAssumptions/SEED=6/tate2_plus_tate_plus_fexp_pairings (0.16s)
        --- PASS: TestAMCLAssumptions/SEED=6/3_tate_plus_fexp_pairings (0.16s)
        --- PASS: TestAMCLAssumptions/SEED=6/fexp_homomorphism (0.06s)
        --- PASS: TestAMCLAssumptions/SEED=6/power_operation_for_fp12_ (0.03s)
        --- PASS: TestAMCLAssumptions/SEED=6/exponentiation_distributivity (0.01s)
        --- PASS: TestAMCLAssumptions/SEED=6/wrong_inverse (0.05s)
        --- PASS: TestAMCLAssumptions/SEED=6/right_inverse (0.05s)
        --- PASS: TestAMCLAssumptions/SEED=6/group_element_inverse_vs_neg (0.00s)
        --- PASS: TestAMCLAssumptions/SEED=6/invert_by_raising_to_-1 (0.03s)
        --- PASS: TestAMCLAssumptions/SEED=6/invert_argument_vs_invert_result (0.05s)
    --- PASS: TestAMCLAssumptions/SEED=7 (1.28s)
        --- PASS: TestAMCLAssumptions/SEED=7/exponent_in_or_out_fexp (0.07s)
        --- PASS: TestAMCLAssumptions/SEED=7/tate_times_tate_is_tate2 (0.08s)
        --- PASS: TestAMCLAssumptions/SEED=7/regular_pairings (0.15s)
        --- PASS: TestAMCLAssumptions/SEED=7/tate_plus_fexp_pairings (0.15s)
        --- PASS: TestAMCLAssumptions/SEED=7/tate2_plus_fexp_pairings (0.13s)
        --- PASS: TestAMCLAssumptions/SEED=7/tate2_plus_tate_plus_fexp_pairings (0.16s)
        --- PASS: TestAMCLAssumptions/SEED=7/3_tate_plus_fexp_pairings (0.18s)
        --- PASS: TestAMCLAssumptions/SEED=7/fexp_homomorphism (0.06s)
        --- PASS: TestAMCLAssumptions/SEED=7/power_operation_for_fp12_ (0.04s)
        --- PASS: TestAMCLAssumptions/SEED=7/exponentiation_distributivity (0.01s)
        --- PASS: TestAMCLAssumptions/SEED=7/wrong_inverse (0.08s)
        --- PASS: TestAMCLAssumptions/SEED=7/right_inverse (0.06s)
        --- PASS: TestAMCLAssumptions/SEED=7/group_element_inverse_vs_neg (0.00s)
        --- PASS: TestAMCLAssumptions/SEED=7/invert_by_raising_to_-1 (0.04s)
        --- PASS: TestAMCLAssumptions/SEED=7/invert_argument_vs_invert_result (0.05s)
    --- PASS: TestAMCLAssumptions/SEED=8 (1.09s)
        --- PASS: TestAMCLAssumptions/SEED=8/exponent_in_or_out_fexp (0.07s)
        --- PASS: TestAMCLAssumptions/SEED=8/tate_times_tate_is_tate2 (0.06s)
        --- PASS: TestAMCLAssumptions/SEED=8/regular_pairings (0.15s)
        --- PASS: TestAMCLAssumptions/SEED=8/tate_plus_fexp_pairings (0.12s)
        --- PASS: TestAMCLAssumptions/SEED=8/tate2_plus_fexp_pairings (0.12s)
        --- PASS: TestAMCLAssumptions/SEED=8/tate2_plus_tate_plus_fexp_pairings (0.15s)
        --- PASS: TestAMCLAssumptions/SEED=8/3_tate_plus_fexp_pairings (0.15s)
        --- PASS: TestAMCLAssumptions/SEED=8/fexp_homomorphism (0.05s)
        --- PASS: TestAMCLAssumptions/SEED=8/power_operation_for_fp12_ (0.03s)
        --- PASS: TestAMCLAssumptions/SEED=8/exponentiation_distributivity (0.01s)
        --- PASS: TestAMCLAssumptions/SEED=8/wrong_inverse (0.04s)
        --- PASS: TestAMCLAssumptions/SEED=8/right_inverse (0.05s)
        --- PASS: TestAMCLAssumptions/SEED=8/group_element_inverse_vs_neg (0.00s)
        --- PASS: TestAMCLAssumptions/SEED=8/invert_by_raising_to_-1 (0.03s)
        --- PASS: TestAMCLAssumptions/SEED=8/invert_argument_vs_invert_result (0.04s)
    --- PASS: TestAMCLAssumptions/SEED=9 (1.18s)
        --- PASS: TestAMCLAssumptions/SEED=9/exponent_in_or_out_fexp (0.08s)
        --- PASS: TestAMCLAssumptions/SEED=9/tate_times_tate_is_tate2 (0.06s)
        --- PASS: TestAMCLAssumptions/SEED=9/regular_pairings (0.16s)
        --- PASS: TestAMCLAssumptions/SEED=9/tate_plus_fexp_pairings (0.13s)
        --- PASS: TestAMCLAssumptions/SEED=9/tate2_plus_fexp_pairings (0.12s)
        --- PASS: TestAMCLAssumptions/SEED=9/tate2_plus_tate_plus_fexp_pairings (0.17s)
        --- PASS: TestAMCLAssumptions/SEED=9/3_tate_plus_fexp_pairings (0.17s)
        --- PASS: TestAMCLAssumptions/SEED=9/fexp_homomorphism (0.05s)
        --- PASS: TestAMCLAssumptions/SEED=9/power_operation_for_fp12_ (0.04s)
        --- PASS: TestAMCLAssumptions/SEED=9/exponentiation_distributivity (0.00s)
        --- PASS: TestAMCLAssumptions/SEED=9/wrong_inverse (0.04s)
        --- PASS: TestAMCLAssumptions/SEED=9/right_inverse (0.05s)
        --- PASS: TestAMCLAssumptions/SEED=9/group_element_inverse_vs_neg (0.00s)
        --- PASS: TestAMCLAssumptions/SEED=9/invert_by_raising_to_-1 (0.04s)
        --- PASS: TestAMCLAssumptions/SEED=9/invert_argument_vs_invert_result (0.04s)
=== RUN   TestElementaryProofs
=== RUN   TestElementaryProofs/first_commitment_for_i=1
=== RUN   TestElementaryProofs/second_commitment_for_i=1
--- PASS: TestElementaryProofs (0.42s)
    --- PASS: TestElementaryProofs/first_commitment_for_i=1 (0.17s)
    --- PASS: TestElementaryProofs/second_commitment_for_i=1 (0.24s)
=== RUN   TestMiscellaneous
=== RUN   TestMiscellaneous/point_list_equal
=== RUN   TestMiscellaneous/bigMinusMod
=== RUN   TestMiscellaneous/PointFromBytes
=== RUN   TestMiscellaneous/subtraction_and_addition
=== RUN   TestMiscellaneous/subtraction_and_addition/first=true
=== RUN   TestMiscellaneous/subtraction_and_addition/first=false
--- PASS: TestMiscellaneous (0.00s)
    --- PASS: TestMiscellaneous/point_list_equal (0.00s)
    --- PASS: TestMiscellaneous/bigMinusMod (0.00s)
    --- PASS: TestMiscellaneous/PointFromBytes (0.00s)
    --- PASS: TestMiscellaneous/subtraction_and_addition (0.00s)
        --- PASS: TestMiscellaneous/subtraction_and_addition/first=true (0.00s)
        --- PASS: TestMiscellaneous/subtraction_and_addition/first=false (0.00s)
=== RUN   TestPrintObjectsDeclarations
--- PASS: TestPrintObjectsDeclarations (0.60s)
PASS
ok  	github.com/dbogatov/dac-lib/dac	151.707s