Skip to content

Commit 7d8ba12

Browse files
committed
Edited autocorrelation.py to add function to plot correlogram
Edit keytestsuite.py to add new plotcorr function from autocorrelation.py Edited montecarlopitest.py to split normalization stage from simulation stage Added file graphs.py to plot graphs of statistical test results
1 parent 99f1699 commit 7d8ba12

File tree

4 files changed

+97
-4
lines changed

4 files changed

+97
-4
lines changed

autocorrelation.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,18 @@ def min_autocorr(data,maxk=100):
3131
p = graph[kmin]
3232
return (kmin,p)
3333

34+
def plot_correlogram(data,maxk=100):
35+
import numpy as np
36+
import matplotlib.pyplot as plt
37+
graph = correlogram(data,maxk)
38+
x = np.linspace(1,maxk,maxk)
39+
y = np.array([graph[i] for i in range(1,maxk+1)])
40+
plt.grid()
41+
plt.plot(x,y,marker=".",color="b")
42+
plt.xlabel("Lag (k)")
43+
plt.ylabel("Autocorrelation")
44+
#plt.legend()
45+
plt.show()
3446

3547
#data = [23.4,24.1,44.4,25.5,29.2,37.1,45.0,61.8,56.7,62.3,30.9,69.6,11.0,56.6,83.4,33.9,75.5,87.3,55.4,95.2]
3648
#print(autocorrelation(data,2))

graphs.py

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
from autocorrelation import *
2+
from dig_transition import *
3+
from freq_analysis import *
4+
from montecarlopitest import *
5+
from difftests import *
6+
import sys
7+
import json
8+
import numpy as np
9+
import matplotlib.pyplot as plt
10+
from matplotlib.ticker import PercentFormatter
11+
12+
with open("Amber-Spyglass_Encrypted-Enumerated.json","r") as f:
13+
cipher = json.load(f)
14+
15+
with open("randorgTRNG3.json","r") as f:
16+
trng = json.load(f)
17+
trng = trng[0:len(cipher)]
18+
19+
def plotcorr(data,maxk=100):
20+
plot_correlogram(data,maxk=maxk)
21+
22+
def plotcorrdouble(data1,data2,maxk=100):
23+
#import numpy as np
24+
#import matplotlib.pyplot as plt
25+
graph1 = correlogram(data1,maxk)
26+
graph2 = correlogram(data2,maxk)
27+
x1 = np.linspace(1,maxk,maxk)
28+
y1 = np.array([graph1[i] for i in range(1,maxk+1)])
29+
x2 = np.linspace(1,maxk,maxk)
30+
y2 = np.array([graph2[i] for i in range(1,maxk+1)])
31+
plt.grid()
32+
plt.plot(x1,y1,marker=".",color="b",label="Ciphertext Correlogram")
33+
plt.plot(x2,y2,marker=".",color="r",label="TRNG Correlogram")
34+
plt.xlabel("Lag (k)")
35+
plt.ylabel("Autocorrelation")
36+
plt.legend()
37+
plt.show()
38+
39+
def plotfreq(data):
40+
x = np.array(data)
41+
plt.hist(x,bins=[0.5+i for i in range(27)],color="b",edgecolor="black",linewidth="1.2",density=True)
42+
plt.gca().yaxis.set_major_formatter(PercentFormatter(1))
43+
plt.ylabel("% Frequency")
44+
plt.xlabel("Character")
45+
plt.show()
46+
47+
def plotcarlo(data):
48+
data1 = data
49+
data2 = data1[::-1]
50+
datax1 = []
51+
datax2 = []
52+
for i in range(3*(len(data1)//3)):
53+
if i%3 == 0:
54+
n = 26*26*data[i] + 26*data[i+1] + data[i+2] #+ data[i+3] + data[i+4]
55+
datax1.append(int(n))
56+
for i in range(3*(len(data2)//3)):
57+
if i%3 == 0:
58+
n = 26*26*(data2[i]) + 26*(data2[i+1]) + (data2[i+2]) #+ (data2[i+3]) + (data2[i+4])
59+
datax2.append(int(n))
60+
x,y = normalizedcarlo(datax1,datax2)
61+
figure,axes = plt.subplots()
62+
plt.scatter(x,y,s=0.15,color="r",linewidths=0)
63+
plt.xlim(0,1)
64+
plt.ylim(0,1)
65+
c = plt.Circle((0.5,0.5),0.5,fill=False,edgecolor="black",linewidth=0.5,visible=True)
66+
axes.add_artist(c)
67+
plt.show()
68+
print(MonteCarloPi(x,y))
69+
70+
71+
if __name__ == "__main__":
72+
#plotcorr(trng)
73+
#plotcorrdouble(cipher,trng)
74+
#plotfreq(cipher)
75+
plotcarlo(trng)

keytestsuite.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
data = [x for x in str(f.readline())]
1616
print(len(data))
1717

18-
data1 = data#[0:500000]
18+
data1 = data[0:664044]
1919
data2 = data1[::-1]
2020

2121
#datax and datax2 adds together 1st and 2nd, 3rd and 4th, etc
@@ -71,6 +71,7 @@
7171

7272
print("Maximum autocorrelation (k,autocorrelation): " + str(max_autocorr(data1,20)))
7373
print("Minimum autocorrelation (k,autocorrelation): " + str(min_autocorr(data1,20)))
74+
#plot_correlogram(data1,100)
7475
#print("Maximum pattern error from expected (pattern,%): " + str(max_pattern(data1)))
7576
#print("Minimum pattern error from expected (pattern,%): " + str(min_pattern(data1)))
7677
print("Max diff error (diff,%): " + str(max_diff_error(data1)))

montecarlopitest.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ def distancetocentre(x,y,centerx=0.5,centery=0.5):
55
dist = ((x-centerx)**2 + (y-centery)**2)**0.5
66
return dist
77

8-
def MonteCarloPi(datax,datay=None):
8+
def normalizedcarlo(datax,datay=None):
99
x = np.array(datax).reshape(-1,1)
1010
scaler = preprocessing.MinMaxScaler()
1111
normalizedx = scaler.fit_transform(x)
@@ -21,17 +21,22 @@ def MonteCarloPi(datax,datay=None):
2121
normalizedx = normalizedx[0]
2222
normalizedy = normalizedy.tolist()
2323
normalizedy = normalizedy[0]
24+
return normalizedx,normalizedy
25+
26+
def MonteCarloPi(datax,datay=None):
27+
x,y = normalizedcarlo(datax,datay)
2428
n=0
2529
inside = 0
2630
outside = 0
27-
for i in normalizedx:
28-
dist = distancetocentre(i,normalizedy[n])
31+
for i in x:
32+
dist = distancetocentre(i,y[n])
2933
n+=1
3034
if dist <= 0.5:
3135
inside += 1
3236
else:
3337
outside += 1
3438
pi = 4*(inside/(inside+outside))
39+
print(inside,outside+inside)
3540
return pi
3641

3742
"""from RNG_div_all_Coprime import DivAllCoPrimeRNG

0 commit comments

Comments
 (0)