Changeset 41

Show
Ignore:
Timestamp:
02/15/12 19:53:48 (9 years ago)
Author:
vsilva
Message:

Implement Check SOD; Resolve some fixes; Remove Auto load library from sdk(cause problems on windows); PINPAD ACR Plugin; Firefox Certificates Extension on MSI

Location:
middleware-offline/trunk/_src/eidmw
Files:
2 added
40 modified

Legend:

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

    r35 r41  
    145145        XadesSignature sig(this); 
    146146 
    147         CByteArray &signature = sig.SignXades(paths,n_paths); 
     147        CByteArray &signature = sig.SignXades(paths, n_paths, false); 
    148148        StoreSignatureToDisk (signature, paths, n_paths,output_path); 
    149149 
     
    168168} 
    169169 
    170 CByteArray &APL_Card::SignXadesT(const char ** path, unsigned int n_paths, const char *output_file) 
    171 { 
    172         CByteArray * ba = new CByteArray(); 
    173         //TODO 
    174         return *ba; 
     170CByteArray &APL_Card::SignXadesT(const char ** paths, unsigned int n_paths, const char *output_file) 
     171{ 
     172        if (paths == NULL || n_paths < 1) 
     173           throw CMWEXCEPTION(EIDMW_ERR_CHECK); 
     174        XadesSignature sig(this); 
     175 
     176        CByteArray &signature = sig.SignXades(paths, n_paths, true); 
     177        StoreSignatureToDisk (signature, paths, n_paths, output_file); 
     178 
     179        //Write zip container signature and referenced files in zip container 
     180 
     181        return signature; 
    175182} 
    176183 
  • middleware-offline/trunk/_src/eidmw/applayer/APLCardPteid.cpp

    r35 r41  
    3030#include "MiscUtil.h" 
    3131#include "StringOps.h" 
     32#include "APLConfig.h" 
     33 
    3234 
    3335using namespace std; 
     
    748750                CAutoMutex autoMutex(&m_Mutex);         //We lock for only one instanciation 
    749751                if(!m_FileID) 
    750                 { 
    751752                        m_FileID=new APL_EidFile_ID(this); 
    752                         if (m_sodCheck) 
    753                                 m_FileID->doSODCheck(m_sodCheck); 
    754                 } 
    755         } 
    756  
    757         if (m_sodCheck) 
    758                 m_FileID->doSODCheck(m_sodCheck); 
     753        } 
     754 
     755        m_FileID->doSODCheck(m_sodCheck); 
    759756 
    760757        return m_FileID; 
     
    781778                CAutoMutex autoMutex(&m_Mutex);         //We lock for only one instanciation 
    782779                if(!m_FileAddress) 
    783                 { 
    784780                        m_FileAddress=new APL_EidFile_Address(this); 
    785                         if (m_sodCheck) 
    786                                 m_FileAddress->doSODCheck(m_sodCheck); 
    787                 } 
    788         } 
    789  
    790         if (m_sodCheck) 
    791                 m_FileAddress->doSODCheck(m_sodCheck); 
     781        } 
     782 
     783        m_FileAddress->doSODCheck(m_sodCheck); 
    792784 
    793785        return m_FileAddress; 
     
    13461338        if (check){ 
    13471339                if (!m_FileSod){ 
    1348                         getFileSod(); 
    1349                 } 
    1350                 m_FileSod->VerifyFile(); 
     1340                        m_FileSod = getFileSod(); 
     1341                        m_FileSod->doSODCheck(check); 
     1342                } 
    13511343        } 
    13521344} 
     
    26652657const CByteArray& APL_SodEid::getData() 
    26662658{ 
    2667         return m_card->getFileSod()->getData(); 
     2659        cout << "ddksadsjksdjskdjs 1" << endl; 
     2660        const CByteArray &cb = m_card->getFileSod()->getData(); 
     2661 
     2662        m_card->getFileSod()->getAddressHash(); 
     2663        cout << "tamanho = " << m_card->getFileSod()->getAddressHash().Size() << endl; 
     2664        APL_Config conf_dir(CConfig::EIDMW_CONFIG_PARAM_GENERAL_CERTS_DIR); 
     2665        cout << "DIRECTORIA = "<< conf_dir.getString() << endl; 
     2666 
     2667 
     2668 
     2669        return cb; 
    26682670} 
    26692671 
  • middleware-offline/trunk/_src/eidmw/applayer/APLCertif.cpp

    r34 r41  
    102102APL_Certifs::APL_Certifs(APL_SmartCard *card) 
    103103{ 
     104        init(card); 
     105 
     106        loadCard(); 
     107        loadFromFile(); 
     108} 
     109 
     110APL_Certifs::APL_Certifs() 
     111{ 
     112        init(NULL); 
     113        loadFromFile(); 
     114} 
     115 
     116void APL_Certifs::init(APL_SmartCard *card){ 
     117 
     118        APL_Config certs_dir(CConfig::EIDMW_CONFIG_PARAM_GENERAL_CERTS_DIR); 
     119        m_certs_dir = certs_dir.getString(); 
    104120        m_cryptoFwk=AppLayer.getCryptoFwk(); 
    105121 
    106122        m_card=card; 
    107  
    108         loadCard(); 
    109 } 
    110  
    111 APL_Certifs::APL_Certifs() 
    112 { 
    113         m_cryptoFwk=AppLayer.getCryptoFwk(); 
    114  
    115         m_card=NULL; 
     123        m_certExtension = "der"; 
    116124} 
    117125 
     
    676684} 
    677685 
     686void APL_Certifs::loadFromFile() 
     687{ 
     688        bool bStopRequest = false; 
     689        CPathUtil::scanDir(m_certs_dir.c_str(),"",m_certExtension.c_str(),bStopRequest,this,&APL_Certifs::foundCertificate); 
     690} 
     691 
     692void APL_Certifs::foundCertificate(const char *SubDir, const char *File, void *param) 
     693{ 
     694        APL_Certifs *certifs = static_cast < APL_Certifs * > ( param ); 
     695        std::string path=certifs->m_certs_dir; 
     696        FILE *m_stream; 
     697        long int bufsize; 
     698        int result; 
     699        unsigned char *buf; 
     700        CByteArray *cert; 
     701 
     702#ifdef WIN32 
     703        errno_t werr; 
     704#endif 
     705        path+=SubDir; 
     706#ifdef WIN32 
     707        path+=(strlen(SubDir)!=0?"\\":""); 
     708#else 
     709        path+=(strlen(SubDir)!=0 ? "/" : ""); 
     710#endif 
     711        path+=File; 
     712 
     713#ifdef WIN32 
     714        if ((werr = fopen_s(&m_stream, path.c_str(), "rb")) != 0) 
     715                goto err; 
     716#else 
     717        if ((m_stream = fopen(path.c_str(), "rb")) == NULL) 
     718                goto err; 
     719#endif 
     720 
     721        if (fseek( m_stream, 0L, SEEK_END)) 
     722                goto err; 
     723 
     724        bufsize = ftell(m_stream); 
     725        buf = (unsigned char *) malloc(bufsize*sizeof(unsigned char)); 
     726 
     727        if (fseek(m_stream, 0L, SEEK_SET)){ 
     728                free(buf); 
     729                goto err; 
     730        } 
     731 
     732        if (fread(buf, sizeof( unsigned char ), bufsize, m_stream) != bufsize) 
     733                goto err; 
     734 
     735        cert = new CByteArray(buf,bufsize); 
     736        certifs->addCert(*cert, APL_CERTIF_TYPE_UNKNOWN, false); 
     737 
     738        err: 
     739        MWLOG(LEV_DEBUG, MOD_APL, L"APL_Certifs::foundCertificate: problem with file %s ", path.c_str()); 
     740} 
     741 
    678742APL_Certif *APL_Certifs::findIssuer(const APL_Certif *cert) 
    679743{ 
     
    16721736    if ((time_t)-1 != res) { 
    16731737        struct tm ltm; 
    1674         res -= timezone; 
    16751738        localtime_r(&res, &ltm); 
    16761739        // Use the ISO 8601 timestamp format 
  • middleware-offline/trunk/_src/eidmw/applayer/APLCertif.h

    r25 r41  
    307307 
    308308        void loadCard();                                                                                /**< Load all the certificates from the card */ 
     309        void loadFromFile();                                                                    /**< Load all the certificates from the certificates directory */ 
     310        void init(APL_SmartCard *card); 
    309311 
    310312        void resetIssuers(); /**< Reset issuer pointer in the certifactes from the store */ 
     
    312314        void resetTests();      /**< Reset test flag in the certifactes from the store */ 
    313315 
     316        /** 
     317         * This is a callback function for the scanDir 
     318         * 
     319         * @param SubDir is the sub directory relative the the Dir of scanDir 
     320         * @param File is the file to threat 
     321         * @param param must be this pointer 
     322         */ 
     323        static void foundCertificate(const char *SubDir, const char *File, void *param); 
     324 
    314325        APL_SmartCard *m_card;                                                                  /**< The smart card from which some certificate comes */ 
    315326        APL_CryptoFwk *m_cryptoFwk;                                                             /**< Pointer to the crypto framework */ 
     
    323334        std::map<unsigned long,APL_Certif *> m_certifs; 
    324335        std::vector<unsigned long> m_certifsOrder; 
     336        std::string m_certExtension; 
     337        std::string m_certs_dir; 
    325338 
    326339friend APL_Certifs *APL_SmartCard::getCertificates();   /**< This method must access protected constructor */ 
  • middleware-offline/trunk/_src/eidmw/applayer/CardFile.cpp

    r34 r41  
    5353        m_cryptoFwk=AppLayer.getCryptoFwk(); 
    5454        m_mappedFields = false; 
     55        m_isVerified = false; 
    5556        m_card=card; 
    5657 
  • middleware-offline/trunk/_src/eidmw/applayer/CardFile.h

    r35 r41  
    123123        CMutex m_Mutex;                                 /**< Mutex */ 
    124124        bool m_mappedFields;                    /**< are the fields mapped already? */ 
    125  
     125        bool m_isVerified;                              /**< verify file only once */ 
    126126        bool m_SODCheck; 
    127127 
  • middleware-offline/trunk/_src/eidmw/applayer/CardPteid.cpp

    r35 r41  
    3333#include "PhotoPteid.h" 
    3434#include "APLPublicKey.h" 
     35#include "SODParser.h" 
    3536 
    3637#include "Log.h" 
     
    185186APL_EidFile_ID::APL_EidFile_ID(APL_EIDCard *card):APL_CardFile(card,PTEID_FILE_ID,NULL) 
    186187{ 
    187         photo = NULL; 
     188        m_photo = NULL; 
    188189} 
    189190 
     
    192193} 
    193194 
     195 
     196void APL_EidFile_ID::PackIdData(CByteArray &cb){ 
     197        cb.Append((unsigned char*)m_IssuingEntity.c_str(),m_IssuingEntity.length()); 
     198        cb.Append((unsigned char*)m_Country.c_str(),m_Country.length()); 
     199        cb.Append((unsigned char*)m_DocumentType.c_str(),m_DocumentType.length()); 
     200        cb.Append((unsigned char*)m_DocumentNumber.c_str(),m_DocumentNumber.length()); 
     201        cb.Append((unsigned char*)m_ChipNumber.c_str(),m_ChipNumber.length()); 
     202        cb.Append((unsigned char*)m_DocumentVersion.c_str(),m_DocumentVersion.length()); 
     203        cb.Append((unsigned char*)m_ValidityBeginDate.c_str(),m_ValidityBeginDate.length()); 
     204        cb.Append((unsigned char*)m_LocalofRequest.c_str(),m_LocalofRequest.length()); 
     205        cb.Append((unsigned char*)m_ValidityEndDate.c_str(),m_ValidityEndDate.length()); 
     206        cb.Append((unsigned char*)m_Surname.c_str(),m_Surname.length()); 
     207        cb.Append((unsigned char*)m_GivenName.c_str(),m_GivenName.length()); 
     208        cb.Append((unsigned char*)m_Gender.c_str(),m_Gender.length()); 
     209        cb.Append((unsigned char*)m_Nationality.c_str(),m_Nationality.length()); 
     210        cb.Append((unsigned char*)m_DateOfBirth.c_str(),m_DateOfBirth.length()); 
     211        cb.Append((unsigned char*)m_Height.c_str(),m_Height.length()); 
     212        cb.Append((unsigned char*)m_CivilianIdNumber.c_str(),m_CivilianIdNumber.length()); 
     213        cb.Append((unsigned char*)m_SurnameMother.c_str(),m_SurnameMother.length()); 
     214        cb.Append((unsigned char*)m_GivenNameMother.c_str(),m_GivenNameMother.length()); 
     215        cb.Append((unsigned char*)m_SurnameFather.c_str(),m_SurnameFather.length()); 
     216        cb.Append((unsigned char*)m_GivenNameFather.c_str(),m_GivenNameFather.length()); 
     217        cb.Append((unsigned char*)m_AccidentalIndications.c_str(),m_AccidentalIndications.length()); 
     218        cb.Append((unsigned char*)m_TaxNo.c_str(),m_TaxNo.length()); 
     219        cb.Append((unsigned char*)m_SocialSecurityNo.c_str(),m_SocialSecurityNo.length()); 
     220        cb.Append((unsigned char*)m_HealthNo.c_str(),m_HealthNo.length()); 
     221} 
     222 
     223void APL_EidFile_ID::PackPublicKeyData(CByteArray &cb){ 
     224        cb.Append(*cardKey->getModulus()); 
     225        cb.Append(*cardKey->getExponent()); 
     226} 
     227 
     228 
     229void APL_EidFile_ID::PackPictureData(CByteArray &cb){ 
     230        cb.Append(*m_photo->getCbeff()); 
     231        cb.Append(*m_photo->getFacialrechdr()); 
     232        cb.Append(*m_photo->getFacialinfo()); 
     233        cb.Append(*m_photo->getImageinfo()); 
     234        cb.Append(*m_photo->getPhotoRaw()); 
     235} 
     236 
     237 
    194238tCardFileStatus APL_EidFile_ID::VerifyFile() 
    195239{ 
    196240        if(!m_card) 
    197                 return CARDFILESTATUS_ERROR; 
     241                        return CARDFILESTATUS_ERROR; 
     242 
     243        if (m_isVerified) 
     244                return CARDFILESTATUS_OK; 
    198245 
    199246        APL_EIDCard *pcard=dynamic_cast<APL_EIDCard *>(m_card); 
    200         tCardFileStatus filestatus; 
    201  
    202         //Remove since it's rrn related 
    203         /*if(!CertRrn) 
    204                 return CARDFILESTATUS_ERROR_RRN; 
    205  
    206         //If the status of the RRN file is not OK,  
    207         //The rrn status is return 
    208         filestatus=CertRrn->getFileStatus(); 
    209         if(filestatus!=CARDFILESTATUS_OK) 
    210                 return filestatus; 
    211  
    212         //Get the status of the certificate RRN 
    213         APL_CertifStatus rrnstatus=CertRrn->getStatus(); 
    214         if((rrnstatus==APL_CERTIF_STATUS_TEST || rrnstatus==APL_CERTIF_STATUS_ISSUER) && !pcard->getAllowTestCard()) 
    215                 return CARDFILESTATUS_ERROR_TEST;  
    216  
    217         if(rrnstatus==APL_CERTIF_STATUS_DATE && !pcard->getAllowBadDate()) 
    218                 return CARDFILESTATUS_ERROR_DATE;  
    219  
    220         //We test the oid of the RRN  
    221         //except for test card because, test card may have a bad oid 
    222         if(!pcard->isTestCard()) 
    223                 if(!m_cryptoFwk->VerifyOidRrn(CertRrn->getData())) 
    224                         return CARDFILESTATUS_ERROR_RRN; 
    225  
    226         APL_EidFile_IDSign *sign=pcard->getFileIDSign(); 
    227  
    228         //If the status of the IDSign file is not OK,  
    229         //The IDSign status is return 
    230         filestatus=sign->getStatus(true); 
    231         if(filestatus!=CARDFILESTATUS_OK) 
    232                 return filestatus;*/ 
    233  
    234         //if(!m_cryptoFwk->VerifySignatureSha1(m_data,sign->getData(),CertRrn->getData())) 
    235         //      return CARDFILESTATUS_ERROR_SIGNATURE; 
    236  
    237         //If this is not a test card, the rrn status must be OK, unless we return an error 
    238         //For a test card, the status could be something else (for ex ISSUER) 
    239         /*L_CERTIF_STATUS_VALID 
    240                         && rrnstatus!=APL_CERTIF_STATUS_VALID_CRL 
    241                         && rrnstatus!=APL_CERTIF_STATUS_VALID_OCSP) 
    242                         return CARDFILESTATUS_ERROR_CERT;  
    243         }*/ 
     247 
     248        MapFieldsInternal(); 
     249 
     250        if (m_SODCheck){ 
     251                CByteArray pkData; 
     252                CByteArray idData; 
     253                CByteArray picData; 
     254                PackPublicKeyData(pkData); 
     255                PackIdData(idData); 
     256                PackPictureData(picData); 
     257 
     258                if (!m_cryptoFwk->VerifyHashSha256(pkData,pcard->getFileSod()->getCardPublicKeyHash())) 
     259                        throw CMWEXCEPTION(EIDMW_SOD_ERR_HASH_NO_MATCH_PUBLIC_KEY); 
     260 
     261                if (!m_cryptoFwk->VerifyHashSha256(idData,pcard->getFileSod()->getIdHash())) 
     262                        throw CMWEXCEPTION(EIDMW_SOD_ERR_HASH_NO_MATCH_ID); 
     263 
     264                if (!m_cryptoFwk->VerifyHashSha256(picData,pcard->getFileSod()->getPictureHash())) 
     265                        throw CMWEXCEPTION(EIDMW_SOD_ERR_HASH_NO_MATCH_PICTURE); 
     266        } 
     267        m_isVerified = true; 
    244268 
    245269        return CARDFILESTATUS_OK; 
     
    275299        m_GivenNameMother.clear(); 
    276300        m_SurnameMother.clear(); 
    277         if (photo){ 
    278                 delete photo; 
    279                 photo = NULL; 
     301        if (m_photo){ 
     302                delete m_photo; 
     303                m_photo = NULL; 
    280304        } 
    281305        m_PhotoHash.ClearContents(); 
     
    285309        } 
    286310        m_mappedFields = false; 
    287 } 
    288  
    289 bool APL_EidFile_ID::MapFields() 
    290 { 
     311        m_isVerified = false; 
     312        m_SODCheck = false; 
     313} 
     314 
     315void APL_EidFile_ID::MapFieldsInternal(){ 
     316        CByteArray pteidngidBuffer; 
     317 
    291318        // we dont want to read the fields every time 
    292319        if (m_mappedFields) 
    293                 return true; 
    294  
    295         CByteArray pteidngidBuffer; 
    296         char cBuffer[15500]; 
    297         unsigned char ucBuffer[15500]; 
    298         unsigned long ulLen=0; 
    299         CTLVBuffer oTLVBuffer; 
    300     oTLVBuffer.ParseTLV(m_data.GetBytes(), m_data.Size()); 
     320                return; 
    301321 
    302322        //IDVersion - Card Version 
    303     pteidngidBuffer = m_data.GetBytes(PTEIDNG_FIELD_ID_POS_DocumentVersion, PTEIDNG_FIELD_ID_LEN_DocumentVersion); 
    304     pteidngidBuffer.TrimRight(' '); 
    305     m_DocumentVersion.assign((char*)(pteidngidBuffer.GetBytes()), pteidngidBuffer.Size()); 
     323        pteidngidBuffer = m_data.GetBytes(PTEIDNG_FIELD_ID_POS_DocumentVersion, PTEIDNG_FIELD_ID_LEN_DocumentVersion); 
     324        pteidngidBuffer.TrimRight('\0'); 
     325        m_DocumentVersion.assign((char*)(pteidngidBuffer.GetBytes()), pteidngidBuffer.Size()); 
    306326 
    307327        //ChipNr 
    308328        pteidngidBuffer = m_data.GetBytes(PTEIDNG_FIELD_ID_POS_DocumentNumberPAN, PTEIDNG_FIELD_ID_LEN_DocumentNumberPAN); 
    309         pteidngidBuffer.TrimRight(' '); 
     329        pteidngidBuffer.TrimRight('\0'); 
    310330        m_ChipNumber.assign((char*)(pteidngidBuffer.GetBytes()), pteidngidBuffer.Size()); 
    311331        m_SerialNumber = m_ChipNumber; 
     
    313333        //Country 
    314334        pteidngidBuffer = m_data.GetBytes(PTEIDNG_FIELD_ID_POS_Country,PTEIDNG_FIELD_ID_LEN_Country); 
    315         pteidngidBuffer.TrimRight(' '); 
     335        pteidngidBuffer.TrimRight('\0'); 
    316336        m_Country.assign((char*)(pteidngidBuffer.GetBytes()), pteidngidBuffer.Size()); 
    317337 
    318338        //ValidityBeginDate 
    319339        pteidngidBuffer = m_data.GetBytes(PTEIDNG_FIELD_ID_POS_ValidityBeginDate,PTEIDNG_FIELD_ID_LEN_ValidityBeginDate); 
    320         pteidngidBuffer.TrimRight(' '); 
     340        pteidngidBuffer.TrimRight('\0'); 
    321341        m_ValidityBeginDate.assign((char*)(pteidngidBuffer.GetBytes()), pteidngidBuffer.Size()); 
    322342 
    323343        //ValidityEndDate 
    324344        pteidngidBuffer = m_data.GetBytes(PTEIDNG_FIELD_ID_POS_ValidityEndDate,PTEIDNG_FIELD_ID_LEN_ValidityEndDate); 
    325         pteidngidBuffer.TrimRight(' '); 
     345        pteidngidBuffer.TrimRight('\0'); 
    326346        m_ValidityEndDate.assign((char*)(pteidngidBuffer.GetBytes()), pteidngidBuffer.Size()); 
    327347 
    328348        //IssuingMunicipality 
    329349        pteidngidBuffer = m_data.GetBytes(PTEIDNG_FIELD_ID_POS_LocalofRequest, PTEIDNG_FIELD_ID_LEN_LocalofRequest); 
    330         pteidngidBuffer.TrimRight(' '); 
     350        pteidngidBuffer.TrimRight('\0'); 
    331351        m_LocalofRequest.assign((char*)(pteidngidBuffer.GetBytes()), pteidngidBuffer.Size()); 
    332352 
    333353        //Civilian Identification Number (NIC) 
    334354        pteidngidBuffer = m_data.GetBytes(PTEIDNG_FIELD_ID_POS_CivilianIdNumber, PTEIDNG_FIELD_ID_LEN_CivilianIdNumber); 
    335         pteidngidBuffer.TrimRight(' '); 
     355        pteidngidBuffer.TrimRight('\0'); 
    336356        m_CivilianIdNumber.assign((char*)(pteidngidBuffer.GetBytes()), pteidngidBuffer.Size()); 
    337357 
    338358        //Surname 
    339359        pteidngidBuffer = m_data.GetBytes(PTEIDNG_FIELD_ID_POS_Surname, PTEIDNG_FIELD_ID_LEN_Surname); 
    340         pteidngidBuffer.TrimRight(' '); 
     360        pteidngidBuffer.TrimRight('\0'); 
    341361        m_Surname.assign((char*)(pteidngidBuffer.GetBytes()), pteidngidBuffer.Size()); 
    342362 
    343363        //FirstName_1 
    344364        pteidngidBuffer = m_data.GetBytes(PTEIDNG_FIELD_ID_POS_Name, PTEIDNG_FIELD_ID_LEN_Name); 
    345         pteidngidBuffer.TrimRight(' '); 
     365        pteidngidBuffer.TrimRight('\0'); 
    346366        m_GivenName.assign((char*)(pteidngidBuffer.GetBytes()), pteidngidBuffer.Size()); 
    347         /*std::string in_utf8; 
    348         in_utf8 = IBM850_toUtf8(m_FirstName1); 
    349         m_FirstName1 = in_utf8;*/ 
    350367 
    351368        //Nationality 
    352369        pteidngidBuffer = m_data.GetBytes(PTEIDNG_FIELD_ID_POS_Nacionality, PTEIDNG_FIELD_ID_LEN_Nacionality); 
    353         pteidngidBuffer.TrimRight(' '); 
     370        pteidngidBuffer.TrimRight('\0'); 
    354371        m_Nationality.assign((char*)(pteidngidBuffer.GetBytes()), pteidngidBuffer.Size()); 
    355  
    356         //LocationOfBirth 
    357     ulLen = sizeof(cBuffer); 
    358         memset(cBuffer,0,ulLen); 
    359         oTLVBuffer.FillUTF8Data(PTEID_FIELD_TAG_ID_LocationOfBirth, cBuffer, &ulLen); 
    360         m_LocationOfBirth.assign(cBuffer, 0, ulLen); 
    361372 
    362373        //DateOfBirth 
    363374        pteidngidBuffer = m_data.GetBytes(PTEIDNG_FIELD_ID_POS_DateOfBirth, PTEIDNG_FIELD_ID_LEN_DateOfBirth); 
    364         pteidngidBuffer.TrimRight(' '); 
     375        pteidngidBuffer.TrimRight('\0'); 
    365376        m_DateOfBirth.assign((char*)(pteidngidBuffer.GetBytes()), pteidngidBuffer.Size()); 
    366377 
    367378        //Gender 
    368379        pteidngidBuffer = m_data.GetBytes(PTEIDNG_FIELD_ID_POS_Gender, PTEIDNG_FIELD_ID_LEN_Gender); 
    369         pteidngidBuffer.TrimRight(' '); 
     380        pteidngidBuffer.TrimRight('\0'); 
    370381        m_Gender.assign((char*)(pteidngidBuffer.GetBytes()), pteidngidBuffer.Size()); 
    371382 
    372383        //DocumentType 
    373384        pteidngidBuffer = m_data.GetBytes(PTEIDNG_FIELD_ID_POS_DocumentType, PTEIDNG_FIELD_ID_LEN_DocumentType); 
    374         pteidngidBuffer.TrimRight(' '); 
     385        pteidngidBuffer.TrimRight('\0'); 
    375386        m_DocumentType.assign((char*)(pteidngidBuffer.GetBytes()), pteidngidBuffer.Size()); 
    376  
    377         //SpecialStatus 
    378     ulLen = sizeof(cBuffer); 
    379         memset(cBuffer,0,ulLen); 
    380         oTLVBuffer.FillASCIIData(PTEID_FIELD_TAG_ID_SpecialStatus, cBuffer, &ulLen); 
    381         m_SpecialStatus.assign(cBuffer, 0, ulLen); 
    382  
    383         //PhotoHash 
    384     ulLen = sizeof(cBuffer); 
    385         memset(ucBuffer,0,ulLen); 
    386         oTLVBuffer.FillBinaryData(PTEID_FIELD_TAG_ID_PhotoHash, ucBuffer, &ulLen); 
    387         m_PhotoHash.ClearContents(); 
    388         m_PhotoHash.Append(ucBuffer,ulLen); 
    389  
    390         //Duplicata 
    391     ulLen = sizeof(cBuffer); 
    392         memset(cBuffer,0,ulLen); 
    393         oTLVBuffer.FillASCIIData(PTEID_FIELD_TAG_ID_Duplicata, cBuffer, &ulLen); 
    394         m_Duplicata.assign(cBuffer, 0, ulLen); 
    395  
    396         //SpecialOrganization 
    397     ulLen = sizeof(cBuffer); 
    398         memset(cBuffer,0,ulLen); 
    399         oTLVBuffer.FillASCIIData(PTEID_FIELD_TAG_ID_SpecialOrganization, cBuffer, &ulLen); 
    400         m_SpecialOrganization.assign(cBuffer, 0, ulLen); 
    401387 
    402388        //Height 
    403389        pteidngidBuffer = m_data.GetBytes(PTEIDNG_FIELD_ID_POS_Height, PTEIDNG_FIELD_ID_LEN_Height); 
    404         pteidngidBuffer.TrimRight(' '); 
     390        pteidngidBuffer.TrimRight('\0'); 
    405391        m_Height.assign((char*)(pteidngidBuffer.GetBytes()), pteidngidBuffer.Size()); 
    406392 
    407393        //DocumentNumber 
    408394        pteidngidBuffer = m_data.GetBytes(PTEIDNG_FIELD_ID_POS_DocumentNumber, PTEIDNG_FIELD_ID_LEN_DocumentNumber); 
    409         pteidngidBuffer.TrimRight(' '); 
     395        pteidngidBuffer.TrimRight('\0'); 
    410396        m_DocumentNumber.assign((char*)(pteidngidBuffer.GetBytes()), pteidngidBuffer.Size()); 
    411397 
    412398        //TaxNo 
    413399        pteidngidBuffer = m_data.GetBytes(PTEIDNG_FIELD_ID_POS_TaxNo, PTEIDNG_FIELD_ID_LEN_TaxNo); 
    414         pteidngidBuffer.TrimRight(' '); 
     400        pteidngidBuffer.TrimRight('\0'); 
    415401        m_TaxNo.assign((char*)(pteidngidBuffer.GetBytes()), pteidngidBuffer.Size()); 
    416402 
    417403        //SocialSecurityNo 
    418404        pteidngidBuffer = m_data.GetBytes(PTEIDNG_FIELD_ID_POS_SocialSecurityNo, PTEIDNG_FIELD_ID_LEN_SocialSecurityNo); 
    419         pteidngidBuffer.TrimRight(' '); 
     405        pteidngidBuffer.TrimRight('\0'); 
    420406        m_SocialSecurityNo.assign((char*)(pteidngidBuffer.GetBytes()), pteidngidBuffer.Size()); 
    421407 
    422408        //HealthNo 
    423409        pteidngidBuffer = m_data.GetBytes(PTEIDNG_FIELD_ID_POS_HealthNo, PTEIDNG_FIELD_ID_LEN_HealthNo); 
    424         pteidngidBuffer.TrimRight(' '); 
     410        pteidngidBuffer.TrimRight('\0'); 
    425411        m_HealthNo.assign((char*)(pteidngidBuffer.GetBytes()), pteidngidBuffer.Size()); 
    426412 
    427413        //IssuingEntity 
    428414        pteidngidBuffer = m_data.GetBytes(PTEIDNG_FIELD_ID_POS_IssuingEntity, PTEIDNG_FIELD_ID_LEN_IssuingEntity); 
    429         pteidngidBuffer.TrimRight(' '); 
     415        pteidngidBuffer.TrimRight('\0'); 
    430416        m_IssuingEntity.assign((char*)(pteidngidBuffer.GetBytes()), pteidngidBuffer.Size()); 
    431417 
     
    464450                facialinfo = m_data.GetBytes(PTEIDNG_FIELD_ID_POS_FACIALINFO, PTEIDNG_FIELD_ID_LEN_FACIALINFO); 
    465451                imageinfo = m_data.GetBytes(PTEIDNG_FIELD_ID_POS_IMAGEINFO, PTEIDNG_FIELD_ID_LEN_IMAGEINFO); 
    466                 photo = new PhotoPteid(photoRAW, cbeff, facialrechdr, facialinfo, imageinfo); 
     452                m_photo = new PhotoPteid(photoRAW, cbeff, facialrechdr, facialinfo, imageinfo); 
    467453        } 
    468454 
     
    476462        //MRZ1 
    477463        pteidngidBuffer = m_data.GetBytes(PTEIDNG_FIELD_ID_POS_Mrz1, PTEIDNG_FIELD_ID_LEN_Mrz1); 
    478         pteidngidBuffer.TrimRight(' '); 
     464        pteidngidBuffer.TrimRight('\0'); 
    479465        m_MRZ1.assign((char*)(pteidngidBuffer.GetBytes()), pteidngidBuffer.Size()); 
    480466 
    481467        //MRZ2 
    482468        pteidngidBuffer = m_data.GetBytes(PTEIDNG_FIELD_ID_POS_Mrz2, PTEIDNG_FIELD_ID_LEN_Mrz2); 
    483         pteidngidBuffer.TrimRight(' '); 
     469        pteidngidBuffer.TrimRight('\0'); 
    484470        m_MRZ2.assign((char*)(pteidngidBuffer.GetBytes()), pteidngidBuffer.Size()); 
    485471 
    486472        //MRZ3 
    487473        pteidngidBuffer = m_data.GetBytes(PTEIDNG_FIELD_ID_POS_Mrz3, PTEIDNG_FIELD_ID_LEN_Mrz3); 
    488         pteidngidBuffer.TrimRight(' '); 
     474        pteidngidBuffer.TrimRight('\0'); 
    489475        m_MRZ3.assign((char*)(pteidngidBuffer.GetBytes()), pteidngidBuffer.Size()); 
    490476 
    491477        //AccidentalIndications 
    492478        pteidngidBuffer = m_data.GetBytes(PTEIDNG_FIELD_ID_POS_AccidentalIndications, PTEIDNG_FIELD_ID_LEN_AccidentalIndications); 
    493         pteidngidBuffer.TrimRight(' '); 
     479        pteidngidBuffer.TrimRight('\0'); 
    494480        m_AccidentalIndications.assign((char*)(pteidngidBuffer.GetBytes()), pteidngidBuffer.Size()); 
    495481 
    496         /* ID File Caching 
    497          * try 
    498         { 
    499                 ofstream myfile; 
    500                 APL_Config conf_dir(CConfig::EIDMW_CONFIG_PARAM_GENERAL_PTEID_CACHEDIR); 
    501                 std::string     m_cachedirpath = conf_dir.getString(); 
    502                 std::string pteidfile = m_cachedirpath; 
    503                 pteidfile.append("/pteidng-"); 
    504                 pteidfile.append(m_SerialNumber); 
    505                 pteidfile.append("-"); 
    506                 pteidfile.append(PTEID_FILE_ID); 
    507                 pteidfile.append(".bin"); 
    508                 myfile.open (pteidfile.c_str(), ios::binary); 
    509                 pteidngidBuffer = m_data.GetBytes(PTEIDNG_FIELD_ID_POS_FILE, PTEIDNG_FIELD_ID_LEN_FILE); 
    510                 m_IDFile.assign((char*)(pteidngidBuffer.GetBytes()), pteidngidBuffer.Size()); 
    511                 myfile << m_IDFile; 
    512                 myfile.close(); 
    513         } 
    514         catch(CMWException& e) 
    515         { 
    516                 MWLOG(LEV_INFO, MOD_APL, L"Write cache file %ls on disk failed", PTEID_FILE_ID); 
    517         }*/ 
    518  
    519         //MemberOfFamily - See if this segfaults in every platform 
    520         //m_MemberOfFamily = m_GivenNameMother + " " + m_SurnameMother + " * " + m_GivenNameFather + " " + m_SurnameFather; 
    521  
    522482        m_mappedFields = true; 
    523  
     483} 
     484 
     485bool APL_EidFile_ID::MapFields() 
     486{ 
     487        // do nothing verify will load the data and then verify if sod check is active 
    524488        return true; 
    525489} 
     
    786750 
    787751        if(ShowData()) 
    788                 return photo; 
     752                return m_photo; 
    789753 
    790754        return NULL; 
     
    848812void  APL_EidFile_ID::doSODCheck(bool check){ 
    849813        m_SODCheck = check; 
     814        if (check){ 
     815                m_isVerified = false; 
     816                m_mappedFields = false; 
     817        } 
    850818} 
    851819 
     
    884852} 
    885853 
     854 
     855void APL_EidFile_Address::PackAddressData(CByteArray &cb, bool isNational){ 
     856 
     857        if (isNational){ 
     858                cb.Append((unsigned char*)m_CountryCode.c_str(),m_CountryCode.length()); 
     859                cb.Append((unsigned char*)m_DistrictCode.c_str(),m_DistrictCode.length()); 
     860                cb.Append((unsigned char*)m_DistrictDescription.c_str(),m_DistrictDescription.length()); 
     861                cb.Append((unsigned char*)m_MunicipalityCode.c_str(),m_MunicipalityCode.length()); 
     862                cb.Append((unsigned char*)m_MunicipalityDescription.c_str(),m_MunicipalityDescription.length()); 
     863                cb.Append((unsigned char*)m_CivilParishCode.c_str(),m_CivilParishCode.length()); 
     864                cb.Append((unsigned char*)m_CivilParishDescription.c_str(),m_CivilParishDescription.length()); 
     865                cb.Append((unsigned char*)m_AbbrStreetType.c_str(),m_AbbrStreetType.length()); 
     866                cb.Append((unsigned char*)m_StreetType.c_str(),m_StreetType.length()); 
     867                cb.Append((unsigned char*)m_StreetName.c_str(),m_StreetName.length()); 
     868                cb.Append((unsigned char*)m_AbbrBuildingType.c_str(),m_AbbrBuildingType.length()); 
     869                cb.Append((unsigned char*)m_BuildingType.c_str(),m_BuildingType.length()); 
     870                cb.Append((unsigned char*)m_DoorNo.c_str(),m_DoorNo.length()); 
     871                cb.Append((unsigned char*)m_Floor.c_str(),m_Floor.length()); 
     872                cb.Append((unsigned char*)m_Side.c_str(),m_Side.length()); 
     873                cb.Append((unsigned char*)m_Place.c_str(),m_Place.length()); 
     874                cb.Append((unsigned char*)m_Locality.c_str(),m_Locality.length()); 
     875                cb.Append((unsigned char*)m_Zip4.c_str(),m_Zip4.length()); 
     876                cb.Append((unsigned char*)m_Zip3.c_str(),m_Zip3.length()); 
     877                cb.Append((unsigned char*)m_PostalLocality.c_str(),m_PostalLocality.length()); 
     878                cb.Append((unsigned char*)m_Generated_Address_Code.c_str(),m_Generated_Address_Code.length()); 
     879        } else { 
     880                cb.Append((unsigned char*)m_Foreign_Country.c_str(),m_Foreign_Country.length()); 
     881                cb.Append((unsigned char*)m_Foreign_Generic_Address.c_str(),m_Foreign_Generic_Address.length()); 
     882                cb.Append((unsigned char*)m_Foreign_City.c_str(),m_Foreign_City.length()); 
     883                cb.Append((unsigned char*)m_Foreign_Region.c_str(),m_Foreign_Region.length()); 
     884                cb.Append((unsigned char*)m_Foreign_Locality.c_str(),m_Foreign_Locality.length()); 
     885                cb.Append((unsigned char*)m_Foreign_Postal_Code.c_str(),m_Foreign_Postal_Code.length()); 
     886                cb.Append((unsigned char*)m_Generated_Address_Code.c_str(),m_Generated_Address_Code.length()); 
     887        } 
     888} 
     889 
     890 
     891void APL_EidFile_Address::MapFieldsInternal(){ 
     892 
     893        if (m_mappedFields) // MARTINHO: have we mapped the fields yet? 
     894                return; 
     895 
     896        CByteArray pteidngAddressBuffer; 
     897 
     898        // Address Type 
     899        pteidngAddressBuffer = m_data.GetBytes(PTEIDNG_FIELD_ADDRESS_POS_TYPE, PTEIDNG_FIELD_ADDRESS_LEN_TYPE); 
     900        pteidngAddressBuffer.TrimRight('\0'); 
     901        m_AddressType.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 
     902 
     903        // Country code 
     904        pteidngAddressBuffer = m_data.GetBytes(PTEIDNG_FIELD_ADDRESS_POS_COUNTRY, PTEIDNG_FIELD_ADDRESS_LEN_COUNTRY); 
     905        pteidngAddressBuffer.TrimRight('\0'); 
     906        m_CountryCode.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 
     907 
     908        if (m_AddressType == m_FOREIGN) 
     909                ForeignerAddressFields(); 
     910        else 
     911                AddressFields(); 
     912 
     913        // MARTINHO: so we've mapped the fields no need to map them again 
     914        m_mappedFields = true; 
     915} 
     916 
    886917tCardFileStatus APL_EidFile_Address::VerifyFile() 
    887918{ 
    888919        if(!m_card) 
    889920                return CARDFILESTATUS_ERROR; 
    890          
    891         APL_EIDCard *pcard=dynamic_cast<APL_EIDCard *>(m_card); 
    892         tCardFileStatus filestatus; 
    893  
    894         //APL_Certif *CertRrn=pcard->getRrn(); 
    895  
    896         /*if(!CertRrn) 
    897                 return CARDFILESTATUS_ERROR_RRN; 
    898  
    899         //If the status of the RRN file is not OK,  
    900         //The rrn status is return 
    901         filestatus=CertRrn->getFileStatus(); 
    902         if(filestatus!=CARDFILESTATUS_OK) 
    903                 return filestatus; 
    904  
    905         //Get the status of the certificate RRN 
    906         APL_CertifStatus rrnstatus=CertRrn->getStatus(); 
    907         if((rrnstatus==APL_CERTIF_STATUS_TEST || rrnstatus==APL_CERTIF_STATUS_ISSUER) && !pcard->getAllowTestCard()) 
    908                 return CARDFILESTATUS_ERROR_TEST;  
    909  
    910         if(rrnstatus==APL_CERTIF_STATUS_DATE && !pcard->getAllowBadDate()) 
    911                 return CARDFILESTATUS_ERROR_DATE;  
    912  
    913         //We test the oid of the RRN  
    914         //except for test card because, test card may have a bad oid 
    915         if(!pcard->isTestCard()) 
    916                 if(!m_cryptoFwk->VerifyOidRrn(CertRrn->getData())) 
    917                         return CARDFILESTATUS_ERROR_RRN; 
    918  
    919         APL_EidFile_AddressSign *sign=pcard->getFileAddressSign(); 
    920  
    921         //If the status of the IDSign file is not OK,  
    922         //The IDSign status is return 
    923         filestatus=sign->getStatus(true); 
    924         if(filestatus!=CARDFILESTATUS_OK) 
    925                 return filestatus; 
    926  
    927         APL_EidFile_IDSign *idsign=pcard->getFileIDSign(); 
    928  
    929         CByteArray dataToSign;                                  //To check the signature, 
    930         dataToSign.Append(m_data);                              //we need to remove the null byte 
    931         dataToSign.TrimRight();                                 //at the end of the address file 
    932         dataToSign.Append(idsign->getData());   //then, we add the signature of the id file 
    933  
    934         if(!m_cryptoFwk->VerifySignatureSha1(dataToSign,sign->getData(),CertRrn->getData())) 
    935                 return CARDFILESTATUS_ERROR_SIGNATURE; 
    936  
    937         //If this is not a test card, the rrn status must be OK, unless we return an error 
    938         //For a test card, the status could be something else (for ex ISSUER) 
    939         if(!pcard->isTestCard()) 
    940         { 
    941                 if(rrnstatus!=APL_CERTIF_STATUS_VALID  
    942                         && rrnstatus!=APL_CERTIF_STATUS_VALID_CRL 
    943                         && rrnstatus!=APL_CERTIF_STATUS_VALID_OCSP) 
    944                         return CARDFILESTATUS_ERROR_CERT;  
    945         }*/ 
     921 
     922        if (m_isVerified) 
     923                        return CARDFILESTATUS_OK; 
     924 
     925                APL_EIDCard *pcard=dynamic_cast<APL_EIDCard *>(m_card); 
     926 
     927                MapFieldsInternal(); 
     928 
     929                if (m_SODCheck){ 
     930                        CByteArray addrData; 
     931                        PackAddressData(addrData, isNationalAddress()); 
     932 
     933                        if (!m_cryptoFwk->VerifyHashSha256(addrData,pcard->getFileSod()->getAddressHash())) 
     934                                throw CMWEXCEPTION(EIDMW_SOD_ERR_HASH_NO_MATCH_ADDRESS); 
     935                } 
     936                m_isVerified = true; 
    946937 
    947938        return CARDFILESTATUS_OK; 
     
    10101001 
    10111002        m_mappedFields = false; 
     1003        m_isVerified = false; 
     1004        m_SODCheck = false; 
    10121005} 
    10131006 
     
    10151008{ 
    10161009                CByteArray pteidngAddressBuffer; 
    1017                 char cBuffer[1200]; 
    1018                 unsigned long ulLen=0; 
    1019  
    1020                 CTLVBuffer oTLVBuffer; 
    1021             oTLVBuffer.ParseTLV(m_data.GetBytes(), m_data.Size()); 
    10221010 
    10231011                //District Code 
    10241012            pteidngAddressBuffer = m_data.GetBytes(PTEIDNG_FIELD_ADDRESS_POS_DISTRICT, PTEIDNG_FIELD_ADDRESS_LEN_DISTRICT); 
    1025             pteidngAddressBuffer.TrimRight(' '); 
     1013            pteidngAddressBuffer.TrimRight('\0'); 
    10261014            m_DistrictCode.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 
    10271015 
    10281016            //District Description 
    10291017            pteidngAddressBuffer = m_data.GetBytes(PTEIDNG_FIELD_ADDRESS_POS_DISTRICT_DESCRIPTION, PTEIDNG_FIELD_ADDRESS_LEN_DISTRICT_DESCRIPTION); 
    1030             pteidngAddressBuffer.TrimRight(' '); 
     1018            pteidngAddressBuffer.TrimRight('\0'); 
    10311019            m_DistrictDescription.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 
    10321020 
    10331021            //Municipality Code 
    10341022            pteidngAddressBuffer = m_data.GetBytes(PTEIDNG_FIELD_ADDRESS_POS_MUNICIPALITY, PTEIDNG_FIELD_ADDRESS_LEN_MUNICIPALITY); 
    1035             pteidngAddressBuffer.TrimRight(' '); 
     1023            pteidngAddressBuffer.TrimRight('\0'); 
    10361024            m_MunicipalityCode.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 
    10371025 
    10381026            //Municipality Description 
    10391027            pteidngAddressBuffer = m_data.GetBytes(PTEIDNG_FIELD_ADDRESS_POS_MUNICIPALITY_DESCRIPTION, PTEIDNG_FIELD_ADDRESS_LEN_MUNICIPALITY_DESCRIPTION); 
    1040             pteidngAddressBuffer.TrimRight(' '); 
     1028            pteidngAddressBuffer.TrimRight('\0'); 
    10411029            m_MunicipalityDescription.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 
    10421030 
    10431031            //CivilParish Code 
    10441032            pteidngAddressBuffer = m_data.GetBytes(PTEIDNG_FIELD_ADDRESS_POS_CIVILPARISH, PTEIDNG_FIELD_ADDRESS_LEN_CIVILPARISH); 
    1045             pteidngAddressBuffer.TrimRight(' '); 
     1033            pteidngAddressBuffer.TrimRight('\0'); 
    10461034            m_CivilParishCode.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 
    10471035 
    10481036            //CivilParish Description 
    10491037            pteidngAddressBuffer = m_data.GetBytes(PTEIDNG_FIELD_ADDRESS_POS_CIVILPARISH_DESCRIPTION, PTEIDNG_FIELD_ADDRESS_LEN_CIVILPARISH_DESCRIPTION); 
    1050             pteidngAddressBuffer.TrimRight(' '); 
     1038            pteidngAddressBuffer.TrimRight('\0'); 
    10511039            m_CivilParishDescription.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 
    10521040 
    10531041            //Abbreviated Street Type 
    10541042            pteidngAddressBuffer = m_data.GetBytes(PTEIDNG_FIELD_ADDRESS_POS_ABBR_STREET_TYPE, PTEIDNG_FIELD_ADDRESS_LEN_ABBR_STREET_TYPE); 
    1055             pteidngAddressBuffer.TrimRight(' '); 
     1043            pteidngAddressBuffer.TrimRight('\0'); 
    10561044            m_AbbrStreetType.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 
    10571045 
    10581046            //Street Type 
    10591047            pteidngAddressBuffer = m_data.GetBytes(PTEIDNG_FIELD_ADDRESS_POS_STREET_TYPE, PTEIDNG_FIELD_ADDRESS_LEN_STREET_TYPE); 
    1060             pteidngAddressBuffer.TrimRight(' '); 
     1048            pteidngAddressBuffer.TrimRight('\0'); 
    10611049            m_StreetType.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 
    10621050 
    10631051            //Street Name 
    10641052            pteidngAddressBuffer = m_data.GetBytes(PTEIDNG_FIELD_ADDRESS_POS_STREETNAME, PTEIDNG_FIELD_ADDRESS_LEN_STREETNAME); 
    1065             pteidngAddressBuffer.TrimRight(' '); 
     1053            pteidngAddressBuffer.TrimRight('\0'); 
    10661054            m_StreetName.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 
    10671055 
    10681056            //Abbreviated Building Type 
    10691057            pteidngAddressBuffer = m_data.GetBytes(PTEIDNG_FIELD_ADDRESS_POS_ABBR_BUILDING_TYPE, PTEIDNG_FIELD_ADDRESS_LEN_ABBR_BUILDING_TYPE); 
    1070             pteidngAddressBuffer.TrimRight(' '); 
     1058            pteidngAddressBuffer.TrimRight('\0'); 
    10711059            m_AbbrBuildingType.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 
    10721060 
    10731061            //Building Type 
    10741062            pteidngAddressBuffer = m_data.GetBytes(PTEIDNG_FIELD_ADDRESS_POS_BUILDING_TYPE, PTEIDNG_FIELD_ADDRESS_LEN_BUILDING_TYPE); 
    1075             pteidngAddressBuffer.TrimRight(' '); 
     1063            pteidngAddressBuffer.TrimRight('\0'); 
    10761064            m_BuildingType.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 
    10771065 
    10781066            //DoorNo 
    10791067            pteidngAddressBuffer = m_data.GetBytes(PTEIDNG_FIELD_ADDRESS_POS_DOORNO, PTEIDNG_FIELD_ADDRESS_LEN_DOORNO); 
    1080             pteidngAddressBuffer.TrimRight(' '); 
     1068            pteidngAddressBuffer.TrimRight('\0'); 
    10811069            m_DoorNo.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 
    10821070 
    10831071            //Floor 
    10841072            pteidngAddressBuffer = m_data.GetBytes(PTEIDNG_FIELD_ADDRESS_POS_FLOOR, PTEIDNG_FIELD_ADDRESS_LEN_FLOOR); 
    1085             pteidngAddressBuffer.TrimRight(' '); 
     1073            pteidngAddressBuffer.TrimRight('\0'); 
    10861074            m_Floor.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 
    10871075 
    10881076            //Side 
    10891077            pteidngAddressBuffer = m_data.GetBytes(PTEIDNG_FIELD_ADDRESS_POS_SIDE, PTEIDNG_FIELD_ADDRESS_LEN_SIDE); 
    1090             pteidngAddressBuffer.TrimRight(' '); 
     1078            pteidngAddressBuffer.TrimRight('\0'); 
    10911079            m_Side.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 
    10921080 
    10931081            //Place 
    10941082            pteidngAddressBuffer = m_data.GetBytes(PTEIDNG_FIELD_ADDRESS_POS_PLACE, PTEIDNG_FIELD_ADDRESS_LEN_PLACE); 
    1095             pteidngAddressBuffer.TrimRight(' '); 
     1083            pteidngAddressBuffer.TrimRight('\0'); 
    10961084            m_Place.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 
    10971085 
    10981086            //Locality 
    10991087            pteidngAddressBuffer = m_data.GetBytes(PTEIDNG_FIELD_ADDRESS_POS_LOCALITY, PTEIDNG_FIELD_ADDRESS_LEN_LOCALITY); 
    1100             pteidngAddressBuffer.TrimRight(' '); 
     1088            pteidngAddressBuffer.TrimRight('\0'); 
    11011089            m_Locality.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 
    11021090 
    11031091            //Zip4 
    11041092            pteidngAddressBuffer = m_data.GetBytes(PTEIDNG_FIELD_ADDRESS_POS_ZIP4, PTEIDNG_FIELD_ADDRESS_LEN_ZIP4); 
    1105             pteidngAddressBuffer.TrimRight(' '); 
     1093            pteidngAddressBuffer.TrimRight('\0'); 
    11061094            m_Zip4.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 
    11071095 
    11081096            //Zip3 
    11091097            pteidngAddressBuffer = m_data.GetBytes(PTEIDNG_FIELD_ADDRESS_POS_ZIP3, PTEIDNG_FIELD_ADDRESS_LEN_ZIP3); 
    1110             pteidngAddressBuffer.TrimRight(' '); 
     1098            pteidngAddressBuffer.TrimRight('\0'); 
    11111099            m_Zip3.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 
    11121100 
    11131101            //Postal Locality 
    11141102            pteidngAddressBuffer = m_data.GetBytes(PTEIDNG_FIELD_ADDRESS_POS_POSTALLOCALITY, PTEIDNG_FIELD_ADDRESS_LEN_POSTALLOCALITY); 
    1115             pteidngAddressBuffer.TrimRight(' '); 
     1103            pteidngAddressBuffer.TrimRight('\0'); 
    11161104            m_PostalLocality.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 
    11171105 
     
    11211109            m_Generated_Address_Code.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 
    11221110 
    1123             /* lmedinas: Address File caching */ 
    1124             /*ofstream myfile; 
    1125             APL_Config conf_dir(CConfig::EIDMW_CONFIG_PARAM_GENERAL_PTEID_CACHEDIR); 
    1126             std::string m_cachedirpath = conf_dir.getString(); 
    1127             std::string pteidfile = m_cachedirpath; 
    1128             pteidfile.append("/pteidng-"); 
    1129             pteidfile.append(m_SerialNumber); 
    1130             pteidfile.append("-"); 
    1131             pteidfile.append(PTEID_FILE_ADDRESS); 
    1132             pteidfile.append(".bin"); 
    1133             myfile.open (pteidfile.c_str()); 
    1134             pteidngAddressBuffer = m_data.GetBytes(PTEIDNG_FIELD_ID_POS_FILE, PTEIDNG_FIELD_ID_LEN_FILE); 
    1135             m_AddressFile.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 
    1136             myfile << m_AddressFile; 
    1137             myfile.close();*/ 
    11381111} 
    11391112 
     
    11411114{ 
    11421115        CByteArray pteidngAddressBuffer; 
    1143         char cBuffer[1200]; 
    1144         unsigned long ulLen=0; 
    1145  
    1146         CTLVBuffer oTLVBuffer; 
    1147     oTLVBuffer.ParseTLV(m_data.GetBytes(), m_data.Size()); 
    11481116 
    11491117        //Foreign Country 
    11501118        pteidngAddressBuffer = m_data.GetBytes(PTEIDNG_FIELD_FOREIGN_ADDRESS_POS_COUNTRY_DESCRIPTION, PTEIDNG_FIELD_FOREIGN_ADDRESS_LEN_COUNTRY_DESCRIPTION); 
    1151         pteidngAddressBuffer.TrimRight(' '); 
     1119        pteidngAddressBuffer.TrimRight('\0'); 
    11521120        m_Foreign_Country.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 
    11531121 
    11541122        //Foreign Generic Address 
    11551123        pteidngAddressBuffer = m_data.GetBytes(PTEIDNG_FIELD_FOREIGN_ADDRESS_POS_ADDRESS, PTEIDNG_FIELD_FOREIGN_ADDRESS_LEN_ADDRESS); 
    1156         pteidngAddressBuffer.TrimRight(' '); 
     1124        pteidngAddressBuffer.TrimRight('\0'); 
    11571125        m_Foreign_Generic_Address.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 
    11581126 
    11591127        //Foreign City 
    11601128        pteidngAddressBuffer = m_data.GetBytes(PTEIDNG_FIELD_FOREIGN_ADDRESS_POS_CITY, PTEIDNG_FIELD_FOREIGN_ADDRESS_LEN_CITY); 
    1161         pteidngAddressBuffer.TrimRight(' '); 
     1129        pteidngAddressBuffer.TrimRight('\0'); 
    11621130        m_Foreign_City.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 
    11631131 
    11641132    //Foreign Region 
    11651133    pteidngAddressBuffer = m_data.GetBytes(PTEIDNG_FIELD_FOREIGN_ADDRESS_POS_REGION, PTEIDNG_FIELD_FOREIGN_ADDRESS_LEN_REGION); 
    1166     pteidngAddressBuffer.TrimRight(' '); 
     1134    pteidngAddressBuffer.TrimRight('\0'); 
    11671135    m_Foreign_Region.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 
    11681136 
    11691137    //Foreign Locality 
    11701138    pteidngAddressBuffer = m_data.GetBytes(PTEIDNG_FIELD_FOREIGN_ADDRESS_POS_LOCALITY, PTEIDNG_FIELD_FOREIGN_ADDRESS_LEN_LOCALITY); 
    1171     pteidngAddressBuffer.TrimRight(' '); 
     1139    pteidngAddressBuffer.TrimRight('\0'); 
    11721140    m_Foreign_Locality.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 
    11731141 
    11741142    //Foreign Postal Code 
    11751143    pteidngAddressBuffer = m_data.GetBytes(PTEIDNG_FIELD_FOREIGN_ADDRESS_POS_POSTAL_CODE, PTEIDNG_FIELD_FOREIGN_ADDRESS_LEN_POSTAL_CODE); 
    1176     pteidngAddressBuffer.TrimRight(' '); 
     1144    pteidngAddressBuffer.TrimRight('\0'); 
    11771145    m_Foreign_Postal_Code.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 
    11781146 
    11791147    //Foreign Generated Address Code 
    11801148    pteidngAddressBuffer = m_data.GetBytes(PTEIDNG_FIELD_FOREIGN_ADDRESS_POS_GENADDRESS_NUM, PTEIDNG_FIELD_FOREIGN_ADDRESS_LEN_GENADDRESS_NUM); 
    1181     pteidngAddressBuffer.TrimRight(' '); 
     1149    pteidngAddressBuffer.TrimRight('\0'); 
    11821150    m_Generated_Address_Code.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 
    11831151 
    1184     /* martinho - do not cache the address file 
    1185     ofstream myfile; 
    1186     APL_Config conf_dir(CConfig::EIDMW_CONFIG_PARAM_GENERAL_PTEID_CACHEDIR); 
    1187     std::string m_cachedirpath = conf_dir.getString(); 
    1188     std::string pteidfile = m_cachedirpath; 
    1189     pteidfile.append("/pteidng-"); 
    1190     pteidfile.append(m_SerialNumber); 
    1191     pteidfile.append("-"); 
    1192     pteidfile.append(PTEID_FILE_ADDRESS); 
    1193     pteidfile.append(".bin"); 
    1194     myfile.open (pteidfile.c_str()); 
    1195     pteidngAddressBuffer = m_data.GetBytes(PTEIDNG_FIELD_ID_POS_FILE, PTEIDNG_FIELD_ID_LEN_FILE); 
    1196     m_AddressFile.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 
    1197     myfile << m_AddressFile; 
    1198     myfile.close(); 
    1199         */ 
    12001152} 
    12011153 
    12021154bool APL_EidFile_Address::MapFields() 
    12031155{ 
    1204         // MARTINHO: have we mapped the fields yet? 
    1205         if (m_mappedFields) 
    1206                 return true; 
    1207  
    1208         CByteArray pteidngAddressBuffer; 
    1209         char cBuffer[1200]; 
    1210         unsigned long ulLen=0; 
    1211  
    1212         CTLVBuffer oTLVBuffer; 
    1213         oTLVBuffer.ParseTLV(m_data.GetBytes(), m_data.Size()); 
    1214  
    1215         // Address Type 
    1216         pteidngAddressBuffer = m_data.GetBytes(PTEIDNG_FIELD_ADDRESS_POS_TYPE, PTEIDNG_FIELD_ADDRESS_LEN_TYPE); 
    1217         pteidngAddressBuffer.TrimRight(' '); 
    1218         m_AddressType.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 
    1219  
    1220         // Country code 
    1221         pteidngAddressBuffer = m_data.GetBytes(PTEIDNG_FIELD_ADDRESS_POS_COUNTRY, PTEIDNG_FIELD_ADDRESS_LEN_COUNTRY); 
    1222         pteidngAddressBuffer.TrimRight('\0'); 
    1223         m_CountryCode.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 
    1224  
    1225         if (m_AddressType == m_FOREIGN) 
    1226                 ForeignerAddressFields(); 
    1227         else 
    1228                 AddressFields(); 
    1229  
    1230         // MARTINHO: so we've mapped the fields no need to map them again 
    1231         m_mappedFields = true; 
    1232  
     1156        // do nothing verify will load the data and then verify if sod check is active 
    12331157        return true; 
    12341158} 
     
    14041328 
    14051329bool APL_EidFile_Address::isNationalAddress(){ 
    1406         return (m_AddressType.compare(m_NATIONAL)); 
     1330        return (m_AddressType.compare(m_NATIONAL)==0); 
    14071331} 
    14081332 
     
    14851409APL_EidFile_Sod::APL_EidFile_Sod(APL_EIDCard *card):APL_CardFile(card,PTEID_FILE_SOD,NULL) 
    14861410{ 
     1411 
    14871412} 
    14881413 
     
    14931418tCardFileStatus APL_EidFile_Sod::VerifyFile() 
    14941419{ 
    1495         // verify SOD file, signature, certificates 
    1496  
    1497         return CARDFILESTATUS_OK; 
     1420        tCardFileStatus filestatus = CARDFILESTATUS_ERROR_SIGNATURE; 
     1421 
     1422        cout << "APL_EidFile_Sod::VerifyFile() - I" << endl; 
     1423        if (m_isVerified) // no need to check again 
     1424                return CARDFILESTATUS_OK; 
     1425 
     1426        if (!m_SODCheck) // check is not activated 
     1427                return CARDFILESTATUS_OK; 
     1428 
     1429        APL_EIDCard *pcard=dynamic_cast<APL_EIDCard *>(m_card); 
     1430 
     1431        PKCS7 *p7 = NULL; 
     1432 
     1433        ERR_load_PKCS7_strings(); 
     1434        ERR_load_X509_strings(); 
     1435        OpenSSL_add_all_digests(); 
     1436 
     1437        const unsigned char *temp = m_data.GetBytes(); 
     1438        long int len = m_data.Size(); 
     1439        temp+=4; //martinho: jump the response message template format 2" (DER type 77) 
     1440 
     1441        p7 = d2i_PKCS7(NULL, (const unsigned char **)&temp, len); 
     1442 
     1443        STACK_OF(X509) *pSigners = PKCS7_get0_signers(p7, NULL, 0); 
     1444 
     1445        X509_STORE *store = X509_STORE_new(); 
     1446 
     1447        // martinho: load all certificates, let openssl do the job and find the needed ones... 
     1448        for (int i = 0; i<pcard->getCertificates()->countAll(true);i++){ 
     1449                X509 *pX509 = NULL; 
     1450                const unsigned char *p = pcard->getCertificates()->getCert(i,false)->getData().GetBytes(); 
     1451                pX509 = d2i_X509(&pX509, &p, pcard->getCertificates()->getCert(i,false)->getData().Size()); 
     1452                X509_STORE_add_cert(store, pX509); 
     1453        } 
     1454        BIO *Out = BIO_new(BIO_s_mem()); 
     1455 
     1456        if (PKCS7_verify(p7,pSigners,store,NULL,Out,0)==1){ 
     1457                unsigned char *p; 
     1458                long size; 
     1459                size = BIO_get_mem_data(Out, &p); 
     1460                m_encapsulatedContent.Append(p,size); 
     1461 
     1462                m_isVerified = true; 
     1463                filestatus = CARDFILESTATUS_OK; 
     1464        } 
     1465 
     1466        X509_STORE_free(store); 
     1467        sk_X509_free(pSigners); 
     1468        BIO_free_all(Out); 
     1469        PKCS7_free(p7); 
     1470 
     1471        cout << "APL_EidFile_Sod::VerifyFile() - F" << endl; 
     1472        return filestatus; 
    14981473} 
    14991474 
    15001475bool APL_EidFile_Sod::ShowData() 
    15011476{ 
    1502         APL_EIDCard *pcard=dynamic_cast<APL_EIDCard *>(m_card); 
    1503  
    1504         bool bAllowTest=pcard->getAllowTestCard(); 
    1505         bool bAllowBadDate=pcard->getAllowBadDate(); 
    1506  
    1507         tCardFileStatus status=getStatus(true,&bAllowTest,&bAllowBadDate); 
    1508         if(status==CARDFILESTATUS_OK) 
    1509                 return true; 
    1510  
    1511         //If the autorisation changed, we read the card again 
    1512         if((status==CARDFILESTATUS_ERROR_TEST && pcard->getAllowTestCard()) 
    1513                 || (status==CARDFILESTATUS_ERROR_DATE && pcard->getAllowBadDate())) 
    1514  
    1515                 status=LoadData(true); 
    1516  
    1517         if(status==CARDFILESTATUS_OK) 
    1518                 return true; 
    1519  
    1520         return false; 
     1477        APL_EIDCard *pcard=dynamic_cast<APL_EIDCard *>(m_card); 
     1478 
     1479        bool bAllowTest=pcard->getAllowTestCard(); 
     1480        bool bAllowBadDate=pcard->getAllowBadDate(); 
     1481 
     1482        tCardFileStatus status=getStatus(true,&bAllowTest,&bAllowBadDate); 
     1483        if(status==CARDFILESTATUS_OK) 
     1484                return true; 
     1485 
     1486        //If the autorisation changed, we read the card again 
     1487        if((status==CARDFILESTATUS_ERROR_TEST && pcard->getAllowTestCard()) 
     1488                        || (status==CARDFILESTATUS_ERROR_DATE && pcard->getAllowBadDate())) 
     1489 
     1490                status=LoadData(false); 
     1491 
     1492        if(status==CARDFILESTATUS_OK) 
     1493                return true; 
     1494 
     1495        return false; 
    15211496} 
    15221497 
    15231498void APL_EidFile_Sod::EmptyFields() 
    15241499{ 
    1525         m_Sod.clear(); 
    15261500        m_mappedFields = false; 
     1501        m_isVerified = false; 
     1502        m_picHash.ClearContents(); 
     1503        m_pkHash.ClearContents(); 
     1504        m_idHash.ClearContents(); 
     1505        m_addressHash.ClearContents(); 
     1506        m_encapsulatedContent.ClearContents(); 
     1507} 
     1508 
     1509void APL_EidFile_Sod::doSODCheck(bool check){ 
     1510        m_SODCheck = check; 
     1511        if (check) { 
     1512                m_isVerified = false; 
     1513                m_mappedFields = false; 
     1514        } 
    15271515} 
    15281516 
    15291517bool APL_EidFile_Sod::MapFields() 
    15301518{ 
    1531         if (m_mappedFields) 
     1519        if (m_mappedFields) // map only one time 
    15321520                return true; 
    15331521 
    1534         CByteArray pteidngSodBuffer; 
    1535     char cBuffer[1200]; 
    1536     unsigned long ulLen=0; 
    1537  
    1538     CTLVBuffer oTLVBuffer; 
    1539     oTLVBuffer.ParseTLV(m_data.GetBytes(), m_data.Size()); 
    1540  
    1541     //PersoData 
    1542     pteidngSodBuffer = m_data.GetBytes(0, 50); 
    1543     pteidngSodBuffer.TrimRight(' '); 
    1544     m_Sod.assign((char*)(pteidngSodBuffer.GetBytes()), pteidngSodBuffer.Size()); 
    1545  
    1546     m_mappedFields = true; 
    1547  
    1548     return true; 
    1549 } 
     1522        if (!m_SODCheck) // map only if sod check is active 
     1523                return true; 
     1524 
     1525        SODParser parser; 
     1526 
     1527        parser.ParseSodEncapsulatedContent(m_encapsulatedContent); 
     1528 
     1529        SODAttributes &attr = parser.getHashes(); 
     1530 
     1531        m_idHash.Append(attr.hashes[0]); 
     1532        m_addressHash.Append(attr.hashes[1]); 
     1533        m_picHash.Append(attr.hashes[2]); 
     1534        m_pkHash.Append(attr.hashes[3]); 
     1535 
     1536        m_mappedFields = true; 
     1537 
     1538        return true; 
     1539} 
     1540 
     1541const CByteArray& APL_EidFile_Sod::getAddressHash(){ 
     1542        if(ShowData()) 
     1543                return m_addressHash; 
     1544        return EmptyByteArray; 
     1545} 
     1546 
     1547const CByteArray& APL_EidFile_Sod::getPictureHash(){ 
     1548        if(ShowData()) 
     1549                return m_picHash; 
     1550        return EmptyByteArray; 
     1551} 
     1552 
     1553const CByteArray& APL_EidFile_Sod::getCardPublicKeyHash(){ 
     1554        if(ShowData()) 
     1555                return m_pkHash; 
     1556        return EmptyByteArray; 
     1557} 
     1558 
     1559const CByteArray& APL_EidFile_Sod::getIdHash(){ 
     1560        if(ShowData()) 
     1561                return m_idHash; 
     1562        return EmptyByteArray; 
     1563} 
     1564 
    15501565 
    15511566/***************************************************************************************** 
  • middleware-offline/trunk/_src/eidmw/applayer/CardPteid.h

    r35 r41  
    177177        virtual bool MapFields(); 
    178178 
     179        virtual void MapFieldsInternal(); 
     180 
     181        virtual void PackIdData(CByteArray &cb); 
     182        virtual void PackPublicKeyData(CByteArray &cb); 
     183        virtual void PackPictureData(CByteArray &cb); 
     184 
    179185        /** 
    180186          * Empty all fields 
     
    218224        std::string m_SurnameMother;                                                    /**< Field SurnameMother */ 
    219225        std::string m_AccidentalIndications;                                    /**< Field AccidentalIndications */ 
    220         PhotoPteid* photo;                                                                              /**< object photo */ 
     226        PhotoPteid* m_photo;                                                                            /**< object photo */ 
    221227        std::string m_MRZ1;                                                                             /**< Field MRZ block 1 */ 
    222228        std::string m_MRZ2;                                                                             /**< Field MRZ block 2 */ 
     
    343349        virtual bool MapFields(); 
    344350        virtual void EmptyFields();                                                                     /**< Empty all fields */ 
     351        void PackAddressData(CByteArray &cb, bool isNational); 
     352        void MapFieldsInternal(); 
    345353 
    346354        /** 
     
    446454        tCardFileStatus VerifyFile(); 
    447455 
     456        const CByteArray& getAddressHash(); 
     457 
     458        const CByteArray& getPictureHash(); 
     459 
     460        const CByteArray& getCardPublicKeyHash(); 
     461 
     462        const CByteArray& getIdHash(); 
     463 
     464        void doSODCheck(bool check); 
     465 
    448466protected: 
    449467        /** 
     
    465483        virtual bool MapFields();                                                                       /**< Nothing to do m_data contains the file */ 
    466484        virtual void EmptyFields();                                                                     /**< Nothing to do m_data contains the file */ 
    467         void doSODCheck(bool check) {} 
    468485 
    469486        /** 
     
    472489        virtual bool ShowData(); 
    473490 
    474         std::string m_Sod;                                              /**< Field Sod */ 
    475         std::string m_SodFile;                                                                                  /**< Whole Sod Field */ 
     491        CByteArray m_idHash; 
     492        CByteArray m_addressHash; 
     493        CByteArray m_pkHash; 
     494        CByteArray m_picHash; 
     495        CByteArray m_encapsulatedContent; 
    476496 
    477497friend  APL_EidFile_Sod *APL_EIDCard::getFileSod();     /**< This method must access protected constructor */ 
  • middleware-offline/trunk/_src/eidmw/applayer/SigContainer.cpp

    r35 r41  
    9191 
    9292                int n_files = mz_zip_reader_get_num_files(&zip_archive); 
    93                 printf ("mz_zip_reader_get_num_files: %d\n", n_files); 
    9493                tHashedFile **hashes = new tHashedFile*[n_files]; 
    9594 
     
    101100                        if (!mz_zip_reader_file_stat(&zip_archive, i, &file_stat)) 
    102101                        { 
    103                                 fprintf(stderr, "mz_zip_reader_file_stat() failed!\n"); 
     102                                fprintf(stderr, "E: mz_zip_reader_file_stat() failed!\n"); 
    104103                                mz_zip_reader_end(&zip_archive); 
    105104                                continue; 
     
    111110                                if (!p) 
    112111                                { 
    113                                         fprintf(stderr, "mz_zip_reader_extract_file_to_heap() failed!\n"); 
     112                                        fprintf(stderr, "E: mz_zip_reader_extract_file_to_heap() failed!\n"); 
    114113                                        mz_zip_reader_end(&zip_archive); 
    115114                                        continue; 
     
    146145                mz_bool status; 
    147146 
    148                 MWLOG(LEV_DEBUG, MOD_APL, L"StoreSignatureToDisk() called with output_file = %S\n",output_file);  
     147                MWLOG(LEV_DEBUG, MOD_APL, L"StoreSignatureToDisk() called with output_file = %s\n",output_file);  
    149148 
    150149                //Truncate the output file first... 
     
    156155                        absolute_path = paths[i];        
    157156                        ptr_content = readFile(absolute_path, &file_size); 
    158                         MWLOG(LEV_DEBUG, MOD_APL, L"Compressing %d bytes from file %S\n", file_size, absolute_path); 
     157                        MWLOG(LEV_DEBUG, MOD_APL, L"Compressing %d bytes from file %s\n", file_size, absolute_path); 
    159158 
    160159                        zip_entry_name = Basename((char *)absolute_path); 
     
    165164                        latin1_to_utf8((unsigned char *)zip_entry_name, (unsigned char *)utf8_filename); 
    166165                        zip_entry_name = utf8_filename; 
    167                         MWLOG (LEV_DEBUG, MOD_APL, L"Compressing filename (after conversion): %S\n", zip_entry_name); 
     166                        MWLOG (LEV_DEBUG, MOD_APL, L"Compressing filename (after conversion): %s\n", zip_entry_name); 
    168167#endif 
    169168 
     
    172171                        if (!status) 
    173172                        { 
    174                                 MWLOG(LEV_ERROR, MOD_APL, L"mz_zip_add_mem_to_archive_file_in_place failed with argument %S", 
     173                                MWLOG (LEV_ERROR, MOD_APL, L"mz_zip_add_mem_to_archive_file_in_place failed with argument %s", 
    175174                                                zip_entry_name); 
    176175                                return; 
  • middleware-offline/trunk/_src/eidmw/applayer/XadesSignature.cpp

    r35 r41  
    1212 
    1313#include "APLCard.h" 
     14#include "APLConfig.h" 
    1415 
    1516#include "CardPteidDef.h" 
     
    5657//OpenSSL 
    5758#include <openssl/sha.h> 
     59#include <openssl/evp.h> 
    5860 
    5961//stat 
     
    8183{ 
    8284 
     85        CByteArray XadesSignature::mp_timestamp_data = CByteArray(); 
    8386        CByteArray XadesSignature::HashFile(const char *file_path) 
    8487        { 
     
    160163        } 
    161164         
    162         void XadesSignature::generate_asn1_request_struct(char *sha_1) 
     165        void XadesSignature::generate_asn1_request_struct(unsigned char *sha_1) 
    163166        { 
    164167 
     
    188191 
    189192        */ 
    190         void XadesSignature::addSignatureProperties(DSIGSignature *sig) 
     193        //Returns the newly created timestamp node 
     194        DOMNode *XadesSignature::addSignatureProperties(DSIGSignature *sig) 
    191195        { 
    192196                XMLCh *prefix = XMLString::transcode("etsi"); 
     
    212216                ((DOMElement *)n4)->setAttributeNS(NULL, s_Id, XMLString::transcode("SignedProperties")); 
    213217                n4->appendChild(doc->createTextNode(DSIGConstants::s_unicodeStrNL)); //Pretty print 
    214  
     218                makeQName(str, prefix, "SignatureTimeStamp"); 
     219                DOMNode * n5 = doc->createElementNS(xades_namespace, str.rawXMLChBuffer()); 
     220                makeQName(str, prefix, "EncapsulatedTimeStamp"); 
     221                DOMNode * n6 = doc->createElementNS(xades_namespace, str.rawXMLChBuffer()); 
    215222                n1->appendChild(n2); 
    216223                n1->appendChild(n4); 
    217224                n2->appendChild(n3); 
     225                n3->appendChild(n5); 
     226                n5->appendChild(n6); 
    218227         
    219228                obj1->appendChild(n1); 
    220229 
    221         } 
    222  
    223         CByteArray XadesSignature::timestamp_data(const unsigned char *input, unsigned int data_len) 
     230                return n6; 
     231 
     232        } 
     233         
     234        /* 
     235         * timestamp parameter is the base64-encoded string version of the timestamp 
     236         * 
     237         */ 
     238        void XadesSignature::addTimestampNode (XERCES_NS DOMNode *node, unsigned char *timestamp) 
     239        { 
     240                XERCES_NS DOMDocument *doc = node->getOwnerDocument(); 
     241 
     242                node->appendChild(doc->createTextNode( 
     243                                        XMLString::transcode((const char*)timestamp))); 
     244 
     245        } 
     246 
     247        unsigned char* base64Encode(const unsigned char *array, int len) 
     248        { 
     249                EVP_ENCODE_CTX ectx; 
     250                unsigned char* out = new unsigned char[len*2]; 
     251                int outlen = 0; 
     252 
     253                EVP_EncodeInit( &ectx ); 
     254                EVP_EncodeUpdate( &ectx, out, &outlen, array, len ); 
     255                //This null-terminates the out string 
     256                EVP_EncodeFinal( &ectx, out+outlen, &outlen ); 
     257 
     258                return out; 
     259 
     260        } 
     261 
     262        void XadesSignature::timestamp_data(const unsigned char *input, unsigned int data_len) 
    224263        { 
    225264 
     
    228267                char error_buf[CURL_ERROR_SIZE]; 
    229268 
     269                //Get Timestamping server URL from config 
     270                APL_Config tsa_url(CConfig::EIDMW_CONFIG_PARAM_XSIGN_TSAURL); 
     271                const char * TSA_URL = tsa_url.getString(); 
     272 
    230273                curl = curl_easy_init(); 
    231274 
     
    243286                        curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, data_len); 
    244287 
    245                         curl_easy_setopt(curl, CURLOPT_URL, TIMESTAMPING_HOST); 
     288                        curl_easy_setopt(curl, CURLOPT_URL, TSA_URL); 
     289 
     290                        curl_easy_setopt(curl, CURLOPT_TIMEOUT, 15L); 
    246291 
    247292                        /* Now specify the POST data */  
     
    260305                                MWLOG(LEV_ERROR, MOD_APL, L"Timestamping error in HTTP POST request. LibcURL returned %s\n",  
    261306                                                (char *)error_buf); 
    262                                 throw CMWEXCEPTION(EIDMW_ERR_CHECK); 
    263307                        } 
    264308 
     
    270314                } 
    271315 
    272                 return CByteArray(mp_timestamp_data); 
    273316        } 
    274317 
     
    529572} 
    530573 
    531 CByteArray &XadesSignature::SignXades(const char ** paths, unsigned int n_paths) 
     574CByteArray &XadesSignature::SignXades(const char ** paths, unsigned int n_paths, bool do_timestamping) 
    532575{ 
    533576 
     
    546589 
    547590        XMLByte toFill[35 * sizeof(XMLByte)]; //SHA-1 Hash prepended with Algorithm ID as by PKCS#1 standard 
     591        unsigned char signature_hash[SHA1_LEN]; 
    548592 
    549593        DOMImplementation *impl =  
     
    577621                        //Create a reference to the external file 
    578622                        DSIGReference * ref = sig->createReference(createURI(path)); 
    579                         MWLOG(LEV_DEBUG, MOD_APL, L"SignXades(): Hashing file %S", path); 
     623                        MWLOG(LEV_DEBUG, MOD_APL, L"SignXades(): Hashing file %s", path); 
    580624                        sha1_hash = HashFile(path); 
    581625 
     
    602646                loadCert (certData, pub_key); 
    603647 
    604                 //Access pteid card to sign the XML Data 
    605                 //This code will be eventually integrated in applayer 
    606                 // so this connection to the card will be completely different 
    607  
    608                 // Create KeyInfo element 
    609648 
    610649                keyInfoX509 = sig->appendX509Data(); 
     
    627666                sig->signExternal((XMLByte *)(rsa_signature.GetBytes()), PTEID_SIGNATURE_LENGTH); //RSA Signature with modlength=1024 bits 
    628667                 
    629                 addSignatureProperties(sig); 
    630                  
     668                DOMNode * timestamp_node = addSignatureProperties(sig); 
     669 
     670                if (do_timestamping) 
     671                { 
     672 
     673                        //Hash the signature value, generate the ASN.1 encoded request  
     674                        //and then send it to the timestamp server 
     675                        SHA1 (rsa_signature.GetBytes(), PTEID_SIGNATURE_LENGTH, signature_hash); 
     676 
     677                        generate_asn1_request_struct(signature_hash); 
     678 
     679                        timestamp_data(timestamp_asn1_request, ASN1_LEN); 
     680 
     681                        CByteArray *timestamp_blob = &XadesSignature::mp_timestamp_data; 
     682 
     683                        if (timestamp_blob->Size() == 0) 
     684                                MWLOG(LEV_ERROR, MOD_APL, L"An error occurred in timestamp_data." 
     685                                                "It's possible that the timestamp service is down "); 
     686                        else 
     687                        { 
     688                                unsigned char * base64str = base64Encode(timestamp_blob->GetBytes(), timestamp_blob->Size()); 
     689                                addTimestampNode(timestamp_node, base64str); 
     690                        } 
     691                } 
    631692        } 
    632693        catch (XSECCryptoException &e) 
  • middleware-offline/trunk/_src/eidmw/applayer/XadesSignature.h

    r35 r41  
    1616#define ASN1_LEN 43 
    1717#define SHA1_OFFSET 20 
    18  
    19 #define TIMESTAMPING_HOST "http://ts.cartaodecidadao.pt/tsa/server" 
    2018 
    2119#define XERCES_NS XERCES_CPP_NAMESPACE_QUALIFIER 
     
    5452 
    5553                CByteArray &SignXades(CByteArray ba, const char *URL); 
    56                 CByteArray &SignXadesT(CByteArray ba, const char *URL); 
    57                 CByteArray &SignXades(const char ** paths, unsigned int n_paths); 
    58                 CByteArray &SignXadesT(const char ** paths, unsigned int n_paths); 
     54                CByteArray &SignXades(const char ** paths, unsigned int n_paths, bool do_timestamp); 
    5955 
    6056                static bool checkExternalRefs(DSIGReferenceList *refs, tHashedFile **hashes); 
     
    6561                 
    6662                CByteArray HashFile(const char *file_path); 
    67                 void addSignatureProperties(DSIGSignature *sig); 
     63                DOMNode * addSignatureProperties(DSIGSignature *sig); 
    6864                CByteArray *WriteToByteArray(XERCES_NS DOMDocument *doc);  
    6965                //Utility methods for signature 
     
    7268                int appendOID(XMLByte *toFill); 
    7369 
    74                 void addTimestampNode(DSIGSignature *sig); 
     70                void addTimestampNode(XERCES_NS DOMNode *node, unsigned char *timestamp); 
    7571                XMLCh* createURI(const char *path); 
    7672 
    7773 
    7874                //Utility methods for timestamping 
    79                 size_t curl_write_data(char *ptr, size_t size, size_t nmemb, void * stream);  
    80                 CByteArray timestamp_data(const unsigned char *input, unsigned int data_len); 
    81                 void generate_asn1_request_struct(char *sha_1); 
     75                 
     76                //Curl write_function callback: it writes the data to the static array mp_timestamp_data 
     77                static size_t curl_write_data(char *ptr, size_t size, size_t nmemb, void * stream);  
     78 
     79                void timestamp_data(const unsigned char *input, unsigned int data_len); 
     80                void generate_asn1_request_struct(unsigned char *sha_1); 
    8281 
    8382                static void initXerces(); 
     
    8685                X509 * mp_cert; 
    8786                APL_Card *mp_card; 
    88                 CByteArray mp_timestamp_data; 
     87                static CByteArray mp_timestamp_data; 
    8988 
    9089 
  • middleware-offline/trunk/_src/eidmw/applayer/applayer.pro

    r35 r41  
    8585        APLPublicKey.h \ 
    8686        SigContainer.h \ 
    87         XadesSignature.h 
     87        XadesSignature.h \ 
     88        SODParser.h 
    8889 
    8990 
     
    110111    APLPublicKey.cpp \ 
    111112    SigContainer.cpp \ 
    112     XadesSignature.cpp 
     113    XadesSignature.cpp \ 
     114    SODParser.cpp 
    113115     
    114116     
  • middleware-offline/trunk/_src/eidmw/applayer/cryptoFramework.cpp

    r5 r41  
    580580        return VerifyHash(data,hash,EVP_sha1()); 
    581581} 
     582 
     583bool APL_CryptoFwk::VerifyHashSha256(const CByteArray &data, const CByteArray &hash) 
     584{ 
     585        //Check the hash with sha256 algorithm 
     586        return VerifyHash(data,hash,EVP_sha256()); 
     587} 
     588 
    582589 
    583590bool APL_CryptoFwk::VerifyHash(const CByteArray &data, const CByteArray &hash, const EVP_MD *algorithm) 
  • middleware-offline/trunk/_src/eidmw/applayer/cryptoFramework.h

    r34 r41  
    6666enum FWK_HashAlgo { 
    6767        FWK_ALGO_MD5,      // 16-byte hash 
    68         FWK_ALGO_SHA1     // 20-byte hash 
     68        FWK_ALGO_SHA1,     // 20-byte hash 
     69        FWK_ALGO_SHA256 
    6970}; 
    7071 
     
    165166 
    166167        /** 
     168         * Verify if the data has the correct hash (sha256 algorithm) 
     169         */ 
     170        bool VerifyHashSha256(const CByteArray &data, const CByteArray &hash); 
     171 
     172        /** 
    167173          * Get the hash of the data 
    168174          */ 
  • middleware-offline/trunk/_src/eidmw/common/Config.h

    r25 r41  
    193193#define EIDMW_CNF_XSIGN_TIMEOUT                 L"timeout"                                      //number;  
    194194 
     195#define EIDMW_CNF_SECTION_AUTOUPDATES       L"autoupdates"            //section with the autoupdates parameters 
     196#define EIDMW_CNF_AUTOUPDATES_URL      L"serverurl"       //string 
    195197 
    196198namespace eIDMW 
     
    257259    static void           SetLong(  tLocation location, const std::wstring &csName, const std::wstring &czSection, long lValue); 
    258260 
    259         static void           DelString(tLocation location, const struct Param_Str param); 
     261    static void           DelString(tLocation location, const struct Param_Str param); 
    260262    static void           DelString(tLocation location, const std::wstring &csName, const std::wstring &czSection); 
    261263    static void           DelLong(  tLocation location, const struct Param_Num param); 
     
    304306    static const struct Param_Num EIDMW_CONFIG_PARAM_PROXY_PORT; 
    305307    static const struct Param_Str EIDMW_CONFIG_PARAM_PROXY_PACFILE; 
    306         static const struct Param_Num EIDMW_CONFIG_PARAM_PROXY_CONNECT_TIMEOUT; 
     308    static const struct Param_Num EIDMW_CONFIG_PARAM_PROXY_CONNECT_TIMEOUT; 
    307309 
    308310    //SECURITY 
    309311    static const struct Param_Num EIDMW_CONFIG_PARAM_SECURITY_SINGLESIGNON; 
    310312 
    311         //GUI 
     313    //GUI 
    312314    static const struct Param_Num EIDMW_CONFIG_PARAM_GUITOOL_STARTWIN; 
    313315    static const struct Param_Num EIDMW_CONFIG_PARAM_GUITOOL_STARTMINI; 
    314316    static const struct Param_Num EIDMW_CONFIG_PARAM_GUITOOL_SHOWPIC; 
    315         static const struct Param_Num EIDMW_CONFIG_PARAM_GUITOOL_SHOWNOTIFICATION; 
     317    static const struct Param_Num EIDMW_CONFIG_PARAM_GUITOOL_SHOWNOTIFICATION; 
    316318    static const struct Param_Num EIDMW_CONFIG_PARAM_GUITOOL_SHOWTBAR; 
    317319    static const struct Param_Num EIDMW_CONFIG_PARAM_GUITOOL_VIRTUALKBD; 
     
    320322    static const struct Param_Num EIDMW_CONFIG_PARAM_GUITOOL_REGCERTIF; 
    321323    static const struct Param_Num EIDMW_CONFIG_PARAM_GUITOOL_REMOVECERTIF; 
    322         static const struct Param_Str EIDMW_CONFIG_PARAM_GUITOOL_FILESAVE; 
    323  
    324         //XSIGN 
     324    static const struct Param_Str EIDMW_CONFIG_PARAM_GUITOOL_FILESAVE; 
     325 
     326    //XSIGN 
    325327    static const struct Param_Str EIDMW_CONFIG_PARAM_XSIGN_TSAURL; 
    326328    static const struct Param_Num EIDMW_CONFIG_PARAM_XSIGN_ONLINE; 
    327329    static const struct Param_Str EIDMW_CONFIG_PARAM_XSIGN_WORKINGDIR; 
    328330    static const struct Param_Num EIDMW_CONFIG_PARAM_XSIGN_TIMEOUT; 
     331 
     332    //AutoUpdates 
     333    static const struct Param_Str EIDMW_CONFIG_PARAM_AUTOUPDATES_URL; 
    329334 
    330335private: 
  • middleware-offline/trunk/_src/eidmw/common/ConfigCommon.cpp

    r36 r41  
    3030  const struct CConfig::Param_Str CConfig::EIDMW_CONFIG_PARAM_GENERAL_CACHEDIR          =       {EIDMW_CNF_SECTION_GENERAL,     EIDMW_CNF_GENERAL_CACHEDIR,     L"$home" WDIRSEP L".eidmwcache"}; 
    3131  const struct CConfig::Param_Str CConfig::EIDMW_CONFIG_PARAM_GENERAL_PTEID_CACHEDIR =  {EIDMW_CNF_SECTION_GENERAL,     EIDMW_CNF_GENERAL_CACHEDIR,     L"$home" WDIRSEP L".pteid-ng"}; 
    32   const struct CConfig::Param_Str CConfig::EIDMW_CONFIG_PARAM_GENERAL_CERTS_DIR         =       {EIDMW_CNF_SECTION_GENERAL,     EIDMW_CNF_GENERAL_INSTALLDIR,   L"$home" WDIRSEP L"eidstore"}; 
     32#ifdef WIN32 
     33  const struct CConfig::Param_Str CConfig::EIDMW_CONFIG_PARAM_GENERAL_CERTS_DIR         =       {EIDMW_CNF_SECTION_GENERAL,     EIDMW_CNF_GENERAL_INSTALLDIR,   L"$home" WDIRSEP L"eidstore" WDIRSEP}; 
     34#elif defined __APPLE__ 
     35  const struct CConfig::Param_Str CConfig::EIDMW_CONFIG_PARAM_GENERAL_CERTS_DIR         =       {EIDMW_CNF_SECTION_GENERAL,     EIDMW_CNF_GENERAL_INSTALLDIR,  WDIRSEP L"usr" WDIRSEP L"local" WDIRSEP L"share" WDIRSEP L"certs" WDIRSEP}; 
     36#else 
     37  const struct CConfig::Param_Str CConfig::EIDMW_CONFIG_PARAM_GENERAL_CERTS_DIR         =       {EIDMW_CNF_SECTION_GENERAL,     EIDMW_CNF_GENERAL_INSTALLDIR,  WDIRSEP L"usr" WDIRSEP L"local" WDIRSEP L"share" WDIRSEP L"certs" WDIRSEP}; 
     38#endif 
    3339  const struct CConfig::Param_Str CConfig::EIDMW_CONFIG_PARAM_GENERAL_LANGUAGE          =       {EIDMW_CNF_SECTION_GENERAL,     EIDMW_CNF_GENERAL_LANGUAGE,             L"en"}; 
    3440  const struct CConfig::Param_Num CConfig::EIDMW_CONFIG_PARAM_GENERAL_CARDTXDELAY       =       {EIDMW_CNF_SECTION_GENERAL,     EIDMW_CNF_GENERAL_CARDTXDELAY,  3}; 
     
    9096  const struct CConfig::Param_Num CConfig::EIDMW_CONFIG_PARAM_XSIGN_TIMEOUT             =       {EIDMW_CNF_SECTION_XSIGN,       EIDMW_CNF_XSIGN_TIMEOUT,        30}; 
    9197 
     98//AutoUpdates 
     99  const struct CConfig::Param_Str CConfig::EIDMW_CONFIG_PARAM_AUTOUPDATES_URL      =       {EIDMW_CNF_SECTION_AUTOUPDATES, EIDMW_CNF_AUTOUPDATES_URL,          L""}; 
     100 
    92101} // namespace eidMW 
  • middleware-offline/trunk/_src/eidmw/common/eidErrors.h

    r34 r41  
    273273 
    274274 
     275//SOD related errors 
     276 
     277#define EIDMW_SOD_UNEXPECTED_VALUE                                      0xe1d00c01 
     278#define EIDMW_SOD_UNEXPECTED_ASN1_TAG                           0xe1d00c02 
     279#define EIDMW_SOD_UNEXPECTED_ALGO_OID                           0xe1d00c03 
     280#define EIDMW_SOD_ERR_HASH_NO_MATCH_ID                          0xe1d00c04 
     281#define EIDMW_SOD_ERR_HASH_NO_MATCH_ADDRESS                     0xe1d00c05 
     282#define EIDMW_SOD_ERR_HASH_NO_MATCH_PICTURE                     0xe1d00c06 
     283#define EIDMW_SOD_ERR_HASH_NO_MATCH_PUBLIC_KEY          0xe1d00c07 
     284 
    275285// Errors in system calls 
    276286 
    277287/** a system call returned an error */ 
    278 #define EIDMW_ERR_SYSTEM                      0xe1d00c01 
     288#define EIDMW_ERR_SYSTEM                      0xe1d00d01 
    279289 
    280290/** a signal function returned an error */ 
    281 #define EIDMW_ERR_SIGNAL                     0xe1d00c02 
     291#define EIDMW_ERR_SIGNAL                     0xe1d00d02 
  • middleware-offline/trunk/_src/eidmw/eidgui/AutoUpdates.cpp

    r35 r41  
    4444using namespace eIDMW; 
    4545 
     46std::string serverurl = "http://svn.gov.pt/projects/ccidadao/repository/middleware-offline/tags/builds/lastversion/"; 
     47std::string remoteversion = "http://svn.gov.pt/projects/ccidadao/repository/middleware-offline/tags/builds/lastversion/version.txt"; 
     48 
    4649std::string ddtitle ("Cartão de Cidadão"); 
    47 std::string serverurl = "http://people.caixamagica.pt/lmedinas/autoupdates/"; 
    48 std::string remoteversion = "http://people.caixamagica.pt/lmedinas/autoupdates/version.txt"; 
    4950 
    5051AutoUpdates::AutoUpdates(QWidget *parent) 
     
    335336        std::string downloadurl; 
    336337        std::string pkgname; 
    337         downloadurl.append(serverurl); 
     338 
     339    eIDMW::PTEID_Config config(eIDMW::PTEID_PARAM_AUTOUPDATES_URL); 
     340    std::string configurl = config.getString(); 
     341 
     342    if (configurl.empty()) 
     343        downloadurl.append(serverurl); 
     344    else 
     345        downloadurl.append(configurl); 
    338346 
    339347#ifdef WIN32 
     
    346354                httpWin.exec(); 
    347355        } else { 
    348                 pkgname.append("PteidMW35-Basic-en.msi"); 
     356        pkgname.append("PteidMW35x86_64-Basic-en.msi"); 
    349357                downloadurl.append(pkgname); 
    350358                HttpWindow httpWin(downloadurl, distro); 
     
    362370        } 
    363371 
     372    //Name of the deb/rpm the rest of the appends will be distro specific 
    364373        pkgname.append("pteid-mw"); 
    365374 
     
    368377                if (distro == "debian") 
    369378                { 
    370                         pkgname.append("_1.0.1svn1522-1"); 
     379            pkgname.append("_debian"); 
    371380                        pkgname.append("_amd64.deb"); 
    372381                        downloadurl.append(pkgname); 
     
    376385                        //delete httpWin; 
    377386                } 
     387        if (distro == "Ubuntu" || distro == "CaixaMagica") 
     388        { 
     389            pkgname.append("_ubuntu"); 
     390            pkgname.append("_amd64.deb"); 
     391            downloadurl.append(pkgname); 
     392            HttpWindow httpWin(downloadurl, distro); 
     393            httpWin.show(); 
     394            httpWin.exec(); 
     395            //delete httpWin; 
     396        } 
    378397                else if (distro == "fedora") 
    379398                { 
    380                         pkgname.append("-1.0.1.1522-2.1"); 
     399            pkgname.append("-fedora"); 
    381400                        pkgname.append(".x86_64.rpm"); 
    382401                        downloadurl.append(pkgname); 
     
    387406                else if (distro == "suse") 
    388407                { 
    389                         pkgname.append("-1.0.1.1522-2.1"); 
     408                pkgname.append("-suse"); 
    390409                        pkgname.append(".x86_64.rpm"); 
    391410                        downloadurl.append(pkgname); 
     
    394413                        httpWin.exec(); 
    395414                } 
     415        else if (distro == "mandriva") 
     416        { 
     417                pkgname.append("-mandriva"); 
     418                pkgname.append(".x86_64.rpm"); 
     419                downloadurl.append(pkgname); 
     420                HttpWindow httpWin(downloadurl, distro); 
     421                httpWin.show(); 
     422                httpWin.exec(); 
     423        } 
    396424 
    397425        } else { 
     
    399427                if (distro == "debian") 
    400428                { 
    401                         pkgname.append("_1.0.1svn1522-1"); 
     429            pkgname.append("_debian"); 
    402430                        pkgname.append("_i386.deb"); 
    403431                        downloadurl.append(pkgname); 
     
    406434                        httpWin.exec(); 
    407435                } 
     436        if (distro == "Ubuntu" || distro == "CaixaMagica") 
     437        { 
     438            pkgname.append("_ubuntu"); 
     439            pkgname.append("_amd64.deb"); 
     440            downloadurl.append(pkgname); 
     441            HttpWindow httpWin(downloadurl, distro); 
     442            httpWin.show(); 
     443            httpWin.exec(); 
     444            //delete httpWin; 
     445        } 
    408446                else if (distro == "fedora") 
    409447                { 
    410                         pkgname.append("-1.0.1.1522-2.1"); 
     448            pkgname.append("-fedora"); 
    411449                        pkgname.append(".i386.rpm"); 
    412450                        downloadurl.append(pkgname); 
     
    417455                else if (distro == "suse") 
    418456                { 
    419                         pkgname.append("-1.0.1.1522-2.1"); 
     457                pkgname.append("-suse"); 
    420458                        pkgname.append(".i586.rpm"); 
    421459                        downloadurl.append(pkgname); 
     
    424462                        httpWin.exec(); 
    425463                } 
     464        else if (distro == "mandriva") 
     465        { 
     466                pkgname.append("-mandriva"); 
     467                pkgname.append(".i586.rpm"); 
     468                downloadurl.append(pkgname); 
     469                HttpWindow httpWin(downloadurl, distro); 
     470                httpWin.show(); 
     471                httpWin.exec(); 
     472        } 
    426473        } 
    427474#endif 
  • middleware-offline/trunk/_src/eidmw/eidgui/dlgPrint.ui

    r35 r41  
    1212  </property> 
    1313  <property name="windowTitle"> 
    14    <string>Print</string> 
     14   <string>Export PDF / Print</string> 
    1515  </property> 
    1616  <property name="windowIcon"> 
     
    3737       <rect> 
    3838        <x>20</x> 
    39         <y>30</y> 
     39        <y>50</y> 
    4040        <width>140</width> 
    4141        <height>20</height> 
     
    7272       <rect> 
    7373        <x>20</x> 
    74         <y>50</y> 
     74        <y>30</y> 
    7575        <width>154</width> 
    7676        <height>20</height> 
     
    128128      <property name="geometry"> 
    129129       <rect> 
    130         <x>250</x> 
     130        <x>60</x> 
    131131        <y>120</y> 
    132132        <width>81</width> 
     
    154154      <property name="geometry"> 
    155155       <rect> 
    156         <x>50</x> 
     156        <x>240</x> 
    157157        <y>120</y> 
    158158        <width>91</width> 
  • middleware-offline/trunk/_src/eidmw/eidgui/dlgSignature.ui

    r35 r41  
    77    <x>0</x> 
    88    <y>0</y> 
    9     <width>450</width> 
    10     <height>315</height> 
     9    <width>483</width> 
     10    <height>292</height> 
    1111   </rect> 
    1212  </property> 
    13    <property name="windowTitle"> 
    14    <string>Signature</string> 
     13  <property name="sizePolicy"> 
     14   <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> 
     15    <horstretch>0</horstretch> 
     16    <verstretch>0</verstretch> 
     17   </sizepolicy> 
     18  </property> 
     19  <property name="windowTitle"> 
     20   <string>Assinatura de Ficheiros (XADES)</string> 
    1521  </property> 
    1622  <property name="windowIcon"> 
     
    2127   <bool>true</bool> 
    2228  </property> 
    23   <layout class="QGridLayout"> 
    24    <item row="1" column="0"> 
    25     <layout class="QVBoxLayout" name="verticalLayout_3"> 
    26      <property name="sizeConstraint"> 
    27       <enum>QLayout::SetDefaultConstraint</enum> 
    28      </property> 
    29      <item> 
    30       <layout class="QHBoxLayout" name="horizontalLayout"> 
    31        <item> 
    32         <spacer name="horizontalSpacer"> 
    33          <property name="orientation"> 
    34           <enum>Qt::Horizontal</enum> 
    35          </property> 
    36          <property name="sizeHint" stdset="0"> 
    37           <size> 
    38            <width>40</width> 
    39            <height>20</height> 
    40           </size> 
    41          </property> 
    42         </spacer> 
    43        </item> 
    44        <item> 
    45         <widget class="QPushButton" name="pbCancel"> 
    46          <property name="text"> 
    47           <string>Cancel</string> 
    48          </property> 
    49         </widget> 
    50        </item> 
    51        <item> 
    52         <widget class="QPushButton" name="pbSign"> 
    53          <property name="enabled"> 
    54           <bool>false</bool> 
    55          </property> 
    56          <property name="text"> 
    57           <string>Sign</string> 
    58          </property> 
    59         </widget> 
    60        </item> 
    61       </layout> 
    62      </item> 
    63     </layout> 
    64    </item> 
    65    <item row="0" column="0"> 
    66     <layout class="QVBoxLayout" name="verticalLayout_2"> 
    67      <item> 
    68       <widget class="QLabel" name="labelHeader"> 
    69        <property name="text"> 
    70         <string>Signature</string> 
    71        </property> 
    72        <property name="alignment"> 
    73         <set>Qt::AlignCenter</set> 
    74        </property> 
    75       </widget> 
    76      </item> 
    77      <item> 
    78       <widget class="QListView" name="listView"/> 
    79      </item> 
    80      <item> 
    81       <widget class="QPushButton" name="pbAddFiles"> 
    82        <property name="sizePolicy"> 
    83         <sizepolicy hsizetype="Fixed" vsizetype="Minimum"> 
    84          <horstretch>0</horstretch> 
    85          <verstretch>0</verstretch> 
    86         </sizepolicy> 
    87        </property> 
    88        <property name="text"> 
    89         <string>Add Files...</string> 
    90        </property> 
    91       </widget> 
    92      </item> 
    93     </layout> 
    94    </item> 
    95   </layout> 
     29  <widget class="QPushButton" name="pbAddFiles"> 
     30   <property name="geometry"> 
     31    <rect> 
     32     <x>340</x> 
     33     <y>220</y> 
     34     <width>141</width> 
     35     <height>27</height> 
     36    </rect> 
     37   </property> 
     38   <property name="sizePolicy"> 
     39    <sizepolicy hsizetype="Fixed" vsizetype="Minimum"> 
     40     <horstretch>0</horstretch> 
     41     <verstretch>0</verstretch> 
     42    </sizepolicy> 
     43   </property> 
     44   <property name="text"> 
     45    <string>Adicionar Ficheiros</string> 
     46   </property> 
     47  </widget> 
     48  <widget class="QLabel" name="labelHeader"> 
     49   <property name="geometry"> 
     50    <rect> 
     51     <x>10</x> 
     52     <y>10</y> 
     53     <width>351</width> 
     54     <height>20</height> 
     55    </rect> 
     56   </property> 
     57   <property name="text"> 
     58    <string>Lista de Ficheiros a assinar</string> 
     59   </property> 
     60  </widget> 
     61  <widget class="QPushButton" name="pbCancel"> 
     62   <property name="geometry"> 
     63    <rect> 
     64     <x>300</x> 
     65     <y>260</y> 
     66     <width>85</width> 
     67     <height>27</height> 
     68    </rect> 
     69   </property> 
     70   <property name="text"> 
     71    <string>Cancelar</string> 
     72   </property> 
     73  </widget> 
     74  <widget class="QPushButton" name="pbSign"> 
     75   <property name="enabled"> 
     76    <bool>false</bool> 
     77   </property> 
     78   <property name="geometry"> 
     79    <rect> 
     80     <x>395</x> 
     81     <y>260</y> 
     82     <width>85</width> 
     83     <height>27</height> 
     84    </rect> 
     85   </property> 
     86   <property name="text"> 
     87    <string>Assinar</string> 
     88   </property> 
     89  </widget> 
     90  <widget class="QListView" name="listView"> 
     91   <property name="geometry"> 
     92    <rect> 
     93     <x>10</x> 
     94     <y>30</y> 
     95     <width>471</width> 
     96     <height>191</height> 
     97    </rect> 
     98   </property> 
     99  </widget> 
     100  <widget class="QCheckBox" name="checkBox"> 
     101   <property name="geometry"> 
     102    <rect> 
     103     <x>10</x> 
     104     <y>230</y> 
     105     <width>251</width> 
     106     <height>22</height> 
     107    </rect> 
     108   </property> 
     109   <property name="text"> 
     110    <string>Adicionar TimeStamp (XADES-T)</string> 
     111   </property> 
     112  </widget> 
    96113 </widget> 
    97114 <resources/> 
  • middleware-offline/trunk/_src/eidmw/eidgui/dlgVerifySignature.ui

    r35 r41  
    77    <x>0</x> 
    88    <y>0</y> 
    9     <width>431</width> 
    10     <height>222</height> 
     9    <width>321</width> 
     10    <height>108</height> 
    1111   </rect> 
    1212  </property> 
    1313  <property name="windowTitle"> 
    14    <string> Verify Signature</string> 
     14   <string>Validação de Assinaturas</string> 
    1515  </property> 
    1616  <property name="windowIcon"> 
     
    2121   <bool>true</bool> 
    2222  </property> 
    23   <layout class="QGridLayout"> 
    24    <item row="1" column="0"> 
    25     <layout class="QVBoxLayout" name="verticalLayout_3"> 
    26      <property name="sizeConstraint"> 
    27       <enum>QLayout::SetDefaultConstraint</enum> 
    28      </property> 
    29      <item> 
    30       <layout class="QHBoxLayout" name="horizontalLayout"> 
    31        <property name="spacing"> 
    32         <number>0</number> 
    33        </property> 
    34        <property name="sizeConstraint"> 
    35         <enum>QLayout::SetMinimumSize</enum> 
    36        </property> 
    37        <item> 
    38         <spacer name="horizontalSpacer"> 
    39          <property name="orientation"> 
    40           <enum>Qt::Horizontal</enum> 
    41          </property> 
    42          <property name="sizeHint" stdset="0"> 
    43           <size> 
    44            <width>40</width> 
    45            <height>20</height> 
    46           </size> 
    47          </property> 
    48         </spacer> 
    49        </item> 
    50        <item> 
    51         <widget class="QPushButton" name="pbCancel"> 
    52          <property name="text"> 
    53           <string>Cancel</string> 
    54          </property> 
    55         </widget> 
    56        </item> 
    57        <item> 
    58         <widget class="QPushButton" name="pbOpenSign"> 
    59          <property name="enabled"> 
    60           <bool>true</bool> 
    61          </property> 
    62          <property name="text"> 
    63           <string>Open Signature</string> 
    64          </property> 
    65         </widget> 
    66        </item> 
    67       </layout> 
    68      </item> 
    69     </layout> 
    70    </item> 
    71    <item row="0" column="0"> 
    72     <layout class="QVBoxLayout" name="verticalLayout_2"> 
    73      <item> 
    74       <widget class="QLabel" name="labelHeader"> 
    75        <property name="text"> 
    76         <string>Verify Signature</string> 
    77        </property> 
    78        <property name="alignment"> 
    79         <set>Qt::AlignCenter</set> 
    80        </property> 
    81       </widget> 
    82      </item> 
    83     </layout> 
    84    </item> 
    85   </layout> 
     23  <widget class="QLabel" name="labelHeader"> 
     24   <property name="geometry"> 
     25    <rect> 
     26     <x>10</x> 
     27     <y>10</y> 
     28     <width>401</width> 
     29     <height>31</height> 
     30    </rect> 
     31   </property> 
     32   <property name="text"> 
     33    <string>Selecione o ficheiro de Assinaturas a validar:</string> 
     34   </property> 
     35  </widget> 
     36  <widget class="QPushButton" name="pbCancel"> 
     37   <property name="geometry"> 
     38    <rect> 
     39     <x>60</x> 
     40     <y>70</y> 
     41     <width>85</width> 
     42     <height>27</height> 
     43    </rect> 
     44   </property> 
     45   <property name="text"> 
     46    <string>Fechar</string> 
     47   </property> 
     48  </widget> 
     49  <widget class="QPushButton" name="pbOpenSign"> 
     50   <property name="enabled"> 
     51    <bool>true</bool> 
     52   </property> 
     53   <property name="geometry"> 
     54    <rect> 
     55     <x>150</x> 
     56     <y>70</y> 
     57     <width>161</width> 
     58     <height>27</height> 
     59    </rect> 
     60   </property> 
     61   <property name="text"> 
     62    <string>Selecionar Assinatura</string> 
     63   </property> 
     64  </widget> 
    8665 </widget> 
    8766 <resources/> 
  • middleware-offline/trunk/_src/eidmw/eidgui/dlgprint.cpp

    r35 r41  
    252252                else 
    253253                { 
    254                         std::cout << "no card" << std::endl; 
    255254                        QString msg(tr("No card present")); 
    256255                        QMessageBox::information( this, caption,  msg, QMessageBox::Ok ); 
     
    261260        { 
    262261                QString msg(tr("General exception")); 
    263                 //ShowPTEIDError( e.GetError(), msg ); 
     262        PTEID_LOG(PTEID_LOG_LEVEL_DEBUG, "eidgui", "loadCard on dlgprint failed %s", e.GetError()); 
    264263                return false; 
    265264        } 
     
    267266        { 
    268267                QString msg(tr("Unknown exception")); 
    269                 //ShowPTEIDError( 0, msg ); 
    270268                return false; 
    271269        } 
  • middleware-offline/trunk/_src/eidmw/eidgui/dlgsignature.cpp

    r35 r41  
    238238            PTEID_EIDCard*      Card = dynamic_cast<PTEID_EIDCard*>(m_CI_Data.m_pCard); 
    239239            PTEID_ByteArray SignXades; 
    240             SignXades = Card->SignXades(paths, n_paths, output_path); 
     240            SignXades = Card->SignXadesT(paths, n_paths, output_path); 
    241241         
    242242    } 
  • middleware-offline/trunk/_src/eidmw/eidgui/eidmw_nl.ts

    r15 r41  
    2525    </message> 
    2626    <message> 
     27        <location filename="mainwnd.ui" line="23"/> 
     28        <source>Portuguese ID Card Management</source> 
     29        <translation>Aplicação Oficial do Cartão de Cidadão</translation> 
     30    </message> 
     31    <message> 
     32        <location filename="mainwnd.ui" line="1629"/> 
     33        <source>Additional Data</source> 
     34        <translation>Outros Dados</translation> 
     35    </message> 
     36    <message> 
     37        <location filename="mainwnd.ui" line="1608"/> 
     38        <source>Identity</source> 
     39        <translation>Identidade</translation> 
     40    </message> 
     41    <message> 
     42        <location filename="mainwnd.ui" line="1713"/> 
     43        <source>Notes</source> 
     44        <translation>Notas</translation> 
     45    </message> 
     46    <message> 
     47        <location filename="mainwnd.ui" line="1692"/> 
     48        <source>PIN Codes</source> 
     49        <translation>Códigos PIN</translation> 
     50    </message> 
     51    <message> 
     52        <location filename="mainwnd.ui" line="1775"/> 
     53        <location filename="mainwnd.ui" line="2086"/> 
     54        <source>Tools</source> 
     55        <translation>Opções</translation> 
     56    </message> 
     57    <message> 
     58        <location filename="mainwnd.ui" line="1984"/> 
     59        <location filename="mainwnd.ui" line="1749"/> 
     60        <location filename="mainwnd.ui" line="2341"/> 
     61        <source>Card</source> 
     62        <translation>Cartão</translation> 
     63    </message> 
     64     
     65    <message> 
    2766        <location filename="mainwnd.ui" line="404"/> 
    2867        <source>Kaartnr. / &lt;i&gt;Card No&lt;/i&gt;</source> 
     
    251290        <source>Reload eID</source> 
    252291        <translation>(Re)Ler Cartão</translation> 
    253     </message> 
    254     <message> 
    255         <location filename="mainwnd.cpp" line="2339"/> 
    256         <location filename="mainwnd.cpp" line="2565"/> 
    257         <source>Save eID</source> 
    258         <translation>Guardar eID</translation> 
    259     </message> 
    260     <message> 
    261         <location filename="mainwnd.ui" line="2862"/> 
    262         <source>Save eID as...</source> 
    263         <translation>Guardar eID como</translation> 
    264     </message> 
    265     <message> 
    266         <location filename="mainwnd.cpp" line="2200"/> 
    267         <location filename="mainwnd.cpp" line="2236"/> 
    268         <source>Open eID</source> 
    269         <translation>Abrir eID</translation> 
    270292    </message> 
    271293    <message> 
     
    591613    </message> 
    592614    <message> 
    593         <location filename="mainwnd.cpp" line="2137"/> 
    594         <location filename="mainwnd.cpp" line="2404"/> 
    595         <location filename="mainwnd.cpp" line="2523"/> 
    596         <location filename="mainwnd.cpp" line="2799"/> 
    597         <location filename="mainwnd.cpp" line="2885"/> 
     615        <location filename="mainwnd.cpp" line="1790"/> 
     616        <location filename="mainwnd.cpp" line="1942"/> 
     617        <location filename="mainwnd.cpp" line="2090"/> 
     618        <location filename="mainwnd.cpp" line="2242"/> 
     619        <location filename="mainwnd.cpp" line="2504"/> 
    598620        <source>No card present</source> 
    599621        <translation>Cartão não encontrado</translation> 
     
    773795    </message> 
    774796    <message> 
    775         <location filename="mainwnd.cpp" line="1171"/> 
     797        <location filename="mainwnd.cpp" line="870"/> 
    776798        <source>Register certificate</source> 
    777         <translation>Registreer certificaat</translation> 
    778     </message> 
    779     <message> 
    780         <location filename="mainwnd.cpp" line="1172"/> 
     799        <translation>Registar Certificados</translation> 
     800    </message> 
     801    <message> 
     802        <location filename="mainwnd.cpp" line="871"/> 
    781803        <source>Registration of certificate </source> 
    782         <translation>Registratie van certificaat </translation> 
    783     </message> 
    784     <message> 
    785         <location filename="mainwnd.cpp" line="1175"/> 
     804        <translation>Registo de certificados </translation> 
     805    </message> 
     806    <message> 
     807        <location filename="mainwnd.cpp" line="874"/> 
    786808        <source>successful</source> 
    787         <translation>gelukt</translation> 
     809        <translation>bem sucedido</translation> 
    788810    </message> 
    789811    <message> 
    790812        <location filename="mainwnd.cpp" line="1179"/> 
    791         <location filename="mainwnd.cpp" line="2858"/> 
     813        <location filename="mainwnd.cpp" line="878"/> 
    792814        <source>failed</source> 
    793         <translation>mislukt</translation> 
     815        <translation>falhou</translation> 
    794816    </message> 
    795817    <message> 
     
    869891    </message> 
    870892    <message> 
    871         <location filename="mainwnd.cpp" line="2868"/> 
     893        <location filename="mainwnd.cpp" line="2488"/> 
     894        <location filename="mainwnd.cpp" line="2730"/> 
    872895        <source> 
    873896( Number of tries left: </source> 
    874897        <translation> 
    875 ( Aantal pogingen over: </translation> 
     898( Número de tentativas restantes: </translation> 
    876899    </message> 
    877900    <message> 
     
    10211044    </message> 
    10221045    <message> 
    1023         <location filename="mainwnd.cpp" line="985"/> 
     1046        <location filename="mainwnd.cpp" line="684"/> 
    10241047        <source>eID is still running</source> 
    1025         <translation>eID is nog steeds aktief</translation> 
    1026     </message> 
    1027     <message> 
    1028         <location filename="mainwnd.cpp" line="986"/> 
     1048        <translation>A aplicação continua em execução</translation> 
     1049    </message> 
     1050    <message> 
     1051        <location filename="mainwnd.cpp" line="685"/> 
    10291052        <source>The application will continue to run. To stop this application, select &apos;Exit&apos; from the menu.</source> 
    1030         <translation>Het programma blijft verder werken. Om de applicatie te stoppen, kies &apos;Afsluiten&apos; van het menu.</translation> 
     1053        <translation>Para fechar a aplicação selecione a opção sair.</translation> 
    10311054    </message> 
    10321055    <message> 
     
    12081231    </message> 
    12091232    <message> 
    1210         <location filename="mainwnd.cpp" line="2174"/> 
    1211         <source>Error loading card data</source> 
     1233        <location filename="mainwnd.cpp" line="1827"/> 
     1234        <source>Erro ao ler os dados do cartão</source> 
    12121235        <translation></translation> 
    12131236    </message> 
     
    15391562    </message> 
    15401563    <message> 
     1564        <location filename="dlgPrint.ui" line="14"/> 
     1565        <source>Export PDF / Print</source> 
     1566        <translation>Exportação PDF / Impressão</translation> 
     1567    </message> 
     1568    <message> 
    15411569        <location filename="dlgPrint.ui" line="57"/> 
    15421570        <source>Cancel</source> 
  • middleware-offline/trunk/_src/eidmw/eidgui/httpwindow.cpp

    r35 r41  
    231231 
    232232        std::string winpath; 
    233         winpath.append("C:\\Windows\\system32\\msiexec.exe /i "); 
     233    winpath.append("C:\\Windows\\system32\\msiexec.exe /i"); 
    234234        //TODO: Verificar a path do msi em Windows 
    235235        //C:\\Users\\Luis\\AppData\\Local\\Temp\\PteidMW35-Basic-en.msi 
    236236    QString s = QDir::toNativeSeparators(QString::fromStdString(pkgpath)); 
    237237    winpath.append(s.toStdString()); 
     238    winpath.append(" /L*v "); 
     239    winpath.append(QDir::tempPath().toStdString()); 
     240    winpath.append("\PTeID-MSI.log"); 
    238241        CreateProcess(NULL, LPTSTR(winpath.c_str()), NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); 
    239242        exit(0); 
  • middleware-offline/trunk/_src/eidmw/eidgui/mainwnd.cpp

    r35 r41  
    16841684        // if we load a new card, clear the certificate contexts we kept 
    16851685        //---------------------------------------------------------------- 
    1686         std::cout << " loadCardData( void )" << std::endl; 
    16871686        try 
    16881687        { 
     
    17401739                                        catch (PTEID_ExCardBadType const& e) 
    17411740                                        { 
    1742                                                 std::cout << "ERROR" << e.GetError()<< std::endl; 
    17431741                                                QString errcode; 
     1742                        PTEID_LOG(PTEID_LOG_LEVEL_DEBUG, "eidgui", "loadCardData failed %s", e.GetError()); 
    17441743                                                errcode = errcode.setNum(e.GetError()); 
    17451744                                        } 
  • middleware-offline/trunk/_src/eidmw/eidgui/mainwnd.ui

    r35 r41  
    2121  </property> 
    2222  <property name="windowTitle"> 
    23    <string>PTeID-NG</string> 
     23   <string>Portuguese ID Card Management</string> 
    2424  </property> 
    2525  <property name="autoFillBackground"> 
  • middleware-offline/trunk/_src/eidmw/eidlib/eidlib.i

    r35 r41  
    476476///////////////////////////////////////// PTEID_Card &PTEID_ReaderContext::getCard() ///////////////////////////////////////////// 
    477477%warnfilter(844) eIDMW::PTEID_ReaderContext::getCard; 
    478 %typemap(csout) eIDMW::PTEID_Card &eIDMW::PTEID_ReaderContext::getCard()  
    479 {  
    480         PTEID_CardType cardType=getCardType(); 
    481  
    482         switch(cardType) 
    483         { 
    484         case PTEID_CardType.PTEID_CARDTYPE_EID: 
    485                 return getEIDCard();             
    486  
    487     default:                                                                             
    488                 throw new PTEID_ExCardTypeUnknown(); 
    489         } 
    490 } 
    491  
    492 ///////////////////////////////////////// PTEID_EIDCard &PTEID_ReaderContext::getEIDCard() ///////////////////////////////////////////// 
    493 %typemap(csout, excode=CSHARP_CODE_THROW) eIDMW::PTEID_EIDCard &eIDMW::PTEID_ReaderContext::getEIDCard() 
    494 {  
    495         PTEID_CardType cardType=getCardType(); 
    496  
    497         switch(cardType) 
    498         { 
    499         case PTEID_CardType.PTEID_CARDTYPE_EID:                  
    500                 PTEID_EIDCard ret = new PTEID_EIDCard($imcall, false);   
    501                 $excode 
    502                 return ret; 
    503  
    504     default:                                                                             
    505                 throw new PTEID_ExCardBadType(); 
    506         } 
    507 } 
    508478 
    509479///////////////////////////////////////// PTEID_XMLDoc& PTEID_EIDCard::getDocument(PTEID_DocumentType type) ///////////////////////////////////////////// 
     
    535505# no need to add a static block on every project that uses the java wrapper 
    536506# the lib must be in the java library path 
    537 %pragma(java) jniclasscode=%{ 
    538   static { 
    539     try { 
    540         System.loadLibrary("pteidlibJava_Wrapper"); 
    541     } catch (UnsatisfiedLinkError e) { 
    542       System.err.println("Native code library failed to load. \n" + e); 
    543       System.exit(1); 
    544     } 
    545   } 
    546 %} 
    547507 
    548508///////////////////////////////////////// ByteArray ///////////////////////////////////////////// 
  • middleware-offline/trunk/_src/eidmw/eidlib/eidlibCard.cpp

    r35 r41  
    16161616 
    16171617PTEIDSDK_API long PTEID_SetSODChecking(int bDoCheck){ 
    1618         if (readerContext!=NULL){ 
    1619  
    1620         } 
     1618        if (readerContext!=NULL) 
     1619                readerContext->getEIDCard().doSODCheck(bDoCheck!=0); 
    16211620 
    16221621        return 0; 
  • middleware-offline/trunk/_src/eidmw/eidlib/eidlibException.cpp

    r34 r41  
    8282        case EIDMW_ERR_NOT_ALLOW_BY_USER: 
    8383                throw PTEID_ExNotAllowByUser(); 
     84        case EIDMW_SOD_UNEXPECTED_VALUE: 
     85        case EIDMW_SOD_UNEXPECTED_ASN1_TAG: 
     86        case EIDMW_SOD_UNEXPECTED_ALGO_OID: 
     87        case EIDMW_SOD_ERR_HASH_NO_MATCH_ID: 
     88        case EIDMW_SOD_ERR_HASH_NO_MATCH_ADDRESS: 
     89        case EIDMW_SOD_ERR_HASH_NO_MATCH_PICTURE: 
     90        case EIDMW_SOD_ERR_HASH_NO_MATCH_PUBLIC_KEY: 
     91                throw PTEID_ExSOD(e.GetError()); 
    8492 
    8593        case EIDMW_ERR_CARD: 
     
    298306{ 
    299307} 
    300 } 
     308 
     309/***************************************************************************************** 
     310---------------------------- PTEID_ExUnexpectedValue -------------------------------------- 
     311*****************************************************************************************/ 
     312PTEID_ExSOD::PTEID_ExSOD(long lError):PTEID_Exception(lError) 
     313{ 
     314} 
     315 
     316PTEID_ExSOD::~PTEID_ExSOD() 
     317{ 
     318} 
     319} 
  • middleware-offline/trunk/_src/eidmw/eidlib/eidlibException.h

    r34 r41  
    291291        PTEIDSDK_API virtual ~PTEID_ExUserMustAnswer();         /**< Destructor */ 
    292292}; 
     293 
     294/******************************************************************************//** 
     295 * Exception class SOD error error codes: 
     296 * 
     297 *      EIDMW_SOD_UNEXPECTED_VALUE 
     298 *              EIDMW_SOD_UNEXPECTED_ASN1_TAG 
     299 *              EIDMW_SOD_UNEXPECTED_ALGO_OID 
     300 *              EIDMW_SOD_ERR_HASH_NO_MATCH_ID 
     301 *              EIDMW_SOD_ERR_HASH_NO_MATCH_ADDRESS 
     302 *              EIDMW_SOD_ERR_HASH_NO_MATCH_PICTURE 
     303 *              EIDMW_SOD_ERR_HASH_NO_MATCH_PUBLIC_KEY 
     304 * 
     305 *      Throw when the SOD is not correct 
     306 *********************************************************************************/ 
     307class PTEID_ExSOD: public PTEID_Exception 
     308{ 
     309public: 
     310        PTEIDSDK_API PTEID_ExSOD(long lError);                          /**< Constructor */ 
     311        PTEIDSDK_API virtual ~PTEID_ExSOD();                            /**< Destructor */ 
     312}; 
    293313} 
    294314 
  • middleware-offline/trunk/_src/eidmw/eidlib/eidlibReader.cpp

    r34 r41  
    884884                m_impl=new APL_Config(CConfig::EIDMW_CONFIG_PARAM_XSIGN_TIMEOUT);                       break; 
    885885 
     886        //AUTOUPDATES 
     887        case PTEID_PARAM_AUTOUPDATES_URL: 
     888        m_impl=new APL_Config(CConfig::EIDMW_CONFIG_PARAM_AUTOUPDATES_URL);         break; 
     889 
    886890        default: 
    887891                throw PTEID_ExParamRange(); 
  • middleware-offline/trunk/_src/eidmw/eidlib/eidlibdefines.h

    r34 r41  
    181181        PTEID_PARAM_PROXY_CONNECT_TIMEOUT,      //number 
    182182 
     183        //AUTOUPDATES 
     184    PTEID_PARAM_AUTOUPDATES_URL      //string 
     185 
    183186}; 
    184187 
  • middleware-offline/trunk/_src/eidmw/install/pteid.conf.3.5

    r5 r41  
     1#PTEID-MW Configure File 
     2#Make sure you add more lines to the end to avoid line removal. 
     3 
    14[crl] 
    25crl_cachedir=/usr/share/pteid/crl 
  • middleware-offline/trunk/_src/eidmw/mdw_online_patches/apply_patches.sh

    r5 r41  
    22 
    33#patch -p0 -i build_on_glibc_2.14.patch 
    4 patch -p0 -i dont_ask_for_pin_on_sign.patch 
     4#patch -p0 -i dont_ask_for_pin_on_sign.patch 
    55patch -p0 -i use_rpath_origin.patch 
  • middleware-offline/trunk/_src/eidmw/misc/Wix_MW35/MW35Wix/Product.wxs

    r35 r41  
    502502      <Component Id="PinpadLib" Guid="{9ADA6D75-5DCC-467E-A0CE-B84A482B2115}" SharedDllRefCount="yes"> 
    503503       <File Id="pteidpp2gempc.dll" Name="pteidpp2-gempc.dll" Source="..\..\..\_Binaries35\Release\pteidpp2-gempc.dll" /> 
     504       <File Id="pteidpp2-acr83-plugin.dll" Name="pteidpp2-acr83-plugin.dll" Source="..\..\..\_Binaries35\Release\pteidpp2-acr83-plugin.dll" /> 
    504505      </Component> 
    505506    </DirectoryRef> 
  • middleware-offline/trunk/_src/eidmw/pkcs11/asn1.h

    r5 r41  
    131131 
    132132#define OID_RSA_ENCRYPTION      "\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01" 
     133#define OID_SHA256_ALGORITHM    "\x60\x86\x48\x01\x65\x03\x04\x02\x01" 
    133134#define ASNPATH_FIRST           "\x01" 
    134135 
  • middleware-offline/trunk/_src/eidmw/pteidlinuxversion.pl

    r34 r41  
    5555            $distro               = "mandriva"; 
    5656        } 
     57        #Support for Ubuntu/Caixamagica 
     58        elsif (-e "/etc/lsb-release") 
     59        { 
     60            my $tmp = `cat /etc/lsb-release`; 
     61            my @values = ($tmp =~ m/=(\S+)/g); 
     62            join(',', @values), "\n"; 
     63 
     64            if ($values[0] =~ m/CaixaMagica/ || $values[0] =~ m/Ubuntu/ || $values[0] =~ m/Debian/) 
     65            { 
     66                $values[0] =~ s/"//g; 
     67                $distro = @values[0]; 
     68                $distribution_version = @values[1]; 
     69            } else { 
     70                $distro = "unsupported"; 
     71            } 
     72        } 
    5773        elsif (-e "/etc/debian_version") 
    5874        {