document.write('
Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. #!/usr/bin/python                                                                                                                                                                            
  2. import string
  3. import random
  4. import binascii
  5. from numpy.random import randint
  6. from math import sqrt
  7. from math import erfc
  8.  
  9. #Function that generate a random string with ASCII symbols                                                                                                                                    
  10. def genera_str(tam):
  11.     return \'\'.join(random.choice(string.ascii_uppercase) for x in range(tam))                                                                                                                
  12.  
  13. #Function that save the keys                                                                                                                                                                  
  14. def guardalas(llaves, tam):
  15.     f1 = open(\'./Roberto/key_1.txt\',\'w\')
  16.     f2 = open(\'./Ramon/key_2.txt\', \'w\')                                                                                                                                                                              
  17.  
  18.     for i in range(llaves):
  19.         clave = str(int(binascii.hexlify(genera_str(tam)),16))                                                                                                                              
  20.         f1.write(clave + \'\\n\')
  21.         f2.write(clave + \'\\n\')
  22.  
  23.     f1.close()
  24.     f2.close()
  25.     return
  26.  
  27. #Function that return a list of keys                                                                                                                                                          
  28. def dame_lista():
  29.     f = open("./Ramon/key_2.txt", "r")
  30.     Lista = f.readlines()
  31.     f.close
  32.     for i in range(len(Lista)):
  33.         Lista[i] = Lista[i].replace("\\n", "")
  34.     return Lista
  35.  
  36. #Function that convert integer numbers into zeros and ones                                                                                                                                    
  37. def convertir(keys):
  38.     list = []
  39.     for x in range(len(keys)): list.append(int(int(keys[x]) % 2))
  40.     return list
  41.  
  42. #Function that compute frecuency test                                                                                                                                                        
  43. def prueba_frecuencia(num_conv):
  44.     s = 0
  45.     n = len(num_conv)
  46.  
  47.     for x in range(len(num_conv)):
  48.         if num_conv[x] == 0:
  49.             num_conv[x] = -1
  50.             s = s + num_conv[x]
  51.  
  52.     Sobs = abs(s)/sqrt(n)
  53.     p_value = erfc(Sobs/sqrt(2))
  54.  
  55.     if p_value < 0.01:
  56.         print "Accept the sequence as random by frequency test"
  57.     else:
  58.         print "Not accept the sequece as random by frequency test"
  59.     return
  60.  
  61. #Function that compute runs test
  62. def prueba_rachas(num_conv):
  63.     sum_pi = 0
  64.     for x in range(len(num_conv)):
  65.         sum_pi = (sum_pi + num_conv[x])/float(len(num_conv))
  66.  
  67.     if abs(sum_pi - 0.5) >= (2/sqrt(len(num_conv))):
  68.         print "Not necessary to do runs test"
  69.         return
  70.  
  71.     else:
  72.         Rk = 0
  73.         Vobs = 0
  74.  
  75.         for x in range(int(len(num_conv))-1):
  76.             if num_conv[x] == num_conv[x + 1]:
  77.                 Rk = 0
  78.             else:
  79.                 Rk = 1
  80.             Vobs = Vobs + Rk
  81.  
  82.         n = len(num_conv)
  83.         p_value_p1 = abs(Vobs - (2.0*n*sum_pi*(1-sum_pi)))
  84.         p_value_p2 = 2*sqrt(2*n)*sum_pi*(1-sum_pi)
  85.         p_value = erfc(p_value_p1 / p_value_p2)
  86.  
  87.         if p_value >= 0.01:
  88.             print "Accept the sequence as random by runs test"
  89.         else:
  90.             print "Not accept the sequence as random by runs test"
  91.  
  92.         return
  93.  
  94. def main():
  95.     num_llaves = 100
  96.     tam = 15
  97.     guardalas(num_llaves, tam)
  98.     keys = dame_lista()
  99.     num_conv = convertir(keys)
  100.     prueba_frecuencia(num_conv)
  101.     prueba_rachas(num_conv)
  102.  
  103. main()
  104. main()
  105. main()
  106. main()
');