[Python-ideas] PEP 3101 (Advanced string formatting) base 36 integer presentation type

Jeffrey jss.bulk at gmail.com
Sat Oct 8 05:14:44 CEST 2011


I would like to suggest adding an integer presentation type for base 36
to PEP 3101.  I can't imagine that it would be a whole lot more
difficult than the existing types.  Python's built-in long integers
provide a nice way to prototype and demonstrate cryptographic
operations, especially with asymmetric cryptography.  (Alice and Bob
stuff.)  Built-in functions provide modular reduction, modular
exponentiation, and lots of nice number theory stuff that supports a
variety of protocols and algorithms.  A frequent need is to represent a
message by a number.  Base 36 provides a way to represent all 26 letters
in a semi-standard way, and simple string transformations can
efficiently make zeros into spaces or vice versa.  long() can already
take a radix argument of 36 to parse base 36 numbers.  If a base 36
presentation type (say, 'z' or something) was available, it would be
possible to base 36 numbers as a simple way to interpret a message as a
number in number theoretic/asymmetric cryptographic applications.

The standard answer (see, for example, the Wikipedia Base 36 article) is
to code up a quick routine to loop around and generate each digit, but:

- The kinds of numbers used in cryptographic applications are big, as in
thousands of digits.  Providing some sort of direct support would nicely
facilitate computational efficiency as it would avoid going around an
interpreted loop thousands of times for each conversion.

- All the the examples I've seen on in a quick Google search use the
horrible anti-idiom of building up a string by repeated concatenation.
 Obviously, doing it efficiently is not trivial.  It would be nice to
get it right and be done with it.

- Yes, one could write his own routine to do it, but this would serve as
an unnecessary distraction where the purpose of the code is to
illustrate a cryptographic algorithm or protocol

- Yes, one could write his own module, define his own type, and override
everything, but it's a fair amount of work to cover everything off
(longs are a part of the language's core syntax) and even then, you
still have the clutter of manually invoking constructors to make your
new type instead of the built-int type.  It's also kind of a trivial
thing to justify promulgating a standard module for, and without a
standard module, it's one more preliminary that has to be done before
you can get to the main algorithm.

- "Batteries included" is kind of a nice philosophy.

Is it practical to add a base36 integer presentation type (say, 'z' or
'Z' similar to hexadecimal's 'x' or 'X') to the existing integer
presentation types list in PEP 3101 (or do I need to raise a brand new
PEP for this near-triviality)?  It would be a very parallel thing to the
hexadecimal one which is doing almost all the same things.  I can't
imagine it breaking anything because it defines something new that
previously wasn't defined as anything useful at all.

Jeffrey
<jss.bulk@@gmail.com <mailto:jeffrey.streifling at gmail.com>>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20111007/419c8ef5/attachment.html>


More information about the Python-ideas mailing list