Hello!

I have a problem to use the functions of libgpgme-11.dll in my application.
I have downloaded the gnupg-1.4.10, libgpg-error-1.7 and gpg_MadeEasy_1.1.8.
All three packages were installed to c:\usr\local\bin The gnupg-1.4.10 and 
libgpg-error-1.7 were build with ./configure, make, make install.

I have patched the gnupg-1.4.10 as described by Carlo Luciano Bianco.

The gpg_MadeEasy_1.1.8 was configured with ./configure --prefix=c:/usr/local 
--enable-static --with-gpg=c:/usr/local --without-gpgsm and build with make and 
make install.

To build the libraries I used MINGW32.
My operating system is WinXP and Visual Studio 2005 (C++).
In my application I load the libgpgme-11.dll via LoadLibrary(...).

I init GPGME like:
        GPGSETLOCALE pSetLocale = (GPGSETLOCALE) GetProcAddress( hMod, 
"gpgme_set_locale" );
        if( pSetLocale != NULL )
        {
                GPGVERSIONCHK pVersionChk = (GPGVERSIONCHK) GetProcAddress( 
hMod, "gpgme_check_version" );
                if( pVersionChk != NULL )
                {
                        setlocale (LC_ALL, "");
                        pVersionChk( NULL );                                    
                // gpgme_check_version
                        pSetLocale( NULL, LC_CTYPE, setlocale( LC_CTYPE, NULL ) 
);      // gpgme_set_locale     
                }
                                
        GPGSETENGINEINFO pSetEngineInfo =(GPGSETENGINEINFO)GetProcAddress( 
hMod, gpgme_set_engine_info" );
                if( pSetEngineInfo != NULL )
                {
                gpgme_error_t error = pSetEngineInfo( GPGME_PROTOCOL_OpenPGP, 
"gpg.exe", C:/usr/local/bin" );
                if( error != GPG_ERR_NO_ERROR)          // 
gpgme_set_engine_info        
                {
                        freeResult = FreeLibrary( hMod );       // free the DLL 
module
                        return false;
                }
        }

I init CTX like:
        // *** INIT CTX ***
        GPGNEWDATA pNewData = (GPGNEWDATA) GetProcAddress( hMod, "gpgme_new" );
        if( pNewData != NULL )
        {
                gpgme_error_t error = pNewData( &ctx );
                if( error != GPG_ERR_NO_ERROR )
                {
                        GPGRELDATA pRelData = (GPGRELDATA) GetProcAddress( 
hMod, "gpgme_data_release" );
                        if( pRelData != NULL )
                                pRelData( keydata );
                        freeResult = FreeLibrary( hMod );                       
        // free the DLL module
                        return false;
                }
        }

I read the public key file like:
        GPGRead pRead = (GPGRead) GetProcAddress( hMod, 
"gpgme_data_new_from_file" );

        if( pRead != NULL )
        {
                err = pRead( &keydata, cipher_2_asc, 1 );               // 
Method: gpgme_data_new_from_file
                if( err != GPG_ERR_NO_ERROR )
                {
                        // could not create a new data buffer
                        GPGRELDATA pRelData = (GPGRELDATA) GetProcAddress( 
hMod, "gpgme_data_release" );
                        if( pRelData != NULL )
                                pRelData( keydata );
                        freeResult = FreeLibrary( hMod );                       
// free the DLL module
                        return false;
                }
        }


But if I import the public key file into the context CTX like following code I 
get the error 117440662 (invalid crypto engine).

        GPGIMPORT pImport = (GPGIMPORT) GetProcAddress( hMod, "gpgme_op_import" 
);

        if( pImport != NULL )
        {
                err = pImport( ctx, keydata );                                  
// Method: gpgme_op_import
                if( err != GPG_ERR_NO_ERROR )
                {
                        // could not import public key file
                        GPGRELDATA pRelData = (GPGRELDATA) GetProcAddress( 
hMod, "gpgme_data_release" );
                        if( pRelData != NULL )
                                pRelData( keydata );

                        GPGRELCTX pRelCTX = (GPGRELCTX) GetProcAddress( hMod, 
"gpgme_release" );
                        if( pRelCTX != NULL )
                                pRelCTX( ctx );
                        freeResult = FreeLibrary( hMod );                       
// free the DLL module
                        return false;
                }
        }


If I test the following I get the ErrorCode GPG_ERR_INV_ENGINE
        GPGENGINECHK pEngineChk = (GPGENGINECHK) GetProcAddress( hMod, 
"gpgme_engine_check_version" );
        if( pEngineChk != NULL )
        {
                if( pEngineChk( GPGME_PROTOCOL_OpenPGP ) == GPG_ERR_NO_ERROR )
                ...
The version no. of the engine cannot found but the file_name can.

Do you have any ideas how I can fix this error (compile gnupg-1.4.10 with valid 
crypto engine)?

If you need more details please let me know!

A soon answer would be appreciated!

Thank you very much and
best regards


Knud Pehrs
Software-Development
SevenCs GmbH
Ruhrstrasse 90, D-22761 Hamburg
Tel. +49-(0)40 851 72 40
Fax. +49-(0)40 851 72 479
www.sevencs.com

Handelsregister: Amtsgericht Hamburg HRB 102941
Geschäftsführer: John Humphrey


_______________________________________________
Gnupg-users mailing list
Gnupg-users@gnupg.org
http://lists.gnupg.org/mailman/listinfo/gnupg-users

Reply via email to