Changeset 41
- Timestamp:
- 02/15/12 19:53:48 (9 years ago)
- 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 145 145 XadesSignature sig(this); 146 146 147 CByteArray &signature = sig.SignXades(paths, n_paths);147 CByteArray &signature = sig.SignXades(paths, n_paths, false); 148 148 StoreSignatureToDisk (signature, paths, n_paths,output_path); 149 149 … … 168 168 } 169 169 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; 170 CByteArray &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; 175 182 } 176 183 -
middleware-offline/trunk/_src/eidmw/applayer/APLCardPteid.cpp
r35 r41 30 30 #include "MiscUtil.h" 31 31 #include "StringOps.h" 32 #include "APLConfig.h" 33 32 34 33 35 using namespace std; … … 748 750 CAutoMutex autoMutex(&m_Mutex); //We lock for only one instanciation 749 751 if(!m_FileID) 750 {751 752 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); 759 756 760 757 return m_FileID; … … 781 778 CAutoMutex autoMutex(&m_Mutex); //We lock for only one instanciation 782 779 if(!m_FileAddress) 783 {784 780 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); 792 784 793 785 return m_FileAddress; … … 1346 1338 if (check){ 1347 1339 if (!m_FileSod){ 1348 getFileSod();1349 }1350 m_FileSod->VerifyFile();1340 m_FileSod = getFileSod(); 1341 m_FileSod->doSODCheck(check); 1342 } 1351 1343 } 1352 1344 } … … 2665 2657 const CByteArray& APL_SodEid::getData() 2666 2658 { 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; 2668 2670 } 2669 2671 -
middleware-offline/trunk/_src/eidmw/applayer/APLCertif.cpp
r34 r41 102 102 APL_Certifs::APL_Certifs(APL_SmartCard *card) 103 103 { 104 init(card); 105 106 loadCard(); 107 loadFromFile(); 108 } 109 110 APL_Certifs::APL_Certifs() 111 { 112 init(NULL); 113 loadFromFile(); 114 } 115 116 void 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(); 104 120 m_cryptoFwk=AppLayer.getCryptoFwk(); 105 121 106 122 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"; 116 124 } 117 125 … … 676 684 } 677 685 686 void 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 692 void 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 678 742 APL_Certif *APL_Certifs::findIssuer(const APL_Certif *cert) 679 743 { … … 1672 1736 if ((time_t)-1 != res) { 1673 1737 struct tm ltm; 1674 res -= timezone;1675 1738 localtime_r(&res, <m); 1676 1739 // Use the ISO 8601 timestamp format -
middleware-offline/trunk/_src/eidmw/applayer/APLCertif.h
r25 r41 307 307 308 308 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); 309 311 310 312 void resetIssuers(); /**< Reset issuer pointer in the certifactes from the store */ … … 312 314 void resetTests(); /**< Reset test flag in the certifactes from the store */ 313 315 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 314 325 APL_SmartCard *m_card; /**< The smart card from which some certificate comes */ 315 326 APL_CryptoFwk *m_cryptoFwk; /**< Pointer to the crypto framework */ … … 323 334 std::map<unsigned long,APL_Certif *> m_certifs; 324 335 std::vector<unsigned long> m_certifsOrder; 336 std::string m_certExtension; 337 std::string m_certs_dir; 325 338 326 339 friend APL_Certifs *APL_SmartCard::getCertificates(); /**< This method must access protected constructor */ -
middleware-offline/trunk/_src/eidmw/applayer/CardFile.cpp
r34 r41 53 53 m_cryptoFwk=AppLayer.getCryptoFwk(); 54 54 m_mappedFields = false; 55 m_isVerified = false; 55 56 m_card=card; 56 57 -
middleware-offline/trunk/_src/eidmw/applayer/CardFile.h
r35 r41 123 123 CMutex m_Mutex; /**< Mutex */ 124 124 bool m_mappedFields; /**< are the fields mapped already? */ 125 125 bool m_isVerified; /**< verify file only once */ 126 126 bool m_SODCheck; 127 127 -
middleware-offline/trunk/_src/eidmw/applayer/CardPteid.cpp
r35 r41 33 33 #include "PhotoPteid.h" 34 34 #include "APLPublicKey.h" 35 #include "SODParser.h" 35 36 36 37 #include "Log.h" … … 185 186 APL_EidFile_ID::APL_EidFile_ID(APL_EIDCard *card):APL_CardFile(card,PTEID_FILE_ID,NULL) 186 187 { 187 photo = NULL;188 m_photo = NULL; 188 189 } 189 190 … … 192 193 } 193 194 195 196 void 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 223 void APL_EidFile_ID::PackPublicKeyData(CByteArray &cb){ 224 cb.Append(*cardKey->getModulus()); 225 cb.Append(*cardKey->getExponent()); 226 } 227 228 229 void 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 194 238 tCardFileStatus APL_EidFile_ID::VerifyFile() 195 239 { 196 240 if(!m_card) 197 return CARDFILESTATUS_ERROR; 241 return CARDFILESTATUS_ERROR; 242 243 if (m_isVerified) 244 return CARDFILESTATUS_OK; 198 245 199 246 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; 244 268 245 269 return CARDFILESTATUS_OK; … … 275 299 m_GivenNameMother.clear(); 276 300 m_SurnameMother.clear(); 277 if ( photo){278 delete photo;279 photo = NULL;301 if (m_photo){ 302 delete m_photo; 303 m_photo = NULL; 280 304 } 281 305 m_PhotoHash.ClearContents(); … … 285 309 } 286 310 m_mappedFields = false; 287 } 288 289 bool APL_EidFile_ID::MapFields() 290 { 311 m_isVerified = false; 312 m_SODCheck = false; 313 } 314 315 void APL_EidFile_ID::MapFieldsInternal(){ 316 CByteArray pteidngidBuffer; 317 291 318 // we dont want to read the fields every time 292 319 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; 301 321 302 322 //IDVersion - Card Version 303 304 pteidngidBuffer.TrimRight('');305 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()); 306 326 307 327 //ChipNr 308 328 pteidngidBuffer = m_data.GetBytes(PTEIDNG_FIELD_ID_POS_DocumentNumberPAN, PTEIDNG_FIELD_ID_LEN_DocumentNumberPAN); 309 pteidngidBuffer.TrimRight(' 329 pteidngidBuffer.TrimRight('\0'); 310 330 m_ChipNumber.assign((char*)(pteidngidBuffer.GetBytes()), pteidngidBuffer.Size()); 311 331 m_SerialNumber = m_ChipNumber; … … 313 333 //Country 314 334 pteidngidBuffer = m_data.GetBytes(PTEIDNG_FIELD_ID_POS_Country,PTEIDNG_FIELD_ID_LEN_Country); 315 pteidngidBuffer.TrimRight(' 335 pteidngidBuffer.TrimRight('\0'); 316 336 m_Country.assign((char*)(pteidngidBuffer.GetBytes()), pteidngidBuffer.Size()); 317 337 318 338 //ValidityBeginDate 319 339 pteidngidBuffer = m_data.GetBytes(PTEIDNG_FIELD_ID_POS_ValidityBeginDate,PTEIDNG_FIELD_ID_LEN_ValidityBeginDate); 320 pteidngidBuffer.TrimRight(' 340 pteidngidBuffer.TrimRight('\0'); 321 341 m_ValidityBeginDate.assign((char*)(pteidngidBuffer.GetBytes()), pteidngidBuffer.Size()); 322 342 323 343 //ValidityEndDate 324 344 pteidngidBuffer = m_data.GetBytes(PTEIDNG_FIELD_ID_POS_ValidityEndDate,PTEIDNG_FIELD_ID_LEN_ValidityEndDate); 325 pteidngidBuffer.TrimRight(' 345 pteidngidBuffer.TrimRight('\0'); 326 346 m_ValidityEndDate.assign((char*)(pteidngidBuffer.GetBytes()), pteidngidBuffer.Size()); 327 347 328 348 //IssuingMunicipality 329 349 pteidngidBuffer = m_data.GetBytes(PTEIDNG_FIELD_ID_POS_LocalofRequest, PTEIDNG_FIELD_ID_LEN_LocalofRequest); 330 pteidngidBuffer.TrimRight(' 350 pteidngidBuffer.TrimRight('\0'); 331 351 m_LocalofRequest.assign((char*)(pteidngidBuffer.GetBytes()), pteidngidBuffer.Size()); 332 352 333 353 //Civilian Identification Number (NIC) 334 354 pteidngidBuffer = m_data.GetBytes(PTEIDNG_FIELD_ID_POS_CivilianIdNumber, PTEIDNG_FIELD_ID_LEN_CivilianIdNumber); 335 pteidngidBuffer.TrimRight(' 355 pteidngidBuffer.TrimRight('\0'); 336 356 m_CivilianIdNumber.assign((char*)(pteidngidBuffer.GetBytes()), pteidngidBuffer.Size()); 337 357 338 358 //Surname 339 359 pteidngidBuffer = m_data.GetBytes(PTEIDNG_FIELD_ID_POS_Surname, PTEIDNG_FIELD_ID_LEN_Surname); 340 pteidngidBuffer.TrimRight(' 360 pteidngidBuffer.TrimRight('\0'); 341 361 m_Surname.assign((char*)(pteidngidBuffer.GetBytes()), pteidngidBuffer.Size()); 342 362 343 363 //FirstName_1 344 364 pteidngidBuffer = m_data.GetBytes(PTEIDNG_FIELD_ID_POS_Name, PTEIDNG_FIELD_ID_LEN_Name); 345 pteidngidBuffer.TrimRight(' 365 pteidngidBuffer.TrimRight('\0'); 346 366 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;*/350 367 351 368 //Nationality 352 369 pteidngidBuffer = m_data.GetBytes(PTEIDNG_FIELD_ID_POS_Nacionality, PTEIDNG_FIELD_ID_LEN_Nacionality); 353 pteidngidBuffer.TrimRight(' 370 pteidngidBuffer.TrimRight('\0'); 354 371 m_Nationality.assign((char*)(pteidngidBuffer.GetBytes()), pteidngidBuffer.Size()); 355 356 //LocationOfBirth357 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);361 372 362 373 //DateOfBirth 363 374 pteidngidBuffer = m_data.GetBytes(PTEIDNG_FIELD_ID_POS_DateOfBirth, PTEIDNG_FIELD_ID_LEN_DateOfBirth); 364 pteidngidBuffer.TrimRight(' 375 pteidngidBuffer.TrimRight('\0'); 365 376 m_DateOfBirth.assign((char*)(pteidngidBuffer.GetBytes()), pteidngidBuffer.Size()); 366 377 367 378 //Gender 368 379 pteidngidBuffer = m_data.GetBytes(PTEIDNG_FIELD_ID_POS_Gender, PTEIDNG_FIELD_ID_LEN_Gender); 369 pteidngidBuffer.TrimRight(' 380 pteidngidBuffer.TrimRight('\0'); 370 381 m_Gender.assign((char*)(pteidngidBuffer.GetBytes()), pteidngidBuffer.Size()); 371 382 372 383 //DocumentType 373 384 pteidngidBuffer = m_data.GetBytes(PTEIDNG_FIELD_ID_POS_DocumentType, PTEIDNG_FIELD_ID_LEN_DocumentType); 374 pteidngidBuffer.TrimRight(' 385 pteidngidBuffer.TrimRight('\0'); 375 386 m_DocumentType.assign((char*)(pteidngidBuffer.GetBytes()), pteidngidBuffer.Size()); 376 377 //SpecialStatus378 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 //PhotoHash384 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 //Duplicata391 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 //SpecialOrganization397 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);401 387 402 388 //Height 403 389 pteidngidBuffer = m_data.GetBytes(PTEIDNG_FIELD_ID_POS_Height, PTEIDNG_FIELD_ID_LEN_Height); 404 pteidngidBuffer.TrimRight(' 390 pteidngidBuffer.TrimRight('\0'); 405 391 m_Height.assign((char*)(pteidngidBuffer.GetBytes()), pteidngidBuffer.Size()); 406 392 407 393 //DocumentNumber 408 394 pteidngidBuffer = m_data.GetBytes(PTEIDNG_FIELD_ID_POS_DocumentNumber, PTEIDNG_FIELD_ID_LEN_DocumentNumber); 409 pteidngidBuffer.TrimRight(' 395 pteidngidBuffer.TrimRight('\0'); 410 396 m_DocumentNumber.assign((char*)(pteidngidBuffer.GetBytes()), pteidngidBuffer.Size()); 411 397 412 398 //TaxNo 413 399 pteidngidBuffer = m_data.GetBytes(PTEIDNG_FIELD_ID_POS_TaxNo, PTEIDNG_FIELD_ID_LEN_TaxNo); 414 pteidngidBuffer.TrimRight(' 400 pteidngidBuffer.TrimRight('\0'); 415 401 m_TaxNo.assign((char*)(pteidngidBuffer.GetBytes()), pteidngidBuffer.Size()); 416 402 417 403 //SocialSecurityNo 418 404 pteidngidBuffer = m_data.GetBytes(PTEIDNG_FIELD_ID_POS_SocialSecurityNo, PTEIDNG_FIELD_ID_LEN_SocialSecurityNo); 419 pteidngidBuffer.TrimRight(' 405 pteidngidBuffer.TrimRight('\0'); 420 406 m_SocialSecurityNo.assign((char*)(pteidngidBuffer.GetBytes()), pteidngidBuffer.Size()); 421 407 422 408 //HealthNo 423 409 pteidngidBuffer = m_data.GetBytes(PTEIDNG_FIELD_ID_POS_HealthNo, PTEIDNG_FIELD_ID_LEN_HealthNo); 424 pteidngidBuffer.TrimRight(' 410 pteidngidBuffer.TrimRight('\0'); 425 411 m_HealthNo.assign((char*)(pteidngidBuffer.GetBytes()), pteidngidBuffer.Size()); 426 412 427 413 //IssuingEntity 428 414 pteidngidBuffer = m_data.GetBytes(PTEIDNG_FIELD_ID_POS_IssuingEntity, PTEIDNG_FIELD_ID_LEN_IssuingEntity); 429 pteidngidBuffer.TrimRight(' 415 pteidngidBuffer.TrimRight('\0'); 430 416 m_IssuingEntity.assign((char*)(pteidngidBuffer.GetBytes()), pteidngidBuffer.Size()); 431 417 … … 464 450 facialinfo = m_data.GetBytes(PTEIDNG_FIELD_ID_POS_FACIALINFO, PTEIDNG_FIELD_ID_LEN_FACIALINFO); 465 451 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); 467 453 } 468 454 … … 476 462 //MRZ1 477 463 pteidngidBuffer = m_data.GetBytes(PTEIDNG_FIELD_ID_POS_Mrz1, PTEIDNG_FIELD_ID_LEN_Mrz1); 478 pteidngidBuffer.TrimRight(' 464 pteidngidBuffer.TrimRight('\0'); 479 465 m_MRZ1.assign((char*)(pteidngidBuffer.GetBytes()), pteidngidBuffer.Size()); 480 466 481 467 //MRZ2 482 468 pteidngidBuffer = m_data.GetBytes(PTEIDNG_FIELD_ID_POS_Mrz2, PTEIDNG_FIELD_ID_LEN_Mrz2); 483 pteidngidBuffer.TrimRight(' 469 pteidngidBuffer.TrimRight('\0'); 484 470 m_MRZ2.assign((char*)(pteidngidBuffer.GetBytes()), pteidngidBuffer.Size()); 485 471 486 472 //MRZ3 487 473 pteidngidBuffer = m_data.GetBytes(PTEIDNG_FIELD_ID_POS_Mrz3, PTEIDNG_FIELD_ID_LEN_Mrz3); 488 pteidngidBuffer.TrimRight(' 474 pteidngidBuffer.TrimRight('\0'); 489 475 m_MRZ3.assign((char*)(pteidngidBuffer.GetBytes()), pteidngidBuffer.Size()); 490 476 491 477 //AccidentalIndications 492 478 pteidngidBuffer = m_data.GetBytes(PTEIDNG_FIELD_ID_POS_AccidentalIndications, PTEIDNG_FIELD_ID_LEN_AccidentalIndications); 493 pteidngidBuffer.TrimRight(' 479 pteidngidBuffer.TrimRight('\0'); 494 480 m_AccidentalIndications.assign((char*)(pteidngidBuffer.GetBytes()), pteidngidBuffer.Size()); 495 481 496 /* ID File Caching497 * try498 {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 platform520 //m_MemberOfFamily = m_GivenNameMother + " " + m_SurnameMother + " * " + m_GivenNameFather + " " + m_SurnameFather;521 522 482 m_mappedFields = true; 523 483 } 484 485 bool APL_EidFile_ID::MapFields() 486 { 487 // do nothing verify will load the data and then verify if sod check is active 524 488 return true; 525 489 } … … 786 750 787 751 if(ShowData()) 788 return photo;752 return m_photo; 789 753 790 754 return NULL; … … 848 812 void APL_EidFile_ID::doSODCheck(bool check){ 849 813 m_SODCheck = check; 814 if (check){ 815 m_isVerified = false; 816 m_mappedFields = false; 817 } 850 818 } 851 819 … … 884 852 } 885 853 854 855 void 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 891 void 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 886 917 tCardFileStatus APL_EidFile_Address::VerifyFile() 887 918 { 888 919 if(!m_card) 889 920 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; 946 937 947 938 return CARDFILESTATUS_OK; … … 1010 1001 1011 1002 m_mappedFields = false; 1003 m_isVerified = false; 1004 m_SODCheck = false; 1012 1005 } 1013 1006 … … 1015 1008 { 1016 1009 CByteArray pteidngAddressBuffer; 1017 char cBuffer[1200];1018 unsigned long ulLen=0;1019 1020 CTLVBuffer oTLVBuffer;1021 oTLVBuffer.ParseTLV(m_data.GetBytes(), m_data.Size());1022 1010 1023 1011 //District Code 1024 1012 pteidngAddressBuffer = m_data.GetBytes(PTEIDNG_FIELD_ADDRESS_POS_DISTRICT, PTEIDNG_FIELD_ADDRESS_LEN_DISTRICT); 1025 pteidngAddressBuffer.TrimRight(' 1013 pteidngAddressBuffer.TrimRight('\0'); 1026 1014 m_DistrictCode.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 1027 1015 1028 1016 //District Description 1029 1017 pteidngAddressBuffer = m_data.GetBytes(PTEIDNG_FIELD_ADDRESS_POS_DISTRICT_DESCRIPTION, PTEIDNG_FIELD_ADDRESS_LEN_DISTRICT_DESCRIPTION); 1030 pteidngAddressBuffer.TrimRight(' 1018 pteidngAddressBuffer.TrimRight('\0'); 1031 1019 m_DistrictDescription.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 1032 1020 1033 1021 //Municipality Code 1034 1022 pteidngAddressBuffer = m_data.GetBytes(PTEIDNG_FIELD_ADDRESS_POS_MUNICIPALITY, PTEIDNG_FIELD_ADDRESS_LEN_MUNICIPALITY); 1035 pteidngAddressBuffer.TrimRight(' 1023 pteidngAddressBuffer.TrimRight('\0'); 1036 1024 m_MunicipalityCode.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 1037 1025 1038 1026 //Municipality Description 1039 1027 pteidngAddressBuffer = m_data.GetBytes(PTEIDNG_FIELD_ADDRESS_POS_MUNICIPALITY_DESCRIPTION, PTEIDNG_FIELD_ADDRESS_LEN_MUNICIPALITY_DESCRIPTION); 1040 pteidngAddressBuffer.TrimRight(' 1028 pteidngAddressBuffer.TrimRight('\0'); 1041 1029 m_MunicipalityDescription.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 1042 1030 1043 1031 //CivilParish Code 1044 1032 pteidngAddressBuffer = m_data.GetBytes(PTEIDNG_FIELD_ADDRESS_POS_CIVILPARISH, PTEIDNG_FIELD_ADDRESS_LEN_CIVILPARISH); 1045 pteidngAddressBuffer.TrimRight(' 1033 pteidngAddressBuffer.TrimRight('\0'); 1046 1034 m_CivilParishCode.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 1047 1035 1048 1036 //CivilParish Description 1049 1037 pteidngAddressBuffer = m_data.GetBytes(PTEIDNG_FIELD_ADDRESS_POS_CIVILPARISH_DESCRIPTION, PTEIDNG_FIELD_ADDRESS_LEN_CIVILPARISH_DESCRIPTION); 1050 pteidngAddressBuffer.TrimRight(' 1038 pteidngAddressBuffer.TrimRight('\0'); 1051 1039 m_CivilParishDescription.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 1052 1040 1053 1041 //Abbreviated Street Type 1054 1042 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'); 1056 1044 m_AbbrStreetType.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 1057 1045 1058 1046 //Street Type 1059 1047 pteidngAddressBuffer = m_data.GetBytes(PTEIDNG_FIELD_ADDRESS_POS_STREET_TYPE, PTEIDNG_FIELD_ADDRESS_LEN_STREET_TYPE); 1060 pteidngAddressBuffer.TrimRight(' 1048 pteidngAddressBuffer.TrimRight('\0'); 1061 1049 m_StreetType.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 1062 1050 1063 1051 //Street Name 1064 1052 pteidngAddressBuffer = m_data.GetBytes(PTEIDNG_FIELD_ADDRESS_POS_STREETNAME, PTEIDNG_FIELD_ADDRESS_LEN_STREETNAME); 1065 pteidngAddressBuffer.TrimRight(' 1053 pteidngAddressBuffer.TrimRight('\0'); 1066 1054 m_StreetName.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 1067 1055 1068 1056 //Abbreviated Building Type 1069 1057 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'); 1071 1059 m_AbbrBuildingType.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 1072 1060 1073 1061 //Building Type 1074 1062 pteidngAddressBuffer = m_data.GetBytes(PTEIDNG_FIELD_ADDRESS_POS_BUILDING_TYPE, PTEIDNG_FIELD_ADDRESS_LEN_BUILDING_TYPE); 1075 pteidngAddressBuffer.TrimRight(' 1063 pteidngAddressBuffer.TrimRight('\0'); 1076 1064 m_BuildingType.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 1077 1065 1078 1066 //DoorNo 1079 1067 pteidngAddressBuffer = m_data.GetBytes(PTEIDNG_FIELD_ADDRESS_POS_DOORNO, PTEIDNG_FIELD_ADDRESS_LEN_DOORNO); 1080 pteidngAddressBuffer.TrimRight(' 1068 pteidngAddressBuffer.TrimRight('\0'); 1081 1069 m_DoorNo.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 1082 1070 1083 1071 //Floor 1084 1072 pteidngAddressBuffer = m_data.GetBytes(PTEIDNG_FIELD_ADDRESS_POS_FLOOR, PTEIDNG_FIELD_ADDRESS_LEN_FLOOR); 1085 pteidngAddressBuffer.TrimRight(' 1073 pteidngAddressBuffer.TrimRight('\0'); 1086 1074 m_Floor.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 1087 1075 1088 1076 //Side 1089 1077 pteidngAddressBuffer = m_data.GetBytes(PTEIDNG_FIELD_ADDRESS_POS_SIDE, PTEIDNG_FIELD_ADDRESS_LEN_SIDE); 1090 pteidngAddressBuffer.TrimRight(' 1078 pteidngAddressBuffer.TrimRight('\0'); 1091 1079 m_Side.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 1092 1080 1093 1081 //Place 1094 1082 pteidngAddressBuffer = m_data.GetBytes(PTEIDNG_FIELD_ADDRESS_POS_PLACE, PTEIDNG_FIELD_ADDRESS_LEN_PLACE); 1095 pteidngAddressBuffer.TrimRight(' 1083 pteidngAddressBuffer.TrimRight('\0'); 1096 1084 m_Place.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 1097 1085 1098 1086 //Locality 1099 1087 pteidngAddressBuffer = m_data.GetBytes(PTEIDNG_FIELD_ADDRESS_POS_LOCALITY, PTEIDNG_FIELD_ADDRESS_LEN_LOCALITY); 1100 pteidngAddressBuffer.TrimRight(' 1088 pteidngAddressBuffer.TrimRight('\0'); 1101 1089 m_Locality.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 1102 1090 1103 1091 //Zip4 1104 1092 pteidngAddressBuffer = m_data.GetBytes(PTEIDNG_FIELD_ADDRESS_POS_ZIP4, PTEIDNG_FIELD_ADDRESS_LEN_ZIP4); 1105 pteidngAddressBuffer.TrimRight(' 1093 pteidngAddressBuffer.TrimRight('\0'); 1106 1094 m_Zip4.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 1107 1095 1108 1096 //Zip3 1109 1097 pteidngAddressBuffer = m_data.GetBytes(PTEIDNG_FIELD_ADDRESS_POS_ZIP3, PTEIDNG_FIELD_ADDRESS_LEN_ZIP3); 1110 pteidngAddressBuffer.TrimRight(' 1098 pteidngAddressBuffer.TrimRight('\0'); 1111 1099 m_Zip3.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 1112 1100 1113 1101 //Postal Locality 1114 1102 pteidngAddressBuffer = m_data.GetBytes(PTEIDNG_FIELD_ADDRESS_POS_POSTALLOCALITY, PTEIDNG_FIELD_ADDRESS_LEN_POSTALLOCALITY); 1115 pteidngAddressBuffer.TrimRight(' 1103 pteidngAddressBuffer.TrimRight('\0'); 1116 1104 m_PostalLocality.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 1117 1105 … … 1121 1109 m_Generated_Address_Code.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 1122 1110 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();*/1138 1111 } 1139 1112 … … 1141 1114 { 1142 1115 CByteArray pteidngAddressBuffer; 1143 char cBuffer[1200];1144 unsigned long ulLen=0;1145 1146 CTLVBuffer oTLVBuffer;1147 oTLVBuffer.ParseTLV(m_data.GetBytes(), m_data.Size());1148 1116 1149 1117 //Foreign Country 1150 1118 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'); 1152 1120 m_Foreign_Country.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 1153 1121 1154 1122 //Foreign Generic Address 1155 1123 pteidngAddressBuffer = m_data.GetBytes(PTEIDNG_FIELD_FOREIGN_ADDRESS_POS_ADDRESS, PTEIDNG_FIELD_FOREIGN_ADDRESS_LEN_ADDRESS); 1156 pteidngAddressBuffer.TrimRight(' 1124 pteidngAddressBuffer.TrimRight('\0'); 1157 1125 m_Foreign_Generic_Address.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 1158 1126 1159 1127 //Foreign City 1160 1128 pteidngAddressBuffer = m_data.GetBytes(PTEIDNG_FIELD_FOREIGN_ADDRESS_POS_CITY, PTEIDNG_FIELD_FOREIGN_ADDRESS_LEN_CITY); 1161 pteidngAddressBuffer.TrimRight(' 1129 pteidngAddressBuffer.TrimRight('\0'); 1162 1130 m_Foreign_City.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 1163 1131 1164 1132 //Foreign Region 1165 1133 pteidngAddressBuffer = m_data.GetBytes(PTEIDNG_FIELD_FOREIGN_ADDRESS_POS_REGION, PTEIDNG_FIELD_FOREIGN_ADDRESS_LEN_REGION); 1166 pteidngAddressBuffer.TrimRight(' 1134 pteidngAddressBuffer.TrimRight('\0'); 1167 1135 m_Foreign_Region.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 1168 1136 1169 1137 //Foreign Locality 1170 1138 pteidngAddressBuffer = m_data.GetBytes(PTEIDNG_FIELD_FOREIGN_ADDRESS_POS_LOCALITY, PTEIDNG_FIELD_FOREIGN_ADDRESS_LEN_LOCALITY); 1171 pteidngAddressBuffer.TrimRight(' 1139 pteidngAddressBuffer.TrimRight('\0'); 1172 1140 m_Foreign_Locality.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 1173 1141 1174 1142 //Foreign Postal Code 1175 1143 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'); 1177 1145 m_Foreign_Postal_Code.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 1178 1146 1179 1147 //Foreign Generated Address Code 1180 1148 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'); 1182 1150 m_Generated_Address_Code.assign((char*)(pteidngAddressBuffer.GetBytes()), pteidngAddressBuffer.Size()); 1183 1151 1184 /* martinho - do not cache the address file1185 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 */1200 1152 } 1201 1153 1202 1154 bool APL_EidFile_Address::MapFields() 1203 1155 { 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 1233 1157 return true; 1234 1158 } … … 1404 1328 1405 1329 bool APL_EidFile_Address::isNationalAddress(){ 1406 return (m_AddressType.compare(m_NATIONAL) );1330 return (m_AddressType.compare(m_NATIONAL)==0); 1407 1331 } 1408 1332 … … 1485 1409 APL_EidFile_Sod::APL_EidFile_Sod(APL_EIDCard *card):APL_CardFile(card,PTEID_FILE_SOD,NULL) 1486 1410 { 1411 1487 1412 } 1488 1413 … … 1493 1418 tCardFileStatus APL_EidFile_Sod::VerifyFile() 1494 1419 { 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; 1498 1473 } 1499 1474 1500 1475 bool APL_EidFile_Sod::ShowData() 1501 1476 { 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 status=LoadData(true);1516 1517 1518 1519 1520 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; 1521 1496 } 1522 1497 1523 1498 void APL_EidFile_Sod::EmptyFields() 1524 1499 { 1525 m_Sod.clear();1526 1500 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 1509 void APL_EidFile_Sod::doSODCheck(bool check){ 1510 m_SODCheck = check; 1511 if (check) { 1512 m_isVerified = false; 1513 m_mappedFields = false; 1514 } 1527 1515 } 1528 1516 1529 1517 bool APL_EidFile_Sod::MapFields() 1530 1518 { 1531 if (m_mappedFields) 1519 if (m_mappedFields) // map only one time 1532 1520 return true; 1533 1521 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 1541 const CByteArray& APL_EidFile_Sod::getAddressHash(){ 1542 if(ShowData()) 1543 return m_addressHash; 1544 return EmptyByteArray; 1545 } 1546 1547 const CByteArray& APL_EidFile_Sod::getPictureHash(){ 1548 if(ShowData()) 1549 return m_picHash; 1550 return EmptyByteArray; 1551 } 1552 1553 const CByteArray& APL_EidFile_Sod::getCardPublicKeyHash(){ 1554 if(ShowData()) 1555 return m_pkHash; 1556 return EmptyByteArray; 1557 } 1558 1559 const CByteArray& APL_EidFile_Sod::getIdHash(){ 1560 if(ShowData()) 1561 return m_idHash; 1562 return EmptyByteArray; 1563 } 1564 1550 1565 1551 1566 /***************************************************************************************** -
middleware-offline/trunk/_src/eidmw/applayer/CardPteid.h
r35 r41 177 177 virtual bool MapFields(); 178 178 179 virtual void MapFieldsInternal(); 180 181 virtual void PackIdData(CByteArray &cb); 182 virtual void PackPublicKeyData(CByteArray &cb); 183 virtual void PackPictureData(CByteArray &cb); 184 179 185 /** 180 186 * Empty all fields … … 218 224 std::string m_SurnameMother; /**< Field SurnameMother */ 219 225 std::string m_AccidentalIndications; /**< Field AccidentalIndications */ 220 PhotoPteid* photo; /**< object photo */226 PhotoPteid* m_photo; /**< object photo */ 221 227 std::string m_MRZ1; /**< Field MRZ block 1 */ 222 228 std::string m_MRZ2; /**< Field MRZ block 2 */ … … 343 349 virtual bool MapFields(); 344 350 virtual void EmptyFields(); /**< Empty all fields */ 351 void PackAddressData(CByteArray &cb, bool isNational); 352 void MapFieldsInternal(); 345 353 346 354 /** … … 446 454 tCardFileStatus VerifyFile(); 447 455 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 448 466 protected: 449 467 /** … … 465 483 virtual bool MapFields(); /**< Nothing to do m_data contains the file */ 466 484 virtual void EmptyFields(); /**< Nothing to do m_data contains the file */ 467 void doSODCheck(bool check) {}468 485 469 486 /** … … 472 489 virtual bool ShowData(); 473 490 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; 476 496 477 497 friend APL_EidFile_Sod *APL_EIDCard::getFileSod(); /**< This method must access protected constructor */ -
middleware-offline/trunk/_src/eidmw/applayer/SigContainer.cpp
r35 r41 91 91 92 92 int n_files = mz_zip_reader_get_num_files(&zip_archive); 93 printf ("mz_zip_reader_get_num_files: %d\n", n_files);94 93 tHashedFile **hashes = new tHashedFile*[n_files]; 95 94 … … 101 100 if (!mz_zip_reader_file_stat(&zip_archive, i, &file_stat)) 102 101 { 103 fprintf(stderr, " mz_zip_reader_file_stat() failed!\n");102 fprintf(stderr, "E: mz_zip_reader_file_stat() failed!\n"); 104 103 mz_zip_reader_end(&zip_archive); 105 104 continue; … … 111 110 if (!p) 112 111 { 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"); 114 113 mz_zip_reader_end(&zip_archive); 115 114 continue; … … 146 145 mz_bool status; 147 146 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); 149 148 150 149 //Truncate the output file first... … … 156 155 absolute_path = paths[i]; 157 156 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); 159 158 160 159 zip_entry_name = Basename((char *)absolute_path); … … 165 164 latin1_to_utf8((unsigned char *)zip_entry_name, (unsigned char *)utf8_filename); 166 165 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); 168 167 #endif 169 168 … … 172 171 if (!status) 173 172 { 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", 175 174 zip_entry_name); 176 175 return; -
middleware-offline/trunk/_src/eidmw/applayer/XadesSignature.cpp
r35 r41 12 12 13 13 #include "APLCard.h" 14 #include "APLConfig.h" 14 15 15 16 #include "CardPteidDef.h" … … 56 57 //OpenSSL 57 58 #include <openssl/sha.h> 59 #include <openssl/evp.h> 58 60 59 61 //stat … … 81 83 { 82 84 85 CByteArray XadesSignature::mp_timestamp_data = CByteArray(); 83 86 CByteArray XadesSignature::HashFile(const char *file_path) 84 87 { … … 160 163 } 161 164 162 void XadesSignature::generate_asn1_request_struct( char *sha_1)165 void XadesSignature::generate_asn1_request_struct(unsigned char *sha_1) 163 166 { 164 167 … … 188 191 189 192 */ 190 void XadesSignature::addSignatureProperties(DSIGSignature *sig) 193 //Returns the newly created timestamp node 194 DOMNode *XadesSignature::addSignatureProperties(DSIGSignature *sig) 191 195 { 192 196 XMLCh *prefix = XMLString::transcode("etsi"); … … 212 216 ((DOMElement *)n4)->setAttributeNS(NULL, s_Id, XMLString::transcode("SignedProperties")); 213 217 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()); 215 222 n1->appendChild(n2); 216 223 n1->appendChild(n4); 217 224 n2->appendChild(n3); 225 n3->appendChild(n5); 226 n5->appendChild(n6); 218 227 219 228 obj1->appendChild(n1); 220 229 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) 224 263 { 225 264 … … 228 267 char error_buf[CURL_ERROR_SIZE]; 229 268 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 230 273 curl = curl_easy_init(); 231 274 … … 243 286 curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, data_len); 244 287 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); 246 291 247 292 /* Now specify the POST data */ … … 260 305 MWLOG(LEV_ERROR, MOD_APL, L"Timestamping error in HTTP POST request. LibcURL returned %s\n", 261 306 (char *)error_buf); 262 throw CMWEXCEPTION(EIDMW_ERR_CHECK);263 307 } 264 308 … … 270 314 } 271 315 272 return CByteArray(mp_timestamp_data);273 316 } 274 317 … … 529 572 } 530 573 531 CByteArray &XadesSignature::SignXades(const char ** paths, unsigned int n_paths )574 CByteArray &XadesSignature::SignXades(const char ** paths, unsigned int n_paths, bool do_timestamping) 532 575 { 533 576 … … 546 589 547 590 XMLByte toFill[35 * sizeof(XMLByte)]; //SHA-1 Hash prepended with Algorithm ID as by PKCS#1 standard 591 unsigned char signature_hash[SHA1_LEN]; 548 592 549 593 DOMImplementation *impl = … … 577 621 //Create a reference to the external file 578 622 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); 580 624 sha1_hash = HashFile(path); 581 625 … … 602 646 loadCert (certData, pub_key); 603 647 604 //Access pteid card to sign the XML Data605 //This code will be eventually integrated in applayer606 // so this connection to the card will be completely different607 608 // Create KeyInfo element609 648 610 649 keyInfoX509 = sig->appendX509Data(); … … 627 666 sig->signExternal((XMLByte *)(rsa_signature.GetBytes()), PTEID_SIGNATURE_LENGTH); //RSA Signature with modlength=1024 bits 628 667 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 } 631 692 } 632 693 catch (XSECCryptoException &e) -
middleware-offline/trunk/_src/eidmw/applayer/XadesSignature.h
r35 r41 16 16 #define ASN1_LEN 43 17 17 #define SHA1_OFFSET 20 18 19 #define TIMESTAMPING_HOST "http://ts.cartaodecidadao.pt/tsa/server"20 18 21 19 #define XERCES_NS XERCES_CPP_NAMESPACE_QUALIFIER … … 54 52 55 53 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); 59 55 60 56 static bool checkExternalRefs(DSIGReferenceList *refs, tHashedFile **hashes); … … 65 61 66 62 CByteArray HashFile(const char *file_path); 67 voidaddSignatureProperties(DSIGSignature *sig);63 DOMNode * addSignatureProperties(DSIGSignature *sig); 68 64 CByteArray *WriteToByteArray(XERCES_NS DOMDocument *doc); 69 65 //Utility methods for signature … … 72 68 int appendOID(XMLByte *toFill); 73 69 74 void addTimestampNode( DSIGSignature *sig);70 void addTimestampNode(XERCES_NS DOMNode *node, unsigned char *timestamp); 75 71 XMLCh* createURI(const char *path); 76 72 77 73 78 74 //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); 82 81 83 82 static void initXerces(); … … 86 85 X509 * mp_cert; 87 86 APL_Card *mp_card; 88 CByteArray mp_timestamp_data;87 static CByteArray mp_timestamp_data; 89 88 90 89 -
middleware-offline/trunk/_src/eidmw/applayer/applayer.pro
r35 r41 85 85 APLPublicKey.h \ 86 86 SigContainer.h \ 87 XadesSignature.h 87 XadesSignature.h \ 88 SODParser.h 88 89 89 90 … … 110 111 APLPublicKey.cpp \ 111 112 SigContainer.cpp \ 112 XadesSignature.cpp 113 XadesSignature.cpp \ 114 SODParser.cpp 113 115 114 116 -
middleware-offline/trunk/_src/eidmw/applayer/cryptoFramework.cpp
r5 r41 580 580 return VerifyHash(data,hash,EVP_sha1()); 581 581 } 582 583 bool 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 582 589 583 590 bool APL_CryptoFwk::VerifyHash(const CByteArray &data, const CByteArray &hash, const EVP_MD *algorithm) -
middleware-offline/trunk/_src/eidmw/applayer/cryptoFramework.h
r34 r41 66 66 enum FWK_HashAlgo { 67 67 FWK_ALGO_MD5, // 16-byte hash 68 FWK_ALGO_SHA1 // 20-byte hash 68 FWK_ALGO_SHA1, // 20-byte hash 69 FWK_ALGO_SHA256 69 70 }; 70 71 … … 165 166 166 167 /** 168 * Verify if the data has the correct hash (sha256 algorithm) 169 */ 170 bool VerifyHashSha256(const CByteArray &data, const CByteArray &hash); 171 172 /** 167 173 * Get the hash of the data 168 174 */ -
middleware-offline/trunk/_src/eidmw/common/Config.h
r25 r41 193 193 #define EIDMW_CNF_XSIGN_TIMEOUT L"timeout" //number; 194 194 195 #define EIDMW_CNF_SECTION_AUTOUPDATES L"autoupdates" //section with the autoupdates parameters 196 #define EIDMW_CNF_AUTOUPDATES_URL L"serverurl" //string 195 197 196 198 namespace eIDMW … … 257 259 static void SetLong( tLocation location, const std::wstring &csName, const std::wstring &czSection, long lValue); 258 260 259 261 static void DelString(tLocation location, const struct Param_Str param); 260 262 static void DelString(tLocation location, const std::wstring &csName, const std::wstring &czSection); 261 263 static void DelLong( tLocation location, const struct Param_Num param); … … 304 306 static const struct Param_Num EIDMW_CONFIG_PARAM_PROXY_PORT; 305 307 static const struct Param_Str EIDMW_CONFIG_PARAM_PROXY_PACFILE; 306 308 static const struct Param_Num EIDMW_CONFIG_PARAM_PROXY_CONNECT_TIMEOUT; 307 309 308 310 //SECURITY 309 311 static const struct Param_Num EIDMW_CONFIG_PARAM_SECURITY_SINGLESIGNON; 310 312 311 313 //GUI 312 314 static const struct Param_Num EIDMW_CONFIG_PARAM_GUITOOL_STARTWIN; 313 315 static const struct Param_Num EIDMW_CONFIG_PARAM_GUITOOL_STARTMINI; 314 316 static const struct Param_Num EIDMW_CONFIG_PARAM_GUITOOL_SHOWPIC; 315 317 static const struct Param_Num EIDMW_CONFIG_PARAM_GUITOOL_SHOWNOTIFICATION; 316 318 static const struct Param_Num EIDMW_CONFIG_PARAM_GUITOOL_SHOWTBAR; 317 319 static const struct Param_Num EIDMW_CONFIG_PARAM_GUITOOL_VIRTUALKBD; … … 320 322 static const struct Param_Num EIDMW_CONFIG_PARAM_GUITOOL_REGCERTIF; 321 323 static const struct Param_Num EIDMW_CONFIG_PARAM_GUITOOL_REMOVECERTIF; 322 323 324 324 static const struct Param_Str EIDMW_CONFIG_PARAM_GUITOOL_FILESAVE; 325 326 //XSIGN 325 327 static const struct Param_Str EIDMW_CONFIG_PARAM_XSIGN_TSAURL; 326 328 static const struct Param_Num EIDMW_CONFIG_PARAM_XSIGN_ONLINE; 327 329 static const struct Param_Str EIDMW_CONFIG_PARAM_XSIGN_WORKINGDIR; 328 330 static const struct Param_Num EIDMW_CONFIG_PARAM_XSIGN_TIMEOUT; 331 332 //AutoUpdates 333 static const struct Param_Str EIDMW_CONFIG_PARAM_AUTOUPDATES_URL; 329 334 330 335 private: -
middleware-offline/trunk/_src/eidmw/common/ConfigCommon.cpp
r36 r41 30 30 const struct CConfig::Param_Str CConfig::EIDMW_CONFIG_PARAM_GENERAL_CACHEDIR = {EIDMW_CNF_SECTION_GENERAL, EIDMW_CNF_GENERAL_CACHEDIR, L"$home" WDIRSEP L".eidmwcache"}; 31 31 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 33 39 const struct CConfig::Param_Str CConfig::EIDMW_CONFIG_PARAM_GENERAL_LANGUAGE = {EIDMW_CNF_SECTION_GENERAL, EIDMW_CNF_GENERAL_LANGUAGE, L"en"}; 34 40 const struct CConfig::Param_Num CConfig::EIDMW_CONFIG_PARAM_GENERAL_CARDTXDELAY = {EIDMW_CNF_SECTION_GENERAL, EIDMW_CNF_GENERAL_CARDTXDELAY, 3}; … … 90 96 const struct CConfig::Param_Num CConfig::EIDMW_CONFIG_PARAM_XSIGN_TIMEOUT = {EIDMW_CNF_SECTION_XSIGN, EIDMW_CNF_XSIGN_TIMEOUT, 30}; 91 97 98 //AutoUpdates 99 const struct CConfig::Param_Str CConfig::EIDMW_CONFIG_PARAM_AUTOUPDATES_URL = {EIDMW_CNF_SECTION_AUTOUPDATES, EIDMW_CNF_AUTOUPDATES_URL, L""}; 100 92 101 } // namespace eidMW -
middleware-offline/trunk/_src/eidmw/common/eidErrors.h
r34 r41 273 273 274 274 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 275 285 // Errors in system calls 276 286 277 287 /** a system call returned an error */ 278 #define EIDMW_ERR_SYSTEM 0xe1d00 c01288 #define EIDMW_ERR_SYSTEM 0xe1d00d01 279 289 280 290 /** a signal function returned an error */ 281 #define EIDMW_ERR_SIGNAL 0xe1d00 c02291 #define EIDMW_ERR_SIGNAL 0xe1d00d02 -
middleware-offline/trunk/_src/eidmw/eidgui/AutoUpdates.cpp
r35 r41 44 44 using namespace eIDMW; 45 45 46 std::string serverurl = "http://svn.gov.pt/projects/ccidadao/repository/middleware-offline/tags/builds/lastversion/"; 47 std::string remoteversion = "http://svn.gov.pt/projects/ccidadao/repository/middleware-offline/tags/builds/lastversion/version.txt"; 48 46 49 std::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";49 50 50 51 AutoUpdates::AutoUpdates(QWidget *parent) … … 335 336 std::string downloadurl; 336 337 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); 338 346 339 347 #ifdef WIN32 … … 346 354 httpWin.exec(); 347 355 } else { 348 pkgname.append("PteidMW35-Basic-en.msi");356 pkgname.append("PteidMW35x86_64-Basic-en.msi"); 349 357 downloadurl.append(pkgname); 350 358 HttpWindow httpWin(downloadurl, distro); … … 362 370 } 363 371 372 //Name of the deb/rpm the rest of the appends will be distro specific 364 373 pkgname.append("pteid-mw"); 365 374 … … 368 377 if (distro == "debian") 369 378 { 370 pkgname.append("_1.0.1svn1522-1");379 pkgname.append("_debian"); 371 380 pkgname.append("_amd64.deb"); 372 381 downloadurl.append(pkgname); … … 376 385 //delete httpWin; 377 386 } 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 } 378 397 else if (distro == "fedora") 379 398 { 380 pkgname.append("-1.0.1.1522-2.1");399 pkgname.append("-fedora"); 381 400 pkgname.append(".x86_64.rpm"); 382 401 downloadurl.append(pkgname); … … 387 406 else if (distro == "suse") 388 407 { 389 pkgname.append("-1.0.1.1522-2.1");408 pkgname.append("-suse"); 390 409 pkgname.append(".x86_64.rpm"); 391 410 downloadurl.append(pkgname); … … 394 413 httpWin.exec(); 395 414 } 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 } 396 424 397 425 } else { … … 399 427 if (distro == "debian") 400 428 { 401 pkgname.append("_1.0.1svn1522-1");429 pkgname.append("_debian"); 402 430 pkgname.append("_i386.deb"); 403 431 downloadurl.append(pkgname); … … 406 434 httpWin.exec(); 407 435 } 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 } 408 446 else if (distro == "fedora") 409 447 { 410 pkgname.append("-1.0.1.1522-2.1");448 pkgname.append("-fedora"); 411 449 pkgname.append(".i386.rpm"); 412 450 downloadurl.append(pkgname); … … 417 455 else if (distro == "suse") 418 456 { 419 pkgname.append("-1.0.1.1522-2.1");457 pkgname.append("-suse"); 420 458 pkgname.append(".i586.rpm"); 421 459 downloadurl.append(pkgname); … … 424 462 httpWin.exec(); 425 463 } 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 } 426 473 } 427 474 #endif -
middleware-offline/trunk/_src/eidmw/eidgui/dlgPrint.ui
r35 r41 12 12 </property> 13 13 <property name="windowTitle"> 14 <string> Print</string>14 <string>Export PDF / Print</string> 15 15 </property> 16 16 <property name="windowIcon"> … … 37 37 <rect> 38 38 <x>20</x> 39 <y> 30</y>39 <y>50</y> 40 40 <width>140</width> 41 41 <height>20</height> … … 72 72 <rect> 73 73 <x>20</x> 74 <y> 50</y>74 <y>30</y> 75 75 <width>154</width> 76 76 <height>20</height> … … 128 128 <property name="geometry"> 129 129 <rect> 130 <x> 250</x>130 <x>60</x> 131 131 <y>120</y> 132 132 <width>81</width> … … 154 154 <property name="geometry"> 155 155 <rect> 156 <x> 50</x>156 <x>240</x> 157 157 <y>120</y> 158 158 <width>91</width> -
middleware-offline/trunk/_src/eidmw/eidgui/dlgSignature.ui
r35 r41 7 7 <x>0</x> 8 8 <y>0</y> 9 <width>4 50</width>10 <height> 315</height>9 <width>483</width> 10 <height>292</height> 11 11 </rect> 12 12 </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> 15 21 </property> 16 22 <property name="windowIcon"> … … 21 27 <bool>true</bool> 22 28 </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> 96 113 </widget> 97 114 <resources/> -
middleware-offline/trunk/_src/eidmw/eidgui/dlgVerifySignature.ui
r35 r41 7 7 <x>0</x> 8 8 <y>0</y> 9 <width> 431</width>10 <height> 222</height>9 <width>321</width> 10 <height>108</height> 11 11 </rect> 12 12 </property> 13 13 <property name="windowTitle"> 14 <string> Verify Signature</string>14 <string>Validação de Assinaturas</string> 15 15 </property> 16 16 <property name="windowIcon"> … … 21 21 <bool>true</bool> 22 22 </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> 86 65 </widget> 87 66 <resources/> -
middleware-offline/trunk/_src/eidmw/eidgui/dlgprint.cpp
r35 r41 252 252 else 253 253 { 254 std::cout << "no card" << std::endl;255 254 QString msg(tr("No card present")); 256 255 QMessageBox::information( this, caption, msg, QMessageBox::Ok ); … … 261 260 { 262 261 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()); 264 263 return false; 265 264 } … … 267 266 { 268 267 QString msg(tr("Unknown exception")); 269 //ShowPTEIDError( 0, msg );270 268 return false; 271 269 } -
middleware-offline/trunk/_src/eidmw/eidgui/dlgsignature.cpp
r35 r41 238 238 PTEID_EIDCard* Card = dynamic_cast<PTEID_EIDCard*>(m_CI_Data.m_pCard); 239 239 PTEID_ByteArray SignXades; 240 SignXades = Card->SignXades (paths, n_paths, output_path);240 SignXades = Card->SignXadesT(paths, n_paths, output_path); 241 241 242 242 } -
middleware-offline/trunk/_src/eidmw/eidgui/eidmw_nl.ts
r15 r41 25 25 </message> 26 26 <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> 27 66 <location filename="mainwnd.ui" line="404"/> 28 67 <source>Kaartnr. / <i>Card No</i></source> … … 251 290 <source>Reload eID</source> 252 291 <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>270 292 </message> 271 293 <message> … … 591 613 </message> 592 614 <message> 593 <location filename="mainwnd.cpp" line=" 2137"/>594 <location filename="mainwnd.cpp" line=" 2404"/>595 <location filename="mainwnd.cpp" line="2 523"/>596 <location filename="mainwnd.cpp" line="2 799"/>597 <location filename="mainwnd.cpp" line="2 885"/>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"/> 598 620 <source>No card present</source> 599 621 <translation>Cartão não encontrado</translation> … … 773 795 </message> 774 796 <message> 775 <location filename="mainwnd.cpp" line=" 1171"/>797 <location filename="mainwnd.cpp" line="870"/> 776 798 <source>Register certificate</source> 777 <translation>Regist reer 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"/> 781 803 <source>Registration of certificate </source> 782 <translation>Regist ratie 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"/> 786 808 <source>successful</source> 787 <translation> gelukt</translation>809 <translation>bem sucedido</translation> 788 810 </message> 789 811 <message> 790 812 <location filename="mainwnd.cpp" line="1179"/> 791 <location filename="mainwnd.cpp" line=" 2858"/>813 <location filename="mainwnd.cpp" line="878"/> 792 814 <source>failed</source> 793 <translation> mislukt</translation>815 <translation>falhou</translation> 794 816 </message> 795 817 <message> … … 869 891 </message> 870 892 <message> 871 <location filename="mainwnd.cpp" line="2868"/> 893 <location filename="mainwnd.cpp" line="2488"/> 894 <location filename="mainwnd.cpp" line="2730"/> 872 895 <source> 873 896 ( Number of tries left: </source> 874 897 <translation> 875 ( Aantal pogingen over: </translation>898 ( Número de tentativas restantes: </translation> 876 899 </message> 877 900 <message> … … 1021 1044 </message> 1022 1045 <message> 1023 <location filename="mainwnd.cpp" line=" 985"/>1046 <location filename="mainwnd.cpp" line="684"/> 1024 1047 <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"/> 1029 1052 <source>The application will continue to run. To stop this application, select 'Exit' from the menu.</source> 1030 <translation> Het programma blijft verder werken. Om de applicatie te stoppen, kies 'Afsluiten' van het menu.</translation>1053 <translation>Para fechar a aplicação selecione a opção sair.</translation> 1031 1054 </message> 1032 1055 <message> … … 1208 1231 </message> 1209 1232 <message> 1210 <location filename="mainwnd.cpp" line=" 2174"/>1211 <source>Erro r loading card data</source>1233 <location filename="mainwnd.cpp" line="1827"/> 1234 <source>Erro ao ler os dados do cartão</source> 1212 1235 <translation></translation> 1213 1236 </message> … … 1539 1562 </message> 1540 1563 <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> 1541 1569 <location filename="dlgPrint.ui" line="57"/> 1542 1570 <source>Cancel</source> -
middleware-offline/trunk/_src/eidmw/eidgui/httpwindow.cpp
r35 r41 231 231 232 232 std::string winpath; 233 winpath.append("C:\\Windows\\system32\\msiexec.exe /i");233 winpath.append("C:\\Windows\\system32\\msiexec.exe /i"); 234 234 //TODO: Verificar a path do msi em Windows 235 235 //C:\\Users\\Luis\\AppData\\Local\\Temp\\PteidMW35-Basic-en.msi 236 236 QString s = QDir::toNativeSeparators(QString::fromStdString(pkgpath)); 237 237 winpath.append(s.toStdString()); 238 winpath.append(" /L*v "); 239 winpath.append(QDir::tempPath().toStdString()); 240 winpath.append("\PTeID-MSI.log"); 238 241 CreateProcess(NULL, LPTSTR(winpath.c_str()), NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); 239 242 exit(0); -
middleware-offline/trunk/_src/eidmw/eidgui/mainwnd.cpp
r35 r41 1684 1684 // if we load a new card, clear the certificate contexts we kept 1685 1685 //---------------------------------------------------------------- 1686 std::cout << " loadCardData( void )" << std::endl;1687 1686 try 1688 1687 { … … 1740 1739 catch (PTEID_ExCardBadType const& e) 1741 1740 { 1742 std::cout << "ERROR" << e.GetError()<< std::endl;1743 1741 QString errcode; 1742 PTEID_LOG(PTEID_LOG_LEVEL_DEBUG, "eidgui", "loadCardData failed %s", e.GetError()); 1744 1743 errcode = errcode.setNum(e.GetError()); 1745 1744 } -
middleware-offline/trunk/_src/eidmw/eidgui/mainwnd.ui
r35 r41 21 21 </property> 22 22 <property name="windowTitle"> 23 <string>P TeID-NG</string>23 <string>Portuguese ID Card Management</string> 24 24 </property> 25 25 <property name="autoFillBackground"> -
middleware-offline/trunk/_src/eidmw/eidlib/eidlib.i
r35 r41 476 476 ///////////////////////////////////////// PTEID_Card &PTEID_ReaderContext::getCard() ///////////////////////////////////////////// 477 477 %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 $excode502 return ret;503 504 default:505 throw new PTEID_ExCardBadType();506 }507 }508 478 509 479 ///////////////////////////////////////// PTEID_XMLDoc& PTEID_EIDCard::getDocument(PTEID_DocumentType type) ///////////////////////////////////////////// … … 535 505 # no need to add a static block on every project that uses the java wrapper 536 506 # 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 %}547 507 548 508 ///////////////////////////////////////// ByteArray ///////////////////////////////////////////// -
middleware-offline/trunk/_src/eidmw/eidlib/eidlibCard.cpp
r35 r41 1616 1616 1617 1617 PTEIDSDK_API long PTEID_SetSODChecking(int bDoCheck){ 1618 if (readerContext!=NULL){ 1619 1620 } 1618 if (readerContext!=NULL) 1619 readerContext->getEIDCard().doSODCheck(bDoCheck!=0); 1621 1620 1622 1621 return 0; -
middleware-offline/trunk/_src/eidmw/eidlib/eidlibException.cpp
r34 r41 82 82 case EIDMW_ERR_NOT_ALLOW_BY_USER: 83 83 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()); 84 92 85 93 case EIDMW_ERR_CARD: … … 298 306 { 299 307 } 300 } 308 309 /***************************************************************************************** 310 ---------------------------- PTEID_ExUnexpectedValue -------------------------------------- 311 *****************************************************************************************/ 312 PTEID_ExSOD::PTEID_ExSOD(long lError):PTEID_Exception(lError) 313 { 314 } 315 316 PTEID_ExSOD::~PTEID_ExSOD() 317 { 318 } 319 } -
middleware-offline/trunk/_src/eidmw/eidlib/eidlibException.h
r34 r41 291 291 PTEIDSDK_API virtual ~PTEID_ExUserMustAnswer(); /**< Destructor */ 292 292 }; 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 *********************************************************************************/ 307 class PTEID_ExSOD: public PTEID_Exception 308 { 309 public: 310 PTEIDSDK_API PTEID_ExSOD(long lError); /**< Constructor */ 311 PTEIDSDK_API virtual ~PTEID_ExSOD(); /**< Destructor */ 312 }; 293 313 } 294 314 -
middleware-offline/trunk/_src/eidmw/eidlib/eidlibReader.cpp
r34 r41 884 884 m_impl=new APL_Config(CConfig::EIDMW_CONFIG_PARAM_XSIGN_TIMEOUT); break; 885 885 886 //AUTOUPDATES 887 case PTEID_PARAM_AUTOUPDATES_URL: 888 m_impl=new APL_Config(CConfig::EIDMW_CONFIG_PARAM_AUTOUPDATES_URL); break; 889 886 890 default: 887 891 throw PTEID_ExParamRange(); -
middleware-offline/trunk/_src/eidmw/eidlib/eidlibdefines.h
r34 r41 181 181 PTEID_PARAM_PROXY_CONNECT_TIMEOUT, //number 182 182 183 //AUTOUPDATES 184 PTEID_PARAM_AUTOUPDATES_URL //string 185 183 186 }; 184 187 -
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 1 4 [crl] 2 5 crl_cachedir=/usr/share/pteid/crl -
middleware-offline/trunk/_src/eidmw/mdw_online_patches/apply_patches.sh
r5 r41 2 2 3 3 #patch -p0 -i build_on_glibc_2.14.patch 4 patch -p0 -i dont_ask_for_pin_on_sign.patch4 #patch -p0 -i dont_ask_for_pin_on_sign.patch 5 5 patch -p0 -i use_rpath_origin.patch -
middleware-offline/trunk/_src/eidmw/misc/Wix_MW35/MW35Wix/Product.wxs
r35 r41 502 502 <Component Id="PinpadLib" Guid="{9ADA6D75-5DCC-467E-A0CE-B84A482B2115}" SharedDllRefCount="yes"> 503 503 <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" /> 504 505 </Component> 505 506 </DirectoryRef> -
middleware-offline/trunk/_src/eidmw/pkcs11/asn1.h
r5 r41 131 131 132 132 #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" 133 134 #define ASNPATH_FIRST "\x01" 134 135 -
middleware-offline/trunk/_src/eidmw/pteidlinuxversion.pl
r34 r41 55 55 $distro = "mandriva"; 56 56 } 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 } 57 73 elsif (-e "/etc/debian_version") 58 74 {