Skip to content

Commit

Permalink
feat: variable_base_scalar_mul blackbox func (#6039)
Browse files Browse the repository at this point in the history
  • Loading branch information
benesjan authored Apr 30, 2024
1 parent 4a2a3c8 commit 81142fe
Show file tree
Hide file tree
Showing 47 changed files with 835 additions and 43 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,11 @@ void build_constraints(Builder& builder, AcirFormat const& constraint_system, bo
create_fixed_base_constraint(builder, constraint);
}

// Add variable base scalar mul constraints
for (const auto& constraint : constraint_system.variable_base_scalar_mul_constraints) {
create_variable_base_constraint(builder, constraint);
}

// Add ec add constraints
for (const auto& constraint : constraint_system.ec_add_constraints) {
create_ec_add_constraint(builder, constraint, has_valid_witness_assignments);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
#include "recursion_constraint.hpp"
#include "schnorr_verify.hpp"
#include "sha256_constraint.hpp"
#include "variable_base_scalar_mul.hpp"
#include <utility>

namespace acir_format {
Expand Down Expand Up @@ -48,6 +49,7 @@ struct AcirFormat {
std::vector<PedersenHashConstraint> pedersen_hash_constraints;
std::vector<Poseidon2Constraint> poseidon2_constraints;
std::vector<FixedBaseScalarMul> fixed_base_scalar_mul_constraints;
std::vector<VariableBaseScalarMul> variable_base_scalar_mul_constraints;
std::vector<EcAdd> ec_add_constraints;
std::vector<RecursionConstraint> recursion_constraints;
std::vector<BigIntFromLeBytes> bigint_from_le_bytes_constraints;
Expand Down Expand Up @@ -82,6 +84,7 @@ struct AcirFormat {
pedersen_hash_constraints,
poseidon2_constraints,
fixed_base_scalar_mul_constraints,
variable_base_scalar_mul_constraints,
ec_add_constraints,
recursion_constraints,
poly_triple_constraints,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ TEST_F(AcirFormatTests, TestASingleConstraintNoPubInputs)
.pedersen_hash_constraints = {},
.poseidon2_constraints = {},
.fixed_base_scalar_mul_constraints = {},
.variable_base_scalar_mul_constraints = {},
.ec_add_constraints = {},
.recursion_constraints = {},
.bigint_from_le_bytes_constraints = {},
Expand Down Expand Up @@ -164,6 +165,7 @@ TEST_F(AcirFormatTests, TestLogicGateFromNoirCircuit)
.pedersen_hash_constraints = {},
.poseidon2_constraints = {},
.fixed_base_scalar_mul_constraints = {},
.variable_base_scalar_mul_constraints = {},
.ec_add_constraints = {},
.recursion_constraints = {},
.bigint_from_le_bytes_constraints = {},
Expand Down Expand Up @@ -232,6 +234,7 @@ TEST_F(AcirFormatTests, TestSchnorrVerifyPass)
.pedersen_hash_constraints = {},
.poseidon2_constraints = {},
.fixed_base_scalar_mul_constraints = {},
.variable_base_scalar_mul_constraints = {},
.ec_add_constraints = {},
.recursion_constraints = {},
.bigint_from_le_bytes_constraints = {},
Expand Down Expand Up @@ -327,6 +330,7 @@ TEST_F(AcirFormatTests, TestSchnorrVerifySmallRange)
.pedersen_hash_constraints = {},
.poseidon2_constraints = {},
.fixed_base_scalar_mul_constraints = {},
.variable_base_scalar_mul_constraints = {},
.ec_add_constraints = {},
.recursion_constraints = {},
.bigint_from_le_bytes_constraints = {},
Expand Down Expand Up @@ -441,6 +445,7 @@ TEST_F(AcirFormatTests, TestVarKeccak)
.pedersen_hash_constraints = {},
.poseidon2_constraints = {},
.fixed_base_scalar_mul_constraints = {},
.variable_base_scalar_mul_constraints = {},
.ec_add_constraints = {},
.recursion_constraints = {},
.bigint_from_le_bytes_constraints = {},
Expand Down Expand Up @@ -488,6 +493,7 @@ TEST_F(AcirFormatTests, TestKeccakPermutation)
.pedersen_hash_constraints = {},
.poseidon2_constraints = {},
.fixed_base_scalar_mul_constraints = {},
.variable_base_scalar_mul_constraints = {},
.ec_add_constraints = {},
.recursion_constraints = {},
.bigint_from_le_bytes_constraints = {},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -317,6 +317,15 @@ void handle_blackbox_func_call(Program::Opcode::BlackBoxFuncCall const& arg, Aci
.pub_key_x = arg.outputs[0].value,
.pub_key_y = arg.outputs[1].value,
});
} else if constexpr (std::is_same_v<T, Program::BlackBoxFuncCall::VariableBaseScalarMul>) {
af.variable_base_scalar_mul_constraints.push_back(VariableBaseScalarMul{
.point_x = arg.point_x.witness.value,
.point_y = arg.point_y.witness.value,
.scalar_low = arg.scalar_low.witness.value,
.scalar_high = arg.scalar_high.witness.value,
.out_point_x = arg.outputs[0].value,
.out_point_y = arg.outputs[1].value,
});
} else if constexpr (std::is_same_v<T, Program::BlackBoxFuncCall::EmbeddedCurveAdd>) {
af.ec_add_constraints.push_back(EcAdd{
.input1_x = arg.input1_x.witness.value,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,7 @@ TEST_F(BigIntTests, TestBigIntConstraintMultiple)
.pedersen_hash_constraints = {},
.poseidon2_constraints = {},
.fixed_base_scalar_mul_constraints = {},
.variable_base_scalar_mul_constraints = {},
.ec_add_constraints = {},
.recursion_constraints = {},
.bigint_from_le_bytes_constraints = {},
Expand Down Expand Up @@ -253,6 +254,7 @@ TEST_F(BigIntTests, TestBigIntConstraintSimple)
.pedersen_hash_constraints = {},
.poseidon2_constraints = {},
.fixed_base_scalar_mul_constraints = {},
.variable_base_scalar_mul_constraints = {},
.ec_add_constraints = {},
.recursion_constraints = {},
.bigint_from_le_bytes_constraints = { from_le_bytes_constraint_bigint1 },
Expand Down Expand Up @@ -306,6 +308,7 @@ TEST_F(BigIntTests, TestBigIntConstraintReuse)
.pedersen_hash_constraints = {},
.poseidon2_constraints = {},
.fixed_base_scalar_mul_constraints = {},
.variable_base_scalar_mul_constraints = {},
.ec_add_constraints = {},
.recursion_constraints = {},
.bigint_from_le_bytes_constraints = {},
Expand Down Expand Up @@ -363,6 +366,7 @@ TEST_F(BigIntTests, TestBigIntConstraintReuse2)
.pedersen_hash_constraints = {},
.poseidon2_constraints = {},
.fixed_base_scalar_mul_constraints = {},
.variable_base_scalar_mul_constraints = {},
.ec_add_constraints = {},
.recursion_constraints = {},
.bigint_from_le_bytes_constraints = {},
Expand Down Expand Up @@ -441,6 +445,7 @@ TEST_F(BigIntTests, TestBigIntDIV)
.pedersen_hash_constraints = {},
.poseidon2_constraints = {},
.fixed_base_scalar_mul_constraints = {},
.variable_base_scalar_mul_constraints = {},
.ec_add_constraints = {},
.recursion_constraints = {},
.bigint_from_le_bytes_constraints = { from_le_bytes_constraint_bigint1, from_le_bytes_constraint_bigint2 },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,7 @@ TEST_F(UltraPlonkRAM, TestBlockConstraint)
.pedersen_hash_constraints = {},
.poseidon2_constraints = {},
.fixed_base_scalar_mul_constraints = {},
.variable_base_scalar_mul_constraints = {},
.ec_add_constraints = {},
.recursion_constraints = {},
.bigint_from_le_bytes_constraints = {},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ TEST_F(EcOperations, TestECOperations)
.pedersen_hash_constraints = {},
.poseidon2_constraints = {},
.fixed_base_scalar_mul_constraints = {},
.variable_base_scalar_mul_constraints = {},
.ec_add_constraints = { ec_add_constraint },
.recursion_constraints = {},
.bigint_from_le_bytes_constraints = {},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,7 @@ TEST_F(ECDSASecp256k1, TestECDSAConstraintSucceed)
.pedersen_hash_constraints = {},
.poseidon2_constraints = {},
.fixed_base_scalar_mul_constraints = {},
.variable_base_scalar_mul_constraints = {},
.ec_add_constraints = {},
.recursion_constraints = {},
.bigint_from_le_bytes_constraints = {},
Expand Down Expand Up @@ -156,6 +157,7 @@ TEST_F(ECDSASecp256k1, TestECDSACompilesForVerifier)
.pedersen_hash_constraints = {},
.poseidon2_constraints = {},
.fixed_base_scalar_mul_constraints = {},
.variable_base_scalar_mul_constraints = {},
.ec_add_constraints = {},
.recursion_constraints = {},
.bigint_from_le_bytes_constraints = {},
Expand Down Expand Up @@ -200,6 +202,7 @@ TEST_F(ECDSASecp256k1, TestECDSAConstraintFail)
.pedersen_hash_constraints = {},
.poseidon2_constraints = {},
.fixed_base_scalar_mul_constraints = {},
.variable_base_scalar_mul_constraints = {},
.ec_add_constraints = {},
.recursion_constraints = {},
.bigint_from_le_bytes_constraints = {},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,7 @@ TEST(ECDSASecp256r1, test_hardcoded)
.pedersen_hash_constraints = {},
.poseidon2_constraints = {},
.fixed_base_scalar_mul_constraints = {},
.variable_base_scalar_mul_constraints = {},
.ec_add_constraints = {},
.recursion_constraints = {},
.bigint_from_le_bytes_constraints = {},
Expand Down Expand Up @@ -192,6 +193,7 @@ TEST(ECDSASecp256r1, TestECDSAConstraintSucceed)
.pedersen_hash_constraints = {},
.poseidon2_constraints = {},
.fixed_base_scalar_mul_constraints = {},
.variable_base_scalar_mul_constraints = {},
.ec_add_constraints = {},
.recursion_constraints = {},
.bigint_from_le_bytes_constraints = {},
Expand Down Expand Up @@ -241,6 +243,7 @@ TEST(ECDSASecp256r1, TestECDSACompilesForVerifier)
.pedersen_hash_constraints = {},
.poseidon2_constraints = {},
.fixed_base_scalar_mul_constraints = {},
.variable_base_scalar_mul_constraints = {},
.ec_add_constraints = {},
.recursion_constraints = {},
.bigint_from_le_bytes_constraints = {},
Expand Down Expand Up @@ -285,6 +288,7 @@ TEST(ECDSASecp256r1, TestECDSAConstraintFail)
.pedersen_hash_constraints = {},
.poseidon2_constraints = {},
.fixed_base_scalar_mul_constraints = {},
.variable_base_scalar_mul_constraints = {},
.ec_add_constraints = {},
.recursion_constraints = {},
.bigint_from_le_bytes_constraints = {},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ TEST_F(Poseidon2Tests, TestPoseidon2Permutation)
.pedersen_hash_constraints = {},
.poseidon2_constraints = { poseidon2_constraint },
.fixed_base_scalar_mul_constraints = {},
.variable_base_scalar_mul_constraints = {},
.ec_add_constraints = {},
.recursion_constraints = {},
.bigint_from_le_bytes_constraints = {},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@ Builder create_inner_circuit()
.pedersen_hash_constraints = {},
.poseidon2_constraints = {},
.fixed_base_scalar_mul_constraints = {},
.variable_base_scalar_mul_constraints = {},
.ec_add_constraints = {},
.recursion_constraints = {},
.bigint_from_le_bytes_constraints = {},
Expand Down Expand Up @@ -256,6 +257,7 @@ Builder create_outer_circuit(std::vector<Builder>& inner_circuits)
.pedersen_hash_constraints = {},
.poseidon2_constraints = {},
.fixed_base_scalar_mul_constraints = {},
.variable_base_scalar_mul_constraints = {},
.ec_add_constraints = {},
.recursion_constraints = recursion_constraints,
.bigint_from_le_bytes_constraints = {},
Expand Down
Loading

0 comments on commit 81142fe

Please sign in to comment.