Brand: icon and wordmark PNG set for email and profiles

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
igneum-labs 2026-10-03 16:21:33 +00:00
parent 39008cb1a1
commit ffa7d5de48
11 changed files with 21 additions and 19 deletions

1
.gitignore vendored
View file

@ -14,3 +14,4 @@ vendor/
.env*
sim/__pycache__/
*.pyc
brand/Unbounded.ttf

BIN
brand/igneum-icon-1024.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

BIN
brand/igneum-icon-512.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

View file

@ -197,9 +197,13 @@ struct ProofTiming {
}
fn time_proof<G: Group>(g: &G, x: &G::Elem, t: u64, threads: usize, kappa_opt: Option<u32>) -> ProofTiming {
let spacing0 = wesolowski::choose_spacing(t, 1 << 16);
let kappa = kappa_opt.unwrap_or_else(|| seed::pick_kappa(spacing0));
let spacing = (spacing0 - spacing0 % kappa as u64).max(kappa as u64);
let (spacing, kappa) = match kappa_opt {
None => seed::plan(t),
Some(k) => {
let gamma = ((t + (k as u64) * seed::MAX_CHECKPOINTS - 1) / ((k as u64) * seed::MAX_CHECKPOINTS)).max(1);
(k as u64 * gamma, k)
}
};
let ev = wesolowski::eval(g, x, t, spacing);
let s = Instant::now();
let pf1 = wesolowski::prove(g, x, &ev, kappa, 1);

View file

@ -30,7 +30,7 @@ impl RsaGroup {
let s = sha256(&[b"igneum-vdf-rsa-standin", seed.as_bytes()]);
rs.seed(&Integer::from_digits(&s, Order::MsfBe));
let half = MODULUS_BITS / 2;
let mut gen_prime = |rs: &mut RandState| -> Integer {
let gen_prime = |rs: &mut RandState| -> Integer {
let mut p = Integer::from(Integer::random_bits(half, rs));
p.set_bit(half - 1, true);
p.set_bit(half - 2, true);

View file

@ -44,10 +44,7 @@ fn derive_seed(checkpoint_hash: &[u8; 32], t: u64, y_bytes: &[u8]) -> [u8; 32] {
pub fn epoch_seed(checkpoint_hash: &[u8; 32], t: u64, threads: usize) -> ([u8; 32], EpochProof) {
let g = class_group_for(checkpoint_hash);
let x: Form = g.generator();
let spacing = wesolowski::choose_spacing(t, 1 << 16);
let kappa = pick_kappa(spacing);
let spacing = spacing - spacing % kappa as u64;
let spacing = spacing.max(kappa as u64);
let (spacing, kappa) = plan(t);
let ev = wesolowski::eval(&g, &x, t, spacing);
let proof = wesolowski::prove(&g, &x, &ev, kappa, threads);
let y_bytes = g.serialize(&proof.y);
@ -76,9 +73,7 @@ pub fn verify_epoch_seed(checkpoint_hash: &[u8; 32], program_seed: &[u8; 32], pr
/// Same pipeline over the RSA stand-in, for timing comparison only.
pub fn epoch_seed_rsa(g: &RsaGroup, checkpoint_hash: &[u8; 32], t: u64, threads: usize) -> ([u8; 32], EpochProof) {
let x = g.hash_to_elem(checkpoint_hash);
let spacing = wesolowski::choose_spacing(t, 1 << 16);
let kappa = pick_kappa(spacing);
let spacing = (spacing - spacing % kappa as u64).max(kappa as u64);
let (spacing, kappa) = plan(t);
let ev = wesolowski::eval(g, &x, t, spacing);
let proof = wesolowski::prove(g, &x, &ev, kappa, threads);
let y_bytes = g.serialize(&proof.y);
@ -102,12 +97,14 @@ pub fn verify_epoch_seed_rsa(g: &RsaGroup, checkpoint_hash: &[u8; 32], program_s
derive_seed(checkpoint_hash, proof.t, &proof.y) == *program_seed
}
/// Digit width: 12 bits when the spacing allows it, smaller for tiny T.
pub fn pick_kappa(spacing: u64) -> u32 {
for k in [12u32, 10, 8, 6, 4, 2, 1] {
if spacing >= (k as u64) * 4 || k == 1 {
return k;
}
}
1
/// Proof plan: digit width kappa and checkpoint spacing kappa * gamma.
/// Cost of the proof is about T/kappa + gamma 2^(kappa+1) group multiplications, memory is
/// T/spacing checkpoints. We cap checkpoints near 2^16 (17 MB for 1024-bit forms) and use
/// 12-bit digits once T is large enough for the bucket combine to be negligible.
pub fn plan(t: u64) -> (u64, u32) {
let kappa: u32 = if t >= 1 << 16 { 12 } else if t >= 1 << 10 { 8 } else { 4 };
let gamma = ((t + (kappa as u64) * MAX_CHECKPOINTS - 1) / ((kappa as u64) * MAX_CHECKPOINTS)).max(1);
(kappa as u64 * gamma, kappa)
}
pub const MAX_CHECKPOINTS: u64 = 1 << 16;