This is an automated email from the ASF dual-hosted git repository.

sjanc pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-core.git

commit ae14242e2a04923feacf81a30f07a1523963fe41
Author: Szymon Janc <[email protected]>
AuthorDate: Thu Jun 11 14:08:08 2026 +0200

    trng: Port software backend from Tinycrypt to Mbed TLS
    
    Tinycrypt is orphaned and is going to be removed.
---
 hw/drivers/trng/trng_sw/include/trng_sw/trng_sw.h |  5 ++---
 hw/drivers/trng/trng_sw/src/trng_sw.c             | 27 ++++++++++++++---------
 2 files changed, 18 insertions(+), 14 deletions(-)

diff --git a/hw/drivers/trng/trng_sw/include/trng_sw/trng_sw.h 
b/hw/drivers/trng/trng_sw/include/trng_sw/trng_sw.h
index 6e9a3e181..0d9b6aeee 100644
--- a/hw/drivers/trng/trng_sw/include/trng_sw/trng_sw.h
+++ b/hw/drivers/trng/trng_sw/include/trng_sw/trng_sw.h
@@ -22,8 +22,7 @@
 
 #include <os/os_dev.h>
 #include <trng/trng.h>
-#include <tinycrypt/hmac_prng.h>
-
+#include <mbedtls/hmac_drbg.h>
 
 #ifdef __cplusplus
 extern "C" {
@@ -31,7 +30,7 @@ extern "C" {
 
 struct trng_sw_dev {
     struct trng_dev tsd_dev;
-    struct tc_hmac_prng_struct tsd_prng;
+    mbedtls_hmac_drbg_context tsd_prng;
     uint8_t tsd_entr[32]; /* min entropy to reseed */
     uint8_t tsd_entr_len;
 };
diff --git a/hw/drivers/trng/trng_sw/src/trng_sw.c 
b/hw/drivers/trng/trng_sw/src/trng_sw.c
index 8f3fe46cd..873d60a85 100644
--- a/hw/drivers/trng/trng_sw/src/trng_sw.c
+++ b/hw/drivers/trng/trng_sw/src/trng_sw.c
@@ -19,14 +19,15 @@
 #include <assert.h>
 #include <string.h>
 
-#include <tinycrypt/constants.h>
+#include <mbedtls/hmac_drbg.h>
+#include <mbedtls/md.h>
 
 #include <trng/trng.h>
 #include <trng_sw/trng_sw.h>
 
 /*
  * SW implementation of a TRNG driver API.
- * Utilizes PRNG implementation from tinycrypt.
+ * Utilizes PRNG implementation from Mbed TLS.
  */
 static size_t
 trng_sw_read(struct trng_dev *dev, void *ptr, size_t size)
@@ -34,8 +35,8 @@ trng_sw_read(struct trng_dev *dev, void *ptr, size_t size)
     struct trng_sw_dev *tsd = (struct trng_sw_dev *)dev;
     int rc;
 
-    rc = tc_hmac_prng_generate(ptr, size, &tsd->tsd_prng);
-    assert(rc == TC_CRYPTO_SUCCESS);
+    rc = mbedtls_hmac_drbg_random(&tsd->tsd_prng, (unsigned char *)ptr, size);
+    assert(rc == 0);
 
     return size;
 }
@@ -47,8 +48,8 @@ trng_sw_get_u32(struct trng_dev *dev)
     uint32_t val;
     int rc;
 
-    rc = tc_hmac_prng_generate((void *)&val, sizeof(val), &tsd->tsd_prng);
-    assert(rc == TC_CRYPTO_SUCCESS);
+    rc = mbedtls_hmac_drbg_random(&tsd->tsd_prng, (unsigned char *)&val, 
sizeof(val));
+    assert(rc == 0);
 
     return val;
 }
@@ -70,9 +71,10 @@ trng_sw_dev_add_entropy(struct trng_sw_dev *tsd, void *entr, 
int entr_len)
     tsd->tsd_entr_len += blen;
 
     if (tsd->tsd_entr_len == sizeof(tsd->tsd_entr)) {
-        rc = tc_hmac_prng_reseed(&tsd->tsd_prng, tsd->tsd_entr,
-                                 sizeof(tsd->tsd_entr), NULL, 0);
-        assert(rc == TC_CRYPTO_SUCCESS);
+        rc = mbedtls_hmac_drbg_update(&tsd->tsd_prng, tsd->tsd_entr,
+                                      sizeof(tsd->tsd_entr));
+        assert(rc == 0);
+
         tsd->tsd_entr_len = 0;
         if (blen != entr_len) {
             /*
@@ -106,8 +108,11 @@ trng_sw_dev_init(struct os_dev *odev, void *arg)
     tsd->tsd_dev.interface.get_u32 = trng_sw_get_u32;
     tsd->tsd_dev.interface.read = trng_sw_read;
 
-    rc = tc_hmac_prng_init(&tsd->tsd_prng, tsdc->tsdc_entr, tsdc->tsdc_len);
-    assert(rc == TC_CRYPTO_SUCCESS);
+    mbedtls_hmac_drbg_init(&tsd->tsd_prng);
+    rc = mbedtls_hmac_drbg_seed_buf(&tsd->tsd_prng,
+                                    
mbedtls_md_info_from_type(MBEDTLS_MD_SHA256),
+                                    tsdc->tsdc_entr, tsdc->tsdc_len);
+    assert(rc == 0);
 
     return 0;
 }

Reply via email to