test(crypto): Add unit tests for ecdsa_sig_from_der().

andrewkozlik/fido2-credmgmt
Andrew Kozlik 3 years ago committed by Andrew Kozlik
parent 06ce14096c
commit b90ce7f2fc

@ -5856,154 +5856,81 @@ START_TEST(test_address_decode) {
END_TEST END_TEST
START_TEST(test_ecdsa_der) { START_TEST(test_ecdsa_der) {
uint8_t sig[64], der[72]; static const struct {
int res; const char *r;
const char *s;
memcpy( const char *der;
sig, } vectors[] = {
fromhex( {
"9a0b7be0d4ed3146ee262b42202841834698bb3ee39c24e7437df208b8b70771"), "9a0b7be0d4ed3146ee262b42202841834698bb3ee39c24e7437df208b8b70771",
32); "2b79ab1e7736219387dffe8d615bbdba87e11477104b867ef47afed1a5ede781",
memcpy( "30450221009a0b7be0d4ed3146ee262b42202841834698bb3ee39c24e7437df208b8"
sig + 32, "b7077102202b79ab1e7736219387dffe8d615bbdba87e11477104b867ef47afed1a5"
fromhex( "ede781",
"2b79ab1e7736219387dffe8d615bbdba87e11477104b867ef47afed1a5ede781"), },
32); {
res = ecdsa_sig_to_der(sig, der); "6666666666666666666666666666666666666666666666666666666666666666",
ck_assert_int_eq(res, 71); "7777777777777777777777777777777777777777777777777777777777777777",
ck_assert_mem_eq(der, "30440220666666666666666666666666666666666666666666666666666666666666"
fromhex("30450221009a0b7be0d4ed3146ee262b42202841834698bb3ee" "66660220777777777777777777777777777777777777777777777777777777777777"
"39c24e7437df208b8b7077102202b79ab1e7736219387dffe8d" "7777",
"615bbdba87e11477104b867ef47afed1a5ede781"), },
71); {
"6666666666666666666666666666666666666666666666666666666666666666",
memcpy( "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
sig, "30450220666666666666666666666666666666666666666666666666666666666666"
fromhex( "6666022100eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"
"6666666666666666666666666666666666666666666666666666666666666666"), "eeeeee",
32); },
memcpy( {
sig + 32, "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
fromhex( "7777777777777777777777777777777777777777777777777777777777777777",
"7777777777777777777777777777777777777777777777777777777777777777"), "3045022100eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"
32); "eeeeee02207777777777777777777777777777777777777777777777777777777777"
res = ecdsa_sig_to_der(sig, der); "777777",
ck_assert_int_eq(res, 70); },
ck_assert_mem_eq(der, {
fromhex("304402206666666666666666666666666666666666666666666" "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
"666666666666666666666022077777777777777777777777777" "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
"77777777777777777777777777777777777777"), "3046022100eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"
70); "eeeeee022100ffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
"ffffffff",
memcpy( },
sig, {
fromhex( "0000000000000000000000000000000000000000000000000000000000000066",
"6666666666666666666666666666666666666666666666666666666666666666"), "0000000000000000000000000000000000000000000000000000000000000077",
32); "3006020166020177",
memcpy( },
sig + 32, {
fromhex( "0000000000000000000000000000000000000000000000000000000000000066",
"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"), "00000000000000000000000000000000000000000000000000000000000000ee",
32); "3007020166020200ee",
res = ecdsa_sig_to_der(sig, der); },
ck_assert_int_eq(res, 71); {
ck_assert_mem_eq(der, "00000000000000000000000000000000000000000000000000000000000000ee",
fromhex("304502206666666666666666666666666666666666666666666" "0000000000000000000000000000000000000000000000000000000000000077",
"666666666666666666666022100eeeeeeeeeeeeeeeeeeeeeeee" "3007020200ee020177",
"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"), },
71); {
"00000000000000000000000000000000000000000000000000000000000000ee",
memcpy( "00000000000000000000000000000000000000000000000000000000000000ff",
sig, "3008020200ee020200ff",
fromhex( },
"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"), };
32);
memcpy(
sig + 32,
fromhex(
"7777777777777777777777777777777777777777777777777777777777777777"),
32);
res = ecdsa_sig_to_der(sig, der);
ck_assert_int_eq(res, 71);
ck_assert_mem_eq(der,
fromhex("3045022100eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"
"eeeeeeeeeeeeeeeeeeeeeee0220777777777777777777777777"
"7777777777777777777777777777777777777777"),
71);
memcpy(
sig,
fromhex(
"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"),
32);
memcpy(
sig + 32,
fromhex(
"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"),
32);
res = ecdsa_sig_to_der(sig, der);
ck_assert_int_eq(res, 72);
ck_assert_mem_eq(der,
fromhex("3046022100eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"
"eeeeeeeeeeeeeeeeeeeeeee022100ffffffffffffffffffffff"
"ffffffffffffffffffffffffffffffffffffffffff"),
72);
memcpy(
sig,
fromhex(
"0000000000000000000000000000000000000000000000000000000000000066"),
32);
memcpy(
sig + 32,
fromhex(
"0000000000000000000000000000000000000000000000000000000000000077"),
32);
res = ecdsa_sig_to_der(sig, der);
ck_assert_int_eq(res, 8);
ck_assert_mem_eq(der, fromhex("3006020166020177"), 8);
memcpy(
sig,
fromhex(
"0000000000000000000000000000000000000000000000000000000000000066"),
32);
memcpy(
sig + 32,
fromhex(
"00000000000000000000000000000000000000000000000000000000000000ee"),
32);
res = ecdsa_sig_to_der(sig, der);
ck_assert_int_eq(res, 9);
ck_assert_mem_eq(der, fromhex("3007020166020200ee"), 9);
memcpy(
sig,
fromhex(
"00000000000000000000000000000000000000000000000000000000000000ee"),
32);
memcpy(
sig + 32,
fromhex(
"0000000000000000000000000000000000000000000000000000000000000077"),
32);
res = ecdsa_sig_to_der(sig, der);
ck_assert_int_eq(res, 9);
ck_assert_mem_eq(der, fromhex("3007020200ee020177"), 9);
memcpy( uint8_t sig[64];
sig, uint8_t der[72];
fromhex( uint8_t out[72];
"00000000000000000000000000000000000000000000000000000000000000ee"), for (size_t i = 0; i < (sizeof(vectors) / sizeof(*vectors)); ++i) {
32); size_t der_len = strlen(vectors[i].der) / 2;
memcpy( memcpy(der, fromhex(vectors[i].der), der_len);
sig + 32, memcpy(sig, fromhex(vectors[i].r), 32);
fromhex( memcpy(sig + 32, fromhex(vectors[i].s), 32);
"00000000000000000000000000000000000000000000000000000000000000ff"), ck_assert_int_eq(ecdsa_sig_to_der(sig, out), der_len);
32); ck_assert_mem_eq(out, der, der_len);
res = ecdsa_sig_to_der(sig, der); ck_assert_int_eq(ecdsa_sig_from_der(der, der_len, out), 0);
ck_assert_int_eq(res, 10); ck_assert_mem_eq(out, sig, 64);
ck_assert_mem_eq(der, fromhex("3008020200ee020200ff"), 10); }
} }
END_TEST END_TEST

Loading…
Cancel
Save