Commit e23b66a4 authored by garciay's avatar garciay
Browse files

Bug fixed on encryption for message authentication: ISO 7816-4 padding (ISO...

Bug fixed on encryption for message authentication: ISO 7816-4 padding (ISO 9797-1 scheme 2) required
parent b00ee6a8
Loading
Loading
Loading
Loading
+0 −3
Original line number Diff line number Diff line
@@ -415,9 +415,6 @@
    		// Prepare security elements
    		f_readFileData(c_fileMRZ, 0, -1, v_mrz);
    		f_deriveKeys(f_extractKseedFromMrz(v_mrz), vc_simu.kEnc, vc_simu.kMac);
    		
    		f_setKeysForSecureMessaging(vc_simu.kEnc & vc_simu.kMac);
    		
    	} // end f_initializeMRTD
    
    
+1 −1
Original line number Diff line number Diff line
@@ -93,7 +93,7 @@ module ePassport_Pixits {
	    /**
	     * @desc	Root directory to access to CFG.DFLT.PLAIN directories
	     */
	    modulepar charstring PXT_EPASSPORT_DATA_ROOT := "H:/FSCOM/STF400/ePassport/Helpers/ElementFilesImpl/ePassportData/";
	    modulepar charstring PXT_EPASSPORT_DATA_ROOT := "G:/FSCOM/STF400/trunk/Helpers/ElementFilesImpl/ePassportData/";
	} // End of group SystemAdapterSettings
} // end ePassport_Pixits
+63 −13
Original line number Diff line number Diff line
@@ -432,11 +432,25 @@ module ePassport_Testcases {
	group debug {

        testcase TC_Fake_For_Test() runs on MRTD system MRTD_System {
            var octetstring v_rndV1 := null;
            var octetstring v_rndV2 := null;
            var octetstring v_masterKey := null;
            var octetstring v_rndIcc := null;
            var octetstring v_rndIfd := null;
            var octetstring v_kIfd := null;
            var octetstring v_S := null;
            var octetstring v_encryptedIfd := null;
            var octetstring v_cmdData := null;
            var octetstring v_efid := null;
            var octetstring v_ksmac := null;
            var octetstring v_cksum := null;
            var octetstring v_result := null;

            template octetstring mw_kEnc := 'AB94FDECF2674FDFB9B391F85D7F76F2'O;
            template octetstring mw_kMac := '7962D9ECE03D1ACD4C76089DCE131543'O;
//            template octetstring mw_cksum1 := 'BF8B92D635FF24F8'O;
            template octetstring mw_S := '781723860C06C2264608F919887022120B795240CB7049B01C19B33E32804F0B'O;
            template octetstring mw_encryptedIfd := '72C29C2371CC9BDB65B779B8E8D37B29ECC154AA56A8799FAE2F498F76ED92F2'O;
            template octetstring mw_cksum := '5F1448EEA8AD90A7'O;
            template octetstring mw_cmdData := '72C29C2371CC9BDB65B779B8E8D37B29ECC154AA56A8799FAE2F498F76ED92F25F1448EEA8AD90A7'O;

            t_guard.start;

@@ -444,22 +458,58 @@ module ePassport_Testcases {
        	f_initializeMRTD("CFG.DFLT.PLAIN");
        	//f_initializeIS();

			log (vc_simu.kEnc);
			// Validate Kenc and Kmac
			log ("Kenc: ", vc_simu.kEnc);
			if (match(vc_simu.kEnc, mw_kEnc) == false) {
				setverdict(fail);
				stop;
			}
			log (vc_simu.kMac);
			log ("Kmac: ", vc_simu.kMac);
			if (match(vc_simu.kMac, mw_kMac) == false) {
				setverdict(fail);
				stop;
			}

			v_rndV1 := f_generateRandomOctetstring(8);
			log (v_rndV1);
			v_rndV2 := f_generateRandomOctetstring(8);
			log (v_rndV1);
			
			f_setKeysForSecureMessaging(vc_simu.kEnc & vc_simu.kMac);

			// Request an 8 byte random number from the MRTD’s chip
			v_rndIcc := '4608F91988702212'O;
			// Generate an 8 byte random and a 16 byte random
			v_rndIfd := f_generateRandomOctetstring(8);
			//log (v_rndIfd);
			v_kIfd := f_generateRandomOctetstring(16);
			//log (v_kIfd);
				// Force sample values
				log ("Force sample values");
				v_rndIfd := '781723860C06C226'O;
				v_kIfd := '0B795240CB7049B01C19B33E32804F0B'O;
			// Concatenate RND.IFD, RND.ICC and KIFD
			v_S := v_rndIfd & v_rndIcc & v_kIfd;
			//log ("S: ", v_S);
			if (match(v_S, mw_S) == false) {
				setverdict(fail);
				stop;
			}
			// Encrypt S with TDES key KENC as calculated in Annex E.2
			v_encryptedIfd := f_encrypt(f_build3DesKey(vc_simu.kEnc), v_S);
			log ("encryptedIfd: ", v_encryptedIfd);
			if (match(v_encryptedIfd, mw_encryptedIfd) == false) {
				setverdict(fail);
				stop;
			}
			// Compute MAC over EIFD with TDES key KMAC as calculated in Annex E.2
			v_cksum := fx_cryptographicChecksum(vc_simu.kMac, v_encryptedIfd);
			log ("cksum: ", v_cksum);
			if (match(v_cksum, mw_cksum) == false) {
				setverdict(fail);
				stop;
			}
			v_cmdData := v_encryptedIfd & v_cksum;
			log ("cmdData: ", v_cmdData);
			if (match(v_cmdData, mw_cmdData) == false) {
				setverdict(fail);
				stop;
			}
			setverdict(pass);

//        	t_wait.start;