Files
swift-mirror/utils/benchmark/RC4/RC4.py
2014-05-13 08:08:55 +00:00

48 lines
1.0 KiB
Python

class RC4:
def __init__(self):
self.state = [0] * 256
self.I = 0
self.J = 0
def init(self, key):
for i in xrange(256):
self.state[i] = i
j = 0
for i in xrange(256):
K = ord(key[i % len(key)])
S = self.state[i]
j = (j + S + K) % 256
self.swapByIndex(i, j)
def swapByIndex(self, i, j):
self.state[i], self.state[j] = self.state[j], self.state[i]
def next(self):
self.I = (self.I + 1) % 256
self.J = (self.J + self.state[self.I]) % 256
self.swapByIndex(self.I, self.J)
return self.state[(self.state[self.I] + self.state[self.J]) % 256]
def encrypt(self, data):
for i in xrange(len(data)):
data[i] = data[i] ^ self.next()
def benchRC4_internal(messageLen, iterations):
Secret = "This is my secret message"
Key = "This is my key"
LongData = [0] * messageLen
for i in xrange(messageLen):
LongData[i] = ord(Secret[i % len(Secret)])
Enc = RC4()
Enc.init(Key)
for i in xrange(iterations):
Enc.encrypt(LongData)
benchRC4_internal(5000, 100000)