Loading ePassport/ttcn/ePassport_Functions.ttcn +2 −2 Original line number Diff line number Diff line Loading @@ -72,7 +72,7 @@ /** * @desc Encrypt an octetstring using specified algorithm * @param p_algorithm Algorithm to be used for encryption * @param p_key encryption key * @param p_key encryption key (private key) * @param p_data Data block to be encrypted * @return Encrypted data */ Loading @@ -81,7 +81,7 @@ /** * @desc Decrypt an octetstring using specified algorithm * @param p_algorithm Algorithm to be used for decryption * @param p_key decryption key * @param p_key decryption key (public key) * @param p_data Data block to be encrypted * @return Encrypted data */ Loading ePassport/ttcn/ePassport_MainModule.ttcn +1 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ module ePassport_MainModule { execute(TC_LDS_F04()); execute(TC_LDS_H37()); execute(TC_Fake_For_Test()); execute(TC_Traveller_Jane()); execute(TC_checkBac()); } } Loading ePassport/ttcn/ePassport_Testcases.ttcn +114 −16 Original line number Diff line number Diff line Loading @@ -439,17 +439,18 @@ module ePassport_Testcases { 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; var octetstring v_retailMac := null; var octetstring v_encrypt := null; var octetstring v_RSAprivateKey_pk8 := '30820278020100300d06092a864886f70d0101010500048202623082025e02010002818100c29185aaffca8a03a5e341c2b947e7bd029ec3b01512b6f68c96a0a8b2fb98c33856bc40c6abeb407c0c1adf0528528acaccf868a9e9c729b56df5a44c0165b93569fe31d7a4bdd578ebafafd0def56e2777ffbdd0fc6d85f62c15481fd058fe70ec3ec562cb5af3bc67964129fd23fc8a8c1e8e9118cedd5714cce465f417cd0203010001028181009cb5bab474db7bf7de37c132862acd12a6369ba48a048dcadc8741953ebb7859dc59b7bc7087edadfd7b7e751c6152c228ff98202ca277603799fe1c3b7f709ea667b1094df6addbd4894c8c4a6a23205f7a3d92431e615397a8da6c46f40e9c69db929983f92f70afeb3b58002847b34a304f60ea7e396919b5ae9f65858641024100fd576d03834a89a3120375c077a349a2d7ceea8b033f7637325193d9ffb40b0282b01d7d73217b1192e560dda7752b97055540938e40bf43302bec32d05676f1024100c49c357c11652e142804b1d0db8fb633136e91a8753e9393427db1805aaf828040820d9850a5d16bf95e895a6ef0f100ab02e0f153992ed56d2a74b8875b869d02410083c778333d96062646f679c7d5f3a0180ebdd90eda6fa6646bce37644c383109eb4504f1fe7349fb08383cbccfa0893e134e173b29e1d01b78f13ff9e699336102403772e2b6a9e54238970cb3e57676b268f73b00c364c5903340d658201df34fb7c1f9abc1e044d3aa42fb017bcabc130c202ec0a7eeeecdc18d7722d20402b115024100e69fb2a929bf37c410bca5668d913fef23439ab4d68a30c3ab5381339da55a8b7f0f4f461f1049474306982a1e0d28dcdb88910c66f14b97d276c21af86a99c1'O; var octetstring v_RSApublibKey_pem := '2d2d2d2d2d424547494e205055424c4943204b45592d2d2d2d2d0a4d4947664d413047435371475349623344514542415155414134474e4144434269514b42675144436b5957712f38714b4136586a51634b35522b6539417037440a734255537476614d6c71436f73767559777a685776454447712b7441664177613377556f556f724b7a50686f71656e484b6256743961524d415757354e576e2b0a4d64656b7664563436362b76304e3731626964332f3733512f4732463969775653422f515750357737443746597374613837786e6c6b45702f535038696f77650a6a7045597a743158464d7a6b5a6651587a514944415141420a2d2d2d2d2d454e44205055424c4943204b45592d2d2d2d2d0a'O; template octetstring mw_kEnc := 'AB94FDECF2674FDFB9B391F85D7F76F2'O; // Used for CFG.DFLT.PLAIN template octetstring mw_kMac := '7962D9ECE03D1ACD4C76089DCE131543'O; // Used for CFG.DFLT.PLAIN template octetstring mw_S := '781723860C06C2264608F919887022120B795240CB7049B01C19B33E32804F0B'O; template octetstring mw_encryptedIfd := '72C29C2371CC9BDB65B779B8E8D37B29ECC154AA56A8799FAE2F498F76ED92F2'O; template octetstring mw_cksum := '5F1448EEA8AD90A7'O; template octetstring mw_retailMac := '5F1448EEA8AD90A7'O; template octetstring mw_cmdData := '72C29C2371CC9BDB65B779B8E8D37B29ECC154AA56A8799FAE2F498F76ED92F25F1448EEA8AD90A7'O; t_guard.start; Loading @@ -470,8 +471,6 @@ module ePassport_Testcases { stop; } 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 Loading @@ -498,18 +497,27 @@ module ePassport_Testcases { 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) { v_retailMac := fx_cryptographicChecksum(vc_simu.kMac, v_encryptedIfd); log ("cksum: ", v_retailMac); if (match(v_retailMac, mw_retailMac) == false) { setverdict(fail); stop; } v_cmdData := v_encryptedIfd & v_cksum; v_cmdData := v_encryptedIfd & v_retailMac; log ("cmdData: ", v_cmdData); if (match(v_cmdData, mw_cmdData) == false) { setverdict(fail); stop; } v_encrypt := fx_encrypt(e_rsa, v_RSAprivateKey_pk8, v_cmdData); log ("encrypt cmdData: ", v_encrypt); v_cmdData := fx_decrypt(e_rsa, v_RSApublibKey_pem, v_encrypt); log ("cmdData: ", v_cmdData); if (match(v_cmdData, mw_cmdData) == false) { setverdict(fail); stop; } setverdict(pass); // t_wait.start; Loading @@ -524,6 +532,96 @@ module ePassport_Testcases { t_guard.stop; } function f_adjustParityBits(in octetstring buffer) runs on MRTD return octetstring{ var integer ByteCounts[256] := { 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8 }; for (var integer i := 0; i < lengthof(buffer); i := i + 1) { var integer index := oct2int(buffer[i]); if ((ByteCounts[index] mod 2) == 0) { buffer[i] := buffer[i] xor4b '01'O; } } return buffer; } testcase TC_Traveller_Jane() runs on MRTD system MRTD_System { var octetstring v_rndIcc := 'd97920492edeb66c'O; var octetstring v_rndIfd := '822c4d3c6d0d073a'O; var octetstring v_kIfd := '822c4d3c6d0d073a28fb217fe17bded2'O; var octetstring v_S := null; var octetstring v_encryptedIfd := null; var octetstring v_cmdData := '3b21ce09bbf691c2368d8bcf78a299cbd567eff7783dcb19960384b8e6c288105ae2008107b84714'O; var octetstring v_retailMac := null; var octetstring v_encrypt := null; var octetstring v_cmdDataEnc := null; var octetstring v_RSAprivateKey_pk8 := '30820278020100300d06092a864886f70d0101010500048202623082025e02010002818100c29185aaffca8a03a5e341c2b947e7bd029ec3b01512b6f68c96a0a8b2fb98c33856bc40c6abeb407c0c1adf0528528acaccf868a9e9c729b56df5a44c0165b93569fe31d7a4bdd578ebafafd0def56e2777ffbdd0fc6d85f62c15481fd058fe70ec3ec562cb5af3bc67964129fd23fc8a8c1e8e9118cedd5714cce465f417cd0203010001028181009cb5bab474db7bf7de37c132862acd12a6369ba48a048dcadc8741953ebb7859dc59b7bc7087edadfd7b7e751c6152c228ff98202ca277603799fe1c3b7f709ea667b1094df6addbd4894c8c4a6a23205f7a3d92431e615397a8da6c46f40e9c69db929983f92f70afeb3b58002847b34a304f60ea7e396919b5ae9f65858641024100fd576d03834a89a3120375c077a349a2d7ceea8b033f7637325193d9ffb40b0282b01d7d73217b1192e560dda7752b97055540938e40bf43302bec32d05676f1024100c49c357c11652e142804b1d0db8fb633136e91a8753e9393427db1805aaf828040820d9850a5d16bf95e895a6ef0f100ab02e0f153992ed56d2a74b8875b869d02410083c778333d96062646f679c7d5f3a0180ebdd90eda6fa6646bce37644c383109eb4504f1fe7349fb08383cbccfa0893e134e173b29e1d01b78f13ff9e699336102403772e2b6a9e54238970cb3e57676b268f73b00c364c5903340d658201df34fb7c1f9abc1e044d3aa42fb017bcabc130c202ec0a7eeeecdc18d7722d20402b115024100e69fb2a929bf37c410bca5668d913fef23439ab4d68a30c3ab5381339da55a8b7f0f4f461f1049474306982a1e0d28dcdb88910c66f14b97d276c21af86a99c1'O; var octetstring v_RSApublibKey_pem := '2d2d2d2d2d424547494e205055424c4943204b45592d2d2d2d2d0a4d4947664d413047435371475349623344514542415155414134474e4144434269514b42675144436b5957712f38714b4136586a51634b35522b6539417037440a734255537476614d6c71436f73767559777a685776454447712b7441664177613377556f556f724b7a50686f71656e484b6256743961524d415757354e576e2b0a4d64656b7664563436362b76304e3731626964332f3733512f4732463969775653422f515750357737443746597374613837786e6c6b45702f535038696f77650a6a7045597a743158464d7a6b5a6651587a514944415141420a2d2d2d2d2d454e44205055424c4943204b45592d2d2d2d2d0a'O; template octetstring mw_kEnc := f_adjustParityBits('04aa91edf656c045221516afa54d3396'O); // Used for CFG.DFLT.EAC template octetstring mw_kMac := f_adjustParityBits('a3c946d447c4ea306b1b75ea87fe1270'O); // Used for CFG.DFLT.EAC template octetstring mw_S := '822c4d3c6d0d073ad97920492edeb66c822c4d3c6d0d073a28fb217fe17bded2'O; template octetstring mw_encryptedIfd := '3b21ce09bbf691c2368d8bcf78a299cbd567eff7783dcb19960384b8e6c28810'O; template octetstring mw_retailMac := '5ae2008107b84714'O; template octetstring mw_cmdDataEnc := '00820000283b21ce09bbf691c2368d8bcf78a299cbd567eff7783dcb19960384b8e6c288105ae2008107b8471400'O; f_initializeMRTD("CFG.DFLT.EAC"); // Validate Kenc and Kmac log ("Kenc: ", vc_simu.kEnc); if (match(vc_simu.kEnc, mw_kEnc) == false) { setverdict(fail); stop; } log ("Kmac: ", vc_simu.kMac); if (match(vc_simu.kMac, mw_kMac) == false) { setverdict(fail); stop; } 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_encrypt3Des(f_build3DesKey(vc_simu.kEnc), v_S); log ("encryptedIfd: ", v_encryptedIfd); if (match(v_encryptedIfd, mw_encryptedIfd) == false) { setverdict(fail); stop; } f_setKeysForSecureMessaging(vc_simu.kEnc & vc_simu.kMac); v_cmdDataEnc := fx_encrypt3Des(vc_simu.kEnc & vc_simu.kMac, v_cmdData); log ("cmdDataEnc: ", v_cmdDataEnc); if (match(v_cmdDataEnc, mw_cmdDataEnc) == false) { setverdict(fail); stop; } setverdict(pass); } testcase TC_checkBac() runs on MRTD system MRTD_System { var octetstring v_rndIcc := '4608F91988702212'O; Loading Loading
ePassport/ttcn/ePassport_Functions.ttcn +2 −2 Original line number Diff line number Diff line Loading @@ -72,7 +72,7 @@ /** * @desc Encrypt an octetstring using specified algorithm * @param p_algorithm Algorithm to be used for encryption * @param p_key encryption key * @param p_key encryption key (private key) * @param p_data Data block to be encrypted * @return Encrypted data */ Loading @@ -81,7 +81,7 @@ /** * @desc Decrypt an octetstring using specified algorithm * @param p_algorithm Algorithm to be used for decryption * @param p_key decryption key * @param p_key decryption key (public key) * @param p_data Data block to be encrypted * @return Encrypted data */ Loading
ePassport/ttcn/ePassport_MainModule.ttcn +1 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ module ePassport_MainModule { execute(TC_LDS_F04()); execute(TC_LDS_H37()); execute(TC_Fake_For_Test()); execute(TC_Traveller_Jane()); execute(TC_checkBac()); } } Loading
ePassport/ttcn/ePassport_Testcases.ttcn +114 −16 Original line number Diff line number Diff line Loading @@ -439,17 +439,18 @@ module ePassport_Testcases { 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; var octetstring v_retailMac := null; var octetstring v_encrypt := null; var octetstring v_RSAprivateKey_pk8 := '30820278020100300d06092a864886f70d0101010500048202623082025e02010002818100c29185aaffca8a03a5e341c2b947e7bd029ec3b01512b6f68c96a0a8b2fb98c33856bc40c6abeb407c0c1adf0528528acaccf868a9e9c729b56df5a44c0165b93569fe31d7a4bdd578ebafafd0def56e2777ffbdd0fc6d85f62c15481fd058fe70ec3ec562cb5af3bc67964129fd23fc8a8c1e8e9118cedd5714cce465f417cd0203010001028181009cb5bab474db7bf7de37c132862acd12a6369ba48a048dcadc8741953ebb7859dc59b7bc7087edadfd7b7e751c6152c228ff98202ca277603799fe1c3b7f709ea667b1094df6addbd4894c8c4a6a23205f7a3d92431e615397a8da6c46f40e9c69db929983f92f70afeb3b58002847b34a304f60ea7e396919b5ae9f65858641024100fd576d03834a89a3120375c077a349a2d7ceea8b033f7637325193d9ffb40b0282b01d7d73217b1192e560dda7752b97055540938e40bf43302bec32d05676f1024100c49c357c11652e142804b1d0db8fb633136e91a8753e9393427db1805aaf828040820d9850a5d16bf95e895a6ef0f100ab02e0f153992ed56d2a74b8875b869d02410083c778333d96062646f679c7d5f3a0180ebdd90eda6fa6646bce37644c383109eb4504f1fe7349fb08383cbccfa0893e134e173b29e1d01b78f13ff9e699336102403772e2b6a9e54238970cb3e57676b268f73b00c364c5903340d658201df34fb7c1f9abc1e044d3aa42fb017bcabc130c202ec0a7eeeecdc18d7722d20402b115024100e69fb2a929bf37c410bca5668d913fef23439ab4d68a30c3ab5381339da55a8b7f0f4f461f1049474306982a1e0d28dcdb88910c66f14b97d276c21af86a99c1'O; var octetstring v_RSApublibKey_pem := '2d2d2d2d2d424547494e205055424c4943204b45592d2d2d2d2d0a4d4947664d413047435371475349623344514542415155414134474e4144434269514b42675144436b5957712f38714b4136586a51634b35522b6539417037440a734255537476614d6c71436f73767559777a685776454447712b7441664177613377556f556f724b7a50686f71656e484b6256743961524d415757354e576e2b0a4d64656b7664563436362b76304e3731626964332f3733512f4732463969775653422f515750357737443746597374613837786e6c6b45702f535038696f77650a6a7045597a743158464d7a6b5a6651587a514944415141420a2d2d2d2d2d454e44205055424c4943204b45592d2d2d2d2d0a'O; template octetstring mw_kEnc := 'AB94FDECF2674FDFB9B391F85D7F76F2'O; // Used for CFG.DFLT.PLAIN template octetstring mw_kMac := '7962D9ECE03D1ACD4C76089DCE131543'O; // Used for CFG.DFLT.PLAIN template octetstring mw_S := '781723860C06C2264608F919887022120B795240CB7049B01C19B33E32804F0B'O; template octetstring mw_encryptedIfd := '72C29C2371CC9BDB65B779B8E8D37B29ECC154AA56A8799FAE2F498F76ED92F2'O; template octetstring mw_cksum := '5F1448EEA8AD90A7'O; template octetstring mw_retailMac := '5F1448EEA8AD90A7'O; template octetstring mw_cmdData := '72C29C2371CC9BDB65B779B8E8D37B29ECC154AA56A8799FAE2F498F76ED92F25F1448EEA8AD90A7'O; t_guard.start; Loading @@ -470,8 +471,6 @@ module ePassport_Testcases { stop; } 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 Loading @@ -498,18 +497,27 @@ module ePassport_Testcases { 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) { v_retailMac := fx_cryptographicChecksum(vc_simu.kMac, v_encryptedIfd); log ("cksum: ", v_retailMac); if (match(v_retailMac, mw_retailMac) == false) { setverdict(fail); stop; } v_cmdData := v_encryptedIfd & v_cksum; v_cmdData := v_encryptedIfd & v_retailMac; log ("cmdData: ", v_cmdData); if (match(v_cmdData, mw_cmdData) == false) { setverdict(fail); stop; } v_encrypt := fx_encrypt(e_rsa, v_RSAprivateKey_pk8, v_cmdData); log ("encrypt cmdData: ", v_encrypt); v_cmdData := fx_decrypt(e_rsa, v_RSApublibKey_pem, v_encrypt); log ("cmdData: ", v_cmdData); if (match(v_cmdData, mw_cmdData) == false) { setverdict(fail); stop; } setverdict(pass); // t_wait.start; Loading @@ -524,6 +532,96 @@ module ePassport_Testcases { t_guard.stop; } function f_adjustParityBits(in octetstring buffer) runs on MRTD return octetstring{ var integer ByteCounts[256] := { 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8 }; for (var integer i := 0; i < lengthof(buffer); i := i + 1) { var integer index := oct2int(buffer[i]); if ((ByteCounts[index] mod 2) == 0) { buffer[i] := buffer[i] xor4b '01'O; } } return buffer; } testcase TC_Traveller_Jane() runs on MRTD system MRTD_System { var octetstring v_rndIcc := 'd97920492edeb66c'O; var octetstring v_rndIfd := '822c4d3c6d0d073a'O; var octetstring v_kIfd := '822c4d3c6d0d073a28fb217fe17bded2'O; var octetstring v_S := null; var octetstring v_encryptedIfd := null; var octetstring v_cmdData := '3b21ce09bbf691c2368d8bcf78a299cbd567eff7783dcb19960384b8e6c288105ae2008107b84714'O; var octetstring v_retailMac := null; var octetstring v_encrypt := null; var octetstring v_cmdDataEnc := null; var octetstring v_RSAprivateKey_pk8 := '30820278020100300d06092a864886f70d0101010500048202623082025e02010002818100c29185aaffca8a03a5e341c2b947e7bd029ec3b01512b6f68c96a0a8b2fb98c33856bc40c6abeb407c0c1adf0528528acaccf868a9e9c729b56df5a44c0165b93569fe31d7a4bdd578ebafafd0def56e2777ffbdd0fc6d85f62c15481fd058fe70ec3ec562cb5af3bc67964129fd23fc8a8c1e8e9118cedd5714cce465f417cd0203010001028181009cb5bab474db7bf7de37c132862acd12a6369ba48a048dcadc8741953ebb7859dc59b7bc7087edadfd7b7e751c6152c228ff98202ca277603799fe1c3b7f709ea667b1094df6addbd4894c8c4a6a23205f7a3d92431e615397a8da6c46f40e9c69db929983f92f70afeb3b58002847b34a304f60ea7e396919b5ae9f65858641024100fd576d03834a89a3120375c077a349a2d7ceea8b033f7637325193d9ffb40b0282b01d7d73217b1192e560dda7752b97055540938e40bf43302bec32d05676f1024100c49c357c11652e142804b1d0db8fb633136e91a8753e9393427db1805aaf828040820d9850a5d16bf95e895a6ef0f100ab02e0f153992ed56d2a74b8875b869d02410083c778333d96062646f679c7d5f3a0180ebdd90eda6fa6646bce37644c383109eb4504f1fe7349fb08383cbccfa0893e134e173b29e1d01b78f13ff9e699336102403772e2b6a9e54238970cb3e57676b268f73b00c364c5903340d658201df34fb7c1f9abc1e044d3aa42fb017bcabc130c202ec0a7eeeecdc18d7722d20402b115024100e69fb2a929bf37c410bca5668d913fef23439ab4d68a30c3ab5381339da55a8b7f0f4f461f1049474306982a1e0d28dcdb88910c66f14b97d276c21af86a99c1'O; var octetstring v_RSApublibKey_pem := '2d2d2d2d2d424547494e205055424c4943204b45592d2d2d2d2d0a4d4947664d413047435371475349623344514542415155414134474e4144434269514b42675144436b5957712f38714b4136586a51634b35522b6539417037440a734255537476614d6c71436f73767559777a685776454447712b7441664177613377556f556f724b7a50686f71656e484b6256743961524d415757354e576e2b0a4d64656b7664563436362b76304e3731626964332f3733512f4732463969775653422f515750357737443746597374613837786e6c6b45702f535038696f77650a6a7045597a743158464d7a6b5a6651587a514944415141420a2d2d2d2d2d454e44205055424c4943204b45592d2d2d2d2d0a'O; template octetstring mw_kEnc := f_adjustParityBits('04aa91edf656c045221516afa54d3396'O); // Used for CFG.DFLT.EAC template octetstring mw_kMac := f_adjustParityBits('a3c946d447c4ea306b1b75ea87fe1270'O); // Used for CFG.DFLT.EAC template octetstring mw_S := '822c4d3c6d0d073ad97920492edeb66c822c4d3c6d0d073a28fb217fe17bded2'O; template octetstring mw_encryptedIfd := '3b21ce09bbf691c2368d8bcf78a299cbd567eff7783dcb19960384b8e6c28810'O; template octetstring mw_retailMac := '5ae2008107b84714'O; template octetstring mw_cmdDataEnc := '00820000283b21ce09bbf691c2368d8bcf78a299cbd567eff7783dcb19960384b8e6c288105ae2008107b8471400'O; f_initializeMRTD("CFG.DFLT.EAC"); // Validate Kenc and Kmac log ("Kenc: ", vc_simu.kEnc); if (match(vc_simu.kEnc, mw_kEnc) == false) { setverdict(fail); stop; } log ("Kmac: ", vc_simu.kMac); if (match(vc_simu.kMac, mw_kMac) == false) { setverdict(fail); stop; } 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_encrypt3Des(f_build3DesKey(vc_simu.kEnc), v_S); log ("encryptedIfd: ", v_encryptedIfd); if (match(v_encryptedIfd, mw_encryptedIfd) == false) { setverdict(fail); stop; } f_setKeysForSecureMessaging(vc_simu.kEnc & vc_simu.kMac); v_cmdDataEnc := fx_encrypt3Des(vc_simu.kEnc & vc_simu.kMac, v_cmdData); log ("cmdDataEnc: ", v_cmdDataEnc); if (match(v_cmdDataEnc, mw_cmdDataEnc) == false) { setverdict(fail); stop; } setverdict(pass); } testcase TC_checkBac() runs on MRTD system MRTD_System { var octetstring v_rndIcc := '4608F91988702212'O; Loading