diff --git a/barretenberg/cpp/src/barretenberg/crypto/pedersen_commitment/c_bind.cpp b/barretenberg/cpp/src/barretenberg/crypto/pedersen_commitment/c_bind.cpp index ee6beb6f3e5..71903bdcc6a 100644 --- a/barretenberg/cpp/src/barretenberg/crypto/pedersen_commitment/c_bind.cpp +++ b/barretenberg/cpp/src/barretenberg/crypto/pedersen_commitment/c_bind.cpp @@ -4,31 +4,6 @@ #include "pedersen.hpp" WASM_EXPORT void pedersen__init() {} -WASM_EXPORT void pedersen__compress_fields(uint8_t const* left, uint8_t const* right, uint8_t* result) -{ - auto lhs = barretenberg::fr::serialize_from_buffer(left); - auto rhs = barretenberg::fr::serialize_from_buffer(right); - auto r = crypto::pedersen_hash::hash({ lhs, rhs }); - barretenberg::fr::serialize_to_buffer(r, result); -} - -WASM_EXPORT void pedersen__compress(uint8_t const* inputs_buffer, uint8_t* output) -{ - std::vector to_compress; - read(inputs_buffer, to_compress); - auto r = crypto::pedersen_hash::hash(to_compress); - barretenberg::fr::serialize_to_buffer(r, output); -} - -WASM_EXPORT void pedersen__compress_with_hash_index(uint8_t const* inputs_buffer, uint32_t hash_index, uint8_t* output) -{ - std::vector to_compress; - read(inputs_buffer, to_compress); - crypto::GeneratorContext ctx; // todo fix - ctx.offset = static_cast(hash_index); - auto r = crypto::pedersen_hash::hash(to_compress, ctx); - barretenberg::fr::serialize_to_buffer(r, output); -} WASM_EXPORT void pedersen__commit(uint8_t const* inputs_buffer, uint8_t* output) { @@ -37,11 +12,4 @@ WASM_EXPORT void pedersen__commit(uint8_t const* inputs_buffer, uint8_t* output) grumpkin::g1::affine_element pedersen_hash = crypto::pedersen_commitment::commit_native(to_compress); serialize::write(output, pedersen_hash); -} - -WASM_EXPORT void pedersen__buffer_to_field(uint8_t const* data, size_t length, uint8_t* r) -{ - std::vector to_compress(data, data + length); - auto output = crypto::pedersen_hash::hash_buffer(to_compress); - write(r, output); -} +} \ No newline at end of file diff --git a/barretenberg/cpp/src/barretenberg/crypto/pedersen_commitment/c_bind.hpp b/barretenberg/cpp/src/barretenberg/crypto/pedersen_commitment/c_bind.hpp index af8ec1c6543..e26de08c14c 100644 --- a/barretenberg/cpp/src/barretenberg/crypto/pedersen_commitment/c_bind.hpp +++ b/barretenberg/cpp/src/barretenberg/crypto/pedersen_commitment/c_bind.hpp @@ -5,12 +5,4 @@ #include "barretenberg/common/timer.hpp" WASM_EXPORT void pedersen__init(); - -WASM_EXPORT void pedersen__compress_fields(uint8_t const* left, uint8_t const* right, uint8_t* result); - -WASM_EXPORT void pedersen__compress(uint8_t const* inputs_buffer, uint8_t* output); - -WASM_EXPORT void pedersen__compress_with_hash_index(uint8_t const* inputs_buffer, uint32_t hash_index, uint8_t* output); WASM_EXPORT void pedersen__commit(uint8_t const* inputs_buffer, uint8_t* output); - -WASM_EXPORT void pedersen__buffer_to_field(uint8_t const* data, size_t length, uint8_t* r); diff --git a/barretenberg/cpp/src/barretenberg/crypto/pedersen_commitment/c_bind_new.cpp b/barretenberg/cpp/src/barretenberg/crypto/pedersen_commitment/c_bind_new.cpp index 5d83d39c39b..9988e03904f 100644 --- a/barretenberg/cpp/src/barretenberg/crypto/pedersen_commitment/c_bind_new.cpp +++ b/barretenberg/cpp/src/barretenberg/crypto/pedersen_commitment/c_bind_new.cpp @@ -9,35 +9,6 @@ using namespace barretenberg; WASM_EXPORT void pedersen___init() {} -WASM_EXPORT void pedersen___compress_fields(fr::in_buf left, fr::in_buf right, fr::out_buf result) -{ - auto lhs = barretenberg::fr::serialize_from_buffer(left); - auto rhs = barretenberg::fr::serialize_from_buffer(right); - auto r = crypto::pedersen_hash::hash({ lhs, rhs }); - barretenberg::fr::serialize_to_buffer(r, result); -} - -WASM_EXPORT void pedersen___compress(fr::vec_in_buf inputs_buffer, fr::out_buf output) -{ - std::vector to_compress; - read(inputs_buffer, to_compress); - auto r = crypto::pedersen_hash::hash(to_compress); - barretenberg::fr::serialize_to_buffer(r, output); -} - -WASM_EXPORT void pedersen___compress_with_hash_index(fr::vec_in_buf inputs_buffer, - uint32_t const* hash_index, - fr::out_buf output) -{ - std::vector to_compress; - read(inputs_buffer, to_compress); - const size_t generator_offset = ntohl(*hash_index); - crypto::GeneratorContext ctx; // todo fix - ctx.offset = generator_offset; - auto r = crypto::pedersen_hash::hash(to_compress, ctx); - barretenberg::fr::serialize_to_buffer(r, output); -} - WASM_EXPORT void pedersen___commit(fr::vec_in_buf inputs_buffer, fr::out_buf output) { std::vector to_compress; diff --git a/barretenberg/cpp/src/barretenberg/crypto/pedersen_commitment/c_bind_new.hpp b/barretenberg/cpp/src/barretenberg/crypto/pedersen_commitment/c_bind_new.hpp index 2603f4ba451..26b554bab5f 100644 --- a/barretenberg/cpp/src/barretenberg/crypto/pedersen_commitment/c_bind_new.hpp +++ b/barretenberg/cpp/src/barretenberg/crypto/pedersen_commitment/c_bind_new.hpp @@ -8,13 +8,5 @@ using namespace barretenberg; WASM_EXPORT void pedersen___init(); -WASM_EXPORT void pedersen___compress_fields(fr::in_buf left, fr::in_buf right, fr::out_buf result); - -WASM_EXPORT void pedersen___compress(fr::vec_in_buf inputs_buffer, fr::out_buf output); - -WASM_EXPORT void pedersen___compress_with_hash_index(fr::vec_in_buf inputs_buffer, - uint32_t const* hash_index, - fr::out_buf output); - WASM_EXPORT void pedersen___commit(fr::vec_in_buf inputs_buffer, fr::out_buf output); } \ No newline at end of file diff --git a/barretenberg/cpp/src/barretenberg/crypto/pedersen_hash/c_bind.cpp b/barretenberg/cpp/src/barretenberg/crypto/pedersen_hash/c_bind.cpp index cc50402d55f..3d35c62e4e4 100644 --- a/barretenberg/cpp/src/barretenberg/crypto/pedersen_hash/c_bind.cpp +++ b/barretenberg/cpp/src/barretenberg/crypto/pedersen_hash/c_bind.cpp @@ -7,66 +7,13 @@ extern "C" { WASM_EXPORT void pedersen_hash__init() {} -WASM_EXPORT void pedersen__hash(uint8_t const* inputs_buffer, uint8_t* output) +WASM_EXPORT void pedersen__hash_with_hash_index(uint8_t const* inputs_buffer, uint32_t hash_index, uint8_t* output) { std::vector to_compress; read(inputs_buffer, to_compress); - auto r = crypto::pedersen_hash::hash(to_compress); + crypto::GeneratorContext ctx; // todo fix + ctx.offset = static_cast(hash_index); + auto r = crypto::pedersen_hash::hash(to_compress, ctx); barretenberg::fr::serialize_to_buffer(r, output); } - -WASM_EXPORT void pedersen__hash_with_hash_index(uint8_t const* inputs_buffer, - uint32_t const* hash_index, - uint8_t* output) -{ - std::vector to_compress; - read(inputs_buffer, to_compress); - auto r = crypto::pedersen_hash::hash(to_compress, ntohl(*hash_index)); - barretenberg::fr::serialize_to_buffer(r, output); -} - -WASM_EXPORT void pedersen__hash_pair(uint8_t const* left, uint8_t const* right, uint8_t* result) -{ - auto lhs = barretenberg::fr::serialize_from_buffer(left); - auto rhs = barretenberg::fr::serialize_from_buffer(right); - auto r = crypto::pedersen_hash::hash({ lhs, rhs }); - barretenberg::fr::serialize_to_buffer(r, result); -} - -WASM_EXPORT void pedersen__hash_multiple(uint8_t const* inputs_buffer, uint8_t* output) -{ - pedersen__hash(inputs_buffer, output); -} - -WASM_EXPORT void pedersen__hash_multiple_with_hash_index(uint8_t const* inputs_buffer, - uint32_t const* hash_index, - uint8_t* output) -{ - pedersen__hash_with_hash_index(inputs_buffer, hash_index, output); -} - -/** - * Given a buffer containing 32 byte pedersen leaves, return a new buffer containing the leaves and all pairs of - * nodes that define a merkle tree. - * e.g. - * input: [1][2][3][4] - * output: [1][2][3][4][compress(1,2)][compress(3,4)][compress(5,6)] - */ -WASM_EXPORT uint8_t* pedersen__hash_to_tree(uint8_t const* data) -{ - auto fields = from_buffer>(data); - auto num_outputs = fields.size() * 2 - 1; - fields.reserve(num_outputs); - - for (size_t i = 0; fields.size() < num_outputs; i += 2) { - fields.push_back(crypto::pedersen_hash::hash({ fields[i], fields[i + 1] })); - } - - auto buf_size = 4 + num_outputs * sizeof(grumpkin::fq); - auto buf = (uint8_t*)aligned_alloc(64, buf_size); - auto dst = &buf[0]; - write(dst, fields); - - return buf; -} } \ No newline at end of file diff --git a/barretenberg/cpp/src/barretenberg/crypto/pedersen_hash/c_bind.hpp b/barretenberg/cpp/src/barretenberg/crypto/pedersen_hash/c_bind.hpp index 49b1253a2a9..218e38c0332 100644 --- a/barretenberg/cpp/src/barretenberg/crypto/pedersen_hash/c_bind.hpp +++ b/barretenberg/cpp/src/barretenberg/crypto/pedersen_hash/c_bind.hpp @@ -8,25 +8,7 @@ extern "C" { using namespace barretenberg; WASM_EXPORT void pedersen_hash_init(); -WASM_EXPORT void pedersen_hash(fr::vec_in_buf inputs_buffer, fr::out_buf output); WASM_EXPORT void pedersen_hash_with_hash_index(fr::vec_in_buf inputs_buffer, uint32_t const* hash_index, fr::out_buf output); - -WASM_EXPORT void pedersen_hash_pair(fr::in_buf left, fr::in_buf right, fr::out_buf result); - -WASM_EXPORT void pedersen_hash_multiple(fr::vec_in_buf inputs_buffer, fr::out_buf output); - -WASM_EXPORT void pedersen_hash_multiple_with_hash_index(fr::vec_in_buf inputs_buffer, - uint32_t const* hash_index, - fr::out_buf output); - -/** - * Given a buffer containing 32 byte pedersen leaves, return a new buffer containing the leaves and all pairs of - * nodes that define a merkle tree. - * e.g. - * input: [1][2][3][4] - * output: [1][2][3][4][compress(1,2)][compress(3,4)][compress(5,6)] - */ -WASM_EXPORT void pedersen_hash_to_tree(fr::vec_in_buf data, fr::vec_out_buf out); } \ No newline at end of file diff --git a/barretenberg/cpp/src/barretenberg/crypto/pedersen_hash/c_bind_new.cpp b/barretenberg/cpp/src/barretenberg/crypto/pedersen_hash/c_bind_new.cpp index 1ffa6424699..d7b860574fa 100644 --- a/barretenberg/cpp/src/barretenberg/crypto/pedersen_hash/c_bind_new.cpp +++ b/barretenberg/cpp/src/barretenberg/crypto/pedersen_hash/c_bind_new.cpp @@ -5,13 +5,8 @@ extern "C" { -WASM_EXPORT void pedersen_hash(uint8_t const* inputs_buffer, uint8_t* output) -{ - std::vector to_compress; - read(inputs_buffer, to_compress); - auto r = crypto::pedersen_hash::hash(to_compress); - barretenberg::fr::serialize_to_buffer(r, output); -} +WASM_EXPORT void pedersen_hash_init() {} + WASM_EXPORT void pedersen_hash_with_hash_index(uint8_t const* inputs_buffer, uint32_t const* hash_index, uint8_t* output) @@ -21,47 +16,4 @@ WASM_EXPORT void pedersen_hash_with_hash_index(uint8_t const* inputs_buffer, auto r = crypto::pedersen_hash::hash(to_compress, ntohl(*hash_index)); barretenberg::fr::serialize_to_buffer(r, output); } - -WASM_EXPORT void pedersen_hash_init() {} - -WASM_EXPORT void pedersen_hash_pair(uint8_t const* left, uint8_t const* right, uint8_t* result) -{ - auto lhs = barretenberg::fr::serialize_from_buffer(left); - auto rhs = barretenberg::fr::serialize_from_buffer(right); - auto r = crypto::pedersen_hash::hash({ lhs, rhs }); - barretenberg::fr::serialize_to_buffer(r, result); -} - -WASM_EXPORT void pedersen_hash_multiple(uint8_t const* inputs_buffer, uint8_t* output) -{ - pedersen_hash(inputs_buffer, output); -} - -WASM_EXPORT void pedersen_hash_multiple_with_hash_index(uint8_t const* inputs_buffer, - uint32_t const* hash_index, - uint8_t* output) -{ - pedersen_hash_with_hash_index(inputs_buffer, hash_index, output); -} - -/** - * Given a buffer containing 32 byte pedersen leaves, return a new buffer containing the leaves and all pairs of - * nodes that define a merkle tree. - * e.g. - * input: [1][2][3][4] - * output: [1][2][3][4][compress(1,2)][compress(3,4)][compress(5,6)] - * - */ -WASM_EXPORT void pedersen_hash_to_tree(fr::vec_in_buf data, fr::vec_out_buf out) -{ - auto fields = from_buffer>(data); - auto num_outputs = fields.size() * 2 - 1; - fields.reserve(num_outputs); - - for (size_t i = 0; fields.size() < num_outputs; i += 2) { - fields.push_back(crypto::pedersen_hash::hash({ fields[i], fields[i + 1] })); - } - - *out = to_heap_buffer(fields); -} } \ No newline at end of file diff --git a/barretenberg/exports.json b/barretenberg/exports.json index 9a7588fc331..9f628bdd31a 100644 --- a/barretenberg/exports.json +++ b/barretenberg/exports.json @@ -5,62 +5,6 @@ "outArgs": [], "isAsync": false }, - { - "functionName": "pedersen___compress_fields", - "inArgs": [ - { - "name": "left", - "type": "fr::in_buf" - }, - { - "name": "right", - "type": "fr::in_buf" - } - ], - "outArgs": [ - { - "name": "result", - "type": "fr::out_buf" - } - ], - "isAsync": false - }, - { - "functionName": "pedersen___compress", - "inArgs": [ - { - "name": "inputs_buffer", - "type": "fr::vec_in_buf" - } - ], - "outArgs": [ - { - "name": "output", - "type": "fr::out_buf" - } - ], - "isAsync": false - }, - { - "functionName": "pedersen___compress_with_hash_index", - "inArgs": [ - { - "name": "inputs_buffer", - "type": "fr::vec_in_buf" - }, - { - "name": "hash_index", - "type": "const uint32_t *" - } - ], - "outArgs": [ - { - "name": "output", - "type": "fr::out_buf" - } - ], - "isAsync": false - }, { "functionName": "pedersen___commit", "inArgs": [ @@ -83,22 +27,6 @@ "outArgs": [], "isAsync": false }, - { - "functionName": "pedersen_hash", - "inArgs": [ - { - "name": "inputs_buffer", - "type": "fr::vec_in_buf" - } - ], - "outArgs": [ - { - "name": "output", - "type": "fr::out_buf" - } - ], - "isAsync": false - }, { "functionName": "pedersen_hash_with_hash_index", "inArgs": [ @@ -119,78 +47,6 @@ ], "isAsync": false }, - { - "functionName": "pedersen_hash_pair", - "inArgs": [ - { - "name": "left", - "type": "fr::in_buf" - }, - { - "name": "right", - "type": "fr::in_buf" - } - ], - "outArgs": [ - { - "name": "result", - "type": "fr::out_buf" - } - ], - "isAsync": false - }, - { - "functionName": "pedersen_hash_multiple", - "inArgs": [ - { - "name": "inputs_buffer", - "type": "fr::vec_in_buf" - } - ], - "outArgs": [ - { - "name": "output", - "type": "fr::out_buf" - } - ], - "isAsync": false - }, - { - "functionName": "pedersen_hash_multiple_with_hash_index", - "inArgs": [ - { - "name": "inputs_buffer", - "type": "fr::vec_in_buf" - }, - { - "name": "hash_index", - "type": "const uint32_t *" - } - ], - "outArgs": [ - { - "name": "output", - "type": "fr::out_buf" - } - ], - "isAsync": false - }, - { - "functionName": "pedersen_hash_to_tree", - "inArgs": [ - { - "name": "data", - "type": "fr::vec_in_buf" - } - ], - "outArgs": [ - { - "name": "out", - "type": "fr::vec_out_buf" - } - ], - "isAsync": false - }, { "functionName": "blake2s", "inArgs": [ diff --git a/barretenberg/ts/src/barretenberg_api/index.ts b/barretenberg/ts/src/barretenberg_api/index.ts index 23c0aad4682..bafb9840d80 100644 --- a/barretenberg/ts/src/barretenberg_api/index.ts +++ b/barretenberg/ts/src/barretenberg_api/index.ts @@ -22,25 +22,6 @@ export class BarretenbergApi { return; } - async pedersenCompressFields(left: Fr, right: Fr): Promise { - const result = await this.binder.callWasmExport('pedersen___compress_fields', [left, right], [Fr]); - return result[0]; - } - - async pedersenCompress(inputsBuffer: Fr[]): Promise { - const result = await this.binder.callWasmExport('pedersen___compress', [inputsBuffer], [Fr]); - return result[0]; - } - - async pedersenCompressWithHashIndex(inputsBuffer: Fr[], hashIndex: number): Promise { - const result = await this.binder.callWasmExport( - 'pedersen___compress_with_hash_index', - [inputsBuffer, hashIndex], - [Fr], - ); - return result[0]; - } - async pedersenCommit(inputsBuffer: Fr[]): Promise { const result = await this.binder.callWasmExport('pedersen___commit', [inputsBuffer], [Fr]); return result[0]; @@ -51,40 +32,11 @@ export class BarretenbergApi { return; } - async pedersenHash(inputsBuffer: Fr[]): Promise { - const result = await this.binder.callWasmExport('pedersen_hash', [inputsBuffer], [Fr]); - return result[0]; - } - async pedersenHashWithHashIndex(inputsBuffer: Fr[], hashIndex: number): Promise { const result = await this.binder.callWasmExport('pedersen_hash_with_hash_index', [inputsBuffer, hashIndex], [Fr]); return result[0]; } - async pedersenHashPair(left: Fr, right: Fr): Promise { - const result = await this.binder.callWasmExport('pedersen_hash_pair', [left, right], [Fr]); - return result[0]; - } - - async pedersenHashMultiple(inputsBuffer: Fr[]): Promise { - const result = await this.binder.callWasmExport('pedersen_hash_multiple', [inputsBuffer], [Fr]); - return result[0]; - } - - async pedersenHashMultipleWithHashIndex(inputsBuffer: Fr[], hashIndex: number): Promise { - const result = await this.binder.callWasmExport( - 'pedersen_hash_multiple_with_hash_index', - [inputsBuffer, hashIndex], - [Fr], - ); - return result[0]; - } - - async pedersenHashToTree(data: Fr[]): Promise { - const result = await this.binder.callWasmExport('pedersen_hash_to_tree', [data], [VectorDeserializer(Fr)]); - return result[0]; - } - async blake2s(data: Uint8Array): Promise { const result = await this.binder.callWasmExport('blake2s', [data], [Buffer32]); return result[0]; diff --git a/barretenberg/ts/src/barretenberg_api/pedersen.test.ts b/barretenberg/ts/src/barretenberg_api/pedersen.test.ts index fab866c452d..36e92f9caeb 100644 --- a/barretenberg/ts/src/barretenberg_api/pedersen.test.ts +++ b/barretenberg/ts/src/barretenberg_api/pedersen.test.ts @@ -13,79 +13,13 @@ describe('pedersen', () => { await api.destroy(); }); - it('pedersenCompressFields', async () => { - const result = await api.pedersenCompressFields(new Fr(4n), new Fr(8n)); - expect(result).toEqual(new Fr(1521373897829389584529155077412196627698249315427143054350987371861781120260n)); - }); - - it('pedersenCompress', async () => { - const result = await api.pedersenCompress([new Fr(4n), new Fr(8n), new Fr(12n)]); - expect(result).toEqual(new Fr(16354408412011670665169322571938780771784319449166930406648760506154417354381n)); - }); - - it('pedersenCompressWithHashIndex', async () => { - const result = await api.pedersenCompressWithHashIndex([new Fr(4n), new Fr(8n)], 7); + it('pedersenHashWithHashIndex', async () => { + const result = await api.pedersenHashWithHashIndex([new Fr(4n), new Fr(8n)], 7); expect(result).toEqual(new Fr(2152386650411553803409271316104075950536496387580531018130718456431861859990n)); }); - it('pedersenCompressAndHashSame', async () => { - const resultCompress = await api.pedersenCompressWithHashIndex([new Fr(4n), new Fr(8n)], 7); - const resultHash = await api.pedersenHashWithHashIndex([new Fr(4n), new Fr(8n)], 7); - expect(resultCompress).toEqual(resultHash); - }); - - it('pedersenHashWith0IndexSameAsNoIndex', async () => { - const resultHashImplicit0 = await api.pedersenHash([new Fr(4n), new Fr(8n)]); - const resultCompressImplicit0 = await api.pedersenCompress([new Fr(4n), new Fr(8n)]); - const resultCompressFieldsImplicit0 = await api.pedersenCompressFields(new Fr(4n), new Fr(8n)); - const resultHashExplicit0 = await api.pedersenHashWithHashIndex([new Fr(4n), new Fr(8n)], 0); - expect(resultHashImplicit0).toEqual(resultCompressImplicit0); - expect(resultHashImplicit0).toEqual(resultHashExplicit0); - expect(resultHashImplicit0).toEqual(resultCompressFieldsImplicit0); - }); - - it('pedersenHashPairSameAsWith0Index', async () => { - const resultHashPair = await api.pedersenHashPair(new Fr(4n), new Fr(8n)); - const resultHashExplicit0 = await api.pedersenHashWithHashIndex([new Fr(4n), new Fr(8n)], 0); - expect(resultHashExplicit0).toEqual(resultHashPair); - }); - - it('pedersenHashMultipleSameAsWith0Index', async () => { - const resultHashPair = await api.pedersenHashMultiple([new Fr(4n), new Fr(8n)]); - const resultHashExplicit0 = await api.pedersenHashWithHashIndex([new Fr(4n), new Fr(8n)], 0); - expect(resultHashExplicit0).toEqual(resultHashPair); - }); - it('pedersenCommit', async () => { const result = await api.pedersenCommit([new Fr(4n), new Fr(8n), new Fr(12n)]); expect(result).toEqual(new Fr(18374309251862457296563484909553154519357910650678202211610516068880120638872n)); }); - - it('pedersenHashPair', async () => { - const result = await api.pedersenHashPair(new Fr(4n), new Fr(8n)); - expect(result).toEqual(new Fr(1521373897829389584529155077412196627698249315427143054350987371861781120260n)); - }); - - it('pedersenHashMultiple', async () => { - const result = await api.pedersenHashMultiple([new Fr(4n), new Fr(8n), new Fr(12n)]); - expect(result).toEqual(new Fr(16354408412011670665169322571938780771784319449166930406648760506154417354381n)); - }); - - it('pedersenHashMultipleWithHashIndex', async () => { - const result = await api.pedersenHashMultipleWithHashIndex([new Fr(4n), new Fr(8n)], 7); - expect(result).toEqual(new Fr(2152386650411553803409271316104075950536496387580531018130718456431861859990n)); - }); - - it('pedersenHashToTree', async () => { - const result = await api.pedersenHashToTree([new Fr(4n), new Fr(8n), new Fr(12n), new Fr(16n)]); - expect(result).toEqual([ - new Fr(4n), - new Fr(8n), - new Fr(12n), - new Fr(16n), - new Fr(1521373897829389584529155077412196627698249315427143054350987371861781120260n), - new Fr(18350527319045519333962768191016242826584323959670139897255818770108115223653n), - new Fr(5972535902427608430534212385621973704186819235181735133037695406667218179357n), - ]); - }); }); diff --git a/yarn-project/circuits.js/src/barretenberg/crypto/pedersen/pedersen.test.ts b/yarn-project/circuits.js/src/barretenberg/crypto/pedersen/pedersen.test.ts deleted file mode 100644 index 1ff650d30b1..00000000000 --- a/yarn-project/circuits.js/src/barretenberg/crypto/pedersen/pedersen.test.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { CircuitsWasm } from '@aztec/circuits.js'; - -import { Buffer } from 'buffer'; - -import { pedersenGetHashTree } from './pedersen.js'; - -describe('pedersen', () => { - let barretenbergWasm!: CircuitsWasm; - const values: Buffer[] = []; - - beforeAll(async () => { - barretenbergWasm = await CircuitsWasm.get(); - - // TODO was originally 2 ** 12 - for (let i = 0; i < 2 ** 2; ++i) { - const v = Buffer.alloc(32, 0); - v.writeUInt32LE(i, 0); - values[i] = v; - } - }); - - it('hasher_consistency_and_benchmark', () => { - // const start1 = new Date().getTime(); - const result = pedersenGetHashTree(barretenbergWasm, values); - // const end1 = new Date().getTime() - start1; - - // console.log(`Single hasher: ~${end1 / values.length}ms / value`); - // TODO more than smoke-test this - expect(result.length).toBe(values.length * 2 - 1); - // TODO - // console.log(`Pooled hasher: ~${end2 / values.length}ms / value`); - // console.log(`Pooled improvement: ${(end1 / end2).toFixed(2)}x`); - // expect(poolResults).toEqual(singleResults); - // await pool.destroy(); - }); -}); diff --git a/yarn-project/circuits.js/src/barretenberg/crypto/pedersen/pedersen.ts b/yarn-project/circuits.js/src/barretenberg/crypto/pedersen/pedersen.ts index 5a93193f9be..a2028040490 100644 --- a/yarn-project/circuits.js/src/barretenberg/crypto/pedersen/pedersen.ts +++ b/yarn-project/circuits.js/src/barretenberg/crypto/pedersen/pedersen.ts @@ -2,7 +2,7 @@ import { IWasmModule } from '@aztec/foundation/wasm'; import { Buffer } from 'buffer'; -import { deserializeArrayFromVector, deserializeField, serializeBufferArrayToVector } from '../../serialize.js'; +import { serializeBufferArrayToVector } from '../../serialize.js'; /** * Hashes two arrays. @@ -66,43 +66,10 @@ export function pedersenHashWithHashIndex(wasm: IWasmModule, inputs: Buffer[], h // we can reuse the scratch space to store the result. const outputPtr = 0; - wasm.call('pedersen__compress_with_hash_index', inputPtr, hashIndex, outputPtr); + wasm.call('pedersen__hash_with_hash_index', inputPtr, hashIndex, outputPtr); const hashOutput = wasm.getMemorySlice(0, 32); wasm.call('bbfree', inputPtr); return Buffer.from(hashOutput); } - -/** - * Given a buffer containing 32 byte pedersen leaves, return a new buffer containing the leaves and all pairs of nodes - * that define a merkle tree. - * - * E.g. - * Input: [1][2][3][4] - * Output: [1][2][3][4][hash(1,2)][hash(3,4)][hash(5,6)]. - * - * @param wasm - The barretenberg module. - * @param values - The 32 byte pedersen leaves. - * @returns A tree represented by an array. - * @deprecated Don't call pedersen directly in production code. Instead, create suitably-named functions for specific - * purposes. - */ -export function pedersenGetHashTree(wasm: IWasmModule, values: Buffer[]) { - // If not done already, precompute constants. - wasm.call('pedersen__init'); - const data = serializeBufferArrayToVector(values); - const inputPtr = wasm.call('bbmalloc', data.length); - wasm.writeMemory(inputPtr, data); - - wasm.call('pedersen_hash_to_tree', inputPtr, 0); - const resultPtr = Buffer.from(wasm.getMemorySlice(0, 4)).readUInt32LE(0); - // First 4 bytes is full response length in byters. - // Second 4 bytes is vector length in fields. - const resultNumFields = Buffer.from(wasm.getMemorySlice(resultPtr + 4, resultPtr + 8)).readUInt32BE(0); - const resultData = Buffer.from(wasm.getMemorySlice(resultPtr + 4, resultPtr + 8 + resultNumFields * 32)); - wasm.call('bbfree', inputPtr); - wasm.call('bbfree', resultPtr); - - return deserializeArrayFromVector(deserializeField, resultData).elem; -} diff --git a/yarn-project/merkle-tree/src/pedersen.ts b/yarn-project/merkle-tree/src/pedersen.ts index 9b81c94b103..ae6c5e74e5b 100644 --- a/yarn-project/merkle-tree/src/pedersen.ts +++ b/yarn-project/merkle-tree/src/pedersen.ts @@ -1,4 +1,4 @@ -import { pedersenGetHashTree, pedersenHash, pedersenHashInputs } from '@aztec/circuits.js/barretenberg'; +import { pedersenHash, pedersenHashInputs } from '@aztec/circuits.js/barretenberg'; import { IWasmModule } from '@aztec/foundation/wasm'; import { Hasher } from '@aztec/types'; @@ -25,12 +25,4 @@ export class Pedersen implements Hasher { public hashInputs(inputs: Buffer[]): Buffer { return pedersenHashInputs(this.wasm, inputs); } - - /* - * @deprecated Don't call pedersen directly in production code. Instead, create suitably-named functions for specific - * purposes. - */ - public hashToTree(leaves: Buffer[]): Promise { - return Promise.resolve(pedersenGetHashTree(this.wasm, leaves)); - } } diff --git a/yarn-project/types/src/interfaces/hasher.ts b/yarn-project/types/src/interfaces/hasher.ts index 48e0d265e2b..5fb1da8b3f2 100644 --- a/yarn-project/types/src/interfaces/hasher.ts +++ b/yarn-project/types/src/interfaces/hasher.ts @@ -16,17 +16,4 @@ export interface Hasher { * @returns The resulting 32-byte hash. */ hashInputs(inputs: Buffer[]): Buffer; - - /** - * Given a buffer containing 32 byte leaves, return a new buffer containing the leaves and all pairs of - * nodes that define a merkle tree. - * - * E.g. - * Input: [1][2][3][4] - * Output: [1][2][3][4][hash(1,2)][hash(3,4)][hash(5,6)]. - * - * @param leaves - The 32 byte leaves. - * @returns A tree represented by an array. - */ - hashToTree(leaves: Buffer[]): Promise; }