Show
Ignore:
Timestamp:
10/21/14 22:29:01 (6 years ago)
Author:
vsilva
Message:

First official release

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • middleware-offline/trunk/_src/eidmw/applayer/APLCertif.cpp

    r256 r271  
    3535#include "CertStatusCache.h" 
    3636#include "MiscUtil.h" 
     37#include "CRLFetcher.h" 
    3738#include "CardPteidDef.h" 
    3839#include "Log.h" 
     
    725726        cert = new CByteArray(buf,bufsize); 
    726727        certifs->addCert(*cert, APL_CERTIF_TYPE_UNKNOWN, false); 
     728        return; 
    727729 
    728730        err: 
     
    817819 
    818820        return m_card->getAllowTestCard(); 
    819 } 
    820  
    821 bool APL_Certifs::getAllowBadDate() 
    822 { 
    823         if(!m_card) 
    824                 return true; 
    825  
    826         return m_card->getAllowBadDate(); 
    827821} 
    828822 
     
    14201414{ 
    14211415        APL_ValidationLevel crl=APL_VALIDATION_LEVEL_NONE; 
    1422         APL_ValidationLevel ocsp=APL_VALIDATION_LEVEL_NONE; 
     1416        APL_ValidationLevel ocsp=APL_VALIDATION_LEVEL_MANDATORY; 
     1417        MWLOG(LEV_DEBUG, MOD_APL, L"APL_Certif::getStatus for cert: %s", this->getOwnerName()); 
     1418 
     1419 
     1420/* 
    14231421 
    14241422        APL_Config conf_crl(CConfig::EIDMW_CONFIG_PARAM_CERTVALID_CRL);  
     
    14431441                break; 
    14441442        } 
     1443*/ 
    14451444 
    14461445        return getStatus(crl, ocsp); 
     
    14491448APL_CertifStatus APL_Certif::getStatus(APL_ValidationLevel crl, APL_ValidationLevel ocsp) 
    14501449{ 
    1451         CSC_Status statusNone=CSC_STATUS_NONE; 
    1452         CSC_Status statusCrl=CSC_STATUS_NONE; 
     1450        // CSC_Status statusNone=CSC_STATUS_NONE; 
     1451        // CSC_Status statusCrl=CSC_STATUS_NONE; 
    14531452        CSC_Status statusOcsp=CSC_STATUS_NONE; 
    1454  
    1455         if(crl==APL_VALIDATION_LEVEL_NONE && ocsp==APL_VALIDATION_LEVEL_NONE) 
    1456         { 
    1457                 statusNone=m_statusCache->getCertStatus(getUniqueId(),CSC_VALIDATION_NONE,m_store); 
    1458         } 
     1453         
     1454        statusOcsp=m_statusCache->getCertStatus(getUniqueId(),CSC_VALIDATION_OCSP,m_store); 
     1455        //fprintf(stderr, "DEBUG APL_Certif::getStatus() returned: %d\n", statusOcsp); 
     1456 
     1457        //If no crl neither ocsp and valid => VALID 
     1458        if (statusOcsp==CSC_STATUS_VALID_SIGN) 
     1459                return APL_CERTIF_STATUS_VALID; 
     1460        else if (statusOcsp == CSC_STATUS_REVOKED) 
     1461                return APL_CERTIF_STATUS_REVOKED; 
    14591462        else 
    1460         { 
    1461                 if(crl!=APL_VALIDATION_LEVEL_NONE) 
    1462                 { 
    1463                         statusCrl=m_statusCache->getCertStatus(getUniqueId(),CSC_VALIDATION_CRL,m_store); 
    1464                 } 
    1465  
    1466                 if(ocsp!=APL_VALIDATION_LEVEL_NONE) 
    1467                 { 
    1468                         statusOcsp=m_statusCache->getCertStatus(getUniqueId(),CSC_VALIDATION_OCSP,m_store); 
    1469                 } 
    1470         } 
    1471  
    1472         //If one status is test => TEST 
    1473         if(statusNone==CSC_STATUS_TEST 
    1474                 || statusCrl==CSC_STATUS_TEST 
    1475                 || statusOcsp==CSC_STATUS_TEST) 
    1476                 return APL_CERTIF_STATUS_TEST; 
    1477  
    1478         //If one issuer is missing => ISSUER 
    1479         if(statusNone==CSC_STATUS_ISSUER 
    1480                 || statusCrl==CSC_STATUS_ISSUER 
    1481                 || statusOcsp==CSC_STATUS_ISSUER) 
    1482                 return APL_CERTIF_STATUS_ISSUER; 
    1483  
    1484         //If one status is date => DATE 
    1485         if(statusNone==CSC_STATUS_DATE 
    1486                 || statusCrl==CSC_STATUS_DATE 
    1487                 || statusOcsp==CSC_STATUS_DATE) 
    1488                 return APL_CERTIF_STATUS_DATE; 
    1489  
    1490         //If one status is revoked => REVOKED 
    1491         if(statusNone==CSC_STATUS_REVOKED 
    1492                 || statusCrl==CSC_STATUS_REVOKED 
    1493                 || statusOcsp==CSC_STATUS_REVOKED) 
    1494                 return APL_CERTIF_STATUS_REVOKED; 
    1495  
    1496         //If one status is unknown => UNKNOWN 
    1497         if(statusNone==CSC_STATUS_UNKNOWN 
    1498                 || statusCrl==CSC_STATUS_UNKNOWN 
    1499                 || statusOcsp==CSC_STATUS_UNKNOWN) 
    1500                 return APL_CERTIF_STATUS_UNKNOWN; 
    1501  
    1502         if(ocsp==APL_VALIDATION_LEVEL_OPTIONAL || crl==APL_VALIDATION_LEVEL_OPTIONAL) 
    1503         { 
    1504                 return APL_CERTIF_STATUS_VALID; 
    1505         } 
    1506  
    1507         //If no crl neither ocsp and valid => VALID 
    1508         if(statusNone==CSC_STATUS_VALID_SIGN) 
    1509                 return APL_CERTIF_STATUS_VALID; 
    1510  
    1511         return APL_CERTIF_STATUS_ERROR; 
     1463                return APL_CERTIF_STATUS_ERROR; 
    15121464 
    15131465} 
     
    15471499APL_CertifStatus APL_Certif::validationCRL() 
    15481500{ 
     1501        MWLOG(LEV_DEBUG, MOD_APL, L"APL_Certif::validationCRL() for certificate %s", this->getOwnerName()); 
    15491502        APL_Crl *crl=getCRL(); 
    15501503 
     
    15651518        APL_OcspResponse *ocsp=getOcspResponse(); 
    15661519 
    1567         //If there is no crl (ex. root), validation is ok 
     1520        //This cert does not contain an OCPS URL 
    15681521        if(!ocsp) 
    1569                 return APL_CERTIF_STATUS_VALID; 
     1522                return APL_CERTIF_STATUS_UNKNOWN; 
    15701523 
    15711524        return ocsp->verifyCert(); 
     
    17481701 
    17491702        if ((cert = ExternalCert(certnr)) == NULL) 
    1750                 return NULL; 
     1703                return 0; 
    17511704 
    17521705        len = i2d_X509 (cert, &rdata); 
    17531706 
    17541707        if (len < 0) 
    1755                 return NULL; 
     1708                return 0; 
    17561709 
    17571710        return len; 
     
    18001753 
    18011754        if ((cert = ExternalCert(certnr)) == NULL) 
    1802                 return NULL; 
     1755                return 0; 
    18031756 
    18041757        EVP_PKEY *pKey = X509_get_pubkey(cert); 
     
    18971850{ 
    18981851        m_cryptoFwk=AppLayer.getCryptoFwk(); 
     1852        //m_cache=AppLayer.getCrlDownloadCache(); 
    18991853 
    19001854        m_uri=uri; 
     
    19501904        } 
    19511905         
    1952         eStatus=m_cryptoFwk->CRLValidation(m_certif->getData(),baCrl); 
     1906        eStatus=m_cryptoFwk->CRLValidation(m_certif->getData(), baCrl); 
    19531907        return ConvertStatus(eStatus,APL_VALIDATION_PROCESS_CRL); 
    19541908} 
    19551909 
    19561910//Get data from the file and make the verification 
    1957 APL_CrlStatus APL_Crl::getData(CByteArray &data,bool forceDownload) 
    1958 { 
     1911APL_CrlStatus APL_Crl::getData(CByteArray &data, bool forceDownload) 
     1912{ 
     1913        CRLFetcher crl_fetcher; 
    19591914        APL_CrlStatus eRetStatus=APL_CRL_STATUS_ERROR; 
    1960  
    1961         bool bValidity=false; 
     1915        data = crl_fetcher.fetch_CRL_file(m_uri.c_str()); 
    19621916 
    19631917        //If ok, we get the info, unless we return an empty bytearray 
    1964         if(eRetStatus==APL_CRL_STATUS_ERROR) 
     1918        if(data.Size() == 0) 
    19651919        { 
    19661920                data=EmptyByteArray; 
    1967                 MWLOG(LEV_DEBUG, MOD_APL, L"APL_Crl::getData: Return an empty array"); 
    1968         } 
     1921                MWLOG(LEV_DEBUG, MOD_APL, L"APL_Crl::getData: Returning an empty array"); 
     1922        } 
     1923        else 
     1924                eRetStatus = APL_CRL_STATUS_VALID; 
    19691925 
    19701926        m_initOk=true; 
     
    19951951APL_OcspResponse::APL_OcspResponse(const char *uri,APL_Certif *certif) 
    19961952{ 
     1953        MWLOG(LEV_DEBUG, MOD_APL, L"OCSPResponse ctor for URI: %s", uri); 
    19971954        m_cryptoFwk=AppLayer.getCryptoFwk(); 
    19981955 
     
    20702027APL_CertifStatus APL_OcspResponse::getResponse(CByteArray *response) 
    20712028{ 
     2029        MWLOG(LEV_DEBUG, MOD_APL, L"getOCSPResponse called"); 
    20722030        //If we already have a response, we check if the status was acceptable and if it's still valid 
    20732031        if(m_response)