mirror of
https://git.freebsd.org/ports.git
synced 2025-05-25 15:36:35 -04:00
1329 lines
54 KiB
Text
1329 lines
54 KiB
Text
--- lib/Crypto/Protocol/AllOrNothing.py.orig 2012-05-24 12:55:30 UTC
|
|
+++ lib/Crypto/Protocol/AllOrNothing.py
|
|
@@ -48,6 +48,7 @@ import operator
|
|
import sys
|
|
from Crypto.Util.number import bytes_to_long, long_to_bytes
|
|
from Crypto.Util.py3compat import *
|
|
+from functools import reduce
|
|
|
|
def isInt(x):
|
|
test = 0
|
|
@@ -186,11 +187,11 @@ class AllOrNothing:
|
|
# better have at least 2 blocks, for the padbytes package and the hash
|
|
# block accumulator
|
|
if len(blocks) < 2:
|
|
- raise ValueError, "List must be at least length 2."
|
|
+ raise ValueError("List must be at least length 2.")
|
|
|
|
# blocks is a list of strings. We need to deal with them as long
|
|
# integers
|
|
- blocks = map(bytes_to_long, blocks)
|
|
+ blocks = list(map(bytes_to_long, blocks))
|
|
|
|
# Calculate the well-known key, to which the hash blocks are
|
|
# encrypted, and create the hash cipher.
|
|
@@ -271,15 +272,15 @@ Where:
|
|
|
|
def usage(code, msg=None):
|
|
if msg:
|
|
- print msg
|
|
- print usagemsg % {'program': sys.argv[0],
|
|
- 'ciphermodule': ciphermodule}
|
|
+ print(msg)
|
|
+ print(usagemsg % {'program': sys.argv[0],
|
|
+ 'ciphermodule': ciphermodule})
|
|
sys.exit(code)
|
|
|
|
try:
|
|
opts, args = getopt.getopt(sys.argv[1:],
|
|
'c:l', ['cipher=', 'aslong'])
|
|
- except getopt.error, msg:
|
|
+ except getopt.error as msg:
|
|
usage(1, msg)
|
|
|
|
if args:
|
|
@@ -297,23 +298,23 @@ Where:
|
|
module = __import__('Crypto.Cipher.'+ciphermodule, None, None, ['new'])
|
|
|
|
x = AllOrNothing(module)
|
|
- print 'Original text:\n=========='
|
|
- print __doc__
|
|
- print '=========='
|
|
+ print('Original text:\n==========')
|
|
+ print(__doc__)
|
|
+ print('==========')
|
|
msgblocks = x.digest(b(__doc__))
|
|
- print 'message blocks:'
|
|
- for i, blk in zip(range(len(msgblocks)), msgblocks):
|
|
+ print('message blocks:')
|
|
+ for i, blk in zip(list(range(len(msgblocks))), msgblocks):
|
|
# base64 adds a trailing newline
|
|
- print ' %3d' % i,
|
|
+ print(' %3d' % i, end=' ')
|
|
if aslong:
|
|
- print bytes_to_long(blk)
|
|
+ print(bytes_to_long(blk))
|
|
else:
|
|
- print base64.encodestring(blk)[:-1]
|
|
+ print(base64.encodestring(blk)[:-1])
|
|
#
|
|
# get a new undigest-only object so there's no leakage
|
|
y = AllOrNothing(module)
|
|
text = y.undigest(msgblocks)
|
|
if text == b(__doc__):
|
|
- print 'They match!'
|
|
+ print('They match!')
|
|
else:
|
|
- print 'They differ!'
|
|
+ print('They differ!')
|
|
--- lib/Crypto/Protocol/Chaffing.py.orig 2012-05-24 12:55:30 UTC
|
|
+++ lib/Crypto/Protocol/Chaffing.py
|
|
@@ -106,9 +106,9 @@ class Chaff:
|
|
"""
|
|
|
|
if not (0.0<=factor<=1.0):
|
|
- raise ValueError, "'factor' must be between 0.0 and 1.0"
|
|
+ raise ValueError("'factor' must be between 0.0 and 1.0")
|
|
if blocksper < 0:
|
|
- raise ValueError, "'blocksper' must be zero or more"
|
|
+ raise ValueError("'blocksper' must be zero or more")
|
|
|
|
self.__factor = factor
|
|
self.__blocksper = blocksper
|
|
@@ -139,8 +139,8 @@ class Chaff:
|
|
# number of chaff blocks to add per message block that is being
|
|
# chaffed.
|
|
count = len(blocks) * self.__factor
|
|
- blocksper = range(self.__blocksper)
|
|
- for i, wheat in zip(range(len(blocks)), blocks):
|
|
+ blocksper = list(range(self.__blocksper))
|
|
+ for i, wheat in zip(list(range(len(blocks))), blocks):
|
|
# it shouldn't matter which of the n blocks we add chaff to, so for
|
|
# ease of implementation, we'll just add them to the first count
|
|
# blocks
|
|
@@ -185,9 +185,9 @@ abolish it, and to institute new Government, laying it
|
|
principles and organizing its powers in such form, as to them shall seem most
|
|
likely to effect their Safety and Happiness.
|
|
"""
|
|
- print 'Original text:\n=========='
|
|
- print text
|
|
- print '=========='
|
|
+ print('Original text:\n==========')
|
|
+ print(text)
|
|
+ print('==========')
|
|
|
|
# first transform the text into packets
|
|
blocks = [] ; size = 40
|
|
@@ -195,7 +195,7 @@ likely to effect their Safety and Happiness.
|
|
blocks.append( text[i:i+size] )
|
|
|
|
# now get MACs for all the text blocks. The key is obvious...
|
|
- print 'Calculating MACs...'
|
|
+ print('Calculating MACs...')
|
|
from Crypto.Hash import HMAC, SHA
|
|
key = 'Jefferson'
|
|
macs = [HMAC.new(key, block, digestmod=SHA).digest()
|
|
@@ -205,13 +205,13 @@ likely to effect their Safety and Happiness.
|
|
|
|
# put these into a form acceptable as input to the chaffing procedure
|
|
source = []
|
|
- m = zip(range(len(blocks)), blocks, macs)
|
|
- print m
|
|
+ m = list(zip(list(range(len(blocks))), blocks, macs))
|
|
+ print(m)
|
|
for i, data, mac in m:
|
|
source.append((i, data, mac))
|
|
|
|
# now chaff these
|
|
- print 'Adding chaff...'
|
|
+ print('Adding chaff...')
|
|
c = Chaff(factor=0.5, blocksper=2)
|
|
chaffed = c.chaff(source)
|
|
|
|
@@ -221,7 +221,7 @@ likely to effect their Safety and Happiness.
|
|
# the chaff
|
|
|
|
wheat = []
|
|
- print 'chaffed message blocks:'
|
|
+ print('chaffed message blocks:')
|
|
for i, data, mac in chaffed:
|
|
# do the authentication
|
|
h = HMAC.new(key, data, digestmod=SHA)
|
|
@@ -232,14 +232,14 @@ likely to effect their Safety and Happiness.
|
|
else:
|
|
tag = ' '
|
|
# base64 adds a trailing newline
|
|
- print tag, '%3d' % i, \
|
|
- repr(data), encodestring(mac)[:-1]
|
|
+ print(tag, '%3d' % i, \
|
|
+ repr(data), encodestring(mac)[:-1])
|
|
|
|
# now decode the message packets and check it against the original text
|
|
- print 'Undigesting wheat...'
|
|
+ print('Undigesting wheat...')
|
|
# PY3K: This is meant to be text, do not change to bytes (data)
|
|
newtext = "".join(wheat)
|
|
if newtext == text:
|
|
- print 'They match!'
|
|
+ print('They match!')
|
|
else:
|
|
- print 'They differ!'
|
|
+ print('They differ!')
|
|
--- lib/Crypto/PublicKey/_DSA.py.orig 2013-10-14 21:38:10 UTC
|
|
+++ lib/Crypto/PublicKey/_DSA.py
|
|
@@ -50,7 +50,7 @@ def generateQ(randfunc):
|
|
q=q*256+c
|
|
while (not isPrime(q)):
|
|
q=q+2
|
|
- if pow(2,159L) < q < pow(2,160L):
|
|
+ if pow(2,159) < q < pow(2,160):
|
|
return S, q
|
|
raise RuntimeError('Bad q value generated')
|
|
|
|
@@ -80,7 +80,7 @@ def generate_py(bits, randfunc, progress_func=None):
|
|
V[k]=bytes_to_long(SHA.new(S+bstr(N)+bstr(k)).digest())
|
|
W=V[n] % powb
|
|
for k in range(n-1, -1, -1):
|
|
- W=(W<<160L)+V[k]
|
|
+ W=(W<<160)+V[k]
|
|
X=W+powL1
|
|
p=X-(X%(2*obj.q)-1)
|
|
if powL1<=p and isPrime(p):
|
|
--- lib/Crypto/PublicKey/_RSA.py.orig 2012-05-24 12:55:30 UTC
|
|
+++ lib/Crypto/PublicKey/_RSA.py
|
|
@@ -37,12 +37,12 @@ def generate_py(bits, randfunc, progress_func=None, e=
|
|
if present, to display the progress of the key generation.
|
|
"""
|
|
obj=RSAobj()
|
|
- obj.e = long(e)
|
|
+ obj.e = int(e)
|
|
|
|
# Generate the prime factors of n
|
|
if progress_func:
|
|
progress_func('p,q\n')
|
|
- p = q = 1L
|
|
+ p = q = 1
|
|
while number.size(p*q) < bits:
|
|
# Note that q might be one bit longer than p if somebody specifies an odd
|
|
# number of bits for the key. (Why would anyone do that? You don't get
|
|
--- lib/Crypto/PublicKey/_slowmath.py.orig 2012-05-24 12:55:30 UTC
|
|
+++ lib/Crypto/PublicKey/_slowmath.py
|
|
@@ -81,12 +81,12 @@ class _RSAKey(object):
|
|
|
|
def rsa_construct(n, e, d=None, p=None, q=None, u=None):
|
|
"""Construct an RSAKey object"""
|
|
- assert isinstance(n, long)
|
|
- assert isinstance(e, long)
|
|
- assert isinstance(d, (long, type(None)))
|
|
- assert isinstance(p, (long, type(None)))
|
|
- assert isinstance(q, (long, type(None)))
|
|
- assert isinstance(u, (long, type(None)))
|
|
+ assert isinstance(n, int)
|
|
+ assert isinstance(e, int)
|
|
+ assert isinstance(d, (int, type(None)))
|
|
+ assert isinstance(p, (int, type(None)))
|
|
+ assert isinstance(q, (int, type(None)))
|
|
+ assert isinstance(u, (int, type(None)))
|
|
obj = _RSAKey()
|
|
obj.n = n
|
|
obj.e = e
|
|
@@ -151,7 +151,7 @@ class _DSAKey(object):
|
|
# SECURITY TODO - We _should_ be computing SHA1(m), but we don't because that's the API.
|
|
if not self.has_private():
|
|
raise TypeError("No private key")
|
|
- if not (1L < k < self.q):
|
|
+ if not (1 < k < self.q):
|
|
raise ValueError("k is not between 2 and q-1")
|
|
inv_k = inverse(k, self.q) # Compute k**-1 mod q
|
|
r = pow(self.g, k, self.p) % self.q # r = (g**k mod p) mod q
|
|
@@ -169,11 +169,11 @@ class _DSAKey(object):
|
|
return v == r
|
|
|
|
def dsa_construct(y, g, p, q, x=None):
|
|
- assert isinstance(y, long)
|
|
- assert isinstance(g, long)
|
|
- assert isinstance(p, long)
|
|
- assert isinstance(q, long)
|
|
- assert isinstance(x, (long, type(None)))
|
|
+ assert isinstance(y, int)
|
|
+ assert isinstance(g, int)
|
|
+ assert isinstance(p, int)
|
|
+ assert isinstance(q, int)
|
|
+ assert isinstance(x, (int, type(None)))
|
|
obj = _DSAKey()
|
|
obj.y = y
|
|
obj.g = g
|
|
--- lib/Crypto/PublicKey/RSA.py.orig 2013-10-14 21:38:10 UTC
|
|
+++ lib/Crypto/PublicKey/RSA.py
|
|
@@ -288,7 +288,7 @@ class _RSAobj(pubkey.pubkey):
|
|
self.implementation = RSAImplementation()
|
|
t = []
|
|
for k in self.keydata:
|
|
- if not d.has_key(k):
|
|
+ if k not in d:
|
|
break
|
|
t.append(d[k])
|
|
self.key = self.implementation._math.rsa_construct(*tuple(t))
|
|
@@ -582,7 +582,7 @@ class RSAImplementation(object):
|
|
if privateKey.isType('OCTET STRING'):
|
|
return self._importKeyDER(privateKey.payload)
|
|
|
|
- except ValueError, IndexError:
|
|
+ except ValueError as IndexError:
|
|
pass
|
|
|
|
raise ValueError("RSA key format is not supported")
|
|
--- lib/Crypto/Random/Fortuna/FortunaAccumulator.py.orig 2013-10-14 21:38:10 UTC
|
|
+++ lib/Crypto/Random/Fortuna/FortunaAccumulator.py
|
|
@@ -34,9 +34,9 @@ import time
|
|
import warnings
|
|
|
|
from Crypto.pct_warnings import ClockRewindWarning
|
|
-import SHAd256
|
|
+from . import SHAd256
|
|
|
|
-import FortunaGenerator
|
|
+from . import FortunaGenerator
|
|
|
|
class FortunaPool(object):
|
|
"""Fortuna pool type
|
|
@@ -89,7 +89,7 @@ def which_pools(r):
|
|
retval.append(i)
|
|
else:
|
|
break # optimization. once this fails, it always fails
|
|
- mask = (mask << 1) | 1L
|
|
+ mask = (mask << 1) | 1
|
|
return retval
|
|
|
|
class FortunaAccumulator(object):
|
|
--- lib/Crypto/Random/OSRNG/posix.py.orig 2012-05-24 12:55:30 UTC
|
|
+++ lib/Crypto/Random/OSRNG/posix.py
|
|
@@ -29,7 +29,7 @@ import errno
|
|
import os
|
|
import stat
|
|
|
|
-from rng_base import BaseRNG
|
|
+from .rng_base import BaseRNG
|
|
from Crypto.Util.py3compat import b
|
|
|
|
class DevURandomRNG(BaseRNG):
|
|
@@ -63,7 +63,7 @@ class DevURandomRNG(BaseRNG):
|
|
while len(data) < N:
|
|
try:
|
|
d = self.__file.read(N - len(data))
|
|
- except IOError, e:
|
|
+ except IOError as e:
|
|
# read(2) has been interrupted by a signal; redo the read
|
|
if e.errno == errno.EINTR:
|
|
continue
|
|
--- lib/Crypto/Random/random.py.orig 2013-10-14 21:38:10 UTC
|
|
+++ lib/Crypto/Random/random.py
|
|
@@ -47,7 +47,7 @@ class StrongRandom(object):
|
|
"""Return a python long integer with k random bits."""
|
|
if self._randfunc is None:
|
|
self._randfunc = Random.new().read
|
|
- mask = (1L << k) - 1
|
|
+ mask = (1 << k) - 1
|
|
return mask & bytes_to_long(self._randfunc(ceil_div(k, 8)))
|
|
|
|
def randrange(self, *args):
|
|
@@ -64,9 +64,9 @@ class StrongRandom(object):
|
|
step = 1
|
|
else:
|
|
raise TypeError("randrange expected at most 3 arguments, got %d" % (len(args),))
|
|
- if (not isinstance(start, (int, long))
|
|
- or not isinstance(stop, (int, long))
|
|
- or not isinstance(step, (int, long))):
|
|
+ if (not isinstance(start, int)
|
|
+ or not isinstance(stop, int)
|
|
+ or not isinstance(step, int)):
|
|
raise TypeError("randrange requires integer arguments")
|
|
if step == 0:
|
|
raise ValueError("randrange step argument must not be zero")
|
|
@@ -86,7 +86,7 @@ class StrongRandom(object):
|
|
|
|
def randint(self, a, b):
|
|
"""Return a random integer N such that a <= N <= b."""
|
|
- if not isinstance(a, (int, long)) or not isinstance(b, (int, long)):
|
|
+ if not isinstance(a, int) or not isinstance(b, int):
|
|
raise TypeError("randint requires integer arguments")
|
|
N = self.randrange(a, b+1)
|
|
assert a <= N <= b
|
|
@@ -108,7 +108,7 @@ class StrongRandom(object):
|
|
|
|
# Choose a random item (without replacement) until all the items have been
|
|
# chosen.
|
|
- for i in xrange(len(x)):
|
|
+ for i in range(len(x)):
|
|
x[i] = items.pop(self.randrange(len(items)))
|
|
|
|
def sample(self, population, k):
|
|
@@ -120,9 +120,9 @@ class StrongRandom(object):
|
|
|
|
retval = []
|
|
selected = {} # we emulate a set using a dict here
|
|
- for i in xrange(k):
|
|
+ for i in range(k):
|
|
r = None
|
|
- while r is None or selected.has_key(r):
|
|
+ while r is None or r in selected:
|
|
r = self.randrange(num_choices)
|
|
retval.append(population[r])
|
|
selected[r] = 1
|
|
--- lib/Crypto/SelfTest/Cipher/common.py.orig 2013-10-14 21:38:10 UTC
|
|
+++ lib/Crypto/SelfTest/Cipher/common.py
|
|
@@ -97,9 +97,9 @@ class CipherSelfTest(unittest.TestCase):
|
|
from Crypto.Util import Counter
|
|
ctr_class = _extract(params, 'ctr_class', Counter.new)
|
|
ctr_params = _extract(params, 'ctr_params', {}).copy()
|
|
- if ctr_params.has_key('prefix'): ctr_params['prefix'] = a2b_hex(b(ctr_params['prefix']))
|
|
- if ctr_params.has_key('suffix'): ctr_params['suffix'] = a2b_hex(b(ctr_params['suffix']))
|
|
- if not ctr_params.has_key('nbits'):
|
|
+ if 'prefix' in ctr_params: ctr_params['prefix'] = a2b_hex(b(ctr_params['prefix']))
|
|
+ if 'suffix' in ctr_params: ctr_params['suffix'] = a2b_hex(b(ctr_params['suffix']))
|
|
+ if 'nbits' not in ctr_params:
|
|
ctr_params['nbits'] = 8*(self.module.block_size - len(ctr_params.get('prefix', '')) - len(ctr_params.get('suffix', '')))
|
|
params['counter'] = ctr_class(**ctr_params)
|
|
|
|
@@ -202,7 +202,7 @@ class CTRWraparoundTest(unittest.TestCase):
|
|
|
|
for disable_shortcut in (0, 1): # (False, True) Test CTR-mode shortcut and PyObject_CallObject code paths
|
|
for little_endian in (0, 1): # (False, True) Test both endiannesses
|
|
- ctr = Counter.new(8*self.module.block_size, initial_value=2L**(8*self.module.block_size)-1, little_endian=little_endian, disable_shortcut=disable_shortcut)
|
|
+ ctr = Counter.new(8*self.module.block_size, initial_value=2**(8*self.module.block_size)-1, little_endian=little_endian, disable_shortcut=disable_shortcut)
|
|
cipher = self.module.new(a2b_hex(self.key), self.module.MODE_CTR, counter=ctr)
|
|
block = b("\x00") * self.module.block_size
|
|
cipher.encrypt(block)
|
|
@@ -347,12 +347,12 @@ def make_block_tests(module, module_name, test_data):
|
|
tests.append(CipherStreamingSelfTest(module, params))
|
|
|
|
# When using CTR mode, test the non-shortcut code path.
|
|
- if p_mode == 'CTR' and not params.has_key('ctr_class'):
|
|
+ if p_mode == 'CTR' and 'ctr_class' not in params:
|
|
params2 = params.copy()
|
|
params2['description'] += " (shortcut disabled)"
|
|
ctr_params2 = params.get('ctr_params', {}).copy()
|
|
params2['ctr_params'] = ctr_params2
|
|
- if not params2['ctr_params'].has_key('disable_shortcut'):
|
|
+ if 'disable_shortcut' not in params2['ctr_params']:
|
|
params2['ctr_params']['disable_shortcut'] = 1
|
|
tests.append(CipherSelfTest(module, params2))
|
|
return tests
|
|
--- lib/Crypto/SelfTest/Cipher/test_pkcs1_15.py.orig 2012-05-24 12:55:30 UTC
|
|
+++ lib/Crypto/SelfTest/Cipher/test_pkcs1_15.py
|
|
@@ -41,7 +41,7 @@ def t2b(t):
|
|
"""Convert a text string with bytes in hex form to a byte string"""
|
|
clean = b(rws(t))
|
|
if len(clean)%2 == 1:
|
|
- print clean
|
|
+ print(clean)
|
|
raise ValueError("Even number of characters expected")
|
|
return a2b_hex(clean)
|
|
|
|
@@ -154,7 +154,7 @@ HKukWBcq9f/UOmS0oEhai/6g+Uf7VHJdWaeO5LzuvwU=
|
|
def testEncryptVerify1(self):
|
|
# Encrypt/Verify messages of length [0..RSAlen-11]
|
|
# and therefore padding [8..117]
|
|
- for pt_len in xrange(0,128-11+1):
|
|
+ for pt_len in range(0,128-11+1):
|
|
pt = self.rng(pt_len)
|
|
cipher = PKCS.new(self.key1024)
|
|
ct = cipher.encrypt(pt)
|
|
--- lib/Crypto/SelfTest/PublicKey/test_ElGamal.py.orig 2012-05-24 12:55:30 UTC
|
|
+++ lib/Crypto/SelfTest/PublicKey/test_ElGamal.py
|
|
@@ -105,8 +105,8 @@ class ElGamalTest(unittest.TestCase):
|
|
d = self.convert_tv(tv, as_longs)
|
|
key = ElGamal.construct(d['key'])
|
|
ct = key.encrypt(d['pt'], d['k'])
|
|
- self.assertEquals(ct[0], d['ct1'])
|
|
- self.assertEquals(ct[1], d['ct2'])
|
|
+ self.assertEqual(ct[0], d['ct1'])
|
|
+ self.assertEqual(ct[1], d['ct2'])
|
|
|
|
def test_decryption(self):
|
|
for tv in self.tve:
|
|
@@ -114,7 +114,7 @@ class ElGamalTest(unittest.TestCase):
|
|
d = self.convert_tv(tv, as_longs)
|
|
key = ElGamal.construct(d['key'])
|
|
pt = key.decrypt((d['ct1'], d['ct2']))
|
|
- self.assertEquals(pt, d['pt'])
|
|
+ self.assertEqual(pt, d['pt'])
|
|
|
|
def test_signing(self):
|
|
for tv in self.tvs:
|
|
@@ -122,8 +122,8 @@ class ElGamalTest(unittest.TestCase):
|
|
d = self.convert_tv(tv, as_longs)
|
|
key = ElGamal.construct(d['key'])
|
|
sig1, sig2 = key.sign(d['h'], d['k'])
|
|
- self.assertEquals(sig1, d['sig1'])
|
|
- self.assertEquals(sig2, d['sig2'])
|
|
+ self.assertEqual(sig1, d['sig1'])
|
|
+ self.assertEqual(sig2, d['sig2'])
|
|
|
|
def test_verification(self):
|
|
for tv in self.tvs:
|
|
@@ -132,17 +132,17 @@ class ElGamalTest(unittest.TestCase):
|
|
key = ElGamal.construct(d['key'])
|
|
# Positive test
|
|
res = key.verify( d['h'], (d['sig1'],d['sig2']) )
|
|
- self.failUnless(res)
|
|
+ self.assertTrue(res)
|
|
# Negative test
|
|
res = key.verify( d['h'], (d['sig1']+1,d['sig2']) )
|
|
- self.failIf(res)
|
|
+ self.assertFalse(res)
|
|
|
|
def convert_tv(self, tv, as_longs=0):
|
|
"""Convert a test vector from textual form (hexadecimal ascii
|
|
to either integers or byte strings."""
|
|
key_comps = 'p','g','y','x'
|
|
tv2 = {}
|
|
- for c in tv.keys():
|
|
+ for c in list(tv.keys()):
|
|
tv2[c] = a2b_hex(tv[c])
|
|
if as_longs or c in key_comps or c in ('sig1','sig2'):
|
|
tv2[c] = bytes_to_long(tv2[c])
|
|
@@ -163,41 +163,41 @@ class ElGamalTest(unittest.TestCase):
|
|
def _check_private_key(self, elgObj):
|
|
|
|
# Check capabilities
|
|
- self.failUnless(elgObj.has_private())
|
|
- self.failUnless(elgObj.can_sign())
|
|
- self.failUnless(elgObj.can_encrypt())
|
|
+ self.assertTrue(elgObj.has_private())
|
|
+ self.assertTrue(elgObj.can_sign())
|
|
+ self.assertTrue(elgObj.can_encrypt())
|
|
|
|
# Sanity check key data
|
|
- self.failUnless(1<elgObj.g<(elgObj.p-1))
|
|
- self.assertEquals(pow(elgObj.g, elgObj.p-1, elgObj.p), 1)
|
|
- self.failUnless(1<elgObj.x<(elgObj.p-1))
|
|
- self.assertEquals(pow(elgObj.g, elgObj.x, elgObj.p), elgObj.y)
|
|
+ self.assertTrue(1<elgObj.g<(elgObj.p-1))
|
|
+ self.assertEqual(pow(elgObj.g, elgObj.p-1, elgObj.p), 1)
|
|
+ self.assertTrue(1<elgObj.x<(elgObj.p-1))
|
|
+ self.assertEqual(pow(elgObj.g, elgObj.x, elgObj.p), elgObj.y)
|
|
|
|
def _check_public_key(self, elgObj):
|
|
|
|
# Check capabilities
|
|
- self.failIf(elgObj.has_private())
|
|
- self.failUnless(elgObj.can_sign())
|
|
- self.failUnless(elgObj.can_encrypt())
|
|
+ self.assertFalse(elgObj.has_private())
|
|
+ self.assertTrue(elgObj.can_sign())
|
|
+ self.assertTrue(elgObj.can_encrypt())
|
|
|
|
# Sanity check key data
|
|
- self.failUnless(1<elgObj.g<(elgObj.p-1))
|
|
- self.assertEquals(pow(elgObj.g, elgObj.p-1, elgObj.p), 1)
|
|
+ self.assertTrue(1<elgObj.g<(elgObj.p-1))
|
|
+ self.assertEqual(pow(elgObj.g, elgObj.p-1, elgObj.p), 1)
|
|
|
|
def _exercise_primitive(self, elgObj):
|
|
# Test encryption/decryption
|
|
plaintext = b("Test")
|
|
- ciphertext = elgObj.encrypt(plaintext, 123456789L)
|
|
+ ciphertext = elgObj.encrypt(plaintext, 123456789)
|
|
plaintextP = elgObj.decrypt(ciphertext)
|
|
- self.assertEquals(plaintext, plaintextP)
|
|
+ self.assertEqual(plaintext, plaintextP)
|
|
|
|
# Test signature/verification
|
|
- signature = elgObj.sign(plaintext, 987654321L)
|
|
+ signature = elgObj.sign(plaintext, 987654321)
|
|
elgObj.verify(plaintext, signature)
|
|
|
|
def _exercise_public_primitive(self, elgObj):
|
|
plaintext = b("Test")
|
|
- ciphertext = elgObj.encrypt(plaintext, 123456789L)
|
|
+ ciphertext = elgObj.encrypt(plaintext, 123456789)
|
|
|
|
def get_tests(config={}):
|
|
tests = []
|
|
--- lib/Crypto/SelfTest/PublicKey/test_importKey.py.orig 2013-10-14 21:38:10 UTC
|
|
+++ lib/Crypto/SelfTest/PublicKey/test_importKey.py
|
|
@@ -20,8 +20,8 @@
|
|
# SOFTWARE.
|
|
# ===================================================================
|
|
|
|
-from __future__ import nested_scopes
|
|
|
|
+
|
|
__revision__ = "$Id$"
|
|
|
|
import unittest
|
|
@@ -42,7 +42,7 @@ def der2pem(der, text='PUBLIC'):
|
|
|
|
class ImportKeyTests(unittest.TestCase):
|
|
# 512-bit RSA key generated with openssl
|
|
- rsaKeyPEM = u'''-----BEGIN RSA PRIVATE KEY-----
|
|
+ rsaKeyPEM = '''-----BEGIN RSA PRIVATE KEY-----
|
|
MIIBOwIBAAJBAL8eJ5AKoIsjURpcEoGubZMxLD7+kT+TLr7UkvEtFrRhDDKMtuII
|
|
q19FrL4pUIMymPMSLBn3hJLe30Dw48GQM4UCAwEAAQJACUSDEp8RTe32ftq8IwG8
|
|
Wojl5mAd1wFiIOrZ/Uv8b963WJOJiuQcVN29vxU5+My9GPZ7RA3hrDBEAoHUDPrI
|
|
@@ -53,7 +53,7 @@ n0CnZCJ6IZYqSt0H5N7+Q+2Ro64nuwV/OSQfM6sBwQ==
|
|
-----END RSA PRIVATE KEY-----'''
|
|
|
|
# As above, but this is actually an unencrypted PKCS#8 key
|
|
- rsaKeyPEM8 = u'''-----BEGIN PRIVATE KEY-----
|
|
+ rsaKeyPEM8 = '''-----BEGIN PRIVATE KEY-----
|
|
MIIBVQIBADANBgkqhkiG9w0BAQEFAASCAT8wggE7AgEAAkEAvx4nkAqgiyNRGlwS
|
|
ga5tkzEsPv6RP5MuvtSS8S0WtGEMMoy24girX0WsvilQgzKY8xIsGfeEkt7fQPDj
|
|
wZAzhQIDAQABAkAJRIMSnxFN7fZ+2rwjAbxaiOXmYB3XAWIg6tn9S/xv3rdYk4mK
|
|
@@ -68,7 +68,7 @@ BX85JB8zqwHB
|
|
rsaKeyEncryptedPEM=(
|
|
|
|
# With DES and passphrase 'test'
|
|
- ('test', u'''-----BEGIN RSA PRIVATE KEY-----
|
|
+ ('test', '''-----BEGIN RSA PRIVATE KEY-----
|
|
Proc-Type: 4,ENCRYPTED
|
|
DEK-Info: DES-CBC,AF8F9A40BD2FA2FC
|
|
|
|
@@ -83,7 +83,7 @@ dysKznQ6P+IoqML1WxAID4aGRMWka+uArOJ148Rbj9s=
|
|
"\xAF\x8F\x9A\x40\xBD\x2F\xA2\xFC"),
|
|
|
|
# With Triple-DES and passphrase 'rocking'
|
|
- ('rocking', u'''-----BEGIN RSA PRIVATE KEY-----
|
|
+ ('rocking', '''-----BEGIN RSA PRIVATE KEY-----
|
|
Proc-Type: 4,ENCRYPTED
|
|
DEK-Info: DES-EDE3-CBC,C05D6C07F7FC02F6
|
|
|
|
@@ -98,7 +98,7 @@ YSxC7qDQIT/RECvV3+oQKEcmpEujn45wAnkTi12BH30=
|
|
"\xC0\x5D\x6C\x07\xF7\xFC\x02\xF6"),
|
|
)
|
|
|
|
- rsaPublicKeyPEM = u'''-----BEGIN PUBLIC KEY-----
|
|
+ rsaPublicKeyPEM = '''-----BEGIN PUBLIC KEY-----
|
|
MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAL8eJ5AKoIsjURpcEoGubZMxLD7+kT+T
|
|
Lr7UkvEtFrRhDDKMtuIIq19FrL4pUIMymPMSLBn3hJLe30Dw48GQM4UCAwEAAQ==
|
|
-----END PUBLIC KEY-----'''
|
|
@@ -144,21 +144,21 @@ Lr7UkvEtFrRhDDKMtuIIq19FrL4pUIMymPMSLBn3hJLe30Dw48GQM4
|
|
03010001
|
|
'''.replace(" ",""))
|
|
|
|
- n = long('BF 1E 27 90 0A A0 8B 23 51 1A 5C 12 81 AE 6D 93 31 2C 3E FE 91 3F 93 2E BE D4 92 F1 2D 16 B4 61 0C 32 8C B6 E2 08 AB 5F 45 AC BE 29 50 83 32 98 F3 12 2C 19 F7 84 92 DE DF 40 F0 E3 C1 90 33 85'.replace(" ",""),16)
|
|
- e = 65537L
|
|
- d = long('09 44 83 12 9F 11 4D ED F6 7E DA BC 23 01 BC 5A 88 E5 E6 60 1D D7 01 62 20 EA D9 FD 4B FC 6F DE B7 58 93 89 8A E4 1C 54 DD BD BF 15 39 F8 CC BD 18 F6 7B 44 0D E1 AC 30 44 02 81 D4 0C FA C8 39'.replace(" ",""),16)
|
|
- p = long('00 F2 0F 2F 3E 1D A6 18 83 F6 29 80 92 2B D8 DF 54 5C E4 07 C7 26 24 11 03 B5 E2 C5 37 23 12 4A 23'.replace(" ",""),16)
|
|
- q = long('00 CA 1F E9 24 79 2C FC C9 6B FA B7 4F 34 4A 68 B4 18 DF 57 83 38 06 48 06 00 0F E2 A5 C9 9A 02 37'.replace(" ",""),16)
|
|
+ n = int('BF 1E 27 90 0A A0 8B 23 51 1A 5C 12 81 AE 6D 93 31 2C 3E FE 91 3F 93 2E BE D4 92 F1 2D 16 B4 61 0C 32 8C B6 E2 08 AB 5F 45 AC BE 29 50 83 32 98 F3 12 2C 19 F7 84 92 DE DF 40 F0 E3 C1 90 33 85'.replace(" ",""),16)
|
|
+ e = 65537
|
|
+ d = int('09 44 83 12 9F 11 4D ED F6 7E DA BC 23 01 BC 5A 88 E5 E6 60 1D D7 01 62 20 EA D9 FD 4B FC 6F DE B7 58 93 89 8A E4 1C 54 DD BD BF 15 39 F8 CC BD 18 F6 7B 44 0D E1 AC 30 44 02 81 D4 0C FA C8 39'.replace(" ",""),16)
|
|
+ p = int('00 F2 0F 2F 3E 1D A6 18 83 F6 29 80 92 2B D8 DF 54 5C E4 07 C7 26 24 11 03 B5 E2 C5 37 23 12 4A 23'.replace(" ",""),16)
|
|
+ q = int('00 CA 1F E9 24 79 2C FC C9 6B FA B7 4F 34 4A 68 B4 18 DF 57 83 38 06 48 06 00 0F E2 A5 C9 9A 02 37'.replace(" ",""),16)
|
|
|
|
# This is q^{-1} mod p). fastmath and slowmath use pInv (p^{-1}
|
|
# mod q) instead!
|
|
- qInv = long('00 BD 9F 40 A7 64 22 7A 21 96 2A 4A DD 07 E4 DE FE 43 ED 91 A3 AE 27 BB 05 7F 39 24 1F 33 AB 01 C1'.replace(" ",""),16)
|
|
+ qInv = int('00 BD 9F 40 A7 64 22 7A 21 96 2A 4A DD 07 E4 DE FE 43 ED 91 A3 AE 27 BB 05 7F 39 24 1F 33 AB 01 C1'.replace(" ",""),16)
|
|
pInv = inverse(p,q)
|
|
|
|
def testImportKey1(self):
|
|
"""Verify import of RSAPrivateKey DER SEQUENCE"""
|
|
key = self.rsa.importKey(self.rsaKeyDER)
|
|
- self.failUnless(key.has_private())
|
|
+ self.assertTrue(key.has_private())
|
|
self.assertEqual(key.n, self.n)
|
|
self.assertEqual(key.e, self.e)
|
|
self.assertEqual(key.d, self.d)
|
|
@@ -168,7 +168,7 @@ Lr7UkvEtFrRhDDKMtuIIq19FrL4pUIMymPMSLBn3hJLe30Dw48GQM4
|
|
def testImportKey2(self):
|
|
"""Verify import of SubjectPublicKeyInfo DER SEQUENCE"""
|
|
key = self.rsa.importKey(self.rsaPublicKeyDER)
|
|
- self.failIf(key.has_private())
|
|
+ self.assertFalse(key.has_private())
|
|
self.assertEqual(key.n, self.n)
|
|
self.assertEqual(key.e, self.e)
|
|
|
|
@@ -228,7 +228,7 @@ Lr7UkvEtFrRhDDKMtuIIq19FrL4pUIMymPMSLBn3hJLe30Dw48GQM4
|
|
"""Verify import of encrypted PrivateKeyInfo DER SEQUENCE"""
|
|
for t in self.rsaKeyEncryptedPEM:
|
|
key = self.rsa.importKey(t[1], t[0])
|
|
- self.failUnless(key.has_private())
|
|
+ self.assertTrue(key.has_private())
|
|
self.assertEqual(key.n, self.n)
|
|
self.assertEqual(key.e, self.e)
|
|
self.assertEqual(key.d, self.d)
|
|
@@ -238,7 +238,7 @@ Lr7UkvEtFrRhDDKMtuIIq19FrL4pUIMymPMSLBn3hJLe30Dw48GQM4
|
|
def testImportKey9(self):
|
|
"""Verify import of unencrypted PrivateKeyInfo DER SEQUENCE"""
|
|
key = self.rsa.importKey(self.rsaKeyDER8)
|
|
- self.failUnless(key.has_private())
|
|
+ self.assertTrue(key.has_private())
|
|
self.assertEqual(key.n, self.n)
|
|
self.assertEqual(key.e, self.e)
|
|
self.assertEqual(key.d, self.d)
|
|
@@ -248,7 +248,7 @@ Lr7UkvEtFrRhDDKMtuIIq19FrL4pUIMymPMSLBn3hJLe30Dw48GQM4
|
|
def testImportKey10(self):
|
|
"""Verify import of unencrypted PrivateKeyInfo DER SEQUENCE, encoded with PEM"""
|
|
key = self.rsa.importKey(self.rsaKeyPEM8)
|
|
- self.failUnless(key.has_private())
|
|
+ self.assertTrue(key.has_private())
|
|
self.assertEqual(key.n, self.n)
|
|
self.assertEqual(key.e, self.e)
|
|
self.assertEqual(key.d, self.d)
|
|
@@ -301,7 +301,7 @@ Lr7UkvEtFrRhDDKMtuIIq19FrL4pUIMymPMSLBn3hJLe30Dw48GQM4
|
|
def testExportKey4(self):
|
|
key = self.rsa.construct([self.n, self.e, self.d, self.p, self.q, self.pInv])
|
|
# Tuple with index #1 is encrypted with 3DES
|
|
- t = map(b,self.rsaKeyEncryptedPEM[1])
|
|
+ t = list(map(b,self.rsaKeyEncryptedPEM[1]))
|
|
# Force the salt being used when exporting
|
|
key._randfunc = lambda N: (t[2]*divmod(N+len(t[2]),len(t[2]))[0])[:N]
|
|
pemKey = key.exportKey("PEM", t[0])
|
|
--- lib/Crypto/SelfTest/PublicKey/test_RSA.py.orig 2013-10-14 21:38:10 UTC
|
|
+++ lib/Crypto/SelfTest/PublicKey/test_RSA.py
|
|
@@ -78,7 +78,7 @@ class RSATest(unittest.TestCase):
|
|
e2 53 72 98 ca 2a 8f 59 46 f8 e5 fd 09 1d bd cb
|
|
"""
|
|
|
|
- e = 0x11L # public exponent
|
|
+ e = 0x11 # public exponent
|
|
|
|
prime_factor = """
|
|
c9 7f b1 f0 27 f4 53 f6 34 12 33 ea aa d1 d9 35
|
|
@@ -172,9 +172,9 @@ class RSATest(unittest.TestCase):
|
|
|
|
def test_factoring(self):
|
|
rsaObj = self.rsa.construct([self.n, self.e, self.d])
|
|
- self.failUnless(rsaObj.p==self.p or rsaObj.p==self.q)
|
|
- self.failUnless(rsaObj.q==self.p or rsaObj.q==self.q)
|
|
- self.failUnless(rsaObj.q*rsaObj.p == self.n)
|
|
+ self.assertTrue(rsaObj.p==self.p or rsaObj.p==self.q)
|
|
+ self.assertTrue(rsaObj.q==self.p or rsaObj.q==self.q)
|
|
+ self.assertTrue(rsaObj.q*rsaObj.p == self.n)
|
|
|
|
self.assertRaises(ValueError, self.rsa.construct, [self.n, self.e, self.n-1])
|
|
|
|
--- lib/Crypto/SelfTest/Random/Fortuna/test_FortunaAccumulator.py.orig 2012-05-24 12:55:30 UTC
|
|
+++ lib/Crypto/SelfTest/Random/Fortuna/test_FortunaAccumulator.py
|
|
@@ -79,17 +79,17 @@ class FortunaAccumulatorTests(unittest.TestCase):
|
|
self.assertEqual(FortunaAccumulator.which_pools(7), [0])
|
|
self.assertEqual(FortunaAccumulator.which_pools(8), [0, 1, 2, 3])
|
|
for i in range(1, 32):
|
|
- self.assertEqual(FortunaAccumulator.which_pools(2L**i-1), [0])
|
|
- self.assertEqual(FortunaAccumulator.which_pools(2L**i), range(i+1))
|
|
- self.assertEqual(FortunaAccumulator.which_pools(2L**i+1), [0])
|
|
- self.assertEqual(FortunaAccumulator.which_pools(2L**31), range(32))
|
|
- self.assertEqual(FortunaAccumulator.which_pools(2L**32), range(32))
|
|
- self.assertEqual(FortunaAccumulator.which_pools(2L**33), range(32))
|
|
- self.assertEqual(FortunaAccumulator.which_pools(2L**34), range(32))
|
|
- self.assertEqual(FortunaAccumulator.which_pools(2L**35), range(32))
|
|
- self.assertEqual(FortunaAccumulator.which_pools(2L**36), range(32))
|
|
- self.assertEqual(FortunaAccumulator.which_pools(2L**64), range(32))
|
|
- self.assertEqual(FortunaAccumulator.which_pools(2L**128), range(32))
|
|
+ self.assertEqual(FortunaAccumulator.which_pools(2**i-1), [0])
|
|
+ self.assertEqual(FortunaAccumulator.which_pools(2**i), list(range(i+1)))
|
|
+ self.assertEqual(FortunaAccumulator.which_pools(2**i+1), [0])
|
|
+ self.assertEqual(FortunaAccumulator.which_pools(2**31), list(range(32)))
|
|
+ self.assertEqual(FortunaAccumulator.which_pools(2**32), list(range(32)))
|
|
+ self.assertEqual(FortunaAccumulator.which_pools(2**33), list(range(32)))
|
|
+ self.assertEqual(FortunaAccumulator.which_pools(2**34), list(range(32)))
|
|
+ self.assertEqual(FortunaAccumulator.which_pools(2**35), list(range(32)))
|
|
+ self.assertEqual(FortunaAccumulator.which_pools(2**36), list(range(32)))
|
|
+ self.assertEqual(FortunaAccumulator.which_pools(2**64), list(range(32)))
|
|
+ self.assertEqual(FortunaAccumulator.which_pools(2**128), list(range(32)))
|
|
|
|
def test_accumulator(self):
|
|
"""FortunaAccumulator.FortunaAccumulator"""
|
|
--- lib/Crypto/SelfTest/Util/test_asn1.py.orig 2013-10-14 21:38:10 UTC
|
|
+++ lib/Crypto/SelfTest/Util/test_asn1.py
|
|
@@ -35,86 +35,86 @@ class DerObjectTests(unittest.TestCase):
|
|
def testObjEncode1(self):
|
|
# No payload
|
|
der = DerObject(b('\x33'))
|
|
- self.assertEquals(der.encode(), b('\x33\x00'))
|
|
+ self.assertEqual(der.encode(), b('\x33\x00'))
|
|
# Small payload
|
|
der.payload = b('\x45')
|
|
- self.assertEquals(der.encode(), b('\x33\x01\x45'))
|
|
+ self.assertEqual(der.encode(), b('\x33\x01\x45'))
|
|
# Invariant
|
|
- self.assertEquals(der.encode(), b('\x33\x01\x45'))
|
|
+ self.assertEqual(der.encode(), b('\x33\x01\x45'))
|
|
# Initialize with numerical tag
|
|
der = DerObject(b(0x33))
|
|
der.payload = b('\x45')
|
|
- self.assertEquals(der.encode(), b('\x33\x01\x45'))
|
|
+ self.assertEqual(der.encode(), b('\x33\x01\x45'))
|
|
|
|
def testObjEncode2(self):
|
|
# Known types
|
|
der = DerObject('SEQUENCE')
|
|
- self.assertEquals(der.encode(), b('\x30\x00'))
|
|
+ self.assertEqual(der.encode(), b('\x30\x00'))
|
|
der = DerObject('BIT STRING')
|
|
- self.assertEquals(der.encode(), b('\x03\x00'))
|
|
+ self.assertEqual(der.encode(), b('\x03\x00'))
|
|
|
|
def testObjEncode3(self):
|
|
# Long payload
|
|
der = DerObject(b('\x34'))
|
|
der.payload = b("0")*128
|
|
- self.assertEquals(der.encode(), b('\x34\x81\x80' + "0"*128))
|
|
+ self.assertEqual(der.encode(), b('\x34\x81\x80' + "0"*128))
|
|
|
|
def testObjDecode1(self):
|
|
# Decode short payload
|
|
der = DerObject()
|
|
der.decode(b('\x20\x02\x01\x02'))
|
|
- self.assertEquals(der.payload, b("\x01\x02"))
|
|
- self.assertEquals(der.typeTag, 0x20)
|
|
+ self.assertEqual(der.payload, b("\x01\x02"))
|
|
+ self.assertEqual(der.typeTag, 0x20)
|
|
|
|
def testObjDecode2(self):
|
|
# Decode short payload
|
|
der = DerObject()
|
|
der.decode(b('\x22\x81\x80' + "1"*128))
|
|
- self.assertEquals(der.payload, b("1")*128)
|
|
- self.assertEquals(der.typeTag, 0x22)
|
|
+ self.assertEqual(der.payload, b("1")*128)
|
|
+ self.assertEqual(der.typeTag, 0x22)
|
|
|
|
class DerSequenceTests(unittest.TestCase):
|
|
|
|
def testEncode1(self):
|
|
# Empty sequence
|
|
der = DerSequence()
|
|
- self.assertEquals(der.encode(), b('0\x00'))
|
|
- self.failIf(der.hasOnlyInts())
|
|
+ self.assertEqual(der.encode(), b('0\x00'))
|
|
+ self.assertFalse(der.hasOnlyInts())
|
|
# One single-byte integer (zero)
|
|
der.append(0)
|
|
- self.assertEquals(der.encode(), b('0\x03\x02\x01\x00'))
|
|
- self.failUnless(der.hasOnlyInts())
|
|
+ self.assertEqual(der.encode(), b('0\x03\x02\x01\x00'))
|
|
+ self.assertTrue(der.hasOnlyInts())
|
|
# Invariant
|
|
- self.assertEquals(der.encode(), b('0\x03\x02\x01\x00'))
|
|
+ self.assertEqual(der.encode(), b('0\x03\x02\x01\x00'))
|
|
|
|
def testEncode2(self):
|
|
# One single-byte integer (non-zero)
|
|
der = DerSequence()
|
|
der.append(127)
|
|
- self.assertEquals(der.encode(), b('0\x03\x02\x01\x7f'))
|
|
+ self.assertEqual(der.encode(), b('0\x03\x02\x01\x7f'))
|
|
# Indexing
|
|
der[0] = 1
|
|
- self.assertEquals(len(der),1)
|
|
- self.assertEquals(der[0],1)
|
|
- self.assertEquals(der[-1],1)
|
|
- self.assertEquals(der.encode(), b('0\x03\x02\x01\x01'))
|
|
+ self.assertEqual(len(der),1)
|
|
+ self.assertEqual(der[0],1)
|
|
+ self.assertEqual(der[-1],1)
|
|
+ self.assertEqual(der.encode(), b('0\x03\x02\x01\x01'))
|
|
#
|
|
der[:] = [1]
|
|
- self.assertEquals(len(der),1)
|
|
- self.assertEquals(der[0],1)
|
|
- self.assertEquals(der.encode(), b('0\x03\x02\x01\x01'))
|
|
+ self.assertEqual(len(der),1)
|
|
+ self.assertEqual(der[0],1)
|
|
+ self.assertEqual(der.encode(), b('0\x03\x02\x01\x01'))
|
|
|
|
def testEncode3(self):
|
|
# One multi-byte integer (non-zero)
|
|
der = DerSequence()
|
|
- der.append(0x180L)
|
|
- self.assertEquals(der.encode(), b('0\x04\x02\x02\x01\x80'))
|
|
+ der.append(0x180)
|
|
+ self.assertEqual(der.encode(), b('0\x04\x02\x02\x01\x80'))
|
|
|
|
def testEncode4(self):
|
|
# One very long integer
|
|
der = DerSequence()
|
|
der.append(2**2048)
|
|
- self.assertEquals(der.encode(), b('0\x82\x01\x05')+
|
|
+ self.assertEqual(der.encode(), b('0\x82\x01\x05')+
|
|
b('\x02\x82\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00')+
|
|
b('\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')+
|
|
b('\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')+
|
|
@@ -138,31 +138,31 @@ class DerSequenceTests(unittest.TestCase):
|
|
def testEncode5(self):
|
|
# One single-byte integer (looks negative)
|
|
der = DerSequence()
|
|
- der.append(0xFFL)
|
|
- self.assertEquals(der.encode(), b('0\x04\x02\x02\x00\xff'))
|
|
+ der.append(0xFF)
|
|
+ self.assertEqual(der.encode(), b('0\x04\x02\x02\x00\xff'))
|
|
|
|
def testEncode6(self):
|
|
# Two integers
|
|
der = DerSequence()
|
|
- der.append(0x180L)
|
|
- der.append(0xFFL)
|
|
- self.assertEquals(der.encode(), b('0\x08\x02\x02\x01\x80\x02\x02\x00\xff'))
|
|
- self.failUnless(der.hasOnlyInts())
|
|
+ der.append(0x180)
|
|
+ der.append(0xFF)
|
|
+ self.assertEqual(der.encode(), b('0\x08\x02\x02\x01\x80\x02\x02\x00\xff'))
|
|
+ self.assertTrue(der.hasOnlyInts())
|
|
#
|
|
der.append(0x01)
|
|
der[1:] = [9,8]
|
|
- self.assertEquals(len(der),3)
|
|
+ self.assertEqual(len(der),3)
|
|
self.assertEqual(der[1:],[9,8])
|
|
self.assertEqual(der[1:-1],[9])
|
|
- self.assertEquals(der.encode(), b('0\x0A\x02\x02\x01\x80\x02\x01\x09\x02\x01\x08'))
|
|
+ self.assertEqual(der.encode(), b('0\x0A\x02\x02\x01\x80\x02\x01\x09\x02\x01\x08'))
|
|
|
|
def testEncode6(self):
|
|
# One integer and another type (no matter what it is)
|
|
der = DerSequence()
|
|
- der.append(0x180L)
|
|
+ der.append(0x180)
|
|
der.append(b('\x00\x02\x00\x00'))
|
|
- self.assertEquals(der.encode(), b('0\x08\x02\x02\x01\x80\x00\x02\x00\x00'))
|
|
- self.failIf(der.hasOnlyInts())
|
|
+ self.assertEqual(der.encode(), b('0\x08\x02\x02\x01\x80\x00\x02\x00\x00'))
|
|
+ self.assertFalse(der.hasOnlyInts())
|
|
|
|
####
|
|
|
|
@@ -170,29 +170,29 @@ class DerSequenceTests(unittest.TestCase):
|
|
# Empty sequence
|
|
der = DerSequence()
|
|
der.decode(b('0\x00'))
|
|
- self.assertEquals(len(der),0)
|
|
+ self.assertEqual(len(der),0)
|
|
# One single-byte integer (zero)
|
|
der.decode(b('0\x03\x02\x01\x00'))
|
|
- self.assertEquals(len(der),1)
|
|
- self.assertEquals(der[0],0)
|
|
+ self.assertEqual(len(der),1)
|
|
+ self.assertEqual(der[0],0)
|
|
# Invariant
|
|
der.decode(b('0\x03\x02\x01\x00'))
|
|
- self.assertEquals(len(der),1)
|
|
- self.assertEquals(der[0],0)
|
|
+ self.assertEqual(len(der),1)
|
|
+ self.assertEqual(der[0],0)
|
|
|
|
def testDecode2(self):
|
|
# One single-byte integer (non-zero)
|
|
der = DerSequence()
|
|
der.decode(b('0\x03\x02\x01\x7f'))
|
|
- self.assertEquals(len(der),1)
|
|
- self.assertEquals(der[0],127)
|
|
+ self.assertEqual(len(der),1)
|
|
+ self.assertEqual(der[0],127)
|
|
|
|
def testDecode3(self):
|
|
# One multi-byte integer (non-zero)
|
|
der = DerSequence()
|
|
der.decode(b('0\x04\x02\x02\x01\x80'))
|
|
- self.assertEquals(len(der),1)
|
|
- self.assertEquals(der[0],0x180L)
|
|
+ self.assertEqual(len(der),1)
|
|
+ self.assertEqual(der[0],0x180)
|
|
|
|
def testDecode4(self):
|
|
# One very long integer
|
|
@@ -217,40 +217,40 @@ class DerSequenceTests(unittest.TestCase):
|
|
b('\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')+
|
|
b('\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')+
|
|
b('\x00\x00\x00\x00\x00\x00\x00\x00\x00'))
|
|
- self.assertEquals(len(der),1)
|
|
- self.assertEquals(der[0],2**2048)
|
|
+ self.assertEqual(len(der),1)
|
|
+ self.assertEqual(der[0],2**2048)
|
|
|
|
def testDecode5(self):
|
|
# One single-byte integer (looks negative)
|
|
der = DerSequence()
|
|
der.decode(b('0\x04\x02\x02\x00\xff'))
|
|
- self.assertEquals(len(der),1)
|
|
- self.assertEquals(der[0],0xFFL)
|
|
+ self.assertEqual(len(der),1)
|
|
+ self.assertEqual(der[0],0xFF)
|
|
|
|
def testDecode6(self):
|
|
# Two integers
|
|
der = DerSequence()
|
|
der.decode(b('0\x08\x02\x02\x01\x80\x02\x02\x00\xff'))
|
|
- self.assertEquals(len(der),2)
|
|
- self.assertEquals(der[0],0x180L)
|
|
- self.assertEquals(der[1],0xFFL)
|
|
+ self.assertEqual(len(der),2)
|
|
+ self.assertEqual(der[0],0x180)
|
|
+ self.assertEqual(der[1],0xFF)
|
|
|
|
def testDecode7(self):
|
|
# One integer and 2 other types
|
|
der = DerSequence()
|
|
der.decode(b('0\x0A\x02\x02\x01\x80\x24\x02\xb6\x63\x12\x00'))
|
|
- self.assertEquals(len(der),3)
|
|
- self.assertEquals(der[0],0x180L)
|
|
- self.assertEquals(der[1],b('\x24\x02\xb6\x63'))
|
|
- self.assertEquals(der[2],b('\x12\x00'))
|
|
+ self.assertEqual(len(der),3)
|
|
+ self.assertEqual(der[0],0x180)
|
|
+ self.assertEqual(der[1],b('\x24\x02\xb6\x63'))
|
|
+ self.assertEqual(der[2],b('\x12\x00'))
|
|
|
|
def testDecode8(self):
|
|
# Only 2 other types
|
|
der = DerSequence()
|
|
der.decode(b('0\x06\x24\x02\xb6\x63\x12\x00'))
|
|
- self.assertEquals(len(der),2)
|
|
- self.assertEquals(der[0],b('\x24\x02\xb6\x63'))
|
|
- self.assertEquals(der[1],b('\x12\x00'))
|
|
+ self.assertEqual(len(der),2)
|
|
+ self.assertEqual(der[0],b('\x24\x02\xb6\x63'))
|
|
+ self.assertEqual(der[1],b('\x12\x00'))
|
|
|
|
def testErrDecode1(self):
|
|
# Not a sequence
|
|
--- lib/Crypto/SelfTest/Util/test_number.py.orig 2013-10-14 21:38:10 UTC
|
|
+++ lib/Crypto/SelfTest/Util/test_number.py
|
|
@@ -73,19 +73,19 @@ class MiscTests(unittest.TestCase):
|
|
for b in range(3, 1+129, 3): # 3, 6, ... , 129
|
|
self.assertEqual(0, number.ceil_shift(0, b))
|
|
|
|
- n = 1L
|
|
- while n <= 2L**(b+2):
|
|
- (q, r) = divmod(n-1, 2L**b)
|
|
+ n = 1
|
|
+ while n <= 2**(b+2):
|
|
+ (q, r) = divmod(n-1, 2**b)
|
|
expected = q + int(not not r)
|
|
self.assertEqual((n-1, b, expected),
|
|
(n-1, b, number.ceil_shift(n-1, b)))
|
|
|
|
- (q, r) = divmod(n, 2L**b)
|
|
+ (q, r) = divmod(n, 2**b)
|
|
expected = q + int(not not r)
|
|
self.assertEqual((n, b, expected),
|
|
(n, b, number.ceil_shift(n, b)))
|
|
|
|
- (q, r) = divmod(n+1, 2L**b)
|
|
+ (q, r) = divmod(n+1, 2**b)
|
|
expected = q + int(not not r)
|
|
self.assertEqual((n+1, b, expected),
|
|
(n+1, b, number.ceil_shift(n+1, b)))
|
|
@@ -184,9 +184,9 @@ class MiscTests(unittest.TestCase):
|
|
n += 1
|
|
|
|
for e in range(16, 1+64, 2):
|
|
- self.assertRaises(ValueError, number.exact_log2, 2L**e-1)
|
|
- self.assertEqual(e, number.exact_log2(2L**e))
|
|
- self.assertRaises(ValueError, number.exact_log2, 2L**e+1)
|
|
+ self.assertRaises(ValueError, number.exact_log2, 2**e-1)
|
|
+ self.assertEqual(e, number.exact_log2(2**e))
|
|
+ self.assertRaises(ValueError, number.exact_log2, 2**e+1)
|
|
|
|
def test_exact_div(self):
|
|
"""Util.number.exact_div"""
|
|
@@ -235,20 +235,20 @@ class MiscTests(unittest.TestCase):
|
|
bits = 512
|
|
x = number.getStrongPrime(bits)
|
|
self.assertNotEqual(x % 2, 0)
|
|
- self.assertEqual(x > (1L << bits-1)-1, 1)
|
|
- self.assertEqual(x < (1L << bits), 1)
|
|
+ self.assertEqual(x > (1 << bits-1)-1, 1)
|
|
+ self.assertEqual(x < (1 << bits), 1)
|
|
e = 2**16+1
|
|
x = number.getStrongPrime(bits, e)
|
|
self.assertEqual(number.GCD(x-1, e), 1)
|
|
self.assertNotEqual(x % 2, 0)
|
|
- self.assertEqual(x > (1L << bits-1)-1, 1)
|
|
- self.assertEqual(x < (1L << bits), 1)
|
|
+ self.assertEqual(x > (1 << bits-1)-1, 1)
|
|
+ self.assertEqual(x < (1 << bits), 1)
|
|
e = 2**16+2
|
|
x = number.getStrongPrime(bits, e)
|
|
self.assertEqual(number.GCD((x-1)>>1, e), 1)
|
|
self.assertNotEqual(x % 2, 0)
|
|
- self.assertEqual(x > (1L << bits-1)-1, 1)
|
|
- self.assertEqual(x < (1L << bits), 1)
|
|
+ self.assertEqual(x > (1 << bits-1)-1, 1)
|
|
+ self.assertEqual(x < (1 << bits), 1)
|
|
|
|
def test_isPrime(self):
|
|
"""Util.number.isPrime"""
|
|
@@ -258,28 +258,28 @@ class MiscTests(unittest.TestCase):
|
|
self.assertEqual(number.isPrime(2), True)
|
|
self.assertEqual(number.isPrime(3), True)
|
|
self.assertEqual(number.isPrime(4), False)
|
|
- self.assertEqual(number.isPrime(2L**1279-1), True)
|
|
- self.assertEqual(number.isPrime(-(2L**1279-1)), False) # Regression test: negative numbers should not be prime
|
|
+ self.assertEqual(number.isPrime(2**1279-1), True)
|
|
+ self.assertEqual(number.isPrime(-(2**1279-1)), False) # Regression test: negative numbers should not be prime
|
|
# test some known gmp pseudo-primes taken from
|
|
# http://www.trnicely.net/misc/mpzspsp.html
|
|
for composite in (43 * 127 * 211, 61 * 151 * 211, 15259 * 30517,
|
|
- 346141L * 692281L, 1007119L * 2014237L, 3589477L * 7178953L,
|
|
- 4859419L * 9718837L, 2730439L * 5460877L,
|
|
- 245127919L * 490255837L, 963939391L * 1927878781L,
|
|
- 4186358431L * 8372716861L, 1576820467L * 3153640933L):
|
|
- self.assertEqual(number.isPrime(long(composite)), False)
|
|
+ 346141 * 692281, 1007119 * 2014237, 3589477 * 7178953,
|
|
+ 4859419 * 9718837, 2730439 * 5460877,
|
|
+ 245127919 * 490255837, 963939391 * 1927878781,
|
|
+ 4186358431 * 8372716861, 1576820467 * 3153640933):
|
|
+ self.assertEqual(number.isPrime(int(composite)), False)
|
|
|
|
def test_size(self):
|
|
self.assertEqual(number.size(2),2)
|
|
self.assertEqual(number.size(3),2)
|
|
self.assertEqual(number.size(0xa2),8)
|
|
self.assertEqual(number.size(0xa2ba40),8*3)
|
|
- self.assertEqual(number.size(0xa2ba40ee07e3b2bd2f02ce227f36a195024486e49c19cb41bbbdfbba98b22b0e577c2eeaffa20d883a76e65e394c69d4b3c05a1e8fadda27edb2a42bc000fe888b9b32c22d15add0cd76b3e7936e19955b220dd17d4ea904b1ec102b2e4de7751222aa99151024c7cb41cc5ea21d00eeb41f7c800834d2c6e06bce3bce7ea9a5L), 1024)
|
|
+ self.assertEqual(number.size(0xa2ba40ee07e3b2bd2f02ce227f36a195024486e49c19cb41bbbdfbba98b22b0e577c2eeaffa20d883a76e65e394c69d4b3c05a1e8fadda27edb2a42bc000fe888b9b32c22d15add0cd76b3e7936e19955b220dd17d4ea904b1ec102b2e4de7751222aa99151024c7cb41cc5ea21d00eeb41f7c800834d2c6e06bce3bce7ea9a5), 1024)
|
|
|
|
def test_negative_number_roundtrip_mpzToLongObj_longObjToMPZ(self):
|
|
"""Test that mpzToLongObj and longObjToMPZ (internal functions) roundtrip negative numbers correctly."""
|
|
- n = -100000000000000000000000000000000000L
|
|
- e = 2L
|
|
+ n = -100000000000000000000000000000000000
|
|
+ e = 2
|
|
k = number._fastmath.rsa_construct(n, e)
|
|
self.assertEqual(n, k.n)
|
|
self.assertEqual(e, k.e)
|
|
--- lib/Crypto/Util/_number_new.py.orig 2012-05-24 12:55:30 UTC
|
|
+++ lib/Crypto/Util/_number_new.py
|
|
@@ -37,11 +37,11 @@ def ceil_shift(n, b):
|
|
This is done by right-shifting n by b bits and incrementing the result by 1
|
|
if any '1' bits were shifted out.
|
|
"""
|
|
- if not isinstance(n, (int, long)) or not isinstance(b, (int, long)):
|
|
+ if not isinstance(n, int) or not isinstance(b, int):
|
|
raise TypeError("unsupported operand type(s): %r and %r" % (type(n).__name__, type(b).__name__))
|
|
|
|
assert n >= 0 and b >= 0 # I haven't tested or even thought about negative values
|
|
- mask = (1L << b) - 1
|
|
+ mask = (1 << b) - 1
|
|
if n & mask:
|
|
return (n >> b) + 1
|
|
else:
|
|
@@ -50,7 +50,7 @@ def ceil_shift(n, b):
|
|
def ceil_div(a, b):
|
|
"""Return ceil(a / b) without performing any floating-point operations."""
|
|
|
|
- if not isinstance(a, (int, long)) or not isinstance(b, (int, long)):
|
|
+ if not isinstance(a, int) or not isinstance(b, int):
|
|
raise TypeError("unsupported operand type(s): %r and %r" % (type(a).__name__, type(b).__name__))
|
|
|
|
(q, r) = divmod(a, b)
|
|
@@ -60,7 +60,7 @@ def ceil_div(a, b):
|
|
return q
|
|
|
|
def floor_div(a, b):
|
|
- if not isinstance(a, (int, long)) or not isinstance(b, (int, long)):
|
|
+ if not isinstance(a, int) or not isinstance(b, int):
|
|
raise TypeError("unsupported operand type(s): %r and %r" % (type(a).__name__, type(b).__name__))
|
|
|
|
(q, r) = divmod(a, b)
|
|
@@ -72,10 +72,10 @@ def exact_log2(num):
|
|
If no such integer exists, this function raises ValueError.
|
|
"""
|
|
|
|
- if not isinstance(num, (int, long)):
|
|
+ if not isinstance(num, int):
|
|
raise TypeError("unsupported operand type: %r" % (type(num).__name__,))
|
|
|
|
- n = long(num)
|
|
+ n = int(num)
|
|
if n <= 0:
|
|
raise ValueError("cannot compute logarithm of non-positive number")
|
|
|
|
@@ -87,7 +87,7 @@ def exact_log2(num):
|
|
n >>= 1
|
|
i -= 1
|
|
|
|
- assert num == (1L << i)
|
|
+ assert num == (1 << i)
|
|
return i
|
|
|
|
def exact_div(p, d, allow_divzero=False):
|
|
@@ -101,7 +101,7 @@ def exact_div(p, d, allow_divzero=False):
|
|
unless allow_divzero is true (default: False).
|
|
"""
|
|
|
|
- if not isinstance(p, (int, long)) or not isinstance(d, (int, long)):
|
|
+ if not isinstance(p, int) or not isinstance(d, int):
|
|
raise TypeError("unsupported operand type(s): %r and %r" % (type(p).__name__, type(d).__name__))
|
|
|
|
if d == 0 and allow_divzero:
|
|
--- lib/Crypto/Util/number.py.orig 2012-05-24 12:55:30 UTC
|
|
+++ lib/Crypto/Util/number.py
|
|
@@ -32,7 +32,7 @@ import math
|
|
import sys
|
|
from Crypto.Util.py3compat import *
|
|
|
|
-bignum = long
|
|
+bignum = int
|
|
try:
|
|
from Crypto.PublicKey import _fastmath
|
|
except ImportError:
|
|
@@ -57,7 +57,7 @@ if _fastmath is not None and not _fastmath.HAVE_DECL_M
|
|
_warn("Not using mpz_powm_sec. You should rebuild using libgmp >= 5 to avoid timing attack vulnerability.", PowmInsecureWarning)
|
|
|
|
# New functions
|
|
-from _number_new import *
|
|
+from ._number_new import *
|
|
|
|
# Commented out and replaced with faster versions below
|
|
## def long2str(n):
|
|
@@ -136,7 +136,7 @@ def getRandomNBitInteger(N, randfunc=None):
|
|
the future.
|
|
"""
|
|
value = getRandomInteger (N-1, randfunc)
|
|
- value |= 2L ** (N-1) # Ensure high bit is set
|
|
+ value |= 2 ** (N-1) # Ensure high bit is set
|
|
assert size(value) >= N
|
|
return value
|
|
|
|
@@ -153,8 +153,8 @@ def inverse(u, v):
|
|
"""inverse(u:long, v:long):long
|
|
Return the inverse of u mod v.
|
|
"""
|
|
- u3, v3 = long(u), long(v)
|
|
- u1, v1 = 1L, 0L
|
|
+ u3, v3 = int(u), int(v)
|
|
+ u1, v1 = 1, 0
|
|
while v3 > 0:
|
|
q=divmod(u3, v3)[0]
|
|
u1, v1 = v1, u1 - v1*q
|
|
@@ -208,7 +208,7 @@ def _rabinMillerTest(n, rounds, randfunc=None):
|
|
|
|
tested = []
|
|
# we need to do at most n-2 rounds.
|
|
- for i in xrange (min (rounds, n-2)):
|
|
+ for i in range (min (rounds, n-2)):
|
|
# randomly choose a < n and make sure it hasn't been tested yet
|
|
a = getRandomRange (2, n, randfunc)
|
|
while a in tested:
|
|
@@ -219,7 +219,7 @@ def _rabinMillerTest(n, rounds, randfunc=None):
|
|
if z == 1 or z == n_1:
|
|
continue
|
|
composite = 1
|
|
- for r in xrange (b):
|
|
+ for r in range (b):
|
|
z = (z * z) % n
|
|
if z == 1:
|
|
return 0
|
|
@@ -261,7 +261,7 @@ def getStrongPrime(N, e=0, false_positive_prob=1e-6, r
|
|
|
|
# Use the accelerator if available
|
|
if _fastmath is not None:
|
|
- return _fastmath.getStrongPrime(long(N), long(e), false_positive_prob,
|
|
+ return _fastmath.getStrongPrime(int(N), int(e), false_positive_prob,
|
|
randfunc)
|
|
|
|
if (N < 512) or ((N % 128) != 0):
|
|
@@ -275,9 +275,9 @@ def getStrongPrime(N, e=0, false_positive_prob=1e-6, r
|
|
x = (N - 512) >> 7;
|
|
# We need to approximate the sqrt(2) in the lower_bound by an integer
|
|
# expression because floating point math overflows with these numbers
|
|
- lower_bound = divmod(14142135623730950489L * (2L ** (511 + 128*x)),
|
|
- 10000000000000000000L)[0]
|
|
- upper_bound = (1L << (512 + 128*x)) - 1
|
|
+ lower_bound = divmod(14142135623730950489 * (2 ** (511 + 128*x)),
|
|
+ 10000000000000000000)[0]
|
|
+ upper_bound = (1 << (512 + 128*x)) - 1
|
|
# Randomly choose X in calculated range
|
|
X = getRandomRange (lower_bound, upper_bound, randfunc)
|
|
|
|
@@ -291,7 +291,7 @@ def getStrongPrime(N, e=0, false_positive_prob=1e-6, r
|
|
# sieve the field
|
|
for prime in sieve_base:
|
|
offset = y % prime
|
|
- for j in xrange ((prime - offset) % prime, len (field), prime):
|
|
+ for j in range ((prime - offset) % prime, len (field), prime):
|
|
field[j] = 1
|
|
|
|
# look for suitable p[i] starting at y
|
|
@@ -347,7 +347,7 @@ def getStrongPrime(N, e=0, false_positive_prob=1e-6, r
|
|
X += increment
|
|
# abort when X has more bits than requested
|
|
# TODO: maybe we shouldn't abort but rather start over.
|
|
- if X >= 1L << N:
|
|
+ if X >= 1 << N:
|
|
raise RuntimeError ("Couln't find prime in field. "
|
|
"Developer: Increase field_size")
|
|
return X
|
|
@@ -365,7 +365,7 @@ def isPrime(N, false_positive_prob=1e-6, randfunc=None
|
|
If randfunc is omitted, then Random.new().read is used.
|
|
"""
|
|
if _fastmath is not None:
|
|
- return _fastmath.isPrime(long(N), false_positive_prob, randfunc)
|
|
+ return _fastmath.isPrime(int(N), false_positive_prob, randfunc)
|
|
|
|
if N < 3 or N & 1 == 0:
|
|
return N == 2
|
|
@@ -394,10 +394,10 @@ def long_to_bytes(n, blocksize=0):
|
|
"""
|
|
# after much testing, this algorithm was deemed to be the fastest
|
|
s = b('')
|
|
- n = long(n)
|
|
+ n = int(n)
|
|
pack = struct.pack
|
|
while n > 0:
|
|
- s = pack('>I', n & 0xffffffffL) + s
|
|
+ s = pack('>I', n & 0xffffffff) + s
|
|
n = n >> 32
|
|
# strip off leading zeros
|
|
for i in range(len(s)):
|
|
@@ -420,7 +420,7 @@ def bytes_to_long(s):
|
|
|
|
This is (essentially) the inverse of long_to_bytes().
|
|
"""
|
|
- acc = 0L
|
|
+ acc = 0
|
|
unpack = struct.unpack
|
|
length = len(s)
|
|
if length % 4:
|
|
--- lib/Crypto/Util/RFC1751.py.orig 2012-05-24 12:55:30 UTC
|
|
+++ lib/Crypto/Util/RFC1751.py
|
|
@@ -29,6 +29,7 @@ __revision__ = "$Id$"
|
|
|
|
import binascii
|
|
from Crypto.Util.py3compat import *
|
|
+from functools import reduce
|
|
|
|
binary={0:'0000', 1:'0001', 2:'0010', 3:'0011', 4:'0100', 5:'0101',
|
|
6:'0110', 7:'0111', 8:'1000', 9:'1001', 10:'1010', 11:'1011',
|
|
@@ -36,8 +37,8 @@ binary={0:'0000', 1:'0001', 2:'0010', 3:'0011', 4:'010
|
|
|
|
def _key2bin(s):
|
|
"Convert a key into a string of binary digits"
|
|
- kl=map(lambda x: bord(x), s)
|
|
- kl=map(lambda x: binary[x>>4]+binary[x&15], kl)
|
|
+ kl=[bord(x) for x in s]
|
|
+ kl=[binary[x>>4]+binary[x&15] for x in kl]
|
|
return ''.join(kl)
|
|
|
|
def _extract(key, start, length):
|
|
@@ -95,7 +96,7 @@ def english_to_key (s):
|
|
p=0
|
|
for i in range(0, 64, 2): p=p+_extract(skbin, i, 2)
|
|
if (p&3) != _extract(skbin, 64, 2):
|
|
- raise ValueError, "Parity error in resulting key"
|
|
+ raise ValueError("Parity error in resulting key")
|
|
key=key+subkey[0:8]
|
|
return key
|
|
|
|
@@ -352,13 +353,13 @@ if __name__=='__main__':
|
|
]
|
|
|
|
for key, words in data:
|
|
- print 'Trying key', key
|
|
+ print('Trying key', key)
|
|
key=binascii.a2b_hex(key)
|
|
w2=key_to_english(key)
|
|
if w2!=words:
|
|
- print 'key_to_english fails on key', repr(key), ', producing', str(w2)
|
|
+ print('key_to_english fails on key', repr(key), ', producing', str(w2))
|
|
k2=english_to_key(words)
|
|
if k2!=key:
|
|
- print 'english_to_key fails on key', repr(key), ', producing', repr(k2)
|
|
+ print('english_to_key fails on key', repr(key), ', producing', repr(k2))
|
|
|
|
|