From dc0a42bc61ec533aa1d3257c7d8b094cfcfbb4f4 Mon Sep 17 00:00:00 2001 From: Mike Lodder Date: Thu, 2 Dec 2021 07:23:45 -0800 Subject: [PATCH] Initial commit --- .gitignore | 19 + .spdx.yml | 37 + CHANGELOG.md | 49 + CONTRIBUTING.md | 95 + LICENSE | 201 + Makefile | 105 + NOTICE | 5 + README.md | 43 + SECURITY.md | 9 + api/README.md | 0 cmd/benchcomp/README.md | 31 + cmd/benchcomp/main.go | 134 + cmd/benchcomp/main_test.go | 44 + cmd/spdx/.gitignore | 3 + cmd/spdx/Cargo.toml | 13 + cmd/spdx/rust-toolchain | 1 + cmd/spdx/src/commands.rs | 21 + cmd/spdx/src/config.rs | 47 + cmd/spdx/src/main.rs | 175 + docs/Coinbase_Pseudocode.pdf | Bin 0 -> 333536 bytes docs/Coinbase_Pseudocode_v5.pdf | Bin 0 -> 384564 bytes docs/FROST_pseudocode_for_Coinbase_v2.pdf | Bin 0 -> 142235 bytes docs/GennaroDkg.pdf | Bin 0 -> 190577 bytes docs/README.md | 0 docs/pull_request_template.md | 4 + docs/rsa-membership.pdf | Bin 0 -> 142474 bytes examples/README.md | 0 go.mod | 23 + go.sum | 131 + internal/README.md | 161 + internal/err.go | 22 + internal/hash.go | 93 + internal/hash_test.go | 62 + internal/point.go | 44 + internal/testutils.go | 93 + pkg/accumulator/README.md | 454 ++ pkg/accumulator/accumulator.go | 165 + pkg/accumulator/accumulator_test.go | 176 + pkg/accumulator/key.go | 239 + pkg/accumulator/key_test.go | 86 + pkg/accumulator/lib.go | 203 + pkg/accumulator/lib_test.go | 403 ++ pkg/accumulator/proof.go | 499 ++ pkg/accumulator/proof_test.go | 178 + pkg/accumulator/witness.go | 363 ++ pkg/accumulator/witness_test.go | 227 + pkg/core/README.md | 274 + pkg/core/commit.go | 115 + pkg/core/commit_test.go | 374 ++ pkg/core/curves/README.md | 5329 +++++++++++++++++ pkg/core/curves/bls12377_curve.go | 1216 ++++ pkg/core/curves/bls12377_curve_test.go | 516 ++ pkg/core/curves/bls12381_curve.go | 1227 ++++ pkg/core/curves/bls12381_curve_test.go | 510 ++ pkg/core/curves/curve.go | 892 +++ pkg/core/curves/ec_point.go | 255 + pkg/core/curves/ec_point_test.go | 371 ++ pkg/core/curves/ec_scalar.go | 357 ++ pkg/core/curves/ecdsa.go | 38 + pkg/core/curves/ed25519_curve.go | 784 +++ pkg/core/curves/ed25519_curve_test.go | 401 ++ pkg/core/curves/field.go | 280 + pkg/core/curves/field_test.go | 295 + pkg/core/curves/k256_curve.go | 636 ++ pkg/core/curves/k256_curve_test.go | 398 ++ pkg/core/curves/native/bls12-381/LICENSE | 202 + pkg/core/curves/native/bls12-381/README.md | 828 +++ .../native/bls12-381/arithmetic_decl.go | 72 + .../native/bls12-381/arithmetic_fallback.go | 565 ++ .../bls12-381/arithmetic_fallback_test.go | 230 + .../curves/native/bls12-381/arithmetic_x86.s | 2151 +++++++ pkg/core/curves/native/bls12-381/bls12_381.go | 255 + .../curves/native/bls12-381/bls12_381_test.go | 77 + .../curves/native/bls12-381/field_element.go | 394 ++ .../native/bls12-381/field_element_test.go | 258 + pkg/core/curves/native/bls12-381/fp.go | 131 + pkg/core/curves/native/bls12-381/fp12.go | 270 + pkg/core/curves/native/bls12-381/fp2.go | 251 + pkg/core/curves/native/bls12-381/fp6.go | 348 ++ pkg/core/curves/native/bls12-381/fp_test.go | 1411 +++++ pkg/core/curves/native/bls12-381/g1.go | 634 ++ pkg/core/curves/native/bls12-381/g1_test.go | 537 ++ pkg/core/curves/native/bls12-381/g2.go | 684 +++ pkg/core/curves/native/bls12-381/g2_test.go | 669 +++ pkg/core/curves/native/bls12-381/gt.go | 112 + .../curves/native/bls12-381/hash_to_field.go | 82 + pkg/core/curves/native/bls12-381/isogeny.go | 217 + pkg/core/curves/native/bls12-381/pairing.go | 303 + .../curves/native/bls12-381/pairing_test.go | 280 + pkg/core/curves/native/bls12-381/swu.go | 148 + .../curves/native/bls12-381/tests/README.md | 1 + .../g1_compressed_valid_test_vectors.dat | Bin 0 -> 48000 bytes .../g1_uncompressed_valid_test_vectors.dat | Bin 0 -> 96000 bytes .../g2_compressed_valid_test_vectors.dat | Bin 0 -> 96000 bytes .../g2_uncompressed_valid_test_vectors.dat | Bin 0 -> 192000 bytes pkg/core/curves/native/bls12-381/utils.go | 22 + pkg/core/curves/native/bls12-381/wnaf.go | 41 + pkg/core/curves/native/pasta/README.md | 15 + pkg/core/curves/native/pasta/fp/README.md | 301 + pkg/core/curves/native/pasta/fp/fp.go | 367 ++ pkg/core/curves/native/pasta/fp/fp_test.go | 248 + pkg/core/curves/native/pasta/fp/pasta_fp.go | 1432 +++++ pkg/core/curves/native/pasta/fq/README.md | 306 + pkg/core/curves/native/pasta/fq/fq.go | 361 ++ pkg/core/curves/native/pasta/fq/fq_test.go | 248 + pkg/core/curves/native/pasta/fq/pasta_fq.go | 1432 +++++ pkg/core/curves/native/pasta/pallas.go | 7 + pkg/core/curves/p256_curve.go | 604 ++ pkg/core/curves/p256_curve_test.go | 364 ++ pkg/core/curves/pallas_curve.go | 1163 ++++ pkg/core/curves/pallas_curve_test.go | 136 + pkg/core/hash.go | 272 + pkg/core/hash_test.go | 132 + pkg/core/mod.go | 175 + pkg/core/mod_test.go | 564 ++ pkg/core/primes.go | 42 + pkg/dkg/README.md | 230 + pkg/dkg/benchmarks.txt | 111 + pkg/dkg/frost/README.md | 88 + pkg/dkg/frost/dkg_round1.go | 118 + pkg/dkg/frost/dkg_round2.go | 157 + pkg/dkg/frost/dkg_rounds_test.go | 167 + pkg/dkg/frost/participant.go | 64 + pkg/dkg/gennaro/README.md | 117 + pkg/dkg/gennaro/participant.go | 96 + pkg/dkg/gennaro/participant_test.go | 47 + pkg/dkg/gennaro/round1.go | 80 + pkg/dkg/gennaro/round2.go | 91 + pkg/dkg/gennaro/round3.go | 89 + pkg/dkg/gennaro/round4.go | 76 + pkg/dkg/gennaro/rounds_test.go | 381 ++ pkg/dkg/gennaro2p/README.md | 96 + pkg/dkg/gennaro2p/genarro2p.go | 148 + pkg/dkg/gennaro2p/genarro2p_test.go | 181 + pkg/paillier/README.md | 403 ++ pkg/paillier/paillier.go | 374 ++ pkg/paillier/paillier_test.go | 1067 ++++ pkg/paillier/psf.go | 222 + pkg/paillier/psf_test.go | 285 + pkg/sharing/README.md | 248 + pkg/sharing/ed25519_feldman_test.go | 131 + pkg/sharing/feldman.go | 107 + pkg/sharing/pedersen.go | 147 + pkg/sharing/polynomial.go | 34 + pkg/sharing/polynomial_test.go | 31 + pkg/sharing/shamir.go | 200 + pkg/sharing/shamir_test.go | 182 + pkg/sharing/v1/README.md | 477 ++ pkg/sharing/v1/bls12381g1_feldman_test.go | 140 + pkg/sharing/v1/bls12381g1curve.go | 143 + pkg/sharing/v1/bls12381g2_feldman_test.go | 131 + pkg/sharing/v1/bls12381g2curve.go | 143 + pkg/sharing/v1/common.go | 14 + pkg/sharing/v1/ed25519_feldman_test.go | 131 + pkg/sharing/v1/ed25519_pedersen_test.go | 153 + pkg/sharing/v1/ed25519curve.go | 140 + pkg/sharing/v1/ed25519curve_test.go | 26 + pkg/sharing/v1/feldman.go | 106 + pkg/sharing/v1/k256_feldman_test.go | 132 + pkg/sharing/v1/k256_pedersen_test.go | 155 + pkg/sharing/v1/p256_feldman_test.go | 132 + pkg/sharing/v1/pedersen.go | 175 + pkg/sharing/v1/polynomial.go | 49 + pkg/sharing/v1/polynomial_test.go | 29 + pkg/sharing/v1/shamir.go | 211 + pkg/sharing/v1/shamir_test.go | 205 + pkg/signatures/bbs/README.md | 386 ++ pkg/signatures/bbs/blind_signature.go | 73 + pkg/signatures/bbs/blind_signature_context.go | 253 + .../bbs/blind_signature_context_test.go | 94 + pkg/signatures/bbs/doc.go | 7 + pkg/signatures/bbs/message_generators.go | 67 + pkg/signatures/bbs/pok_signature.go | 157 + pkg/signatures/bbs/pok_signature_proof.go | 200 + .../bbs/pok_signature_proof_test.go | 163 + pkg/signatures/bbs/public_key.go | 67 + pkg/signatures/bbs/secret_key.go | 170 + pkg/signatures/bbs/signature.go | 60 + pkg/signatures/bbs/signature_test.go | 76 + pkg/signatures/bls/CHANGELOG | 8 + pkg/signatures/bls/README.md | 112 + pkg/signatures/bls/bls_sig/lib.go | 187 + pkg/signatures/bls/bls_sig/lib_test.go | 239 + pkg/signatures/bls/bls_sig/tiny_bls.go | 432 ++ pkg/signatures/bls/bls_sig/tiny_bls_sig.go | 484 ++ .../bls/bls_sig/tiny_bls_sig_aug_test.go | 378 ++ .../bls/bls_sig/tiny_bls_sig_basic_test.go | 373 ++ .../bls/bls_sig/tiny_bls_sig_pop_test.go | 841 +++ pkg/signatures/bls/bls_sig/usual_bls.go | 440 ++ pkg/signatures/bls/bls_sig/usual_bls_sig.go | 483 ++ .../bls/bls_sig/usual_bls_sig_aug_test.go | 406 ++ .../bls/bls_sig/usual_bls_sig_basic_test.go | 406 ++ .../bls/bls_sig/usual_bls_sig_pop_test.go | 862 +++ .../bls/docs/audit-kudeski-coinbase-bls.pdf | Bin 0 -> 516551 bytes .../bls/docs/pull_request_template.md | 4 + pkg/signatures/bls/finitefield/finitefield.go | 188 + .../bls/finitefield/finitefield_test.go | 254 + pkg/signatures/bls/rust/Cargo.toml | 17 + pkg/signatures/bls/rust/src/main.rs | 392 ++ pkg/signatures/bls/shamir/shamir.go | 269 + pkg/signatures/bls/shamir/shamir_test.go | 237 + pkg/signatures/bls/tests/bls/main.go | 230 + pkg/signatures/bls/tmp.json | 1 + pkg/signatures/common/README.md | 259 + pkg/signatures/common/challenge.go | 14 + pkg/signatures/common/commitment.go | 15 + pkg/signatures/common/hmacdrbg.go | 99 + pkg/signatures/common/nonce.go | 15 + .../common/proof_committed_builder.go | 85 + pkg/signatures/common/proof_message.go | 78 + pkg/signatures/common/signature_blinding.go | 14 + pkg/tecdsa/dkls/README.md | 448 ++ pkg/tecdsa/dkls/conn.go | 33 + pkg/tecdsa/dkls/dkg.go | 98 + pkg/tecdsa/dkls/dkg_test.go | 73 + pkg/tecdsa/dkls/doc.go | 13 + pkg/tecdsa/dkls/multiply.go | 172 + pkg/tecdsa/dkls/multiply_test.go | 66 + pkg/tecdsa/dkls/ot.go | 534 ++ pkg/tecdsa/dkls/ot_test.go | 112 + pkg/tecdsa/dkls/params.go | 48 + pkg/tecdsa/dkls/proto.go | 305 + pkg/tecdsa/dkls/proto_test.go | 269 + pkg/tecdsa/dkls/schnorr.go | 112 + pkg/tecdsa/dkls/sign.go | 285 + pkg/tecdsa/dkls/sign_test.go | 65 + pkg/tecdsa/dkls/testdata/alice-dkls-dkg.bin | Bin 0 -> 13107 bytes pkg/tecdsa/dkls/testdata/bob-dkls-dkg.bin | Bin 0 -> 25884 bytes pkg/tecdsa/gg20/README.md | 694 +++ pkg/tecdsa/gg20/dealer/README.md | 252 + pkg/tecdsa/gg20/dealer/dealer.go | 297 + pkg/tecdsa/gg20/dealer/dealer_test.go | 298 + pkg/tecdsa/gg20/dealer/keygentype.go | 48 + pkg/tecdsa/gg20/participant/README.md | 379 ++ pkg/tecdsa/gg20/participant/benches_test.go | 595 ++ pkg/tecdsa/gg20/participant/dkg_round1.go | 188 + pkg/tecdsa/gg20/participant/dkg_round2.go | 122 + pkg/tecdsa/gg20/participant/dkg_round3.go | 183 + pkg/tecdsa/gg20/participant/dkg_round4.go | 91 + .../gg20/participant/dkg_rounds_test.go | 1044 ++++ pkg/tecdsa/gg20/participant/participant.go | 342 ++ .../gg20/participant/participant_test.go | 450 ++ pkg/tecdsa/gg20/participant/round1.go | 132 + pkg/tecdsa/gg20/participant/round2.go | 131 + pkg/tecdsa/gg20/participant/round3.go | 141 + pkg/tecdsa/gg20/participant/round4.go | 60 + pkg/tecdsa/gg20/participant/round5.go | 151 + pkg/tecdsa/gg20/participant/round6.go | 244 + pkg/tecdsa/gg20/participant/rounds_test.go | 996 +++ pkg/tecdsa/gg20/proof/README.md | 349 ++ pkg/tecdsa/gg20/proof/cdl.go | 167 + pkg/tecdsa/gg20/proof/cdl_test.go | 356 ++ pkg/tecdsa/gg20/proof/mta.go | 905 +++ pkg/tecdsa/gg20/proof/mta_test.go | 1217 ++++ pkg/tecdsa/gg20/proof/pdl.go | 317 + pkg/tecdsa/gg20/proof/pdl_test.go | 393 ++ pkg/tecdsa/gg20/proof/util.go | 64 + pkg/ted25519/frost/README.md | 116 + pkg/ted25519/frost/challenge_derive.go | 26 + pkg/ted25519/frost/participant.go | 81 + pkg/ted25519/frost/round1.go | 53 + pkg/ted25519/frost/round2.go | 156 + pkg/ted25519/frost/round3.go | 124 + pkg/ted25519/frost/rounds_test.go | 403 ++ pkg/ted25519/ted25519/README.md | 382 ++ pkg/ted25519/ted25519/ed25519.go | 291 + pkg/ted25519/ted25519/ed25519_test.go | 241 + pkg/ted25519/ted25519/ext.go | 122 + pkg/ted25519/ted25519/ext_test.go | 110 + pkg/ted25519/ted25519/keygen.go | 239 + pkg/ted25519/ted25519/keygen_test.go | 126 + pkg/ted25519/ted25519/noncegen.go | 121 + pkg/ted25519/ted25519/noncegen_test.go | 105 + pkg/ted25519/ted25519/partialsig.go | 55 + pkg/ted25519/ted25519/partialsig_test.go | 55 + pkg/ted25519/ted25519/sigagg.go | 61 + pkg/ted25519/ted25519/sigagg_test.go | 93 + pkg/ted25519/ted25519/twobytwo_test.go | 53 + pkg/verenc/camshoup/README.md | 361 ++ pkg/verenc/camshoup/ciphertext.go | 53 + pkg/verenc/camshoup/ciphertext_test.go | 39 + pkg/verenc/camshoup/decryption_key.go | 151 + pkg/verenc/camshoup/decryption_key_test.go | 69 + pkg/verenc/camshoup/doc.go | 55 + pkg/verenc/camshoup/encryption_key.go | 167 + pkg/verenc/camshoup/encryption_key_test.go | 119 + pkg/verenc/camshoup/paillier_group.go | 191 + pkg/verenc/camshoup/paillier_group_test.go | 184 + pkg/verenc/camshoup/proof_enc.go | 266 + pkg/verenc/camshoup/proof_enc_test.go | 111 + pkg/verenc/elgamal/README.md | 269 + pkg/verenc/elgamal/ciphertext.go | 143 + pkg/verenc/elgamal/ciphertext_test.go | 40 + pkg/verenc/elgamal/decryption_key.go | 163 + pkg/verenc/elgamal/decryption_key_test.go | 57 + pkg/verenc/elgamal/encryption_key.go | 154 + pkg/verenc/elgamal/encryption_key_test.go | 88 + pkg/verenc/elgamal/proof_enc.go | 210 + pkg/verenc/elgamal/proof_enc_test.go | 222 + scripts/perf-comp-local | 20 + test/accumulator/ecc/README.md | 15 + test/accumulator/ecc/main.go | 156 + test/data/sign.input.gz | Bin 0 -> 50330 bytes test/dkg/2p/README.md | 15 + test/dkg/2p/main.go | 139 + test/dkg/2p/server.go | 85 + test/dkg/bls/README.md | 26 + test/dkg/bls/main.go | 205 + test/dkg/ed25519/README.md | 26 + test/dkg/ed25519/main.go | 237 + test/dkg/k256/README.md | 26 + test/dkg/k256/main.go | 197 + test/frost_dkg/bls/README.md | 30 + test/frost_dkg/bls/main.go | 177 + test/frost_dkg/ed25519/README.md | 30 + test/frost_dkg/ed25519/main.go | 246 + test/frost_dkg/frost/README.md | 30 + test/frost_dkg/frost/main.go | 217 + test/frost_dkg/k256/README.md | 30 + test/frost_dkg/k256/main.go | 168 + test/verenc/elgamal/README.md | 15 + test/verenc/elgamal/main.go | 106 + 322 files changed, 77883 insertions(+) create mode 100644 .gitignore create mode 100644 .spdx.yml create mode 100644 CHANGELOG.md create mode 100644 CONTRIBUTING.md create mode 100644 LICENSE create mode 100644 Makefile create mode 100644 NOTICE create mode 100644 README.md create mode 100644 SECURITY.md create mode 100644 api/README.md create mode 100755 cmd/benchcomp/README.md create mode 100644 cmd/benchcomp/main.go create mode 100644 cmd/benchcomp/main_test.go create mode 100644 cmd/spdx/.gitignore create mode 100644 cmd/spdx/Cargo.toml create mode 100644 cmd/spdx/rust-toolchain create mode 100644 cmd/spdx/src/commands.rs create mode 100644 cmd/spdx/src/config.rs create mode 100644 cmd/spdx/src/main.rs create mode 100644 docs/Coinbase_Pseudocode.pdf create mode 100644 docs/Coinbase_Pseudocode_v5.pdf create mode 100644 docs/FROST_pseudocode_for_Coinbase_v2.pdf create mode 100644 docs/GennaroDkg.pdf create mode 100644 docs/README.md create mode 100644 docs/pull_request_template.md create mode 100644 docs/rsa-membership.pdf create mode 100644 examples/README.md create mode 100644 go.mod create mode 100644 go.sum create mode 100755 internal/README.md create mode 100644 internal/err.go create mode 100644 internal/hash.go create mode 100644 internal/hash_test.go create mode 100644 internal/point.go create mode 100644 internal/testutils.go create mode 100755 pkg/accumulator/README.md create mode 100644 pkg/accumulator/accumulator.go create mode 100644 pkg/accumulator/accumulator_test.go create mode 100644 pkg/accumulator/key.go create mode 100644 pkg/accumulator/key_test.go create mode 100644 pkg/accumulator/lib.go create mode 100644 pkg/accumulator/lib_test.go create mode 100644 pkg/accumulator/proof.go create mode 100644 pkg/accumulator/proof_test.go create mode 100644 pkg/accumulator/witness.go create mode 100644 pkg/accumulator/witness_test.go create mode 100644 pkg/core/README.md create mode 100644 pkg/core/commit.go create mode 100644 pkg/core/commit_test.go create mode 100755 pkg/core/curves/README.md create mode 100644 pkg/core/curves/bls12377_curve.go create mode 100644 pkg/core/curves/bls12377_curve_test.go create mode 100644 pkg/core/curves/bls12381_curve.go create mode 100644 pkg/core/curves/bls12381_curve_test.go create mode 100644 pkg/core/curves/curve.go create mode 100644 pkg/core/curves/ec_point.go create mode 100644 pkg/core/curves/ec_point_test.go create mode 100644 pkg/core/curves/ec_scalar.go create mode 100644 pkg/core/curves/ecdsa.go create mode 100644 pkg/core/curves/ed25519_curve.go create mode 100644 pkg/core/curves/ed25519_curve_test.go create mode 100644 pkg/core/curves/field.go create mode 100644 pkg/core/curves/field_test.go create mode 100644 pkg/core/curves/k256_curve.go create mode 100644 pkg/core/curves/k256_curve_test.go create mode 100644 pkg/core/curves/native/bls12-381/LICENSE create mode 100644 pkg/core/curves/native/bls12-381/README.md create mode 100644 pkg/core/curves/native/bls12-381/arithmetic_decl.go create mode 100644 pkg/core/curves/native/bls12-381/arithmetic_fallback.go create mode 100644 pkg/core/curves/native/bls12-381/arithmetic_fallback_test.go create mode 100644 pkg/core/curves/native/bls12-381/arithmetic_x86.s create mode 100644 pkg/core/curves/native/bls12-381/bls12_381.go create mode 100644 pkg/core/curves/native/bls12-381/bls12_381_test.go create mode 100644 pkg/core/curves/native/bls12-381/field_element.go create mode 100644 pkg/core/curves/native/bls12-381/field_element_test.go create mode 100644 pkg/core/curves/native/bls12-381/fp.go create mode 100644 pkg/core/curves/native/bls12-381/fp12.go create mode 100644 pkg/core/curves/native/bls12-381/fp2.go create mode 100644 pkg/core/curves/native/bls12-381/fp6.go create mode 100644 pkg/core/curves/native/bls12-381/fp_test.go create mode 100644 pkg/core/curves/native/bls12-381/g1.go create mode 100644 pkg/core/curves/native/bls12-381/g1_test.go create mode 100644 pkg/core/curves/native/bls12-381/g2.go create mode 100644 pkg/core/curves/native/bls12-381/g2_test.go create mode 100644 pkg/core/curves/native/bls12-381/gt.go create mode 100644 pkg/core/curves/native/bls12-381/hash_to_field.go create mode 100644 pkg/core/curves/native/bls12-381/isogeny.go create mode 100644 pkg/core/curves/native/bls12-381/pairing.go create mode 100644 pkg/core/curves/native/bls12-381/pairing_test.go create mode 100644 pkg/core/curves/native/bls12-381/swu.go create mode 100644 pkg/core/curves/native/bls12-381/tests/README.md create mode 100644 pkg/core/curves/native/bls12-381/tests/g1_compressed_valid_test_vectors.dat create mode 100644 pkg/core/curves/native/bls12-381/tests/g1_uncompressed_valid_test_vectors.dat create mode 100644 pkg/core/curves/native/bls12-381/tests/g2_compressed_valid_test_vectors.dat create mode 100644 pkg/core/curves/native/bls12-381/tests/g2_uncompressed_valid_test_vectors.dat create mode 100644 pkg/core/curves/native/bls12-381/utils.go create mode 100644 pkg/core/curves/native/bls12-381/wnaf.go create mode 100755 pkg/core/curves/native/pasta/README.md create mode 100755 pkg/core/curves/native/pasta/fp/README.md create mode 100644 pkg/core/curves/native/pasta/fp/fp.go create mode 100644 pkg/core/curves/native/pasta/fp/fp_test.go create mode 100644 pkg/core/curves/native/pasta/fp/pasta_fp.go create mode 100755 pkg/core/curves/native/pasta/fq/README.md create mode 100644 pkg/core/curves/native/pasta/fq/fq.go create mode 100644 pkg/core/curves/native/pasta/fq/fq_test.go create mode 100644 pkg/core/curves/native/pasta/fq/pasta_fq.go create mode 100644 pkg/core/curves/native/pasta/pallas.go create mode 100644 pkg/core/curves/p256_curve.go create mode 100644 pkg/core/curves/p256_curve_test.go create mode 100644 pkg/core/curves/pallas_curve.go create mode 100644 pkg/core/curves/pallas_curve_test.go create mode 100644 pkg/core/hash.go create mode 100644 pkg/core/hash_test.go create mode 100644 pkg/core/mod.go create mode 100644 pkg/core/mod_test.go create mode 100644 pkg/core/primes.go create mode 100644 pkg/dkg/README.md create mode 100644 pkg/dkg/benchmarks.txt create mode 100755 pkg/dkg/frost/README.md create mode 100644 pkg/dkg/frost/dkg_round1.go create mode 100644 pkg/dkg/frost/dkg_round2.go create mode 100644 pkg/dkg/frost/dkg_rounds_test.go create mode 100644 pkg/dkg/frost/participant.go create mode 100755 pkg/dkg/gennaro/README.md create mode 100644 pkg/dkg/gennaro/participant.go create mode 100644 pkg/dkg/gennaro/participant_test.go create mode 100644 pkg/dkg/gennaro/round1.go create mode 100644 pkg/dkg/gennaro/round2.go create mode 100644 pkg/dkg/gennaro/round3.go create mode 100644 pkg/dkg/gennaro/round4.go create mode 100644 pkg/dkg/gennaro/rounds_test.go create mode 100755 pkg/dkg/gennaro2p/README.md create mode 100644 pkg/dkg/gennaro2p/genarro2p.go create mode 100644 pkg/dkg/gennaro2p/genarro2p_test.go create mode 100755 pkg/paillier/README.md create mode 100644 pkg/paillier/paillier.go create mode 100644 pkg/paillier/paillier_test.go create mode 100644 pkg/paillier/psf.go create mode 100644 pkg/paillier/psf_test.go create mode 100755 pkg/sharing/README.md create mode 100644 pkg/sharing/ed25519_feldman_test.go create mode 100644 pkg/sharing/feldman.go create mode 100644 pkg/sharing/pedersen.go create mode 100644 pkg/sharing/polynomial.go create mode 100644 pkg/sharing/polynomial_test.go create mode 100644 pkg/sharing/shamir.go create mode 100644 pkg/sharing/shamir_test.go create mode 100644 pkg/sharing/v1/README.md create mode 100644 pkg/sharing/v1/bls12381g1_feldman_test.go create mode 100644 pkg/sharing/v1/bls12381g1curve.go create mode 100644 pkg/sharing/v1/bls12381g2_feldman_test.go create mode 100644 pkg/sharing/v1/bls12381g2curve.go create mode 100644 pkg/sharing/v1/common.go create mode 100644 pkg/sharing/v1/ed25519_feldman_test.go create mode 100644 pkg/sharing/v1/ed25519_pedersen_test.go create mode 100644 pkg/sharing/v1/ed25519curve.go create mode 100644 pkg/sharing/v1/ed25519curve_test.go create mode 100644 pkg/sharing/v1/feldman.go create mode 100644 pkg/sharing/v1/k256_feldman_test.go create mode 100644 pkg/sharing/v1/k256_pedersen_test.go create mode 100644 pkg/sharing/v1/p256_feldman_test.go create mode 100644 pkg/sharing/v1/pedersen.go create mode 100644 pkg/sharing/v1/polynomial.go create mode 100644 pkg/sharing/v1/polynomial_test.go create mode 100644 pkg/sharing/v1/shamir.go create mode 100644 pkg/sharing/v1/shamir_test.go create mode 100755 pkg/signatures/bbs/README.md create mode 100644 pkg/signatures/bbs/blind_signature.go create mode 100644 pkg/signatures/bbs/blind_signature_context.go create mode 100644 pkg/signatures/bbs/blind_signature_context_test.go create mode 100644 pkg/signatures/bbs/doc.go create mode 100644 pkg/signatures/bbs/message_generators.go create mode 100644 pkg/signatures/bbs/pok_signature.go create mode 100644 pkg/signatures/bbs/pok_signature_proof.go create mode 100644 pkg/signatures/bbs/pok_signature_proof_test.go create mode 100644 pkg/signatures/bbs/public_key.go create mode 100644 pkg/signatures/bbs/secret_key.go create mode 100644 pkg/signatures/bbs/signature.go create mode 100644 pkg/signatures/bbs/signature_test.go create mode 100644 pkg/signatures/bls/CHANGELOG create mode 100644 pkg/signatures/bls/README.md create mode 100644 pkg/signatures/bls/bls_sig/lib.go create mode 100644 pkg/signatures/bls/bls_sig/lib_test.go create mode 100644 pkg/signatures/bls/bls_sig/tiny_bls.go create mode 100644 pkg/signatures/bls/bls_sig/tiny_bls_sig.go create mode 100644 pkg/signatures/bls/bls_sig/tiny_bls_sig_aug_test.go create mode 100644 pkg/signatures/bls/bls_sig/tiny_bls_sig_basic_test.go create mode 100644 pkg/signatures/bls/bls_sig/tiny_bls_sig_pop_test.go create mode 100644 pkg/signatures/bls/bls_sig/usual_bls.go create mode 100644 pkg/signatures/bls/bls_sig/usual_bls_sig.go create mode 100644 pkg/signatures/bls/bls_sig/usual_bls_sig_aug_test.go create mode 100644 pkg/signatures/bls/bls_sig/usual_bls_sig_basic_test.go create mode 100644 pkg/signatures/bls/bls_sig/usual_bls_sig_pop_test.go create mode 100644 pkg/signatures/bls/docs/audit-kudeski-coinbase-bls.pdf create mode 100644 pkg/signatures/bls/docs/pull_request_template.md create mode 100644 pkg/signatures/bls/finitefield/finitefield.go create mode 100644 pkg/signatures/bls/finitefield/finitefield_test.go create mode 100644 pkg/signatures/bls/rust/Cargo.toml create mode 100644 pkg/signatures/bls/rust/src/main.rs create mode 100644 pkg/signatures/bls/shamir/shamir.go create mode 100644 pkg/signatures/bls/shamir/shamir_test.go create mode 100644 pkg/signatures/bls/tests/bls/main.go create mode 100644 pkg/signatures/bls/tmp.json create mode 100755 pkg/signatures/common/README.md create mode 100644 pkg/signatures/common/challenge.go create mode 100644 pkg/signatures/common/commitment.go create mode 100644 pkg/signatures/common/hmacdrbg.go create mode 100644 pkg/signatures/common/nonce.go create mode 100644 pkg/signatures/common/proof_committed_builder.go create mode 100644 pkg/signatures/common/proof_message.go create mode 100644 pkg/signatures/common/signature_blinding.go create mode 100755 pkg/tecdsa/dkls/README.md create mode 100644 pkg/tecdsa/dkls/conn.go create mode 100644 pkg/tecdsa/dkls/dkg.go create mode 100644 pkg/tecdsa/dkls/dkg_test.go create mode 100644 pkg/tecdsa/dkls/doc.go create mode 100644 pkg/tecdsa/dkls/multiply.go create mode 100644 pkg/tecdsa/dkls/multiply_test.go create mode 100644 pkg/tecdsa/dkls/ot.go create mode 100644 pkg/tecdsa/dkls/ot_test.go create mode 100644 pkg/tecdsa/dkls/params.go create mode 100644 pkg/tecdsa/dkls/proto.go create mode 100644 pkg/tecdsa/dkls/proto_test.go create mode 100644 pkg/tecdsa/dkls/schnorr.go create mode 100644 pkg/tecdsa/dkls/sign.go create mode 100644 pkg/tecdsa/dkls/sign_test.go create mode 100644 pkg/tecdsa/dkls/testdata/alice-dkls-dkg.bin create mode 100644 pkg/tecdsa/dkls/testdata/bob-dkls-dkg.bin create mode 100644 pkg/tecdsa/gg20/README.md create mode 100755 pkg/tecdsa/gg20/dealer/README.md create mode 100644 pkg/tecdsa/gg20/dealer/dealer.go create mode 100644 pkg/tecdsa/gg20/dealer/dealer_test.go create mode 100644 pkg/tecdsa/gg20/dealer/keygentype.go create mode 100755 pkg/tecdsa/gg20/participant/README.md create mode 100644 pkg/tecdsa/gg20/participant/benches_test.go create mode 100644 pkg/tecdsa/gg20/participant/dkg_round1.go create mode 100644 pkg/tecdsa/gg20/participant/dkg_round2.go create mode 100644 pkg/tecdsa/gg20/participant/dkg_round3.go create mode 100644 pkg/tecdsa/gg20/participant/dkg_round4.go create mode 100644 pkg/tecdsa/gg20/participant/dkg_rounds_test.go create mode 100644 pkg/tecdsa/gg20/participant/participant.go create mode 100644 pkg/tecdsa/gg20/participant/participant_test.go create mode 100644 pkg/tecdsa/gg20/participant/round1.go create mode 100644 pkg/tecdsa/gg20/participant/round2.go create mode 100644 pkg/tecdsa/gg20/participant/round3.go create mode 100644 pkg/tecdsa/gg20/participant/round4.go create mode 100644 pkg/tecdsa/gg20/participant/round5.go create mode 100644 pkg/tecdsa/gg20/participant/round6.go create mode 100644 pkg/tecdsa/gg20/participant/rounds_test.go create mode 100755 pkg/tecdsa/gg20/proof/README.md create mode 100644 pkg/tecdsa/gg20/proof/cdl.go create mode 100644 pkg/tecdsa/gg20/proof/cdl_test.go create mode 100644 pkg/tecdsa/gg20/proof/mta.go create mode 100644 pkg/tecdsa/gg20/proof/mta_test.go create mode 100644 pkg/tecdsa/gg20/proof/pdl.go create mode 100644 pkg/tecdsa/gg20/proof/pdl_test.go create mode 100644 pkg/tecdsa/gg20/proof/util.go create mode 100755 pkg/ted25519/frost/README.md create mode 100644 pkg/ted25519/frost/challenge_derive.go create mode 100644 pkg/ted25519/frost/participant.go create mode 100644 pkg/ted25519/frost/round1.go create mode 100644 pkg/ted25519/frost/round2.go create mode 100644 pkg/ted25519/frost/round3.go create mode 100644 pkg/ted25519/frost/rounds_test.go create mode 100755 pkg/ted25519/ted25519/README.md create mode 100644 pkg/ted25519/ted25519/ed25519.go create mode 100644 pkg/ted25519/ted25519/ed25519_test.go create mode 100644 pkg/ted25519/ted25519/ext.go create mode 100644 pkg/ted25519/ted25519/ext_test.go create mode 100644 pkg/ted25519/ted25519/keygen.go create mode 100644 pkg/ted25519/ted25519/keygen_test.go create mode 100644 pkg/ted25519/ted25519/noncegen.go create mode 100644 pkg/ted25519/ted25519/noncegen_test.go create mode 100644 pkg/ted25519/ted25519/partialsig.go create mode 100644 pkg/ted25519/ted25519/partialsig_test.go create mode 100644 pkg/ted25519/ted25519/sigagg.go create mode 100644 pkg/ted25519/ted25519/sigagg_test.go create mode 100644 pkg/ted25519/ted25519/twobytwo_test.go create mode 100755 pkg/verenc/camshoup/README.md create mode 100644 pkg/verenc/camshoup/ciphertext.go create mode 100644 pkg/verenc/camshoup/ciphertext_test.go create mode 100644 pkg/verenc/camshoup/decryption_key.go create mode 100644 pkg/verenc/camshoup/decryption_key_test.go create mode 100644 pkg/verenc/camshoup/doc.go create mode 100644 pkg/verenc/camshoup/encryption_key.go create mode 100644 pkg/verenc/camshoup/encryption_key_test.go create mode 100644 pkg/verenc/camshoup/paillier_group.go create mode 100644 pkg/verenc/camshoup/paillier_group_test.go create mode 100644 pkg/verenc/camshoup/proof_enc.go create mode 100644 pkg/verenc/camshoup/proof_enc_test.go create mode 100755 pkg/verenc/elgamal/README.md create mode 100644 pkg/verenc/elgamal/ciphertext.go create mode 100644 pkg/verenc/elgamal/ciphertext_test.go create mode 100644 pkg/verenc/elgamal/decryption_key.go create mode 100644 pkg/verenc/elgamal/decryption_key_test.go create mode 100644 pkg/verenc/elgamal/encryption_key.go create mode 100644 pkg/verenc/elgamal/encryption_key_test.go create mode 100644 pkg/verenc/elgamal/proof_enc.go create mode 100644 pkg/verenc/elgamal/proof_enc_test.go create mode 100755 scripts/perf-comp-local create mode 100755 test/accumulator/ecc/README.md create mode 100644 test/accumulator/ecc/main.go create mode 100644 test/data/sign.input.gz create mode 100755 test/dkg/2p/README.md create mode 100644 test/dkg/2p/main.go create mode 100644 test/dkg/2p/server.go create mode 100755 test/dkg/bls/README.md create mode 100644 test/dkg/bls/main.go create mode 100755 test/dkg/ed25519/README.md create mode 100644 test/dkg/ed25519/main.go create mode 100755 test/dkg/k256/README.md create mode 100644 test/dkg/k256/main.go create mode 100755 test/frost_dkg/bls/README.md create mode 100644 test/frost_dkg/bls/main.go create mode 100755 test/frost_dkg/ed25519/README.md create mode 100644 test/frost_dkg/ed25519/main.go create mode 100755 test/frost_dkg/frost/README.md create mode 100644 test/frost_dkg/frost/main.go create mode 100755 test/frost_dkg/k256/README.md create mode 100644 test/frost_dkg/k256/main.go create mode 100755 test/verenc/elgamal/README.md create mode 100644 test/verenc/elgamal/main.go diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..58f313f2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,19 @@ +# Binaries for programs and plugins +*.exe +*.exe~ +*.dll +*.so +*.dylib + +# Test binary, built with `go test -c` +*.test + +# Output of the go coverage tool, specifically when used with LiteIDE +*.out + +# Dependency directories (remove the comment below to include it) +# vendor/ +.idea/ + +.DS_Store +vendor/ diff --git a/.spdx.yml b/.spdx.yml new file mode 100644 index 00000000..89589a00 --- /dev/null +++ b/.spdx.yml @@ -0,0 +1,37 @@ +# +# Copyright Coinbase, Inc. All Rights Reserved. +# +# SPDX-License-Identifier: Apache-2.0 +# +copyright: Copyright Coinbase, Inc. All Rights Reserved. +license: Apache-2.0 +comments: + gitignore: '#' + dockerignore: '#' + sh: '#' + py: '#' + pl: '#' + rb: '#' + yml: '#' + yaml: '#' + go: '//' + rs: '//' +ignore: + - 'testdata/' + - 'test/data' + - 'Cargo\.lock$' + - 'Cargo\.toml$' + - 'target' + - 'go\.mod$' + - 'go\.sum$' + - '\.gitignore$' + - '\.dockerignore$' + - '\.git$' + - '\.idea$' + - '\.vscode$' + - '\bLICENSE$' + - '\w+\.md$' + - '\w+\.pdf$' + - 'Makefile$' + - .DS_Store + - '\w+\.dat$' \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..6dda0553 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,49 @@ +# Changelog + +All notable changes to this repo will be documented in this file. + +The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## v1.5.0 +- Add BLS12-381 curve +- Add BLS signatures + +## v1.4.1 +- Update accumulator implementation to use alias-ing instead of one field structs +- Update accumulator implementation marshaling implementation + +## v1.4.0 +- Update verifiable encryption API + +## v1.3.0 +- Add Accumulator +- Update for new curve abstraction +- Update verifiable encryption API + +## v1.2.0 + +- Add Verifiable Encryption +- Add FROST DKG +- Add DKLS threshold signing +- Add curve abstraction +- Pasta Curves: Pallas and Vesta +- BBS+ signatures + +## v1.1.0 + +- Add recovery id to output of tECDSA signatures in Round 6 +- Add Neg and Bytes to EcScalar +- Add SubFieldOrder to Field struct + +## v1.0.0 +### Added + +- This document and other meta-information +- tECDSA dealered and distributed key generations +- tECDSA based on [GG20](https://eprint.iacr.org/2020/540.pdf) signing +- Gennaro [DKG07](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.134.6445&rep=rep1&type=pdf) usable for Ed25519 and BLS keys. +- Shamir Secret Sharing +- Feldman Verifiable Secret Sharing +- Pedersen Verifiable Secret Sharing +- Paillier Encryption Scheme diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000..7e1ae64c --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,95 @@ +# Contributing to Kryptology + +Kryptology is Apache 2.0 licensed and accepts contributions via +GitHub pull requests. + +# Ways to contribute to Kryptology + +- Bugs or issues: Report problems or defects as github issues +- Features and enhancements: Provide expanded capabilities or optimizations +- Documentation: Improve existing documentation or create new information +- Tests for events and results: + - Functional + - Performance + - Usability + - Security + - Localization + - Recovery + - Deployability + +# The Commit Process + +When contributing code, please follow these guidelines: + +- Fork the repository and make your changes in a feature branch +- Include unit and integration tests for any new features and updates to existing tests +- Ensure that the unit and integration tests run successfully. +- Check that the lint tests pass + +## Important +Use `git rebase origin/master` to limit creating merge commits. +Kryptology accepts single commits. If you have more than one, they will be +squashed when merged. + +## Commit Email Address +Your commit email address must match your GitHub or GitLab email address. For more information, see https://help.github.com/articles/setting-your-commit-email-address-in-git/. + +## Commit messages + +Each commit message consists of a header, a body, and a footer. + +The header includes a type, a scope and a subject: + +```markdown +(): + + + +