[pycrypto] Comments on Elgamal, and a broader question: Whither pycrypto?

Thorsten Behrens sbehrens at gmx.li
Sun Jan 2 17:35:52 CST 2011

On 1/2/2011 4:49 PM, Lorenz Quack wrote:
> Just for the record: a "safe prime" is *not* the same thing as a "strong prime". [...]
> pycrypto has a function for generating "strong primes" (getStrongPrime()) but not for safe primes.
Correct. Also, elgamal.py doesn't call the function for strong primes. 
Much less safe primes, since we don't have one of those :)

> Wow! I was not aware that there is an ongoing stdlib-crypto discussion. Thanks a lot!
Of course. Martin v. Loewis asked the participants there: Absent user 
input, what do the experts think? And by "experts",
he explicitly referred to the pycrypto maintainers. That's you guys. I 
think it makes a lot of sense to plug you into
the discussion.

> Here are my 2 cents:
> When I was looking for a python crypto package I chose pycrypto mainly for two reasons.
> 1) It had the fewest dependencies. Only the optionally (though highly recommended) libgmp.
Okay, I get that. A pycrypto-next that wraps existing libraries would 
break that. This is something to weigh against the (very real) 
difficulty of writing and maintaining a body of secure crypto routines.

Hybrid models are possible. We could snag low-level crypto primitives as 
source from Crypto++ and tomlib, and wrap "pythonic" things around those.

> 2) The API was more pythonic than many libraries that only wrap the calls to C-functions of underlying libraries.
Absolutely, that's a great strength. I'd like to see that extended to a 
stronger API for public key crypto, message padding and secure key 

> Some people say that pycrypto should not implement the crypto primitives but rather us existing libraries. While I do
> understand the rationale behind such a statement, I have to voice my opposition. AFAIK there are already python bindings
> for virtually every major crypto library [1-3]. The only issue with those libraries might be the API but I would suggest
> that one first tries to persuade the maintainers to adopt a more PEP 272 like API.
Okay, that's a really good point. You make the point, if I understand 
you right, that pycrypto does not need to be what others already are, 
and there's something to be said for having less dependencies.

How, then, do we go about offering secure implementations of crypto 
primitives, however?

> Instead I would suggest to slim down pycrypto. Support one or two of each: block cipher, public key crypto, Hash
> function. Try to harden their implementation and then move to provide a good upper layer which takes care of padding,
> envelope encryption and so on.
I see. So, make an effort to provide the most pertinent algorithms. Do 
not provide everything-under-the-Sun. Leave existing stuff in for 
backwards compatibility. Then, once that is done, provide an additional 
layer that helps people to implement it correctly - without ever 
becoming KeyCzar. KeyCzar already exists, after all, and it depends on 

> This way pycrypto will be a slim independent library which gets the job done. If someone really needs block cipher XYZ
> then kindly point them to a more exhaustive package that wraps an underlying crypto library.
I get your point.
> Feel free to disagree :)
I'm just stirring the pot. It's Dwayne and you guys who make this 
decision. I'm the new guy on the block who comes in with a certain 
amount of fresh enthusiasm and questions the status quo.

All the best

More information about the pycrypto mailing list