ecc: Implement the "nocomp" flag for key generation.
authorWerner Koch <wk@gnupg.org>
Fri, 8 Nov 2013 09:07:40 +0000 (10:07 +0100)
committerWerner Koch <wk@gnupg.org>
Fri, 8 Nov 2013 09:09:34 +0000 (10:09 +0100)
* cipher/ecc.c (ecc_generate): Support the "nocomp" flag.
* tests/keygen.c (check_ecc_keys): Add a test for it.

Signed-off-by: Werner Koch <wk@gnupg.org>
cipher/ecc.c
doc/gcrypt.texi
tests/keygen.c

index f2a0e82..d62f555 100644 (file)
@@ -483,7 +483,7 @@ ecc_generate (const gcry_sexp_t genparms, gcry_sexp_t *r_skey)
   if (_gcry_mpi_ec_get_affine (x, y, &sk.E.G, ctx))
     log_fatal ("ecgen: Failed to get affine coordinates for %s\n", "G");
   base = _gcry_ecc_ec2os (x, y, sk.E.p);
-  if (sk.E.dialect == ECC_DIALECT_ED25519)
+  if (sk.E.dialect == ECC_DIALECT_ED25519 && !(flags & PUBKEY_FLAG_NOCOMP))
     {
       unsigned char *encpk;
       unsigned int encpklen;
index dd65f9a..1619f0d 100644 (file)
@@ -2232,11 +2232,15 @@ are known:
 @table @code
 
 @item comp
+@itemx nocomp
 @cindex comp
-If supported and not yet the default return ECC points in compact
-(compressed) representation.  The compact representation requires a
-small overhead before a point can be used but halves the size of a to
-be conveyed public key.
+@cindex nocomp
+If supported by the algorithm and curve the @code{comp} flag requests
+that points are returned in compact (compressed) representation.  The
+@code{nocomp} flag requests that points are returned with full
+coordinates.  The default depends on the the algorithm and curve.
+The compact representation requires a small overhead before a point
+can be used but halves the size of a to be conveyed public key.
 
 @item pkcs1
 @cindex PKCS1
index 4796b5c..48663d4 100644 (file)
@@ -416,15 +416,16 @@ check_ecc_keys (void)
     show_sexp ("ECC key:\n", key);
 
   if (verbose)
-    show ("creating ECC key using curve Ed25519 for ECDSA\n");
+    show ("creating ECC key using curve Ed25519 for ECDSA (nocomp)\n");
   rc = gcry_sexp_build (&keyparm, NULL,
-                        "(genkey(ecc(curve Ed25519)(flags)))");
+                        "(genkey(ecc(curve Ed25519)(flags nocomp)))");
   if (rc)
     die ("error creating S-expression: %s\n", gpg_strerror (rc));
   rc = gcry_pk_genkey (&key, keyparm);
   gcry_sexp_release (keyparm);
   if (rc)
-    die ("error generating ECC key using curve Ed25519 for ECDSA: %s\n",
+    die ("error generating ECC key using curve Ed25519 for ECDSA"
+         " (nocomp): %s\n",
          gpg_strerror (rc));
 
   if (verbose > 1)