[{"id":38587,"web_url":"https://patchwork.libcamera.org/comment/38587/","msgid":"<e1ec574f-ff87-4232-b141-29aa999d2618@ideasonboard.com>","date":"2026-04-13T09:18:15","subject":"Re: [PATCH 1/4] libcamera: pub_key: Add ML-DSA-65 signature\n\talgorithm for PQC compliance","submitter":{"id":216,"url":"https://patchwork.libcamera.org/api/people/216/","name":"Barnabás Pőcze","email":"barnabas.pocze@ideasonboard.com"},"content":"Hi\n\n2026. 04. 08. 9:55 keltezéssel, Kate Hsuan írta:\n> As quantum computing advances, traditional signature algorithms are\n> becoming vulnerable. To ensure long-term data security, this change\n> implements ML-DSA-65, the primary Post-Quantum Cryptography (PQC)\n> standard finalized by NIST. This addition prepares for the transition\n> away from RSA, which is slated for deprecation by 2035.\n\nIs there any point in keeping the RSA path in libcamera?\n\n\nRegards,\nBarnabás Pőcze\n\n> \n> Link: https://csrc.nist.gov/projects/post-quantum-cryptography/post-quantum-cryptography-standardization/evaluation-criteria/security-(evaluation-criteria)\n> Link: https://nvlpubs.nist.gov/nistpubs/ir/2024/NIST.IR.8547.ipd.pdf\n> Signed-off-by: Kate Hsuan <hpa@redhat.com>\n> ---\n>   src/libcamera/pub_key.cpp | 55 ++++++++++++++++++++++++++++++++++++---\n>   1 file changed, 52 insertions(+), 3 deletions(-)\n> \n> diff --git a/src/libcamera/pub_key.cpp b/src/libcamera/pub_key.cpp\n> index f1d73a5c..20f13600 100644\n> --- a/src/libcamera/pub_key.cpp\n> +++ b/src/libcamera/pub_key.cpp\n> @@ -14,8 +14,13 @@\n>   #include <openssl/x509.h>\n>   #elif HAVE_GNUTLS\n>   #include <gnutls/abstract.h>\n> +#include <gnutls/gnutls.h>\n>   #endif\n>   \n> +#include \"libcamera/internal/pub_key.h\"\n> +#include <libcamera/base/log.h>\n> +#include <libcamera/base/utils.h>\n> +\n>   /**\n>    * \\file pub_key.h\n>    * \\brief Public key signature verification\n> @@ -23,17 +28,24 @@\n>   \n>   namespace libcamera {\n>   \n> +LOG_DEFINE_CATEGORY(PubKey);\n>   /**\n>    * \\class PubKey\n>    * \\brief Public key wrapper for signature verification\n>    *\n>    * The PubKey class wraps a public key and implements signature verification. It\n> - * only supports RSA keys and the RSA-SHA256 signature algorithm.\n> + * supports RSA keys with the RSA-SHA256 signature algorithm, or ML-DSA-65 keys\n> + * as specified in NIST FIPS 204. The signature algorithm is determined in\n> + * compile time.\n>    */\n>   \n>   /**\n>    * \\brief Construct a PubKey from key data\n>    * \\param[in] key Key data encoded in DER format\n> + *\n> + * The signature algorithm is determined in the compile\n> + * Supported key types are RSA (verified with RSA-SHA256) and ML-DSA-65\n> + * (verified as ML-DSA-65 according to FIPS 204).\n>    */\n>   PubKey::PubKey([[maybe_unused]] Span<const uint8_t> key)\n>   \t: valid_(false)\n> @@ -83,7 +95,8 @@ PubKey::~PubKey()\n>    * \\param[in] sig The signature\n>    *\n>    * Verify that the signature \\a sig matches the signed \\a data for the public\n> - * key. The signture algorithm is hardcoded to RSA-SHA256.\n> + * key. The signature algorithm is determined in compile time. RSA keys use\n> + * RSA-SHA256, while ML-DSA keys use ML-DSA-65 mentioned in FIPS 204.\n>    *\n>    * \\return True if the signature is valid, false otherwise\n>    */\n> @@ -94,6 +107,30 @@ bool PubKey::verify([[maybe_unused]] Span<const uint8_t> data,\n>   \t\treturn false;\n>   \n>   #if HAVE_CRYPTO\n> +\n> +#if WITH_FIPS\n> +\t/* ML-DSA */\n> +\tEVP_MD_CTX *ctx_dsa = EVP_MD_CTX_new();\n> +\tif (!ctx_dsa) {\n> +\t\tLOG(PubKey, Error) << \"Initialize context for ML-DSA failed\";\n> +\t\treturn false;\n> +\t}\n> +\n> +\tif (EVP_DigestVerifyInit(ctx_dsa, nullptr, nullptr, nullptr,\n> +\t\t\t\t pubkey_) <= 0) {\n> +\t\tEVP_MD_CTX_free(ctx_dsa);\n> +\t\tLOG(PubKey, Error) << \"Initialize ML-DSA verification failed\";\n> +\t\treturn false;\n> +\t}\n> +\n> +\tint ret = EVP_DigestVerify(ctx_dsa, sig.data(), sig.size(),\n> +\t\t\t\t   data.data(), data.size());\n> +\tEVP_MD_CTX_free(ctx_dsa);\n> +\tLOG(PubKey, Error) << \"Verify with ML-DSA-65: \" << ret;\n> +\treturn ret == 1;\n> +#else\n> +\t/* RSA with SHA-256 */\n> +\n>   \t/*\n>   \t * Create and initialize a public key algorithm context for signature\n>   \t * verification.\n> @@ -117,7 +154,11 @@ bool PubKey::verify([[maybe_unused]] Span<const uint8_t> data,\n>   \tint ret = EVP_PKEY_verify(ctx, sig.data(), sig.size(), digest,\n>   \t\t\t\t  SHA256_DIGEST_LENGTH);\n>   \tEVP_PKEY_CTX_free(ctx);\n> +\n> +\tLOG(PubKey, Error) << \"Verify with RSA-SHA256: \" << ret;\n>   \treturn ret == 1;\n> +#endif\n> +\n>   #elif HAVE_GNUTLS\n>   \tconst gnutls_datum_t gnuTlsData{\n>   \t\tconst_cast<unsigned char *>(data.data()),\n> @@ -129,9 +170,17 @@ bool PubKey::verify([[maybe_unused]] Span<const uint8_t> data,\n>   \t\tstatic_cast<unsigned int>(sig.size())\n>   \t};\n>   \n> -\tint ret = gnutls_pubkey_verify_data2(pubkey_, GNUTLS_SIGN_RSA_SHA256, 0,\n> +#if WITH_FIPS\n> +\tint ret = gnutls_pubkey_verify_data2(pubkey_, GNUTLS_SIGN_MLDSA65, 0,\n>   \t\t\t\t\t     &gnuTlsData, &gnuTlsSig);\n> +\tLOG(PubKey, Error) << \"Verify with ML-DSA-65: \" << ret;\n> +\treturn ret >= 0;\n> +#else\n> +\tint ret = gnutls_pubkey_verify_data2(pubkey_, GNUTLS_SIGN_RSA_SHA256,\n> +\t\t\t\t\t     0, &gnuTlsData, &gnuTlsSig);\n> +\tLOG(PubKey, Error) << \"Verify with RSA-SHA256: \" << ret;\n>   \treturn ret >= 0;\n> +#endif\n>   #else\n>   \treturn false;\n>   #endif","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 0722EBDCBD\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 13 Apr 2026 09:18:22 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id D660362E7A;\n\tMon, 13 Apr 2026 11:18:20 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id BC78662846\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 13 Apr 2026 11:18:19 +0200 (CEST)","from [192.168.33.49] (185.182.214.8.nat.pool.zt.hu [185.182.214.8])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 7BCDF16A;\n\tMon, 13 Apr 2026 11:16:47 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"kOEBnlvX\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1776071808;\n\tbh=g/q98OUhHzrz3ItBdihxI1H7Vd4qtocu7CgNe+Qc74w=;\n\th=Date:Subject:To:References:From:In-Reply-To:From;\n\tb=kOEBnlvXl8shbLebr9UAj+atCmpHh4DJZZXLC8m7BPT2WBxyYM9uaFzCnNLAfH84I\n\tGwxaWWTsmSSOs4Q2Nc4NdLyFT5HQD8OCiXvxAKQ6ITqia4HOfGWI/R6bS3t1mneflS\n\tQM+7TmKcjUMuTlFIeBa/85NSJMKI8YQJZbsH4bMY=","Message-ID":"<e1ec574f-ff87-4232-b141-29aa999d2618@ideasonboard.com>","Date":"Mon, 13 Apr 2026 11:18:15 +0200","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH 1/4] libcamera: pub_key: Add ML-DSA-65 signature\n\talgorithm for PQC compliance","To":"Kate Hsuan <hpa@redhat.com>, libcamera-devel@lists.libcamera.org","References":"<20260408075540.53309-1-hpa@redhat.com>\n\t<20260408075540.53309-2-hpa@redhat.com>","From":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <barnabas.pocze@ideasonboard.com>","Content-Language":"en-US, hu-HU","In-Reply-To":"<20260408075540.53309-2-hpa@redhat.com>","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"8bit","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":38615,"web_url":"https://patchwork.libcamera.org/comment/38615/","msgid":"<CAEth8oGgkPzPdJDK4+EkLMREw3-OG4nKP--xv3Fr0bPUOcZmbg@mail.gmail.com>","date":"2026-04-15T02:27:12","subject":"Re: [PATCH 1/4] libcamera: pub_key: Add ML-DSA-65 signature\n\talgorithm for PQC compliance","submitter":{"id":105,"url":"https://patchwork.libcamera.org/api/people/105/","name":"Kate Hsuan","email":"hpa@redhat.com"},"content":"Hi Barnabás,\n\nOn Mon, Apr 13, 2026 at 5:18 PM Barnabás Pőcze\n<barnabas.pocze@ideasonboard.com> wrote:\n>\n> Hi\n>\n> 2026. 04. 08. 9:55 keltezéssel, Kate Hsuan írta:\n> > As quantum computing advances, traditional signature algorithms are\n> > becoming vulnerable. To ensure long-term data security, this change\n> > implements ML-DSA-65, the primary Post-Quantum Cryptography (PQC)\n> > standard finalized by NIST. This addition prepares for the transition\n> > away from RSA, which is slated for deprecation by 2035.\n>\n> Is there any point in keeping the RSA path in libcamera?\n\nThank you for reviewing this work.\n\nRSA is expected to be deprecated by 2035, so I think keeping both\nalgorithms for now is better.\nKeeping RSA gives more room to the Linux distributor to prepare the\nPQC migration.\nAfter 2035, RSA can be entirely dropped :)\n\n>\n>\n> Regards,\n> Barnabás Pőcze\n>\n> >\n> > Link: https://csrc.nist.gov/projects/post-quantum-cryptography/post-quantum-cryptography-standardization/evaluation-criteria/security-(evaluation-criteria)\n> > Link: https://nvlpubs.nist.gov/nistpubs/ir/2024/NIST.IR.8547.ipd.pdf\n> > Signed-off-by: Kate Hsuan <hpa@redhat.com>\n> > ---\n> >   src/libcamera/pub_key.cpp | 55 ++++++++++++++++++++++++++++++++++++---\n> >   1 file changed, 52 insertions(+), 3 deletions(-)\n> >\n> > diff --git a/src/libcamera/pub_key.cpp b/src/libcamera/pub_key.cpp\n> > index f1d73a5c..20f13600 100644\n> > --- a/src/libcamera/pub_key.cpp\n> > +++ b/src/libcamera/pub_key.cpp\n> > @@ -14,8 +14,13 @@\n> >   #include <openssl/x509.h>\n> >   #elif HAVE_GNUTLS\n> >   #include <gnutls/abstract.h>\n> > +#include <gnutls/gnutls.h>\n> >   #endif\n> >\n> > +#include \"libcamera/internal/pub_key.h\"\n> > +#include <libcamera/base/log.h>\n> > +#include <libcamera/base/utils.h>\n> > +\n> >   /**\n> >    * \\file pub_key.h\n> >    * \\brief Public key signature verification\n> > @@ -23,17 +28,24 @@\n> >\n> >   namespace libcamera {\n> >\n> > +LOG_DEFINE_CATEGORY(PubKey);\n> >   /**\n> >    * \\class PubKey\n> >    * \\brief Public key wrapper for signature verification\n> >    *\n> >    * The PubKey class wraps a public key and implements signature verification. It\n> > - * only supports RSA keys and the RSA-SHA256 signature algorithm.\n> > + * supports RSA keys with the RSA-SHA256 signature algorithm, or ML-DSA-65 keys\n> > + * as specified in NIST FIPS 204. The signature algorithm is determined in\n> > + * compile time.\n> >    */\n> >\n> >   /**\n> >    * \\brief Construct a PubKey from key data\n> >    * \\param[in] key Key data encoded in DER format\n> > + *\n> > + * The signature algorithm is determined in the compile\n> > + * Supported key types are RSA (verified with RSA-SHA256) and ML-DSA-65\n> > + * (verified as ML-DSA-65 according to FIPS 204).\n> >    */\n> >   PubKey::PubKey([[maybe_unused]] Span<const uint8_t> key)\n> >       : valid_(false)\n> > @@ -83,7 +95,8 @@ PubKey::~PubKey()\n> >    * \\param[in] sig The signature\n> >    *\n> >    * Verify that the signature \\a sig matches the signed \\a data for the public\n> > - * key. The signture algorithm is hardcoded to RSA-SHA256.\n> > + * key. The signature algorithm is determined in compile time. RSA keys use\n> > + * RSA-SHA256, while ML-DSA keys use ML-DSA-65 mentioned in FIPS 204.\n> >    *\n> >    * \\return True if the signature is valid, false otherwise\n> >    */\n> > @@ -94,6 +107,30 @@ bool PubKey::verify([[maybe_unused]] Span<const uint8_t> data,\n> >               return false;\n> >\n> >   #if HAVE_CRYPTO\n> > +\n> > +#if WITH_FIPS\n> > +     /* ML-DSA */\n> > +     EVP_MD_CTX *ctx_dsa = EVP_MD_CTX_new();\n> > +     if (!ctx_dsa) {\n> > +             LOG(PubKey, Error) << \"Initialize context for ML-DSA failed\";\n> > +             return false;\n> > +     }\n> > +\n> > +     if (EVP_DigestVerifyInit(ctx_dsa, nullptr, nullptr, nullptr,\n> > +                              pubkey_) <= 0) {\n> > +             EVP_MD_CTX_free(ctx_dsa);\n> > +             LOG(PubKey, Error) << \"Initialize ML-DSA verification failed\";\n> > +             return false;\n> > +     }\n> > +\n> > +     int ret = EVP_DigestVerify(ctx_dsa, sig.data(), sig.size(),\n> > +                                data.data(), data.size());\n> > +     EVP_MD_CTX_free(ctx_dsa);\n> > +     LOG(PubKey, Error) << \"Verify with ML-DSA-65: \" << ret;\n> > +     return ret == 1;\n> > +#else\n> > +     /* RSA with SHA-256 */\n> > +\n> >       /*\n> >        * Create and initialize a public key algorithm context for signature\n> >        * verification.\n> > @@ -117,7 +154,11 @@ bool PubKey::verify([[maybe_unused]] Span<const uint8_t> data,\n> >       int ret = EVP_PKEY_verify(ctx, sig.data(), sig.size(), digest,\n> >                                 SHA256_DIGEST_LENGTH);\n> >       EVP_PKEY_CTX_free(ctx);\n> > +\n> > +     LOG(PubKey, Error) << \"Verify with RSA-SHA256: \" << ret;\n> >       return ret == 1;\n> > +#endif\n> > +\n> >   #elif HAVE_GNUTLS\n> >       const gnutls_datum_t gnuTlsData{\n> >               const_cast<unsigned char *>(data.data()),\n> > @@ -129,9 +170,17 @@ bool PubKey::verify([[maybe_unused]] Span<const uint8_t> data,\n> >               static_cast<unsigned int>(sig.size())\n> >       };\n> >\n> > -     int ret = gnutls_pubkey_verify_data2(pubkey_, GNUTLS_SIGN_RSA_SHA256, 0,\n> > +#if WITH_FIPS\n> > +     int ret = gnutls_pubkey_verify_data2(pubkey_, GNUTLS_SIGN_MLDSA65, 0,\n> >                                            &gnuTlsData, &gnuTlsSig);\n> > +     LOG(PubKey, Error) << \"Verify with ML-DSA-65: \" << ret;\n> > +     return ret >= 0;\n> > +#else\n> > +     int ret = gnutls_pubkey_verify_data2(pubkey_, GNUTLS_SIGN_RSA_SHA256,\n> > +                                          0, &gnuTlsData, &gnuTlsSig);\n> > +     LOG(PubKey, Error) << \"Verify with RSA-SHA256: \" << ret;\n> >       return ret >= 0;\n> > +#endif\n> >   #else\n> >       return false;\n> >   #endif\n>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 71210BDCBD\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 15 Apr 2026 02:27:30 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 882B562EA2;\n\tWed, 15 Apr 2026 04:27:29 +0200 (CEST)","from us-smtp-delivery-124.mimecast.com\n\t(us-smtp-delivery-124.mimecast.com [170.10.129.124])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id CEAD26271A\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 15 Apr 2026 04:27:27 +0200 (CEST)","from mail-oi1-f198.google.com (mail-oi1-f198.google.com\n\t[209.85.167.198]) by relay.mimecast.com with ESMTP with STARTTLS\n\t(version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id\n\tus-mta-215-1UL3PUMDNMq9Gxp243-tDQ-1; Tue, 14 Apr 2026 22:27:25 -0400","by mail-oi1-f198.google.com with SMTP id\n\t5614622812f47-479285e29ecso6134849b6e.0\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 14 Apr 2026 19:27:24 -0700 (PDT)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=redhat.com header.i=@redhat.com\n\theader.b=\"U6s7HqXt\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n\ts=mimecast20190719; t=1776220046;\n\th=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n\tto:to:cc:cc:mime-version:mime-version:content-type:content-type:\n\tcontent-transfer-encoding:content-transfer-encoding:\n\tin-reply-to:in-reply-to:references:references;\n\tbh=IqwkJsVI1wW4wBKuXCSlqemyDNLfTDyh08yDhDOkxcM=;\n\tb=U6s7HqXtVh6NUPvGGZHjxOF47CYIizV0IrK/JWOt6Nzns24dqNHDZUf7V8NIy0MI0j8Axp\n\th12jMeeI+XsgJvBgI7j0JCKc/CyTnc4nZaA9QCTlwwNXMsIx0L3OMV5lEYLpCivgR0GQkd\n\tsLvjGhy+M3t1xW0dYNj4fh2Up93Y3uI=","X-MC-Unique":"1UL3PUMDNMq9Gxp243-tDQ-1","X-Mimecast-MFC-AGG-ID":"1UL3PUMDNMq9Gxp243-tDQ_1776220044","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20251104; t=1776220044; x=1776824844;\n\th=content-transfer-encoding:cc:to:subject:message-id:date:from\n\t:in-reply-to:references:mime-version:x-gm-gg:x-gm-message-state:from\n\t:to:cc:subject:date:message-id:reply-to;\n\tbh=IqwkJsVI1wW4wBKuXCSlqemyDNLfTDyh08yDhDOkxcM=;\n\tb=SMu+Ga4V22mvGzZgMcPw55KAjCnY7RcTm1wwzIcLqbfbizwGC3eUR31+CTnVSozThB\n\t05y9YnMahqYmGpQUKpGsem8MaExae5u0HHpS75g1OVSqcmt54Vz7abaqGbDuuQOk+qnd\n\tOdMuvMQO+7/kOOqspGV8f/iUWtvOxXZ5uVCQfIHI1LQpSLY4sqj/7MuJv2ZGSeRZrnJb\n\tx8+XbFBLLD4wFPdBOXCHX/5sTyoTB6yTxQDm/voJEtbNlkYCEbYJNgZCP4+Tnb+wj9S8\n\tWYV3j6fR11PnUGPKSo+phvxEx/YPrbA/gxxNV9AxeTMmoLPcnjy2/diQ1WxsUd6Au1IV\n\tNaQg==","X-Gm-Message-State":"AOJu0YwK0BZoeKOkyE3pkqyr/fv7B5ThnjhDmLxfYSSMQMEKA8ffX0/Q\n\t6Duium498Rx82usB5ZHdIedb6hS5f7vp7hkdqaou5CO8H0eV4CmLVCpRK5ckznAu+9SBpPaie02\n\ts5SzxInNAkUus2TwUObMWEERscP6KgKSzeSTBHdXPo4mgFFPJZKEUM9gzJhrDWMEx2v+oxIosdP\n\tBjbASbSBfVy0XjkJN5xSUTu7igKblBGfVsdnJId1sLaPVY9AMw9g==","X-Gm-Gg":"AeBDievnuuS3qB7cu+gr8LqKZY2YLWSkO2oxRlwG7p441MiObeOgSefET025bEJywwQ\n\t2Rhfh9/IgPMUUqCHkZdm5BZgU9Ak3j1wgHJpcSS7295ifho18IXdnbD6WBvNb3WnGOHi4QbC97Y\n\t0iYfsVGGiQXJWhPgX5uEbxp7AwRDoWHO44tFgGPsHpAHX4E0Qyr6ljTiLdVJrZpFAn9xh726pf7\n\tZk8bMmWOLPpMRq1lg==","X-Received":["by 2002:a05:6808:c2b4:b0:45c:881c:e0c0 with SMTP id\n\t5614622812f47-4789f905c23mr11364718b6e.47.1776220044079; \n\tTue, 14 Apr 2026 19:27:24 -0700 (PDT)","by 2002:a05:6808:c2b4:b0:45c:881c:e0c0 with SMTP id\n\t5614622812f47-4789f905c23mr11364710b6e.47.1776220043573;\n\tTue, 14 Apr 2026 19:27:23 -0700 (PDT)"],"MIME-Version":"1.0","References":"<20260408075540.53309-1-hpa@redhat.com>\n\t<20260408075540.53309-2-hpa@redhat.com>\n\t<e1ec574f-ff87-4232-b141-29aa999d2618@ideasonboard.com>","In-Reply-To":"<e1ec574f-ff87-4232-b141-29aa999d2618@ideasonboard.com>","From":"Kate Hsuan <hpa@redhat.com>","Date":"Wed, 15 Apr 2026 10:27:12 +0800","X-Gm-Features":"AQROBzByQS56WjctldFJknEBUxrZFWgQlHxHuNXs1fXvhKz8F-z6U0uZiOFz-N8","Message-ID":"<CAEth8oGgkPzPdJDK4+EkLMREw3-OG4nKP--xv3Fr0bPUOcZmbg@mail.gmail.com>","Subject":"Re: [PATCH 1/4] libcamera: pub_key: Add ML-DSA-65 signature\n\talgorithm for PQC compliance","To":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <barnabas.pocze@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","X-Mimecast-Spam-Score":"0","X-Mimecast-MFC-PROC-ID":"KcjZ1-A8Ys19Ii-TiJI7DD4uZRCl4Uni4daZR59Pdjg_1776220044","X-Mimecast-Originator":"redhat.com","Content-Type":"text/plain; charset=\"UTF-8\"","Content-Transfer-Encoding":"quoted-printable","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]