<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<p><font face="Noto Serif">Hi,</font></p>
<p><font face="Noto Serif">I made more tests (see below) regards
your comments and try to put 448 keys on Gnuk too<br>
</font></p>
<p><font face="Noto Serif">Best regards<br>
</font></p>
<div class="moz-cite-prefix">Le 20/02/2025 à 07:20, NIIBE Yutaka a
écrit :<br>
</div>
<blockquote type="cite" cite="mid:87seo9kuh2.fsf@haruna.fsij.org">
<pre wrap="" class="moz-quote-pre">Hello,
Thank you for your testing.
Frédéric SUEL <a class="moz-txt-link-rfc2396E"
href="mailto:frederic.suel@free.fr" moz-do-not-send="true"><frederic.suel@free.fr></a> wrote:
</pre>
<blockquote type="cite">
<pre wrap="" class="moz-quote-pre">I tried to configure the board first with secp256k1 then with Curve 448
and :
-- i can select both algorithms, and the result with the list command is ok
- but, i can't generate keys with secp256k1, i get "Échec de génération
de la clef : Conditions d'utilisation non satisfaites" : fail to
generate key : used conditions not satisfied
</pre>
</blockquote>
<pre wrap="" class="moz-quote-pre">This error may mean, you didn't configure KDF-DO, which is required for
Gnuk 2.2. I wonder if it's the case.</pre>
</blockquote>
--------<br>
<p>KDF-DO is on and i get the same error</p>
<p>---------------------------------------------------------------</p>
<p>LinuxMint gnupg 2.4.4 </p>
<p>gpg --card-edit<br>
can't connect to 'socket:///home/yokosano/.gnupg/log-socket':
Aucun fichier ou dossier de ce nom<br>
<br>
Reader ...........: 1209:2440:FSIJ-2.2-43112959:0<br>
Application ID ...: D276000124010200FFFE431129590000<br>
Application type .: OpenPGP<br>
Version ..........: 2.0<br>
Manufacturer .....: unmanaged S/N range<br>
Serial number ....: 43112959<br>
Name of cardholder: [non positionné]<br>
Language prefs ...: [non positionné]<br>
Salutation .......: <br>
URL of public key : [non positionné]<br>
Login data .......: [non positionné]<br>
Signature PIN ....: forcé<br>
Key attributes ...: secp256k1 secp256k1 secp256k1<br>
Max. PIN lengths .: 127 127 127<br>
PIN retry counter : 3 3 3<br>
Signature counter : 0<br>
KDF setting ......: on<br>
UIF setting ......: Sign=off Decrypt=off Auth=off<br>
Signature key ....: 24B4 8DE1 A850 0937 AB11 600E 8A17 68BE 0C7A
9021<br>
created ....: 2025-02-18 11:17:54<br>
Encryption key....: [none]<br>
Authentication key: [none]<br>
General key info..: [none]<br>
<br>
gpg/carte> admin<br>
Les commandes d'administration sont permises</p>
<p>gpg/carte> generate</p>
<p>Faut-il faire une sauvegarde hors carte de la clef de
chiffrement ? (O/n) n</p>
<p>Faut-il remplacer les clefs existantes ? (o/N) o</p>
<p>Veuillez noter que les configurations d'usine des codes
personnels sont</p>
<p> code personnel = « 123456 » code personnel d'admin. =
« 12345678 ».</p>
<p>Vous devriez les modifier avec la commande --change-pin</p>
<p>Veuillez indiquer le temps pendant lequel cette clef devrait être
valable.</p>
<p> 0 = la clef n'expire pas</p>
<p> <n> = la clef expire dans n jours</p>
<p> <n>w = la clef expire dans n semaines</p>
<p> <n>m = la clef expire dans n mois</p>
<p> <n>y = la clef expire dans n ans</p>
<p>Pendant combien de temps la clef est-elle valable ? (0) 10y</p>
<p>La clef expire le dim. 18 févr. 2035 09:57:37 CET</p>
<p>Est-ce correct ? (o/N) o</p>
<p>GnuPG doit construire une identité pour identifier la clef.</p>
<p>Nom réel : test1</p>
<p>Adresse électronique : <br>
</p>
<p>Commentaire : <br>
</p>
<p>Vous avez sélectionné cette identité :</p>
<p> « test1 »</p>
<p>Changer le (N)om, le (C)ommentaire, l'(A)dresse électronique</p>
<p>ou (O)ui/(Q)uitter ? O</p>
<p>Échec de génération de la clef : Conditions d'utilisation non
satisfaites : used conditions not satisfied<br>
</p>
<p>---------------------------------------------------------------<br>
</p>
<blockquote type="cite" cite="mid:87seo9kuh2.fsf@haruna.fsij.org">
<blockquote type="cite">
<pre wrap="" class="moz-quote-pre">- but, i can't generate keys with Curve 448, i get "Échec de génération
de la clef : Erreur de carte" : fail to generate key : board error
</pre>
</blockquote>
<pre wrap="" class="moz-quote-pre">Ah, Curve448 is not covered by the tests/ in Gnuk.
It seems there is bugs around its private key size. Here is a fix (of today).
Not tested yet.
diff --git a/src/openpgp-do.c b/src/openpgp-do.c
index 2ad7853..2fc5aea 100644
--- a/src/openpgp-do.c
+++ b/src/openpgp-do.c
@@ -1340,7 +1340,7 @@ gpg_do_write_prvkey (enum kind_of_key kk, const uint8_t *key_data,
else if (attr == ALGO_X448)
{
pubkey_len = prvkey_len;
- if (prvkey_len != 56)
+ if (prvkey_len != 64)
return -1;
}
else
@@ -1583,14 +1583,15 @@ proc_key_import (const uint8_t *data, int len)
}
else if (attr == ALGO_X448)
{
- uint8_t priv[56];
+ uint8_t priv[64];
if (len - 12 != 56)
return 0; /* Error. */
memcpy (priv, data+12, 56);
+ memset (priv+56, 0, 64-56);
ecdh_compute_public_x448 (pubkey, priv);
- r = gpg_do_write_prvkey (kk, priv, 56, keystring_admin, pubkey);
+ r = gpg_do_write_prvkey (kk, priv, 64, keystring_admin, pubkey);
}
if (r < 0)
@@ -2287,7 +2288,7 @@ gpg_do_keygen (uint8_t *buf)
enum kind_of_key kk = kkb_to_kk (kk_byte);
int attr = gpg_get_algo_attr (kk);;
int prvkey_len = gpg_get_algo_attr_key_size (kk, GPG_KEY_PRIVATE);
- const uint8_t *prv;
+ uint8_t *prv;
const uint8_t *rnd;
int r = 0;
#define p_q (&buf[3])
@@ -2359,6 +2360,8 @@ gpg_do_keygen (uint8_t *buf)
random_bytes_free (rnd);
prv = d;
ed448_compute_public (pubkey, prv);
+ memset (prv+114, 0, 128-114);
+ prvkey_len = 128;
pubkey[57] = 0;
}
else if (attr == ALGO_X448)
@@ -2369,6 +2372,8 @@ gpg_do_keygen (uint8_t *buf)
rnd = random_bytes_get ();
memcpy (d+32, rnd, 24);
prv = d;
+ prvkey_len = 64;
+ memset (prv+56, 0, 64-56);
ecdh_compute_public_x448 (pubkey, prv);
}
else</pre>
</blockquote>
<p>---------------------------------------------------------------</p>
<p>I tried your patch and i get a error too : board error</p>
<p>--------</p>
<p>gpg --expert --card-edit<br>
can't connect to 'socket:///home/yokosano/.gnupg/log-socket':
Aucun fichier ou dossier de ce nom<br>
<br>
Reader ...........: 1209:2440:FSIJ-2.2-43112959:0<br>
Application ID ...: D276000124010200FFFE431129590000<br>
Application type .: OpenPGP<br>
Version ..........: 2.0<br>
Manufacturer .....: unmanaged S/N range<br>
Serial number ....: 43112959<br>
Name of cardholder: [non positionné]<br>
Language prefs ...: [non positionné]<br>
Salutation .......: <br>
URL of public key : [non positionné]<br>
Login data .......: [non positionné]<br>
Signature PIN ....: forcé<br>
Key attributes ...: ed25519 cv25519 ed25519<br>
Max. PIN lengths .: 127 127 127<br>
PIN retry counter : 3 3 3<br>
Signature counter : 0<br>
KDF setting ......: off<br>
UIF setting ......: Sign=off Decrypt=off Auth=off<br>
Signature key ....: [none]<br>
Encryption key....: [none]<br>
Authentication key: [none]<br>
General key info..: [none]<br>
<br>
gpg/carte> admin<br>
Les commandes d'administration sont permises<br>
<br>
gpg/carte> key-attr<br>
Changing card key attribute for: Signature key<br>
Sélectionnez le type de clef désiré :<br>
(1) RSA<br>
(2) ECC<br>
Quel est votre choix ? 2<br>
Sélectionnez le type de courbe elliptique désiré :<br>
(1) Curve 25519 *default*<br>
(2) Curve 448<br>
(3) NIST P-256<br>
(4) NIST P-384<br>
(5) NIST P-521<br>
(6) Brainpool P-256<br>
(7) Brainpool P-384<br>
(8) Brainpool P-512<br>
(9) secp256k1<br>
Quel est votre choix ? 2<br>
The card will now be re-configured to generate a key of type:
ed448<br>
Note: There is no guarantee that the card supports the requested<br>
key type or size. If the key generation does not succeed,<br>
please check the documentation of your card to see which<br>
key types and sizes are supported.<br>
Changing card key attribute for: Encryption key<br>
Sélectionnez le type de clef désiré :<br>
(1) RSA<br>
(2) ECC<br>
Quel est votre choix ? 2<br>
Sélectionnez le type de courbe elliptique désiré :<br>
(1) Curve 25519 *default*<br>
(2) Curve 448<br>
(3) NIST P-256<br>
(4) NIST P-384<br>
(5) NIST P-521<br>
(6) Brainpool P-256<br>
(7) Brainpool P-384<br>
(8) Brainpool P-512<br>
(9) secp256k1<br>
Quel est votre choix ? 2<br>
The card will now be re-configured to generate a key of type:
cv448<br>
Changing card key attribute for: Authentication key<br>
Sélectionnez le type de clef désiré :<br>
(1) RSA<br>
(2) ECC<br>
Quel est votre choix ? 2<br>
Sélectionnez le type de courbe elliptique désiré :<br>
(1) Curve 25519 *default*<br>
(2) Curve 448<br>
(3) NIST P-256<br>
(4) NIST P-384<br>
(5) NIST P-521<br>
(6) Brainpool P-256<br>
(7) Brainpool P-384<br>
(8) Brainpool P-512<br>
(9) secp256k1<br>
Quel est votre choix ? 2<br>
The card will now be re-configured to generate a key of type:
ed448<br>
<br>
gpg/carte> list<br>
<br>
Reader ...........: 1209:2440:FSIJ-2.2-43112959:0<br>
Application ID ...: D276000124010200FFFE431129590000<br>
Application type .: OpenPGP<br>
Version ..........: 2.0<br>
Manufacturer .....: unmanaged S/N range<br>
Serial number ....: 43112959<br>
Name of cardholder: [non positionné]<br>
Language prefs ...: [non positionné]<br>
Salutation .......: <br>
URL of public key : [non positionné]<br>
Login data .......: [non positionné]<br>
Signature PIN ....: forcé<br>
Key attributes ...: ed448 cv448 ed448<br>
Max. PIN lengths .: 127 127 127<br>
PIN retry counter : 3 3 3<br>
Signature counter : 0<br>
KDF setting ......: off<br>
UIF setting ......: Sign=off Decrypt=off Auth=off<br>
Signature key ....: [none]<br>
Encryption key....: [none]<br>
Authentication key: [none]<br>
General key info..: [none]<br>
<br>
gpg/carte> generate<br>
Faut-il faire une sauvegarde hors carte de la clef de
chiffrement ? (O/n) <br>
<br>
Veuillez noter que les configurations d'usine des codes personnels
sont<br>
code personnel = « 123456 » code personnel d'admin. =
« 12345678 ».<br>
Vous devriez les modifier avec la commande --change-pin<br>
<br>
Veuillez indiquer le temps pendant lequel cette clef devrait être
valable.<br>
0 = la clef n'expire pas<br>
<n> = la clef expire dans n jours<br>
<n>w = la clef expire dans n semaines<br>
<n>m = la clef expire dans n mois<br>
<n>y = la clef expire dans n ans<br>
Pendant combien de temps la clef est-elle valable ? (0) 10y<br>
La clef expire le mer. 21 févr. 2035 17:02:31 CET<br>
Est-ce correct ? (o/N) o<br>
<br>
GnuPG doit construire une identité pour identifier la clef.<br>
<br>
Nom réel : test1<br>
Adresse électronique : <br>
Commentaire : <br>
Vous avez sélectionné cette identité :<br>
« test1 »<br>
<br>
Changer le (N)om, le (C)ommentaire, l'(A)dresse électronique<br>
ou (O)ui/(Q)uitter ? O<br>
Échec de génération de la clef : Erreur de carte : board error<br>
</p>
<p>---------------------------------------------------------------</p>
<p>LinuxMint gnupg 2.4.4 <br>
</p>
<p>I created X448 keys and try to put them on Gnuk <br>
</p>
<p>---------------------------------</p>
<p>gpg --list-secret-keys<br>
<br>
sec ed448/0xAA988F88C70C3DEE 2025-02-23 [SC] [expire :
2075-02-11]</p>
<p> Empreinte de la clef = AA988 F88C7 0C3DE E74BE DFF48 D127D
4BA4E CAEB3 685B3 575E7</p>
<p>uid [ ultime ] tmp</p>
<p>ssb cv448/0x406CC6562774BC84 2025-02-23 [E] [expire :
2075-02-11]</p>
<p>ssb ed448/0x02BB1F8E7A2B268A 2025-02-23 [A] [expire :
2075-02-11]</p>
<p>---------------------------------</p>
<p>gpg --expert --edit-key 0xAA988F88C70C3DEE</p>
<p>gpg (GnuPG) 2.4.4; Copyright (C) 2024 g10 Code GmbH</p>
<p>This is free software: you are free to change and redistribute
it.</p>
<p>There is NO WARRANTY, to the extent permitted by law.</p>
<p>La clef secrète est disponible.</p>
<p>sec ed448/0xAA988F88C70C3DEE</p>
<p> créé : 2025-02-23 expire : 2075-02-11 utilisation : SC <br>
</p>
<p> confiance : ultime validité : ultime</p>
<p>ssb cv448/0x406CC6562774BC84</p>
<p> créé : 2025-02-23 expire : 2075-02-11 utilisation : E <br>
</p>
<p>ssb ed448/0x02BB1F8E7A2B268A</p>
<p> créé : 2025-02-23 expire : 2075-02-11 utilisation : A <br>
</p>
<p>[ ultime ] (1). tmp</p>
<p>gpg> keytocard</p>
<p>Faut-il vraiment déplacer la clef principale ? (o/N) o</p>
<p>Veuillez sélectionner l'endroit où stocker la clef :</p>
<p> (1) Clef de signature</p>
<p> (3) Clef d'authentification</p>
<p>Quel est votre choix ? 1</p>
<p>Faut-il remplacer la clef existante ? (o/N) o</p>
<p>sec ed448/0xAA988F88C70C3DEE</p>
<p> créé : 2025-02-23 expire : 2075-02-11 utilisation : SC <br>
</p>
<p> confiance : ultime validité : ultime</p>
<p>ssb cv448/0x406CC6562774BC84</p>
<p> créé : 2025-02-23 expire : 2075-02-11 utilisation : E <br>
</p>
<p>ssb ed448/0x02BB1F8E7A2B268A</p>
<p> créé : 2025-02-23 expire : 2075-02-11 utilisation : A <br>
</p>
<p>[ ultime ] (1). tmp</p>
<p>Note: the local copy of the secret key will only be deleted with
"save".</p>
<p>gpg> key 1</p>
<p>sec ed448/0xAA988F88C70C3DEE</p>
<p> créé : 2025-02-23 expire : 2075-02-11 utilisation : SC <br>
</p>
<p> confiance : ultime validité : ultime</p>
<p>ssb* cv448/0x406CC6562774BC84</p>
<p> créé : 2025-02-23 expire : 2075-02-11 utilisation : E <br>
</p>
<p>ssb ed448/0x02BB1F8E7A2B268A</p>
<p> créé : 2025-02-23 expire : 2075-02-11 utilisation : A <br>
</p>
<p>[ ultime ] (1). tmp</p>
<p>gpg> keytocard</p>
<p>Veuillez sélectionner l'endroit où stocker la clef :</p>
<p> (2) Clef de chiffrement</p>
<p>Quel est votre choix ? 2</p>
<p>Faut-il remplacer la clef existante ? (o/N) o</p>
<p>sec ed448/0xAA988F88C70C3DEE</p>
<p> créé : 2025-02-23 expire : 2075-02-11 utilisation : SC <br>
</p>
<p> confiance : ultime validité : ultime</p>
<p>ssb* cv448/0x406CC6562774BC84</p>
<p> créé : 2025-02-23 expire : 2075-02-11 utilisation : E <br>
</p>
<p>ssb ed448/0x02BB1F8E7A2B268A</p>
<p> créé : 2025-02-23 expire : 2075-02-11 utilisation : A <br>
</p>
<p>[ ultime ] (1). tmp</p>
<p>Note: the local copy of the secret key will only be deleted with
"save".</p>
<p>gpg> key 1<br>
<br>
sec ed448/0xAA988F88C70C3DEE</p>
<p> créé : 2025-02-23 expire : 2075-02-11 utilisation : SC <br>
</p>
<p> confiance : ultime validité : ultime</p>
<p>ssb cv448/0x406CC6562774BC84</p>
<p> créé : 2025-02-23 expire : 2075-02-11 utilisation : E <br>
</p>
<p>ssb ed448/0x02BB1F8E7A2B268A</p>
<p> créé : 2025-02-23 expire : 2075-02-11 utilisation : A <br>
</p>
<p>[ ultime ] (1). tmp</p>
<p>gpg> key 2</p>
<p><br>
sec ed448/0xAA988F88C70C3DEE</p>
<p> créé : 2025-02-23 expire : 2075-02-11 utilisation : SC <br>
</p>
<p> confiance : ultime validité : ultime</p>
<p>ssb cv448/0x406CC6562774BC84</p>
<p> créé : 2025-02-23 expire : 2075-02-11 utilisation : E <br>
</p>
<p>ssb* ed448/0x02BB1F8E7A2B268A</p>
<p> créé : 2025-02-23 expire : 2075-02-11 utilisation : A <br>
</p>
<p>[ ultime ] (1). tmp</p>
<p>gpg> keytocard</p>
<p>Veuillez sélectionner l'endroit où stocker la clef :</p>
<p> (3) Clef d'authentification</p>
<p>Quel est votre choix ? 2</p>
<p>Choix incorrect.</p>
<p>Quel est votre choix ? 3<br>
</p>
<p>Faut-il remplacer la clef existante ? (o/N) o</p>
<p>sec ed448/0xAA988F88C70C3DEE</p>
<p> créé : 2025-02-23 expire : 2075-02-11 utilisation : SC</p>
<p> confiance : ultime validité : ultime</p>
<p>ssb cv448/0x406CC6562774BC84</p>
<p> créé : 2025-02-23 expire : 2075-02-11 utilisation : E <br>
</p>
<p>ssb* ed448/0x02BB1F8E7A2B268A</p>
<p> créé : 2025-02-23 expire : 2075-02-11 utilisation : A <br>
</p>
<p>[ ultime ] (1). tmp</p>
<p>Note: the local copy of the secret key will only be deleted with
"save".</p>
<p>gpg> key 2</p>
<p>sec ed448/0xAA988F88C70C3DEE</p>
<p> créé : 2025-02-23 expire : 2075-02-11 utilisation : SC <br>
</p>
<p> confiance : ultime validité : ultime</p>
<p>ssb cv448/0x406CC6562774BC84</p>
<p> créé : 2025-02-23 expire : 2075-02-11 utilisation : E <br>
</p>
<p>ssb ed448/0x02BB1F8E7A2B268A</p>
<p> créé : 2025-02-23 expire : 2075-02-11 utilisation : A <br>
</p>
<p>[ ultime ] (1). tmp</p>
<p>gpg> save</p>
<p>---------------------------------</p>
<p>The results is with gpg --list-secret-keys</p>
<p>sec# ed448/0xAA988F88C70C3DEE 2025-02-23 [SC] [expire :
2075-02-11]</p>
<p> Empreinte de la clef = AA988 F88C7 0C3DE E74BE DFF48 D127D
4BA4E CAEB3 685B3 575E7</p>
<p>uid [ ultime ] tmp</p>
<p>ssb> cv448/0x406CC6562774BC84 2025-02-23 [E] [expire :
2075-02-11]</p>
<p>ssb# ed448/0x02BB1F8E7A2B268A 2025-02-23 [A] [expire :
2075-02-11]</p>
<p>--------</p>
<p>It seems that transfert of SC and A keys failed (# indicator). It
succeed with E key and I can encrypt and decrypt with it.</p>
<p>--------</p>
<p><br>
</p>
<p><span style="white-space: pre-wrap">
</span></p>
<br>
<div id="grammalecte_menu_main_button_shadow_host"
style="width: 0px; height: 0px;"></div>
</body>
</html>