Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
S
setuptools
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jérome Perrin
setuptools
Commits
47e5462b
Commit
47e5462b
authored
Nov 24, 2013
by
Jason R. Coombs
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Remove py24compat module
parent
dbe5fff6
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
2 additions
and
1055 deletions
+2
-1055
setuptools/_backport/__init__.py
setuptools/_backport/__init__.py
+0
-0
setuptools/_backport/hashlib/__init__.py
setuptools/_backport/hashlib/__init__.py
+0
-146
setuptools/_backport/hashlib/_sha.py
setuptools/_backport/hashlib/_sha.py
+0
-359
setuptools/_backport/hashlib/_sha256.py
setuptools/_backport/hashlib/_sha256.py
+0
-260
setuptools/_backport/hashlib/_sha512.py
setuptools/_backport/hashlib/_sha512.py
+0
-288
setuptools/package_index.py
setuptools/package_index.py
+2
-2
No files found.
setuptools/_backport/__init__.py
deleted
100644 → 0
View file @
dbe5fff6
setuptools/_backport/hashlib/__init__.py
deleted
100644 → 0
View file @
dbe5fff6
# $Id$
#
# Copyright (C) 2005 Gregory P. Smith (greg@krypto.org)
# Licensed to PSF under a Contributor Agreement.
#
__doc__
=
"""hashlib module - A common interface to many hash functions.
new(name, string='') - returns a new hash object implementing the
given hash function; initializing the hash
using the given string data.
Named constructor functions are also available, these are much faster
than using new():
md5(), sha1(), sha224(), sha256(), sha384(), and sha512()
More algorithms may be available on your platform but the above are
guaranteed to exist.
NOTE: If you want the adler32 or crc32 hash functions they are available in
the zlib module.
Choose your hash function wisely. Some have known collision weaknesses.
sha384 and sha512 will be slow on 32 bit platforms.
Hash objects have these methods:
- update(arg): Update the hash object with the string arg. Repeated calls
are equivalent to a single call with the concatenation of all
the arguments.
- digest(): Return the digest of the strings passed to the update() method
so far. This may contain non-ASCII characters, including
NUL bytes.
- hexdigest(): Like digest() except the digest is returned as a string of
double length, containing only hexadecimal digits.
- copy(): Return a copy (clone) of the hash object. This can be used to
efficiently compute the digests of strings that share a common
initial substring.
For example, to obtain the digest of the string 'Nobody inspects the
spammish repetition':
>>> import hashlib
>>> m = hashlib.md5()
>>> m.update("Nobody inspects")
>>> m.update(" the spammish repetition")
>>> m.digest()
'
\
\
xbbd
\
\
x9c
\
\
x83
\
\
xdd
\
\
x1e
\
\
xa5
\
\
xc9
\
\
xd9
\
\
xde
\
\
xc9
\
\
xa1
\
\
x8d
\
\
xf0
\
\
xff
\
\
xe9'
More condensed:
>>> hashlib.sha224("Nobody inspects the spammish repetition").hexdigest()
'a4337bc45a8fc544c03f52dc550cd6e1e87021bc896588bd79e901e2'
"""
# This tuple and __get_builtin_constructor() must be modified if a new
# always available algorithm is added.
__always_supported
=
(
'md5'
,
'sha1'
,
'sha224'
,
'sha256'
,
'sha384'
,
'sha512'
)
algorithms
=
__always_supported
__all__
=
__always_supported
+
(
'new'
,
'algorithms'
)
def
__get_builtin_constructor
(
name
):
try
:
if
name
in
(
'SHA1'
,
'sha1'
):
import
_sha
return
_sha
.
new
elif
name
in
(
'MD5'
,
'md5'
):
import
md5
return
md5
.
new
elif
name
in
(
'SHA256'
,
'sha256'
,
'SHA224'
,
'sha224'
):
import
_sha256
bs
=
name
[
3
:]
if
bs
==
'256'
:
return
_sha256
.
sha256
elif
bs
==
'224'
:
return
_sha256
.
sha224
elif
name
in
(
'SHA512'
,
'sha512'
,
'SHA384'
,
'sha384'
):
import
_sha512
bs
=
name
[
3
:]
if
bs
==
'512'
:
return
_sha512
.
sha512
elif
bs
==
'384'
:
return
_sha512
.
sha384
except
ImportError
:
pass
# no extension module, this hash is unsupported.
raise
ValueError
(
'unsupported hash type %s'
%
name
)
def
__get_openssl_constructor
(
name
):
try
:
f
=
getattr
(
_hashlib
,
'openssl_'
+
name
)
# Allow the C module to raise ValueError. The function will be
# defined but the hash not actually available thanks to OpenSSL.
f
()
# Use the C function directly (very fast)
return
f
except
(
AttributeError
,
ValueError
):
return
__get_builtin_constructor
(
name
)
def
__py_new
(
name
,
string
=
''
):
"""new(name, string='') - Return a new hashing object using the named algorithm;
optionally initialized with a string.
"""
return
__get_builtin_constructor
(
name
)(
string
)
def
__hash_new
(
name
,
string
=
''
):
"""new(name, string='') - Return a new hashing object using the named algorithm;
optionally initialized with a string.
"""
try
:
return
_hashlib
.
new
(
name
,
string
)
except
ValueError
:
# If the _hashlib module (OpenSSL) doesn't support the named
# hash, try using our builtin implementations.
# This allows for SHA224/256 and SHA384/512 support even though
# the OpenSSL library prior to 0.9.8 doesn't provide them.
return
__get_builtin_constructor
(
name
)(
string
)
try
:
import
_hashlib
new
=
__hash_new
__get_hash
=
__get_openssl_constructor
except
ImportError
:
new
=
__py_new
__get_hash
=
__get_builtin_constructor
for
__func_name
in
__always_supported
:
# try them all, some may not work due to the OpenSSL
# version not supporting that algorithm.
try
:
globals
()[
__func_name
]
=
__get_hash
(
__func_name
)
except
ValueError
:
import
logging
logging
.
exception
(
'code for hash %s was not found.'
,
__func_name
)
# Cleanup locals()
del
__always_supported
,
__func_name
,
__get_hash
del
__py_new
,
__hash_new
,
__get_openssl_constructor
setuptools/_backport/hashlib/_sha.py
deleted
100644 → 0
View file @
dbe5fff6
# -*- coding: iso-8859-1 -*-
"""A sample implementation of SHA-1 in pure Python.
Framework adapted from Dinu Gherman's MD5 implementation by
J. Hallén and L. Creighton. SHA-1 implementation based directly on
the text of the NIST standard FIPS PUB 180-1.
"""
__date__
=
'2004-11-17'
__version__
=
0.91
# Modernised by J. Hallén and L. Creighton for Pypy
import
struct
,
copy
# ======================================================================
# Bit-Manipulation helpers
#
# _long2bytes() was contributed by Barry Warsaw
# and is reused here with tiny modifications.
# ======================================================================
def
_long2bytesBigEndian
(
n
,
blocksize
=
0
):
"""Convert a long integer to a byte string.
If optional blocksize is given and greater than zero, pad the front
of the byte string with binary zeros so that the length is a multiple
of blocksize.
"""
# After much testing, this algorithm was deemed to be the fastest.
s
=
''
pack
=
struct
.
pack
while
n
>
0
:
s
=
pack
(
'>I'
,
n
&
0xffffffff
)
+
s
n
=
n
>>
32
# Strip off leading zeros.
for
i
in
range
(
len
(
s
)):
if
s
[
i
]
!=
'
\
000
'
:
break
else
:
# Only happens when n == 0.
s
=
'
\
000
'
i
=
0
s
=
s
[
i
:]
# Add back some pad bytes. This could be done more efficiently
# w.r.t. the de-padding being done above, but sigh...
if
blocksize
>
0
and
len
(
s
)
%
blocksize
:
s
=
(
blocksize
-
len
(
s
)
%
blocksize
)
*
'
\
000
'
+
s
return
s
def
_bytelist2longBigEndian
(
list
):
"Transform a list of characters into a list of longs."
imax
=
len
(
list
)
//
4
hl
=
[
0
]
*
imax
j
=
0
i
=
0
while
i
<
imax
:
b0
=
ord
(
list
[
j
])
<<
24
b1
=
ord
(
list
[
j
+
1
])
<<
16
b2
=
ord
(
list
[
j
+
2
])
<<
8
b3
=
ord
(
list
[
j
+
3
])
hl
[
i
]
=
b0
|
b1
|
b2
|
b3
i
=
i
+
1
j
=
j
+
4
return
hl
def
_rotateLeft
(
x
,
n
):
"Rotate x (32 bit) left n bits circularly."
return
(
x
<<
n
)
|
(
x
>>
(
32
-
n
))
# ======================================================================
# The SHA transformation functions
#
# ======================================================================
def
f0_19
(
B
,
C
,
D
):
return
(
B
&
C
)
|
((
~
B
)
&
D
)
def
f20_39
(
B
,
C
,
D
):
return
B
^
C
^
D
def
f40_59
(
B
,
C
,
D
):
return
(
B
&
C
)
|
(
B
&
D
)
|
(
C
&
D
)
def
f60_79
(
B
,
C
,
D
):
return
B
^
C
^
D
f
=
[
f0_19
,
f20_39
,
f40_59
,
f60_79
]
# Constants to be used
K
=
[
0x5A827999
,
# ( 0 <= t <= 19)
0x6ED9EBA1
,
# (20 <= t <= 39)
0x8F1BBCDC
,
# (40 <= t <= 59)
0xCA62C1D6
# (60 <= t <= 79)
]
class
sha
:
"An implementation of the MD5 hash function in pure Python."
digest_size
=
digestsize
=
20
block_size
=
1
def
__init__
(
self
):
"Initialisation."
# Initial message length in bits(!).
self
.
length
=
0
self
.
count
=
[
0
,
0
]
# Initial empty message as a sequence of bytes (8 bit characters).
self
.
input
=
[]
# Call a separate init function, that can be used repeatedly
# to start from scratch on the same object.
self
.
init
()
def
init
(
self
):
"Initialize the message-digest and set all fields to zero."
self
.
length
=
0
self
.
input
=
[]
# Initial 160 bit message digest (5 times 32 bit).
self
.
H0
=
0x67452301
self
.
H1
=
0xEFCDAB89
self
.
H2
=
0x98BADCFE
self
.
H3
=
0x10325476
self
.
H4
=
0xC3D2E1F0
def
_transform
(
self
,
W
):
for
t
in
range
(
16
,
80
):
W
.
append
(
_rotateLeft
(
W
[
t
-
3
]
^
W
[
t
-
8
]
^
W
[
t
-
14
]
^
W
[
t
-
16
],
1
)
&
0xffffffff
)
A
=
self
.
H0
B
=
self
.
H1
C
=
self
.
H2
D
=
self
.
H3
E
=
self
.
H4
"""
This loop was unrolled to gain about 10% in speed
for t in range(0, 80):
TEMP = _rotateLeft(A, 5) + f[t/20] + E + W[t] + K[t/20]
E = D
D = C
C = _rotateLeft(B, 30) & 0xffffffff
B = A
A = TEMP & 0xffffffff
"""
for
t
in
range
(
0
,
20
):
TEMP
=
_rotateLeft
(
A
,
5
)
+
((
B
&
C
)
|
((
~
B
)
&
D
))
+
E
+
W
[
t
]
+
K
[
0
]
E
=
D
D
=
C
C
=
_rotateLeft
(
B
,
30
)
&
0xffffffff
B
=
A
A
=
TEMP
&
0xffffffff
for
t
in
range
(
20
,
40
):
TEMP
=
_rotateLeft
(
A
,
5
)
+
(
B
^
C
^
D
)
+
E
+
W
[
t
]
+
K
[
1
]
E
=
D
D
=
C
C
=
_rotateLeft
(
B
,
30
)
&
0xffffffff
B
=
A
A
=
TEMP
&
0xffffffff
for
t
in
range
(
40
,
60
):
TEMP
=
_rotateLeft
(
A
,
5
)
+
((
B
&
C
)
|
(
B
&
D
)
|
(
C
&
D
))
+
E
+
W
[
t
]
+
K
[
2
]
E
=
D
D
=
C
C
=
_rotateLeft
(
B
,
30
)
&
0xffffffff
B
=
A
A
=
TEMP
&
0xffffffff
for
t
in
range
(
60
,
80
):
TEMP
=
_rotateLeft
(
A
,
5
)
+
(
B
^
C
^
D
)
+
E
+
W
[
t
]
+
K
[
3
]
E
=
D
D
=
C
C
=
_rotateLeft
(
B
,
30
)
&
0xffffffff
B
=
A
A
=
TEMP
&
0xffffffff
self
.
H0
=
(
self
.
H0
+
A
)
&
0xffffffff
self
.
H1
=
(
self
.
H1
+
B
)
&
0xffffffff
self
.
H2
=
(
self
.
H2
+
C
)
&
0xffffffff
self
.
H3
=
(
self
.
H3
+
D
)
&
0xffffffff
self
.
H4
=
(
self
.
H4
+
E
)
&
0xffffffff
# Down from here all methods follow the Python Standard Library
# API of the sha module.
def
update
(
self
,
inBuf
):
"""Add to the current message.
Update the md5 object with the string arg. Repeated calls
are equivalent to a single call with the concatenation of all
the arguments, i.e. m.update(a); m.update(b) is equivalent
to m.update(a+b).
The hash is immediately calculated for all full blocks. The final
calculation is made in digest(). It will calculate 1-2 blocks,
depending on how much padding we have to add. This allows us to
keep an intermediate value for the hash, so that we only need to
make minimal recalculation if we call update() to add more data
to the hashed string.
"""
leninBuf
=
len
(
inBuf
)
# Compute number of bytes mod 64.
index
=
(
self
.
count
[
1
]
>>
3
)
&
0x3F
# Update number of bits.
self
.
count
[
1
]
=
self
.
count
[
1
]
+
(
leninBuf
<<
3
)
if
self
.
count
[
1
]
<
(
leninBuf
<<
3
):
self
.
count
[
0
]
=
self
.
count
[
0
]
+
1
self
.
count
[
0
]
=
self
.
count
[
0
]
+
(
leninBuf
>>
29
)
partLen
=
64
-
index
if
leninBuf
>=
partLen
:
self
.
input
[
index
:]
=
list
(
inBuf
[:
partLen
])
self
.
_transform
(
_bytelist2longBigEndian
(
self
.
input
))
i
=
partLen
while
i
+
63
<
leninBuf
:
self
.
_transform
(
_bytelist2longBigEndian
(
list
(
inBuf
[
i
:
i
+
64
])))
i
=
i
+
64
else
:
self
.
input
=
list
(
inBuf
[
i
:
leninBuf
])
else
:
i
=
0
self
.
input
=
self
.
input
+
list
(
inBuf
)
def
digest
(
self
):
"""Terminate the message-digest computation and return digest.
Return the digest of the strings passed to the update()
method so far. This is a 16-byte string which may contain
non-ASCII characters, including null bytes.
"""
H0
=
self
.
H0
H1
=
self
.
H1
H2
=
self
.
H2
H3
=
self
.
H3
H4
=
self
.
H4
input
=
[]
+
self
.
input
count
=
[]
+
self
.
count
index
=
(
self
.
count
[
1
]
>>
3
)
&
0x3f
if
index
<
56
:
padLen
=
56
-
index
else
:
padLen
=
120
-
index
padding
=
[
'
\
200
'
]
+
[
'
\
000
'
]
*
63
self
.
update
(
padding
[:
padLen
])
# Append length (before padding).
bits
=
_bytelist2longBigEndian
(
self
.
input
[:
56
])
+
count
self
.
_transform
(
bits
)
# Store state in digest.
digest
=
_long2bytesBigEndian
(
self
.
H0
,
4
)
+
\
_long2bytesBigEndian
(
self
.
H1
,
4
)
+
\
_long2bytesBigEndian
(
self
.
H2
,
4
)
+
\
_long2bytesBigEndian
(
self
.
H3
,
4
)
+
\
_long2bytesBigEndian
(
self
.
H4
,
4
)
self
.
H0
=
H0
self
.
H1
=
H1
self
.
H2
=
H2
self
.
H3
=
H3
self
.
H4
=
H4
self
.
input
=
input
self
.
count
=
count
return
digest
def
hexdigest
(
self
):
"""Terminate and return digest in HEX form.
Like digest() except the digest is returned as a string of
length 32, containing only hexadecimal digits. This may be
used to exchange the value safely in email or other non-
binary environments.
"""
return
''
.
join
([
'%02x'
%
ord
(
c
)
for
c
in
self
.
digest
()])
def
copy
(
self
):
"""Return a clone object.
Return a copy ('clone') of the md5 object. This can be used
to efficiently compute the digests of strings that share
a common initial substring.
"""
return
copy
.
deepcopy
(
self
)
# ======================================================================
# Mimic Python top-level functions from standard library API
# for consistency with the _sha module of the standard library.
# ======================================================================
# These are mandatory variables in the module. They have constant values
# in the SHA standard.
digest_size
=
20
digestsize
=
20
blocksize
=
1
def
new
(
arg
=
None
):
"""Return a new sha crypto object.
If arg is present, the method call update(arg) is made.
"""
crypto
=
sha
()
if
arg
:
crypto
.
update
(
arg
)
return
crypto
if
__name__
==
"__main__"
:
a_str
=
"just a test string"
assert
'da39a3ee5e6b4b0d3255bfef95601890afd80709'
==
new
().
hexdigest
()
assert
'3f0cf2e3d9e5903e839417dfc47fed6bfa6457f6'
==
new
(
a_str
).
hexdigest
()
assert
'0852b254078fe3772568a4aba37b917f3d4066ba'
==
new
(
a_str
*
7
).
hexdigest
()
s
=
new
(
a_str
)
s
.
update
(
a_str
)
assert
'8862c1b50967f39d3db6bdc2877d9ccebd3102e5'
==
s
.
hexdigest
()
setuptools/_backport/hashlib/_sha256.py
deleted
100644 → 0
View file @
dbe5fff6
import
struct
SHA_BLOCKSIZE
=
64
SHA_DIGESTSIZE
=
32
def
new_shaobject
():
return
{
'digest'
:
[
0
]
*
8
,
'count_lo'
:
0
,
'count_hi'
:
0
,
'data'
:
[
0
]
*
SHA_BLOCKSIZE
,
'local'
:
0
,
'digestsize'
:
0
}
ROR
=
lambda
x
,
y
:
(((
x
&
0xffffffff
)
>>
(
y
&
31
))
|
(
x
<<
(
32
-
(
y
&
31
))))
&
0xffffffff
Ch
=
lambda
x
,
y
,
z
:
(
z
^
(
x
&
(
y
^
z
)))
Maj
=
lambda
x
,
y
,
z
:
(((
x
|
y
)
&
z
)
|
(
x
&
y
))
S
=
lambda
x
,
n
:
ROR
(
x
,
n
)
R
=
lambda
x
,
n
:
(
x
&
0xffffffff
)
>>
n
Sigma0
=
lambda
x
:
(
S
(
x
,
2
)
^
S
(
x
,
13
)
^
S
(
x
,
22
))
Sigma1
=
lambda
x
:
(
S
(
x
,
6
)
^
S
(
x
,
11
)
^
S
(
x
,
25
))
Gamma0
=
lambda
x
:
(
S
(
x
,
7
)
^
S
(
x
,
18
)
^
R
(
x
,
3
))
Gamma1
=
lambda
x
:
(
S
(
x
,
17
)
^
S
(
x
,
19
)
^
R
(
x
,
10
))
def
sha_transform
(
sha_info
):
W
=
[]
d
=
sha_info
[
'data'
]
for
i
in
xrange
(
0
,
16
):
W
.
append
(
(
d
[
4
*
i
]
<<
24
)
+
(
d
[
4
*
i
+
1
]
<<
16
)
+
(
d
[
4
*
i
+
2
]
<<
8
)
+
d
[
4
*
i
+
3
])
for
i
in
xrange
(
16
,
64
):
W
.
append
(
(
Gamma1
(
W
[
i
-
2
])
+
W
[
i
-
7
]
+
Gamma0
(
W
[
i
-
15
])
+
W
[
i
-
16
])
&
0xffffffff
)
ss
=
sha_info
[
'digest'
][:]
def
RND
(
a
,
b
,
c
,
d
,
e
,
f
,
g
,
h
,
i
,
ki
):
t0
=
h
+
Sigma1
(
e
)
+
Ch
(
e
,
f
,
g
)
+
ki
+
W
[
i
];
t1
=
Sigma0
(
a
)
+
Maj
(
a
,
b
,
c
);
d
+=
t0
;
h
=
t0
+
t1
;
return
d
&
0xffffffff
,
h
&
0xffffffff
ss
[
3
],
ss
[
7
]
=
RND
(
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
0
,
0x428a2f98
);
ss
[
2
],
ss
[
6
]
=
RND
(
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
1
,
0x71374491
);
ss
[
1
],
ss
[
5
]
=
RND
(
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
2
,
0xb5c0fbcf
);
ss
[
0
],
ss
[
4
]
=
RND
(
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
3
,
0xe9b5dba5
);
ss
[
7
],
ss
[
3
]
=
RND
(
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
4
,
0x3956c25b
);
ss
[
6
],
ss
[
2
]
=
RND
(
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
5
,
0x59f111f1
);
ss
[
5
],
ss
[
1
]
=
RND
(
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
6
,
0x923f82a4
);
ss
[
4
],
ss
[
0
]
=
RND
(
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
7
,
0xab1c5ed5
);
ss
[
3
],
ss
[
7
]
=
RND
(
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
8
,
0xd807aa98
);
ss
[
2
],
ss
[
6
]
=
RND
(
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
9
,
0x12835b01
);
ss
[
1
],
ss
[
5
]
=
RND
(
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
10
,
0x243185be
);
ss
[
0
],
ss
[
4
]
=
RND
(
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
11
,
0x550c7dc3
);
ss
[
7
],
ss
[
3
]
=
RND
(
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
12
,
0x72be5d74
);
ss
[
6
],
ss
[
2
]
=
RND
(
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
13
,
0x80deb1fe
);
ss
[
5
],
ss
[
1
]
=
RND
(
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
14
,
0x9bdc06a7
);
ss
[
4
],
ss
[
0
]
=
RND
(
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
15
,
0xc19bf174
);
ss
[
3
],
ss
[
7
]
=
RND
(
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
16
,
0xe49b69c1
);
ss
[
2
],
ss
[
6
]
=
RND
(
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
17
,
0xefbe4786
);
ss
[
1
],
ss
[
5
]
=
RND
(
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
18
,
0x0fc19dc6
);
ss
[
0
],
ss
[
4
]
=
RND
(
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
19
,
0x240ca1cc
);
ss
[
7
],
ss
[
3
]
=
RND
(
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
20
,
0x2de92c6f
);
ss
[
6
],
ss
[
2
]
=
RND
(
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
21
,
0x4a7484aa
);
ss
[
5
],
ss
[
1
]
=
RND
(
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
22
,
0x5cb0a9dc
);
ss
[
4
],
ss
[
0
]
=
RND
(
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
23
,
0x76f988da
);
ss
[
3
],
ss
[
7
]
=
RND
(
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
24
,
0x983e5152
);
ss
[
2
],
ss
[
6
]
=
RND
(
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
25
,
0xa831c66d
);
ss
[
1
],
ss
[
5
]
=
RND
(
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
26
,
0xb00327c8
);
ss
[
0
],
ss
[
4
]
=
RND
(
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
27
,
0xbf597fc7
);
ss
[
7
],
ss
[
3
]
=
RND
(
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
28
,
0xc6e00bf3
);
ss
[
6
],
ss
[
2
]
=
RND
(
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
29
,
0xd5a79147
);
ss
[
5
],
ss
[
1
]
=
RND
(
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
30
,
0x06ca6351
);
ss
[
4
],
ss
[
0
]
=
RND
(
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
31
,
0x14292967
);
ss
[
3
],
ss
[
7
]
=
RND
(
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
32
,
0x27b70a85
);
ss
[
2
],
ss
[
6
]
=
RND
(
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
33
,
0x2e1b2138
);
ss
[
1
],
ss
[
5
]
=
RND
(
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
34
,
0x4d2c6dfc
);
ss
[
0
],
ss
[
4
]
=
RND
(
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
35
,
0x53380d13
);
ss
[
7
],
ss
[
3
]
=
RND
(
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
36
,
0x650a7354
);
ss
[
6
],
ss
[
2
]
=
RND
(
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
37
,
0x766a0abb
);
ss
[
5
],
ss
[
1
]
=
RND
(
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
38
,
0x81c2c92e
);
ss
[
4
],
ss
[
0
]
=
RND
(
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
39
,
0x92722c85
);
ss
[
3
],
ss
[
7
]
=
RND
(
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
40
,
0xa2bfe8a1
);
ss
[
2
],
ss
[
6
]
=
RND
(
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
41
,
0xa81a664b
);
ss
[
1
],
ss
[
5
]
=
RND
(
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
42
,
0xc24b8b70
);
ss
[
0
],
ss
[
4
]
=
RND
(
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
43
,
0xc76c51a3
);
ss
[
7
],
ss
[
3
]
=
RND
(
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
44
,
0xd192e819
);
ss
[
6
],
ss
[
2
]
=
RND
(
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
45
,
0xd6990624
);
ss
[
5
],
ss
[
1
]
=
RND
(
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
46
,
0xf40e3585
);
ss
[
4
],
ss
[
0
]
=
RND
(
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
47
,
0x106aa070
);
ss
[
3
],
ss
[
7
]
=
RND
(
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
48
,
0x19a4c116
);
ss
[
2
],
ss
[
6
]
=
RND
(
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
49
,
0x1e376c08
);
ss
[
1
],
ss
[
5
]
=
RND
(
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
50
,
0x2748774c
);
ss
[
0
],
ss
[
4
]
=
RND
(
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
51
,
0x34b0bcb5
);
ss
[
7
],
ss
[
3
]
=
RND
(
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
52
,
0x391c0cb3
);
ss
[
6
],
ss
[
2
]
=
RND
(
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
53
,
0x4ed8aa4a
);
ss
[
5
],
ss
[
1
]
=
RND
(
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
54
,
0x5b9cca4f
);
ss
[
4
],
ss
[
0
]
=
RND
(
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
55
,
0x682e6ff3
);
ss
[
3
],
ss
[
7
]
=
RND
(
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
56
,
0x748f82ee
);
ss
[
2
],
ss
[
6
]
=
RND
(
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
57
,
0x78a5636f
);
ss
[
1
],
ss
[
5
]
=
RND
(
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
58
,
0x84c87814
);
ss
[
0
],
ss
[
4
]
=
RND
(
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
59
,
0x8cc70208
);
ss
[
7
],
ss
[
3
]
=
RND
(
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
60
,
0x90befffa
);
ss
[
6
],
ss
[
2
]
=
RND
(
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
61
,
0xa4506ceb
);
ss
[
5
],
ss
[
1
]
=
RND
(
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
62
,
0xbef9a3f7
);
ss
[
4
],
ss
[
0
]
=
RND
(
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
63
,
0xc67178f2
);
dig
=
[]
for
i
,
x
in
enumerate
(
sha_info
[
'digest'
]):
dig
.
append
(
(
x
+
ss
[
i
])
&
0xffffffff
)
sha_info
[
'digest'
]
=
dig
def
sha_init
():
sha_info
=
new_shaobject
()
sha_info
[
'digest'
]
=
[
0x6A09E667
,
0xBB67AE85
,
0x3C6EF372
,
0xA54FF53A
,
0x510E527F
,
0x9B05688C
,
0x1F83D9AB
,
0x5BE0CD19
]
sha_info
[
'count_lo'
]
=
0
sha_info
[
'count_hi'
]
=
0
sha_info
[
'local'
]
=
0
sha_info
[
'digestsize'
]
=
32
return
sha_info
def
sha224_init
():
sha_info
=
new_shaobject
()
sha_info
[
'digest'
]
=
[
0xc1059ed8
,
0x367cd507
,
0x3070dd17
,
0xf70e5939
,
0xffc00b31
,
0x68581511
,
0x64f98fa7
,
0xbefa4fa4
]
sha_info
[
'count_lo'
]
=
0
sha_info
[
'count_hi'
]
=
0
sha_info
[
'local'
]
=
0
sha_info
[
'digestsize'
]
=
28
return
sha_info
def
getbuf
(
s
):
if
isinstance
(
s
,
str
):
return
s
elif
isinstance
(
s
,
unicode
):
return
str
(
s
)
else
:
return
buffer
(
s
)
def
sha_update
(
sha_info
,
buffer
):
count
=
len
(
buffer
)
buffer_idx
=
0
clo
=
(
sha_info
[
'count_lo'
]
+
(
count
<<
3
))
&
0xffffffff
if
clo
<
sha_info
[
'count_lo'
]:
sha_info
[
'count_hi'
]
+=
1
sha_info
[
'count_lo'
]
=
clo
sha_info
[
'count_hi'
]
+=
(
count
>>
29
)
if
sha_info
[
'local'
]:
i
=
SHA_BLOCKSIZE
-
sha_info
[
'local'
]
if
i
>
count
:
i
=
count
# copy buffer
for
x
in
enumerate
(
buffer
[
buffer_idx
:
buffer_idx
+
i
]):
sha_info
[
'data'
][
sha_info
[
'local'
]
+
x
[
0
]]
=
struct
.
unpack
(
'B'
,
x
[
1
])[
0
]
count
-=
i
buffer_idx
+=
i
sha_info
[
'local'
]
+=
i
if
sha_info
[
'local'
]
==
SHA_BLOCKSIZE
:
sha_transform
(
sha_info
)
sha_info
[
'local'
]
=
0
else
:
return
while
count
>=
SHA_BLOCKSIZE
:
# copy buffer
sha_info
[
'data'
]
=
[
struct
.
unpack
(
'B'
,
c
)[
0
]
for
c
in
buffer
[
buffer_idx
:
buffer_idx
+
SHA_BLOCKSIZE
]]
count
-=
SHA_BLOCKSIZE
buffer_idx
+=
SHA_BLOCKSIZE
sha_transform
(
sha_info
)
# copy buffer
pos
=
sha_info
[
'local'
]
sha_info
[
'data'
][
pos
:
pos
+
count
]
=
[
struct
.
unpack
(
'B'
,
c
)[
0
]
for
c
in
buffer
[
buffer_idx
:
buffer_idx
+
count
]]
sha_info
[
'local'
]
=
count
def
sha_final
(
sha_info
):
lo_bit_count
=
sha_info
[
'count_lo'
]
hi_bit_count
=
sha_info
[
'count_hi'
]
count
=
(
lo_bit_count
>>
3
)
&
0x3f
sha_info
[
'data'
][
count
]
=
0x80
;
count
+=
1
if
count
>
SHA_BLOCKSIZE
-
8
:
# zero the bytes in data after the count
sha_info
[
'data'
]
=
sha_info
[
'data'
][:
count
]
+
([
0
]
*
(
SHA_BLOCKSIZE
-
count
))
sha_transform
(
sha_info
)
# zero bytes in data
sha_info
[
'data'
]
=
[
0
]
*
SHA_BLOCKSIZE
else
:
sha_info
[
'data'
]
=
sha_info
[
'data'
][:
count
]
+
([
0
]
*
(
SHA_BLOCKSIZE
-
count
))
sha_info
[
'data'
][
56
]
=
(
hi_bit_count
>>
24
)
&
0xff
sha_info
[
'data'
][
57
]
=
(
hi_bit_count
>>
16
)
&
0xff
sha_info
[
'data'
][
58
]
=
(
hi_bit_count
>>
8
)
&
0xff
sha_info
[
'data'
][
59
]
=
(
hi_bit_count
>>
0
)
&
0xff
sha_info
[
'data'
][
60
]
=
(
lo_bit_count
>>
24
)
&
0xff
sha_info
[
'data'
][
61
]
=
(
lo_bit_count
>>
16
)
&
0xff
sha_info
[
'data'
][
62
]
=
(
lo_bit_count
>>
8
)
&
0xff
sha_info
[
'data'
][
63
]
=
(
lo_bit_count
>>
0
)
&
0xff
sha_transform
(
sha_info
)
dig
=
[]
for
i
in
sha_info
[
'digest'
]:
dig
.
extend
([
((
i
>>
24
)
&
0xff
),
((
i
>>
16
)
&
0xff
),
((
i
>>
8
)
&
0xff
),
(
i
&
0xff
)
])
return
''
.
join
([
chr
(
i
)
for
i
in
dig
])
class
sha256
(
object
):
digest_size
=
digestsize
=
SHA_DIGESTSIZE
block_size
=
SHA_BLOCKSIZE
def
__init__
(
self
,
s
=
None
):
self
.
_sha
=
sha_init
()
if
s
:
sha_update
(
self
.
_sha
,
getbuf
(
s
))
def
update
(
self
,
s
):
sha_update
(
self
.
_sha
,
getbuf
(
s
))
def
digest
(
self
):
return
sha_final
(
self
.
_sha
.
copy
())[:
self
.
_sha
[
'digestsize'
]]
def
hexdigest
(
self
):
return
''
.
join
([
'%.2x'
%
ord
(
i
)
for
i
in
self
.
digest
()])
def
copy
(
self
):
new
=
sha256
.
__new__
(
sha256
)
new
.
_sha
=
self
.
_sha
.
copy
()
return
new
class
sha224
(
sha256
):
digest_size
=
digestsize
=
28
def
__init__
(
self
,
s
=
None
):
self
.
_sha
=
sha224_init
()
if
s
:
sha_update
(
self
.
_sha
,
getbuf
(
s
))
def
copy
(
self
):
new
=
sha224
.
__new__
(
sha224
)
new
.
_sha
=
self
.
_sha
.
copy
()
return
new
if
__name__
==
"__main__"
:
a_str
=
"just a test string"
assert
'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'
==
sha256
().
hexdigest
()
assert
'd7b553c6f09ac85d142415f857c5310f3bbbe7cdd787cce4b985acedd585266f'
==
sha256
(
a_str
).
hexdigest
()
assert
'8113ebf33c97daa9998762aacafe750c7cefc2b2f173c90c59663a57fe626f21'
==
sha256
(
a_str
*
7
).
hexdigest
()
s
=
sha256
(
a_str
)
s
.
update
(
a_str
)
assert
'03d9963e05a094593190b6fc794cb1a3e1ac7d7883f0b5855268afeccc70d461'
==
s
.
hexdigest
()
setuptools/_backport/hashlib/_sha512.py
deleted
100644 → 0
View file @
dbe5fff6
"""
This code was Ported from CPython's sha512module.c
"""
import
struct
SHA_BLOCKSIZE
=
128
SHA_DIGESTSIZE
=
64
def
new_shaobject
():
return
{
'digest'
:
[
0
]
*
8
,
'count_lo'
:
0
,
'count_hi'
:
0
,
'data'
:
[
0
]
*
SHA_BLOCKSIZE
,
'local'
:
0
,
'digestsize'
:
0
}
ROR64
=
lambda
x
,
y
:
(((
x
&
0xffffffffffffffff
)
>>
(
y
&
63
))
|
(
x
<<
(
64
-
(
y
&
63
))))
&
0xffffffffffffffff
Ch
=
lambda
x
,
y
,
z
:
(
z
^
(
x
&
(
y
^
z
)))
Maj
=
lambda
x
,
y
,
z
:
(((
x
|
y
)
&
z
)
|
(
x
&
y
))
S
=
lambda
x
,
n
:
ROR64
(
x
,
n
)
R
=
lambda
x
,
n
:
(
x
&
0xffffffffffffffff
)
>>
n
Sigma0
=
lambda
x
:
(
S
(
x
,
28
)
^
S
(
x
,
34
)
^
S
(
x
,
39
))
Sigma1
=
lambda
x
:
(
S
(
x
,
14
)
^
S
(
x
,
18
)
^
S
(
x
,
41
))
Gamma0
=
lambda
x
:
(
S
(
x
,
1
)
^
S
(
x
,
8
)
^
R
(
x
,
7
))
Gamma1
=
lambda
x
:
(
S
(
x
,
19
)
^
S
(
x
,
61
)
^
R
(
x
,
6
))
def
sha_transform
(
sha_info
):
W
=
[]
d
=
sha_info
[
'data'
]
for
i
in
xrange
(
0
,
16
):
W
.
append
(
(
d
[
8
*
i
]
<<
56
)
+
(
d
[
8
*
i
+
1
]
<<
48
)
+
(
d
[
8
*
i
+
2
]
<<
40
)
+
(
d
[
8
*
i
+
3
]
<<
32
)
+
(
d
[
8
*
i
+
4
]
<<
24
)
+
(
d
[
8
*
i
+
5
]
<<
16
)
+
(
d
[
8
*
i
+
6
]
<<
8
)
+
d
[
8
*
i
+
7
])
for
i
in
xrange
(
16
,
80
):
W
.
append
(
(
Gamma1
(
W
[
i
-
2
])
+
W
[
i
-
7
]
+
Gamma0
(
W
[
i
-
15
])
+
W
[
i
-
16
])
&
0xffffffffffffffff
)
ss
=
sha_info
[
'digest'
][:]
def
RND
(
a
,
b
,
c
,
d
,
e
,
f
,
g
,
h
,
i
,
ki
):
t0
=
(
h
+
Sigma1
(
e
)
+
Ch
(
e
,
f
,
g
)
+
ki
+
W
[
i
])
&
0xffffffffffffffff
t1
=
(
Sigma0
(
a
)
+
Maj
(
a
,
b
,
c
))
&
0xffffffffffffffff
d
=
(
d
+
t0
)
&
0xffffffffffffffff
h
=
(
t0
+
t1
)
&
0xffffffffffffffff
return
d
&
0xffffffffffffffff
,
h
&
0xffffffffffffffff
ss
[
3
],
ss
[
7
]
=
RND
(
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
0
,
0x428a2f98d728ae22
)
ss
[
2
],
ss
[
6
]
=
RND
(
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
1
,
0x7137449123ef65cd
)
ss
[
1
],
ss
[
5
]
=
RND
(
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
2
,
0xb5c0fbcfec4d3b2f
)
ss
[
0
],
ss
[
4
]
=
RND
(
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
3
,
0xe9b5dba58189dbbc
)
ss
[
7
],
ss
[
3
]
=
RND
(
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
4
,
0x3956c25bf348b538
)
ss
[
6
],
ss
[
2
]
=
RND
(
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
5
,
0x59f111f1b605d019
)
ss
[
5
],
ss
[
1
]
=
RND
(
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
6
,
0x923f82a4af194f9b
)
ss
[
4
],
ss
[
0
]
=
RND
(
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
7
,
0xab1c5ed5da6d8118
)
ss
[
3
],
ss
[
7
]
=
RND
(
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
8
,
0xd807aa98a3030242
)
ss
[
2
],
ss
[
6
]
=
RND
(
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
9
,
0x12835b0145706fbe
)
ss
[
1
],
ss
[
5
]
=
RND
(
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
10
,
0x243185be4ee4b28c
)
ss
[
0
],
ss
[
4
]
=
RND
(
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
11
,
0x550c7dc3d5ffb4e2
)
ss
[
7
],
ss
[
3
]
=
RND
(
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
12
,
0x72be5d74f27b896f
)
ss
[
6
],
ss
[
2
]
=
RND
(
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
13
,
0x80deb1fe3b1696b1
)
ss
[
5
],
ss
[
1
]
=
RND
(
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
14
,
0x9bdc06a725c71235
)
ss
[
4
],
ss
[
0
]
=
RND
(
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
15
,
0xc19bf174cf692694
)
ss
[
3
],
ss
[
7
]
=
RND
(
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
16
,
0xe49b69c19ef14ad2
)
ss
[
2
],
ss
[
6
]
=
RND
(
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
17
,
0xefbe4786384f25e3
)
ss
[
1
],
ss
[
5
]
=
RND
(
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
18
,
0x0fc19dc68b8cd5b5
)
ss
[
0
],
ss
[
4
]
=
RND
(
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
19
,
0x240ca1cc77ac9c65
)
ss
[
7
],
ss
[
3
]
=
RND
(
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
20
,
0x2de92c6f592b0275
)
ss
[
6
],
ss
[
2
]
=
RND
(
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
21
,
0x4a7484aa6ea6e483
)
ss
[
5
],
ss
[
1
]
=
RND
(
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
22
,
0x5cb0a9dcbd41fbd4
)
ss
[
4
],
ss
[
0
]
=
RND
(
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
23
,
0x76f988da831153b5
)
ss
[
3
],
ss
[
7
]
=
RND
(
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
24
,
0x983e5152ee66dfab
)
ss
[
2
],
ss
[
6
]
=
RND
(
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
25
,
0xa831c66d2db43210
)
ss
[
1
],
ss
[
5
]
=
RND
(
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
26
,
0xb00327c898fb213f
)
ss
[
0
],
ss
[
4
]
=
RND
(
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
27
,
0xbf597fc7beef0ee4
)
ss
[
7
],
ss
[
3
]
=
RND
(
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
28
,
0xc6e00bf33da88fc2
)
ss
[
6
],
ss
[
2
]
=
RND
(
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
29
,
0xd5a79147930aa725
)
ss
[
5
],
ss
[
1
]
=
RND
(
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
30
,
0x06ca6351e003826f
)
ss
[
4
],
ss
[
0
]
=
RND
(
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
31
,
0x142929670a0e6e70
)
ss
[
3
],
ss
[
7
]
=
RND
(
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
32
,
0x27b70a8546d22ffc
)
ss
[
2
],
ss
[
6
]
=
RND
(
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
33
,
0x2e1b21385c26c926
)
ss
[
1
],
ss
[
5
]
=
RND
(
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
34
,
0x4d2c6dfc5ac42aed
)
ss
[
0
],
ss
[
4
]
=
RND
(
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
35
,
0x53380d139d95b3df
)
ss
[
7
],
ss
[
3
]
=
RND
(
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
36
,
0x650a73548baf63de
)
ss
[
6
],
ss
[
2
]
=
RND
(
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
37
,
0x766a0abb3c77b2a8
)
ss
[
5
],
ss
[
1
]
=
RND
(
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
38
,
0x81c2c92e47edaee6
)
ss
[
4
],
ss
[
0
]
=
RND
(
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
39
,
0x92722c851482353b
)
ss
[
3
],
ss
[
7
]
=
RND
(
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
40
,
0xa2bfe8a14cf10364
)
ss
[
2
],
ss
[
6
]
=
RND
(
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
41
,
0xa81a664bbc423001
)
ss
[
1
],
ss
[
5
]
=
RND
(
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
42
,
0xc24b8b70d0f89791
)
ss
[
0
],
ss
[
4
]
=
RND
(
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
43
,
0xc76c51a30654be30
)
ss
[
7
],
ss
[
3
]
=
RND
(
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
44
,
0xd192e819d6ef5218
)
ss
[
6
],
ss
[
2
]
=
RND
(
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
45
,
0xd69906245565a910
)
ss
[
5
],
ss
[
1
]
=
RND
(
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
46
,
0xf40e35855771202a
)
ss
[
4
],
ss
[
0
]
=
RND
(
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
47
,
0x106aa07032bbd1b8
)
ss
[
3
],
ss
[
7
]
=
RND
(
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
48
,
0x19a4c116b8d2d0c8
)
ss
[
2
],
ss
[
6
]
=
RND
(
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
49
,
0x1e376c085141ab53
)
ss
[
1
],
ss
[
5
]
=
RND
(
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
50
,
0x2748774cdf8eeb99
)
ss
[
0
],
ss
[
4
]
=
RND
(
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
51
,
0x34b0bcb5e19b48a8
)
ss
[
7
],
ss
[
3
]
=
RND
(
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
52
,
0x391c0cb3c5c95a63
)
ss
[
6
],
ss
[
2
]
=
RND
(
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
53
,
0x4ed8aa4ae3418acb
)
ss
[
5
],
ss
[
1
]
=
RND
(
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
54
,
0x5b9cca4f7763e373
)
ss
[
4
],
ss
[
0
]
=
RND
(
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
55
,
0x682e6ff3d6b2b8a3
)
ss
[
3
],
ss
[
7
]
=
RND
(
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
56
,
0x748f82ee5defb2fc
)
ss
[
2
],
ss
[
6
]
=
RND
(
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
57
,
0x78a5636f43172f60
)
ss
[
1
],
ss
[
5
]
=
RND
(
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
58
,
0x84c87814a1f0ab72
)
ss
[
0
],
ss
[
4
]
=
RND
(
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
59
,
0x8cc702081a6439ec
)
ss
[
7
],
ss
[
3
]
=
RND
(
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
60
,
0x90befffa23631e28
)
ss
[
6
],
ss
[
2
]
=
RND
(
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
61
,
0xa4506cebde82bde9
)
ss
[
5
],
ss
[
1
]
=
RND
(
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
62
,
0xbef9a3f7b2c67915
)
ss
[
4
],
ss
[
0
]
=
RND
(
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
63
,
0xc67178f2e372532b
)
ss
[
3
],
ss
[
7
]
=
RND
(
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
64
,
0xca273eceea26619c
)
ss
[
2
],
ss
[
6
]
=
RND
(
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
65
,
0xd186b8c721c0c207
)
ss
[
1
],
ss
[
5
]
=
RND
(
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
66
,
0xeada7dd6cde0eb1e
)
ss
[
0
],
ss
[
4
]
=
RND
(
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
67
,
0xf57d4f7fee6ed178
)
ss
[
7
],
ss
[
3
]
=
RND
(
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
68
,
0x06f067aa72176fba
)
ss
[
6
],
ss
[
2
]
=
RND
(
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
69
,
0x0a637dc5a2c898a6
)
ss
[
5
],
ss
[
1
]
=
RND
(
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
70
,
0x113f9804bef90dae
)
ss
[
4
],
ss
[
0
]
=
RND
(
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
71
,
0x1b710b35131c471b
)
ss
[
3
],
ss
[
7
]
=
RND
(
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
72
,
0x28db77f523047d84
)
ss
[
2
],
ss
[
6
]
=
RND
(
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
73
,
0x32caab7b40c72493
)
ss
[
1
],
ss
[
5
]
=
RND
(
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
74
,
0x3c9ebe0a15c9bebc
)
ss
[
0
],
ss
[
4
]
=
RND
(
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
75
,
0x431d67c49c100d4c
)
ss
[
7
],
ss
[
3
]
=
RND
(
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
ss
[
3
],
76
,
0x4cc5d4becb3e42b6
)
ss
[
6
],
ss
[
2
]
=
RND
(
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
ss
[
2
],
77
,
0x597f299cfc657e2a
)
ss
[
5
],
ss
[
1
]
=
RND
(
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
ss
[
1
],
78
,
0x5fcb6fab3ad6faec
)
ss
[
4
],
ss
[
0
]
=
RND
(
ss
[
1
],
ss
[
2
],
ss
[
3
],
ss
[
4
],
ss
[
5
],
ss
[
6
],
ss
[
7
],
ss
[
0
],
79
,
0x6c44198c4a475817
)
dig
=
[]
for
i
,
x
in
enumerate
(
sha_info
[
'digest'
]):
dig
.
append
(
(
x
+
ss
[
i
])
&
0xffffffffffffffff
)
sha_info
[
'digest'
]
=
dig
def
sha_init
():
sha_info
=
new_shaobject
()
sha_info
[
'digest'
]
=
[
0x6a09e667f3bcc908
,
0xbb67ae8584caa73b
,
0x3c6ef372fe94f82b
,
0xa54ff53a5f1d36f1
,
0x510e527fade682d1
,
0x9b05688c2b3e6c1f
,
0x1f83d9abfb41bd6b
,
0x5be0cd19137e2179
]
sha_info
[
'count_lo'
]
=
0
sha_info
[
'count_hi'
]
=
0
sha_info
[
'local'
]
=
0
sha_info
[
'digestsize'
]
=
64
return
sha_info
def
sha384_init
():
sha_info
=
new_shaobject
()
sha_info
[
'digest'
]
=
[
0xcbbb9d5dc1059ed8
,
0x629a292a367cd507
,
0x9159015a3070dd17
,
0x152fecd8f70e5939
,
0x67332667ffc00b31
,
0x8eb44a8768581511
,
0xdb0c2e0d64f98fa7
,
0x47b5481dbefa4fa4
]
sha_info
[
'count_lo'
]
=
0
sha_info
[
'count_hi'
]
=
0
sha_info
[
'local'
]
=
0
sha_info
[
'digestsize'
]
=
48
return
sha_info
def
getbuf
(
s
):
if
isinstance
(
s
,
str
):
return
s
elif
isinstance
(
s
,
unicode
):
return
str
(
s
)
else
:
return
buffer
(
s
)
def
sha_update
(
sha_info
,
buffer
):
count
=
len
(
buffer
)
buffer_idx
=
0
clo
=
(
sha_info
[
'count_lo'
]
+
(
count
<<
3
))
&
0xffffffff
if
clo
<
sha_info
[
'count_lo'
]:
sha_info
[
'count_hi'
]
+=
1
sha_info
[
'count_lo'
]
=
clo
sha_info
[
'count_hi'
]
+=
(
count
>>
29
)
if
sha_info
[
'local'
]:
i
=
SHA_BLOCKSIZE
-
sha_info
[
'local'
]
if
i
>
count
:
i
=
count
# copy buffer
for
x
in
enumerate
(
buffer
[
buffer_idx
:
buffer_idx
+
i
]):
sha_info
[
'data'
][
sha_info
[
'local'
]
+
x
[
0
]]
=
struct
.
unpack
(
'B'
,
x
[
1
])[
0
]
count
-=
i
buffer_idx
+=
i
sha_info
[
'local'
]
+=
i
if
sha_info
[
'local'
]
==
SHA_BLOCKSIZE
:
sha_transform
(
sha_info
)
sha_info
[
'local'
]
=
0
else
:
return
while
count
>=
SHA_BLOCKSIZE
:
# copy buffer
sha_info
[
'data'
]
=
[
struct
.
unpack
(
'B'
,
c
)[
0
]
for
c
in
buffer
[
buffer_idx
:
buffer_idx
+
SHA_BLOCKSIZE
]]
count
-=
SHA_BLOCKSIZE
buffer_idx
+=
SHA_BLOCKSIZE
sha_transform
(
sha_info
)
# copy buffer
pos
=
sha_info
[
'local'
]
sha_info
[
'data'
][
pos
:
pos
+
count
]
=
[
struct
.
unpack
(
'B'
,
c
)[
0
]
for
c
in
buffer
[
buffer_idx
:
buffer_idx
+
count
]]
sha_info
[
'local'
]
=
count
def
sha_final
(
sha_info
):
lo_bit_count
=
sha_info
[
'count_lo'
]
hi_bit_count
=
sha_info
[
'count_hi'
]
count
=
(
lo_bit_count
>>
3
)
&
0x7f
sha_info
[
'data'
][
count
]
=
0x80
;
count
+=
1
if
count
>
SHA_BLOCKSIZE
-
16
:
# zero the bytes in data after the count
sha_info
[
'data'
]
=
sha_info
[
'data'
][:
count
]
+
([
0
]
*
(
SHA_BLOCKSIZE
-
count
))
sha_transform
(
sha_info
)
# zero bytes in data
sha_info
[
'data'
]
=
[
0
]
*
SHA_BLOCKSIZE
else
:
sha_info
[
'data'
]
=
sha_info
[
'data'
][:
count
]
+
([
0
]
*
(
SHA_BLOCKSIZE
-
count
))
sha_info
[
'data'
][
112
]
=
0
;
sha_info
[
'data'
][
113
]
=
0
;
sha_info
[
'data'
][
114
]
=
0
;
sha_info
[
'data'
][
115
]
=
0
;
sha_info
[
'data'
][
116
]
=
0
;
sha_info
[
'data'
][
117
]
=
0
;
sha_info
[
'data'
][
118
]
=
0
;
sha_info
[
'data'
][
119
]
=
0
;
sha_info
[
'data'
][
120
]
=
(
hi_bit_count
>>
24
)
&
0xff
sha_info
[
'data'
][
121
]
=
(
hi_bit_count
>>
16
)
&
0xff
sha_info
[
'data'
][
122
]
=
(
hi_bit_count
>>
8
)
&
0xff
sha_info
[
'data'
][
123
]
=
(
hi_bit_count
>>
0
)
&
0xff
sha_info
[
'data'
][
124
]
=
(
lo_bit_count
>>
24
)
&
0xff
sha_info
[
'data'
][
125
]
=
(
lo_bit_count
>>
16
)
&
0xff
sha_info
[
'data'
][
126
]
=
(
lo_bit_count
>>
8
)
&
0xff
sha_info
[
'data'
][
127
]
=
(
lo_bit_count
>>
0
)
&
0xff
sha_transform
(
sha_info
)
dig
=
[]
for
i
in
sha_info
[
'digest'
]:
dig
.
extend
([
((
i
>>
56
)
&
0xff
),
((
i
>>
48
)
&
0xff
),
((
i
>>
40
)
&
0xff
),
((
i
>>
32
)
&
0xff
),
((
i
>>
24
)
&
0xff
),
((
i
>>
16
)
&
0xff
),
((
i
>>
8
)
&
0xff
),
(
i
&
0xff
)
])
return
''
.
join
([
chr
(
i
)
for
i
in
dig
])
class
sha512
(
object
):
digest_size
=
digestsize
=
SHA_DIGESTSIZE
block_size
=
SHA_BLOCKSIZE
def
__init__
(
self
,
s
=
None
):
self
.
_sha
=
sha_init
()
if
s
:
sha_update
(
self
.
_sha
,
getbuf
(
s
))
def
update
(
self
,
s
):
sha_update
(
self
.
_sha
,
getbuf
(
s
))
def
digest
(
self
):
return
sha_final
(
self
.
_sha
.
copy
())[:
self
.
_sha
[
'digestsize'
]]
def
hexdigest
(
self
):
return
''
.
join
([
'%.2x'
%
ord
(
i
)
for
i
in
self
.
digest
()])
def
copy
(
self
):
new
=
sha512
.
__new__
(
sha512
)
new
.
_sha
=
self
.
_sha
.
copy
()
return
new
class
sha384
(
sha512
):
digest_size
=
digestsize
=
48
def
__init__
(
self
,
s
=
None
):
self
.
_sha
=
sha384_init
()
if
s
:
sha_update
(
self
.
_sha
,
getbuf
(
s
))
def
copy
(
self
):
new
=
sha384
.
__new__
(
sha384
)
new
.
_sha
=
self
.
_sha
.
copy
()
return
new
if
__name__
==
"__main__"
:
a_str
=
"just a test string"
assert
sha512
().
hexdigest
()
==
"cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e"
assert
sha512
(
a_str
).
hexdigest
()
==
"68be4c6664af867dd1d01c8d77e963d87d77b702400c8fabae355a41b8927a5a5533a7f1c28509bbd65c5f3ac716f33be271fbda0ca018b71a84708c9fae8a53"
assert
sha512
(
a_str
*
7
).
hexdigest
()
==
"3233acdbfcfff9bff9fc72401d31dbffa62bd24e9ec846f0578d647da73258d9f0879f7fde01fe2cc6516af3f343807fdef79e23d696c923d79931db46bf1819"
s
=
sha512
(
a_str
)
s
.
update
(
a_str
)
assert
s
.
hexdigest
()
==
"341aeb668730bbb48127d5531115f3c39d12cb9586a6ca770898398aff2411087cfe0b570689adf328cddeb1f00803acce6737a19f310b53bbdb0320828f75bb"
setuptools/package_index.py
View file @
47e5462b
...
...
@@ -5,6 +5,8 @@ import re
import
shutil
import
socket
import
base64
import
hashlib
from
functools
import
wraps
from
pkg_resources
import
(
CHECKOUT_DIST
,
Distribution
,
BINARY_DIST
,
normalize_path
,
SOURCE_DIST
,
...
...
@@ -21,8 +23,6 @@ from setuptools.compat import (urllib2, httplib, StringIO, HTTPError,
ConfigParser
)
from
setuptools.compat
import
filterfalse
from
fnmatch
import
translate
from
setuptools.py24compat
import
hashlib
from
setuptools.py24compat
import
wraps
from
setuptools.py26compat
import
strip_fragment
from
setuptools.py27compat
import
get_all_headers
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment