Yes the problem is 128 /* TODO we have asn1 octet string, need to strip off 04 len */ 129 130 a = ec_point + 2; 131 o2i_ECPublicKey(&ec, &a, ec_pointlen-2);
It is assuming the ASN1 is an octet string, with a single length byte But with a p - 521 the length is 2 bytes. 04 Octet string 81 the length is more then 127, and there is one more length byte 85 the length of the octet string. I can get you a possible patch later today. On 9/8/2011 11:48 AM, Felipe Blauth wrote: > I've found where the problem is coming from. It is from OpenSSL's function > *o2i_ECPublicKey*, that is used to convert the asn1 octet string from > PKCS#11 *CKA_EC_POINT* attribute to internal OpenSSL > stuff. This function is called, like you said, at the file src/p11_ec.c from > function *pkcs11_get_ec_private*(). > > I've used *pkcs11-spy*, and it ouputs the following when calling > *C_GetAttributeValue* with *CKA_EC_POINT* parameter from the public key > object: > > 84: C_GetAttributeValue > [in] hSession = 0x10002 > [in] hObject = 0x3 > [in] pTemplate[1]: > CKA_EC_POINT requested with 136 buffer > [out] pTemplate[1]: > CKA_EC_POINT [size : 0x88 (136)] > 04818504 017C713A 5A1ECAB3 0F7B0C54 35099B53 9AC9740A ED157D70 577D9AA3 > 3BB11767 95F02C07 9683AEA0 2C32422D DC9C7C9E 3BB9952B 7D692047 2F8B75D0 > A23BB5EF CC3E01BE 240FFAFD 64A2F090 D2E8556F C108D251 4C9AD53C 270BE2AD > CA829853 57D26AF3 A65806FD 82CE2011 58C02629 B8E90961 4C00887E DD4184C7 > 37CE192C 2AB5ED47 > Returned: 0 CKR_OK > > *ec_pointlen* variable is, therefore, set to 136 bytes. After calling > *o2i_ECPublicKey* OpenSSL puts the following error in its stack: > *error:10067066:elliptic curve routines:ec_GFp_simple_oct2point:invalid > encoding* > > So we have some encoding problem. By the way, why we should increment the > pointer by 2 before calling *o2i_ECPublicKey**? *Like you did in the > following: > ... > /* PKCS#11 returns ASN1 octstring*/ > const unsigned char * a; > /* TODO we have asn1 octet string, need to strip off 04 len */ > a = ec_point + 2; > o2i_ECPublicKey(&ec, &a, ec_pointlen-2); > ... > > 2011/9/7 Douglas E. Engert <deeng...@anl.gov <mailto:deeng...@anl.gov>> > > > > On 9/6/2011 4:53 PM, Felipe Blauth wrote: > > I've tested your mods and they work well =). I can sign and verify > with most EC keys (I've tested with p-192, p-224, p-384 and p-521). However I > cannot load public keys when using p-521 curves. It > seems that I can load the private key and sign, but the public key is > not loaded. > > I confess that I didn't look much at engine_pkcs11 source code, but > if you could give me some appointments I can try to fix that. > > > It is not clear where the error could be, it could be in the actual > encoding of the public key, or the ASN1 decoding or in in some size limit. > All the other keys are a multiple of 8 bits. The 521 is not, > and thus the asn1 octet would need an extra byte. Look at the > libp11 src/p11_ec.c and pkcs11_get_ec_private() and the ec_pointlen > variable. > > Do you have a dump of the public key? > > If you are using OpenSC's PKCS#11, you could turn on the OpenSC debug, > by adding to the opensc.conf someting like: > debug = 7; > debug_file = /tmp/opensc-debug.log; > > You could use the OpenSC pkcs11-spy.so to trace the PKCS#11 calls, > that should show the public key being transfered. This can > work with any PKCS#11 module including the opensc-pkcs11.so > > Set the environment variables: > > export PKCS11SPY=/path/to/your/pkcs11__.module.so > <http://pkcs11.module.so> > export PKCS11SPY_OUTPUT=/tmp/tb.spy.__txt > > > OpenSSL error is the following, after loading the key: > error:10067066:elliptic curve > routines:ec_GFp_simple___oct2point:invalid encoding > > Regards, > > 2011/8/13 Felipe Blauth <f...@inf.ufsc.br <mailto:f...@inf.ufsc.br> > <mailto:f...@inf.ufsc.br <mailto:f...@inf.ufsc.br>>> > > > Thank you, I'll check it out. > > 2011/8/12 Douglas E. Engert <deeng...@anl.gov > <mailto:deeng...@anl.gov> <mailto:deeng...@anl.gov <mailto:deeng...@anl.gov>>> > > > No it has not been incorporated because it requires an OpenSSL > internal header file ecs_locl.h, thus making it impractical to > compile in to any package. > > This is a known bug: > > > http://rt.openssl.org/Ticket/__Display.html?id=2459&user=__guest&pass=guest > <http://rt.openssl.org/Ticket/Display.html?id=2459&user=guest&pass=guest> > > <http://rt.openssl.org/Ticket/__Display.html?id=2459&user=__guest&pass=guest > <http://rt.openssl.org/Ticket/Display.html?id=2459&user=guest&pass=guest>> > > > It also appeared on the OpenSSL mailing list. > > The patch should still work. Please try it, and you can > also add comments to the OpenSSL bug report. > > > On 8/12/2011 2:12 PM, Felipe Blauth wrote: > > Hello. > > > > I've started using engine_pkcs11 to access PKCS #11 tokens from > OpenSSL EVP_PKEY's trough "ENGINE_load_<key_type>_key" methods. It works very > well with RSA keys, but it doesn't recognize > ECDSA keys. > > > > Searching trough the web, I've found that Douglas had a patch for > it at > http://www.mail-archive.com/__opensc-devel@lists.opensc-__project.org/msg07785.html > > <http://www.mail-archive.com/opensc-devel@lists.opensc-project.org/msg07785.html>. > > > > Was that ever incorporated? I couldn't find in the latest > snapshots. > > > > Thank you very much. > > > > -- > > Felipe Menegola Blauth > > > > > > > > _________________________________________________ > > opensc-devel mailing list > > opensc-devel@lists.opensc-__project.org > <mailto:opensc-devel@lists.opensc-project.org> > <mailto:opensc-devel@lists.__opensc-project.org > <mailto:opensc-devel@lists.opensc-project.org>> > > > http://www.opensc-project.org/__mailman/listinfo/opensc-devel > <http://www.opensc-project.org/mailman/listinfo/opensc-devel> > > -- > > Douglas E. Engert <deeng...@anl.gov > <mailto:deeng...@anl.gov> <mailto:deeng...@anl.gov <mailto:deeng...@anl.gov>>> > > Argonne National Laboratory > 9700 South Cass Avenue > Argonne, Illinois 60439 > (630) 252-5444 <tel:%28630%29%20252-5444> <tel:%28630%29%20252-5444> > _________________________________________________ > opensc-devel mailing list > opensc-devel@lists.opensc-__project.org > <mailto:opensc-devel@lists.opensc-project.org> > <mailto:opensc-devel@lists.__opensc-project.org > <mailto:opensc-devel@lists.opensc-project.org>> > > http://www.opensc-project.org/__mailman/listinfo/opensc-devel > <http://www.opensc-project.org/mailman/listinfo/opensc-devel> > > > > > -- > Felipe Menegola Blauth > > > > > -- > Felipe Menegola Blauth > > > -- > > Douglas E. Engert <deeng...@anl.gov <mailto:deeng...@anl.gov>> > Argonne National Laboratory > 9700 South Cass Avenue > Argonne, Illinois 60439 > (630) 252-5444 <tel:%28630%29%20252-5444> > > > > > -- > Felipe Menegola Blauth -- Douglas E. Engert <deeng...@anl.gov> Argonne National Laboratory 9700 South Cass Avenue Argonne, Illinois 60439 (630) 252-5444 _______________________________________________ opensc-devel mailing list opensc-devel@lists.opensc-project.org http://www.opensc-project.org/mailman/listinfo/opensc-devel