Skip to content

Commit 52d69a1

Browse files
committed
more tests
1 parent c754223 commit 52d69a1

3 files changed

Lines changed: 48 additions & 90 deletions

File tree

hashlib/hashlib.go

Lines changed: 15 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,14 @@ import (
1717

1818
/* Implements the HMAC algorithm as described by RFC 2104. */
1919

20-
const hashlib_new_doc = `new(name, data=b'') - returns a new hash object implementing the
21-
given hash function; initializing the hash
22-
using the given binary data.`
20+
const hashlib_new_doc = `new(name, data=b'') - Return a new hashing object using the named algorithm;
21+
optionally initialized with data (which must be bytes).`
2322

2423
func hashlib_new(self py.Object, args py.Tuple, kwargs py.StringDict) (py.Object, error) {
2524
var on py.Object
26-
var os py.Object
25+
var os py.Object = py.Bytes(nil)
2726

28-
kwlist := []string{"name", "string"}
27+
kwlist := []string{"name", "data"}
2928

3029
err := py.ParseTupleAndKeywords(args, kwargs, "s|y:new", kwlist, &on, &os)
3130
if err != nil {
@@ -37,12 +36,9 @@ func hashlib_new(self py.Object, args py.Tuple, kwargs py.StringDict) (py.Object
3736
return nil, err
3837
}
3938

40-
var data py.Bytes
41-
if os != nil {
42-
data, err = py.BytesFromObject(os)
43-
if err != nil {
44-
return nil, err
45-
}
39+
data, err := py.BytesFromObject(os)
40+
if err != nil {
41+
return nil, err
4642
}
4743

4844
var hasher hash.Hash
@@ -72,85 +68,23 @@ func hashlib_md5(self py.Object, args py.Tuple) (py.Object, error) {
7268
}
7369

7470
func hashlib_sha1(self py.Object, args py.Tuple) (py.Object, error) {
75-
var d py.Object
76-
err := py.UnpackTuple(args, nil, "sha1", 0, 1, &d)
77-
if err != nil {
78-
return nil, err
79-
}
80-
81-
var data py.Bytes
82-
if d != nil {
83-
switch d.Type() {
84-
case py.BytesType:
85-
data, err = py.BytesFromObject(d)
86-
case py.StringType:
87-
data = []byte(string(d.(py.String)))
88-
}
89-
}
90-
91-
if err != nil {
92-
return nil, err
93-
}
94-
95-
hasher := sha1.New()
96-
_, err = hasher.Write(data)
97-
return py.NewHash("sha1", hasher), err
71+
return hashlib_new(self, append([]py.Object{py.String("sha1")}, args...), nil)
9872
}
9973

10074
func hashlib_sha224(self py.Object, args py.Tuple) (py.Object, error) {
101-
var d py.Object
102-
err := py.UnpackTuple(args, nil, "sha224", 0, 1, &d)
103-
if err != nil {
104-
return nil, err
105-
}
106-
107-
var data py.Bytes
108-
if d != nil {
109-
switch d.Type() {
110-
case py.BytesType:
111-
data, err = py.BytesFromObject(d)
112-
case py.StringType:
113-
data = []byte(string(d.(py.String)))
114-
}
115-
}
116-
117-
if err != nil {
118-
return nil, err
119-
}
120-
121-
hasher := sha256.New224()
122-
_, err = hasher.Write(data)
123-
return py.NewHash("sha224", hasher), err
75+
return hashlib_new(self, append([]py.Object{py.String("sha224")}, args...), nil)
12476
}
12577

126-
func hashlib_sha256(self py.Object, arg py.Object) (py.Object, error) {
127-
data, err := py.BytesFromObject(arg)
128-
if err != nil {
129-
return nil, err
130-
}
131-
hasher := sha256.New()
132-
_, err = hasher.Write(data)
133-
return py.NewHash("sha256", hasher), err
78+
func hashlib_sha256(self py.Object, args py.Tuple) (py.Object, error) {
79+
return hashlib_new(self, append([]py.Object{py.String("sha256")}, args...), nil)
13480
}
13581

136-
func hashlib_sha384(self py.Object, arg py.Object) (py.Object, error) {
137-
data, err := py.BytesFromObject(arg)
138-
if err != nil {
139-
return nil, err
140-
}
141-
hasher := sha512.New384()
142-
_, err = hasher.Write(data)
143-
return py.NewHash("sha384", hasher), err
82+
func hashlib_sha384(self py.Object, args py.Tuple) (py.Object, error) {
83+
return hashlib_new(self, append([]py.Object{py.String("sha384")}, args...), nil)
14484
}
14585

146-
func hashlib_sha512(self py.Object, arg py.Object) (py.Object, error) {
147-
data, err := py.BytesFromObject(arg)
148-
if err != nil {
149-
return nil, err
150-
}
151-
hasher := sha512.New()
152-
_, err = hasher.Write(data)
153-
return py.NewHash("sha512", hasher), err
86+
func hashlib_sha512(self py.Object, args py.Tuple) (py.Object, error) {
87+
return hashlib_new(self, append([]py.Object{py.String("sha512")}, args...), nil)
15488
}
15589

15690
const hashlib_doc = `hashlib module - A common interface to many hash functions.

hashlib/tests/hashlib.py

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,42 @@ def ftest(name, got, want):
1111
what = '%s got %r, want %r' % (name, got, want)
1212
assert got == want, what
1313

14-
doc='Rich comparision'
15-
assertEqual(hashlib.md5(b'abc'), hashlib.md5(b'abc'))
16-
17-
doc="MD5"
14+
doc="MD5"
1815
ftest('new_md5_0', hashlib.new('md5', b'').hexdigest(), 'd41d8cd98f00b204e9800998ecf8427e')
19-
ftest('new_md5_1', hashlib.new('md5', b'abc').hexdigest(), '900150983cd24fb0d6963f7d28e17f72')
20-
ftest('mew_md5_2',
16+
ftest('new_md5_1', hashlib.new('md5', b'').digest(), b'\xd4\x1d\x8c\xd9\x8f\x00\xb2\x04\xe9\x80\t\x98\xec\xf8B~')
17+
ftest('new_md5_2', hashlib.new('md5', b'abc').hexdigest(), '900150983cd24fb0d6963f7d28e17f72')
18+
ftest('new_md5_3', hashlib.new('md5', b'abc').digest(), b'\x90\x01P\x98<\xd2O\xb0\xd6\x96?}(\xe1\x7fr')
19+
ftest('new_md5_4',
2120
hashlib.new('md5', b'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789').hexdigest(),
2221
'd174ab98d277d9f5a5611c2c9f419d9f')
2322
assertRaises(TypeError, hashlib.new, 'md5', 'abc')
2423

2524
ftest('md5_0', hashlib.md5().hexdigest(), 'd41d8cd98f00b204e9800998ecf8427e')
26-
ftest('md5_1', hashlib.md5(b'abc').hexdigest(), '900150983cd24fb0d6963f7d28e17f72')
25+
ftest('md5_1', hashlib.md5().digest(), b'\xd4\x1d\x8c\xd9\x8f\x00\xb2\x04\xe9\x80\t\x98\xec\xf8B~')
26+
ftest('md5_2', hashlib.md5(b'abc').hexdigest(), '900150983cd24fb0d6963f7d28e17f72')
27+
ftest('md5_3', hashlib.md5(b'abc').digest(), b'\x90\x01P\x98<\xd2O\xb0\xd6\x96?}(\xe1\x7fr')
28+
ftest('md5_4',
29+
hashlib.md5(b'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789').hexdigest(),
30+
'd174ab98d277d9f5a5611c2c9f419d9f')
31+
assertRaises(TypeError, hashlib.md5, 'abc')
32+
33+
doc="SHA1"
34+
ftest('new_sha1_0', hashlib.new('sha1', b'').hexdigest(), 'da39a3ee5e6b4b0d3255bfef95601890afd80709')
35+
ftest('new_sha1_1', hashlib.new('sha1', b'').digest(), b'\xda9\xa3\xee^kK\r2U\xbf\xef\x95`\x18\x90\xaf\xd8\x07\t')
36+
ftest('new_sha1_2', hashlib.new('sha1', b'abc').hexdigest(), 'a9993e364706816aba3e25717850c26c9cd0d89d')
37+
ftest('new_sha1_3', hashlib.new('sha1', b'abc').digest(), b'\xa9\x99>6G\x06\x81j\xba>%qxP\xc2l\x9c\xd0\xd8\x9d')
38+
ftest('new_sha1_4',
39+
hashlib.new('sha1', b'abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq').hexdigest(),
40+
'84983e441c3bd26ebaae4aa1f95129e5e54670f1')
41+
assertRaises(TypeError, hashlib.new, 'sha1', 'abc')
42+
43+
ftest('sha1_0', hashlib.sha1(b'').hexdigest(), 'da39a3ee5e6b4b0d3255bfef95601890afd80709')
44+
ftest('sha1_1', hashlib.sha1(b'').digest(), b'\xda9\xa3\xee^kK\r2U\xbf\xef\x95`\x18\x90\xaf\xd8\x07\t')
45+
ftest('sha1_2', hashlib.sha1(b'abc').hexdigest(), 'a9993e364706816aba3e25717850c26c9cd0d89d')
46+
ftest('sha1_3', hashlib.sha1(b'abc').digest(), b'\xa9\x99>6G\x06\x81j\xba>%qxP\xc2l\x9c\xd0\xd8\x9d')
47+
ftest('sha1_4',
48+
hashlib.sha1(b'abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq').hexdigest(),
49+
'84983e441c3bd26ebaae4aa1f95129e5e54670f1')
50+
assertRaises(TypeError, hashlib.sha1, 'abc')
2751

2852
doc="finished"

py/hash.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// Use of this source code is governed by a BSD-style
33
// license that can be found in the LICENSE file.
44

5-
// Float objects
5+
// Hash objects
66

77
package py
88

@@ -124,4 +124,4 @@ func init() {
124124
}
125125
}
126126

127-
var _ richComparison = Hash{}
127+
var _ richComparison = new(Hash)

0 commit comments

Comments
 (0)