Skip to content

Commit dcddfe6

Browse files
committed
Add testcase for Ethereum signatures.
Signed-off-by: Steffen Jaeckel <[email protected]>
1 parent d551a63 commit dcddfe6

File tree

1 file changed

+37
-4
lines changed

1 file changed

+37
-4
lines changed

tests/ecc_test.c

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1515,6 +1515,40 @@ static int s_ecc_import_export(void) {
15151515
return CRYPT_OK;
15161516
}
15171517

1518+
static int s_ecc_test_ethereum(void)
1519+
{
1520+
#ifdef LTC_ECC_SECP256K1
1521+
int stat;
1522+
const ltc_ecc_curve* dp;
1523+
ecc_key key, reckey;
1524+
unsigned char buf[128];
1525+
unsigned long len;
1526+
unsigned char data16[16] = { 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1 };
1527+
1528+
DO(ecc_find_curve("SECP256K1", &dp));
1529+
1530+
DO(ecc_make_key_ex(&yarrow_prng, find_prng ("yarrow"), &key, dp));
1531+
1532+
/* test Ethereum signature */
1533+
len = sizeof(buf);
1534+
DO(ecc_sign_hash_eth27(data16, 16, buf, &len, &yarrow_prng, find_prng ("yarrow"), &key));
1535+
stat = 0;
1536+
DO(ecc_verify_hash_eth27(buf, len, data16, 16, &stat, &key));
1537+
if (stat != 1) return CRYPT_FAIL_TESTVECTOR;
1538+
1539+
DO(ecc_set_curve(dp, &reckey));
1540+
DO(ecc_recover_key(buf, len, data16, 16, -1, LTC_ECCSIG_ETH27, &reckey));
1541+
DO(ecc_key_cmp(PK_PUBLIC, &key, &reckey));
1542+
1543+
/* cleanup */
1544+
ecc_free(&reckey);
1545+
ecc_free(&key);
1546+
return CRYPT_OK;
1547+
#else
1548+
return CRYPT_NOP;
1549+
#endif
1550+
}
1551+
15181552
#ifdef LTC_ECC_SHAMIR
15191553
static int s_ecc_test_recovery(void)
15201554
{
@@ -1553,14 +1587,12 @@ static int s_ecc_test_recovery(void)
15531587
DO(ecc_set_key(eth_pubkey, sizeof(eth_pubkey), PK_PUBLIC, &pubkey));
15541588

15551589
DO(ecc_set_curve(dp, &reckey));
1556-
stat = ecc_recover_key(eth_sig, sizeof(eth_sig)-1, eth_hash, sizeof(eth_hash), 0, LTC_ECCSIG_RFC7518, &reckey);
1557-
if (stat != CRYPT_OK) return CRYPT_FAIL_TESTVECTOR;
1590+
DO(ecc_recover_key(eth_sig, sizeof(eth_sig)-1, eth_hash, sizeof(eth_hash), 0, LTC_ECCSIG_RFC7518, &reckey));
15581591
DO(ecc_key_cmp(PK_PUBLIC, &pubkey, &reckey));
15591592
ecc_free(&reckey);
15601593

15611594
DO(ecc_set_curve(dp, &reckey));
1562-
stat = ecc_recover_key(eth_sig, sizeof(eth_sig), eth_hash, sizeof(eth_hash), -1, LTC_ECCSIG_ETH27, &reckey);
1563-
if (stat != CRYPT_OK) return CRYPT_FAIL_TESTVECTOR;
1595+
DO(ecc_recover_key(eth_sig, sizeof(eth_sig), eth_hash, sizeof(eth_hash), -1, LTC_ECCSIG_ETH27, &reckey));
15641596
DO(ecc_key_cmp(PK_PUBLIC, &pubkey, &reckey));
15651597
ecc_free(&reckey);
15661598

@@ -1633,6 +1665,7 @@ int ecc_test(void)
16331665
DO(s_ecc_test_shamir());
16341666
DO(s_ecc_test_recovery());
16351667
#endif
1668+
DO(s_ecc_test_ethereum());
16361669
return CRYPT_OK;
16371670
}
16381671

0 commit comments

Comments
 (0)