4
4
import struct
5
5
import logging
6
6
import sys
7
- import encrypt
8
7
9
8
slow_xor = False
10
9
imported = False
@@ -32,8 +31,14 @@ def run_imports():
32
31
def numpy_xor (a , b ):
33
32
if slow_xor :
34
33
return py_xor_str (a , b )
35
- ab = numpy .frombuffer (a , dtype = numpy .byte )
36
- bb = numpy .frombuffer (b , dtype = numpy .byte )
34
+ dtype = numpy .byte
35
+ if len (a ) % 4 == 0 :
36
+ dtype = numpy .uint32
37
+ elif len (a ) % 2 == 0 :
38
+ dtype = numpy .uint16
39
+
40
+ ab = numpy .frombuffer (a , dtype = dtype )
41
+ bb = numpy .frombuffer (b , dtype = dtype )
37
42
c = numpy .bitwise_xor (ab , bb )
38
43
r = c .tostring ()
39
44
return r
@@ -80,8 +85,7 @@ def update(self, data):
80
85
81
86
if self ._pos >= BLOCK_SIZE :
82
87
self ._next_stream ()
83
- self ._pos -= BLOCK_SIZE
84
- assert self ._pos == 0
88
+ self ._pos = 0
85
89
if not data :
86
90
break
87
91
return '' .join (results )
@@ -94,12 +98,12 @@ def test():
94
98
rounds = 1 * 1024
95
99
plain = urandom (BLOCK_SIZE * rounds )
96
100
import M2Crypto .EVP
97
- cipher = M2Crypto .EVP .Cipher ('aes_128_cfb' , 'k' * 32 , 'i' * 16 , 1 ,
98
- key_as_bytes = 0 , d = 'md5' , salt = None , i = 1 ,
99
- padding = 1 )
100
- decipher = M2Crypto .EVP .Cipher ('aes_128_cfb' , 'k' * 32 , 'i' * 16 , 0 ,
101
- key_as_bytes = 0 , d = 'md5' , salt = None , i = 1 ,
102
- padding = 1 )
101
+ # cipher = M2Crypto.EVP.Cipher('aes_128_cfb', 'k' * 32, 'i' * 16, 1,
102
+ # key_as_bytes=0, d='md5', salt=None, i=1,
103
+ # padding=1)
104
+ # decipher = M2Crypto.EVP.Cipher('aes_128_cfb', 'k' * 32, 'i' * 16, 0,
105
+ # key_as_bytes=0, d='md5', salt=None, i=1,
106
+ # padding=1)
103
107
104
108
cipher = Salsa20Cipher ('salsa20-ctr' , 'k' * 32 , 'i' * 8 , 1 )
105
109
decipher = Salsa20Cipher ('salsa20-ctr' , 'k' * 32 , 'i' * 8 , 1 )
@@ -108,15 +112,15 @@ def test():
108
112
print 'start'
109
113
start = time .time ()
110
114
while pos < len (plain ):
111
- l = random .randint (100 , 16384 )
115
+ l = random .randint (100 , 32768 )
112
116
c = cipher .update (plain [pos :pos + l ])
113
117
results .append (c )
114
118
pos += l
115
119
pos = 0
116
120
c = '' .join (results )
117
121
results = []
118
122
while pos < len (plain ):
119
- l = random .randint (100 , 16384 )
123
+ l = random .randint (100 , 32768 )
120
124
results .append (decipher .update (c [pos :pos + l ]))
121
125
pos += l
122
126
end = time .time ()
0 commit comments