Loading ePassport/ttcn/ePassport_Altsteps.ttcn +48 −23 Original line number Original line Diff line number Diff line Loading @@ -42,7 +42,7 @@ t_wait.start; t_wait.start; alt { alt { [] a_isReports(); [] a_aisReports(); [] t_wait.timeout { [] t_wait.timeout { // do nothing // do nothing Loading @@ -60,43 +60,53 @@ in template IsVerdictList p_expectedPassResults in template IsVerdictList p_expectedPassResults ) runs on MRTD { ) runs on MRTD { var boolean v_checkFailVerdicts, v_checkPassVerdicts; if(not(PXT_AUTOMATIC_TEST_INTERFACE)) { if(not(PXT_AUTOMATIC_TEST_INTERFACE)) { f_waitForManualVerdict(); f_waitForManualVerdict(); } } // Basic Access Control // Basic Access Control if(vc_simu.securityStatus >= e_basicAccessControl if(vc_simu.securityStatus >= e_basicAccessControl and not(match(vc_simu.isFailVerdicts, superset(enum2int(e_aisBacAuthentication))))) { and not(match(vc_simu.isFailVerdicts, superset(e_aisBacAuthentication)))) { f_pushPassResult(enum2int(e_aisBacAuthentication)); f_pushPassResult(e_aisBacAuthentication); } } // Passive Authentication // Passive Authentication if(not(match(vc_simu.isFailVerdicts, superset(enum2int(e_aisPassiveAuthentication))))) { if(not(match(vc_simu.isFailVerdicts, superset(e_aisPassiveAuthentication)))) { f_pushPassResult(enum2int(e_aisPassiveAuthentication)); f_pushPassResult(e_aisPassiveAuthentication); } } // Active Authentication // Active Authentication if(vc_simu.activeAuthenticationPerformed if(vc_simu.activeAuthenticationPerformed and not(match(vc_simu.isFailVerdicts, superset(enum2int(e_aisActiveAuthentication))))) { and not(match(vc_simu.isFailVerdicts, superset(e_aisActiveAuthentication)))) { f_pushPassResult(enum2int(e_aisActiveAuthentication)); f_pushPassResult(e_aisActiveAuthentication); } } // Terminal Authentication // Terminal Authentication if(vc_simu.securityStatus >= e_chipAuthenticated if(vc_simu.securityStatus >= e_chipAuthenticated and not(match(vc_simu.isFailVerdicts, superset(enum2int(e_aisChipAuthentication))))) { and not(match(vc_simu.isFailVerdicts, superset(e_aisChipAuthentication)))) { f_pushPassResult(enum2int(e_aisChipAuthentication)); f_pushPassResult(e_aisChipAuthentication); } } // Terminal Authentication // Terminal Authentication // Pass result pushed in a_terminalAuthentication // Pass result pushed in a_terminalAuthentication // Communication // Communication if(not(match(vc_simu.isFailVerdicts, superset(enum2int(e_aisCommunication))))) { if(not(match(vc_simu.isFailVerdicts, superset(e_aisCommunication)))) { f_pushPassResult(enum2int(e_aisCommunication)); f_pushPassResult(e_aisCommunication); } } if(match(vc_simu.isFailVerdicts, p_expectedFailResults) // Fail verdicts and match(vc_simu.isPassVerdicts, p_expectedPassResults)) { log("**** Checking Failure verdicts... ****"); v_checkFailVerdicts := match(vc_simu.isFailVerdicts, p_expectedFailResults); // Pass verdicts log("**** Checking Pass verdicts... ****"); v_checkPassVerdicts := match(vc_simu.isPassVerdicts, p_expectedPassResults); // Take decision and assign testcase verdict if(v_checkFailVerdicts and v_checkPassVerdicts) { log("**** ", p_testcaseId, ": Pass: Inspection System produced expected result ****"); log("**** ", p_testcaseId, ": Pass: Inspection System produced expected result ****"); setverdict(pass); setverdict(pass); } } Loading Loading @@ -152,27 +162,42 @@ } // end defaults } // end defaults group isReports { group automaticInterfaceSpecificationAltsteps { altstep a_isReports() runs on MRTD { altstep a_aisReports() runs on MRTD { var CommandGeneric v_report; var CommandGeneric v_report; [] mgmtport.receive(mw_report(int2oct(enum2int(e_aisNoFailure), 2))) { [] mgmtport.receive(mw_report(int2oct(enum2int(e_aisNoFailure), 2))) { log("**** Success reported ****"); log("**** Success reported ****"); f_pushPassResult(enum2int(e_aisNoFailure)); f_pushPassResult(e_aisNoFailure); mgmtport.send(m_responseOK); mgmtport.send(m_responseOK); } } [] mgmtport.receive(mw_report(?)) -> value v_report { [] mgmtport.receive(mw_report(?)) -> value v_report { log("**** Failure reported: ", v_report.payload.genericData.data[0], " ****"); log("**** Failure reported: ", f_aisOctResultToEnum(v_report.payload.genericData.data[0]), " ****"); f_pushFailResult(oct2int(v_report.payload.genericData.data[0])); f_pushFailResult(f_aisOctResultToEnum(v_report.payload.genericData.data[0])); mgmtport.send(m_responseOK); mgmtport.send(m_responseOK); if((v_report.params.p2 == c_aisFirstOrNextCommand) or PXT_AUTOMATIC_TEST_INTERFACE) { repeat; repeat; } } } } // end a_isReports } // end a_isReports } // end isReports altstep a_aisConfiguration() runs on MRTD { [] mgmtport.receive(mw_getData_mrz) { mgmtport.send(m_responseRead(m_opticalMrz( substr(vc_simu.mrz, 0, lengthof(vc_simu.mrz)/2 ), substr(vc_simu.mrz, lengthof(vc_simu.mrz)/2, lengthof(vc_simu.mrz)/2)))); } [] mgmtport.receive(mw_getData_cert) { } } // end a_aisConfiguration } // end automaticInterfaceSpecificationAltsteps group inspectionProcedures { group inspectionProcedures { Loading Loading @@ -338,7 +363,7 @@ log("v_cleartextChallenge", v_cleartextChallenge); log("v_cleartextChallenge", v_cleartextChallenge); if(f_verifySignature(v_cleartextChallenge, v_signature, f_getAtPublickey())) { if(f_verifySignature(v_cleartextChallenge, v_signature, f_getAtPublickey())) { f_pushPassResult(enum2int(e_aisTerminalAuthentication)); f_pushPassResult(e_aisTerminalAuthentication); vc_simu.securityStatus := e_terminalAuthenticated; vc_simu.securityStatus := e_terminalAuthenticated; mrtdport.send(m_responseOK); mrtdport.send(m_responseOK); } } Loading ePassport/ttcn/ePassport_Functions.ttcn +137 −44 Original line number Original line Diff line number Diff line Loading @@ -21,7 +21,7 @@ group externalFunctions { group externalFunctions { group mgmtExternalFunctions { group managementExternalFunctions { /** /** * @desc Activate the probe of the ePassport reader simulator * @desc Activate the probe of the ePassport reader simulator Loading @@ -34,7 +34,7 @@ * @see Automatic Interfaces Specification (Version 1.0) - Clause 2. Automatic Interface Proposal * @see Automatic Interfaces Specification (Version 1.0) - Clause 2. Automatic Interface Proposal */ */ external function fx_deactivateProbe(); external function fx_deactivateProbe(); } } // end managementExternalFunctions group securityExternalFunctions { group securityExternalFunctions { Loading Loading @@ -567,11 +567,22 @@ } // end fileFunctions } // end fileFunctions group managementFunctions { function f_activateProbe() { fx_activateProbe(); } function f_deactivateProbe() { fx_deactivateProbe(); } } // end managementFunctions group initializationFunctions { group initializationFunctions { function f_initializeMRTD(in charstring p_configurationId) runs on MRTD { function f_initializeMRTD(in charstring p_configurationId) runs on MRTD { var octetstring v_mrz; var octetstring v_cvcaData; var octetstring v_cvcaData; var CvCertificate v_cvcaCvCertificate; var CvCertificate v_cvcaCvCertificate; var integer v_decodeResult; var integer v_decodeResult; Loading @@ -580,9 +591,9 @@ f_loadPassportConfiguration(p_configurationId); f_loadPassportConfiguration(p_configurationId); // Prepare basic access keys // Prepare basic access keys f_readFileData(c_fileMRZ, 0, -1, v_mrz); f_readFileData(c_fileMRZ, 0, -1, vc_simu.mrz); f_deriveKeys(f_extractKseedFromMrz(v_mrz), vc_simu.kEnc, vc_simu.kMac); f_deriveKeys(f_extractKseedFromMrz(vc_simu.mrz), vc_simu.kEnc, vc_simu.kMac); vc_simu.documentNumber := f_extractDocumentNumberFromMrz(v_mrz); vc_simu.documentNumber := f_extractDocumentNumberFromMrz(vc_simu.mrz); // FIXME: Force initialization of vc_simu.securityStatus - Mandatory because it's used in altstep // FIXME: Force initialization of vc_simu.securityStatus - Mandatory because it's used in altstep vc_simu.securityStatus := e_noApplication; vc_simu.securityStatus := e_noApplication; Loading Loading @@ -616,49 +627,34 @@ //function for initializing the system and start the ePassport procedure //function for initializing the system and start the ePassport procedure function f_initializeIS() runs on MRTD function f_initializeIS() runs on MRTD { { // import certicate configuration from TA ext function // Activate antenna // get certificate to IS f_activateProbe(); mgmtport.send(m_start); if(not(PXT_AUTOMATIC_TEST_INTERFACE)) { action("Please ensure that IS starts inspection procedure."); /*alt{ [] mgmtport.receive(mw_getdata_mrz) { mgmtport.send(m_setdata_mrz); } [] mgmtport.receive(mw_getdata_cert) { mgmtport.send(m_setdata_cert); } [] mgmtport.receive { mgmtport.send(m_setdata_cert); // to change to ERROR } } } else { alt{ [] mgmtport.receive(mw_getdata_mrz) { mgmtport.send(m_setdata_mrz); } [] mgmtport.receive(mw_getdata_cert) { mgmtport.send(m_setdata_cert); } [] mgmtport.receive { mgmtport.send(m_setdata_cert); // to change to ERROR } }*/ if(not(PXT_AUTOMATIC_TEST_INTERFACE)) { action("Please ensure that IS starts inspection procedure."); } } } // end f_initializeIS } // end f_initializeIS } // end initializationFunctions } // end initializationFunctions group postambleFunctions { function f_cleanUp() { // Dectivate antenna f_deactivateProbe(); } // end f_cleanUp } // end postambleFunctions function f_getCertificate(in octetstring p_data) return octetstring { function f_getCertificate(in octetstring p_data) return octetstring { // TODO: refine... // TODO: refine... return ''O; return ''O; Loading @@ -671,11 +667,11 @@ group simuParamsFunctions { group simuParamsFunctions { function f_pushFailResult(in integer p_resultId) runs on MRTD { function f_pushFailResult(in AisFailureClass p_resultId) runs on MRTD { vc_simu.isFailVerdicts[sizeof(vc_simu.isFailVerdicts)] := p_resultId; vc_simu.isFailVerdicts[sizeof(vc_simu.isFailVerdicts)] := p_resultId; } // end f_pushFailResult } // end f_pushFailResult function f_pushPassResult(in integer p_resultId) runs on MRTD { function f_pushPassResult(in AisFailureClass p_resultId) runs on MRTD { vc_simu.isPassVerdicts[sizeof(vc_simu.isPassVerdicts)] := p_resultId; vc_simu.isPassVerdicts[sizeof(vc_simu.isPassVerdicts)] := p_resultId; } // end f_pushPassResult } // end f_pushPassResult Loading Loading @@ -796,6 +792,103 @@ } // end f_addTrustedCertificate } // end f_addTrustedCertificate function f_aisOctResultToEnum(in Oct1 p_octCode) return AisFailureClass { if(p_octCode == '00'O) { return e_aisNoFailure; } if(p_octCode == '01'O) { return e_aisOpticalReading; } if(p_octCode == '02'O) { return e_aisCommunication; } if(p_octCode == '03'O) { return e_aisApplication; } if(p_octCode == '04'O) { return e_aisBacAuthentication; } if(p_octCode == '05'O) { return e_aisSecureMessaging; } if(p_octCode == '06'O) { return e_aisDgRead; } if(p_octCode == '07'O) { return e_aisChipAuthentication; } if(p_octCode == '08'O) { return e_aisTerminalAuthentication; } if(p_octCode == '09'O) { return e_aisActiveAuthentication; } if(p_octCode == '0A'O) { return e_aisPassiveAuthentication; } if(p_octCode == '10'O) { return e_aisEfCom; } if(p_octCode == '11'O) { return e_aisEfSod; } if(p_octCode == '12'O) { return e_aisDg1; } if(p_octCode == '13'O) { return e_aisDg2; } if(p_octCode == '14'O) { return e_aisDg3; } if(p_octCode == '15'O) { return e_aisDg4; } if(p_octCode == '16'O) { return e_aisDg5; } if(p_octCode == '17'O) { return e_aisDg6; } if(p_octCode == '18'O) { return e_aisDg7; } if(p_octCode == '19'O) { return e_aisDg8; } if(p_octCode == '1A'O) { return e_aisDg9; } if(p_octCode == '1B'O) { return e_aisDg10; } if(p_octCode == '1C'O) { return e_aisDg11; } if(p_octCode == '1D'O) { return e_aisDg12; } if(p_octCode == '1E'O) { return e_aisDg13; } if(p_octCode == '1F'O) { return e_aisDg14; } if(p_octCode == '20'O) { return e_aisDg15; } if(p_octCode == '21'O) { return e_aisDg16; } if(p_octCode == '22'O) { return e_aisEfCvca; } return e_aisNoFailure; } // end f_aisOctResultToEnum } // end simuParamsFunctions } // end simuParamsFunctions } // end ePassport_Functions } // end ePassport_Functions Loading ePassport/ttcn/ePassport_Templates.ttcn +33 −66 Original line number Original line Diff line number Diff line Loading @@ -18,61 +18,49 @@ module ePassport_Templates { group automaticTestInterface { group automaticTestInterface { // fake variable need to be declared later with the test mode template CommandPutDataWith mw_report(template Oct2 v_failCode) := { // The type is WRONG, copied from the EFfile type // It may contain the certificate for the IS // TEMPLATES m_start template (value) Response m_start := { responseData := omit, w1w2 := '9999'O // ??? } // TEMPLATES m_get_data_certificate see Automatic Interface Proposal template CommandGeneric mw_getdata_cert := { class := mw_class_01, class := mw_class_01, ins := e_getData, ins := e_putDataWithDataBytes, //'da'O, params := { params := { p1 := '00000001'B, // values for Certificate reference ID p1 := '00001111'B, p2 := '11110001'B p2 := ? }, }, lengthC := ?, lengthC := *, payload := { payload := { genericData := { genericData := { data := omit data := v_failCode } } }, }, lengthE := 0 lengthE := omit } } // TEMPLATES m_get_data_MRZ template CommandGetData mw_getData_cert := { template CommandGeneric mw_getdata_mrz := { class := mw_class_01, class := mw_class_01, ins := e_getData, ins := e_getData, params := { params := { p1 := '00000001'B, p1 := c_aisGetDataP1, p2 := '11110010'B p2 := c_aisGetDataP2CertificateRef }, }, lengthC := *, lengthC := omit, payload := *, payload := omit, lengthE := 0 lengthE := 256 } // TEMPLATES m_setdata_cert template (value) Response m_setdata_cert := { // to be change later by defining a real function to provide certificate to the IS !!! responseData := omit, w1w2 := '9999'O // ??? } } // TEMPLATES m_start template CommandGetData mw_getData_mrz := { template (value) Response m_setdata_mrz := { class := mw_class_01, responseData := m_responseData(char2oct("bleu")), // to be change later by providing real data !!! ins := e_getData, w1w2 := c_w1w2NormalProcessing params := { p1 := c_aisGetDataP1, p2 := c_aisGetDataP2OpticalMrz }, lengthC := omit, payload := omit, lengthE := 256 } } template (value) ResponseData m_responseData( template (value) PlainTextResponseData m_opticalMrz(in octetstring p_mrzLine1, in octetstring p_mrzLine2) template (value) PlainTextResponseData p_responseData) := { := c_aisMrzLine1Tag & int2oct(lengthof(p_mrzLine1), 1) & p_mrzLine1 plainText := p_responseData & c_aisMrzLine2Tag & int2oct(lengthof(p_mrzLine2), 1) & p_mrzLine2; } } // end automaticTestInterface } // end automaticTestInterface Loading Loading @@ -104,27 +92,6 @@ module ePassport_Templates { } } } } group managementTemplates { // TEMPLATES mw_report template CommandGeneric mw_report(template Oct2 v_failCode) := { class := mw_class_01, ins := e_putDataWithDataBytes, //'da'O, params := { p1 := '00001111'B, p2 := ? }, lengthC := *, payload := { genericData := { data := v_failCode } }, lengthE := omit } } // end managementTemplates group commandTemplates { group commandTemplates { //SELECT TEMPLATES : Send APDU to the passport 00 a4 04 0c 07 a0 00 00 02 47 10 01 //SELECT TEMPLATES : Send APDU to the passport 00 a4 04 0c 07 a0 00 00 02 47 10 01 Loading ePassport/ttcn/ePassport_TestSystem.ttcn +2 −1 Original line number Original line Diff line number Diff line Loading @@ -62,6 +62,7 @@ module ePassport_TestSystem { Chr dst optional, Chr dst optional, Chr at optional, Chr at optional, octetstring challenge optional, octetstring challenge optional, octetstring mrz optional, octetstring documentNumber optional, octetstring documentNumber optional, octetstring isDhPublicKeyHash optional, octetstring isDhPublicKeyHash optional, Loading Loading @@ -127,7 +128,7 @@ group portDefs { }; }; type port MgmtPort message { type port MgmtPort message { in CommandGeneric; in CommandGetData, CommandPutDataWith; out Response; out Response; }; }; Loading ePassport/ttcn/ePassport_Testcases.ttcn +108 −72 File changed.Preview size limit exceeded, changes collapsed. Show changes Loading
ePassport/ttcn/ePassport_Altsteps.ttcn +48 −23 Original line number Original line Diff line number Diff line Loading @@ -42,7 +42,7 @@ t_wait.start; t_wait.start; alt { alt { [] a_isReports(); [] a_aisReports(); [] t_wait.timeout { [] t_wait.timeout { // do nothing // do nothing Loading @@ -60,43 +60,53 @@ in template IsVerdictList p_expectedPassResults in template IsVerdictList p_expectedPassResults ) runs on MRTD { ) runs on MRTD { var boolean v_checkFailVerdicts, v_checkPassVerdicts; if(not(PXT_AUTOMATIC_TEST_INTERFACE)) { if(not(PXT_AUTOMATIC_TEST_INTERFACE)) { f_waitForManualVerdict(); f_waitForManualVerdict(); } } // Basic Access Control // Basic Access Control if(vc_simu.securityStatus >= e_basicAccessControl if(vc_simu.securityStatus >= e_basicAccessControl and not(match(vc_simu.isFailVerdicts, superset(enum2int(e_aisBacAuthentication))))) { and not(match(vc_simu.isFailVerdicts, superset(e_aisBacAuthentication)))) { f_pushPassResult(enum2int(e_aisBacAuthentication)); f_pushPassResult(e_aisBacAuthentication); } } // Passive Authentication // Passive Authentication if(not(match(vc_simu.isFailVerdicts, superset(enum2int(e_aisPassiveAuthentication))))) { if(not(match(vc_simu.isFailVerdicts, superset(e_aisPassiveAuthentication)))) { f_pushPassResult(enum2int(e_aisPassiveAuthentication)); f_pushPassResult(e_aisPassiveAuthentication); } } // Active Authentication // Active Authentication if(vc_simu.activeAuthenticationPerformed if(vc_simu.activeAuthenticationPerformed and not(match(vc_simu.isFailVerdicts, superset(enum2int(e_aisActiveAuthentication))))) { and not(match(vc_simu.isFailVerdicts, superset(e_aisActiveAuthentication)))) { f_pushPassResult(enum2int(e_aisActiveAuthentication)); f_pushPassResult(e_aisActiveAuthentication); } } // Terminal Authentication // Terminal Authentication if(vc_simu.securityStatus >= e_chipAuthenticated if(vc_simu.securityStatus >= e_chipAuthenticated and not(match(vc_simu.isFailVerdicts, superset(enum2int(e_aisChipAuthentication))))) { and not(match(vc_simu.isFailVerdicts, superset(e_aisChipAuthentication)))) { f_pushPassResult(enum2int(e_aisChipAuthentication)); f_pushPassResult(e_aisChipAuthentication); } } // Terminal Authentication // Terminal Authentication // Pass result pushed in a_terminalAuthentication // Pass result pushed in a_terminalAuthentication // Communication // Communication if(not(match(vc_simu.isFailVerdicts, superset(enum2int(e_aisCommunication))))) { if(not(match(vc_simu.isFailVerdicts, superset(e_aisCommunication)))) { f_pushPassResult(enum2int(e_aisCommunication)); f_pushPassResult(e_aisCommunication); } } if(match(vc_simu.isFailVerdicts, p_expectedFailResults) // Fail verdicts and match(vc_simu.isPassVerdicts, p_expectedPassResults)) { log("**** Checking Failure verdicts... ****"); v_checkFailVerdicts := match(vc_simu.isFailVerdicts, p_expectedFailResults); // Pass verdicts log("**** Checking Pass verdicts... ****"); v_checkPassVerdicts := match(vc_simu.isPassVerdicts, p_expectedPassResults); // Take decision and assign testcase verdict if(v_checkFailVerdicts and v_checkPassVerdicts) { log("**** ", p_testcaseId, ": Pass: Inspection System produced expected result ****"); log("**** ", p_testcaseId, ": Pass: Inspection System produced expected result ****"); setverdict(pass); setverdict(pass); } } Loading Loading @@ -152,27 +162,42 @@ } // end defaults } // end defaults group isReports { group automaticInterfaceSpecificationAltsteps { altstep a_isReports() runs on MRTD { altstep a_aisReports() runs on MRTD { var CommandGeneric v_report; var CommandGeneric v_report; [] mgmtport.receive(mw_report(int2oct(enum2int(e_aisNoFailure), 2))) { [] mgmtport.receive(mw_report(int2oct(enum2int(e_aisNoFailure), 2))) { log("**** Success reported ****"); log("**** Success reported ****"); f_pushPassResult(enum2int(e_aisNoFailure)); f_pushPassResult(e_aisNoFailure); mgmtport.send(m_responseOK); mgmtport.send(m_responseOK); } } [] mgmtport.receive(mw_report(?)) -> value v_report { [] mgmtport.receive(mw_report(?)) -> value v_report { log("**** Failure reported: ", v_report.payload.genericData.data[0], " ****"); log("**** Failure reported: ", f_aisOctResultToEnum(v_report.payload.genericData.data[0]), " ****"); f_pushFailResult(oct2int(v_report.payload.genericData.data[0])); f_pushFailResult(f_aisOctResultToEnum(v_report.payload.genericData.data[0])); mgmtport.send(m_responseOK); mgmtport.send(m_responseOK); if((v_report.params.p2 == c_aisFirstOrNextCommand) or PXT_AUTOMATIC_TEST_INTERFACE) { repeat; repeat; } } } } // end a_isReports } // end a_isReports } // end isReports altstep a_aisConfiguration() runs on MRTD { [] mgmtport.receive(mw_getData_mrz) { mgmtport.send(m_responseRead(m_opticalMrz( substr(vc_simu.mrz, 0, lengthof(vc_simu.mrz)/2 ), substr(vc_simu.mrz, lengthof(vc_simu.mrz)/2, lengthof(vc_simu.mrz)/2)))); } [] mgmtport.receive(mw_getData_cert) { } } // end a_aisConfiguration } // end automaticInterfaceSpecificationAltsteps group inspectionProcedures { group inspectionProcedures { Loading Loading @@ -338,7 +363,7 @@ log("v_cleartextChallenge", v_cleartextChallenge); log("v_cleartextChallenge", v_cleartextChallenge); if(f_verifySignature(v_cleartextChallenge, v_signature, f_getAtPublickey())) { if(f_verifySignature(v_cleartextChallenge, v_signature, f_getAtPublickey())) { f_pushPassResult(enum2int(e_aisTerminalAuthentication)); f_pushPassResult(e_aisTerminalAuthentication); vc_simu.securityStatus := e_terminalAuthenticated; vc_simu.securityStatus := e_terminalAuthenticated; mrtdport.send(m_responseOK); mrtdport.send(m_responseOK); } } Loading
ePassport/ttcn/ePassport_Functions.ttcn +137 −44 Original line number Original line Diff line number Diff line Loading @@ -21,7 +21,7 @@ group externalFunctions { group externalFunctions { group mgmtExternalFunctions { group managementExternalFunctions { /** /** * @desc Activate the probe of the ePassport reader simulator * @desc Activate the probe of the ePassport reader simulator Loading @@ -34,7 +34,7 @@ * @see Automatic Interfaces Specification (Version 1.0) - Clause 2. Automatic Interface Proposal * @see Automatic Interfaces Specification (Version 1.0) - Clause 2. Automatic Interface Proposal */ */ external function fx_deactivateProbe(); external function fx_deactivateProbe(); } } // end managementExternalFunctions group securityExternalFunctions { group securityExternalFunctions { Loading Loading @@ -567,11 +567,22 @@ } // end fileFunctions } // end fileFunctions group managementFunctions { function f_activateProbe() { fx_activateProbe(); } function f_deactivateProbe() { fx_deactivateProbe(); } } // end managementFunctions group initializationFunctions { group initializationFunctions { function f_initializeMRTD(in charstring p_configurationId) runs on MRTD { function f_initializeMRTD(in charstring p_configurationId) runs on MRTD { var octetstring v_mrz; var octetstring v_cvcaData; var octetstring v_cvcaData; var CvCertificate v_cvcaCvCertificate; var CvCertificate v_cvcaCvCertificate; var integer v_decodeResult; var integer v_decodeResult; Loading @@ -580,9 +591,9 @@ f_loadPassportConfiguration(p_configurationId); f_loadPassportConfiguration(p_configurationId); // Prepare basic access keys // Prepare basic access keys f_readFileData(c_fileMRZ, 0, -1, v_mrz); f_readFileData(c_fileMRZ, 0, -1, vc_simu.mrz); f_deriveKeys(f_extractKseedFromMrz(v_mrz), vc_simu.kEnc, vc_simu.kMac); f_deriveKeys(f_extractKseedFromMrz(vc_simu.mrz), vc_simu.kEnc, vc_simu.kMac); vc_simu.documentNumber := f_extractDocumentNumberFromMrz(v_mrz); vc_simu.documentNumber := f_extractDocumentNumberFromMrz(vc_simu.mrz); // FIXME: Force initialization of vc_simu.securityStatus - Mandatory because it's used in altstep // FIXME: Force initialization of vc_simu.securityStatus - Mandatory because it's used in altstep vc_simu.securityStatus := e_noApplication; vc_simu.securityStatus := e_noApplication; Loading Loading @@ -616,49 +627,34 @@ //function for initializing the system and start the ePassport procedure //function for initializing the system and start the ePassport procedure function f_initializeIS() runs on MRTD function f_initializeIS() runs on MRTD { { // import certicate configuration from TA ext function // Activate antenna // get certificate to IS f_activateProbe(); mgmtport.send(m_start); if(not(PXT_AUTOMATIC_TEST_INTERFACE)) { action("Please ensure that IS starts inspection procedure."); /*alt{ [] mgmtport.receive(mw_getdata_mrz) { mgmtport.send(m_setdata_mrz); } [] mgmtport.receive(mw_getdata_cert) { mgmtport.send(m_setdata_cert); } [] mgmtport.receive { mgmtport.send(m_setdata_cert); // to change to ERROR } } } else { alt{ [] mgmtport.receive(mw_getdata_mrz) { mgmtport.send(m_setdata_mrz); } [] mgmtport.receive(mw_getdata_cert) { mgmtport.send(m_setdata_cert); } [] mgmtport.receive { mgmtport.send(m_setdata_cert); // to change to ERROR } }*/ if(not(PXT_AUTOMATIC_TEST_INTERFACE)) { action("Please ensure that IS starts inspection procedure."); } } } // end f_initializeIS } // end f_initializeIS } // end initializationFunctions } // end initializationFunctions group postambleFunctions { function f_cleanUp() { // Dectivate antenna f_deactivateProbe(); } // end f_cleanUp } // end postambleFunctions function f_getCertificate(in octetstring p_data) return octetstring { function f_getCertificate(in octetstring p_data) return octetstring { // TODO: refine... // TODO: refine... return ''O; return ''O; Loading @@ -671,11 +667,11 @@ group simuParamsFunctions { group simuParamsFunctions { function f_pushFailResult(in integer p_resultId) runs on MRTD { function f_pushFailResult(in AisFailureClass p_resultId) runs on MRTD { vc_simu.isFailVerdicts[sizeof(vc_simu.isFailVerdicts)] := p_resultId; vc_simu.isFailVerdicts[sizeof(vc_simu.isFailVerdicts)] := p_resultId; } // end f_pushFailResult } // end f_pushFailResult function f_pushPassResult(in integer p_resultId) runs on MRTD { function f_pushPassResult(in AisFailureClass p_resultId) runs on MRTD { vc_simu.isPassVerdicts[sizeof(vc_simu.isPassVerdicts)] := p_resultId; vc_simu.isPassVerdicts[sizeof(vc_simu.isPassVerdicts)] := p_resultId; } // end f_pushPassResult } // end f_pushPassResult Loading Loading @@ -796,6 +792,103 @@ } // end f_addTrustedCertificate } // end f_addTrustedCertificate function f_aisOctResultToEnum(in Oct1 p_octCode) return AisFailureClass { if(p_octCode == '00'O) { return e_aisNoFailure; } if(p_octCode == '01'O) { return e_aisOpticalReading; } if(p_octCode == '02'O) { return e_aisCommunication; } if(p_octCode == '03'O) { return e_aisApplication; } if(p_octCode == '04'O) { return e_aisBacAuthentication; } if(p_octCode == '05'O) { return e_aisSecureMessaging; } if(p_octCode == '06'O) { return e_aisDgRead; } if(p_octCode == '07'O) { return e_aisChipAuthentication; } if(p_octCode == '08'O) { return e_aisTerminalAuthentication; } if(p_octCode == '09'O) { return e_aisActiveAuthentication; } if(p_octCode == '0A'O) { return e_aisPassiveAuthentication; } if(p_octCode == '10'O) { return e_aisEfCom; } if(p_octCode == '11'O) { return e_aisEfSod; } if(p_octCode == '12'O) { return e_aisDg1; } if(p_octCode == '13'O) { return e_aisDg2; } if(p_octCode == '14'O) { return e_aisDg3; } if(p_octCode == '15'O) { return e_aisDg4; } if(p_octCode == '16'O) { return e_aisDg5; } if(p_octCode == '17'O) { return e_aisDg6; } if(p_octCode == '18'O) { return e_aisDg7; } if(p_octCode == '19'O) { return e_aisDg8; } if(p_octCode == '1A'O) { return e_aisDg9; } if(p_octCode == '1B'O) { return e_aisDg10; } if(p_octCode == '1C'O) { return e_aisDg11; } if(p_octCode == '1D'O) { return e_aisDg12; } if(p_octCode == '1E'O) { return e_aisDg13; } if(p_octCode == '1F'O) { return e_aisDg14; } if(p_octCode == '20'O) { return e_aisDg15; } if(p_octCode == '21'O) { return e_aisDg16; } if(p_octCode == '22'O) { return e_aisEfCvca; } return e_aisNoFailure; } // end f_aisOctResultToEnum } // end simuParamsFunctions } // end simuParamsFunctions } // end ePassport_Functions } // end ePassport_Functions Loading
ePassport/ttcn/ePassport_Templates.ttcn +33 −66 Original line number Original line Diff line number Diff line Loading @@ -18,61 +18,49 @@ module ePassport_Templates { group automaticTestInterface { group automaticTestInterface { // fake variable need to be declared later with the test mode template CommandPutDataWith mw_report(template Oct2 v_failCode) := { // The type is WRONG, copied from the EFfile type // It may contain the certificate for the IS // TEMPLATES m_start template (value) Response m_start := { responseData := omit, w1w2 := '9999'O // ??? } // TEMPLATES m_get_data_certificate see Automatic Interface Proposal template CommandGeneric mw_getdata_cert := { class := mw_class_01, class := mw_class_01, ins := e_getData, ins := e_putDataWithDataBytes, //'da'O, params := { params := { p1 := '00000001'B, // values for Certificate reference ID p1 := '00001111'B, p2 := '11110001'B p2 := ? }, }, lengthC := ?, lengthC := *, payload := { payload := { genericData := { genericData := { data := omit data := v_failCode } } }, }, lengthE := 0 lengthE := omit } } // TEMPLATES m_get_data_MRZ template CommandGetData mw_getData_cert := { template CommandGeneric mw_getdata_mrz := { class := mw_class_01, class := mw_class_01, ins := e_getData, ins := e_getData, params := { params := { p1 := '00000001'B, p1 := c_aisGetDataP1, p2 := '11110010'B p2 := c_aisGetDataP2CertificateRef }, }, lengthC := *, lengthC := omit, payload := *, payload := omit, lengthE := 0 lengthE := 256 } // TEMPLATES m_setdata_cert template (value) Response m_setdata_cert := { // to be change later by defining a real function to provide certificate to the IS !!! responseData := omit, w1w2 := '9999'O // ??? } } // TEMPLATES m_start template CommandGetData mw_getData_mrz := { template (value) Response m_setdata_mrz := { class := mw_class_01, responseData := m_responseData(char2oct("bleu")), // to be change later by providing real data !!! ins := e_getData, w1w2 := c_w1w2NormalProcessing params := { p1 := c_aisGetDataP1, p2 := c_aisGetDataP2OpticalMrz }, lengthC := omit, payload := omit, lengthE := 256 } } template (value) ResponseData m_responseData( template (value) PlainTextResponseData m_opticalMrz(in octetstring p_mrzLine1, in octetstring p_mrzLine2) template (value) PlainTextResponseData p_responseData) := { := c_aisMrzLine1Tag & int2oct(lengthof(p_mrzLine1), 1) & p_mrzLine1 plainText := p_responseData & c_aisMrzLine2Tag & int2oct(lengthof(p_mrzLine2), 1) & p_mrzLine2; } } // end automaticTestInterface } // end automaticTestInterface Loading Loading @@ -104,27 +92,6 @@ module ePassport_Templates { } } } } group managementTemplates { // TEMPLATES mw_report template CommandGeneric mw_report(template Oct2 v_failCode) := { class := mw_class_01, ins := e_putDataWithDataBytes, //'da'O, params := { p1 := '00001111'B, p2 := ? }, lengthC := *, payload := { genericData := { data := v_failCode } }, lengthE := omit } } // end managementTemplates group commandTemplates { group commandTemplates { //SELECT TEMPLATES : Send APDU to the passport 00 a4 04 0c 07 a0 00 00 02 47 10 01 //SELECT TEMPLATES : Send APDU to the passport 00 a4 04 0c 07 a0 00 00 02 47 10 01 Loading
ePassport/ttcn/ePassport_TestSystem.ttcn +2 −1 Original line number Original line Diff line number Diff line Loading @@ -62,6 +62,7 @@ module ePassport_TestSystem { Chr dst optional, Chr dst optional, Chr at optional, Chr at optional, octetstring challenge optional, octetstring challenge optional, octetstring mrz optional, octetstring documentNumber optional, octetstring documentNumber optional, octetstring isDhPublicKeyHash optional, octetstring isDhPublicKeyHash optional, Loading Loading @@ -127,7 +128,7 @@ group portDefs { }; }; type port MgmtPort message { type port MgmtPort message { in CommandGeneric; in CommandGetData, CommandPutDataWith; out Response; out Response; }; }; Loading
ePassport/ttcn/ePassport_Testcases.ttcn +108 −72 File changed.Preview size limit exceeded, changes collapsed. Show changes