blob: 2c7221494d616c8bb7d7092ad78fd10331fb7789 [file] [log] [blame]
Guido van Rossumaa925a51997-04-02 05:47:39 +00001#! /usr/bin/env python
2
Guido van Rossumd2783da2000-01-03 15:44:40 +00003# Conversions to/from base64 transport encoding as per RFC-1521.
Jack Jansen951213e1995-10-04 16:39:20 +00004#
5# Modified 04-Oct-95 by Jack to use binascii module
6
7import binascii
8
Guido van Rossumf1945461995-06-14 23:43:44 +00009MAXLINESIZE = 76 # Excluding the CRLF
Jack Jansen951213e1995-10-04 16:39:20 +000010MAXBINSIZE = (MAXLINESIZE/4)*3
Guido van Rossumf1945461995-06-14 23:43:44 +000011
12# Encode a file.
13def encode(input, output):
Guido van Rossumf1945461995-06-14 23:43:44 +000014 while 1:
Jack Jansen951213e1995-10-04 16:39:20 +000015 s = input.read(MAXBINSIZE)
Guido van Rossumf1945461995-06-14 23:43:44 +000016 if not s: break
Jack Jansen951213e1995-10-04 16:39:20 +000017 while len(s) < MAXBINSIZE:
18 ns = input.read(MAXBINSIZE-len(s))
19 if not ns: break
20 s = s + ns
21 line = binascii.b2a_base64(s)
22 output.write(line)
Guido van Rossumf1945461995-06-14 23:43:44 +000023
24# Decode a file.
25def decode(input, output):
Guido van Rossumf1945461995-06-14 23:43:44 +000026 while 1:
27 line = input.readline()
28 if not line: break
Jack Jansen951213e1995-10-04 16:39:20 +000029 s = binascii.a2b_base64(line)
30 output.write(s)
Guido van Rossumf1945461995-06-14 23:43:44 +000031
32def encodestring(s):
33 import StringIO
34 f = StringIO.StringIO(s)
35 g = StringIO.StringIO()
36 encode(f, g)
37 return g.getvalue()
38
39def decodestring(s):
40 import StringIO
41 f = StringIO.StringIO(s)
42 g = StringIO.StringIO()
43 decode(f, g)
44 return g.getvalue()
45
Guido van Rossum54c15101995-09-18 21:49:24 +000046# Small test program
Guido van Rossumf1945461995-06-14 23:43:44 +000047def test():
Guido van Rossum3b8e1601995-08-10 19:26:37 +000048 import sys, getopt
49 try:
50 opts, args = getopt.getopt(sys.argv[1:], 'deut')
51 except getopt.error, msg:
Guido van Rossum54c15101995-09-18 21:49:24 +000052 sys.stdout = sys.stderr
Guido van Rossum3b8e1601995-08-10 19:26:37 +000053 print msg
54 print """usage: basd64 [-d] [-e] [-u] [-t] [file|-]
55 -d, -u: decode
56 -e: encode (default)
57 -t: decode string 'Aladdin:open sesame'"""
Guido van Rossum54c15101995-09-18 21:49:24 +000058 sys.exit(2)
Guido van Rossum3b8e1601995-08-10 19:26:37 +000059 func = encode
60 for o, a in opts:
61 if o == '-e': func = encode
62 if o == '-d': func = decode
63 if o == '-u': func = decode
64 if o == '-t': test1(); return
65 if args and args[0] != '-':
Guido van Rossum25107de1997-05-08 23:10:42 +000066 func(open(args[0], 'rb'), sys.stdout)
Guido van Rossumf1945461995-06-14 23:43:44 +000067 else:
Guido van Rossum3b8e1601995-08-10 19:26:37 +000068 func(sys.stdin, sys.stdout)
Guido van Rossumf1945461995-06-14 23:43:44 +000069
70def test1():
71 s0 = "Aladdin:open sesame"
72 s1 = encodestring(s0)
73 s2 = decodestring(s1)
74 print s0, `s1`, s2
75
76if __name__ == '__main__':
77 test()