Skip to content

Commit

Permalink
Merge pull request #5786 from oasisprotocol/peternose/trivial/reorgan…
Browse files Browse the repository at this point in the history
…ize-secret-sharing

secret-sharing: Reorganize library
  • Loading branch information
peternose committed Jul 23, 2024
2 parents ca0105a + 85c5624 commit 255937f
Show file tree
Hide file tree
Showing 31 changed files with 113 additions and 104 deletions.
Empty file added .changelog/5786.trivial.md
Empty file.
6 changes: 2 additions & 4 deletions keymanager/src/churp/handler.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,11 +36,9 @@ use oasis_core_runtime::{
use secret_sharing::{
churp::{encode_shareholder, Dealer, Handoff, HandoffKind, Shareholder, VerifiableSecretShare},
kdc::KeySharer,
poly::{scalar_from_bytes, scalar_to_bytes},
suites::{p384, Suite},
vss::{
matrix::VerificationMatrix,
scalar::{scalar_from_bytes, scalar_to_bytes},
},
vss::VerificationMatrix,
};

use crate::{
Expand Down
8 changes: 4 additions & 4 deletions keymanager/src/churp/storage.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ pub use std::{convert::TryInto, sync::Arc};

use anyhow::Result;
use group::{ff::PrimeField, Group, GroupEncoding};
use secret_sharing::{churp::VerifiableSecretShare, vss::polynomial::BivariatePolynomial};
use secret_sharing::{churp::VerifiableSecretShare, poly::BivariatePolynomial};
use sgx_isa::Keypolicy;

use oasis_core_runtime::{
Expand Down Expand Up @@ -260,7 +260,7 @@ mod tests {

use secret_sharing::{
churp::{SecretShare, VerifiableSecretShare},
vss::{matrix, polynomial},
poly, vss,
};

use crate::churp::storage::{
Expand All @@ -273,8 +273,8 @@ mod tests {

type PrimeField = p384::Scalar;
type Group = p384::ProjectivePoint;
type BivariatePolynomial = polynomial::BivariatePolynomial<PrimeField>;
type VerificationMatrix = matrix::VerificationMatrix<Group>;
type BivariatePolynomial = poly::BivariatePolynomial<PrimeField>;
type VerificationMatrix = vss::VerificationMatrix<Group>;

#[test]
fn test_unique_seal_contexts() {
Expand Down
7 changes: 2 additions & 5 deletions keymanager/src/churp/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,8 @@ use oasis_core_runtime::{

use secret_sharing::{
churp::{SecretShare, VerifiableSecretShare},
vss::{
matrix::VerificationMatrix,
polynomial::{EncryptedPoint, Polynomial},
scalar::{scalar_from_bytes, scalar_to_bytes},
},
poly::{scalar_from_bytes, scalar_to_bytes, EncryptedPoint, Polynomial},
vss::VerificationMatrix,
};

use crate::crypto::KeyPairId;
Expand Down
2 changes: 1 addition & 1 deletion keymanager/src/client/remote.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,8 @@ use oasis_core_runtime::{
use secret_sharing::{
churp::{HandoffKind, Player},
kdc::KeyRecoverer,
poly::EncryptedPoint,
suites::{p384, Suite},
vss::polynomial::EncryptedPoint,
};

use crate::{
Expand Down
2 changes: 1 addition & 1 deletion secret-sharing/src/churp/dealer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use anyhow::Result;
use group::{Group, GroupEncoding};
use rand_core::RngCore;

use crate::vss::{matrix::VerificationMatrix, polynomial::BivariatePolynomial};
use crate::{poly::BivariatePolynomial, vss::VerificationMatrix};

use super::{Error, HandoffKind, SecretShare};

Expand Down
2 changes: 1 addition & 1 deletion secret-sharing/src/churp/handoff.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ use std::sync::Arc;
use anyhow::Result;
use group::{Group, GroupEncoding};

use crate::vss::matrix::VerificationMatrix;
use crate::vss::VerificationMatrix;

use super::{DimensionSwitch, Error, Shareholder, VerifiableSecretShare};

Expand Down
2 changes: 1 addition & 1 deletion secret-sharing/src/churp/player.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ use std::iter::zip;
use anyhow::{bail, Result};
use group::ff::PrimeField;

use crate::{kdc::KeyRecoverer, vss::lagrange};
use crate::{kdc::KeyRecoverer, poly::lagrange};

use super::{HandoffKind, SecretShare};

Expand Down
4 changes: 1 addition & 3 deletions secret-sharing/src/churp/shareholder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,7 @@ use group::{
};

use crate::{
kdc::PointShareholder,
suites::FieldDigest,
vss::{matrix::VerificationMatrix, polynomial::Polynomial},
kdc::PointShareholder, poly::Polynomial, suites::FieldDigest, vss::VerificationMatrix,
};

use super::Error;
Expand Down
14 changes: 7 additions & 7 deletions secret-sharing/src/churp/switch.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ use std::sync::{Arc, Mutex};
use anyhow::Result;
use group::{Group, GroupEncoding};

use crate::vss::{
lagrange::lagrange, matrix::VerificationMatrix, polynomial::Polynomial,
vector::VerificationVector,
use crate::{
poly::{lagrange::lagrange, Polynomial},
vss::{VerificationMatrix, VerificationVector},
};

use super::{Error, HandoffKind, SecretShare, Shareholder, VerifiableSecretShare};
Expand Down Expand Up @@ -610,18 +610,18 @@ mod tests {

use crate::{
churp::{HandoffKind, SecretShare, VerifiableSecretShare},
poly,
suites::{self, p384},
vss::{matrix, polynomial},
vss,
};

use super::{BivariateShares, DimensionSwitchKind, Error, SwitchPoints};

type Suite = p384::Sha3_384;
type Group = <Suite as suites::Suite>::Group;
type PrimeField = <Suite as suites::Suite>::PrimeField;
type BivariatePolynomial =
polynomial::BivariatePolynomial<<Suite as suites::Suite>::PrimeField>;
type VerificationMatrix = matrix::VerificationMatrix<<Suite as suites::Suite>::Group>;
type BivariatePolynomial = poly::BivariatePolynomial<<Suite as suites::Suite>::PrimeField>;
type VerificationMatrix = vss::VerificationMatrix<<Suite as suites::Suite>::Group>;

fn prepare_shareholder(id: u64) -> PrimeField {
id.into()
Expand Down
2 changes: 1 addition & 1 deletion secret-sharing/src/kdc/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ use anyhow::{bail, Result};
use group::{ff::PrimeField, Group};

use crate::{
poly::{lagrange, EncryptedPoint},
suites::GroupDigest,
vss::{lagrange, polynomial::EncryptedPoint},
};

/// A trait for shareholders which hold a secret share point on a secret-sharing
Expand Down
1 change: 1 addition & 0 deletions secret-sharing/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@

pub mod churp;
pub mod kdc;
pub mod poly;
pub mod shamir;
pub mod suites;
pub mod vss;
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use group::ff::PrimeField;
use rand_core::RngCore;

use crate::vss::{arith::powers, scalar::scalar_from_bytes};
use crate::poly::{powers, scalar_from_bytes};

use super::Polynomial;

Expand Down
54 changes: 54 additions & 0 deletions secret-sharing/src/poly/fuzz/main.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
use group::ff::PrimeField;
use honggfuzz::fuzz;
use rand::{rngs::StdRng, Rng, SeedableRng};

fn main() {
loop {
fuzz!(|data: &[u8]| {
fuzz_bivariate_polynomial_random(data);
fuzz_bivariate_polynomial_from_seed(data);
fuzz_bivariate_polynomial_from_bytes(data);
});
}
}

fn fuzz_bivariate_polynomial_random(data: &[u8]) {
BivariatePolynomial::<p384::Scalar>::from_bytes(data.to_vec());
}

fn fuzz_bivariate_polynomial_from_seed(data: &[u8]) {
if data.len() < 32 {
return;
}

let bp = random_bivariate_polynomial(data);
let restored = BivariatePolynomial::<p384::Scalar>::from_bytes(bp.to_bytes())
.expect("deserialization should succeed");
assert!(bp == restored)
}

fn fuzz_bivariate_polynomial_from_bytes(data: &[u8]) {
if data.len() < 2 {
return;
}

let deg_x = data[0] % 5;
let deg_y = data[1] % 5;
let len = BivariatePolynomial::<p384::Scalar>::byte_size(deg_x as usize, deg_y as usize);
let size = BivariatePolynomial::<p384::Scalar>::coefficient_byte_size();

if data.len() < len {
return;
}

let mut bytes = data[..len].to_vec();
bytes[0] = deg_x;
bytes[1] = deg_y;

// Make sure all values are smaller that the modulus.
for i in (2..len).step_by(size) {
bytes[i] = 0;
}

BivariatePolynomial::<p384::Scalar>::from_bytes(bytes).expect("decoding should succeed");
}
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ use std::iter::zip;

use group::ff::PrimeField;

use crate::vss::polynomial::Polynomial;
use crate::poly::Polynomial;

/// Returns the Lagrange interpolation polynomial for the given set of points.
///
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use std::iter::zip;

use group::ff::PrimeField;

use crate::vss::polynomial::Polynomial;
use crate::poly::Polynomial;

use super::multiplier::Multiplier;

Expand Down
17 changes: 17 additions & 0 deletions secret-sharing/src/poly/mod.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
//! This package provides comprehensive tools for working with polynomials.
//!
//! Features include:
//!
//! - Univariate and bivariate polynomials
//! - Evaluation of points on polynomials
//! - Lagrange interpolation methods

mod arith;
mod bivariate;
pub mod lagrange;
mod point;
mod scalar;
mod univariate;

// Re-exports.
pub use self::{arith::*, bivariate::*, point::*, scalar::*, univariate::*};
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ mod tests {
use group::ff::Field;
use rand::{rngs::StdRng, SeedableRng};

use crate::vss::scalar::{scalar_from_bytes, scalar_to_bytes};
use super::{scalar_from_bytes, scalar_to_bytes};

type PrimeField = p384::Scalar;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ use std::{
use group::ff::PrimeField;
use rand_core::RngCore;

use crate::vss::{arith::powers, scalar::scalar_from_bytes};
use crate::poly::{powers, scalar_from_bytes};

/// Univariate polynomial over a non-binary prime field.
///
Expand Down
2 changes: 1 addition & 1 deletion secret-sharing/src/shamir/dealer.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use group::ff::PrimeField;
use rand::RngCore;

use crate::vss::polynomial::{Point, Polynomial};
use crate::poly::{Point, Polynomial};

/// A holder of the secret-sharing polynomial responsible for generating
/// secret shares.
Expand Down
2 changes: 1 addition & 1 deletion secret-sharing/src/shamir/player.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ use group::ff::PrimeField;

use crate::{
kdc::KeyRecoverer,
vss::{lagrange, polynomial::Point},
poly::{lagrange, Point},
};

/// A constructor of the shared secret.
Expand Down
2 changes: 1 addition & 1 deletion secret-sharing/src/shamir/shareholder.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use group::ff::PrimeField;

use crate::{kdc::PointShareholder, vss::polynomial::Point};
use crate::{kdc::PointShareholder, poly::Point};

/// A holder of a secret share.
pub struct Shareholder<F> {
Expand Down
47 changes: 1 addition & 46 deletions secret-sharing/src/vss/fuzz/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,62 +2,17 @@ use group::ff::PrimeField;
use honggfuzz::fuzz;
use rand::{rngs::StdRng, Rng, SeedableRng};

use secret_sharing::vss::{matrix::VerificationMatrix, polynomial::BivariatePolynomial};
use secret_sharing::{poly::BivariatePolynomial, vss::VerificationMatrix};

fn main() {
loop {
fuzz!(|data: &[u8]| {
fuzz_bivariate_polynomial_random(data);
fuzz_bivariate_polynomial_from_seed(data);
fuzz_bivariate_polynomial_from_bytes(data);

fuzz_verification_matrix_random(data);
fuzz_verification_matrix_from_seed(data);
});
}
}

fn fuzz_bivariate_polynomial_random(data: &[u8]) {
BivariatePolynomial::<p384::Scalar>::from_bytes(data.to_vec());
}

fn fuzz_bivariate_polynomial_from_seed(data: &[u8]) {
if data.len() < 32 {
return;
}

let bp = random_bivariate_polynomial(data);
let restored = BivariatePolynomial::<p384::Scalar>::from_bytes(bp.to_bytes())
.expect("deserialization should succeed");
assert!(bp == restored)
}

fn fuzz_bivariate_polynomial_from_bytes(data: &[u8]) {
if data.len() < 2 {
return;
}

let deg_x = data[0] % 5;
let deg_y = data[1] % 5;
let len = BivariatePolynomial::<p384::Scalar>::byte_size(deg_x as usize, deg_y as usize);
let size = BivariatePolynomial::<p384::Scalar>::coefficient_byte_size();

if data.len() < len {
return;
}

let mut bytes = data[..len].to_vec();
bytes[0] = deg_x;
bytes[1] = deg_y;

// Make sure all values are smaller that the modulus.
for i in (2..len).step_by(size) {
bytes[i] = 0;
}

BivariatePolynomial::<p384::Scalar>::from_bytes(bytes).expect("decoding should succeed");
}

fn fuzz_verification_matrix_random(data: &[u8]) {
VerificationMatrix::<p384::ProjectivePoint>::from_bytes(data);
}
Expand Down
10 changes: 4 additions & 6 deletions secret-sharing/src/vss/matrix.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,9 @@ use std::{cmp::max, ops::Add};

use group::{Group, GroupEncoding};

use super::{
arith::powers,
polynomial::{BivariatePolynomial, Polynomial},
vector::VerificationVector,
};
use crate::poly::{powers, BivariatePolynomial, Polynomial};

use super::VerificationVector;

/// Verification matrix for a bivariate polynomial.
///
Expand Down Expand Up @@ -338,7 +336,7 @@ mod tests {
use group::Group;
use rand::{rngs::StdRng, SeedableRng};

use crate::vss::matrix::VerificationMatrix;
use crate::vss::VerificationMatrix;

use super::BivariatePolynomial;

Expand Down
Loading

0 comments on commit 255937f

Please sign in to comment.