Commit ab6c10e7 authored by garciay's avatar garciay
Browse files

Security support in the TA

parent 884779af
Loading
Loading
Loading
Loading
+48 −0
Original line number Diff line number Diff line
@@ -763,6 +763,54 @@ module TestCodec_CAM {
                
      }
            
      /**
       * @desc Generate CAM according to the CAM port settings
       * @verdict Pass on success, Fail otherwise
       */
      testcase tc_Cam_Port_1() runs on ItsCam system ItsCamSystem {
        var CamReq v_camReq;
        timer tc_send := 0.5;
        
        if (PX_GN_UPPER_LAYER != e_btpB) {
          log("PX_GN_UPPER_LAYER shall be set to e_btpB");
          stop;
        }
        
        map(self:camPort, system:camPort);
        
        v_camReq := valueof(
                            CamReq : { msgOut := m_camMsg(
                                                          f_getTsStationId(),
                                                          f_getCurrentTime() mod 65536 // See ETSI EN 302 637-2 V1.3.0 - Clause B.3 generationDelatTime
                                                          )
                              }
                            );
        camPort.send(v_camReq);
        tc_ac.start;
        tc_send.start
        alt {
          [] tc_send.timeout {
            v_camReq := valueof(
                                CamReq : { msgOut := m_camMsg(
                                                              f_getTsStationId(),
                                                              f_getCurrentTime() mod 65536 // See ETSI EN 302 637-2 V1.3.0 - Clause B.3 generationDelatTime
                                                              )
                                  }
                                );
            camPort.send(v_camReq);
            tc_send.start;
            repeat;
          }
          [] tc_ac.timeout {
            tc_send.stop;
            setverdict(pass);
          }
        }
                
        unmap(self:camPort, system:camPort);
                
      }
            
    } // End of group testCamPort 
        
  } // End of group LibItsCam_testCases
+33 −14
Original line number Diff line number Diff line
@@ -114,7 +114,7 @@ module TestCodec_ChainOfCertificates {
    
    // Store Private key in binary format
    fx_loadCertificates("/home/vagrant/tmp/Yann", "");
    fx_store_certificate("CERT_TEST_ROOT", v_chain_sec_info.ca.enc_cert, v_chain_sec_info.ca.private_key, v_chain_sec_info.ca.public_key_x, v_chain_sec_info.ca.public_key_y, v_chain_sec_info.ca.hashid8, v_chain_sec_info.ca.issuer);
    fx_store_certificate("CERT_TEST_A_ROOT", v_chain_sec_info.ca.enc_cert, v_chain_sec_info.ca.private_key, v_chain_sec_info.ca.public_key_x, v_chain_sec_info.ca.public_key_y, v_chain_sec_info.ca.hashid8, v_chain_sec_info.ca.issuer);
    fx_store_certificate("CERT_TS_A_AA", v_chain_sec_info.aa.enc_cert, v_chain_sec_info.aa.private_key, v_chain_sec_info.aa.public_key_x, v_chain_sec_info.aa.public_key_y, v_chain_sec_info.aa.hashid8, v_chain_sec_info.aa.issuer);
    fx_store_certificate("CERT_TS_A_AT", v_chain_sec_info.at.enc_cert, v_chain_sec_info.at.private_key, v_chain_sec_info.at.public_key_x, v_chain_sec_info.at.public_key_y, v_chain_sec_info.at.hashid8, v_chain_sec_info.at.issuer);
    
@@ -172,7 +172,9 @@ module TestCodec_ChainOfCertificates {
    // Generate CA certificate
    v_chain_sec_info.ca.cert := f_create_ca_certificate_brainpoolP256_1(v_chain_sec_info.ca);
    v_enc_msg := encvalue(v_chain_sec_info.ca.cert);
    v_chain_sec_info.ca.enc_cert := bit2oct(v_enc_msg);
    v_chain_sec_info.ca.hashid8 := f_HashedId8FromSha256(f_hashWithSha256(bit2oct(v_enc_msg)));
    v_chain_sec_info.ca.issuer := v_chain_sec_info.ca.hashid8;
    // Verify signature of CA certificate by itself
    v_enc_msg := encvalue(v_chain_sec_info.ca.cert.toBeSigned);
    if (f_verifyWithEcdsaBrainpoolp256WithSha256(
@@ -189,7 +191,9 @@ module TestCodec_ChainOfCertificates {
    // Generate AA certificate
    v_chain_sec_info.aa.cert := f_create_aa_certificate_brainpoolP256_1(v_chain_sec_info.ca, v_chain_sec_info.aa);
    v_enc_msg := encvalue(v_chain_sec_info.aa.cert);
    v_chain_sec_info.aa.enc_cert := bit2oct(v_enc_msg);
    v_chain_sec_info.aa.hashid8 := f_HashedId8FromSha256(f_hashWithSha256(bit2oct(v_enc_msg)));
    v_chain_sec_info.aa.issuer := v_chain_sec_info.ca.hashid8;
    // Verify signature of AA certificate by CA certificate
    v_enc_msg := encvalue(v_chain_sec_info.aa.cert.toBeSigned);
    if (f_verifyWithEcdsaBrainpoolp256WithSha256(
@@ -206,7 +210,9 @@ module TestCodec_ChainOfCertificates {
    // Generate AT certificate
    v_chain_sec_info.at.cert := f_create_at_certificate_brainpoolP256_1(v_chain_sec_info.aa, v_chain_sec_info.at);
    v_enc_msg := encvalue(v_chain_sec_info.at.cert);
    v_chain_sec_info.at.enc_cert := bit2oct(v_enc_msg);
    v_chain_sec_info.at.hashid8 := f_HashedId8FromSha256(f_hashWithSha256(bit2oct(v_enc_msg)));
    v_chain_sec_info.at.issuer := v_chain_sec_info.aa.hashid8;
    // Verify signature of AT certificate by AA certificate
    v_enc_msg := encvalue(v_chain_sec_info.at.cert.toBeSigned);
    if (f_verifyWithEcdsaBrainpoolp256WithSha256(
@@ -222,6 +228,12 @@ module TestCodec_ChainOfCertificates {

    log("tc_full_check_certificate_2: Final chain = ", v_chain_sec_info);
    
    // Store Private key in binary format
    fx_loadCertificates("/home/vagrant/tmp/Yann", "");
    fx_store_certificate("CERT_TEST_B_ROOT", v_chain_sec_info.ca.enc_cert, v_chain_sec_info.ca.private_key, v_chain_sec_info.ca.public_key_x, v_chain_sec_info.ca.public_key_y, v_chain_sec_info.ca.hashid8, v_chain_sec_info.ca.issuer);
    fx_store_certificate("CERT_TS_B_AA", v_chain_sec_info.aa.enc_cert, v_chain_sec_info.aa.private_key, v_chain_sec_info.aa.public_key_x, v_chain_sec_info.aa.public_key_y, v_chain_sec_info.aa.hashid8, v_chain_sec_info.aa.issuer);
    fx_store_certificate("CERT_TS_B_AT", v_chain_sec_info.at.enc_cert, v_chain_sec_info.at.private_key, v_chain_sec_info.at.public_key_x, v_chain_sec_info.at.public_key_y, v_chain_sec_info.at.hashid8, v_chain_sec_info.at.issuer);
    
    // Create a basic GeoNetworking message
  v_gnNonSecuredPacket := m_geoNwShbPacket(
                                           LongPosVector: {
@@ -241,12 +253,12 @@ module TestCodec_ChainOfCertificates {
                                           );
    // Build the secured message and sign it
  v_secured_data := f_build_and_sign_secured_message_brainpoolP256_1(v_gnNonSecuredPacket, v_chain_sec_info.at);
    //log("################", m_geoNwSecPdu(v_gnNonSecuredPacket, v_secured_data));
    //v_gnSecuredPacket := m_geoNwSecPdu(v_gnNonSecuredPacket, v_secured_data);
    //log("tc_full_check_certificate_1: Final GeoNetworking secured message: ", v_gnSecuredPacket);

    // Finalyse the GeoNetworking message
  v_gnSecuredPacket := m_geoNwSecPdu(v_gnNonSecuredPacket, v_secured_data);
    log("tc_full_check_certificate_2: Final GeoNetworking secured message: ", v_gnSecuredPacket);
    // Verify signature of Secured message by AT certificate
  v_enc_msg := encvalue(v_gnSecuredPacket.gnPacket.securedMsg.content.signedData.tbsData);
    // Verify signature of secured messagee by AT certificate
  v_enc_msg := encvalue(v_secured_data.content.signedData.tbsData);
    if (f_verifyWithEcdsaBrainpoolp256WithSha256(
                                                 bit2oct(v_enc_msg),
                                                 valueof(v_gnSecuredPacket.gnPacket.securedMsg.content.signedData.signature_.ecdsaBrainpoolP256r1Signature.rSig.x_only & v_gnSecuredPacket.gnPacket.securedMsg.content.signedData.signature_.ecdsaBrainpoolP256r1Signature.sSig),
@@ -258,10 +270,11 @@ module TestCodec_ChainOfCertificates {
      setverdict(pass);
    }

    // Finalyse the GeoNetworking message
    
    // TODO Create a chain of certificates
    
    // TODO Add encryption support
    
  } // End of testcase tc_full_check_certificate_2
  
  /**
@@ -276,7 +289,8 @@ module TestCodec_ChainOfCertificates {
    var HashAlgorithm v_self := sha256; // ETSI TS 103 097 V1.3.1 Clause 7.2.3 Root CA certificates Bullet 1
    var SequenceOfPsidSsp v_appPermissions := { // ETSI TS 102 965 Table A.1: ETSI ITS standardized ITS-AIDs
      valueof(m_appPermissions(36, { bitmapSsp := '830001'O })),
      valueof(m_appPermissions(37, { bitmapSsp := '830001'O }))
      valueof(m_appPermissions(37, { bitmapSsp := '830001'O })),
      valueof(m_appPermissions(38, { bitmapSsp := '830001'O }))
    };
    var SequenceOfPsidSspRange v_certIssuePermissions := { // ETSI TS 103 097 V1.3.1 Clause 7.2.3 Root CA certificates Bullet 3
      valueof(m_psidSspRange(1))
@@ -342,7 +356,8 @@ module TestCodec_ChainOfCertificates {
    var HashAlgorithm v_self := sha256; // ETSI TS 103 097 V1.3.1 Clause 7.2.3 Root CA certificates Bullet 1
    var SequenceOfPsidSsp v_appPermissions := { // ETSI TS 102 965 Table A.1: ETSI ITS standardized ITS-AIDs
      valueof(m_appPermissions(36, { bitmapSsp := '830001'O })),
      valueof(m_appPermissions(37, { bitmapSsp := '830001'O }))
      valueof(m_appPermissions(37, { bitmapSsp := '830001'O })),
      valueof(m_appPermissions(38, { bitmapSsp := '830001'O }))
    };
    var SequenceOfPsidSspRange v_certIssuePermissions := { // ETSI TS 103 097 V1.3.1 Clause 7.2.3 Root CA certificates Bullet 3
      valueof(m_psidSspRange(1))
@@ -408,7 +423,8 @@ module TestCodec_ChainOfCertificates {
    var charstring v_certId := "STF538 NistP256 AA Certificate"; // ETSI TS 103 097 V1.3.1 Clause 7.2.2 Enrolment credential #5
    var SequenceOfPsidSsp v_appPermissions := { // ETSI TS 102 965 Table A.1: ETSI ITS standardized ITS-AIDs
      valueof(m_appPermissions(36, { bitmapSsp := '830001'O })),
      valueof(m_appPermissions(37, { bitmapSsp := '830001'O }))
      valueof(m_appPermissions(37, { bitmapSsp := '830001'O })),
      valueof(m_appPermissions(38, { bitmapSsp := '830001'O }))
    };
    var Oct32 v_sig := int2oct(0, 32);
    var bitstring v_enc_msg := ''B;
@@ -470,7 +486,8 @@ module TestCodec_ChainOfCertificates {
    var charstring v_certId := "STF538 BrainpoolP256 AA Certificate"; // ETSI TS 103 097 V1.3.1 Clause 7.2.2 Enrolment credential #5
    var SequenceOfPsidSsp v_appPermissions := { // ETSI TS 102 965 Table A.1: ETSI ITS standardized ITS-AIDs
      valueof(m_appPermissions(36, { bitmapSsp := '830001'O })),
      valueof(m_appPermissions(37, { bitmapSsp := '830001'O }))
      valueof(m_appPermissions(37, { bitmapSsp := '830001'O })),
      valueof(m_appPermissions(38, { bitmapSsp := '830001'O }))
    };
    var Oct32 v_sig := int2oct(0, 32);
    var bitstring v_enc_msg := ''B;
@@ -532,7 +549,8 @@ module TestCodec_ChainOfCertificates {
    var charstring v_certId := "STF538 NistP256 AT Certificate"; // ETSI TS 103 097 V1.3.1 Clause 7.2.1 Authorization tickets #2
    var SequenceOfPsidSsp v_appPermissions := { // ETSI TS 102 965 Table A.1: ETSI ITS standardized ITS-AIDs
      valueof(m_appPermissions(36, { bitmapSsp := '830001'O })),
      valueof(m_appPermissions(37, { bitmapSsp := '830001'O }))
      valueof(m_appPermissions(37, { bitmapSsp := '830001'O })),
      valueof(m_appPermissions(38, { bitmapSsp := '830001'O }))
    };
    var Oct32 v_sig := int2oct(0, 32);
    var bitstring v_enc_msg := ''B;
@@ -595,7 +613,8 @@ module TestCodec_ChainOfCertificates {
    var charstring v_certId := "STF538 BrainpoolP256 AT Certificate"; // ETSI TS 103 097 V1.3.1 Clause 7.2.1 Authorization tickets #2
    var SequenceOfPsidSsp v_appPermissions := { // ETSI TS 102 965 Table A.1: ETSI ITS standardized ITS-AIDs
      valueof(m_appPermissions(36, { bitmapSsp := '830001'O })),
      valueof(m_appPermissions(37, { bitmapSsp := '830001'O }))
      valueof(m_appPermissions(37, { bitmapSsp := '830001'O })),
      valueof(m_appPermissions(38, { bitmapSsp := '830001'O }))
    };
    var Oct32 v_sig := int2oct(0, 32);
    var bitstring v_enc_msg := ''B;