This requires Tinycrypt 0.2.7.

Signed-off-by: Szymon Janc <szymon.janc@codecoup.pl>
diff --git a/boot/bootutil/src/image_ec256.c b/boot/bootutil/src/image_ec256.c
index e0e4f73..3c6fd7d 100644
--- a/boot/bootutil/src/image_ec256.c
+++ b/boot/bootutil/src/image_ec256.c
@@ -42,7 +42,7 @@
  * Parse the public key used for signing.
  */
 static int
-tinycrypt_import_key(EccPoint *pubkey, uint8_t *cp, uint8_t *end)
+tinycrypt_import_key(uint8_t *pubkey, uint8_t *cp, uint8_t *end)
 {
     size_t len;
     mbedtls_asn1_buf alg;
@@ -79,8 +79,8 @@
         return -9;
     }
 
-    ecc_bytes2native(pubkey->x, cp + 1);
-    ecc_bytes2native(pubkey->y, cp + 1 + NUM_ECC_BYTES);
+    /* TODO avoid this copy? */
+    memcpy(pubkey, cp + 1, 2 * NUM_ECC_BYTES);
 
     return 0;
 }
@@ -90,22 +90,21 @@
  * Verify the tag, and that the length is 32 bytes.
  */
 static int
-tinycrypt_read_bigint(uint32_t i[NUM_ECC_DIGITS], uint8_t **cp, uint8_t *end)
+tinycrypt_read_bigint(uint8_t i[NUM_ECC_BYTES], uint8_t **cp, uint8_t *end)
 {
     size_t len;
-    uint8_t bigint[NUM_ECC_BYTES];
 
     if (mbedtls_asn1_get_tag(cp, end, &len, MBEDTLS_ASN1_INTEGER)) {
         return -3;
     }
+
     if (len > NUM_ECC_BYTES) {
-        memcpy(bigint, *cp + len - NUM_ECC_BYTES, NUM_ECC_BYTES);
+        memcpy(i, *cp + len - NUM_ECC_BYTES, NUM_ECC_BYTES);
     } else {
-        memset(bigint, 0, NUM_ECC_BYTES - len);
-        memcpy(bigint + NUM_ECC_BYTES - len, *cp, len);
+        memset(i + NUM_ECC_BYTES, 0, NUM_ECC_BYTES - len);
+        memcpy(i + NUM_ECC_BYTES - len, *cp, len);
     }
     *cp += len;
-    ecc_bytes2native(i, bigint);
     return 0;
 }
 
@@ -113,8 +112,7 @@
  * Read in signature. Signature has r and s encoded as integers.
  */
 static int
-tinycrypt_decode_sig(uint32_t r[NUM_ECC_DIGITS], uint32_t s[NUM_ECC_DIGITS],
-                     uint8_t *cp, uint8_t *end)
+tinycrypt_decode_sig(uint8_t signature[NUM_ECC_BYTES * 2], uint8_t *cp, uint8_t *end)
 {
     int rc;
     size_t len;
@@ -127,11 +125,12 @@
     if (cp + len > end) {
         return -2;
     }
-    rc = tinycrypt_read_bigint(r, &cp, end);
+
+    rc = tinycrypt_read_bigint(signature, &cp, end);
     if (rc) {
         return -3;
     }
-    rc = tinycrypt_read_bigint(s, &cp, end);
+    rc = tinycrypt_read_bigint(signature + NUM_ECC_BYTES, &cp, end);
     if (rc) {
         return -4;
     }
@@ -145,20 +144,19 @@
     int rc;
     uint8_t *cp;
     uint8_t *end;
-    EccPoint ctx;
-    uint32_t r[NUM_ECC_DIGITS];
-    uint32_t s[NUM_ECC_DIGITS];
-    uint32_t hash_t[NUM_ECC_DIGITS];
+
+    uint8_t public_key[2 * NUM_ECC_BYTES];
+    uint8_t signature[2 * NUM_ECC_BYTES];
 
     cp = (uint8_t *)bootutil_keys[key_id].key;
     end = cp + *bootutil_keys[key_id].len;
 
-    rc = tinycrypt_import_key(&ctx, cp, end);
+    rc = tinycrypt_import_key(public_key, cp, end);
     if (rc) {
         return -1;
     }
 
-    rc = tinycrypt_decode_sig(r, s, sig, sig + slen);
+    rc = tinycrypt_decode_sig(signature, sig, sig + slen);
     if (rc) {
         return -1;
     }
@@ -170,8 +168,7 @@
         return -1;
     }
 
-    ecc_bytes2native(hash_t, hash);
-    rc = ecdsa_verify(&ctx, hash_t, r, s);
+    rc = uECC_verify(public_key, hash, NUM_ECC_BYTES, signature, uECC_secp256r1());
     if (rc == 1) {
         return 0;
     } else {