mirror of
https://github.com/serai-dex/serai.git
synced 2024-12-28 22:49:42 +00:00
251a6e96e8
* WIP constant-time implementation of the ec-divisors library * Fix misc logic errors in poly.rs * Remove accidentally committed test statements * Fix ConstantTimeEq for CoefficientIndex * Correct the iterations formula x**3 / (0 y + x**1) would prior be considered indivisible with iterations = 0. It is divisible however. The amount of iterations should be the amount of coefficients within the numerator *excluding the coefficient for y**0 x**0*. * Poly PartialEq, conditional_select_poly which checks poly structure equivalence If the first passed argument is smaller than the latter, it's padded to the necessary length. Also adds code to trim the remainder as the remainder is the value modulo, so it's very important it remains concise and workable. * Fix the line function It selected the case if both were identity before selecting the case if either were identity, the latter overwriting the former. * Final fixes re: ct_get 1) Our quotient structure does need to be of size equal to the numerator entirely to prevent out-of-bounds reads on it 2) We need to get from yx_coefficients if of length >=, so if the length is 1 we can read y_pow=1 from it. If y_pow=0, and its length is 0 so it has no inner Vecs, we need to fall back with the guard y_pow != 0. * Add a trim algorithm to lib.rs to prevent Polys from becoming unbearably gigantic Our Poly algorithm is incredibly leaky. While it presumably should be improved, we can take advantage of our known structure while constructing divisors (and the small modulus) to simply trim out the zero coefficients leaked. This maintains Polys in a manageable size. * Move constant-time scalar mul gadget divisor creation from dkg to ec-divisors Anyone creating a divisor for the scalar mul gadget should use constant time code, so this code should at least be in the EC gadgets crate It's of non-trivial complexity to deal with otherwise. * Remove unsafe, cache timing attacks from ec-divisors
36 lines
1.3 KiB
TOML
36 lines
1.3 KiB
TOML
[package]
|
|
name = "ec-divisors"
|
|
version = "0.1.0"
|
|
description = "A library for calculating elliptic curve divisors"
|
|
license = "MIT"
|
|
repository = "https://github.com/serai-dex/serai/tree/develop/crypto/evrf/divisors"
|
|
authors = ["Luke Parker <lukeparker5132@gmail.com>"]
|
|
keywords = ["ciphersuite", "ff", "group"]
|
|
edition = "2021"
|
|
|
|
[package.metadata.docs.rs]
|
|
all-features = true
|
|
rustdoc-args = ["--cfg", "docsrs"]
|
|
|
|
[dependencies]
|
|
rand_core = { version = "0.6", default-features = false }
|
|
zeroize = { version = "^1.5", default-features = false, features = ["std", "zeroize_derive"] }
|
|
|
|
subtle = { version = "2", default-features = false, features = ["std"] }
|
|
ff = { version = "0.13", default-features = false, features = ["std", "bits"] }
|
|
group = { version = "0.13", default-features = false }
|
|
|
|
hex = { version = "0.4", optional = true }
|
|
dalek-ff-group = { path = "../../dalek-ff-group", features = ["std"], optional = true }
|
|
pasta_curves = { version = "0.5", default-features = false, features = ["bits", "alloc"], optional = true }
|
|
|
|
[dev-dependencies]
|
|
rand_core = { version = "0.6", features = ["getrandom"] }
|
|
|
|
hex = "0.4"
|
|
dalek-ff-group = { path = "../../dalek-ff-group", features = ["std"] }
|
|
pasta_curves = { version = "0.5", default-features = false, features = ["bits", "alloc"] }
|
|
|
|
[features]
|
|
ed25519 = ["hex", "dalek-ff-group"]
|
|
pasta = ["pasta_curves"]
|