diff options
Diffstat (limited to 'src/engine-gpgsm.c')
| -rw-r--r-- | src/engine-gpgsm.c | 50 | 
1 files changed, 35 insertions, 15 deletions
| diff --git a/src/engine-gpgsm.c b/src/engine-gpgsm.c index d4a1cf77..3f3230bb 100644 --- a/src/engine-gpgsm.c +++ b/src/engine-gpgsm.c @@ -1433,29 +1433,49 @@ gpgsm_export_ext (void *engine, const char *pattern[], gpgme_export_mode_t mode,  static gpgme_error_t -gpgsm_genkey (void *engine, gpgme_data_t help_data, int use_armor, +gpgsm_genkey (void *engine, +              const char *userid, const char *algo, +              unsigned long reserved, unsigned long expires, +              gpgme_key_t key, unsigned int flags, +              gpgme_data_t help_data, int use_armor,  	      gpgme_data_t pubkey, gpgme_data_t seckey)  {    engine_gpgsm_t gpgsm = engine;    gpgme_error_t err; -  if (!gpgsm || !pubkey || seckey) +  (void)reserved; + +  if (!gpgsm)      return gpg_error (GPG_ERR_INV_VALUE); -  gpgsm->input_cb.data = help_data; -  err = gpgsm_set_fd (gpgsm, INPUT_FD, map_data_enc (gpgsm->input_cb.data)); -  if (err) -    return err; -  gpgsm->output_cb.data = pubkey; -  err = gpgsm_set_fd (gpgsm, OUTPUT_FD, use_armor ? "--armor" -		      : map_data_enc (gpgsm->output_cb.data)); -  if (err) -    return err; -  gpgsm_clear_fd (gpgsm, MESSAGE_FD); -  gpgsm->inline_data = NULL; +  if (help_data) +    { +      if (!pubkey || seckey) +        return gpg_error (GPG_ERR_INV_VALUE); -  err = start (gpgsm, "GENKEY"); -  return err; +      gpgsm->input_cb.data = help_data; +      err = gpgsm_set_fd (gpgsm, INPUT_FD, map_data_enc (gpgsm->input_cb.data)); +      if (err) +        return err; +      gpgsm->output_cb.data = pubkey; +      err = gpgsm_set_fd (gpgsm, OUTPUT_FD, use_armor ? "--armor" +                          : map_data_enc (gpgsm->output_cb.data)); +      if (err) +        return err; +      gpgsm_clear_fd (gpgsm, MESSAGE_FD); +      gpgsm->inline_data = NULL; + +      err = start (gpgsm, "GENKEY"); +      return err; +    } + +  (void)userid; +  (void)expires; +  (void)key; +  (void)flags; + +  /* The new interface has not yet been implemented,  */ +  return gpg_error (GPG_ERR_NOT_IMPLEMENTED);  } | 
