[Patches] [ python-Patches-868496 ] base64.py support for RFC 3548
SourceForge.net
noreply at sourceforge.net
Sat Jan 3 18:30:25 EST 2004
Patches item #868496, was opened at 2003-12-31 11:34
Message generated for change (Comment added) made by tim_one
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=305470&aid=868496&group_id=5470
Category: Library (Lib)
Group: Python 2.4
Status: Open
>Resolution: Accepted
Priority: 5
Submitted By: Barry A. Warsaw (bwarsaw)
Assigned to: Barry A. Warsaw (bwarsaw)
Summary: base64.py support for RFC 3548
Initial Comment:
I needed more complete RFC 3548 support, so I hacked up
the base64.py module. Here's the patch and an updated
test suite.
----------------------------------------------------------------------
>Comment By: Tim Peters (tim_one)
Date: 2004-01-03 18:30
Message:
Logged In: YES
user_id=31435
Don't worry about speed -- if necessary, we can speed it
after it's been checked in.
I found the b32decode map01=False argument confusing.
Maybe because the default was named False, I assumed the
only other sensible value for it would be True. Maybe just
changing the default to None would be clearer.
b16decode internals should not allow the input string to
contain '=' characters, since base 16 encoding doesn't use a
pad character.
I assume you'll add suitable doc changes.
Just for fun, I'd like to see the docs claim that base64 and
base32 encoding are cryptographically secure, unless the
map01 argument is set to 'L' <wink>.
----------------------------------------------------------------------
Comment By: Barry A. Warsaw (bwarsaw)
Date: 2004-01-03 14:55
Message:
Logged In: YES
user_id=12800
Freenet alphabet is mentioned in the thread referenced by
footnote [8] in the RFC.
Thanks for the other suggestions. I'll work with those and
unless there are any other objections, I'll commit these
changes soon.
----------------------------------------------------------------------
Comment By: Martin v. Löwis (loewis)
Date: 2004-01-03 06:21
Message:
Logged In: YES
user_id=21627
Where does the Freenet encoding come from? Do we need that?
Performance of the algorithms can probably be improved. For
example, for base32
- _b32table should be a list (or tuple), not a dictionary:
_b32table = tuple([_b32table[i] for i in range(32)])
- first hexlifying the string on encoding seems wasteful;
use struct instead
def f2(chunk):
c1, c2, c3 = struct.unpack("!HHB", chunk)
c2 += (c1 & 1) << 16 # total 17 bits
c3 += (c2 & 3) << 8 # total 10 bits
parts = [_b32table[c1 >> 11],
_b32table[(c1 >> 6) & 31],
_b32table[(c1>>1) & 31],
_b32table[c2 >> 12],
_b32table[(c2 >> 7) & 31],
_b32table[(c2 >> 2) & 31],
_b32table[c3 >> 5],
_b32table[c3 & 31]]
return ''.join(parts)
Apart from that, the change looks good.
----------------------------------------------------------------------
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=305470&aid=868496&group_id=5470
More information about the Patches
mailing list