Additional parameter for returning the cert length

This commit is contained in:
Matthias Kalle Dalheimer 2002-04-18 07:38:15 +00:00
parent 76cc7612bd
commit 9da6baf11f
2 changed files with 30 additions and 12 deletions

View File

@ -1600,9 +1600,11 @@ const char* requestCertificateDialog( void );
/*! \ingroup groupCertAct /*! \ingroup groupCertAct
\brief Generates a prototype certificate with the data provided \brief Generates a prototype certificate with the data provided
in the four parameter. in the four parameter. The memory returned in \a generatedKey
must be freed with free() by the caller.
*/ */
bool requestDecentralCertificate( const char* certparms, char** generatedKey ); bool requestDecentralCertificate( const char* certparms,
char** generatedKey, int* keyLength );
/*! \ingroup groupCertAct /*! \ingroup groupCertAct
\brief Requests a certificate in a PSE from the CA \brief Requests a certificate in a PSE from the CA

View File

@ -1530,23 +1530,39 @@ bool decryptAndCheckMessage( const char* ciphertext,
const char* requestCertificateDialog(){ return 0; } const char* requestCertificateDialog(){ return 0; }
bool requestDecentralCertificate( const char* certparms, char** generatedKey ) bool requestDecentralCertificate( const char* certparms,
char** generatedKey, int* length )
{ {
GpgmeError err;
GpgmeCtx ctx; GpgmeCtx ctx;
GpgmeError err = gpgme_new (&ctx); GpgmeData pub, result;
int len;
err = gpgme_data_new (&pub);
if( err != GPGME_No_Error ) if( err != GPGME_No_Error )
return false; return false;
gpgme_set_protocol (ctx, GPGMEPLUG_PROTOCOL); err = gpgme_new (&ctx);
if( err != GPGME_No_Error ) {
gpgme_set_armor (ctx, __GPGMEPLUG_SIGNATURE_CODE_IS_BINARY ? 0 : 1); gpgme_data_release( pub );
if( gpgme_op_genkey( ctx, certparms, NULL, NULL ) == GPGME_No_Error )
return true;
else
return false; return false;
}
gpgme_set_protocol (ctx, GPGME_PROTOCOL_CMS);
/* We want binary, so comment this: gpgme_set_armor (ctx, 1); */
err = gpgme_op_genkey (ctx, certparms, pub, NULL );
if( err != GPGME_No_Error ) {
gpgme_data_release( pub );
gpgme_release( ctx );
return false;
}
gpgme_release (ctx); gpgme_release (ctx);
*generatedKey = gpgme_data_release_and_get_mem (pub, &len);
*length = len;
/* The buffer generatedKey contains the LEN bytes you want */
// Caller is responsible for freeing
} }
bool requestCentralCertificateAndPSE( const char* name, bool requestCentralCertificateAndPSE( const char* name,