forked from Keysight/Jlsca
-
Notifications
You must be signed in to change notification settings - Fork 0
/
conditional-bitwisereduction-tests.jl
146 lines (101 loc) · 4.13 KB
/
conditional-bitwisereduction-tests.jl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
# This file is part of Jlsca, license is GPLv3, see https://www.gnu.org/licenses/gpl-3.0.en.html
#
# Author: Cees-Bart Breunesse
# Run: julia -p3 -Lsca.jl <thisfile>
using Base.Test
using Sca
using Trs
function ParallelCondReduceTest(splitmode)
len = 200
fullfilename = "aestraces/aes128_sb_ciph_0fec9ca47fb2f2fd4df14dcb93aa4967.trs"
@printf("file: %s\n", fullfilename)
direction = FORWARD
params = getParameters(fullfilename, direction)
params.analysis = DPA()
params.analysis.statistic = cor
params.analysis.leakageFunctions = [bit0]
numberOfAverages = length(params.keyByteOffsets)
numberOfCandidates = getNumberOfCandidates(params)
localtrs = InspectorTrace(fullfilename, true)
addSamplePass(localtrs, tobits)
@everyworker begin
using Trs
trs = InspectorTrace($fullfilename, true)
addSamplePass(trs, tobits)
if $splitmode == 1
setPostProcessor(trs, CondReduce(SplitByTracesSliced(), $localtrs))
elseif $splitmode == 2
setPostProcessor(trs, CondReduce(SplitByTracesBlock(), $localtrs))
elseif $splitmode == 3
setPostProcessor(trs, CondReduce(SplitByData($numberOfAverages, $numberOfCandidates), $localtrs))
end
end
sando = Vector{Tuple{Matrix{Float64}, Matrix{UInt}}}(2)
sandoIdx = 1
cb::Function = (phase,params,scoresAndOffsets,dataWidth,keyOffsets,numberOfTraces2) -> (sando[sandoIdx] = scoresAndOffsets[1]; sandoIdx += 1)
key = sca(DistributedTrace(),params,1, len, false, Nullable{Function}(cb))
@test(key == get(params.knownKey))
params.analysis = DPA()
params.analysis.statistic = cor
params.analysis.leakageFunctions = [bit0]
trs = InspectorTrace(fullfilename, true)
addSamplePass(trs, tobits)
setPostProcessor(trs, CondReduce(NoSplit(), trs))
key = sca(trs,params,1, len, false, Nullable{Function}(cb))
@test(key == get(params.knownKey))
@test sandoIdx == 3
@test size(sando[1][1]) == size(sando[2][1])
@test size(sando[1][2]) == size(sando[2][2])
@test_approx_eq sando[1][1] sando[2][1]
@test sando[1][2] == sando[2][2]
end
function ParallelCondReduceTestWithInterval()
len = 200
updateInterval = 49
fullfilename = "aestraces/aes128_sb_ciph_0fec9ca47fb2f2fd4df14dcb93aa4967.trs"
@printf("file: %s\n", fullfilename)
direction = FORWARD
params = getParameters(fullfilename, direction)
params.analysis = DPA()
params.analysis.statistic = cor
params.analysis.leakageFunctions = [bit0]
params.updateInterval = Nullable(updateInterval)
numberOfAverages = length(params.keyByteOffsets)
numberOfCandidates = getNumberOfCandidates(params)
localtrs = InspectorTrace(fullfilename, true)
addSamplePass(localtrs, tobits)
@everyworker begin
using Trs
trs = InspectorTrace($fullfilename, true)
addSamplePass(trs, tobits)
setPostProcessor(trs, CondReduce(SplitByTracesSliced(), $localtrs))
end
numberOfScas = div(len, updateInterval) + ((len % updateInterval) > 0 ? 1 : 0)
sando = Vector{Tuple{Matrix{Float64}, Matrix{UInt}}}(numberOfScas*2)
sandoIdx = 1
cb::Function = (phase,params,scoresAndOffsets,dataWidth,keyOffsets,numberOfTraces2) -> (sando[sandoIdx] = scoresAndOffsets[1]; sandoIdx += 1)
key = sca(DistributedTrace(),params,1, len, false, Nullable{Function}(cb))
@test(key == get(params.knownKey))
params.analysis = DPA()
params.analysis.statistic = cor
params.analysis.leakageFunctions = [bit0]
params.updateInterval = Nullable()
for s in 1:numberOfScas
len2 = min(len, updateInterval*s)
trs = InspectorTrace(fullfilename,true)
addSamplePass(trs, tobits)
setPostProcessor(trs, CondReduce(NoSplit(), trs))
key = sca(trs,params,1, len2, false, Nullable{Function}(cb))
@test(key == get(params.knownKey))
end
@test sandoIdx == numberOfScas*2+1
for s in 1:numberOfScas
@test_approx_eq sando[s][1] sando[s][1]
@test sando[s][2] == sando[s][2]
end
end
@assert nworkers() > 1
ParallelCondReduceTest(1)
ParallelCondReduceTest(2)
ParallelCondReduceTest(3)
ParallelCondReduceTestWithInterval()