annotate Modules/md5module.c @ 25838:8540887bcec6 2.2

Backport of 2.183: Fix memory leak in add_subclass() found by NealN with valgrind.
author Guido van Rossum <guido@python.org>
date Fri, 18 Oct 2002 13:42:21 +0000
parents 54ebf085d26f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
1
1132
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
diff changeset
2 /* MD5 module */
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
diff changeset
3
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
4 /* This module provides an interface to the RSA Data Security,
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
5 Inc. MD5 Message-Digest Algorithm, described in RFC 1321.
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
6 It requires the files md5c.c and md5.h (which are slightly changed
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
7 from the versions in the RFC to avoid the "global.h" file.) */
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
8
1132
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
diff changeset
9
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
diff changeset
10 /* MD5 objects */
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
diff changeset
11
4635
49745ddb4f69 Renamed
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
12 #include "Python.h"
1132
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
diff changeset
13 #include "md5.h"
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
14
1132
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
diff changeset
15 typedef struct {
4635
49745ddb4f69 Renamed
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
16 PyObject_HEAD
1132
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
diff changeset
17 MD5_CTX md5; /* the context holder */
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
diff changeset
18 } md5object;
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
diff changeset
19
4635
49745ddb4f69 Renamed
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
20 staticforward PyTypeObject MD5type;
1132
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
diff changeset
21
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
diff changeset
22 #define is_md5object(v) ((v)->ob_type == &MD5type)
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
diff changeset
23
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
diff changeset
24 static md5object *
13651
8a063423e0b7 Bunch of minor ANSIfications: 'void initfunc()' -> 'void initfunc(void)',
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
25 newmd5object(void)
1132
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
diff changeset
26 {
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
diff changeset
27 md5object *md5p;
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
diff changeset
28
12576
1c7c2dd1beb1 Vladimir Marangozov's long-awaited malloc restructuring.
Guido van Rossum <guido@python.org>
parents: 11882
diff changeset
29 md5p = PyObject_New(md5object, &MD5type);
1132
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 if (md5p == NULL)
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
diff changeset
31 return NULL;
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
diff changeset
32
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
diff changeset
33 MD5Init(&md5p->md5); /* actual initialisation */
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 return md5p;
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
35 }
1132
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
diff changeset
36
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
diff changeset
37
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
diff changeset
38 /* MD5 methods */
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
diff changeset
39
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
diff changeset
40 static void
13503
6484098f40fc ANSI-fying
Peter Schneider-Kamp <nowonder@nowonder.de>
parents: 13256
diff changeset
41 md5_dealloc(md5object *md5p)
1132
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
diff changeset
42 {
12576
1c7c2dd1beb1 Vladimir Marangozov's long-awaited malloc restructuring.
Guido van Rossum <guido@python.org>
parents: 11882
diff changeset
43 PyObject_Del(md5p);
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
44 }
1132
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
diff changeset
45
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
diff changeset
46
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
47 /* MD5 methods-as-attributes */
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
48
4635
49745ddb4f69 Renamed
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
49 static PyObject *
13503
6484098f40fc ANSI-fying
Peter Schneider-Kamp <nowonder@nowonder.de>
parents: 13256
diff changeset
50 md5_update(md5object *self, PyObject *args)
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
51 {
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
52 unsigned char *cp;
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
53 int len;
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
54
4635
49745ddb4f69 Renamed
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
55 if (!PyArg_Parse(args, "s#", &cp, &len))
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
56 return NULL;
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
57
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
58 MD5Update(&self->md5, cp, len);
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
59
4635
49745ddb4f69 Renamed
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
60 Py_INCREF(Py_None);
49745ddb4f69 Renamed
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
61 return Py_None;
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
62 }
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
63
9363
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
64 static char update_doc [] =
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
65 "update (arg)\n\
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
66 \n\
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
67 Update the md5 object with the string arg. Repeated calls are\n\
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
68 equivalent to a single call with the concatenation of all the\n\
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
69 arguments.";
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
70
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
71
4635
49745ddb4f69 Renamed
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
72 static PyObject *
13503
6484098f40fc ANSI-fying
Peter Schneider-Kamp <nowonder@nowonder.de>
parents: 13256
diff changeset
73 md5_digest(md5object *self, PyObject *args)
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
74 {
13979
63de7f00b5bc md5_hexdigest(): After a brief conversation with TP, added hexdigest()
Barry Warsaw <barry@python.org>
parents: 13820
diff changeset
75 MD5_CTX mdContext;
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
76 unsigned char aDigest[16];
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
77
4635
49745ddb4f69 Renamed
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
78 if (!PyArg_NoArgs(args))
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
79 return NULL;
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
80
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
81 /* make a temporary copy, and perform the final */
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
82 mdContext = self->md5;
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
83 MD5Final(aDigest, &mdContext);
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
84
4635
49745ddb4f69 Renamed
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
85 return PyString_FromStringAndSize((char *)aDigest, 16);
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
86 }
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
87
9363
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
88 static char digest_doc [] =
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
89 "digest() -> string\n\
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
90 \n\
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
91 Return the digest of the strings passed to the update() method so\n\
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
92 far. This is an 16-byte string which may contain non-ASCII characters,\n\
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
93 including null bytes.";
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
94
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
95
4635
49745ddb4f69 Renamed
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
96 static PyObject *
13979
63de7f00b5bc md5_hexdigest(): After a brief conversation with TP, added hexdigest()
Barry Warsaw <barry@python.org>
parents: 13820
diff changeset
97 md5_hexdigest(md5object *self, PyObject *args)
63de7f00b5bc md5_hexdigest(): After a brief conversation with TP, added hexdigest()
Barry Warsaw <barry@python.org>
parents: 13820
diff changeset
98 {
63de7f00b5bc md5_hexdigest(): After a brief conversation with TP, added hexdigest()
Barry Warsaw <barry@python.org>
parents: 13820
diff changeset
99 MD5_CTX mdContext;
63de7f00b5bc md5_hexdigest(): After a brief conversation with TP, added hexdigest()
Barry Warsaw <barry@python.org>
parents: 13820
diff changeset
100 unsigned char digest[16];
63de7f00b5bc md5_hexdigest(): After a brief conversation with TP, added hexdigest()
Barry Warsaw <barry@python.org>
parents: 13820
diff changeset
101 unsigned char hexdigest[32];
63de7f00b5bc md5_hexdigest(): After a brief conversation with TP, added hexdigest()
Barry Warsaw <barry@python.org>
parents: 13820
diff changeset
102 int i, j;
63de7f00b5bc md5_hexdigest(): After a brief conversation with TP, added hexdigest()
Barry Warsaw <barry@python.org>
parents: 13820
diff changeset
103
63de7f00b5bc md5_hexdigest(): After a brief conversation with TP, added hexdigest()
Barry Warsaw <barry@python.org>
parents: 13820
diff changeset
104 if (!PyArg_NoArgs(args))
63de7f00b5bc md5_hexdigest(): After a brief conversation with TP, added hexdigest()
Barry Warsaw <barry@python.org>
parents: 13820
diff changeset
105 return NULL;
63de7f00b5bc md5_hexdigest(): After a brief conversation with TP, added hexdigest()
Barry Warsaw <barry@python.org>
parents: 13820
diff changeset
106
63de7f00b5bc md5_hexdigest(): After a brief conversation with TP, added hexdigest()
Barry Warsaw <barry@python.org>
parents: 13820
diff changeset
107 /* make a temporary copy, and perform the final */
63de7f00b5bc md5_hexdigest(): After a brief conversation with TP, added hexdigest()
Barry Warsaw <barry@python.org>
parents: 13820
diff changeset
108 mdContext = self->md5;
63de7f00b5bc md5_hexdigest(): After a brief conversation with TP, added hexdigest()
Barry Warsaw <barry@python.org>
parents: 13820
diff changeset
109 MD5Final(digest, &mdContext);
63de7f00b5bc md5_hexdigest(): After a brief conversation with TP, added hexdigest()
Barry Warsaw <barry@python.org>
parents: 13820
diff changeset
110
63de7f00b5bc md5_hexdigest(): After a brief conversation with TP, added hexdigest()
Barry Warsaw <barry@python.org>
parents: 13820
diff changeset
111 /* Make hex version of the digest */
63de7f00b5bc md5_hexdigest(): After a brief conversation with TP, added hexdigest()
Barry Warsaw <barry@python.org>
parents: 13820
diff changeset
112 for(i=j=0; i<16; i++) {
63de7f00b5bc md5_hexdigest(): After a brief conversation with TP, added hexdigest()
Barry Warsaw <barry@python.org>
parents: 13820
diff changeset
113 char c;
63de7f00b5bc md5_hexdigest(): After a brief conversation with TP, added hexdigest()
Barry Warsaw <barry@python.org>
parents: 13820
diff changeset
114 c = (digest[i] >> 4) & 0xf;
63de7f00b5bc md5_hexdigest(): After a brief conversation with TP, added hexdigest()
Barry Warsaw <barry@python.org>
parents: 13820
diff changeset
115 c = (c>9) ? c+'a'-10 : c + '0';
63de7f00b5bc md5_hexdigest(): After a brief conversation with TP, added hexdigest()
Barry Warsaw <barry@python.org>
parents: 13820
diff changeset
116 hexdigest[j++] = c;
63de7f00b5bc md5_hexdigest(): After a brief conversation with TP, added hexdigest()
Barry Warsaw <barry@python.org>
parents: 13820
diff changeset
117 c = (digest[i] & 0xf);
63de7f00b5bc md5_hexdigest(): After a brief conversation with TP, added hexdigest()
Barry Warsaw <barry@python.org>
parents: 13820
diff changeset
118 c = (c>9) ? c+'a'-10 : c + '0';
63de7f00b5bc md5_hexdigest(): After a brief conversation with TP, added hexdigest()
Barry Warsaw <barry@python.org>
parents: 13820
diff changeset
119 hexdigest[j++] = c;
63de7f00b5bc md5_hexdigest(): After a brief conversation with TP, added hexdigest()
Barry Warsaw <barry@python.org>
parents: 13820
diff changeset
120 }
63de7f00b5bc md5_hexdigest(): After a brief conversation with TP, added hexdigest()
Barry Warsaw <barry@python.org>
parents: 13820
diff changeset
121 return PyString_FromStringAndSize((char*)hexdigest, 32);
63de7f00b5bc md5_hexdigest(): After a brief conversation with TP, added hexdigest()
Barry Warsaw <barry@python.org>
parents: 13820
diff changeset
122 }
63de7f00b5bc md5_hexdigest(): After a brief conversation with TP, added hexdigest()
Barry Warsaw <barry@python.org>
parents: 13820
diff changeset
123
63de7f00b5bc md5_hexdigest(): After a brief conversation with TP, added hexdigest()
Barry Warsaw <barry@python.org>
parents: 13820
diff changeset
124
63de7f00b5bc md5_hexdigest(): After a brief conversation with TP, added hexdigest()
Barry Warsaw <barry@python.org>
parents: 13820
diff changeset
125 static char hexdigest_doc [] =
63de7f00b5bc md5_hexdigest(): After a brief conversation with TP, added hexdigest()
Barry Warsaw <barry@python.org>
parents: 13820
diff changeset
126 "hexdigest() -> string\n\
63de7f00b5bc md5_hexdigest(): After a brief conversation with TP, added hexdigest()
Barry Warsaw <barry@python.org>
parents: 13820
diff changeset
127 \n\
63de7f00b5bc md5_hexdigest(): After a brief conversation with TP, added hexdigest()
Barry Warsaw <barry@python.org>
parents: 13820
diff changeset
128 Like digest(), but returns the digest as a string of hexadecimal digits.";
63de7f00b5bc md5_hexdigest(): After a brief conversation with TP, added hexdigest()
Barry Warsaw <barry@python.org>
parents: 13820
diff changeset
129
63de7f00b5bc md5_hexdigest(): After a brief conversation with TP, added hexdigest()
Barry Warsaw <barry@python.org>
parents: 13820
diff changeset
130
63de7f00b5bc md5_hexdigest(): After a brief conversation with TP, added hexdigest()
Barry Warsaw <barry@python.org>
parents: 13820
diff changeset
131 static PyObject *
13503
6484098f40fc ANSI-fying
Peter Schneider-Kamp <nowonder@nowonder.de>
parents: 13256
diff changeset
132 md5_copy(md5object *self, PyObject *args)
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
133 {
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
134 md5object *md5p;
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
135
4635
49745ddb4f69 Renamed
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
136 if (!PyArg_NoArgs(args))
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
137 return NULL;
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
138
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
139 if ((md5p = newmd5object()) == NULL)
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
140 return NULL;
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
141
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
142 md5p->md5 = self->md5;
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
143
4635
49745ddb4f69 Renamed
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
144 return (PyObject *)md5p;
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
145 }
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
146
9363
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
147 static char copy_doc [] =
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
148 "copy() -> md5 object\n\
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
149 \n\
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
150 Return a copy (``clone'') of the md5 object.";
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
151
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
152
4635
49745ddb4f69 Renamed
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
153 static PyMethodDef md5_methods[] = {
13979
63de7f00b5bc md5_hexdigest(): After a brief conversation with TP, added hexdigest()
Barry Warsaw <barry@python.org>
parents: 13820
diff changeset
154 {"update", (PyCFunction)md5_update, METH_OLDARGS, update_doc},
63de7f00b5bc md5_hexdigest(): After a brief conversation with TP, added hexdigest()
Barry Warsaw <barry@python.org>
parents: 13820
diff changeset
155 {"digest", (PyCFunction)md5_digest, METH_OLDARGS, digest_doc},
63de7f00b5bc md5_hexdigest(): After a brief conversation with TP, added hexdigest()
Barry Warsaw <barry@python.org>
parents: 13820
diff changeset
156 {"hexdigest", (PyCFunction)md5_hexdigest, METH_OLDARGS, hexdigest_doc},
63de7f00b5bc md5_hexdigest(): After a brief conversation with TP, added hexdigest()
Barry Warsaw <barry@python.org>
parents: 13820
diff changeset
157 {"copy", (PyCFunction)md5_copy, METH_OLDARGS, copy_doc},
63de7f00b5bc md5_hexdigest(): After a brief conversation with TP, added hexdigest()
Barry Warsaw <barry@python.org>
parents: 13820
diff changeset
158 {NULL, NULL} /* sentinel */
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
159 };
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
160
4635
49745ddb4f69 Renamed
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
161 static PyObject *
13503
6484098f40fc ANSI-fying
Peter Schneider-Kamp <nowonder@nowonder.de>
parents: 13256
diff changeset
162 md5_getattr(md5object *self, char *name)
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
163 {
20843
8d14f534a5c2 [Patch #476612] Add attributes from PEP247 to the md5 and sha modules
Andrew M. Kuchling <amk@amk.ca>
parents: 14375
diff changeset
164 if (strcmp(name, "digest_size") == 0) {
8d14f534a5c2 [Patch #476612] Add attributes from PEP247 to the md5 and sha modules
Andrew M. Kuchling <amk@amk.ca>
parents: 14375
diff changeset
165 return PyInt_FromLong(16);
8d14f534a5c2 [Patch #476612] Add attributes from PEP247 to the md5 and sha modules
Andrew M. Kuchling <amk@amk.ca>
parents: 14375
diff changeset
166 }
8d14f534a5c2 [Patch #476612] Add attributes from PEP247 to the md5 and sha modules
Andrew M. Kuchling <amk@amk.ca>
parents: 14375
diff changeset
167
4635
49745ddb4f69 Renamed
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
168 return Py_FindMethod(md5_methods, (PyObject *)self, name);
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
169 }
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
170
9363
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
171 static char module_doc [] =
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
172
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
173 "This module implements the interface to RSA's MD5 message digest\n\
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
174 algorithm (see also Internet RFC 1321). Its use is quite\n\
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
175 straightforward: use the new() to create an md5 object. You can now\n\
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
176 feed this object with arbitrary strings using the update() method, and\n\
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
177 at any point you can ask it for the digest (a strong kind of 128-bit\n\
13620
5b727ab37092 Spelling fixes supplied by Rob W. W. Hooft. All these are fixes in either
Thomas Wouters <thomas@python.org>
parents: 13503
diff changeset
178 checksum, a.k.a. ``fingerprint'') of the concatenation of the strings\n\
9363
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
179 fed to it so far using the digest() method.\n\
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
180 \n\
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
181 Functions:\n\
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
182 \n\
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
183 new([arg]) -- return a new md5 object, initialized with arg if provided\n\
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
184 md5([arg]) -- DEPRECATED, same as new, but for compatibility\n\
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
185 \n\
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
186 Special Objects:\n\
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
187 \n\
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
188 MD5Type -- type object for md5 objects\n\
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
189 ";
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
190
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
191 static char md5type_doc [] =
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
192 "An md5 represents the object used to calculate the MD5 checksum of a\n\
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
193 string of information.\n\
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
194 \n\
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
195 Methods:\n\
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
196 \n\
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
197 update() -- updates the current digest with an additional string\n\
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
198 digest() -- return the current digest value\n\
25744
54ebf085d26f Backport 2.34. SF #621948, update docstring for md5 by David M. Cooke
Neal Norwitz <nnorwitz@gmail.com>
parents: 21313
diff changeset
199 hexdigest() -- return the current digest as a string of hexadecimal digits\n\
9363
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
200 copy() -- return a copy of the current md5 object\n\
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
201 ";
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
202
4635
49745ddb4f69 Renamed
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
203 statichere PyTypeObject MD5type = {
11711
6546ea06e157 Patch from Paul Sokolovsky <Paul.Sokolovsky@technologist.com>:
Fred Drake <fdrake@acm.org>
parents: 9588
diff changeset
204 PyObject_HEAD_INIT(NULL)
4635
49745ddb4f69 Renamed
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
205 0, /*ob_size*/
21313
91dd223829c6 Patch supplied by Burton Radons for his own SF bug #487390: Modifying
Guido van Rossum <guido@python.org>
parents: 20850
diff changeset
206 "md5.md5", /*tp_name*/
4635
49745ddb4f69 Renamed
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
207 sizeof(md5object), /*tp_size*/
49745ddb4f69 Renamed
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
208 0, /*tp_itemsize*/
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
209 /* methods */
4635
49745ddb4f69 Renamed
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
210 (destructor)md5_dealloc, /*tp_dealloc*/
49745ddb4f69 Renamed
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
211 0, /*tp_print*/
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
212 (getattrfunc)md5_getattr, /*tp_getattr*/
4635
49745ddb4f69 Renamed
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
213 0, /*tp_setattr*/
49745ddb4f69 Renamed
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
214 0, /*tp_compare*/
49745ddb4f69 Renamed
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
215 0, /*tp_repr*/
49745ddb4f69 Renamed
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
216 0, /*tp_as_number*/
9363
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
217 0, /*tp_as_sequence*/
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
218 0, /*tp_as_mapping*/
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
219 0, /*tp_hash*/
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
220 0, /*tp_call*/
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
221 0, /*tp_str*/
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
222 0, /*tp_getattro*/
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
223 0, /*tp_setattro*/
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
224 0, /*tp_as_buffer*/
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
225 0, /*tp_xxx4*/
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
226 md5type_doc, /*tp_doc*/
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
227 };
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
228
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
229
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
230 /* MD5 functions */
1132
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
diff changeset
231
4635
49745ddb4f69 Renamed
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
232 static PyObject *
13503
6484098f40fc ANSI-fying
Peter Schneider-Kamp <nowonder@nowonder.de>
parents: 13256
diff changeset
233 MD5_new(PyObject *self, PyObject *args)
1132
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
diff changeset
234 {
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
diff changeset
235 md5object *md5p;
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
236 unsigned char *cp = NULL;
2860
6ae9b377e522 use newgetargs
Guido van Rossum <guido@python.org>
parents: 2506
diff changeset
237 int len = 0;
1132
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
diff changeset
238
11882
dc65c5f6ad7c Massive patch by Skip Montanaro to add ":name" to as many
Guido van Rossum <guido@python.org>
parents: 11711
diff changeset
239 if (!PyArg_ParseTuple(args, "|s#:new", &cp, &len))
2860
6ae9b377e522 use newgetargs
Guido van Rossum <guido@python.org>
parents: 2506
diff changeset
240 return NULL;
1132
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
diff changeset
241
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
diff changeset
242 if ((md5p = newmd5object()) == NULL)
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
diff changeset
243 return NULL;
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
diff changeset
244
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
diff changeset
245 if (cp)
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
diff changeset
246 MD5Update(&md5p->md5, cp, len);
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
diff changeset
247
4635
49745ddb4f69 Renamed
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
248 return (PyObject *)md5p;
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
249 }
1132
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
diff changeset
250
9363
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
251 static char new_doc [] =
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
252 "new([arg]) -> md5 object\n\
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
253 \n\
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
254 Return a new md5 object. If arg is present, the method call update(arg)\n\
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
255 is made.";
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
256
1132
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
diff changeset
257
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
diff changeset
258 /* List of functions exported by this module */
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
diff changeset
259
4635
49745ddb4f69 Renamed
Barry Warsaw <barry@python.org>
parents: 4503
diff changeset
260 static PyMethodDef md5_functions[] = {
13817
3c0f75a2198f Use METH_VARARGS instead of numeric constant 1 in method def. tables
Andrew M. Kuchling <amk@amk.ca>
parents: 13651
diff changeset
261 {"new", (PyCFunction)MD5_new, METH_VARARGS, new_doc},
3c0f75a2198f Use METH_VARARGS instead of numeric constant 1 in method def. tables
Andrew M. Kuchling <amk@amk.ca>
parents: 13651
diff changeset
262 {"md5", (PyCFunction)MD5_new, METH_VARARGS, new_doc}, /* Backward compatibility */
2860
6ae9b377e522 use newgetargs
Guido van Rossum <guido@python.org>
parents: 2506
diff changeset
263 {NULL, NULL} /* Sentinel */
1132
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
diff changeset
264 };
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
diff changeset
265
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
diff changeset
266
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
diff changeset
267 /* Initialize this module. */
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
diff changeset
268
9588
38023a425e48 Add DL_EXPORT() to all modules that could possibly be used
Guido van Rossum <guido@python.org>
parents: 9363
diff changeset
269 DL_EXPORT(void)
13651
8a063423e0b7 Bunch of minor ANSIfications: 'void initfunc()' -> 'void initfunc(void)',
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
270 initmd5(void)
1132
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
diff changeset
271 {
20850
2962f01924c9 Simplify initmd5() to use PyModule_AddIntConstant().
Fred Drake <fdrake@acm.org>
parents: 20843
diff changeset
272 PyObject *m, *d;
11711
6546ea06e157 Patch from Paul Sokolovsky <Paul.Sokolovsky@technologist.com>:
Fred Drake <fdrake@acm.org>
parents: 9588
diff changeset
273
6546ea06e157 Patch from Paul Sokolovsky <Paul.Sokolovsky@technologist.com>:
Fred Drake <fdrake@acm.org>
parents: 9588
diff changeset
274 MD5type.ob_type = &PyType_Type;
9363
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
275 m = Py_InitModule3("md5", md5_functions, module_doc);
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
276 d = PyModule_GetDict(m);
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
277 PyDict_SetItemString(d, "MD5Type", (PyObject *)&MD5type);
20850
2962f01924c9 Simplify initmd5() to use PyModule_AddIntConstant().
Fred Drake <fdrake@acm.org>
parents: 20843
diff changeset
278 PyModule_AddIntConstant(m, "digest_size", 16);
9363
f351c64c82ed Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 4635
diff changeset
279 /* No need to check the error here, the caller will do that */
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1418
diff changeset
280 }