mirror of
https://github.com/trezor/trezor-firmware.git
synced 2025-02-04 11:51:50 +00:00
test(crypto): Add unit tests for ecdsa_sig_from_der().
This commit is contained in:
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;
|
||||||
|
const char *der;
|
||||||
|
} vectors[] = {
|
||||||
|
{
|
||||||
|
"9a0b7be0d4ed3146ee262b42202841834698bb3ee39c24e7437df208b8b70771",
|
||||||
|
"2b79ab1e7736219387dffe8d615bbdba87e11477104b867ef47afed1a5ede781",
|
||||||
|
"30450221009a0b7be0d4ed3146ee262b42202841834698bb3ee39c24e7437df208b8"
|
||||||
|
"b7077102202b79ab1e7736219387dffe8d615bbdba87e11477104b867ef47afed1a5"
|
||||||
|
"ede781",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"6666666666666666666666666666666666666666666666666666666666666666",
|
||||||
|
"7777777777777777777777777777777777777777777777777777777777777777",
|
||||||
|
"30440220666666666666666666666666666666666666666666666666666666666666"
|
||||||
|
"66660220777777777777777777777777777777777777777777777777777777777777"
|
||||||
|
"7777",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"6666666666666666666666666666666666666666666666666666666666666666",
|
||||||
|
"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
|
||||||
|
"30450220666666666666666666666666666666666666666666666666666666666666"
|
||||||
|
"6666022100eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"
|
||||||
|
"eeeeee",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
|
||||||
|
"7777777777777777777777777777777777777777777777777777777777777777",
|
||||||
|
"3045022100eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"
|
||||||
|
"eeeeee02207777777777777777777777777777777777777777777777777777777777"
|
||||||
|
"777777",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
|
||||||
|
"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
|
||||||
|
"3046022100eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"
|
||||||
|
"eeeeee022100ffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
|
||||||
|
"ffffffff",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"0000000000000000000000000000000000000000000000000000000000000066",
|
||||||
|
"0000000000000000000000000000000000000000000000000000000000000077",
|
||||||
|
"3006020166020177",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"0000000000000000000000000000000000000000000000000000000000000066",
|
||||||
|
"00000000000000000000000000000000000000000000000000000000000000ee",
|
||||||
|
"3007020166020200ee",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"00000000000000000000000000000000000000000000000000000000000000ee",
|
||||||
|
"0000000000000000000000000000000000000000000000000000000000000077",
|
||||||
|
"3007020200ee020177",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"00000000000000000000000000000000000000000000000000000000000000ee",
|
||||||
|
"00000000000000000000000000000000000000000000000000000000000000ff",
|
||||||
|
"3008020200ee020200ff",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
memcpy(
|
uint8_t sig[64];
|
||||||
sig,
|
uint8_t der[72];
|
||||||
fromhex(
|
uint8_t out[72];
|
||||||
"9a0b7be0d4ed3146ee262b42202841834698bb3ee39c24e7437df208b8b70771"),
|
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);
|
||||||
"2b79ab1e7736219387dffe8d615bbdba87e11477104b867ef47afed1a5ede781"),
|
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, 71);
|
ck_assert_mem_eq(out, sig, 64);
|
||||||
ck_assert_mem_eq(der,
|
}
|
||||||
fromhex("30450221009a0b7be0d4ed3146ee262b42202841834698bb3ee"
|
|
||||||
"39c24e7437df208b8b7077102202b79ab1e7736219387dffe8d"
|
|
||||||
"615bbdba87e11477104b867ef47afed1a5ede781"),
|
|
||||||
71);
|
|
||||||
|
|
||||||
memcpy(
|
|
||||||
sig,
|
|
||||||
fromhex(
|
|
||||||
"6666666666666666666666666666666666666666666666666666666666666666"),
|
|
||||||
32);
|
|
||||||
memcpy(
|
|
||||||
sig + 32,
|
|
||||||
fromhex(
|
|
||||||
"7777777777777777777777777777777777777777777777777777777777777777"),
|
|
||||||
32);
|
|
||||||
res = ecdsa_sig_to_der(sig, der);
|
|
||||||
ck_assert_int_eq(res, 70);
|
|
||||||
ck_assert_mem_eq(der,
|
|
||||||
fromhex("304402206666666666666666666666666666666666666666666"
|
|
||||||
"666666666666666666666022077777777777777777777777777"
|
|
||||||
"77777777777777777777777777777777777777"),
|
|
||||||
70);
|
|
||||||
|
|
||||||
memcpy(
|
|
||||||
sig,
|
|
||||||
fromhex(
|
|
||||||
"6666666666666666666666666666666666666666666666666666666666666666"),
|
|
||||||
32);
|
|
||||||
memcpy(
|
|
||||||
sig + 32,
|
|
||||||
fromhex(
|
|
||||||
"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"),
|
|
||||||
32);
|
|
||||||
res = ecdsa_sig_to_der(sig, der);
|
|
||||||
ck_assert_int_eq(res, 71);
|
|
||||||
ck_assert_mem_eq(der,
|
|
||||||
fromhex("304502206666666666666666666666666666666666666666666"
|
|
||||||
"666666666666666666666022100eeeeeeeeeeeeeeeeeeeeeeee"
|
|
||||||
"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"),
|
|
||||||
71);
|
|
||||||
|
|
||||||
memcpy(
|
|
||||||
sig,
|
|
||||||
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(
|
|
||||||
sig,
|
|
||||||
fromhex(
|
|
||||||
"00000000000000000000000000000000000000000000000000000000000000ee"),
|
|
||||||
32);
|
|
||||||
memcpy(
|
|
||||||
sig + 32,
|
|
||||||
fromhex(
|
|
||||||
"00000000000000000000000000000000000000000000000000000000000000ff"),
|
|
||||||
32);
|
|
||||||
res = ecdsa_sig_to_der(sig, der);
|
|
||||||
ck_assert_int_eq(res, 10);
|
|
||||||
ck_assert_mem_eq(der, fromhex("3008020200ee020200ff"), 10);
|
|
||||||
}
|
}
|
||||||
END_TEST
|
END_TEST
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user