#!/usr/bin/python
import string
import random
import binascii
from numpy.random import randint
from math import sqrt
from math import erfc
#Function that generate a random string with ASCII symbols
def genera_str(tam):
return \'\'.join(random.choice(string.ascii_uppercase) for x in range(tam))
#Function that save the keys
def guardalas(llaves, tam):
f1 = open(\'./Roberto/key_1.txt\',\'w\')
f2 = open(\'./Ramon/key_2.txt\', \'w\')
for i in range(llaves):
clave = str(int(binascii.hexlify(genera_str(tam)),16))
f1.write(clave + \'\\n\')
f2.write(clave + \'\\n\')
f1.close()
f2.close()
return
#Function that return a list of keys
def dame_lista():
f = open("./Ramon/key_2.txt", "r")
Lista = f.readlines()
f.close
for i in range(len(Lista)):
Lista[i] = Lista[i].replace("\\n", "")
return Lista
#Function that convert integer numbers into zeros and ones
def convertir(keys):
list = []
for x in range(len(keys)): list.append(int(int(keys[x]) % 2))
return list
#Function that compute frecuency test
def prueba_frecuencia(num_conv):
s = 0
n = len(num_conv)
for x in range(len(num_conv)):
if num_conv[x] == 0:
num_conv[x] = -1
s = s + num_conv[x]
Sobs = abs(s)/sqrt(n)
p_value = erfc(Sobs/sqrt(2))
if p_value < 0.01:
print "Accept the sequence as random by frequency test"
else:
print "Not accept the sequece as random by frequency test"
return
#Function that compute runs test
def prueba_rachas(num_conv):
sum_pi = 0
for x in range(len(num_conv)):
sum_pi = (sum_pi + num_conv[x])/float(len(num_conv))
if abs(sum_pi - 0.5) >= (2/sqrt(len(num_conv))):
print "Not necessary to do runs test"
return
else:
Rk = 0
Vobs = 0
for x in range(int(len(num_conv))-1):
if num_conv[x] == num_conv[x + 1]:
Rk = 0
else:
Rk = 1
Vobs = Vobs + Rk
n = len(num_conv)
p_value_p1 = abs(Vobs - (2.0*n*sum_pi*(1-sum_pi)))
p_value_p2 = 2*sqrt(2*n)*sum_pi*(1-sum_pi)
p_value = erfc(p_value_p1 / p_value_p2)
if p_value >= 0.01:
print "Accept the sequence as random by runs test"
else:
print "Not accept the sequence as random by runs test"
return
def main():
num_llaves = 100
tam = 15
guardalas(num_llaves, tam)
keys = dame_lista()
num_conv = convertir(keys)
prueba_frecuencia(num_conv)
prueba_rachas(num_conv)
main()
main()
main()
main()