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;
|
delete ctx;
|
||||||
return e;
|
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,
|
const string& passphrase,
|
||||||
ulong expires = 63072000);
|
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:
|
private:
|
||||||
Context * m_ctx;
|
Context * m_ctx;
|
||||||
// GPG will fetch a password here.
|
// GPG will fetch a password here.
|
||||||
|
|||||||
Reference in New Issue
Block a user