On 12/4/2011 11:00 AM, Viktor Tarasov wrote:
> Hello,
>
> Le 02/12/2011 16:46, Hunter William a écrit :
>> I've attached a patch for some updates that I've made to Viktor's 
>> secure-messaging branch. Sorry about the size and number of changes - I 
>> didn't initially think that there would be so many. The commit details are 
>> after this message. I've used the secure-messaging branch because it seems 
>> to have the most up to date minidriver and IAS/ECC module. (I am working on 
>> an IAS/ECC card)
>>
>> I now have both the PKCS#11 module and Minidriver working fairly well for 
>> Document signing, Email signing and decryption, and client SSL certificate 
>> verification. And also with PGP, although this is a very clunky interface. 
>> This is all on a read-only IAS/ECC card.
>>
>> There may still be some threading/data issues, which Outlook seems to bring 
>> to the surface quite easily, although the workarounds I have added seem to 
>> have helped, and Outlook is now just very slow (which is probably normal!).
>>
>> Let me know if you have any questions about the changes. Most of them should 
>> be fairly clean. One I forgot to mention in the commit log in the patch is a 
>> workaround for Windows XP where CardDeleteContext may be called after DETACH 
>> PROCESS, with bad results (pCardData becomes NULL at some point in the 
>> middle of CardDeleteContext!).
>>
>> The one that might need the most thought is the generation of the GUID. The 
>> way it was
 >> previously done failed on perfectly valid cards if the ID's were too short. 
 >> Plus, by just
>> using a portion of the ID value, the GUID may no longer be unique. However, 
>> what I do also
>> has some issues (SHA1 on the ID's).
 >> For one, there are issues with changing the GUID on
>> existing keys, as they will need to be reloaded into the Microsoft keystore. 
>> And it is
>> probably also not desirable to have the GUID change depending on whether the 
>> library was
>> compiled with openssl or not. But it seems clear that some sort of hash or 
>> checksum is
>> the right way to go. And with the minidriver still in beta, these kind of 
>> changes should
>> be expected by users.

I agree with all of the above.

Before the minidriver can move beyond experimental , the issue of a consistent
generation of the GUID must be found, Having it depend on OpenSSL's inclusion 
is not
acceptable.

>
> Thank you, applied in
> https://github.com/viktorTarasov/OpenSC/commit/911535b94494abb2c570fbd5097e62ae7d7429e3
>
>
> Douglas, will you agree with the following from this commit ?

Since the minidriver is being built within the Microsoft Crypto
framework,  rather then using OpenSSL SHA1, we could use a Microsoft hash
function.

Thus we do not depend on #ifdef ENABLE_OPENSSL for this one purpose.

 From this example:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa382371(v=vs.85).aspx

It look like the needed lines (plus some error checking added)
could do this:

HCRYPTPROV hProv;
BYTE *pbBuffer= (BYTE *)"The data that is to be hashed and signed.";
DWORD dwBufferLen = strlen((char *)pbBuffer)+1;
HCRYPTHASH hHash;

CryptAcquireContext(   &hProv,    NULL,    NULL,    PROV_RSA_FULL,    0);
CryptCreateHash(   hProv,    CALG_MD5,    0,    0,    &hHash);
CryptHashData(   hHash,    pbBuffer,    dwBufferLen,    0));
if(hHash)
   CryptDestroyHash(hHash);
if(hProv)
    CryptReleaseContext(hProv, 0);


>
> git diff -r HEAD^ src/libopensc/pkcs15.c
> diff --git a/src/libopensc/pkcs15.c b/src/libopensc/pkcs15.c
> index 76c85d3..fd7326c 100644
> --- a/src/libopensc/pkcs15.c
> +++ b/src/libopensc/pkcs15.c
> @@ -32,6 +32,10 @@
>    #include "pkcs15.h"
>    #include "asn1.h"
>
> +#ifdef ENABLE_OPENSSL
> +#include<openssl/sha.h>
> +#endif
> +
>    static const struct sc_asn1_entry c_asn1_twlabel[] = {
>           { "twlabel", SC_ASN1_UTF8STRING, SC_ASN1_TAG_UTF8STRING, 0, NULL, 
> NULL },
>           { NULL, 0, 0, 0, NULL, NULL }
> @@ -2408,6 +2412,14 @@ sc_pkcs15_get_guid(struct sc_pkcs15_card *p15card, 
> const struct sc_pkcs15_object
>           memcpy(guid_bin, id.value, id.len);
>           memcpy(guid_bin + id.len, serialnr.value, serialnr.len);
>
> +        // If OpenSSL is available (SHA1), then rather use the hash of the 
> data
> +        // - this also protects against data being too short
> +#ifdef ENABLE_OPENSSL
> +        SHA1(guid_bin, id.len + serialnr.len, guid_bin);
> +        id.len = SHA_DIGEST_LENGTH;
> +        serialnr.len = 0;
> +#endif
> +
>           return sc_pkcs15_serialize_guid(guid_bin, id.len + serialnr.len, 
> flags, out, out_size);
>    }
>
>
>
>> Regards,
>> Will
>
> Kind regards,
> Viktor.
>
>
>> =====================
>>
>> Minidriver
>> ==========
>> Workaround some threading and data lifetime issues when card handle changes 
>> and need to
>> re-associate card
>>
>> Workaround for Windows XP calling DllMain(Detach Process) before 
>> CardDeleteContext
>>
>> Better generation of GUID if OpenSSL available
>>
>> Report PIN tries left/PIN blocked
>>
>> Corrected PKCS#1 padding handling in CardRSADecrypt
>>
>> Support SHA256 in CardSignData
>>
>> PKCS11 module
>> =============
>> Allow use of Unwrap keys in C_DecryptInit
>>
>> CardMod reader module
>> =====================
>> Support user specified DLL
>>
>> Tools
>> =====
>> Fix issue where PC/SC system reported card present with zero
>> length ATR (when no card actually present)
>>
>>
>> _______________________________________________
>> opensc-devel mailing list
>> opensc-devel@lists.opensc-project.org
>> http://www.opensc-project.org/mailman/listinfo/opensc-devel
>
> _______________________________________________
> opensc-devel mailing list
> opensc-devel@lists.opensc-project.org
> http://www.opensc-project.org/mailman/listinfo/opensc-devel
>
>

-- 

  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

Reply via email to