mirror of
https://github.com/pseXperiments/icicle.git
synced 2026-01-09 07:27:56 -05:00
# Updates: ## Hashing - Added SpongeHasher class - Can be used to accept any hash function as an argument - Absorb and squeeze are now separated - Memory management is now mostly done by SpongeHasher class, each hash function only describes permutation kernels ## Tree builder - Tree builder is now hash-agnostic. - Tree builder now supports 2D input (matrices) - Tree builder can now use two different hash functions for layer 0 and compression layers ## Poseidon1 - Interface changed to classes - Now allows for any alpha - Now allows passing constants not in a single vector - Now allows for any domain tag - Constants are now released upon going out of scope - Rust wrappers changed to Poseidon struct ## Poseidon2 - Interface changed to classes - Constants are now released upon going out of scope - Rust wrappers changed to Poseidon2 struct ## Keccak - Added Keccak class which inherits SpongeHasher - Now doesn't use gpu registers for storing states To do: - [x] Update poseidon1 golang bindings - [x] Update poseidon1 examples - [x] Fix poseidon2 cuda test - [x] Fix poseidon2 merkle tree builder test - [x] Update keccak class with new design - [x] Update keccak test - [x] Check keccak correctness - [x] Update tree builder rust wrappers - [x] Leave doc comments Future work: - [ ] Add keccak merkle tree builder externs - [ ] Add keccak rust tree builder wrappers - [ ] Write docs - [ ] Add example - [ ] Fix device output for tree builder --------- Co-authored-by: Jeremy Felder <jeremy.felder1@gmail.com> Co-authored-by: nonam3e <71525212+nonam3e@users.noreply.github.com>
51 lines
1.2 KiB
C
51 lines
1.2 KiB
C
#include <cuda_runtime.h>
|
|
#include <stdbool.h>
|
|
|
|
#ifndef _GRUMPKIN_POSEIDON_H
|
|
#define _GRUMPKIN_POSEIDON_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
typedef struct scalar_t scalar_t;
|
|
typedef struct DeviceContext DeviceContext;
|
|
typedef struct TreeBuilderConfig TreeBuilderConfig;
|
|
typedef struct PoseidonInst PoseidonInst;
|
|
typedef struct SpongeConfig SpongeConfig;
|
|
|
|
|
|
cudaError_t grumpkin_poseidon_create_cuda(
|
|
PoseidonInst** poseidon,
|
|
unsigned int arity,
|
|
unsigned int alpha,
|
|
unsigned int partial_rounds,
|
|
unsigned int full_rounds_half,
|
|
const scalar_t* round_constants,
|
|
const scalar_t* mds_matrix,
|
|
const scalar_t* non_sparse_matrix,
|
|
const scalar_t* sparse_matrices,
|
|
const scalar_t* domain_tag,
|
|
DeviceContext* ctx);
|
|
|
|
cudaError_t grumpkin_poseidon_load_cuda(
|
|
PoseidonInst** poseidon,
|
|
unsigned int arity,
|
|
DeviceContext* ctx);
|
|
|
|
cudaError_t grumpkin_poseidon_hash_many_cuda(
|
|
const PoseidonInst* poseidon,
|
|
const scalar_t* inputs,
|
|
scalar_t* output,
|
|
unsigned int number_of_states,
|
|
unsigned int input_block_len,
|
|
unsigned int output_len,
|
|
SpongeConfig* cfg);
|
|
|
|
cudaError_t grumpkin_poseidon_delete_cuda(PoseidonInst* poseidon);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif |