w3f / ring-vrf

MIT License
39 stars 17 forks source link

ark-secret-scalar via atomics #52

Open burdges opened 1 year ago

burdges commented 1 year ago

ark_secret_scalar::SecretScalar: !Sync due to its UnsafeCell. Although Mutex works, we could've some less strictly synchronized flavor in which readers access a different secret from the one mutator. We've several plausible approaches but maybe: Anytime a reader finishes then they attempt to point readers to a secret with zero readers, provided one exists. If you're the last reader on a secret then you mutate it before zeroing the readers counter. It looks safe if you're three secrets.

pub struct InnerSecretScalar {
    readers: AtomicUsize,
    secrets: [F; 2],
}
pub struct SecretScalar {
    reader: AtomicUsize,
    inners: [InnerSecretScalar; 3]
}

We should simply implement constant time curves instead. lol