<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>LPC MicrocontrollersのトピックECDA signature verification with CASPER</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/ECDA-signature-verification-with-CASPER/m-p/2411077#M59780</link>
    <description>&lt;LI-SPOILER&gt;&amp;nbsp;&lt;/LI-SPOILER&gt;&lt;P&gt;Hello,&lt;BR /&gt;I managed to build mbedTLS on my own, in order to verify a signature with ECDSA (MBEDTLS_ECP_DP_SECP256R1).&lt;BR /&gt;With no alt implementation (all computation done by the CPU), the signature verification takes up to 4 seconds to compute on the LPC55S06.&lt;BR /&gt;&lt;BR /&gt;I'm trying now to link mbedTLS ecdsa_verify() function with CASPER fsl driver. But it's not clear to me as the ECDSA verification doens't seem to be a single operation.&amp;nbsp;&lt;BR /&gt;How to link the basic primitive of CAPSER (SECP256R1_Mul &amp;amp; SECP256R1_MulAdd) with the mbedTLS function ECDSA_verify() ?&lt;BR /&gt;&lt;BR /&gt;Thank you in advance for your replie.&lt;/P&gt;</description>
    <pubDate>Thu, 03 Sep 2026 15:13:08 GMT</pubDate>
    <dc:creator>s_hdl</dc:creator>
    <dc:date>2026-09-03T15:13:08Z</dc:date>
    <item>
      <title>ECDA signature verification with CASPER</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/ECDA-signature-verification-with-CASPER/m-p/2411077#M59780</link>
      <description>&lt;LI-SPOILER&gt;&amp;nbsp;&lt;/LI-SPOILER&gt;&lt;P&gt;Hello,&lt;BR /&gt;I managed to build mbedTLS on my own, in order to verify a signature with ECDSA (MBEDTLS_ECP_DP_SECP256R1).&lt;BR /&gt;With no alt implementation (all computation done by the CPU), the signature verification takes up to 4 seconds to compute on the LPC55S06.&lt;BR /&gt;&lt;BR /&gt;I'm trying now to link mbedTLS ecdsa_verify() function with CASPER fsl driver. But it's not clear to me as the ECDSA verification doens't seem to be a single operation.&amp;nbsp;&lt;BR /&gt;How to link the basic primitive of CAPSER (SECP256R1_Mul &amp;amp; SECP256R1_MulAdd) with the mbedTLS function ECDSA_verify() ?&lt;BR /&gt;&lt;BR /&gt;Thank you in advance for your replie.&lt;/P&gt;</description>
      <pubDate>Thu, 03 Sep 2026 15:13:08 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/ECDA-signature-verification-with-CASPER/m-p/2411077#M59780</guid>
      <dc:creator>s_hdl</dc:creator>
      <dc:date>2026-09-03T15:13:08Z</dc:date>
    </item>
    <item>
      <title>回复： ECDA signature verification with CASPER</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/ECDA-signature-verification-with-CASPER/m-p/2411162#M59781</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://community.nxp.com/t5/user/viewprofilepage/user-id/266219"&gt;@s_hdl&lt;/a&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;ECDSA verification consists of several arithmetic and elliptic-curve operations, so it does not map to a single CASPER primitive.&lt;/P&gt;
&lt;P&gt;In the MCUXpresso SDK, the integration is already implemented in the CASPER PSA Crypto port. The casper_mbedtls_ecdsa_verify() function performs the standard ECDSA verification flow, including the calculation of u1 and u2. It then calls:&lt;/P&gt;
&lt;LI-CODE lang="markup"&gt;casper_mbedtls_ecp_muladd(grp, &amp;amp;R, u1, &amp;amp;grp-&amp;gt;G, u2, Q);&lt;/LI-CODE&gt;
&lt;DIV&gt;&lt;SPAN class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;to&lt;/SPAN&gt; &lt;SPAN class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;calculate:&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;LI-CODE lang="markup"&gt;R = u1 × G + u2 × Q&lt;/LI-CODE&gt;
&lt;DIV&gt;
&lt;P&gt;The ECP adaptation layer converts the mbedTLS MPI values and elliptic-curve points into the &lt;SPAN class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;format&lt;/SPAN&gt; &lt;SPAN class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;required&lt;/SPAN&gt; &lt;SPAN class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;by&lt;/SPAN&gt; &lt;SPAN class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;CASPER&lt;/SPAN&gt; &lt;SPAN class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;and&lt;/SPAN&gt; &lt;SPAN class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;maps&lt;/SPAN&gt; &lt;SPAN class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;this&lt;/SPAN&gt; &lt;SPAN class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;operation&lt;/SPAN&gt; &lt;SPAN class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;to&lt;/SPAN&gt; &lt;CODE&gt;&lt;SPAN class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;CASPER_ECC_SECP256R1_MulAdd()&lt;/SPAN&gt;&lt;/CODE&gt;&lt;SPAN class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;Similarly,&lt;/SPAN&gt; &lt;CODE&gt;&lt;SPAN class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;casper_mbedtls_ecp_mul()&lt;/SPAN&gt;&lt;/CODE&gt; &lt;SPAN class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;maps&lt;/SPAN&gt; &lt;SPAN class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;a&lt;/SPAN&gt; &lt;SPAN class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;single&lt;/SPAN&gt; &lt;SPAN class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;scalar&lt;/SPAN&gt; &lt;SPAN class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;multiplication&lt;/SPAN&gt; &lt;SPAN class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;to&lt;/SPAN&gt; &lt;CODE&gt;&lt;SPAN class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;CASPER_ECC_SECP256R1_Mul()&lt;/SPAN&gt;&lt;/CODE&gt;&lt;SPAN class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;Therefore,&lt;/SPAN&gt; &lt;SPAN class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;rather&lt;/SPAN&gt; &lt;SPAN class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;than&lt;/SPAN&gt; &lt;SPAN class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;modifying&lt;/SPAN&gt; &lt;CODE&gt;&lt;SPAN class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;mbedtls_ecdsa_verify()&lt;/SPAN&gt;&lt;/CODE&gt; &lt;SPAN class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;directly,&lt;/SPAN&gt; &lt;SPAN class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;we&lt;/SPAN&gt; &lt;SPAN class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;recommend&lt;/SPAN&gt; &lt;SPAN class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;reusing&lt;/SPAN&gt; &lt;SPAN class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;the&lt;/SPAN&gt; &lt;SPAN class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;complete&lt;/SPAN&gt; &lt;SPAN class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;CASPER&lt;/SPAN&gt; &lt;SPAN class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;integration&lt;/SPAN&gt; &lt;SPAN class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;provided&lt;/SPAN&gt; &lt;SPAN class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;by&lt;/SPAN&gt; &lt;SPAN class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;the&lt;/SPAN&gt; &lt;SPAN class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;SDK&lt;/SPAN&gt; &lt;SPAN class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;under:&lt;/SPAN&gt;&lt;/P&gt;
&lt;LI-CODE lang="markup"&gt;component/psa_crypto_driver/casper_driver&lt;/LI-CODE&gt;
&lt;DIV&gt;&lt;SPAN class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;In&lt;/SPAN&gt; &lt;SPAN class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;particular,&lt;/SPAN&gt; &lt;SPAN class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;please&lt;/SPAN&gt; &lt;SPAN class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;refer&lt;/SPAN&gt; &lt;SPAN class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;to:&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;LI-CODE lang="markup"&gt;mcux_psa_casper_ecdsa_port.c
mcux_psa_casper_ecp_port.c&lt;/LI-CODE&gt;
&lt;P&gt;Since you built mbedTLS separately, please also make sure that your mbedTLS version is compatible with the MCUXpresso SDK CASPER port.&lt;/P&gt;
&lt;P&gt;You can refer to the&amp;nbsp;lpcxpresso55s06_psa_crypto_examples.&lt;/P&gt;
&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Harry_Zhang_0-1788493275769.png" style="width: 400px;"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/395899i1B18FB8ED74F1966/image-size/medium?v=v2&amp;amp;px=400" role="button" title="Harry_Zhang_0-1788493275769.png" alt="Harry_Zhang_0-1788493275769.png" /&gt;&lt;span class="lia-inline-image-caption" onclick="event.preventDefault();"&gt;Harry_Zhang_0-1788493275769.png&lt;/span&gt;&lt;/span&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;BR&lt;/P&gt;
&lt;P&gt;Harry&lt;/P&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;</description>
      <pubDate>Fri, 04 Sep 2026 03:42:30 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/ECDA-signature-verification-with-CASPER/m-p/2411162#M59781</guid>
      <dc:creator>Harry_Zhang</dc:creator>
      <dc:date>2026-09-04T03:42:30Z</dc:date>
    </item>
    <item>
      <title>Re: ECDA signature verification with CASPER</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/ECDA-signature-verification-with-CASPER/m-p/2411190#M59782</link>
      <description>&lt;P&gt;You generally don’t need to replace mbedtls_ecdsa_verify() itself; the CASPER acceleration should be integrated at the elliptic-curve/multiplication layer that mbedTLS uses internally. ECDSA verification requires computing scalar multiplications and their sum, so SECP256R1_Mul() can handle the individual scalar-point multiplication while SECP256R1_MulAdd() can accelerate the combined operation. The exact integration depends on your mbedTLS version and NXP CASPER driver API, but the usual approach is to provide an mbedTLS alternative/optimized implementation for the P-256 scalar-multiplication primitives rather than calling CASPER directly from ecdsa_verify().&lt;/P&gt;</description>
      <pubDate>Fri, 04 Sep 2026 05:51:59 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/ECDA-signature-verification-with-CASPER/m-p/2411190#M59782</guid>
      <dc:creator>peter89jean</dc:creator>
      <dc:date>2026-09-04T05:51:59Z</dc:date>
    </item>
    <item>
      <title>Re: ECDA signature verification with CASPER</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/ECDA-signature-verification-with-CASPER/m-p/2411229#M59783</link>
      <description>&lt;P&gt;Hello peter89jean,&lt;BR /&gt;&lt;BR /&gt;Thank you for your reply. The approach you mention is what I had in mind but there doesn't seem to be simple and straightforward SECP256R1_MULADD&lt;STRONG&gt;_ALT&lt;/STRONG&gt; or SECP256R1_MUL&lt;STRONG&gt;_ALT&amp;nbsp;&lt;/STRONG&gt;defines in the mbedTLS config file. Maybe I should ask this question to a more mbdedTLS dedicated forum.&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks again.&lt;BR /&gt;&lt;BR /&gt;Regards.&lt;/P&gt;</description>
      <pubDate>Fri, 04 Sep 2026 08:28:15 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/ECDA-signature-verification-with-CASPER/m-p/2411229#M59783</guid>
      <dc:creator>s_hdl</dc:creator>
      <dc:date>2026-09-04T08:28:15Z</dc:date>
    </item>
    <item>
      <title>回复： ECDA signature verification with CASPER</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/ECDA-signature-verification-with-CASPER/m-p/2411357#M59785</link>
      <description>&lt;P&gt;Hello Harry,&lt;BR /&gt;&lt;BR /&gt;Your answer helped me a lot, thank you. Everything works fine using the CASPER implementation now.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Regards.&lt;/P&gt;</description>
      <pubDate>Fri, 04 Sep 2026 12:13:46 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/ECDA-signature-verification-with-CASPER/m-p/2411357#M59785</guid>
      <dc:creator>s_hdl</dc:creator>
      <dc:date>2026-09-04T12:13:46Z</dc:date>
    </item>
  </channel>
</rss>

