-
Notifications
You must be signed in to change notification settings - Fork 464
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Support passing both borrowed and owned Rngs #219
Conversation
Neat. I'm not sure if we can make this change, since it alters the type parameters on public API which is covered by a stability promise. |
I think this cannot break any existing code since |
IIUC you have published only a pre-release 1.0, so changing API at this stage will not count as breaking stability promise. UPD: Ah, you've already published 1.0 for this crate, pre-release is published only for ed25519. |
Thanks! This should be included in |
See discussion at #232 , copied below: `1.1` changed the trait bounds for `RistrettoPoint::random` and `Scalar::random`, see #222 and #219. These changes have two benefits: * they unlink us from the `rand` crate and make us depend only on `rand_core`; * they allow passing both owned and borrowed RNGs. The change was not supposed to be a breaking change, since the new bounds are strictly more general than the old ones (as every `RngCore` is an `Rng` and every `&mut RngCore` is an `RngCore`), so the new bound is satisfied in every situation where the old bound applied. The `1.1.0-pre.0` version didn't cause problems on the crates I tested it on, but there was an unexpected problem: https://github.com/interstellar/slingshot/blob/ce71c93a9a29ac3b4f69ce71feb987bd64d6c4ec/spacesuit/src/value.rs#L160-L161 broke, since it took a borrow as input and used it twice. So there was slight breakage. One option is to revert the changes (probably just the ones from #219) and release 1.1.3; another would be to fix up `slingshot` and leave the new bound.
Looks like it did break code that was taking in |
Interesting. It appears |
Rng was designed to support both &mut and owned usage like this.
It's slightly odd to do this on a method since Borrow exists for that, but this helps a lot with data types so one may as well use it.