[Cryptech-Commits] [sw/libhal] 12/12: Fencepost error in hal_ecdas_key_from_ecpoint().
git at cryptech.is
git at cryptech.is
Mon Sep 14 21:43:29 UTC 2015
This is an automated email from the git hooks/post-receive script.
sra at hactrn.net pushed a commit to branch ecdsa
in repository sw/libhal.
commit a16bdf7bd57e2a3c68e7f14acad32ce3740600a8
Author: Rob Austein <sra at hactrn.net>
Date: Mon Sep 14 17:10:07 2015 -0400
Fencepost error in hal_ecdas_key_from_ecpoint().
---
ecdsa.c | 2 +-
tests/test-ecdsa.c | 17 ++++++++++++++++-
2 files changed, 17 insertions(+), 2 deletions(-)
diff --git a/ecdsa.c b/ecdsa.c
index 264f2c5..bf105b4 100644
--- a/ecdsa.c
+++ b/ecdsa.c
@@ -998,7 +998,7 @@ hal_error_t hal_ecdsa_key_from_ecpoint(hal_ecdsa_key_t **key_,
if (vlen < 3 || (vlen & 1) == 0 || *d++ != 0x04)
lose(HAL_ERROR_ASN1_PARSE_FAILED);
- vlen = vlen/2 - 1;
+ vlen /= 2;
fp_read_unsigned_bin(key->Q->x, unconst_uint8_t(d), vlen);
d += vlen;
diff --git a/tests/test-ecdsa.c b/tests/test-ecdsa.c
index 8bccdfc..558120b 100644
--- a/tests/test-ecdsa.c
+++ b/tests/test-ecdsa.c
@@ -144,7 +144,7 @@ static int test_against_static_vectors(const ecdsa_tc_t * const tc)
return printf("hal_ecdsa_key_from_der() failed: %s\n", hal_error_string(err)), 0;
if (memcmp(key1, key2, hal_ecdsa_key_t_size) != 0)
- return printf("Key mismatch after read/write cycle\n"), 0;
+ return printf("Private key mismatch after read/write cycle\n"), 0;
set_next_random(tc->k, tc->k_len);
@@ -180,6 +180,21 @@ static int test_against_static_vectors(const ecdsa_tc_t * const tc)
if ((err = hal_ecdsa_verify(key2, tc->H, tc->H_len, sig, sig_len, HAL_ECDSA_SIGNATURE_FORMAT_ASN1)) != HAL_OK)
return printf("hal_ecdsa_verify(public) failed: %s\n", hal_error_string(err)), 0;
+ uint8_t point[hal_ecdsa_key_to_ecpoint_len(key1)];
+ size_t point_len;
+
+ if ((err = hal_ecdsa_key_to_ecpoint(key1, point, &point_len, sizeof(point))) != HAL_OK)
+ return printf("hal_ecdsa_key_to_point() failed: %s\n", hal_error_string(err)), 0;
+
+ hal_ecdsa_key_clear(key1);
+ key1 = NULL;
+
+ if ((err = hal_ecdsa_key_from_ecpoint(&key1, keybuf1, sizeof(keybuf1), point, point_len, tc->curve)) != HAL_OK)
+ return printf("hal_ecdsa_key_from_point() failed: %s\n", hal_error_string(err)), 0;
+
+ if (memcmp(key1, key2, hal_ecdsa_key_t_size) != 0)
+ return printf("Public key mismatch after read/write cycle\n"), 0;
+
return 1;
}
More information about the Commits
mailing list