Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
N
nettle
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Deploy
Releases
Container registry
Model registry
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Dmitry Baryshkov
nettle
Commits
cca6c377
Commit
cca6c377
authored
Apr 15, 2012
by
Niels Möller
Browse files
Options
Downloads
Patches
Plain Diff
Improved salsa20 tests.
parent
f3f395ea
Branches
Branches containing commit
Tags
Tags containing commit
No related merge requests found
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
ChangeLog
+5
-0
5 additions, 0 deletions
ChangeLog
testsuite/salsa20-test.c
+155
-0
155 additions, 0 deletions
testsuite/salsa20-test.c
with
160 additions
and
0 deletions
ChangeLog
+
5
−
0
View file @
cca6c377
2012-04-15 Niels Möller <nisse@lysator.liu.se>
* testsuite/salsa20-test.c (test_salsa20_stream): New function.
(test_main): Tests for encrypting more than one block at a time.
2012-04-14 Niels Möller <nisse@lysator.liu.se>
2012-04-14 Niels Möller <nisse@lysator.liu.se>
* examples/io.c (write_file): Use write_string.
* examples/io.c (write_file): Use write_string.
...
...
This diff is collapsed.
Click to expand it.
testsuite/salsa20-test.c
+
155
−
0
View file @
cca6c377
#include
"testutils.h"
#include
"testutils.h"
#include
"salsa20.h"
#include
"salsa20.h"
#include
"memxor.h"
static
int
memzero_p
(
const
uint8_t
*
p
,
size_t
n
)
{
size_t
i
;
for
(
i
=
0
;
i
<
n
;
i
++
)
if
(
p
[
i
])
return
0
;
return
1
;
}
/* The ecrypt testcases encrypt 512 zero bytes (8 blocks), then give
the xor of all blocks, and the data for block 0 (0-43), 3,4
(192-319), 7 (448-511) */
#define STREAM_LENGTH 512
static
void
test_salsa20_stream
(
unsigned
key_length
,
const
uint8_t
*
key
,
const
uint8_t
*
iv
,
const
uint8_t
*
ciphertext
,
const
uint8_t
*
xor_ref
)
{
struct
salsa20_ctx
ctx
;
uint8_t
data
[
STREAM_LENGTH
+
1
];
uint8_t
stream
[
STREAM_LENGTH
];
uint8_t
xor
[
SALSA20_BLOCK_SIZE
];
unsigned
j
;
salsa20_set_key
(
&
ctx
,
key_length
,
key
);
salsa20_set_iv
(
&
ctx
,
iv
);
memset
(
stream
,
0
,
STREAM_LENGTH
);
salsa20_crypt
(
&
ctx
,
STREAM_LENGTH
,
stream
,
stream
);
if
(
!
MEMEQ
(
64
,
stream
,
ciphertext
))
{
fprintf
(
stderr
,
"Error failed, offset 0:
\n
"
);
fprintf
(
stderr
,
"
\n
Output: "
);
print_hex
(
64
,
stream
);
fprintf
(
stderr
,
"
\n
Expected:"
);
print_hex
(
64
,
ciphertext
);
fprintf
(
stderr
,
"
\n
"
);
FAIL
();
}
if
(
!
MEMEQ
(
128
,
stream
+
192
,
ciphertext
+
64
))
{
fprintf
(
stderr
,
"Error failed, offset 192:
\n
"
);
fprintf
(
stderr
,
"
\n
Output: "
);
print_hex
(
128
,
stream
+
192
);
fprintf
(
stderr
,
"
\n
Expected:"
);
print_hex
(
64
,
ciphertext
+
64
);
fprintf
(
stderr
,
"
\n
"
);
FAIL
();
}
if
(
!
MEMEQ
(
64
,
stream
+
448
,
ciphertext
+
192
))
{
fprintf
(
stderr
,
"Error failed, offset 448:
\n
"
);
fprintf
(
stderr
,
"
\n
Output: "
);
print_hex
(
64
,
stream
+
448
);
fprintf
(
stderr
,
"
\n
Expected:"
);
print_hex
(
64
,
ciphertext
+
192
);
fprintf
(
stderr
,
"
\n
"
);
FAIL
();
}
memxor3
(
xor
,
stream
,
stream
+
SALSA20_BLOCK_SIZE
,
SALSA20_BLOCK_SIZE
);
for
(
j
=
2
*
SALSA20_BLOCK_SIZE
;
j
<
STREAM_LENGTH
;
j
+=
SALSA20_BLOCK_SIZE
)
memxor
(
xor
,
stream
+
j
,
SALSA20_BLOCK_SIZE
);
if
(
!
MEMEQ
(
SALSA20_BLOCK_SIZE
,
xor
,
xor_ref
))
{
fprintf
(
stderr
,
"Error failed, bad xor 448:
\n
"
);
fprintf
(
stderr
,
"
\n
Output: "
);
print_hex
(
SALSA20_BLOCK_SIZE
,
xor
);
fprintf
(
stderr
,
"
\n
Expected:"
);
print_hex
(
SALSA20_BLOCK_SIZE
,
xor_ref
);
fprintf
(
stderr
,
"
\n
"
);
FAIL
();
}
for
(
j
=
1
;
j
<=
STREAM_LENGTH
;
j
++
)
{
memset
(
data
,
0
,
STREAM_LENGTH
+
1
);
salsa20_set_iv
(
&
ctx
,
iv
);
salsa20_crypt
(
&
ctx
,
j
,
data
,
data
);
if
(
!
MEMEQ
(
j
,
data
,
stream
))
{
fprintf
(
stderr
,
"Encrypt failed for length %u:
\n
"
,
j
);
fprintf
(
stderr
,
"
\n
Output: "
);
print_hex
(
j
,
data
);
fprintf
(
stderr
,
"
\n
Expected:"
);
print_hex
(
j
,
stream
);
fprintf
(
stderr
,
"
\n
"
);
FAIL
();
}
if
(
!
memzero_p
(
data
+
j
,
STREAM_LENGTH
+
1
-
j
))
{
fprintf
(
stderr
,
"Encrypt failed for length, %u wrote too much:
\n
"
,
j
);
fprintf
(
stderr
,
"
\n
Output: "
);
print_hex
(
STREAM_LENGTH
+
1
-
j
,
data
+
j
);
fprintf
(
stderr
,
"
\n
"
);
FAIL
();
}
}
}
static
void
static
void
test_salsa20
(
unsigned
key_length
,
test_salsa20
(
unsigned
key_length
,
const
uint8_t
*
key
,
const
uint8_t
*
key
,
...
@@ -84,5 +192,52 @@ test_main(void)
...
@@ -84,5 +192,52 @@ test_main(void)
HL
(
"00000000 00000000"
),
HL
(
"00000000 00000000"
),
H
(
"F5FAD53F 79F9DF58"
));
H
(
"F5FAD53F 79F9DF58"
));
test_salsa20_stream
(
HL
(
"80000000000000000000000000000000"
),
H
(
"00000000 00000000"
),
H
(
"4DFA5E481DA23EA09A31022050859936"
"DA52FCEE218005164F267CB65F5CFD7F"
"2B4F97E0FF16924A52DF269515110A07"
"F9E460BC65EF95DA58F740B7D1DBB0AA"
"DA9C1581F429E0A00F7D67E23B730676"
"783B262E8EB43A25F55FB90B3E753AEF"
"8C6713EC66C51881111593CCB3E8CB8F"
"8DE124080501EEEB389C4BCB6977CF95"
"7D5789631EB4554400E1E025935DFA7B"
"3E9039D61BDC58A8697D36815BF1985C"
"EFDF7AE112E5BB81E37ECF0616CE7147"
"FC08A93A367E08631F23C03B00A8DA2F"
"B375703739DACED4DD4059FD71C3C47F"
"C2F9939670FAD4A46066ADCC6A564578"
"3308B90FFB72BE04A6B147CBE38CC0C3"
"B9267C296A92A7C69873F9F263BE9703"
),
H
(
"F7A274D268316790A67EC058F45C0F2A"
"067A99FCDE6236C0CEF8E056349FE54C"
"5F13AC74D2539570FD34FEAB06C57205"
"3949B59585742181A5A760223AFA22D4"
));
test_salsa20_stream
(
HL
(
"48494A4B4C4D4E4F5051525354555657"
"58595A5B5C5D5E5F6061626364656667"
),
H
(
"0000000000000000"
),
H
(
"53AD3698A011F779AD71030F3EFBEBA0"
"A7EE3C55789681B1591EF33A7BE521ED"
"68FC36E58F53FFD6E1369B00E390E973"
"F656ACB097E0D603BE59A0B8F7975B98"
"A04698274C6AC6EC03F66ED3F94C08B7"
"9FFDBF2A1610E6F5814905E73AD6D0D2"
"8164EEB8450D8ED0BB4B644761B43512"
"52DD5DDF00C31E3DABA0BC17691CCFDC"
"B826C7F071E796D34E3BFFB3C96E76A1"
"209388392806947C7F19B86D379FA3AE"
"DFCD19EBF49803DACC6E577E5B97B0F6"
"D2036B6624D8196C96FCF02C865D30C1"
"B505D41E2C207FA1C0A0E93413DDCFFC"
"9BECA8030AFFAC2466E56482DA0EF428"
"E63880B5021D3051F18679505A2B9D4F"
"9B2C5A2D271D276DE3F51DBEBA934436"
),
H
(
"7849651A820B1CDFE36D5D6632716534"
"E0635EDEFD538122D80870B60FB055DB"
"637C7CA2B78B116F83AFF46E40F8F71D"
"4CD6D2E1B750D5E011D1DF2E80F7210A"
));
SUCCESS
();
SUCCESS
();
}
}
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment