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 {
