TestCodec_Pki.ttcn 12.7 KB
Newer Older
garciay's avatar
garciay committed
/*
 * @author
 *     
 * @version
 *     1.0
 * @desc
 *     
 * @remark
 *     
 * @see
 *     
 */ 
module TestCodec_Pki {
  
  // Libcommon
  import from LibCommon_Time all;
  import from LibCommon_VerdictControl all;
  import from LibCommon_Sync all;
  import from LibCommon_BasicTypesAndValues all;
  
  // LibIts
  import from IEEE1609dot2BaseTypes language "ASN.1:1997" all;
  import from IEEE1609dot2 language "ASN.1:1997" all;
  import from EtsiTs102941BaseTypes language "ASN.1:1997" all;
  import from EtsiTs102941TypesEnrolment language "ASN.1:1997" all;
  import from EtsiTs102941MessagesItss language "ASN.1:1997" all;
  import from EtsiTs103097Module language "ASN.1:1997" all;
  
  // LibItsCommon
  import from LibItsCommon_TypesAndValues all;
  import from LibItsCommon_Functions all;
  import from LibItsCommon_TypesAndValues all;
  import from LibItsCommon_ASN1_NamedNumbers all;
  
  // LibItsGeoNetworking
  import from LibItsGeoNetworking_TypesAndValues all;
  import from LibItsGeoNetworking_Functions all;
  import from LibItsGeoNetworking_Templates all;
  
  // LibItsSecurity
  import from LibItsSecurity_TypesAndValues all;
  import from LibItsSecurity_Templates all;
  import from LibItsSecurity_Functions all;
  
  // LibItsPki
  import from LibItsPki_Templates all;
  
  // TestCodec
  import from TestCodec_TestAndSystem all;
  
  testcase tc_inner_ec_request_1() runs on TCType system TCType {
    var bitstring v_encMsg;
    var integer v_res := 0;
    var bitstring v_expEncMsg := oct2bit('340010'O);
    var EtsiTs103097Certificate v_certificate;
    var InnerEcRequest v_innerEcRequest;
    
    f_readCertificate("CERT_IUT_F_AT", v_certificate);
    v_innerEcRequest := valueof(m_innerEcRequest(
                                                 "TODO",
                                                 m_publicKeys(
                                                              v_certificate.toBeSigned.verifyKeyIndicator.verificationKey,
                                                              v_certificate.toBeSigned.encryptionKey
                                                              ),
                                                 m_certificateSubjectAttributes(
                                                                                v_certificate.toBeSigned.appPermissions,
                                                                                v_certificate.toBeSigned.validityPeriod,
                                                                                v_certificate.toBeSigned.region,
                                                                                v_certificate.toBeSigned.assuranceLevel
                                                 )));
    // Encode template
    log("Encode template ", v_innerEcRequest);
    v_encMsg := encvalue(v_innerEcRequest);
    log("Encoded message:  ", bit2oct(v_encMsg));
    // Check result
    if (not isbound(v_encMsg)) {
      setverdict(fail, "Encoding failed!");
      stop;
    }
    if (not match(v_encMsg, v_expEncMsg)) {
      log("Expected message: ", bit2oct(valueof(v_expEncMsg)));
      setverdict(fail, "Encoding failed, not the expected result!");
      stop;
    }
    setverdict(pass, "Encoding passed.");
  } // End of testcase tc_inner_ec_request_1
  
  testcase tc_inner_ec_response_1() runs on TCType system TCType {
    var bitstring v_encMsg;
    var integer v_res := 0;
    var bitstring v_expEncMsg := oct2bit('340010'O);
    var EtsiTs103097Certificate v_certificate;
    var InnerEcResponse v_innerEcResponse;
    
    f_readCertificate("CERT_IUT_F_AT", v_certificate);
    v_innerEcResponse := valueof(m_innerEcResponse_ok(
                                                      int2oct(10, 16),
                                                      v_certificate
                                                   ));
    // Encode template
    log("Encode template ", v_innerEcResponse);
    v_encMsg := encvalue(v_innerEcResponse);
    log("Encoded message:  ", bit2oct(v_encMsg));
    // Check result
    if (not isbound(v_encMsg)) {
      setverdict(fail, "Encoding failed!");
      stop;
    }
    if (not match(v_encMsg, v_expEncMsg)) {
      log("Expected message: ", bit2oct(valueof(v_expEncMsg)));
      setverdict(fail, "Encoding failed, not the expected result!");
      stop;
    }
    setverdict(pass, "Encoding passed.");
  } // End of testcase tc_inner_ec_response_1
  
  testcase tc_inner_ec_request_2() runs on TCType system TCType {
    var template (value) EtsiTs103097Data v_signed_data;
    var EtsiTs103097Data v_signed_data_dec;
    var template (value) EtsiTs103097Data v_encrypted_data;
    var EtsiTs103097Data v_encrypted_data_dec;
    var EtsiTs103097Certificate v_certificate;
    var InnerEcRequest v_innerEcRequest;
    var bitstring v_encMsg;
    var integer v_res := 0;
    var bitstring v_expEncMsg := oct2bit('340010'O);
    var octetstring v_raw_payload_to_be_signed;
    var HashedId8 v_digest := '0000000000000000'O;
    var HashedId8 v_encrypted_hashedId8 := '0000000000000000'O;
    
    f_readCertificate("CERT_IUT_F_AT", v_certificate);
    v_innerEcRequest := valueof(m_innerEcRequest(
                                                 "TODO",
                                                 m_publicKeys(
                                                              v_certificate.toBeSigned.verifyKeyIndicator.verificationKey,
                                                              v_certificate.toBeSigned.encryptionKey
                                                              ),
                                                 m_certificateSubjectAttributes(
                                                                                v_certificate.toBeSigned.appPermissions,
                                                                                v_certificate.toBeSigned.validityPeriod,
                                                                                v_certificate.toBeSigned.region,
                                                                                v_certificate.toBeSigned.assuranceLevel
                                                 )));
    // Encode template
    v_raw_payload_to_be_signed := bit2oct(encvalue(v_innerEcRequest));
    log("Encode InnerEcRequest template ", v_raw_payload_to_be_signed);
        
    // Signed data
    v_signed_data := m_etsiTs103097Data_signed(
                                              m_signedData(
                                                           sha256,
                                                           m_toBeSignedData(
                                                                    m_signedDataPayload(
                                                                                        m_etsiTs103097Data_unsecured(v_raw_payload_to_be_signed)
                                                                                        ),
                                                                    m_headerInfo_gn(
                                                                                    -,
                                                                                    12345
                                                                                    )
                                                                    ),
                                                           { digest := v_digest },
                                                           m_signature_ecdsaNistP256(
                                                                                     m_ecdsaP256Signature(
                                                                                                          m_eccP256CurvePoint_x_only(
                                                                                                                                     '08B2030104020A0D010C0105C0F80BB1460239348D17405C1A845151D4061200'O
                                                                                                                                     ),
                                                                                                          '2617CF4E6B25097F03F502AD0C6F2F125974700D31A60FD1EF12040E4D8231AB'O
                                                                                                          )
                                                                                     )
                                                           )
                                              );
      
    log("v_signed_data = ", v_signed_data);
    v_encMsg := encvalue(valueof(v_signed_data));
    setverdict(pass, "Encoding passed.");
    if (decvalue(v_encMsg, v_signed_data_dec) != 0) {
      setverdict(fail);
      stop;
    } else if (not(match(valueof(v_signed_data), v_signed_data_dec))) {
      setverdict(fail);
      stop;
    }
    setverdict(pass, "Decoding passed.");
      
    v_encrypted_data := m_etsiTs103097Data_encrypted(
                                                     m_encryptedData(
                                                                     {
                                                                      m_recipientInfo_certRecipInfo(
                                                                                                    m_pKRecipientInfo(
                                                                                                                      v_encrypted_hashedId8,
                                                                                                                      m_encryptedDataEncryptionKey_eciesNistP256(
                                                                                                                                                                 m_evciesP256EncryptedKey(
                                                                                                                                                                                          m_eccP256CurvePoint_x_only(
                                                                                                                                                                                                                     '08B2030104020A0D010C0105C0F80BB1460239348D17405C1A845151D4061200'O
                                                                                                                                                                                                                    ),
                                                                                                                                                                                          '01020304050607080010203040506070'O,
                                                                                                                                                                                          '01020304050607080010203040506070'O
                                                                                                                                                                                         )
                                                                                                                                                                 )
                                                                                                                     )
                                                                                                   )
                                                                     },
                                                                     m_SymmetricCiphertext_aes128ccm(
                                                                                                     m_aesCcmCiphertext(
                                                                                                                        '0102030405060708090a0b0c'O,
                                                                                                                        bit2oct(v_encMsg)
                                                                                                     )
                                                                                                    )
                                                                    )
                                                    );
  v_encMsg := encvalue(valueof(v_encrypted_data));
    setverdict(pass, "Encoding passed.");
    if (decvalue(v_encMsg, v_encrypted_data_dec) != 0) {
      setverdict(fail);
      stop;
    } else if (not(match(valueof(v_encrypted_data), v_encrypted_data_dec))) {
      setverdict(fail);
      stop;
    }
    setverdict(pass, "Decoding passed.");
  } // End of testcase tc_inner_ec_request_2
  
} // End of module TestCodec_Pki