* src/cipher.h (PUBKEY_FLAG_NO_PREFIX): New.
* cipher/pubkey-dilithium.c (mldsa_sign, mldsa_verify): Support
PUBKEY_FLAG_NO_PREFIX.
* cipher/pubkey-util.c (_gcry_pk_util_parse_flaglist): Support
PUBKEY_FLAG_NO_PREFIX.

--

GnuPG-bug-id: 7640
Signed-off-by: NIIBE Yutaka <gni...@fsij.org>
---
 cipher/pubkey-dilithium.c | 16 ++++++++++++----
 cipher/pubkey-util.c      |  2 ++
 src/cipher.h              |  1 +
 3 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/cipher/pubkey-dilithium.c b/cipher/pubkey-dilithium.c
index 31910808..7f87a99f 100644
--- a/cipher/pubkey-dilithium.c
+++ b/cipher/pubkey-dilithium.c
@@ -256,8 +256,12 @@ mldsa_sign (gcry_sexp_t *r_sig, gcry_sexp_t s_data, gcry_sexp_t keyparms)
     }
   else
     randombytes (rnd, RNDBYTES);
-  r = dilithium_sign (info->algo, sig, info->sig_len, data, data_len,
-                      ctx.label, ctx.labellen, sk, rnd);
+  if (ctx.flags & PUBKEY_FLAG_NO_PREFIX)
+    r = dilithium_sign (info->algo, sig, info->sig_len, data, data_len,
+                        NULL, -1, sk, rnd);
+  else
+    r = dilithium_sign (info->algo, sig, info->sig_len, data, data_len,
+                        ctx.label, ctx.labellen, sk, rnd);
   if (r < 0)
     {
       rc = GPG_ERR_INTERNAL;
@@ -343,8 +347,12 @@ mldsa_verify (gcry_sexp_t s_sig, gcry_sexp_t s_data, gcry_sexp_t keyparms)
       goto leave;
     }
 
-  r = dilithium_verify (info->algo, sig, info->sig_len, data, data_len,
-                        ctx.label, ctx.labellen, pk);
+  if (ctx.flags & PUBKEY_FLAG_NO_PREFIX)
+    r = dilithium_verify (info->algo, sig, info->sig_len, data, data_len,
+                          NULL, -1, pk);
+  else
+    r = dilithium_verify (info->algo, sig, info->sig_len, data, data_len,
+                          ctx.label, ctx.labellen, pk);
   if (r < 0)
     {
       rc = GPG_ERR_BAD_SIGNATURE;
diff --git a/cipher/pubkey-util.c b/cipher/pubkey-util.c
index abb44a90..4e8350a8 100644
--- a/cipher/pubkey-util.c
+++ b/cipher/pubkey-util.c
@@ -162,6 +162,8 @@ _gcry_pk_util_parse_flaglist (gcry_sexp_t list,
               encoding = PUBKEY_ENC_RAW;
               flags |= PUBKEY_FLAG_DJB_TWEAK;
             }
+          else if (!memcmp (s, "no-prefix", 9))
+            flags |= PUBKEY_FLAG_NO_PREFIX;
           else if (!igninvflag)
             rc = GPG_ERR_INV_FLAG;
           break;
diff --git a/src/cipher.h b/src/cipher.h
index 5e2e04e3..14cb6fc6 100644
--- a/src/cipher.h
+++ b/src/cipher.h
@@ -45,6 +45,7 @@
 #define PUBKEY_FLAG_SM2            (1 << 16)
 #define PUBKEY_FLAG_PREHASH        (1 << 17)
 #define PUBKEY_FLAG_BYTE_STRING    (1 << 18)
+#define PUBKEY_FLAG_NO_PREFIX      (1 << 19)
 /*
  * The internal flag to select least leak implementation for ECC.
  * It needs to be a distinct value not covered by PUBKEY_* above.
_______________________________________________
Gcrypt-devel mailing list
Gcrypt-devel@gnupg.org
https://lists.gnupg.org/mailman/listinfo/gcrypt-devel

Reply via email to