diff --git a/cpp/src/barretenberg/stdlib/types/circuit_types.hpp b/cpp/src/barretenberg/stdlib/types/circuit_types.hpp deleted file mode 100644 index 6817981d2e..0000000000 --- a/cpp/src/barretenberg/stdlib/types/circuit_types.hpp +++ /dev/null @@ -1,97 +0,0 @@ -#pragma once -#include "barretenberg/stdlib/primitives/address/address.hpp" -#include "barretenberg/stdlib/encryption/schnorr/schnorr.hpp" -#include "barretenberg/stdlib/encryption/ecdsa/ecdsa.hpp" -#include "barretenberg/stdlib/primitives/bigfield/bigfield.hpp" -#include "barretenberg/stdlib/primitives/biggroup/biggroup.hpp" -#include "barretenberg/stdlib/primitives/bit_array/bit_array.hpp" -#include "barretenberg/stdlib/primitives/bool/bool.hpp" -#include "barretenberg/stdlib/primitives/byte_array/byte_array.hpp" -#include "barretenberg/stdlib/primitives/packed_byte_array/packed_byte_array.hpp" -#include "barretenberg/stdlib/primitives/uint/uint.hpp" -#include "barretenberg/stdlib/primitives/point/point.hpp" -#include "barretenberg/stdlib/primitives/group/group.hpp" -#include "barretenberg/stdlib/primitives/curves/bn254.hpp" -#include "barretenberg/stdlib/recursion/verifier/verifier.hpp" -#include "barretenberg/stdlib/recursion/verification_key/verification_key.hpp" -#include "barretenberg/stdlib/commitment/pedersen/pedersen.hpp" -#include "barretenberg/stdlib/hash/blake2s/blake2s.hpp" -#include "native_types.hpp" - -namespace plonk::stdlib::types { - -using plonk::stdlib::address_t; -// using NT = plonk::stdlib::types::NativeTypes; -// using plonk::stdlib::pedersen; - -template struct CircuitTypes { - typedef bool_t boolean; - - // typedef uint8 uint8; - // typedef uint16 uint16; - typedef stdlib::uint32 uint32; - // typedef uint64 uint64; - - typedef field_t fr; // of altbn - typedef safe_uint_t safe_fr; - // TODO: make address_ct be the same as all other types. (And define it in the stdlib, instead of aztec3 dir). - typedef address_t address; - - typedef stdlib::bigfield fq; // of altbn - - // typedef fq grumpkin_fr; - // typedef fr grumpkin_fq; - typedef point grumpkin_point; // affine - typedef group grumpkin_group; - - typedef stdlib::bn254 bn254; - // typedef bn254::g1_ct bn254_point; - typedef element - bn254_point; // looks affine (despite the confusing name 'element'). - - // typedef bit_array bit_array; - typedef stdlib::byte_array byte_array; - // typedef packed_byte_array packed_byte_array; - - // typedef stdlib::schnorr::signature_bits signature; - typedef stdlib::ecdsa::signature ecdsa_signature; - - typedef stdlib::recursion::recursion_output AggregationObject; - typedef stdlib::recursion::verification_key VK; - // Notice: no CircuitType for a Proof: we only ever handle native; the verify_proof() function swallows the - // 'circuit-type-ness' of the proof. - - /// TODO: lots of these compress / commit functions aren't actually used: remove them. - - // Define the 'circuit' version of the function `compress`, with the name `compress`: - static fr compress(std::vector const& inputs, const size_t hash_index = 0) - { - return plonk::stdlib::pedersen_commitment::compress(inputs, hash_index); - } - - static fr compress(std::vector const& inputs, - std::vector const& hash_sub_indices, - const size_t hash_index = 0) - { - return plonk::stdlib::pedersen_commitment::compress(inputs, hash_sub_indices, hash_index); - } - - static fr compress(const std::vector>& input_pairs) - { - return plonk::stdlib::pedersen_commitment::compress(input_pairs); - }; - - static grumpkin_point commit(const std::vector& inputs, const size_t hash_index = 0) - { - return plonk::stdlib::pedersen_commitment::commit(inputs, hash_index); - }; - - static grumpkin_point commit(const std::vector>& input_pairs) - { - return plonk::stdlib::pedersen_commitment::commit(input_pairs); - }; - - static byte_array blake2s(const byte_array& input) { return plonk::stdlib::blake2s(input); } -}; - -} // namespace plonk::stdlib::types \ No newline at end of file diff --git a/cpp/src/barretenberg/stdlib/types/convert.hpp b/cpp/src/barretenberg/stdlib/types/convert.hpp deleted file mode 100644 index a749614983..0000000000 --- a/cpp/src/barretenberg/stdlib/types/convert.hpp +++ /dev/null @@ -1,254 +0,0 @@ -#pragma once - -#include "barretenberg/common/map.hpp" -#include "barretenberg/stdlib/primitives/witness/witness.hpp" -#include "barretenberg/stdlib/primitives/point/point.hpp" -#include "native_types.hpp" -#include "circuit_types.hpp" - -namespace plonk::stdlib::types { - -using plonk::stdlib::witness_t; - -namespace { - -template using CT = plonk::stdlib::types::CircuitTypes; -using NT = plonk::stdlib::types::NativeTypes; - -} // namespace - -/// TODO: Lots of identical functions here (but for their in/out types). Can we use templates? I couldn't figure out how -/// to keep the NT:: or CT:: prefixes with templates. -template typename CT::boolean to_ct(Composer& composer, typename NT::boolean const& e) -{ - return typename CT::boolean(witness_t(&composer, e)); -}; - -template typename CT::fr to_ct(Composer& composer, typename NT::fr const& e) -{ - return typename CT::fr(witness_t(&composer, e)); -}; - -template typename CT::fq to_ct(Composer& composer, typename NT::fq const& e) -{ - return typename CT::fq(witness_t(&composer, e)); -}; - -template typename CT::address to_ct(Composer& composer, typename NT::address const& e) -{ - return typename CT::address(witness_t(&composer, e)); -}; - -template typename CT::uint32 to_ct(Composer& composer, typename NT::uint32 const& e) -{ - return typename CT::uint32(witness_t(&composer, e)); -}; - -template -typename CT::grumpkin_point to_ct(Composer& composer, typename NT::grumpkin_point const& e) -{ - return plonk::stdlib::create_point_witness(composer, e, true); -}; - -template -typename CT::bn254_point to_ct(Composer& composer, typename NT::bn254_point const& e) -{ - return CT::bn254_point::from_witness(&composer, e); -}; - -template -typename CT::ecdsa_signature to_ct(Composer& composer, typename NT::ecdsa_signature const& e) -{ - return CT::ecdsa_signature::template from_witness(&composer, e); -}; - -template -std::optional::boolean> to_ct(Composer& composer, std::optional const& e) -{ - return e ? std::make_optional::boolean>(to_ct(composer, *e)) : std::nullopt; -}; - -template -std::optional::fr> to_ct(Composer& composer, std::optional const& e) -{ - return e ? std::make_optional::fr>(to_ct(composer, *e)) : std::nullopt; -}; - -template -std::optional::address> to_ct(Composer& composer, std::optional const& e) -{ - return e ? std::make_optional::address>(to_ct(composer, *e)) : std::nullopt; -}; - -template -std::optional::grumpkin_point> to_ct(Composer& composer, - std::optional const& e) -{ - return e ? std::make_optional::grumpkin_point>(to_ct(composer, *e)) : std::nullopt; -}; - -template -std::optional::ecdsa_signature> to_ct(Composer& composer, - std::optional const& e) -{ - return e ? std::make_optional::ecdsa_signature>(to_ct(&composer, e)) : std::nullopt; -}; - -template -std::vector::fr> to_ct(Composer& composer, std::vector const& vec) -{ - auto ref_to_ct = [&](typename NT::fr const& e) { return to_ct(composer, e); }; - - return map(vec, ref_to_ct); -}; - -template -std::optional::fr>> to_ct(Composer& composer, - std::optional> const& vec) -{ - auto ref_to_ct = [&](typename NT::fr const& e) { return to_ct(composer, e); }; - - return vec ? std::make_optional::fr>>(map(*vec, ref_to_ct)) : std::nullopt; -}; - -template -std::array::fr, SIZE> to_ct(Composer& composer, std::array const& arr) -{ - auto ref_to_ct = [&](typename NT::fr const& e) { return to_ct(composer, e); }; - - return map(arr, ref_to_ct); -}; - -template -std::array::fr>, SIZE> to_ct( - Composer& composer, std::array, SIZE> const& arr) -{ - auto ref_to_ct = [&](std::optional const& e) { return to_ct(composer, e); }; - - return map(arr, ref_to_ct); -}; - -// to_nt() below ******************************** - -template typename NT::boolean to_nt(typename CT::boolean const& e) -{ - return e.get_value(); -}; - -template typename NT::fr to_nt(typename CT::fr const& e) -{ - return e.get_value(); -}; - -template typename NT::fq to_nt(typename CT::fq const& e) -{ - return e.get_value(); -}; - -template typename NT::address to_nt(typename CT::address const& e) -{ - return NT::address(e.address_.get_value()); // TODO: add get_value() method to address types. -}; - -template typename NT::uint32 to_nt(typename CT::uint32 const& e) -{ - NT::uint256 e_256 = e.get_value(); - NT::uint64 e_64 = e_256.data[0]; // TODO: check that this endianness is correct! - NT::uint32 e_32 = static_cast(e_64); - return e_32; -}; - -template typename NT::grumpkin_point to_nt(typename CT::grumpkin_point const& e) -{ - return NT::grumpkin_point{ e.x.get_value(), e.y.get_value() }; -}; - -template typename NT::bn254_point to_nt(typename CT::bn254_point const& e) -{ - return e.get_value(); -}; - -template typename NT::ecdsa_signature to_nt(typename CT::ecdsa_signature const& e) -{ - std::vector r_bytes = e.r.get_value(); - std::vector s_bytes = e.s.get_value(); - - std::array r_array; - std::array s_array; - std::copy(r_bytes.begin(), r_bytes.end(), r_array.begin()); - std::copy(s_bytes.begin(), s_bytes.end(), s_array.begin()); - - return NT::ecdsa_signature{ r_array, s_array }; -}; - -template -std::optional to_nt(std::optional::boolean> const& e) -{ - return e ? std::make_optional(to_nt(*e)) : std::nullopt; -}; - -template std::optional to_nt(std::optional::fr> const& e) -{ - return e ? std::make_optional(to_nt(*e)) : std::nullopt; -}; - -template -std::optional to_nt(std::optional::address> const& e) -{ - return e ? std::make_optional(to_nt(*e)) : std::nullopt; -}; - -template -std::optional to_nt(std::optional::grumpkin_point> const& e) -{ - return e ? std::make_optional(to_nt(*e)) : std::nullopt; -}; - -template -std::optional to_nt(std::optional::ecdsa_signature> const& e) -{ - return e ? std::make_optional(to_nt(*e)) : std::nullopt; -}; - -template std::vector to_nt(std::vector::fr> const& vec) -{ - auto ref_to_nt = [&](typename CT::fr const& e) { return to_nt(e); }; - - return map(vec, ref_to_nt); -}; - -template -std::optional> to_nt(std::optional::fr>> const& vec) -{ - auto ref_to_nt = [&](typename CT::fr const& e) { return to_nt(e); }; - - return vec ? std::make_optional>(map(*vec, ref_to_nt)) : std::nullopt; -}; - -template -std::array to_nt(std::array::fr, SIZE> const& arr) -{ - auto ref_to_nt = [&](typename CT::fr const& e) { return to_nt(e); }; - - return map(arr, ref_to_nt); -}; - -// template -// std::optional> to_nt( -// std::optional::fr, SIZE>> const& arr) -// { -// auto ref_to_nt = [&](typename CT::fr const& e) { return to_nt(e); }; - -// return arr ? std::make_optional>(map(arr, ref_to_nt)) : std::nullopt; -// }; - -template -std::array, SIZE> to_nt( - std::array::fr>, SIZE> const& arr) -{ - auto ref_to_nt = [&](std::optional::fr> const& e) { return to_nt(e); }; - - return map(arr, ref_to_nt); -}; - -} // namespace plonk::stdlib::types \ No newline at end of file diff --git a/cpp/src/barretenberg/stdlib/types/native_types.hpp b/cpp/src/barretenberg/stdlib/types/native_types.hpp deleted file mode 100644 index e732e47e5b..0000000000 --- a/cpp/src/barretenberg/stdlib/types/native_types.hpp +++ /dev/null @@ -1,89 +0,0 @@ -#pragma once -#include "barretenberg/stdlib/primitives/address/address.hpp" -#include "barretenberg/crypto/pedersen_commitment/pedersen.hpp" -#include "barretenberg/crypto/generators/generator_data.hpp" -#include "barretenberg/crypto/schnorr/schnorr.hpp" -#include "barretenberg/crypto/ecdsa/ecdsa.hpp" -#include "barretenberg/ecc/curves/bn254/fq.hpp" -#include "barretenberg/ecc/curves/bn254/fr.hpp" -#include "barretenberg/ecc/curves/bn254/g1.hpp" -#include "barretenberg/ecc/curves/grumpkin/grumpkin.hpp" -#include "barretenberg/numeric/uint256/uint256.hpp" -#include "barretenberg/proof_system/verification_key/verification_key.hpp" -#include "barretenberg/plonk/proof_system/types/proof.hpp" -#include "barretenberg/stdlib/recursion/verifier/verifier.hpp" - -// #include "barretenberg/stdlib/primitives/bit_array/bit_array.hpp" -// #include "barretenberg/stdlib/primitives/bool/bool.hpp" -// #include "barretenberg/stdlib/primitives/byte_array/byte_array.hpp" -// #include "barretenberg/stdlib/primitives/packed_byte_array/packed_byte_array.hpp" -// #include "barretenberg/stdlib/primitives/uint/uint.hpp" -// #include "barretenberg/stdlib/primitives/point/point.hpp" -// #include "barretenberg/stdlib/primitives/group/group.hpp" - -namespace plonk::stdlib::types { - -using plonk::stdlib::address; - -struct NativeTypes { - typedef bool boolean; - - // typedef uint8_t uint8; - // typedef uint16_t uint16; - typedef uint32_t uint32; - typedef uint64_t uint64; - typedef uint256_t uint256; - - typedef barretenberg::fr fr; - typedef barretenberg::fr safe_fr; - typedef types::address address; - - typedef barretenberg::fq fq; - - // typedef fq grumpkin_fr; - // typedef fr grumpkin_fq; - typedef grumpkin::g1::affine_element grumpkin_point; - // typedef grumpkin::g1::element grumpkin_jac_point; - typedef grumpkin::g1 grumpkin_group; - - typedef barretenberg::g1::affine_element bn254_point; - // typedef barretenberg::g1::element bn254_jac_point; - // typedef barretenberg::g1 bn254_group; - - // typedef bit_array bit_array; - // typedef byte_array byte_array; - // typedef packed_byte_array packed_byte_array; - - // typedef crypto::schnorr::signature signature; - typedef crypto::ecdsa::signature ecdsa_signature; - - typedef stdlib::recursion::native_recursion_output AggregationObject; - typedef bonk::verification_key_data VKData; - typedef bonk::verification_key VK; - typedef plonk::proof Proof; - - /// TODO: lots of these compress / commit functions aren't actually used: remove them. - - // Define the 'native' version of the function `compress`, with the name `compress`: - static fr compress(const std::vector& inputs, const size_t hash_index = 0) - { - return crypto::pedersen_commitment::compress_native(inputs, hash_index); - } - - static fr compress(const std::vector>& input_pairs) - { - return crypto::pedersen_commitment::compress_native(input_pairs); - } - - static grumpkin_point commit(const std::vector& inputs, const size_t hash_index = 0) - { - return crypto::pedersen_commitment::commit_native(inputs, hash_index); - } - - static grumpkin_point commit(const std::vector>& input_pairs) - { - return crypto::pedersen_commitment::commit_native(input_pairs); - } -}; - -} // namespace plonk::stdlib::types \ No newline at end of file