doc/
authorMarcus Brinkmann <mb@g10code.com>
Tue, 19 Nov 2002 16:41:17 +0000 (16:41 +0000)
committerMarcus Brinkmann <mb@g10code.com>
Tue, 19 Nov 2002 16:41:17 +0000 (16:41 +0000)
2002-11-19  Marcus Brinkmann  <marcus@g10code.de>

* gpgme.texi (Generating Keys): Document new argument to
gpgme_op_genkey.

gpgme/
2002-11-19  Marcus Brinkmann  <marcus@g10code.de>

* genkey.c: Only include <config.h> if [HAVE_CONFIG_H].
(struct genkey_result_s): Add new member FPR.
(_gpgme_release_genkey_result): Free RESULT->fpr if set.
(genkey_status_handler): Extract the fingerprint from the status
line.
(gpgme_op_genkey): Add new argument FPR and return the fingerprint
in it.
* gpgme.h: Adjust prototype of gpgme_op_genkey.

tests/
2002-11-19  Marcus Brinkmann  <marcus@g10code.de>

* gpg/t-genkey.c (main): Add missing argument to gpgme_op_genkey
invocation.
CVSk: ----------------------------------------------------------------------

NEWS
doc/ChangeLog
doc/gpgme.texi
gpgme/ChangeLog
gpgme/genkey.c
gpgme/gpgme.h
gpgmeplug/ChangeLog
gpgmeplug/gpgmeplug.c
tests/ChangeLog
tests/gpg/t-genkey.c

diff --git a/NEWS b/NEWS
index 9a5ea04..ae19a41 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -22,6 +22,7 @@ gpgme_op_verify                       CHANGED: Take different data objects for
                                signed text and plain text.
 gpgme_op_verify_start          CHANGED: See gpgme_op_verify.
 gpgme_check_engine             REMOVED: Deprecated since 0.3.0.
+gpgme_op_genkey                        CHANGED: New parameter FPR.
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 Noteworthy changes in version 0.3.11 (2002-09-20)
index 38640cf..64261de 100644 (file)
@@ -1,3 +1,8 @@
+2002-11-19  Marcus Brinkmann  <marcus@g10code.de>
+
+       * gpgme.texi (Generating Keys): Document new argument to
+       gpgme_op_genkey.
+
 2002-11-05  Marcus Brinkmann  <marcus@g10code.de>
 
        * gpgme.texi (Verify): Fix prototype of gpgme_get_sig_key.
index 2663f07..7c114b4 100644 (file)
@@ -1803,7 +1803,7 @@ The function @code{gpgme_key_release} is an alias for
 @cindex key, creation
 @cindex key ring, add
 
-@deftypefun GpgmeError gpgme_op_genkey (@w{GpgmeCtx @var{ctx}}, @w{const char *@var{parms}}, @w{GpgmeData @var{pubkey}}, @w{GpgmeData @var{seckey}})
+@deftypefun GpgmeError gpgme_op_genkey (@w{GpgmeCtx @var{ctx}}, @w{const char *@var{parms}}, @w{GpgmeData @var{pubkey}}, @w{GpgmeData @var{seckey}}, @w{char **@var{fpr}})
 The function @code{gpgme_op_genkey} generates a new key pair in the
 context @var{ctx} and puts it into the standard key ring if both
 @var{pubkey} and @var{seckey} are @code{NULL}.  In this case the
@@ -1856,6 +1856,13 @@ for now is ``internal''.  The content of the @code{GnupgKeyParms}
 container is passed verbatim to GnuPG.  Control statements are not
 allowed.
 
+If @var{fpr} is not a null pointer, the function succeeds, and the
+crypto engine supports it, *@var{fpr} will contain a string with the
+fingerprint of the key, allocated with @code{malloc}.  If both a
+primary and a sub key was generated, the fingerprint of the primary
+key will be returned.  If the crypto engine does not provide the
+fingerprint, *@var{fpr} will be a null pointer.
+
 The function returns @code{GPGME_No_Error} if the operation could be
 started successfully, @code{GPGME_Invalid_Value} if @var{parms} is not
 a valid XML string, @code{GPGME_Not_Supported} if @var{pubkey} or
index f420a73..a2c9175 100644 (file)
@@ -1,5 +1,16 @@
 2002-11-19  Marcus Brinkmann  <marcus@g10code.de>
 
+       * genkey.c: Only include <config.h> if [HAVE_CONFIG_H].
+       (struct genkey_result_s): Add new member FPR.
+       (_gpgme_release_genkey_result): Free RESULT->fpr if set.
+       (genkey_status_handler): Extract the fingerprint from the status
+       line.
+       (gpgme_op_genkey): Add new argument FPR and return the fingerprint
+       in it.
+       * gpgme.h: Adjust prototype of gpgme_op_genkey.
+
+2002-11-19  Marcus Brinkmann  <marcus@g10code.de>
+
        * rungpg.c (gpg_keylist): Add --with-fingerprint to gpg invocation
        twice, to get fingerprints on subkeys.  Suggested by Timo Schulz
        <twoaday@freakmail.de>.
index ab36cdc..b4e6708 100644 (file)
@@ -1,25 +1,26 @@
-/* genkey.c -  key generation
*     Copyright (C) 2000 Werner Koch (dd9jn)
*      Copyright (C) 2001, 2002 g10 Code GmbH
- *
* This file is part of GPGME.
- *
- * GPGME is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
- *
- * GPGME is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
- *
* You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
+/* genkey.c - Key generation.
+   Copyright (C) 2000 Werner Koch (dd9jn)
+   Copyright (C) 2001, 2002 g10 Code GmbH
+
  This file is part of GPGME.
+   GPGME is free software; you can redistribute it and/or modify it
  under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2 of the License, or
  (at your option) any later version.
+   GPGME is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  General Public License for more details.
  You should have received a copy of the GNU General Public License
+   along with GPGME; if not, write to the Free Software Foundation,
+   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+#if HAVE_CONFIG_H
 #include <config.h>
+#endif
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -34,6 +35,7 @@ struct genkey_result_s
 {
   int created_primary : 1;
   int created_sub : 1;
+  char *fpr;
 };
 
 
@@ -42,9 +44,12 @@ _gpgme_release_genkey_result (GenKeyResult result)
 {
   if (!result)
     return;
+  if (result->fpr)
+    free (result->fpr);
   free (result);
 }
 
+
 static void
 genkey_status_handler (GpgmeCtx ctx, GpgmeStatusCode code, char *args)
 {
@@ -63,6 +68,14 @@ genkey_status_handler (GpgmeCtx ctx, GpgmeStatusCode code, char *args)
            ctx->result.genkey->created_primary = 1;
          if (*args == 'B' || *args == 'S')
            ctx->result.genkey->created_sub = 1;
+         if (args[1] == ' ')
+           {
+             if (ctx->result.genkey->fpr)
+               free (ctx->result.genkey->fpr);
+             ctx->result.genkey->fpr = strdup (&args[2]);
+             if (!ctx->result.genkey->fpr)
+               ctx->error = mk_error (Out_Of_Core);
+           }
        }
       break;
 
@@ -78,6 +91,7 @@ genkey_status_handler (GpgmeCtx ctx, GpgmeStatusCode code, char *args)
     }
 }
 
+
 static GpgmeError
 _gpgme_op_genkey_start (GpgmeCtx ctx, int synchronous, const char *parms,
                        GpgmeData pubkey, GpgmeData seckey)
@@ -183,7 +197,8 @@ gpgme_op_genkey_start (GpgmeCtx ctx, const char *parms,
  * @parms: XML string with the key parameters
  * @pubkey: Returns the public key
  * @seckey: Returns the secret key
- * 
+ * @fpr: Returns the fingerprint of the key.
+ *
  * Generate a new key and store the key in the default keyrings if both
  * @pubkey and @seckey are NULL.  If @pubkey and @seckey are given, the newly
  * created key will be returned in these data objects.
@@ -193,10 +208,22 @@ gpgme_op_genkey_start (GpgmeCtx ctx, const char *parms,
  **/
 GpgmeError
 gpgme_op_genkey (GpgmeCtx ctx, const char *parms,
-                 GpgmeData pubkey, GpgmeData seckey)
+                 GpgmeData pubkey, GpgmeData seckey,
+                char **fpr)
 {
   GpgmeError err = _gpgme_op_genkey_start (ctx, 1, parms, pubkey, seckey);
   if (!err)
     err = _gpgme_wait_one (ctx);
+  if (!err && fpr)
+    {
+      if (ctx->result.genkey->fpr)
+       {
+         *fpr = strdup (ctx->result.genkey->fpr);
+         if (!*fpr)
+           return mk_error (Out_Of_Core);
+       }
+      else
+       *fpr = NULL;
+    }
   return err;
 }
index 74fa259..90eef03 100644 (file)
@@ -1,23 +1,22 @@
-/* gpgme.h -  GnuPG Made Easy
- *     Copyright (C) 2000 Werner Koch (dd9jn)
- *      Copyright (C) 2001, 2002 g10 Code GmbH
- *
- * This file is part of GPGME.
- *
- * GPGME is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GPGME is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
+/* gpgme.h - Public interface to GnuPG Made Easy.
+   Copyright (C) 2000 Werner Koch (dd9jn)
+   Copyright (C) 2001, 2002 g10 Code GmbH
+
+   This file is part of GPGME.
+   GPGME is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   GPGME is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+   You should have received a copy of the GNU General Public License
+   along with GPGME; if not, write to the Free Software Foundation,
+   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 #ifndef GPGME_H
 #define GPGME_H
@@ -115,10 +114,10 @@ GpgmeDataType;
 /* The possible encoding mode of GpgmeData objects.  */
 typedef enum
   {
-    GPGME_DATA_ENCODING_NONE   = 0, /* i.e. not specified */
+    GPGME_DATA_ENCODING_NONE   = 0,    /* I.e. not specified.  */
     GPGME_DATA_ENCODING_BINARY = 1,
-    GPGME_DATA_ENCODING_BASE64 = 2, 
-    GPGME_DATA_ENCODING_ARMOR  = 3 /* Either PEM or OpenPGP Armor */
+    GPGME_DATA_ENCODING_BASE64 = 2,
+    GPGME_DATA_ENCODING_ARMOR  = 3     /* Either PEM or OpenPGP Armor.  */
   }
 GpgmeDataEncoding;
 
@@ -137,20 +136,20 @@ typedef enum
   }
 GpgmeSigStat;
 
-/* Flags used with the GPGME_ATTR_SIG_SUMMARY. */
+/* Flags used with the GPGME_ATTR_SIG_SUMMARY.  */
 enum 
   {
-    GPGME_SIGSUM_VALID       = 0x0001,  /* The signature is fully valid */
-    GPGME_SIGSUM_GREEN       = 0x0002,  /* The signature is good. */
-    GPGME_SIGSUM_RED         = 0x0004,  /* The signature is bad. */
-    GPGME_SIGSUM_KEY_REVOKED = 0x0010,  /* One key has been revoked. */
-    GPGME_SIGSUM_KEY_EXPIRED = 0x0020,  /* One key has expired. */
-    GPGME_SIGSUM_SIG_EXPIRED = 0x0040,  /* The signature has expired. */
-    GPGME_SIGSUM_KEY_MISSING = 0x0080,  /* Can't verify: key missing. */
-    GPGME_SIGSUM_CRL_MISSING = 0x0100,  /* CRL not available. */
-    GPGME_SIGSUM_CRL_TOO_OLD = 0x0200,  /* Available CRL is too old. */
-    GPGME_SIGSUM_BAD_POLICY  = 0x0400,  /* A policy was not met. */
-    GPGME_SIGSUM_SYS_ERROR   = 0x0800   /* A system error occured. */
+    GPGME_SIGSUM_VALID       = 0x0001,  /* The signature is fully valid */
+    GPGME_SIGSUM_GREEN       = 0x0002,  /* The signature is good.  */
+    GPGME_SIGSUM_RED         = 0x0004,  /* The signature is bad.  */
+    GPGME_SIGSUM_KEY_REVOKED = 0x0010,  /* One key has been revoked.  */
+    GPGME_SIGSUM_KEY_EXPIRED = 0x0020,  /* One key has expired.  */
+    GPGME_SIGSUM_SIG_EXPIRED = 0x0040,  /* The signature has expired.  */
+    GPGME_SIGSUM_KEY_MISSING = 0x0080,  /* Can't verify: key missing.  */
+    GPGME_SIGSUM_CRL_MISSING = 0x0100,  /* CRL not available.  */
+    GPGME_SIGSUM_CRL_TOO_OLD = 0x0200,  /* Available CRL is too old.  */
+    GPGME_SIGSUM_BAD_POLICY  = 0x0400,  /* A policy was not met.  */
+    GPGME_SIGSUM_SYS_ERROR   = 0x0800   /* A system error occured.  */
   };
 
 
@@ -716,11 +715,14 @@ GpgmeError gpgme_op_export (GpgmeCtx ctx, GpgmeRecipients recp,
 
 /* Generate a new keypair and add it to the keyring.  PUBKEY and
    SECKEY should be null for now.  PARMS specifies what keys should be
-   generated.  */
+   generated.  On success, if *FPR is non-null, it contains a
+   malloc()'ed string with the fingerprint of the generated key on
+   success.  */
 GpgmeError gpgme_op_genkey_start (GpgmeCtx ctx, const char *parms,
                                  GpgmeData pubkey, GpgmeData seckey);
 GpgmeError gpgme_op_genkey (GpgmeCtx ctx, const char *parms,
-                           GpgmeData pubkey, GpgmeData seckey);
+                           GpgmeData pubkey, GpgmeData seckey,
+                           char **fpr);
 
 /* Delete KEY from the keyring.  If ALLOW_SECRET is non-zero, secret
    keys are also deleted.  */
index d9c6d9d..f098ba1 100644 (file)
@@ -1,3 +1,8 @@
+2002-11-19  Marcus Brinkmann  <marcus@g10code.de>
+
+       * gpgmeplug.c (requestDecentralCertificate): Add new argument to
+       gpgme_op_genkey invocation.
+
 2002-10-12  Marcus Brinkmann  <marcus@g10code.de>
 
        * gpgmeplug.c (checkMessageSignature): Update call to
index 8391593..8a91610 100644 (file)
@@ -1802,7 +1802,7 @@ bool requestDecentralCertificate( const char* certparms,
     gpgme_set_protocol (ctx, GPGME_PROTOCOL_CMS);
     /* Don't ASCII-armor, the MUA will use base64 encoding */
     /*    gpgme_set_armor (ctx, 1); */
-    err = gpgme_op_genkey (ctx, certparms, pub, NULL );
+    err = gpgme_op_genkey (ctx, certparms, pub, NULL, NULL);
     fprintf( stderr,  "3: gpgme returned %d\n", err );
     if( err != GPGME_No_Error ) {
         gpgme_data_release( pub );
index 3ef332a..9efd160 100644 (file)
@@ -1,3 +1,8 @@
+2002-11-19  Marcus Brinkmann  <marcus@g10code.de>
+
+       * gpg/t-genkey.c (main): Add missing argument to gpgme_op_genkey
+       invocation.
+
 2002-10-09  Marcus Brinkmann  <marcus@g10code.de>
 
        * gpg/t-decrypt.c (print_data): Update to new gpgme_data_read
index 09206fb..4bb59b2 100644 (file)
@@ -70,7 +70,7 @@ main (int argc, char **argv )
     if (!parms)
         exit (8);
     sprintf (parms, format, ++count );
-    err = gpgme_op_genkey (ctx, parms, NULL, NULL );
+    err = gpgme_op_genkey (ctx, parms, NULL, NULL, NULL);
     fail_if_err (err);
     free (parms);