mirror of
https://github.com/trezor/trezor-firmware.git
synced 2025-01-13 17:00:59 +00:00
bignum: introduce is_even/is_odd
This commit is contained in:
parent
dd25a2ee5a
commit
339d2f44a9
9
bignum.h
9
bignum.h
@ -1,6 +1,7 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (c) 2013-2014 Tomas Dzetkulic
|
* Copyright (c) 2013-2014 Tomas Dzetkulic
|
||||||
* Copyright (c) 2013-2014 Pavol Rusnak
|
* Copyright (c) 2013-2014 Pavol Rusnak
|
||||||
|
* Copyright (c) 2016 Alex Beregszaszi
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining
|
* Permission is hereby granted, free of charge, to any person obtaining
|
||||||
* a copy of this software and associated documentation files (the "Software"),
|
* a copy of this software and associated documentation files (the "Software"),
|
||||||
@ -59,6 +60,14 @@ void bn_zero(bignum256 *a);
|
|||||||
|
|
||||||
int bn_is_zero(const bignum256 *a);
|
int bn_is_zero(const bignum256 *a);
|
||||||
|
|
||||||
|
static inline int bn_is_even(const bignum256 *a) {
|
||||||
|
return (a->val[0] & 1) == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline int bn_is_odd(const bignum256 *a) {
|
||||||
|
return (a->val[0] & 1) == 1;
|
||||||
|
}
|
||||||
|
|
||||||
int bn_is_less(const bignum256 *a, const bignum256 *b);
|
int bn_is_less(const bignum256 *a, const bignum256 *b);
|
||||||
|
|
||||||
int bn_is_equal(const bignum256 *a, const bignum256 *b);
|
int bn_is_equal(const bignum256 *a, const bignum256 *b);
|
||||||
|
32
tests.c
32
tests.c
@ -165,6 +165,36 @@ START_TEST(test_bignum_copy)
|
|||||||
}
|
}
|
||||||
END_TEST
|
END_TEST
|
||||||
|
|
||||||
|
START_TEST(test_bignum_is_even)
|
||||||
|
{
|
||||||
|
bignum256 a;
|
||||||
|
|
||||||
|
bn_read_be(fromhex("c55ece858b0ddd5263f96810fe14437cd3b5e1fbd7c6a2ec1e031f05e86d8bd5"), &a);
|
||||||
|
ck_assert_int_eq(bn_is_even(&a), 0);
|
||||||
|
|
||||||
|
bn_read_be(fromhex("c55ece858b0ddd5263f96810fe14437cd3b5e1fbd7c6a2ec1e031f05e86d8bd2"), &a);
|
||||||
|
ck_assert_int_eq(bn_is_even(&a), 1);
|
||||||
|
|
||||||
|
bn_read_be(fromhex("c55ece858b0ddd5263f96810fe14437cd3b5e1fbd7c6a2ec1e031f05e86d8bd0"), &a);
|
||||||
|
ck_assert_int_eq(bn_is_even(&a), 1);
|
||||||
|
}
|
||||||
|
END_TEST
|
||||||
|
|
||||||
|
START_TEST(test_bignum_is_odd)
|
||||||
|
{
|
||||||
|
bignum256 a;
|
||||||
|
|
||||||
|
bn_read_be(fromhex("c55ece858b0ddd5263f96810fe14437cd3b5e1fbd7c6a2ec1e031f05e86d8bd5"), &a);
|
||||||
|
ck_assert_int_eq(bn_is_odd(&a), 1);
|
||||||
|
|
||||||
|
bn_read_be(fromhex("c55ece858b0ddd5263f96810fe14437cd3b5e1fbd7c6a2ec1e031f05e86d8bd2"), &a);
|
||||||
|
ck_assert_int_eq(bn_is_odd(&a), 0);
|
||||||
|
|
||||||
|
bn_read_be(fromhex("c55ece858b0ddd5263f96810fe14437cd3b5e1fbd7c6a2ec1e031f05e86d8bd0"), &a);
|
||||||
|
ck_assert_int_eq(bn_is_odd(&a), 0);
|
||||||
|
}
|
||||||
|
END_TEST
|
||||||
|
|
||||||
// from https://github.com/bitcoin/bitcoin/blob/master/src/test/data/base58_keys_valid.json
|
// from https://github.com/bitcoin/bitcoin/blob/master/src/test/data/base58_keys_valid.json
|
||||||
START_TEST(test_base58)
|
START_TEST(test_base58)
|
||||||
{
|
{
|
||||||
@ -2416,6 +2446,8 @@ Suite *test_suite(void)
|
|||||||
tcase_add_test(tc, test_bignum_read_le);
|
tcase_add_test(tc, test_bignum_read_le);
|
||||||
tcase_add_test(tc, test_bignum_write_le);
|
tcase_add_test(tc, test_bignum_write_le);
|
||||||
tcase_add_test(tc, test_bignum_copy);
|
tcase_add_test(tc, test_bignum_copy);
|
||||||
|
tcase_add_test(tc, test_bignum_is_even);
|
||||||
|
tcase_add_test(tc, test_bignum_is_odd);
|
||||||
suite_add_tcase(s, tc);
|
suite_add_tcase(s, tc);
|
||||||
|
|
||||||
tc = tcase_create("base58");
|
tc = tcase_create("base58");
|
||||||
|
Loading…
Reference in New Issue
Block a user