Hello

We are trying to use the PKCS11 engine for OpenSSL to interface with a
smart  card reader  "Gemplus GemPC  Twin 00  00". We  are  having some
trouble  when trying  to retrieve  the private  from a  smart  card to
decrypt some  data. The  problem arises when  the wrong PIN  number is
given,  so that method  ENGINE_cleanup somehow  causes the  program to
crash with a bus error.

Below  is  a small  program  that reproduces  what  we  are trying  to
do. We've tested this in FreeBSD 7.2 amd64 and Ubuntu 9.10 i386.

Anyone would have any idea what is going on and how to solve it?

----------------------------------------------------------------------
#include <string>

#include <openssl/engine.h>
#include <openssl/evp.h>

using std::string;

ENGINE *_engine;

int main()
{
  ENGINE_load_dynamic();
  _engine = ENGINE_by_id("dynamic");
  if (_engine == NULL) {
    return -1;
  }

  string enginePath = "/usr/local/lib/engines/engine_pkcs11.so";
  if (!ENGINE_ctrl_cmd_string(_engine, "SO_PATH", enginePath.c_str(),
0)) {
    return -1;
  }

  if (!ENGINE_ctrl_cmd_string(_engine, "LIST_ADD", "1", 0)) {
    return -1;
  }
  
  if (!ENGINE_ctrl_cmd_string(_engine, "LOAD", NULL, 0)) {
    return -1;
  }
  
  string modulePath = "/usr/local/lib/opensc-pkcs11.so";
  if (!ENGINE_ctrl_cmd_string(_engine, "MODULE_PATH",
modulePath.c_str(), 0)) {
    return -1;
  }

  // Wrong PIN
  string pin = "123456";
  if (!ENGINE_ctrl_cmd_string(_engine, "PIN", pin.c_str(), 0)) {
    return -1;
  }
  
  if (!ENGINE_init(_engine)) {
    return -1;
  }

  if (!(ENGINE_set_default(_engine, ENGINE_METHOD_RSA))) {
    return -1;
  }
  
  // Correct KEY ID
  string keyName = "id_9829";
  EVP_PKEY *key = ENGINE_load_private_key(_engine, keyName.c_str(),
NULL, NULL);

  ENGINE_finish(_engine);
  ENGINE_free(_engine);
  ENGINE_cleanup();
  return 0;
}
-------------------------------------------------------------------------

Best regards
Cesar
______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    openssl-users@openssl.org
Automated List Manager                           majord...@openssl.org

Reply via email to