1
1
libssh/tests/unittests/torture_moduli.c
Aris Adamantiadis 9407065879 tests: Added moduli file parsing tests
Signed-off-by: Aris Adamantiadis <aris@0xbadc0de.be>
Reviewed-by: Jakub Jelen <jjelen@redhat.com>
Reviewed-by: Andreas Schneider <asn@cryptomilk.org>
2019-01-24 12:56:09 +01:00

115 строки
4.9 KiB
C

#include "config.h"
#define LIBSSH_STATIC
#include "torture.h"
#include "dh-gex.c"
static const char moduli_content[] =
"# Time Type Tests Tries Size Generator Modulus\n"
"20120821044040 2 6 100 1023 5 D9277DAA27DB131C03B108D41A76B4DA8ACEECCCAE73"
"D2E48CEDAAA70B09EF9F04FB020DCF36C51B8E485B26FABE0337E24232BE4F4E6935483102"
"44937433FB1A5758195DC73B84ADEF8237472C46747D79DC0A2CF8A57CE8DBD8F466A20F85"
"51E7B1B824B2E4987A8816D9BC0741C2798F3EBAD3ADEBCC78FCE6A770E2EC9F\n"
"20120821044502 2 6 100 1535 5 D1391174233D315398FE2830AC6B2B66BCCD01B0A634"
"899F339B7879F1DB85712E9DC4E4B1C6C8355570C1D2DCB53493DF18175A9C53D1128B592B"
"4C72D97136F5542FEB981CBFE8012FDD30361F288A42BD5EBB08BAB0A5640E1AC48763B2AB"
"D1945FEE36B2D55E1D50A1C86CED9DD141C4E7BE2D32D9B562A0F8E2E927020E91F58B57EB"
"9ACDDA106A59302D7E92AD5F6E851A45FA1CFE86029A0F727F65A8F475F33572E2FDAB6073"
"F0C21B8B54C3823DB2EF068927E5D747498F96361507\n"
"20120821050636 2 6 100 2047 2 DD2047CBDBB6F8E919BC63DE885B34D0FD6E3DB2887D"
"8B46FE249886ACED6B46DFCD5553168185FD376122171CD8927E60120FA8D01F01D03E5828"
"1FEA9A1ABE97631C828E41815F34FDCDF787419FE13A3137649AA93D2584230DF5F24B5C00"
"C88B7D7DE4367693428C730376F218A53E853B0851BAB7C53C15DA7839CBE1285DB63F6FA4"
"5C1BB59FE1C5BB918F0F8459D7EF60ACFF5C0FA0F3FCAD1C5F4CE4416D4F4B36B05CDCEBE4"
"FB879E95847EFBC6449CD190248843BC7EDB145FBFC4EDBB1A3C959298F08F3BA2CFBE231B"
"BE204BE6F906209D28BD4820AB3E7BE96C26AE8A809ADD8D1A5A0B008E9570FA4C4697E116"
"B8119892C604293683DF582B\n"
"20120821053137 2 6 100 3071 5 DFAA35D35531E0F524F0099877A482D2AC8D589F3743"
"94A262A8E81A8A4FB2F65FADBAB395E05D147B29D486DFAA41F41597A256DA82A8B6F76401"
"AED53D0253F956CEC610D417E42E3B287F7938FC24D8821B40BFA218A956EB7401BED6C96C"
"68C7FD64F8170A8A76B953DD2F05420118F6B144D8FE48060A2BCB85056B478EDEF96DBC70"
"427053ECD2958C074169E9550DD877779A3CF17C5AC850598C7586BEEA9DCFE9DD2A5FB62D"
"F5F33EA7BC00CDA31B9D2DD721F979EA85B6E63F0C4E30BDDCD3A335522F9004C4ED50B15D"
"C537F55324DD4FA119FB3F101467C6D7E1699DE4B3E3C478A8679B8EB3FA5C9B826B44530F"
"D3BE9AD3063B240B0C853EBDDBD68DD940332D98F148D5D9E1DC977D60A0D23D0CA1198637"
"FEAE4E7FAAC173AF2B84313A666CFB4EE6972811921D0AD867CE57F3BBC8D6CB057E3B6675"
"7BB46C9F72662624D44E14528327E3A7100E81A12C43C4E236118318CD90C8AA185BBB0C76"
"4826DAEAEE8DD245C5B451B4944E6122CC522D1C335C2EEF942284EA9F\n";
const char modulus_2048[] =
"DD2047CBDBB6F8E919BC63DE885B34D0FD6E3DB2887D"
"8B46FE249886ACED6B46DFCD5553168185FD376122171CD8927E60120FA8D01F01D03E5828"
"1FEA9A1ABE97631C828E41815F34FDCDF787419FE13A3137649AA93D2584230DF5F24B5C00"
"C88B7D7DE4367693428C730376F218A53E853B0851BAB7C53C15DA7839CBE1285DB63F6FA4"
"5C1BB59FE1C5BB918F0F8459D7EF60ACFF5C0FA0F3FCAD1C5F4CE4416D4F4B36B05CDCEBE4"
"FB879E95847EFBC6449CD190248843BC7EDB145FBFC4EDBB1A3C959298F08F3BA2CFBE231B"
"BE204BE6F906209D28BD4820AB3E7BE96C26AE8A809ADD8D1A5A0B008E9570FA4C4697E116"
"B8119892C604293683DF582B";
/* test if the best dhgroup size is chosen out of lists */
static void torture_dhgroup_better_size(UNUSED_PARAM(void **state))
{
/* series of group sizes, as they are read in the file, along with expected
* value at every moment. */
size_t groups[][5][2] = {
{{1024,1024}, {2048, 1024}, {1500, 1024}, {1023,1024}, {512, 1024}},
{{512, 512}, {1023, 1023}, {1025, 1025}, {1500, 1025}, {2000, 1025}},
{{512, 512}, {2049, 512}, {768, 768}, {4096, 768}, {1024, 1024}}
};
size_t i, j, best;
for (i = 0; i < 3; ++i) {
best = 0;
for (j = 0; j < 5; ++j) {
bool ok;
ok = dhgroup_better_size(512, 1024, 2048, best, groups[i][j][0]);
if (ok) {
best = groups[i][j][0];
assert_int_equal(best, groups[i][j][1]);
}
assert_int_equal(best, groups[i][j][1]);
}
}
}
static void torture_retrieve_dhgroup_file(UNUSED_PARAM(void **state))
{
FILE *moduli = tmpfile();
size_t size = 0;
char *generator = NULL, *modulus = NULL;
int rc;
fwrite(moduli_content, 1, sizeof(moduli_content), moduli);
rewind(moduli);
rc = ssh_retrieve_dhgroup_file(moduli,
1024,
2048,
4096,
&size,
&generator,
&modulus);
assert_int_equal(rc, SSH_OK);
assert_int_equal(size, 2048);
assert_string_equal(modulus, modulus_2048);
SAFE_FREE(generator);
SAFE_FREE(modulus);
fclose(moduli);
}
int torture_run_tests(void) {
int rc;
struct CMUnitTest tests[] = {
cmocka_unit_test(torture_dhgroup_better_size),
cmocka_unit_test(torture_retrieve_dhgroup_file)
};
ssh_init();
torture_filter_tests(tests);
rc = cmocka_run_group_tests(tests, NULL, NULL);
ssh_finalize();
return rc;
}