-
Notifications
You must be signed in to change notification settings - Fork 56
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
Feature wishlist tracking ticket #1
Comments
|
@mikelodder7 added to the list random < n implemented in RustCrypto/utils#508. Will cut a release with that fairly soon. Re: signed integers, yes that's definitely planned but not on this list yet, so thanks. Tentatively the idea is composing in terms of a Edit: released in v0.2.2 (#509) |
How about bit tests? Check if bit at position |
@mikelodder7 what kind of API are you looking for there? Would a |
Choice will suffice. Vartime not necessary. |
Fast generation of safe primes would be great for RSA applications. |
It’s also great for applications that require groups of unknown order based on prime factoring like accumulator, paillier, camenisch-shoup verifiable encryption |
I'd like to add a +1 for implementing |
@mikelodder7 it looks like it might be interesting to adapt the code in |
Of course. Glass pumpkin is already licensed as Apache 2 so adapting to be dual licensed is fine too. Consider this post my legal binding statement to authorize that work. |
It will be nice to have it integrated directly into the big int library vs a bolt-on. Many operations can be simplified since the underlying int rep is accessible. We'll need |
Absolutely, that'd be the goal. Generic modpow seems a bit tricky, or at least our last attempt at it didn't work. One option would be to have a trait for it, and implement it for specific moduli. |
What about using modular square and modular multiply and using conditional_select if the exponent bit is 1? Does that not work? |
To be clear @dignifiedquire tried to add generic mulmod in RustCrypto/utils#510 but it was buggy so we backed it out. It would be great to have a generic implementation. |
Doing a "better random < n" with swiftlang/swift#39143 in bigint is expensive compared to correct bigint rejection sampling (see RustCrypto/utils#618). As that requires multiplication of the modulus and a random number about 128 bits larger than the modulus. Basically that's O(N^2) vs O(N). |
I'll get there, soon (TM) |
Need to update this list with completed features @tarcieri |
@mikelodder7 should be updated now |
Modular exponentiation? |
It's under "modular arithmetic" as "pow". Hmm "sqrt" and "inversions" should be under the "modular arithmetic" section. |
Sorry, I reorganized the modular arithmetic section, and missed a few things along the way. Note there is |
Oh I missed that. Is the other "sqrt" for P.S. I just re-found the edit history button and "pow" was added after @newpavlov's question. I thought there was edit history but it wasn't in the "…" menu. |
The other sqrt is for generic number sqrt versus modular sqrt which can take some optimizations. |
Both are important. Integer sqrt is used in the Lucas test for prime numbers for example. |
Modular sqrt could potentially be helpful for the elliptic curve crates, although we're presently using an algorithm (Tonelli-Shank) specialized to the modulus (q mod 16 = 1). I'm not sure what the best algorithm to use which isn't specialized to the modulus, or if it would make sense to select an algorithm based on the modulus size. The latter might make more sense if the modulus were a const generic parameter so the best algorithm could be selected at compile time. |
I would suggest having the different algorithms behind specific methods, such that downstream implementors can choose the algorithm, eg |
Would completing full num_traits::PrimInt implementation to be a good goal ? I made a test branch with stubbed out functions here, it's not too hard to complete - with an optional The main reason is it allows easily writing generic algos that take |
Optional I would suggest following the same pattern as all the other functions that can presently support it which are currently impl'd on Based on a cursory survey of Edit: opened #158 to track |
Seems like it can be updated, all the modular arithmetic is done, and random primes are implemented by |
Should there be regular |
@pinkforest all of the functionality in this crate is directly motivated by a specific cryptographic algorithm the functionality is intended to implement. What would be the purpose? Modular exponentiation is useful for DSA and RSA, but to my knowledge we have no use case for a non-modular We also implement fixed, not arbitrary, precision, and a non-modular |
Thanks - Yeah my naive use-case was 1:1 porting existing use of vartime bigint and now think I should have skipped that - Specifically deterministic RSA prime factor recovery as described by NIST.SP.800-56Br2 Appendix C.2 as was in rsa crate. I should have re-evaluated it given the type for |
This is a ticket for tracking desired new features for
crypto-bigint
and which algorithms should be used in order to implement particular features.Unless otherwise stated, these features are implied to be for the
UInt
type.UInt
)elliptic-curve
crates)subtle
comparisonsConstantTimeEq
ConstantTimeGreater
ConstantTimeLess
https://eprint.iacr.org/2020/1507(note: appears to be covered by patents)better random < nrandom prime(usecrypto-primes
instead)NOTE: for prime number support, see the
crypto-primes
crateThe text was updated successfully, but these errors were encountered: