<div style="font-family: 宋体; font-size: 13px; color: rgb(0, 0, 0); line-height: 1.5;"><p>hello</p><p>  it's not relative to the OPENSSL diretly,however I have no idea totally except to send email to you.please help me,although I'm not familiar with CryptoAPI 
program,however with Google,I have written the following code, I have 
two questions on CSP program,I'm using Win7 & Visual Studio 2008<br></p><p>#1 how do I verify the pin of USBKEY hardware via CryptoAPI?</p><p><br>
</p><p>#include "stdafx.h"<br>#include <windows.h><br>#include <wincrypt.h><br>#include "iostream"<br>#pragma comment(lib,"crypt32.lib")<br><br>using namespace std;<br><br>int _tmain(int argc, _TCHAR* argv[])<br>{<br>    <br>    PCCERT_CONTEXT m_pCertContext;<br>    HCERTSTORE m_hStore;<br>    m_pCertContext = NULL;<br>    m_hStore = NULL;<br><br><br>    if(m_pCertContext == NULL)<br>    {<br>        string strOName("Organization ClassA CA");<br>        TCHAR* lpszStoreName =_T("MY");<br>         HCERTSTORE m_hStore = CertOpenSystemStore(NULL, lpszStoreName);<br><br>        if (m_hStore) <br>        {    <br>            CERT_RDN certRDN;<br>            certRDN.cRDNAttr = 1;<br>            certRDN.rgRDNAttr = new CERT_RDN_ATTR;<br>            certRDN.rgRDNAttr->pszObjId = szOID_ORGANIZATIONAL_UNIT_NAME;<br>            certRDN.rgRDNAttr->dwValueType = CERT_RDN_ANY_TYPE;<br>            certRDN.rgRDNAttr->Value.pbData = (BYTE *) strOName.c_str();<br>            certRDN.rgRDNAttr->Value.cbData = strlen(strOName.c_str());<br>            PCCERT_CONTEXT pCurrent = NULL;<br>            pCurrent = CertFindCertificateInStore(    m_hStore, <br>                                                    X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, <br>                                                    0, <br>                                                    CERT_FIND_ISSUER_ATTR, <br>                                                    &certRDN, <br>                                                    NULL);<br>            while(pCurrent != NULL)<br>            {<br>                BOOL bRet = FALSE;<br>                byte bUsage;<br><br>             <br>                bRet = CertGetIntendedKeyUsage(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, pCurrent->pCertInfo, &bUsage, 1);<br>               if(bRet)<br>               {<br>              //check cert contains private key<br>                if((bUsage & CERT_DIGITAL_SIGNATURE_KEY_USAGE) && (bUsage & CERT_NON_REPUDIATION_KEY_USAGE))<br>                {<br>         <br>                    bRet = CryptFindCertificateKeyProvInfo(pCurrent,0,NULL);<br><br>                }<br>                if(bRet)<br>                {<br>                    m_pCertContext = pCurrent;<br>                    pCurrent = NULL;</p><p>                    //the code of pin verification should be here,but I can't figure out what I should written.<br>
</p><p>                    break;<br>                }<br><br>                pCurrent = CertFindCertificateInStore(    m_hStore, <br>                                                    X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, <br>                                                    0, <br>                                                    CERT_FIND_ISSUER_ATTR, <br>                                                    &certRDN, <br>                                                    pCurrent);<br>            }<br>            <br><br>            delete certRDN.rgRDNAttr;        <br>        }<br><br>    //if there's no cert that I want to be found,release the resource <br>        if(m_pCertContext == NULL)<br>        {<br>            if (m_pCertContext) {<br>        CertFreeCertificateContext(m_pCertContext);<br>        m_pCertContext = NULL;<br>            }<br>    if (m_hStore) {<br>        CertCloseStore(m_hStore, CERT_CLOSE_STORE_FORCE_FLAG);<br>        m_hStore = NULL;<br>    }<br>        }<br>        }<br><br>  <br>    }<br>        return 0;<br>}</p><p>#2 How do I get the message in below via  CryptoAPI?</p><p>this is  a XML file,I have to read the data though CryptoAPI and paste them to a XML,I just don't know how to get it<br></p><p><a style="color: blue; margin-left: -2em;"><<span style="color: rgb(153, 0, 0);">DigestValue</span>></a>uBQI2f/2CMbtPbVLni0jL+J1psE=<span style="color: blue;"></<span style="color: rgb(153, 0, 0);">DigestValue</span>></span></p><p><a style="color: blue; margin-left: -2em;"><<span style="color: rgb(153, 0, 0);">SignatureValue</span>></a>PVfM1YCAU701rshiHuALV6LiLuQKQTPidejsUKyMu4ys3dQhO1a36mAZrjnEN0ZIYcRn7VFTWsjDr8imCGjE09GHnsJY0QtqByjUxBpIaxu95MBiqNy4geFy/PKVFQ19yAtKwNd1jXkvjpN7e4eQ0JhUyfc9rA69KIXonvsF2hE=<span style="color: blue;"></<span style="color: rgb(153, 0, 0);">SignatureValue</span>></span></p><p><a style="color: blue; margin-left: -2em;"><<span style="color: rgb(153, 0, 0);">X509IssuerName</span>></a>CN=NETCA Individual ClassA CA, OU=Individual ClassA CA, O=NETCA Certificate Authority, C=CA<span style="color: blue;"></<span style="color: rgb(153, 0, 0);">X509IssuerName</span>></span><a style="color: blue; margin-left: -2em;"><<span style="color: rgb(153, 0, 0);">X509SerialNumber</span>></a>81795886028495042323800393625097362204<span style="color: blue;"></<span style="color: rgb(153, 0, 0);">X509SerialNumber</span>></span><span class="block" style="color: blue; margin-left: -2em;"></<span style="color: rgb(153, 0, 0);">X509IssuerSerial</span>></span><a style="color: blue; margin-left: -2em;"><<span style="color: rgb(153, 0, 0);">X509Certificate</span>></a>MIIEBjCCAu6gAwIBAgIQPYlQiyH4Ks50d1Pg0NZbHDANBgkqhkiG9w0BAQUFADB3MQswCQYDVQQGEwJDTjEkMCIGA1UEChMbTkVUQ0EgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MR0wGwYDVQQLExRJbmRpdmlkdWFsIENsYXNzQSBDQTEjMCEGA1UEAxMaTkVUQ0EgSW5kaXZpZHVhbCBDbGFzc0EgQ0EwHhcNMTIwNDE4MTYwMDAwWhcNMTMwNDE5MTU1OTU5WjBzMQswCQYDVQQGEwJDTjESMBAGA1UECBMJR3Vhbmdkb25nMQ0wCwYDVQQHHgRef13eMSUwIwYDVQQDHhxOKk66bUuL1QAyADAAMQAxADAANAAyADIAMAAxMRowGAYJKoZIhvcNAQkBFgt6c0BjbmNhLm5ldDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1DO/NjAy1++niPTgcVcR3WwQ5z0uiq0qkg/g1mwhXDWZ7V5cAtrGsQVl82SYXBIxaVMPEXPI2ess8rYY7w7KJD/WFMpdRHmK57ZkDsqJbh55D0ylMBPovwJwfmJ6mJwu9+9oU13zlKKetL3eVAIomp3i37YVPWWpRbWTU2GcnG0CAwEAAaOCARQwggEQMB8GA1UdIwQYMBaAFLFHZEQZX2XMQLsGS+l5BOAe7LVOMB0GA1UdDgQWBBShjFOEYwPh3wcsixILjbcCat+4XjBXBgNVHSAEUDBOMEwGCisGAQQBgZJIAQowPjA8BggrBgEFBQcCARYwaHR0cDovL3d3dy5jbmNhLm5ldC9jcy9rbm93bGVkZ2Uvd2hpdGVwYXBlci9jcHMvMBYGA1UdEQQPMA2BC3pzQGNuY2EubmV0MAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgbAMD8GA1UdHwQ4MDYwNKAyoDCGLmh0dHA6Ly9jbGFzc2FjYTEuY25jYS5uZXQvY3JsL0luZGl2aWR1YWxDQS5jcmwwDQYJKoZIhvcNAQEFBQADggEBAAdTQ0s+EYNLchwSoAb5MvGGFWh24XuQGLJLJ+81F3ww11Ah31GSRqJVoXzhozH9GPym0M77LjUiasWCN47tOuhTN3aVGZfGq2daMq2+j+p6LOya/mbq7w3SdhGa1vTrTjkxXNCRnFHDsLR1ujv40WrQM7HfBJ9TOckDSzGbDXSog14mbGTWJaP+FwDb/4YEH7W4Wy2vcPG5/gbWYWwujvSTDBtK9QXhM48Car2oExnmYAbxiu81z4CPPB0LB/GyxtzsYbB4YItFWTY4E8jcQb+VDRbYruX5k1ndk4zLAu45bqrhInAknr9tlMu01VofDNexz0xqmScEkWqdtLhMDow=<span style="color: blue;"></<span style="color: rgb(153, 0, 0);">X509Certificate</span>></span><span class="block" style="color: blue; margin-left: -2em;"></</span><span style="color: blue;"><br>
</span></p><p>any idea?</p><p>thanks</p><p>Regards</p>Ken<br><br><br></div><div id="signContainer"></div>