Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
lwc
/
compare
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Pipelines
Members
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
82ad9eed
authored
Feb 19, 2020
by
lwc-tester
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
still working on this
parent
40fb2d47
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
12 additions
and
198 deletions
+12
-198
test.py
+0
-188
test_common.py
+12
-10
No files found.
test.py
deleted
100755 → 0
View file @
40fb2d47
#!/usr/bin/env python3
import
re
import
os
import
sys
import
struct
from
subprocess
import
Popen
,
PIPE
def
main
(
argv
):
speed_test
=
True
if
len
(
argv
)
<
3
:
print
(
"Usage: test.py LWC_AEAD_KAT.txt program [arguments]"
)
cmd
=
argv
[
2
:]
for
attempt
in
range
(
3
):
print
(
"beginning test
%
d of '
%
s' using test vectors '
%
s'"
%
(
attempt
,
' '
.
join
(
cmd
),
argv
[
1
]))
try
:
if
speed_test
:
measurements
=
begin_measurement
()
try
:
test
(
argv
[
1
],
cmd
)
finally
:
if
speed_test
:
end_measurement
(
measurements
)
print
(
"TEST SUCCESSFUL"
)
return
0
except
Exception
as
ex
:
print
(
str
(
ex
))
print
(
"TEST FAILED"
)
finally
:
sys
.
stdout
.
flush
()
sys
.
stderr
.
flush
()
return
1
def
test
(
test_file
,
cmd
,
ram_test
=
False
):
test_file
=
open
(
test_file
,
'r'
)
p
=
Popen
(
cmd
,
bufsize
=
0
,
stdin
=
PIPE
,
stdout
=
PIPE
)
def
write
(
data
):
l
=
p
.
stdin
.
write
(
data
)
if
len
(
data
)
!=
l
:
raise
Exception
(
"could not write
%
d bytes of data (put
%
d)"
%
(
len
(
data
),
l
))
def
read
(
l
):
if
l
==
0
:
return
b
""
data
=
p
.
stdout
.
read
(
l
)
if
len
(
data
)
==
0
:
print
(
"Unexpected end of stream"
,
file
=
sys
.
stderr
)
#sys.exit(1)
if
len
(
data
)
!=
l
:
raise
Exception
(
"could not read
%
d bytes of data (got
%
d)"
%
(
l
,
len
(
data
)))
return
data
def
submit
(
action
,
data
):
h
=
struct
.
pack
(
"<BI"
,
ord
(
action
),
len
(
data
))
write
(
h
)
write
(
data
)
def
obtain
():
l
=
read
(
4
)
(
l
,
)
=
struct
.
unpack
(
"<I"
,
l
)
return
read
(
l
)
output
=
read
(
14
)
if
output
!=
b
"Hello, World!
\n
"
:
raise
Exception
(
"Unexpected output:
%
s"
%
output
)
print
(
"Ready"
)
m
=
b
""
ad
=
b
""
k
=
b
""
npub
=
b
""
i
=
0
lineprog
=
re
.
compile
(
r"^\s*([A-Z]+)\s*=\s*(([0-9a-f])*)\s*$"
,
re
.
IGNORECASE
)
for
line
in
test_file
.
readlines
():
line
=
line
.
strip
()
res
=
lineprog
.
match
(
line
)
if
line
==
""
:
print
()
print
(
"Count =
%
d"
%
i
)
print
(
" m =
%
s"
%
m
.
hex
())
print
(
" ad =
%
s"
%
ad
.
hex
())
print
(
"npub =
%
s"
%
npub
.
hex
())
print
(
" k =
%
s"
%
k
.
hex
())
print
(
" c =
%
s"
%
c
.
hex
())
submit
(
'c'
,
b
"
\0
"
*
(
len
(
m
)
+
32
))
submit
(
's'
,
b
""
)
submit
(
'm'
,
m
)
submit
(
'a'
,
ad
)
submit
(
'k'
,
k
)
submit
(
'p'
,
npub
)
write
(
b
'e'
)
write
(
b
'C'
)
output
=
obtain
()
print
(
" c =
%
s"
%
output
.
hex
())
if
c
!=
output
:
raise
Exception
(
"output of encryption is different from expected ciphertext"
)
submit
(
'm'
,
b
"
\0
"
*
len
(
c
))
submit
(
's'
,
b
""
)
submit
(
'c'
,
c
)
submit
(
'a'
,
ad
)
submit
(
'k'
,
k
)
submit
(
'p'
,
npub
)
write
(
b
'd'
)
write
(
b
'M'
)
output
=
obtain
()
print
(
" m =
%
s"
%
output
.
hex
())
if
m
!=
output
:
raise
Exception
(
"output of encryption is different from expected ciphertext"
)
if
ram_test
:
# RAM test only tests the first test vector
write
(
b
'u'
)
output
=
obtain
()
print
(
" untouched memory =
%
d"
%
struct
.
unpack
(
"<I"
,
output
))
break
elif
res
is
not
None
:
if
res
[
1
]
.
lower
()
==
'count'
:
i
=
int
(
res
[
2
],
10
)
elif
res
[
1
]
.
lower
()
==
'key'
:
k
=
bytes
.
fromhex
(
res
[
2
])
elif
res
[
1
]
.
lower
()
==
'nonce'
:
npub
=
bytes
.
fromhex
(
res
[
2
])
elif
res
[
1
]
.
lower
()
==
'pt'
:
m
=
bytes
.
fromhex
(
res
[
2
])
elif
res
[
1
]
.
lower
()
==
'ad'
:
ad
=
bytes
.
fromhex
(
res
[
2
])
elif
res
[
1
]
.
lower
()
==
'ct'
:
c
=
bytes
.
fromhex
(
res
[
2
])
else
:
raise
Exception
(
"ERROR: unparsed line in test vectors file: '
%
s'"
%
res
)
else
:
raise
Exception
(
"ERROR: unparsed line in test vectors file: '
%
s'"
%
line
)
def
begin_measurement
():
import
saleae
import
time
sal
=
saleae
.
Saleae
()
# Channel 0 is reset
# Channel 1 is crypto_busy
sal
.
set_active_channels
([
0
,
1
],
[])
sal
.
set_sample_rate
(
sal
.
get_all_sample_rates
()[
0
])
sal
.
set_capture_seconds
(
6000
)
sal
.
capture_start
()
time
.
sleep
(
1
)
if
sal
.
is_processing_complete
():
raise
Exception
(
"Capture didn't start successfully"
)
return
sal
def
end_measurement
(
sal
):
import
time
if
sal
.
is_processing_complete
():
raise
Exception
(
"Capture finished before expected"
)
time
.
sleep
(
1
)
sal
.
capture_stop
();
time
.
sleep
(
.
1
)
for
attempt
in
range
(
3
):
if
not
sal
.
is_processing_complete
():
print
(
"Waiting for capture to complete..."
)
time
.
sleep
(
1
)
continue
outfile
=
"measurement_
%
s.csv"
%
time
.
strftime
(
"
%
Y
%
m
%
d-
%
H
%
M
%
S"
)
outfile
=
os
.
path
.
join
(
"measurements"
,
outfile
)
if
os
.
path
.
isfile
(
outfile
):
os
.
unlink
(
outfile
)
sal
.
export_data2
(
os
.
path
.
abspath
(
outfile
))
print
(
"Measurements written to '
%
s'"
%
outfile
)
mdbfile
=
os
.
path
.
join
(
"measurements"
,
"measurements.txt"
)
mdbfile
=
open
(
mdbfile
,
"a"
)
mdbfile
.
write
(
"
%
s >
%
s
\n
"
%
(
' '
.
join
(
sys
.
argv
),
outfile
))
mdbfile
.
close
()
return
0
raise
Exception
(
"Capture didn't complete successfully"
)
if
__name__
==
"__main__"
:
sys
.
exit
(
main
(
sys
.
argv
))
test_common.py
View file @
82ad9eed
...
...
@@ -34,8 +34,10 @@ class DeviceUnderTestAeadUARTP(DeviceUnderTest):
self
.
ser
=
ser
def
prepare
(
self
):
time
.
sleep
(
0.1
)
exp_hello
=
b
"Hello, World!"
time
.
sleep
(
0.1
)
if
self
.
ser
.
in_waiting
<
13
:
time
.
sleep
(
2
)
hello
=
self
.
ser
.
read
(
self
.
ser
.
in_waiting
)
if
hello
[
-
13
:]
!=
exp_hello
:
raise
Exception
(
...
...
@@ -100,7 +102,7 @@ class UARTP:
fcs
=
(
0xff
-
fcs
)
&
0xff
self
.
uart_write
(
fcs
)
self
.
uart_write
(
UARTP
.
FIN
)
eprint
(
"sent frame '
%
s'"
%
buf
.
hex
())
#
eprint("sent frame '%s'" % buf.hex())
def
recv
(
self
):
tag_old
=
UARTP
.
FIN
...
...
@@ -131,7 +133,7 @@ class UARTP:
if
fcs
==
0xff
:
if
tag
==
UARTP
.
FIN
:
buf
=
bytes
(
buf
)
eprint
(
"rcvd frame '
%
s'"
%
buf
.
hex
())
#
eprint("rcvd frame '%s'" % buf.hex())
if
len
(
buf
)
>=
1
and
buf
[
0
]
==
0xde
:
sys
.
stderr
.
buffer
.
write
(
buf
[
1
:])
sys
.
stderr
.
flush
()
...
...
@@ -140,20 +142,20 @@ class UARTP:
def
run_nist_aead_test
(
dut
,
kat
):
dump_a
=
dut
.
dump_ram
()
dump_a
=
dut
.
ram_dump
()
for
i
,
m
,
ad
,
k
,
npub
,
c
in
kat
:
tool
=
SaleaeTimeMeasurements
()
tool
.
begin_measurement
()
try
:
for
i
,
m
,
ad
,
k
,
npub
,
c
in
kat
:
run_nist_aead_test_line
(
dut
,
i
,
m
,
ad
,
k
,
npub
,
c
)
finally
:
tool
.
end_measurement
()
if
dump_a
is
not
None
and
i
==
0
:
dump_b
=
dut
.
dump_ram
()
dump_b
=
dut
.
ram_dump
()
longest
=
compare_dumps
(
dump_a
,
dump_b
)
print
(
" longest chunk of untouched memory =
%
d"
%
longest
)
finally
:
tool
.
end_measurement
()
def
run_nist_aead_test_line
(
dut
,
i
,
m
,
ad
,
k
,
npub
,
c
):
...
...
@@ -174,7 +176,7 @@ def run_nist_aead_test_line(dut, i, m, ad, k, npub, c):
dut
.
send_var
(
ord
(
'p'
),
npub
)
dut
.
do_cmd
(
ord
(
'e'
))
output
=
dut
.
get
_var
(
ord
(
'C'
))
output
=
dut
.
obtain
_var
(
ord
(
'C'
))
print
(
" c =
%
s"
%
output
.
hex
())
if
c
!=
output
:
raise
Exception
(
"output of encryption is different from "
+
...
...
@@ -189,7 +191,7 @@ def run_nist_aead_test_line(dut, i, m, ad, k, npub, c):
dut
.
send_var
(
ord
(
'p'
),
npub
)
dut
.
do_cmd
(
ord
(
'd'
))
output
=
dut
.
get
_var
(
ord
(
'M'
))
output
=
dut
.
obtain
_var
(
ord
(
'M'
))
print
(
" m =
%
s"
%
output
.
hex
())
if
m
!=
output
:
raise
Exception
(
"output of encryption is different from "
+
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment