Update to FROST v8

This commit is contained in:
Luke Parker
2022-08-26 05:59:43 -04:00
parent 4881ddae87
commit a8a00598e4
7 changed files with 96 additions and 98 deletions

View File

@@ -16,13 +16,18 @@ macro_rules! dalek_curve {
$ID: literal,
$CONTEXT: literal,
$chal: literal,
$digest: literal,
$chal: literal,
) => {
use dalek_ff_group::{$Point, $POINT};
#[derive(Clone, Copy, PartialEq, Eq, Debug, Zeroize)]
pub struct $Curve;
impl $Curve {
fn hash(dst: &[u8], data: &[u8]) -> Sha512 {
Sha512::new().chain_update(&[$CONTEXT.as_ref(), dst, data].concat())
}
}
impl Curve for $Curve {
type F = Scalar;
type G = $Point;
@@ -33,21 +38,12 @@ macro_rules! dalek_curve {
$POINT
}
fn hash_msg(msg: &[u8]) -> Vec<u8> {
Sha512::new()
.chain_update($CONTEXT)
.chain_update($digest)
.chain_update(msg)
.finalize()
.to_vec()
fn hash_to_vec(dst: &[u8], data: &[u8]) -> Vec<u8> {
Self::hash(dst, data).finalize().to_vec()
}
fn hash_binding_factor(binding: &[u8]) -> Self::F {
Self::hash_to_F(b"rho", binding)
}
fn hash_to_F(dst: &[u8], msg: &[u8]) -> Self::F {
Scalar::from_hash(Sha512::new().chain_update($CONTEXT).chain_update(dst).chain_update(msg))
fn hash_to_F(dst: &[u8], data: &[u8]) -> Self::F {
Scalar::from_hash(Self::hash(dst, data))
}
}
@@ -56,7 +52,13 @@ macro_rules! dalek_curve {
impl Hram<$Curve> for $Hram {
#[allow(non_snake_case)]
fn hram(R: &$Point, A: &$Point, m: &[u8]) -> Scalar {
$Curve::hash_to_F($chal, &[&R.compress().to_bytes(), &A.compress().to_bytes(), m].concat())
let mut hash = Sha512::new();
if $chal.len() != 0 {
hash.update(&[$CONTEXT.as_ref(), $chal].concat());
}
Scalar::from_hash(
hash.chain_update(&[&R.compress().to_bytes(), &A.compress().to_bytes(), m].concat()),
)
}
}
};
@@ -69,9 +71,8 @@ dalek_curve!(
RistrettoPoint,
RISTRETTO_BASEPOINT_POINT,
b"ristretto",
b"FROST-RISTRETTO255-SHA512-v5",
b"FROST-RISTRETTO255-SHA512-v8",
b"chal",
b"digest",
);
#[cfg(feature = "ed25519")]
@@ -81,7 +82,6 @@ dalek_curve!(
EdwardsPoint,
ED25519_BASEPOINT_POINT,
b"edwards25519",
b"",
b"",
b"FROST-ED25519-SHA512-v8",
b"",
);