From 42e0cf6a0e6160189fc3e29acc16ea2d45e6865b Mon Sep 17 00:00:00 2001 From: haskal Date: Sun, 25 Apr 2021 04:27:56 -0400 Subject: [PATCH] uwu 2 --- sca/ascad/attack.py | 9 ++------- sca/ascad/first_order.png | Bin 0 -> 26415 bytes 2 files changed, 2 insertions(+), 7 deletions(-) create mode 100644 sca/ascad/first_order.png diff --git a/sca/ascad/attack.py b/sca/ascad/attack.py index b9eb3ba..fd217b7 100644 --- a/sca/ascad/attack.py +++ b/sca/ascad/attack.py @@ -76,11 +76,7 @@ def align(db, ntraces): def main(db): ntraces = 1000 - # traces = align(db, ntraces) - - traces = numpy.zeros((ntraces, 700), 'double') - for i in range(ntraces): - traces[i, :] = db["traces"][i] + traces = align(db, ntraces) # for i in range(10): # plt.plot(traces[i], color=numpy.hstack((numpy.random.random(3), [0.5]))) @@ -136,6 +132,5 @@ if __name__ == "__main__": from tqdm.contrib.logging import logging_redirect_tqdm logging.basicConfig(level=logging.INFO) with logging_redirect_tqdm(): - # db = h5py.File("./ASCAD_databases/ASCAD_desync100.h5", "r") - db = h5py.File("./ASCAD_databases/ASCAD.h5", "r") + db = h5py.File("./ASCAD_databases/ASCAD_desync100.h5", "r") main(db["Attack_traces"]) diff --git a/sca/ascad/first_order.png b/sca/ascad/first_order.png new file mode 100644 index 0000000000000000000000000000000000000000..2acd3ffdf83ddc6b790c601a1cf840e627156ff3 GIT binary patch literal 26415 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