Commit a7a7fbaf authored by velez's avatar velez
Browse files

Changes made during Ispra session 2010

parent d3d2bae0
Loading
Loading
Loading
Loading
+23 −8
Original line number Diff line number Diff line
@@ -169,6 +169,7 @@
        	[] mrtdport.receive {
        		log("**** a_default: Error: Unexpected message received. ****");
        		mrtdport.send(m_responseNOK(c_w1w2InstructionCodeNotSupportedOrInvalid));
                f_cleanUp();
        		setverdict(inconc);
        		stop;	
        	}        	
@@ -219,7 +220,13 @@
                v_dataLength := v_readCommand.lengthE;
                
                v_result := f_readFileData(vc_simu.currentFiles[v_logicalChannel], v_offset, v_dataLength, v_data);

                if(v_data == ''O) {
                    mrtdport.send(m_responseNOK(c_w1w2WrongParametersP1P2));
                }
                else {
                	mrtdport.send(m_responseReadWithStatus(v_data, v_result));
                }
                t_ac.start; 
                repeat;         
            }
@@ -290,7 +297,7 @@
		// Start the MRTD Test sequence :  Standard Inspection Procedure (SIP)
    	altstep a_standardInspectionProcedure() runs on MRTD {
    	
    		[vc_simu.securityStatus == e_noApplication] a_waitApplication();
    		[/*vc_simu.securityStatus == e_noApplication*/] a_waitApplication();
    		
    		[vc_simu.securityStatus > e_noApplication 
    			and vc_simu.securityStatus < e_basicAccessControl] a_bac();
@@ -303,7 +310,7 @@
        // Start the MRTD Test sequence : Advanced Inspection Procedure (AIP) including EAC
        altstep a_advancedInspectionProcedure() runs on MRTD {
        	
        	[vc_simu.securityStatus == e_noApplication] a_waitApplication();
        	[/*vc_simu.securityStatus == e_noApplication*/] a_waitApplication();
    		
    		[vc_simu.securityStatus > e_noApplication 
    			and vc_simu.securityStatus < e_basicAccessControl] a_bac();
@@ -471,8 +478,14 @@
        altstep a_waitApplication () runs on MRTD {
    
    		[] mrtdport.receive(mw_selectApplication) {
    			mrtdport.send(m_responseOK);
    			
				vc_simu.securityStatus := e_noSecurity;
				
				// Restore basic access keys
                f_readFileData(c_fileMRZ, 0, -1, vc_simu.mrz);
                f_deriveKeys(f_extractKseedFromMrz(vc_simu.mrz), vc_simu.kEnc, vc_simu.kMac);

    			mrtdport.send(m_responseOK);
				t_ac.start;
				repeat;
    		}
@@ -501,8 +514,10 @@
        		// TODO check vc_simu.rndIcc != omit
        		
        		v_response := f_basicAccessControl(vc_simu.challenge, v_challengeResponse);
        		if(v_response != ''O) {
        			mrtdport.send(m_responseRead(v_response));
        			vc_simu.securityStatus := e_basicAccessControl;
        		}
        		t_ac.start;
				repeat;
    		}
+8 −3
Original line number Diff line number Diff line
@@ -418,7 +418,7 @@
			v_computedMacIfd := f_cryptographicChecksum(vc_simu.kMac, v_encryptedIfd);
			if(not match(v_computedMacIfd, v_macIfd)) {
			    log("CHECKSUM ERROR");
				//TODO
                mrtdport.send(m_responseNOK(c_w1w2NoPreciseDiagnosis));
				return ''O;
			}			
			
@@ -430,7 +430,7 @@
    		v_receivedRndIcc := substr(v_s, c_bacNonceSize, c_bacNonceSize); 
    		v_keyIfd := substr(v_s, 2*c_bacNonceSize, c_bacKeySize); 
    		if(not match(v_receivedRndIcc, p_rndIcc)) {
    			//TODO
                mrtdport.send(m_responseNOK(c_w1w2NoPreciseDiagnosis));
    			return ''O;
    		}
    		
@@ -519,6 +519,7 @@
			}			
			log(v_dg14PrFileInfo);
			f_readFileData(v_dg14PrFileInfo, 0, -1, v_dg14PrivateKey);
			// FIXME: check read file result and send 6A80 if file not found (means bad reference)
			v_algo := f_computeSharedSecret(v_dg14PrivateKey, p_publicKeyPcd, v_k);
								
			// b) The session keys KMAC and KEnc derived from K for Secure Messaging.
@@ -712,11 +713,15 @@
	    function f_cleanUp() runs on MRTD {
	    	
	    	// Dectivate antenna
	    	log("*** f_cleanUp: INFO: Before f_deactivateProbe() ***");
            f_deactivateProbe();
            log("*** f_cleanUp: INFO: After f_deactivateProbe() ***");	        

            // unmap ports
            unmap(self:mgmtport, system:system_mgmtPort);
            log("*** f_cleanUp: INFO: mgmtport unmapped ***");
            unmap(self:mrtdport, system:system_mrtdPort);
            log("*** f_cleanUp: INFO: mrtdport unmapped ***");
            
	        stop;
	        
+2 −0
Original line number Diff line number Diff line
@@ -28,7 +28,9 @@ module ePassport_Values {
		const W1W2Status c_w1w2ConditionsOfUseNotSatisfied := '6985'O;
		const W1W2Status c_w1w2NoCurrentEF := '6986'O;
		const W1W2Status c_w1w2ReferencedDataOrReferenceDataNotFound := '6A88'O;
		const W1W2Status c_w1w2WrongParametersP1P2 := '6B00'O;
		const W1W2Status c_w1w2InstructionCodeNotSupportedOrInvalid := '6D00'O;
		const W1W2Status c_w1w2NoPreciseDiagnosis := '6F00'O;
			
	} // end w1w2Constants