clang-format
diff --git a/include/picotls/mbedtls.h b/include/picotls/mbedtls.h
index 581c416..62fd382 100644
--- a/include/picotls/mbedtls.h
+++ b/include/picotls/mbedtls.h
@@ -60,8 +60,8 @@
 
 void ptls_mbedtls_random_bytes(void *buf, size_t len);
 
-int ptls_mbedtls_load_private_key(ptls_context_t* ctx, char const* pem_fname);
-void ptls_mbedtls_dispose_sign_certificate(ptls_sign_certificate_t* _self);
+int ptls_mbedtls_load_private_key(ptls_context_t *ctx, char const *pem_fname);
+void ptls_mbedtls_dispose_sign_certificate(ptls_sign_certificate_t *_self);
 
 #ifdef __cplusplus
 }
diff --git a/lib/mbedtls_sign.c b/lib/mbedtls_sign.c
index 8eed140..de06175 100644
--- a/lib/mbedtls_sign.c
+++ b/lib/mbedtls_sign.c
@@ -1,25 +1,24 @@
 /*
-* Copyright (c) 2023, Christian Huitema
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy
-* of this software and associated documentation files (the "Software"), to
-* deal in the Software without restriction, including without limitation the
-* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-* sell copies of the Software, and to permit persons to whom the Software is
-* furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in
-* all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-* IN THE SOFTWARE.
-*/
-
+ * Copyright (c) 2023, Christian Huitema
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
 
 #ifdef _WINDOWS
 #include "wincompat.h"
@@ -39,7 +38,6 @@
 #include <psa/crypto_values.h>
 /* #include "ptls_mbedtls.h" */
 
-
 typedef struct st_ptls_mbedtls_signature_scheme_t {
     uint16_t scheme_id;
     psa_algorithm_t hash_algo;
@@ -49,18 +47,17 @@
     ptls_sign_certificate_t super;
     mbedtls_svc_key_id_t key_id;
     psa_key_attributes_t attributes;
-    const ptls_mbedtls_signature_scheme_t * schemes;
+    const ptls_mbedtls_signature_scheme_t *schemes;
 } ptls_mbedtls_sign_certificate_t;
 
-static const unsigned char ptls_mbedtls_oid_ec_key[] = { 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01 };
-static const unsigned char ptls_mbedtls_oid_rsa_key[] = { 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01 };
-static const unsigned char ptls_mbedtls_oid_ed25519[] = { 0x2b, 0x65, 0x70 };
+static const unsigned char ptls_mbedtls_oid_ec_key[] = {0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01};
+static const unsigned char ptls_mbedtls_oid_rsa_key[] = {0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01};
+static const unsigned char ptls_mbedtls_oid_ed25519[] = {0x2b, 0x65, 0x70};
 
-static const ptls_mbedtls_signature_scheme_t rsa_signature_schemes[] = {
-    {PTLS_SIGNATURE_RSA_PSS_RSAE_SHA256, PSA_ALG_SHA_256},
-    {PTLS_SIGNATURE_RSA_PSS_RSAE_SHA384, PSA_ALG_SHA_384},
-    {PTLS_SIGNATURE_RSA_PSS_RSAE_SHA512, PSA_ALG_SHA_512},
-    {UINT16_MAX, PSA_ALG_NONE}};
+static const ptls_mbedtls_signature_scheme_t rsa_signature_schemes[] = {{PTLS_SIGNATURE_RSA_PSS_RSAE_SHA256, PSA_ALG_SHA_256},
+                                                                        {PTLS_SIGNATURE_RSA_PSS_RSAE_SHA384, PSA_ALG_SHA_384},
+                                                                        {PTLS_SIGNATURE_RSA_PSS_RSAE_SHA512, PSA_ALG_SHA_512},
+                                                                        {UINT16_MAX, PSA_ALG_NONE}};
 
 static const ptls_mbedtls_signature_scheme_t secp256r1_signature_schemes[] = {
     {PTLS_SIGNATURE_ECDSA_SECP256R1_SHA256, PSA_ALG_SHA_256}, {UINT16_MAX, PSA_ALG_NONE}};
@@ -68,14 +65,14 @@
     {PTLS_SIGNATURE_ECDSA_SECP384R1_SHA384, PSA_ALG_SHA_384}, {UINT16_MAX, PSA_ALG_NONE}};
 static const ptls_mbedtls_signature_scheme_t secp521r1_signature_schemes[] = {
     {PTLS_SIGNATURE_ECDSA_SECP521R1_SHA512, PSA_ALG_SHA_512}, {UINT16_MAX, PSA_ALG_NONE}};
-static const ptls_mbedtls_signature_scheme_t ed25519_signature_schemes[] = {
-    {PTLS_SIGNATURE_ED25519, PSA_ALG_NONE}, {UINT16_MAX, PSA_ALG_NONE}};
+static const ptls_mbedtls_signature_scheme_t ed25519_signature_schemes[] = {{PTLS_SIGNATURE_ED25519, PSA_ALG_NONE},
+                                                                            {UINT16_MAX, PSA_ALG_NONE}};
 
 #if defined(MBEDTLS_PEM_PARSE_C)
 
 /* Mapping of MBEDTLS APIs to Picotls */
 
-static int ptls_mbedtls_parse_der_length(const unsigned char* pem_buf, size_t pem_len, size_t* px, size_t *pl)
+static int ptls_mbedtls_parse_der_length(const unsigned char *pem_buf, size_t pem_len, size_t *px, size_t *pl)
 {
     int ret = 0;
     size_t x = *px;
@@ -97,18 +94,15 @@
     return ret;
 }
 
-static int ptls_mbedtls_parse_ecdsa_field(const unsigned char* pem_buf, size_t pem_len, size_t* key_index, size_t* key_length)
+static int ptls_mbedtls_parse_ecdsa_field(const unsigned char *pem_buf, size_t pem_len, size_t *key_index, size_t *key_length)
 {
     int ret = 0;
     size_t x = 0;
 
     // const unsigned char head = { 0x30, l-2, 0x02, 0x01, 0x01, 0x04 }
-    if (pem_len < 16 ||
-        pem_buf[x++] != 0x30 /* type = sequence */)
-    {
+    if (pem_len < 16 || pem_buf[x++] != 0x30 /* type = sequence */) {
         ret = -1;
-    }
-    else {
+    } else {
         size_t l = 0;
         ret = ptls_mbedtls_parse_der_length(pem_buf, pem_len, &x, &l);
 
@@ -116,15 +110,11 @@
             ret = -1;
         }
     }
-    if (ret == 0){
-        if (pem_buf[x++] != 0x02 /* type = int */ ||
-            pem_buf[x++] != 0x01 /* length of int = 1 */ ||
-            pem_buf[x++] != 0x01 /* version = 1 */ ||
-            pem_buf[x++] != 0x04 /*octet string */ ||
-            pem_buf[x] + x >= pem_len) {
+    if (ret == 0) {
+        if (pem_buf[x++] != 0x02 /* type = int */ || pem_buf[x++] != 0x01 /* length of int = 1 */ ||
+            pem_buf[x++] != 0x01 /* version = 1 */ || pem_buf[x++] != 0x04 /*octet string */ || pem_buf[x] + x >= pem_len) {
             ret = -1;
-        }
-        else {
+        } else {
             *key_index = x + 1;
             *key_length = pem_buf[x];
             x += 1 + pem_buf[x];
@@ -135,19 +125,16 @@
                 if (x + pem_buf[x] >= pem_len) {
                     /* EC parameters extend beyond buffer */
                     ret = -1;
-                }
-                else {
+                } else {
                     x += pem_buf[x] + 1;
                 }
             }
 
             if (ret == 0 && x < pem_len) {
                 /* skip the public key parameter */
-                if (pem_buf[x++] != 0xa1 ||
-                    x >= pem_len) {
+                if (pem_buf[x++] != 0xa1 || x >= pem_len) {
                     ret = -1;
-                }
-                else {
+                } else {
                     size_t l = 0;
                     ret = ptls_mbedtls_parse_der_length(pem_buf, pem_len, &x, &l);
                     x += l;
@@ -163,12 +150,11 @@
 }
 
 /* On input, key_index points at the "key information" in a
-* "private key" message. For EDDSA, this contains an
-* octet string carrying the key itself. On return, key index
-* and key length are updated to point at the key field.
-*/
-static int ptls_mbedtls_parse_eddsa_key(const unsigned char* pem_buf, size_t pem_len,
-    size_t* key_index, size_t* key_length)
+ * "private key" message. For EDDSA, this contains an
+ * octet string carrying the key itself. On return, key index
+ * and key length are updated to point at the key field.
+ */
+static int ptls_mbedtls_parse_eddsa_key(const unsigned char *pem_buf, size_t pem_len, size_t *key_index, size_t *key_length)
 {
     int ret = 0;
     size_t x = *key_index;
@@ -180,8 +166,7 @@
         ret = ptls_mbedtls_parse_der_length(pem_buf, pem_len, &x, &l_key);
         if (x + l_key != *key_index + *key_length) {
             ret = -1;
-        }
-        else {
+        } else {
 
             *key_index = x;
             *key_length = l_key;
@@ -191,12 +176,11 @@
 }
 
 /* If using PKCS8 encoding, the "private key" field contains the
-* same "ecdsa field" found in PEM "EC PRIVATE KEY" files. We
-* use the same parser, but we need to reset indices so they
-* reflect the unwrapped key.
-*/
-int ptls_mbedtls_parse_ec_private_key(const unsigned char* pem_buf, size_t pem_len,
-    size_t* key_index, size_t* key_length)
+ * same "ecdsa field" found in PEM "EC PRIVATE KEY" files. We
+ * use the same parser, but we need to reset indices so they
+ * reflect the unwrapped key.
+ */
+int ptls_mbedtls_parse_ec_private_key(const unsigned char *pem_buf, size_t pem_len, size_t *key_index, size_t *key_length)
 {
     size_t x_offset = 0;
     size_t x_len = 0;
@@ -209,9 +193,8 @@
     return ret;
 }
 
-int test_parse_private_key_field(const unsigned char* pem_buf, size_t pem_len,
-    size_t* oid_index, size_t *oid_length,
-    size_t* key_index, size_t* key_length)
+int test_parse_private_key_field(const unsigned char *pem_buf, size_t pem_len, size_t *oid_index, size_t *oid_length,
+                                 size_t *key_index, size_t *key_length)
 {
     int ret = 0;
     size_t l_oid = 0;
@@ -221,12 +204,9 @@
 
     size_t x = 0;
     /*  const unsigned char head = {0x30, l - 2, 0x02, 0x01, 0x00} */
-    if (pem_len < 16 ||
-        pem_buf[x++] != 0x30 /* type = sequence */)
-    {
+    if (pem_len < 16 || pem_buf[x++] != 0x30 /* type = sequence */) {
         ret = -1;
-    }
-    else {
+    } else {
         size_t l = 0;
         ret = ptls_mbedtls_parse_der_length(pem_buf, pem_len, &x, &l);
 
@@ -235,31 +215,25 @@
         }
     }
     if (ret == 0) {
-        if (pem_buf[x++] != 0x02 /* type = int */ ||
-            pem_buf[x++] != 0x01 /* length of int = 1 */ ||
-            pem_buf[x++] != 0x00 /* version = 0 */ ||
-            pem_buf[x++] != 0x30 /* sequence */){
+        if (pem_buf[x++] != 0x02 /* type = int */ || pem_buf[x++] != 0x01 /* length of int = 1 */ ||
+            pem_buf[x++] != 0x00 /* version = 0 */ || pem_buf[x++] != 0x30 /* sequence */) {
             ret = -1;
-        }
-        else {
+        } else {
             /* the sequence contains the OID and optional key attributes,
-            * which we ignore for now.
-            */
+             * which we ignore for now.
+             */
             size_t l_seq = 0;
             size_t x_seq;
             ret = ptls_mbedtls_parse_der_length(pem_buf, pem_len, &x, &l_seq);
             x_seq = x;
-            if (x + l_seq >= pem_len ||
-                pem_buf[x++] != 0x06) {
+            if (x + l_seq >= pem_len || pem_buf[x++] != 0x06) {
                 ret = -1;
-            }
-            else {
+            } else {
                 l_oid = pem_buf[x++];
                 x_oid = x;
                 if (x + l_oid > x_seq + l_seq) {
                     ret = -1;
-                }
-                else {
+                } else {
                     x = x_seq + l_seq;
                 }
             }
@@ -267,13 +241,11 @@
     }
     if (ret == 0) {
         /* At that point the oid has been identified.
-        * The next parameter is an octet string containing the key info.
-        */
-        if (x + 2 > pem_len ||
-            pem_buf[x++]  != 0x04){
+         * The next parameter is an octet string containing the key info.
+         */
+        if (x + 2 > pem_len || pem_buf[x++] != 0x04) {
             ret = -1;
-        }
-        else {
+        } else {
             ret = ptls_mbedtls_parse_der_length(pem_buf, pem_len, &x, &l_key);
             x_key = x;
             x += l_key;
@@ -290,11 +262,8 @@
     return ret;
 }
 
-int ptls_mbedtls_get_der_key(mbedtls_pem_context* pem,
-    mbedtls_pk_type_t * pk_type,
-    const unsigned char* key, size_t keylen,
-    const unsigned char* pwd, size_t pwdlen,
-    int (*f_rng)(void*, unsigned char*, size_t), void* p_rng)
+int ptls_mbedtls_get_der_key(mbedtls_pem_context *pem, mbedtls_pk_type_t *pk_type, const unsigned char *key, size_t keylen,
+                             const unsigned char *pwd, size_t pwdlen, int (*f_rng)(void *, unsigned char *, size_t), void *p_rng)
 {
     int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
 #if defined(MBEDTLS_PEM_PARSE_C)
@@ -311,25 +280,19 @@
     /* Avoid calling mbedtls_pem_read_buffer() on non-null-terminated string */
     if (key[keylen - 1] != '\0') {
         ret = MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT;
-    }
-    else {
-        ret = mbedtls_pem_read_buffer(pem,
-            "-----BEGIN RSA PRIVATE KEY-----",
-            "-----END RSA PRIVATE KEY-----",
-            key, pwd, pwdlen, &len);
+    } else {
+        ret = mbedtls_pem_read_buffer(pem, "-----BEGIN RSA PRIVATE KEY-----", "-----END RSA PRIVATE KEY-----", key, pwd, pwdlen,
+                                      &len);
     }
 
     if (ret == 0) {
-        * pk_type = MBEDTLS_PK_RSA;
+        *pk_type = MBEDTLS_PK_RSA;
         return ret;
-    }
-    else if (ret == MBEDTLS_ERR_PEM_PASSWORD_MISMATCH) {
+    } else if (ret == MBEDTLS_ERR_PEM_PASSWORD_MISMATCH) {
         return MBEDTLS_ERR_PK_PASSWORD_MISMATCH;
-    }
-    else if (ret == MBEDTLS_ERR_PEM_PASSWORD_REQUIRED) {
+    } else if (ret == MBEDTLS_ERR_PEM_PASSWORD_REQUIRED) {
         return MBEDTLS_ERR_PK_PASSWORD_REQUIRED;
-    }
-    else if (ret != MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT) {
+    } else if (ret != MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT) {
 
         return ret;
     }
@@ -339,24 +302,18 @@
     /* Avoid calling mbedtls_pem_read_buffer() on non-null-terminated string */
     if (key[keylen - 1] != '\0') {
         ret = MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT;
-    }
-    else {
-        ret = mbedtls_pem_read_buffer(pem,
-            "-----BEGIN EC PRIVATE KEY-----",
-            "-----END EC PRIVATE KEY-----",
-            key, pwd, pwdlen, &len);
+    } else {
+        ret =
+            mbedtls_pem_read_buffer(pem, "-----BEGIN EC PRIVATE KEY-----", "-----END EC PRIVATE KEY-----", key, pwd, pwdlen, &len);
     }
     if (ret == 0) {
-        * pk_type = MBEDTLS_PK_ECKEY;
+        *pk_type = MBEDTLS_PK_ECKEY;
         return ret;
-    }
-    else if (ret == MBEDTLS_ERR_PEM_PASSWORD_MISMATCH) {
+    } else if (ret == MBEDTLS_ERR_PEM_PASSWORD_MISMATCH) {
         return MBEDTLS_ERR_PK_PASSWORD_MISMATCH;
-    }
-    else if (ret == MBEDTLS_ERR_PEM_PASSWORD_REQUIRED) {
+    } else if (ret == MBEDTLS_ERR_PEM_PASSWORD_REQUIRED) {
         return MBEDTLS_ERR_PK_PASSWORD_REQUIRED;
-    }
-    else if (ret != MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT) {
+    } else if (ret != MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT) {
         return ret;
     }
 #endif /* MBEDTLS_PK_HAVE_ECC_KEYS */
@@ -364,17 +321,12 @@
     /* Avoid calling mbedtls_pem_read_buffer() on non-null-terminated string */
     if (key[keylen - 1] != '\0') {
         ret = MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT;
-    }
-    else {
-        ret = mbedtls_pem_read_buffer(pem,
-            "-----BEGIN PRIVATE KEY-----",
-            "-----END PRIVATE KEY-----",
-            key, NULL, 0, &len);
+    } else {
+        ret = mbedtls_pem_read_buffer(pem, "-----BEGIN PRIVATE KEY-----", "-----END PRIVATE KEY-----", key, NULL, 0, &len);
         if (ret == 0) {
             /* info is unknown */
             return ret;
-        }
-        else if (ret != MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT) {
+        } else if (ret != MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT) {
             return ret;
         }
     }
@@ -383,18 +335,14 @@
     /* Avoid calling mbedtls_pem_read_buffer() on non-null-terminated string */
     if (key[keylen - 1] != '\0') {
         ret = MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT;
-    }
-    else {
-        ret = mbedtls_pem_read_buffer(pem,
-            "-----BEGIN ENCRYPTED PRIVATE KEY-----",
-            "-----END ENCRYPTED PRIVATE KEY-----",
-            key, NULL, 0, &len);
+    } else {
+        ret = mbedtls_pem_read_buffer(pem, "-----BEGIN ENCRYPTED PRIVATE KEY-----", "-----END ENCRYPTED PRIVATE KEY-----", key,
+                                      NULL, 0, &len);
     }
     if (ret == 0) {
         /* infor is unknown */
         return ret;
-    }
-    else if (ret != MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT) {
+    } else if (ret != MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT) {
         return ret;
     }
 #endif /* MBEDTLS_PKCS12_C || MBEDTLS_PKCS5_C */
@@ -402,11 +350,10 @@
 }
 #endif
 
-const ptls_mbedtls_signature_scheme_t* ptls_mbedtls_select_signature_scheme(
-    const ptls_mbedtls_signature_scheme_t *available,
-    const uint16_t *algorithms, size_t num_algorithms)
+const ptls_mbedtls_signature_scheme_t *ptls_mbedtls_select_signature_scheme(const ptls_mbedtls_signature_scheme_t *available,
+                                                                            const uint16_t *algorithms, size_t num_algorithms)
 {
-    const ptls_mbedtls_signature_scheme_t* scheme;
+    const ptls_mbedtls_signature_scheme_t *scheme;
 
     /* select the algorithm, driven by server-isde preference of `available` */
     for (scheme = available; scheme->scheme_id != UINT16_MAX; ++scheme) {
@@ -419,8 +366,7 @@
     return NULL;
 }
 
-int ptls_mbedtls_set_available_schemes(
-    ptls_mbedtls_sign_certificate_t* signer)
+int ptls_mbedtls_set_available_schemes(ptls_mbedtls_sign_certificate_t *signer)
 {
     int ret = 0;
     psa_algorithm_t algo = psa_get_key_algorithm(&signer->attributes);
@@ -468,55 +414,52 @@
 }
 
 /*
-* Sign a certificate
-* - step1, selected a signature algorithm compatible with the public key algorithm
-*   and with the list specified by the application.
-* - step2, compute the hash with the specified algorithm.
-* - step3, compute the signature of the hash using psa_sign_hash.
-* 
-* In the case of RSA, we use the algorithm PSA_ALG_RSA_PKCS1V15_SIGN_RAW, which
-* pads the hash according to PKCS1V15 before doing the private key operation.
-* The implementation of RSA/PKCS1V15 also includes a verification step to protect
-* against key attacks through partial faults.
-* 
-* MBEDTLS has a "psa_sign_message" that combines step2 and step3. However, it
-* requires specifying an algorithm type that exactly specifies the signature
-* algorithm, such as "RSA with SHA384". This is not compatible with the
-* "RSA sign raw" algorithm. Instead, we decompose the operation in two steps.
-* There is no performance penalty doing so, as "psa_sign_message" is only
-* a convenience API.
-*/
+ * Sign a certificate
+ * - step1, selected a signature algorithm compatible with the public key algorithm
+ *   and with the list specified by the application.
+ * - step2, compute the hash with the specified algorithm.
+ * - step3, compute the signature of the hash using psa_sign_hash.
+ *
+ * In the case of RSA, we use the algorithm PSA_ALG_RSA_PKCS1V15_SIGN_RAW, which
+ * pads the hash according to PKCS1V15 before doing the private key operation.
+ * The implementation of RSA/PKCS1V15 also includes a verification step to protect
+ * against key attacks through partial faults.
+ *
+ * MBEDTLS has a "psa_sign_message" that combines step2 and step3. However, it
+ * requires specifying an algorithm type that exactly specifies the signature
+ * algorithm, such as "RSA with SHA384". This is not compatible with the
+ * "RSA sign raw" algorithm. Instead, we decompose the operation in two steps.
+ * There is no performance penalty doing so, as "psa_sign_message" is only
+ * a convenience API.
+ */
 
-int ptls_mbedtls_sign_certificate(ptls_sign_certificate_t* _self, ptls_t* tls,
-    ptls_async_job_t** async, uint16_t* selected_algorithm,
-    ptls_buffer_t* outbuf, ptls_iovec_t input, const uint16_t* algorithms, size_t num_algorithms)
+int ptls_mbedtls_sign_certificate(ptls_sign_certificate_t *_self, ptls_t *tls, ptls_async_job_t **async,
+                                  uint16_t *selected_algorithm, ptls_buffer_t *outbuf, ptls_iovec_t input,
+                                  const uint16_t *algorithms, size_t num_algorithms)
 {
     int ret = 0;
-    ptls_mbedtls_sign_certificate_t* self = (ptls_mbedtls_sign_certificate_t*)
-        (((unsigned char*)_self) - offsetof(struct st_ptls_mbedtls_sign_certificate_t, super));
+    ptls_mbedtls_sign_certificate_t *self =
+        (ptls_mbedtls_sign_certificate_t *)(((unsigned char *)_self) - offsetof(struct st_ptls_mbedtls_sign_certificate_t, super));
     /* First, find the set of compatible algorithms */
-    const ptls_mbedtls_signature_scheme_t* scheme =
-        ptls_mbedtls_select_signature_scheme(self->schemes, algorithms, num_algorithms);
+    const ptls_mbedtls_signature_scheme_t *scheme = ptls_mbedtls_select_signature_scheme(self->schemes, algorithms, num_algorithms);
 
     if (scheme == NULL) {
         ret = PTLS_ERROR_INCOMPATIBLE_KEY;
-    }
-    else {
+    } else {
         /* First prepare the hash */
         unsigned char hash_buffer[PTLS_MAX_DIGEST_SIZE];
-        unsigned char* hash_value = NULL;
+        unsigned char *hash_value = NULL;
 
         size_t hash_length = 0;
 
         if (scheme->hash_algo == PSA_ALG_NONE) {
             hash_value = input.base;
             hash_length = input.len;
-        }
-        else {
-            if (psa_hash_compute(scheme->hash_algo, input.base, input.len, hash_buffer, PTLS_MAX_DIGEST_SIZE, &hash_length) != PSA_SUCCESS) {
+        } else {
+            if (psa_hash_compute(scheme->hash_algo, input.base, input.len, hash_buffer, PTLS_MAX_DIGEST_SIZE, &hash_length) !=
+                PSA_SUCCESS) {
                 ret = PTLS_ERROR_NOT_AVAILABLE;
-            }
-            else {
+            } else {
                 hash_value = hash_buffer;
             }
         }
@@ -528,8 +471,7 @@
                 if (sign_algo == PSA_ALG_RSA_PKCS1V15_SIGN_RAW) {
                     /* assume at most 4096 bit key */
                     nb_bytes = 512;
-                }
-                else {
+                } else {
                     /* Max size assumed, secp521r1 */
                     nb_bytes = 124;
                 }
@@ -538,11 +480,10 @@
             }
             if ((ret = ptls_buffer_reserve(outbuf, nb_bytes)) == 0) {
                 size_t signature_length = 0;
-                if (psa_sign_hash(self->key_id, sign_algo, hash_value, hash_length,
-                    outbuf->base + outbuf->off, nb_bytes, &signature_length) != 0) {
+                if (psa_sign_hash(self->key_id, sign_algo, hash_value, hash_length, outbuf->base + outbuf->off, nb_bytes,
+                                  &signature_length) != 0) {
                     ret = PTLS_ERROR_INCOMPATIBLE_KEY;
-                }
-                else {
+                } else {
                     outbuf->off += signature_length;
                 }
             }
@@ -554,8 +495,9 @@
 void ptls_mbedtls_dispose_sign_certificate(ptls_sign_certificate_t *_self)
 {
     if (_self != NULL) {
-        ptls_mbedtls_sign_certificate_t* self = (ptls_mbedtls_sign_certificate_t*)
-        (((unsigned char*)_self) - offsetof(struct st_ptls_mbedtls_sign_certificate_t, super));
+        ptls_mbedtls_sign_certificate_t *self =
+            (ptls_mbedtls_sign_certificate_t *)(((unsigned char *)_self) -
+                                                offsetof(struct st_ptls_mbedtls_sign_certificate_t, super));
         /* Destroy the key */
         psa_destroy_key(self->key_id);
         psa_reset_key_attributes(&self->attributes);
@@ -564,24 +506,24 @@
     }
 }
 /*
-* An RSa key is encoded in DER as:
-* RSAPrivateKey ::= SEQUENCE {
-*   version             INTEGER,  -- must be 0
-*   modulus             INTEGER,  -- n
-*   publicExponent      INTEGER,  -- e
-*   privateExponent     INTEGER,  -- d
-*   prime1              INTEGER,  -- p
-*   prime2              INTEGER,  -- q
-*   exponent1           INTEGER,  -- d mod (p-1)
-*   exponent2           INTEGER,  -- d mod (q-1)
-*   coefficient         INTEGER,  -- (inverse of q) mod p
-* }
-* 
-* The number of key bits is the size in bits of the integer N.
-* We must decode the length in octets of the integer representation,
-* then subtract the number of zeros at the beginning of the data.
-*/
-int ptls_mbedtls_rsa_get_key_bits(const unsigned char* key_value, size_t key_length, size_t * p_nb_bits)
+ * An RSa key is encoded in DER as:
+ * RSAPrivateKey ::= SEQUENCE {
+ *   version             INTEGER,  -- must be 0
+ *   modulus             INTEGER,  -- n
+ *   publicExponent      INTEGER,  -- e
+ *   privateExponent     INTEGER,  -- d
+ *   prime1              INTEGER,  -- p
+ *   prime2              INTEGER,  -- q
+ *   exponent1           INTEGER,  -- d mod (p-1)
+ *   exponent2           INTEGER,  -- d mod (q-1)
+ *   coefficient         INTEGER,  -- (inverse of q) mod p
+ * }
+ *
+ * The number of key bits is the size in bits of the integer N.
+ * We must decode the length in octets of the integer representation,
+ * then subtract the number of zeros at the beginning of the data.
+ */
+int ptls_mbedtls_rsa_get_key_bits(const unsigned char *key_value, size_t key_length, size_t *p_nb_bits)
 {
     int ret = 0;
     size_t nb_bytes = 0;
@@ -598,15 +540,10 @@
         }
     }
 
-    if (ret == 0 &&
-        key_value[x] == 0x02 &&
-        key_value[x + 1] == 0x01 &&
-        key_value[x + 2] == 0x00 &&
-        key_value[x + 3] == 0x02) {
+    if (ret == 0 && key_value[x] == 0x02 && key_value[x + 1] == 0x01 && key_value[x + 2] == 0x00 && key_value[x + 3] == 0x02) {
         x += 4;
         ret = ptls_mbedtls_parse_der_length(key_value, key_length, &x, &nb_bytes);
-    }
-    else {
+    } else {
         ret = -1;
     }
 
@@ -616,8 +553,7 @@
 
         if (v == 0) {
             nb_bits -= 8;
-        }
-        else {
+        } else {
             while ((v & 0x80) == 0) {
                 nb_bits--;
                 v <<= 1;
@@ -628,8 +564,7 @@
     return ret;
 }
 
-void ptls_mbedtls_set_rsa_key_attributes(ptls_mbedtls_sign_certificate_t* signer,
-    const unsigned char * key_value, size_t key_length)
+void ptls_mbedtls_set_rsa_key_attributes(ptls_mbedtls_sign_certificate_t *signer, const unsigned char *key_value, size_t key_length)
 {
     size_t nb_bits = 0;
     psa_set_key_usage_flags(&signer->attributes, PSA_KEY_USAGE_SIGN_HASH);
@@ -640,7 +575,7 @@
     }
 }
 
-int ptls_mbedtls_set_ec_key_attributes(ptls_mbedtls_sign_certificate_t* signer, size_t key_length)
+int ptls_mbedtls_set_ec_key_attributes(ptls_mbedtls_sign_certificate_t *signer, size_t key_length)
 {
     int ret = 0;
 
@@ -648,51 +583,44 @@
     psa_set_key_algorithm(&signer->attributes, PSA_ALG_ECDSA_BASE);
     psa_set_key_type(&signer->attributes, PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_SECP_R1));
     if (key_length == 32) {
-        psa_set_key_algorithm(&signer->attributes,
-            PSA_ALG_DETERMINISTIC_ECDSA(PSA_ALG_SHA_256));
+        psa_set_key_algorithm(&signer->attributes, PSA_ALG_DETERMINISTIC_ECDSA(PSA_ALG_SHA_256));
         psa_set_key_bits(&signer->attributes, 256);
-    }
-    else if (key_length == 48) {
-        psa_set_key_algorithm(&signer->attributes,
-            PSA_ALG_DETERMINISTIC_ECDSA(PSA_ALG_SHA_384));
+    } else if (key_length == 48) {
+        psa_set_key_algorithm(&signer->attributes, PSA_ALG_DETERMINISTIC_ECDSA(PSA_ALG_SHA_384));
         psa_set_key_bits(&signer->attributes, 384);
-    }
-    else if (key_length == 66) {
-        psa_set_key_algorithm(&signer->attributes,
-            PSA_ALG_DETERMINISTIC_ECDSA(PSA_ALG_SHA_512));
+    } else if (key_length == 66) {
+        psa_set_key_algorithm(&signer->attributes, PSA_ALG_DETERMINISTIC_ECDSA(PSA_ALG_SHA_512));
         psa_set_key_bits(&signer->attributes, 521);
-    }
-    else {
+    } else {
         ret = -1;
     }
 
     return ret;
 }
 
-int ptls_mbedtls_load_private_key(ptls_context_t* ctx, char const* pem_fname)
+int ptls_mbedtls_load_private_key(ptls_context_t *ctx, char const *pem_fname)
 {
     int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
     size_t n;
-    unsigned char* buf;
-    mbedtls_pem_context pem = { 0 };
+    unsigned char *buf;
+    mbedtls_pem_context pem = {0};
     mbedtls_pk_type_t pk_type = 0;
     /* mbedtls_svc_key_id_t key_id = 0; */
     size_t key_length = 0;
     size_t key_index = 0;
-    ptls_mbedtls_sign_certificate_t* signer = (ptls_mbedtls_sign_certificate_t*)malloc(sizeof(ptls_mbedtls_sign_certificate_t));
+    ptls_mbedtls_sign_certificate_t *signer = (ptls_mbedtls_sign_certificate_t *)malloc(sizeof(ptls_mbedtls_sign_certificate_t));
 
     if (signer == NULL) {
-        return(PTLS_ERROR_NO_MEMORY);
+        return (PTLS_ERROR_NO_MEMORY);
     }
     memset(signer, 0, sizeof(ptls_mbedtls_sign_certificate_t));
     signer->attributes = psa_key_attributes_init();
 
     if ((ret = mbedtls_pk_load_file(pem_fname, &buf, &n)) != 0) {
         if (ret == MBEDTLS_ERR_PK_ALLOC_FAILED) {
-            return(PTLS_ERROR_NO_MEMORY);
-        }
-        else {
-            return(PTLS_ERROR_NOT_AVAILABLE);
+            return (PTLS_ERROR_NO_MEMORY);
+        } else {
+            return (PTLS_ERROR_NOT_AVAILABLE);
         }
     }
     ret = ptls_mbedtls_get_der_key(&pem, &pk_type, buf, n, NULL, 0, NULL, NULL);
@@ -708,21 +636,20 @@
         if (pk_type == MBEDTLS_PK_RSA) {
             key_length = pem.private_buflen;
             ptls_mbedtls_set_rsa_key_attributes(signer, pem.private_buf, key_length);
-        }
-        else if (pk_type == MBEDTLS_PK_ECKEY) {
+        } else if (pk_type == MBEDTLS_PK_ECKEY) {
             ret = ptls_mbedtls_parse_ecdsa_field(pem.private_buf, pem.private_buflen, &key_index, &key_length);
             if (ret == 0) {
                 ret = ptls_mbedtls_set_ec_key_attributes(signer, key_length);
             }
-        }
-        else if (pk_type == MBEDTLS_PK_NONE) {
+        } else if (pk_type == MBEDTLS_PK_NONE) {
             /* TODO: not clear whether MBDED TLS supports ED25519 yet. Probably not. */
             /* Should have option to encode RSA or ECDSA using PKCS8 */
             size_t oid_index = 0;
             size_t oid_length = 0;
 
             psa_set_key_usage_flags(&signer->attributes, PSA_KEY_USAGE_SIGN_HASH);
-            ret = test_parse_private_key_field(pem.private_buf, pem.private_buflen, &oid_index, &oid_length, &key_index, &key_length);
+            ret =
+                test_parse_private_key_field(pem.private_buf, pem.private_buflen, &oid_index, &oid_length, &key_index, &key_length);
             if (ret == 0) {
                 /* need to parse the OID in order to set the parameters */
 
@@ -732,27 +659,23 @@
                     if (ret == 0) {
                         ret = ptls_mbedtls_set_ec_key_attributes(signer, key_length);
                     }
-                }
-                else if (oid_length == sizeof(ptls_mbedtls_oid_ed25519) &&
-                    memcmp(pem.private_buf + oid_index, ptls_mbedtls_oid_ed25519, sizeof(ptls_mbedtls_oid_ed25519)) == 0) {
+                } else if (oid_length == sizeof(ptls_mbedtls_oid_ed25519) &&
+                           memcmp(pem.private_buf + oid_index, ptls_mbedtls_oid_ed25519, sizeof(ptls_mbedtls_oid_ed25519)) == 0) {
                     /* We recognized ED25519 -- PSA_ECC_FAMILY_TWISTED_EDWARDS -- PSA_ALG_ED25519PH */
                     psa_set_key_algorithm(&signer->attributes, PSA_ALG_PURE_EDDSA);
                     psa_set_key_type(&signer->attributes, PSA_ECC_FAMILY_TWISTED_EDWARDS);
                     ret = ptls_mbedtls_parse_eddsa_key(pem.private_buf, pem.private_buflen, &key_index, &key_length);
                     psa_set_key_bits(&signer->attributes, 256);
-                }
-                else if (oid_length == sizeof(ptls_mbedtls_oid_rsa_key) &&
-                    memcmp(pem.private_buf + oid_index, ptls_mbedtls_oid_rsa_key, sizeof(ptls_mbedtls_oid_rsa_key)) == 0) {
+                } else if (oid_length == sizeof(ptls_mbedtls_oid_rsa_key) &&
+                           memcmp(pem.private_buf + oid_index, ptls_mbedtls_oid_rsa_key, sizeof(ptls_mbedtls_oid_rsa_key)) == 0) {
                     /* We recognized RSA */
                     key_length = pem.private_buflen;
                     ptls_mbedtls_set_rsa_key_attributes(signer, pem.private_buf, key_length);
-                }
-                else {
+                } else {
                     ret = PTLS_ERROR_NOT_AVAILABLE;
                 }
             }
-        }
-        else {
+        } else {
             ret = -1;
         }
 
@@ -762,8 +685,7 @@
 
             if (status != PSA_SUCCESS) {
                 ret = -1;
-            }
-            else {
+            } else {
                 ret = ptls_mbedtls_set_available_schemes(signer);
             }
         }
diff --git a/t/mbedtls.c b/t/mbedtls.c
index 8cbe0a9..1ea3416 100644
--- a/t/mbedtls.c
+++ b/t/mbedtls.c
@@ -43,12 +43,12 @@
     ptls_sign_certificate_t super;
     mbedtls_svc_key_id_t key_id;
     psa_key_attributes_t attributes;
-    const ptls_mbedtls_signature_scheme_t * schemes;
+    const ptls_mbedtls_signature_scheme_t *schemes;
 } ptls_mbedtls_sign_certificate_t;
 
-int ptls_mbedtls_sign_certificate(ptls_sign_certificate_t* _self, ptls_t* tls,
-    ptls_async_job_t** async, uint16_t* selected_algorithm,
-    ptls_buffer_t* outbuf, ptls_iovec_t input, const uint16_t* algorithms, size_t num_algorithms);
+int ptls_mbedtls_sign_certificate(ptls_sign_certificate_t *_self, ptls_t *tls, ptls_async_job_t **async,
+                                  uint16_t *selected_algorithm, ptls_buffer_t *outbuf, ptls_iovec_t input,
+                                  const uint16_t *algorithms, size_t num_algorithms);
 
 static int random_trial()
 {
@@ -134,36 +134,31 @@
 #define ASSET_SECP521R1_KEY "t/assets/secp521r1/key.pem"
 #define ASSET_SECP256R1_PKCS8_KEY "t/assets/secp256r1-pkcs8/key.pem"
 
-int test_load_one_der_key(char const* path)
+int test_load_one_der_key(char const *path)
 {
     int ret = -1;
     unsigned char hash[32];
-    const unsigned char h0[32] = {
-        1, 2, 3, 4, 5, 6, 7, 8,
-        9, 10, 11, 12, 13, 14, 15, 16,
-        17, 18, 19, 20, 21, 22, 23, 24,
-        25, 26, 27, 28, 29, 30, 31, 32
-    };
-    ptls_context_t ctx = { 0 };
+    const unsigned char h0[32] = {1,  2,  3,  4,  5,  6,  7,  8,  9,  10, 11, 12, 13, 14, 15, 16,
+                                  17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32};
+    ptls_context_t ctx = {0};
 
     ret = ptls_mbedtls_load_private_key(&ctx, path);
     if (ret != 0) {
         printf("Cannot create sign_certificate from: %s\n", path);
         ret = -1;
-    }
-    else if (ctx.sign_certificate == NULL) {
+    } else if (ctx.sign_certificate == NULL) {
         printf("Sign_certificate not set in ptls context for: %s\n", path);
         ret = -1;
-    }
-    else {
+    } else {
         /* Try to sign something */
         int ret;
-        ptls_mbedtls_sign_certificate_t* signer = (ptls_mbedtls_sign_certificate_t*)
-            (((unsigned char*)ctx.sign_certificate) - offsetof(struct st_ptls_mbedtls_sign_certificate_t, super));
+        ptls_mbedtls_sign_certificate_t *signer =
+            (ptls_mbedtls_sign_certificate_t *)(((unsigned char *)ctx.sign_certificate) -
+                                                offsetof(struct st_ptls_mbedtls_sign_certificate_t, super));
         /* get the key algorithm */
         ptls_buffer_t outbuf;
         uint8_t outbuf_smallbuf[256];
-        ptls_iovec_t input = { hash, sizeof(hash) };
+        ptls_iovec_t input = {hash, sizeof(hash)};
         uint16_t selected_algorithm = 0;
         int num_algorithms = 0;
         uint16_t algorithms[16];
@@ -175,12 +170,11 @@
 
         ptls_buffer_init(&outbuf, outbuf_smallbuf, sizeof(outbuf_smallbuf));
 
-        ret = ptls_mbedtls_sign_certificate(ctx.sign_certificate, NULL, NULL, &selected_algorithm,
-            &outbuf, input, algorithms, num_algorithms);
+        ret = ptls_mbedtls_sign_certificate(ctx.sign_certificate, NULL, NULL, &selected_algorithm, &outbuf, input, algorithms,
+                                            num_algorithms);
         if (ret == 0) {
             printf("Signed a message, key: %s, scheme: %x, signature size: %zu\n", path, selected_algorithm, outbuf.off);
-        }
-        else {
+        } else {
             printf("Sign failed, key: %s, scheme: %x, signature size: %zu\n", path, selected_algorithm, outbuf.off);
         }
         ptls_buffer_dispose(&outbuf);
@@ -189,10 +183,10 @@
     return ret;
 }
 
-static void test_load_rsa_key() 
+static void test_load_rsa_key()
 {
     int ret = test_load_one_der_key(ASSET_RSA_KEY);
-    
+
     if (ret != 0) {
         ok(!"fail");
         return;
@@ -209,9 +203,9 @@
     }
     ok(!!"success");
 }
-        
+
 static void test_load_secp384r1_key()
-{   
+{
     int ret = test_load_one_der_key(ASSET_SECP384R1_KEY);
     if (ret != 0) {
         ok(!"fail");
@@ -220,11 +214,10 @@
     ok(!!"success");
 }
 
-    
 static void test_load_secp521r1_key()
-{   
+{
     int ret = test_load_one_der_key(ASSET_SECP521R1_KEY);
-    if (ret != 0) { 
+    if (ret != 0) {
         ok(!"fail");
         return;
     }
@@ -234,12 +227,12 @@
 static void test_load_secp256r1_pkcs8_key()
 {
     int ret = test_load_one_der_key(ASSET_SECP256R1_PKCS8_KEY);
-    if (ret != 0) { 
+    if (ret != 0) {
         ok(!"fail");
         return;
     }
     ok(!!"success");
-}   
+}
 
 static void test_load_rsa_pkcs8_key()
 {
@@ -252,7 +245,7 @@
 }
 
 void test_sign_certificate(void)
-{    
+{
     subtest("load rsa key", test_load_rsa_key);
     subtest("load secp256r1 key", test_load_secp256r1_key);
     subtest("load secp384r1 key", test_load_secp384r1_key);
@@ -294,7 +287,7 @@
                                      .sign_certificate = &minicrypto_sign_certificate.super};
 
     /* context using mbedtls as backend; minicrypto is used for signing certificate as the mbedtls backend does not (yet) have the
-    * capability */
+     * capability */
     ptls_minicrypto_secp256r1sha256_sign_certificate_t mbedtls_sign_certificate;
     ptls_minicrypto_init_secp256r1sha256_sign_certificate(
         &mbedtls_sign_certificate, ptls_iovec_init(SECP256R1_PRIVATE_KEY, sizeof(SECP256R1_PRIVATE_KEY) - 1));
@@ -319,7 +312,7 @@
 
     /* test the sign certificate */
     subtest("sign certificate", test_sign_certificate);
-      
+
     /* Deinitialize the PSA crypto library. */
     mbedtls_psa_crypto_free();