bruh
This commit is contained in:
parent
6413513ee9
commit
1f51923832
|
@ -7,6 +7,8 @@ edition = "2021"
|
|||
|
||||
[dependencies]
|
||||
tiny-keccak = { version = "2.0", features = ["shake"] }
|
||||
aes = { version = "0.8.2" }
|
||||
rand = { version = "0.8.5" }
|
||||
nalgebra = { version = "0.32.2", optional = true }
|
||||
|
||||
[features]
|
||||
|
|
|
@ -1,4 +1,7 @@
|
|||
use crate::sig::KeyGen;
|
||||
use aes::Aes128;
|
||||
use rand::RngCore;
|
||||
use tiny_keccak::{Shake, Xof};
|
||||
|
||||
pub struct SigParams {
|
||||
m: u16,
|
||||
|
@ -10,12 +13,40 @@ pub struct SigParams {
|
|||
pk_seed_bytes: u8,
|
||||
}
|
||||
|
||||
// sk_seed_bytes = salt_bytes
|
||||
// R_bytes = salt_bytes
|
||||
// O_bytes = ceil((n - o)(o)/2)
|
||||
// v_bytes = ceil((n - o)/2)
|
||||
// P1_bytes = m*binom((n - o + 1), 2) / 2
|
||||
// P2_bytes = m * (n - o) * o / 2
|
||||
// P3_bytes = m * binom((o + 1), 2) / 2
|
||||
// L_bytes = m * (n - o) * o / 2
|
||||
// csk_bytes = salt_bytes
|
||||
// esk_bytes = salt_bytes + O_bytes + P1_bytes + L_bytes
|
||||
// cpk_bytes = pk_seed_bytes + P3_bytes
|
||||
// epk_bytes = P1_bytes + P2_bytes + P3_bytes
|
||||
// sig_bytes = ceil(nk / 2) + salt_bytes
|
||||
|
||||
pub struct SigningKey {
|
||||
v: VerifyKey,
|
||||
}
|
||||
|
||||
pub struct VerifyKey {}
|
||||
|
||||
impl KeyGen<SigParams> for SigningKey {
|
||||
fn gen(params: SigParams) -> Self {}
|
||||
impl<'a> KeyGen<'a, SigParams> for SigningKey {
|
||||
fn gen(params: SigParams, rand: &'a mut dyn RngCore) -> Self {
|
||||
let sk_seed_bytes = params.salt_bytes as usize;
|
||||
|
||||
// Pick seed_sk at random
|
||||
let mut seed_sk: Vec<u8> = vec![0; sk_seed_bytes];
|
||||
rand.fill_bytes(&mut seed_sk);
|
||||
|
||||
// Derive seed_pk and O from seed_sk
|
||||
let mut shake = Shake::v256();
|
||||
let O_bytes = ((((params.n - params.o) as usize) * (params.o as usize)) + 1) / 2;
|
||||
let mut S = vec![0; params.pk_seed_bytes as usize + O_bytes];
|
||||
shake.squeeze(&mut S);
|
||||
|
||||
SigningKey { v: VerifyKey {} }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
pub trait KeyGen<P> {
|
||||
fn gen(params: P) -> Self;
|
||||
use rand::RngCore;
|
||||
|
||||
pub trait KeyGen<'a, P> {
|
||||
fn gen(params: P, rand: &'a mut dyn RngCore) -> Self;
|
||||
}
|
||||
|
||||
pub trait Signer<S> {
|
||||
|
|
Loading…
Reference in New Issue
Block a user