Test export private keys in C++.
Result : fails. Reason : loopback passphrase provider is never called. With default pinentry mode, the passphrase is requested normally and the private key is exported. But this can't be done on a web server. Enclosed in #ifdef DEVTIME.
This commit is contained in:
@@ -255,3 +255,28 @@ const Error GpgMEWorker::CreateSubKey(GpgME::Key& k,
|
||||
delete ctx;
|
||||
return e;
|
||||
}
|
||||
|
||||
#ifdef DEVTIME
|
||||
|
||||
const Error GpgMEWorker::ExportPrivateKey(const char * pattern, string& buffer,
|
||||
const string& passphrase)
|
||||
{
|
||||
GpgME::Data kData;
|
||||
Context * ctx = Context::createForProtocol(Protocol::OpenPGP);
|
||||
LoopbackPassphraseProvider * ppp = new LoopbackPassphraseProvider();
|
||||
ppp->SetPassphrase(passphrase);
|
||||
ctx->setPinentryMode(Context::PinentryMode::PinentryLoopback);
|
||||
ctx->setPassphraseProvider(ppp);
|
||||
|
||||
ctx->setArmor(true);
|
||||
uint flags = Context::ExportSecret;
|
||||
|
||||
Error e = ctx->exportPublicKeys(pattern, kData, flags);
|
||||
buffer = kData.toString(); // Empty
|
||||
|
||||
delete ppp;
|
||||
delete ctx;
|
||||
|
||||
return e;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -134,6 +134,21 @@ public:
|
||||
const string& passphrase,
|
||||
ulong expires = 63072000);
|
||||
|
||||
#ifdef DEVTIME
|
||||
/**
|
||||
* Status : testing
|
||||
* \n Result : fails to export a private key
|
||||
* \n Reason : loopback passphrase provider is never called
|
||||
* \n With default pinentry mode, the password is requested normally
|
||||
* and the private key is exported. But this can't be done on a web server.
|
||||
* @param fpr
|
||||
* @param e
|
||||
* @return
|
||||
*/
|
||||
const Error ExportPrivateKey(const char * pattern, string& buffer,
|
||||
const string& passphrase = "");
|
||||
#endif
|
||||
|
||||
private:
|
||||
Context * m_ctx;
|
||||
// GPG will fetch a password here.
|
||||
|
||||
Reference in New Issue
Block a user