Merge branch 'main' into feat/vlad/refactor-from-affine

This commit is contained in:
Vlad
2024-07-05 15:40:34 +02:00
committed by GitHub
42 changed files with 811 additions and 362 deletions

View File

@@ -9,6 +9,7 @@ members = [
"icicle-curves/icicle-bn254",
"icicle-curves/icicle-grumpkin",
"icicle-fields/icicle-babybear",
"icicle-fields/icicle-m31",
"icicle-fields/icicle-stark252",
"icicle-hash",
]
@@ -17,7 +18,7 @@ exclude = [
]
[workspace.package]
version = "2.6.0"
version = "2.7.1"
edition = "2021"
authors = [ "Ingonyama" ]
homepage = "https://www.ingonyama.com"

View File

@@ -15,7 +15,7 @@ pub fn check_ecntt<C: Curve>()
where
<C::ScalarField as FieldImpl>::Config: ECNTT<C>,
{
let test_sizes = [1 << 4, 1 << 9];
let test_sizes = [1 << 4, 1 << 9, 1 << 18];
for test_size in test_sizes {
let points = C::generate_random_projective_points(test_size);

View File

@@ -0,0 +1,19 @@
[package]
name = "icicle-m31"
version.workspace = true
edition.workspace = true
authors.workspace = true
description = "Rust wrapper for the CUDA implementation of m31 prime field by Ingonyama"
homepage.workspace = true
repository.workspace = true
[dependencies]
icicle-core = { workspace = true }
icicle-cuda-runtime = { workspace = true }
[build-dependencies]
cmake = "0.1.50"
[features]
default = []
devmode = ["icicle-core/devmode"]

View File

@@ -0,0 +1,29 @@
use cmake::Config;
use std::env;
fn main() {
println!("cargo:rerun-if-env-changed=CXXFLAGS");
println!("cargo:rerun-if-changed=../../../../icicle");
// Base config
let mut config = Config::new("../../../../icicle/");
config
.define("FIELD", "m31")
.define("CMAKE_BUILD_TYPE", "Release")
.define("EXT_FIELD", "ON");
if let Ok(cuda_arch) = env::var("CUDA_ARCH") {
config.define("CUDA_ARCH", &cuda_arch);
}
// Build
let out_dir = config
.build_target("icicle_field")
.build();
println!("cargo:rustc-link-search={}/build/lib", out_dir.display());
println!("cargo:rustc-link-lib=ingo_field_m31");
println!("cargo:rustc-link-lib=stdc++");
println!("cargo:rustc-link-lib=cudart");
}

View File

@@ -0,0 +1,33 @@
use icicle_core::field::{Field, MontgomeryConvertibleField};
use icicle_core::traits::{FieldConfig, FieldImpl, GenerateRandom};
use icicle_core::{impl_field, impl_scalar_field};
use icicle_cuda_runtime::device::check_device;
use icicle_cuda_runtime::device_context::DeviceContext;
use icicle_cuda_runtime::error::CudaError;
use icicle_cuda_runtime::memory::{DeviceSlice, HostOrDeviceSlice};
pub(crate) const SCALAR_LIMBS: usize = 1;
pub(crate) const EXTENSION_LIMBS: usize = 4;
impl_scalar_field!("m31", m31, SCALAR_LIMBS, ScalarField, ScalarCfg, Fr);
impl_scalar_field!(
"m31_extension",
m31_extension,
EXTENSION_LIMBS,
ExtensionField,
ExtensionCfg,
Fr
);
#[cfg(test)]
mod tests {
use super::{ExtensionField, ScalarField};
use icicle_core::impl_field_tests;
use icicle_core::tests::*;
impl_field_tests!(ScalarField);
mod extension {
use super::*;
impl_field_tests!(ExtensionField);
}
}

View File

@@ -0,0 +1,2 @@
pub mod field;
pub mod vec_ops;

View File

@@ -0,0 +1,26 @@
use crate::field::{ExtensionCfg, ExtensionField, ScalarCfg, ScalarField};
use icicle_core::error::IcicleResult;
use icicle_core::impl_vec_ops_field;
use icicle_core::traits::IcicleResultWrap;
use icicle_core::vec_ops::{BitReverseConfig, VecOps, VecOpsConfig};
use icicle_cuda_runtime::device_context::DeviceContext;
use icicle_cuda_runtime::error::CudaError;
use icicle_cuda_runtime::memory::HostOrDeviceSlice;
impl_vec_ops_field!("m31", m31, ScalarField, ScalarCfg);
impl_vec_ops_field!("m31_extension", m31_extension, ExtensionField, ExtensionCfg);
#[cfg(test)]
pub(crate) mod tests {
use crate::field::{ExtensionField, ScalarField};
use icicle_core::impl_vec_add_tests;
use icicle_core::vec_ops::tests::*;
impl_vec_add_tests!(ScalarField);
mod extension {
use super::*;
impl_vec_add_tests!(ExtensionField);
}
}