The main features of this release are:
- Adding the ability to define fields with integer parameters
- Multi-variate polynomial support
- Multilinear polynomial support
- Many speedups to operations involving polynomials
- Some speedups to
sqrt
- Small speedups to MSMs
- Big speedups to radix-2 FFTs
- Fix in the assembly arithmetic backend
- Adding new traits for basic curve cycles and pairing based curve cycles
- #20 (ark-poly) Move univariate DensePolynomial and SparsePolynomial into a
univariate sub-crate. Make this change by:
find w/ regex
ark_poly::(Dense|Sparse)Polynomial
, and replace withark_poly::univariate::$1Polynomial
. - #36 (ark-ec) In Short-Weierstrass curves, include an infinity bit in
ToConstraintField
. - #37 (ark-poly) In the
Polynomial
trait, addHash
trait bound toPoint
. - #38 (ark-poly) Add
Add
andNeg
trait bounds toPolynomial
. - #51 (ark-ff) Removed
unitary_inverse
fromQuadExtField
. Make this change by replacingx.unitary_inverse()
withlet mut tmp = x.clone(); tmp.conjugate()
- #53 (ark-poly) Add
Zero
trait bound toPolynomial
. - #96 (ark-ff) Make the
field_new
macro accept values in integer form, without requiring decomposition into limbs, and without requiring encoding in Montgomery form. - #106 (ark-ff, ark-ec) Add
Zeroize
trait bound toField, ProjectiveGroup, AffineGroup
traits. - #108 (ark-ff) Add
extension_degree()
method toField
. - #110 (ark-ec) Change the trait bound on the scalar for
mul
, from (essentially)Into<BigInt>
toAsRef<[u64]>
- #117 (ark-poly) Make the univariate
SparsePolynomial
implementPolynomial
. Make this change by replacingsparse_poly.evaluate(pt)
tosparse_poly.evaluate(&pt)
. - #129 (ark-ff) Move
ark_ff::{UniformRand, test_rng}
toark_std::{UniformRand, test_rng}
. Importing these fromark-ff
is still possible, but is deprecated and will be removed in the following release. - #144 (ark-poly) Add
CanonicalSerialize
andCanonicalDeserialize
trait bounds forPolynomial
. - #160 (ark-serialize, ark-ff, ark-ec)
- Remove
ConstantSerializedSize
; users should useserialized_size*
(see next). - Add
serialized_size_with_flags
method toCanonicalSerializeWithFlags
. - Change
from_random_bytes_with_flags
to outputark_serialize::Flags
. - Change signatures of
Flags::from_u8*
to outputOption
. - Change
Flags::from_u8*
to be more strict about the inputs they accept: if the top bits of theu8
value do not correspond to one of the possible outputs ofFlags::u8_bitmask
, then these methods outputNone
, whereas before they output a default value. Downstream users other thanark-curves
should not see breakage unless they rely on these methods/traits explicitly.
- Remove
- #165 (ark-ff) Add
from_base_field_elements
as a method to theField
trait. - #166 (ark-ff) Change
BigInt::{from_bytes, to_bits}
tofrom_bytes_le, from_bytes_be, to_bits_le, to_bits_be
.
- #20 (ark-poly) Add structs/traits for multivariate polynomials
- #96 (ark-ff) Make the
field_new
macro accept values in integer form, without requiring decomposition into limbs, and without requiring encoding in Montgomery form. - #106 (ark-ff, ark-ec) Add
Zeroize
trait bound toField, ProjectiveGroup, AffineGroup
traits. - #117 (ark-poly) Add operations to
SparsePolynomial
, so it implementsPolynomial
- #140 (ark-poly) Add support for multilinear extensions in dense and sparse evaluation form.
- #164 (ark-ff) Add methods
from_{be, le}_bytes_mod_order
to thePrimeField
trait. - #197 (ark-test-curves) Add a BN384 curve with low two-arity for mixed-radix testing.
- #22 (ark-ec) Speedup fixed-base MSMs
- #28 (ark-poly) Add
domain()
method on theevaluations
struct - #31 (ark-ec) Speedup point doubling on twisted edwards curves
- #35 (ark-ff) Implement
ToConstraintField
forbool
- #48 (ark-ff) Speedup
sqrt
onQuadExtField
- #94 (ark-ff) Implement
ToBytes
andFromBytes
foru128
- #99 (ark-poly) Speedup
evaluate_all_lagrange_coefficients
- #100 (ark-ff) Implement
batch_inverse_and_mul
- #101 (ark-ff) Add
element(i: usize)
on theDomain
trait. - #107 (ark-serialize) Add an impl of
CanonicalSerialize/Deserialize
forBTreeSet
. - #114 (ark-poly) Significantly speedup and reduce memory usage of
DensePolynomial.evaluate
. - #114, #119 (ark-poly) Add infrastructure for benchmarking
DensePolynomial
operations. - #115 (ark-poly) Add parallel implementation to operations on
Evaluations
. - #115 (ark-ff) Add parallel implementation of
batch_inversion
. - #122 (ark-poly) Add infrastructure for benchmarking
FFT
s. - #125 (ark-poly) Add parallelization to applying coset shifts within
coset_fft
. - #126 (ark-ec) Use
ark_ff::batch_inversion
for point normalization - #131, #137 (ark-ff) Speedup
sqrt
on fields when a square root exists. (And slows it down when doesn't exist) - #141 (ark-ff) Add
Fp64
- #144 (ark-poly) Add serialization for polynomials and evaluations
- #149 (ark-serialize) Add an impl of
CanonicalSerialize/Deserialize
forString
. - #153 (ark-serialize) Add an impl of
CanonicalSerialize/Deserialize
forRc<T>
. - #157 (ark-ec) Speed up
variable_base_msm
by not relying on unnecessary normalization. - #158 (ark-serialize) Add an impl of
CanonicalSerialize/Deserialize
for()
. - #166 (ark-ff) Add a
to_bytes_be()
andto_bytes_le
methods toBigInt
. - #169 (ark-poly) Improve radix-2 FFTs by moving to a faster algorithm by Riad S. Wahby.
- #171, #173, #176 (ark-poly) Apply significant further speedups to the new radix-2 FFT.
- #188 (ark-ec) Make Short Weierstrass random sampling result in an element with unknown discrete log
- #190 (ark-ec) Add curve cycle trait and extended pairing cycle trait for all types of ec cycles.
- #201 (ark-ec, ark-ff, ark-test-curves, ark-test-templates) Remove the dependency on
rand_xorshift
- #205 (ark-ec, ark-ff) Unroll loops and conditionally use intrinsics in
biginteger
arithmetic, and reduce copies inff
andec
arithmetic. - #207 (ark-ff) Improve performance of extension fields when the non-residue is negative. (Improves fq2, fq12, and g2 speed on bls12 and bn curves)
- #214 (ark-poly) Utilise a more efficient way of evaluating a polynomial at a single point
- #36 (ark-ec) In Short-Weierstrass curves, include an infinity bit in
ToConstraintField
. - #107 (ark-serialize) Fix handling of
(de)serialize_uncompressed/unchecked
in various impls ofCanonicalSerialize/Deserialize
. - #112 (ark-serialize) Make
bool
s checked serialization methods non-malleable. - #119 (ark-poly) Fix bugs in degree calculation if adding/subtracting same degree polynomials whose leading coefficients cancel.
- #160 (ark-serialize, ark-ff, ark-ec) Support serializing when
MODULUS_BITS FLAG_BITS
is greater than the multiple of 8 just greater thanMODULUS_BITS
, which is the case for the Pasta curves (fixes #47). - #165 (ark-ff) Enforce in the type system that an extension fields
BaseField
extends from the correctBasePrimeField
. - #184 Compile with
panic='abort'
in release mode, for safety of the library across FFI boundaries. - #192 Fix a bug in the assembly backend for finite field arithmetic.
- #217 (ark-ec) Fix the definition of
PairingFriendlyCycle
introduced in #190.