[PATCH] cipher:kem:ecc: Support secp256k1 by KEM API.

NIIBE Yutaka via Gcrypt-devel <[email protected]> Wed, 25 Jun 2025 10:36:48 +0900
Newsgroups gmane.comp.encryption.gpg.libgcrypt.devel
Message-ID <ca896fe55184a0e65646e06faedaa11a5c3086b8.1750815394.git.gniibe@fsij.org>
* src/gcrypt.h.in (GCRY_KEM_RAW_P256K1): New.
* cipher/kem-ecc.c (algo_to_curve, algo_to_seckey_len): Support
GCRY_KEM_RAW_P256K1.

--

GnuPG-bug-id: 7698
Signed-off-by: NIIBE Yutaka <[email protected]>
---
 cipher/kem-ecc.c |  6 ++++++
 src/gcrypt.h.in  | 13 +++++++------
 2 files changed, 13 insertions(+), 6 deletions(-)

_______________________________________________
Gcrypt-devel mailing list
[email protected]
https://lists.gnupg.org/mailman/listinfo/gcrypt-devel
0001-cipher-kem-ecc-Support-secp256k1-by-KEM-API.patch (text/x-patch, 1.6 KB)
diff --git a/cipher/kem-ecc.c b/cipher/kem-ecc.c
index 55253128..ba78a414 100644
--- a/cipher/kem-ecc.c
+++ b/cipher/kem-ecc.c
@@ -64,6 +64,9 @@ algo_to_curve (int algo)
     case GCRY_KEM_RAW_P521R1:
       return "NIST P-521";
 
+    case GCRY_KEM_RAW_P256K1:
+      return "secp256k1";
+
     default:
       return 0;
     }
@@ -101,6 +104,9 @@ algo_to_seckey_len (int algo)
     case GCRY_KEM_RAW_P521R1:
       return 66;
 
+    case GCRY_KEM_RAW_P256K1:
+      return 32;
+
     default:
       return 0;
     }
diff --git a/src/gcrypt.h.in b/src/gcrypt.h.in
index 4adcd286..e315c865 100644
--- a/src/gcrypt.h.in
+++ b/src/gcrypt.h.in
@@ -1728,12 +1728,13 @@ enum gcry_kem_algos
     /* From here, ECC KEMs */
     GCRY_KEM_RAW_X25519 =31,    /* Using X25519 with Identity KDF */
     GCRY_KEM_RAW_X448   =32,    /* Using X448 with Identity KDF */
-    GCRY_KEM_RAW_BP256  =33,
-    GCRY_KEM_RAW_BP384  =34,
-    GCRY_KEM_RAW_BP512  =35,
-    GCRY_KEM_RAW_P256R1 =36,
-    GCRY_KEM_RAW_P384R1 =37,
-    GCRY_KEM_RAW_P521R1 =38,
+    GCRY_KEM_RAW_BP256  =33,    /* brainpoolP256r1 */
+    GCRY_KEM_RAW_BP384  =34,    /* brainpoolP384r1 */
+    GCRY_KEM_RAW_BP512  =35,    /* brainpoolP512r1 */
+    GCRY_KEM_RAW_P256R1 =36,    /* NIST P-256, aka SECP256R1 */
+    GCRY_KEM_RAW_P384R1 =37,    /* NIST P-384, aka SECP384R1 */
+    GCRY_KEM_RAW_P521R1 =38,    /* NIST P-521, aka SECP521R1 */
+    GCRY_KEM_RAW_P256K1 =39,    /* SECP256R1 */
     GCRY_KEM_DHKEM25519 =41,    /* DHKEM with X25519, HKDF, and SHA256 */
     GCRY_KEM_DHKEM448 =  42,    /* DHKEM with X448, HKDF, and SHA512 */
     GCRY_KEM_DHKEMP256R1=43,