frost-core v2.0.0-rc.0
conradoplg
released this
20 Jun 18:27
·
28 commits
to main
since this release
- Changed the
deserialize()
function of Elements and structs containing
Elements to return an error if the element is the identity. This is a
requirement in the FROST specification that wasn't being followed. We are not
aware of any possible security issues that could be caused by this; in the
unlikely case that the identity was being serialized, this would be caught by
deserialization methods. However, we consider this change the right thing to
do as a defense-in-depth mechanism. This entails the following changes:Group::serialize()
now returns an error. When implementing it, you must
return an error if it attempts to serialize the identity.VerifyingShare::serialize()
,CoefficientCommitment::serialize()
,
VerifiableSecretSharingCommitment::serialize()
,
NonceCommitment::serialize()
,Signature::serialize()
,
VerifyingKey::serialize()
can now all return an error.
- Changed the
serialize()
anddeserialize()
methods of all Scalar- and
Element-wrapping structs; instead of taking or returning a
Field::Serialization
orElement::Serialization
trait (which are usually
defined by ciphersuites as arrays of specific sizes), they simply respectively
take&[u8]
and returnVec<u8>
, exactly as the other structs, which should
greatly simplify non-serde serialization code. You can port existing code with
e.g.x.serialize().as_ref()
->x.serialize()
and
X::deserialize(bytes.try_into().unwrap())
->X::deserialize(&bytes)
. - Removed the
ops::{Mul, MulAssign, Sub}
implementation forIdentifier
.
These were being used internally, but library users shouldn't need to use them.
If you have low-level code that relied on it, useIdentifier::{new, to_scalar}
to handle the underlying scalar. - Removed
batch::Item::into()
which created a batch Item from a triple of
VerifyingKey, Signature and message. Use the newbatch::Item::new()
instead
(which can return an error). - Add no-std support to all crates except frost-ed448. To use, do not enable the
std
feature that is enabled by default (i.e. usedefault-features = false
); Note that it always links to an externalalloc
crate (i.e. there is
noalloc
feature). When disablingstd
, the only impact in the API is that
Error
will no longer implement thestd::error::Error
trait. This is a
breaking change if you are disabling default features but rely onError
implementingstd::error::Error
. In that case, simply enable thestd
feature. - Fixed
no-default-features
, previously it wouldn't compile. - Fixed some feature handling that would include unneeded dependencies in some
cases.