16.11.2010 14:45, Dr. Stephen Henson пишет:
On Tue, Nov 16, 2010, Valery Blazhnov wrote:

  15.11.2010 19:55, Dr. Stephen Henson ??????????:
On Mon, Nov 15, 2010, Valery Blazhnov wrote:

   I need an advice on usind EVP_SignFinal function with two private key
objects stored on two different tokens. I can use two PKCS11 engine
instances to access these objects in low-level functions. But
EVP_SignFinal
implementation uses EVP_PKEY_CTX_new(pkey, NULL) call internally to
create
internal signing context with NULL engine. Then int_ctx_new function
finds
an engine by NID:
e = ENGINE_get_pkey_meth_engine(id);
and users first found engine instance. As a result only first token can
be
used for signing.
How can I specify right engine instance for signing context without
OpenSSL
source code modifications?

If the EVP_PKEY structure is set up correctly it should use the
appropriate
ENGINE contained within it. This will most likely end up being routed
through
the default EVP_PKEY implementation (as very few new EVP_PKEY
implementations
currently exist) and through the lower level RSA_METHOD (etc) structure
and
then through the ENGINE responsible for the private key.

Steve.
--
Dr Stephen N. Henson. OpenSSL project core developer.
Commercial tech support now available see: http://www.openssl.org
______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
Development Mailing List                       openssl-dev@openssl.org
Automated List Manager                           majord...@openssl.org

Even if EVP_PKEY structure contains correct pointer to corresponding engine
instance then int_ctx_new function ignores it and finds an engine by NID.
Unfortunately there is no "if (pkey->engine) { e = pkey->engine; ... }"
branch inside int_ctx_new function. Would'nt you like to add it there?

Ah that's a bug which I'll fix. However there can't be many (any?) PKCS#11
ENGINEs that implement their own EVP_PKEY_METHOD, they will (almost?) always
have their own RSA_METHOD, DSA_METHOD etc which will get routed to the correct
ENGINE through the lower level APIs.

Steve.
--
Dr Stephen N. Henson. OpenSSL project core developer.
Commercial tech support now available see: http://www.openssl.org
______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
Development Mailing List                       openssl-dev@openssl.org
Automated List Manager                           majord...@openssl.org

I would like to give some additional information to make the question more clear. I use single PKCS#11 engine program but I create separate engine instance for every token and register that instance with its own id. As a result I have several functionally similar engine instances connected to different data devices. So I should guarantee that PKI functions use right target engine to access token key objects. Thank you for your help :)

--
Валерий Блажнов
Ведущий научный сотрудник
ООО "ЛИССИ"
тел. +7(495) 513-33-18 доб.108

______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
Development Mailing List                       openssl-dev@openssl.org
Automated List Manager                           majord...@openssl.org

Reply via email to