Initial project import
This commit is contained in:
commit
23f2d29e32
11957 files changed
+1754577
No files matched your search
@@ -0,0 +1,129 @@
|
||||
// Copyright 2025 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
//
|
||||
// Ported to V from Go's crypto/internal/fips140/mldsa.
|
||||
module mldsa
|
||||
|
||||
// s. 4, table 1
|
||||
pub enum Kind {
|
||||
ml_dsa_44
|
||||
ml_dsa_65
|
||||
ml_dsa_87
|
||||
}
|
||||
|
||||
fn (k Kind) params() Params {
|
||||
return match k {
|
||||
.ml_dsa_44 { params_44 }
|
||||
.ml_dsa_65 { params_65 }
|
||||
.ml_dsa_87 { params_87 }
|
||||
}
|
||||
}
|
||||
|
||||
pub fn (k Kind) public_key_size() int {
|
||||
return pub_key_size(k.params())
|
||||
}
|
||||
|
||||
pub fn (k Kind) private_key_size() int {
|
||||
return priv_key_size(k.params())
|
||||
}
|
||||
|
||||
pub fn (k Kind) signature_size() int {
|
||||
return sig_size(k.params())
|
||||
}
|
||||
|
||||
// FIPS 204 s. 5.4: approved pre-hash functions for HashML-DSA.
|
||||
pub enum PreHash {
|
||||
none // pure ML-DSA (default)
|
||||
sha2_224
|
||||
sha2_256
|
||||
sha2_384
|
||||
sha2_512
|
||||
sha2_512_224
|
||||
sha2_512_256
|
||||
sha3_224
|
||||
sha3_256
|
||||
sha3_384
|
||||
sha3_512
|
||||
shake_128
|
||||
shake_256
|
||||
}
|
||||
|
||||
@[params]
|
||||
pub struct SignerOpts {
|
||||
pub:
|
||||
context string
|
||||
deterministic bool
|
||||
prehash PreHash
|
||||
}
|
||||
|
||||
struct Params {
|
||||
k int
|
||||
l int
|
||||
eta int
|
||||
gamma1 int
|
||||
gamma2 int
|
||||
lambda int
|
||||
tau int
|
||||
omega int
|
||||
}
|
||||
|
||||
// s. 4, table 1
|
||||
const params_44 = Params{
|
||||
k: 4
|
||||
l: 4
|
||||
eta: 2
|
||||
gamma1: 17
|
||||
gamma2: 88
|
||||
lambda: 128
|
||||
tau: 39
|
||||
omega: 80
|
||||
}
|
||||
|
||||
const params_65 = Params{
|
||||
k: 6
|
||||
l: 5
|
||||
eta: 4
|
||||
gamma1: 19
|
||||
gamma2: 32
|
||||
lambda: 192
|
||||
tau: 49
|
||||
omega: 55
|
||||
}
|
||||
|
||||
const params_87 = Params{
|
||||
k: 8
|
||||
l: 7
|
||||
eta: 2
|
||||
gamma1: 19
|
||||
gamma2: 32
|
||||
lambda: 256
|
||||
tau: 60
|
||||
omega: 75
|
||||
}
|
||||
|
||||
pub const seed_size = 32
|
||||
|
||||
// s. 4, table 2
|
||||
pub const public_key_size_44 = 32 + 4 * n * 10 / 8
|
||||
pub const public_key_size_65 = 32 + 6 * n * 10 / 8
|
||||
pub const public_key_size_87 = 32 + 8 * n * 10 / 8
|
||||
|
||||
// s. 4, table 2
|
||||
pub const signature_size_44 = 128 / 4 + 4 * n * (17 + 1) / 8 + 80 + 4
|
||||
pub const signature_size_65 = 192 / 4 + 5 * n * (19 + 1) / 8 + 55 + 6
|
||||
pub const signature_size_87 = 256 / 4 + 7 * n * (19 + 1) / 8 + 75 + 8
|
||||
|
||||
fn pub_key_size(p Params) int {
|
||||
return 32 + p.k * n * 10 / 8
|
||||
}
|
||||
|
||||
fn priv_key_size(p Params) int {
|
||||
eta_bitlen := bits_len(u32(p.eta * 2))
|
||||
// rho + K + tr + l*n*eta-bit s1 + k*n*eta-bit s2 + k*n*13-bit t0
|
||||
return 32 + 32 + 64 + p.l * n * eta_bitlen / 8 + p.k * n * eta_bitlen / 8 + p.k * n * 13 / 8
|
||||
}
|
||||
|
||||
fn sig_size(p Params) int {
|
||||
return (p.lambda / 4) + p.l * n * (p.gamma1 + 1) / 8 + p.omega + p.k
|
||||
}
|
||||
Reference in new issue
Block a user