TestCodec_Certificates.ttcn 11.8 KB
Newer Older
garciay's avatar
garciay committed
/*
 * @author
 *     
 * @version
 *     1.0
 * @desc
 *     
 * @remark
 *     
 * @see
 *     
 */ 
module TestCodec_Certificates {
  // LibCommon
  import from LibCommon_BasicTypesAndValues all;
  import from LibCommon_DataStrings all;
garciay's avatar
garciay committed
  
  // LibIts
  import from IEEE1609dot2BaseTypes language "ASN.1:1997" all;
  import from IEEE1609dot2 language "ASN.1:1997" all;
  import from EtsiTs103097Module language "ASN.1:1997" all;
  
  // LibItsSecurity
  import from LibItsSecurity_EncdecDeclarations all;
  
garciay's avatar
garciay committed
  // TestCodec
  import from TestCodec_TestAndSystem all;
  
  template (value) EtsiTs103097Certificate m_etsiTs103097Certificate(
                                                                     in template (value) IssuerIdentifier p_issuer,
                                                                     in template (value) ToBeSignedCertificate p_toBeSigned
  ) := {
    version     := 3,
    type_       := explicit,
    issuer      := p_issuer,
    toBeSigned  := p_toBeSigned,
    signature_  := omit
  } // End of template m_etsiTs103097Certificate
  
garciay's avatar
garciay committed
  template (value) IssuerIdentifier m_issuerIdentifier_self(
                                                            in template (value) HashAlgorithm p_self
  ) := {
    self_  := p_self
  } // End of template m_issuerIdentifier_self

  template (value) IssuerIdentifier m_issuerIdentifier_sha256AndDigest(
                                                                       in template (value) HashedId8 p_sha256AndDigest
  ) := {
    sha256AndDigest  := p_sha256AndDigest
  } // End of template m_issuerIdentifier_sha256AndDigest

  template (value) IssuerIdentifier m_issuerIdentifier_sha384AndDigest(
                                                                       in template (value) HashedId8 p_sha384AndDigest
  ) := {
    sha384AndDigest  := p_sha384AndDigest
  } // End of template m_issuerIdentifier_sha384AndDigest

  template (omit) ToBeSignedCertificate m_toBeSignedCertificate(
                                                                in template (value) CertificateId p_id,
                                                                in template (value) HashedId3 p_cracaId,
                                                                in template (value) CrlSeries p_crlSeries,
                                                                in template (value) SequenceOfPsidSsp p_appPermissions,
                                                                in template (value) SequenceOfPsidGroupPermissions p_certIssuePermissions,
                                                                in template (value) SequenceOfPsidGroupPermissions p_certRequestPermissions,
                                                                in template (value) VerificationKeyIndicator p_verifyKeyIndicator,
garciay's avatar
garciay committed
                                                                in template (omit) ValidityPeriod p_validityPeriod := omit,
                                                                in template (omit) GeographicRegion p_region := omit,
                                                                in template (omit) SubjectAssurance p_assuranceLevel := omit,
                                                                in template (omit) PublicEncryptionKey p_encryptionKey := omit
    ) := { 
    id                     := p_id,
    cracaId                := p_cracaId,
    crlSeries              := p_crlSeries,
    validityPeriod         := p_validityPeriod,
    region                 := p_region,
    assuranceLevel         := p_assuranceLevel,
    appPermissions         := p_appPermissions,
    certIssuePermissions   := p_certIssuePermissions,
    certRequestPermissions := p_certRequestPermissions, 
    canRequestRollover     := omit,
    encryptionKey          := p_encryptionKey,
    verifyKeyIndicator     := p_verifyKeyIndicator
  } // End of template m_toBeSignedCertificate

  template (value) ValidityPeriod m_validity_period(
                                                    in Time32 p_start_,
                                                    in Duration p_duration       
  ) := {
    start_    := p_start_,
    duration  := p_duration
  } // End of template m_validity_period
  
garciay's avatar
garciay committed
  template (omit) PsidSsp m_appPermissions(
                                           in template (value) Psid p_psid,
                                           in template (omit) ServiceSpecificPermissions p_ssp := omit
    ) := {
    psid   := p_psid,
    ssp    := p_ssp
garciay's avatar
garciay committed
  } // End of template m_appPermissions

  template (omit) PsidSspRange m_psidSspRange(
                                              in Psid p_psid,
                                              in template (omit) SspRange p_sspRange := omit
  ) := {
    psid        := p_psid,
    sspRange    := p_sspRange
  } // End of template m_psidSspRange

  template (value) PsidGroupPermissions m_PsidGroupPermissions(
                                                               in template (value) SubjectPermissions p_subjectPermissions,
                                                               in integer p_minChainLength := 1,
                                                               in integer p_chainLengthRange := 0, 
                                                               in EndEntityType p_eeType := oct2bit('00'O)
  ) := {
    subjectPermissions := p_subjectPermissions,
    minChainLength     := p_minChainLength,
    chainLengthRange   := p_chainLengthRange, 
    eeType             := p_eeType
  } // End of template m_PsidGroupPermissions

  template (value) SubjectPermissions m_subjectPermissions_explicit(
                                                                    in SequenceOfPsidSspRange p_certIssuePermissions
  ) := {
      explicit := p_certIssuePermissions
  } // End of template m_subjectPermissions_explicit
  
  template (value) VerificationKeyIndicator m_verificationKeyIndicator_verificationKey(
                                                                                       in template (value) PublicVerificationKey p_verificationKey
  ) := {
    verificationKey := p_verificationKey
  } // End of template m_verificationKeyIndicator_verificationKey
  
  template (value) VerificationKeyIndicator m_verificationKeyIndicator_reconstructionValue(
                                                                                       in template (value) EccP256CurvePoint p_reconstructionValue
  ) := {
    reconstructionValue := p_reconstructionValue
  } // End of template m_verificationKeyIndicator_reconstructionValue

  template (value) PublicVerificationKey m_publicVerificationKey_ecdsaNistP256(
                                                                               in template (value) EccP256CurvePoint p_ecdsaNistP256
  ) := { 
    ecdsaNistP256 := p_ecdsaNistP256
  } // End of template m_publicVerificationKey_ecdsaNistP256
  
  template (value) EccP256CurvePoint m_eccP256CurvePoint_compressed_y_0(
                                                                        in Oct32 p_compressed_y_0
  ) := {
    compressed_y_0 := p_compressed_y_0
  } // End of template m_eccP256CurvePoint_compressed_y_0

  testcase tc_certificate_1() runs on TCType system TCType {
garciay's avatar
garciay committed
      var template (value) EtsiTs103097Certificate v_cert; // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 1
      var charstring v_certId := "STF528 Root Certificate";
      var HashAlgorithm v_self := sha256; // ETSI TS 103 097 V1.3.1 Clause 7.2.3 Root CA certificates Bullet 1
      var HashedId3 v_cracaId := '000000'O; // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 2
      var CrlSeries v_crlSeries := 0; // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 3
      var SequenceOfPsidSsp v_appPermissions := { // ETSI TS 102 965 Table A.1: ETSI ITS standardized ITS-AIDs
                                                 valueof(m_appPermissions(36, { bitmapSsp := '001100110011'O })), 
                                                 valueof(m_appPermissions(37, { bitmapSsp := '001100110011'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)) // FIXME What is the content of certIssuePermissions?
      };
      var SequenceOfPsidSspRange v_certRequestPermissions := { // FIXME Could this componet be present? If yes, What is the content of certIssuePermissions?
          valueof(m_psidSspRange(2)) 
      };
      var Oct32 v_compressed_y_0 := '0000000000000000000000000000000000000000000000000000000000000000'O;
garciay's avatar
garciay committed
      var HashedId8 v_sha256AndDigest;
      var bitstring v_encMsg;
      var integer v_res := 0;
      var bitstring v_expEncMsg := oct2bit('310020'O);
garciay's avatar
garciay committed
      
      // Generate Private/Public keys
      var Oct32 private_key;
      //f_generate_keys_pair(private_key, v_compressed_y_0, "compressed-y-0");
      // Store Private key in binary format
      //f_save_key(private_key);
      // Fill Certificate template with the public key      
      v_cert := m_etsiTs103097Certificate(
garciay's avatar
garciay committed
                                          m_issuerIdentifier_self(v_self),
                                          m_toBeSignedCertificate(
garciay's avatar
garciay committed
                                                                  { name := v_certId },
                                                                  v_cracaId,
                                                                  v_crlSeries,
garciay's avatar
garciay committed
                                                                  v_appPermissions,
                                                                  { 
                                                                      m_PsidGroupPermissions(
                                                                                             m_subjectPermissions_explicit(
                                                                                                                           v_certIssuePermissions
                                                                                            ))
                                                                  },
                                                                  { 
                                                                      m_PsidGroupPermissions(
                                                                                             m_subjectPermissions_explicit(
                                                                                                                           v_certRequestPermissions
                                                                                            ))
                                                                  },
                                                                  m_verificationKeyIndicator_verificationKey(
                                                                                                             m_publicVerificationKey_ecdsaNistP256(
                                                                                                                                                   m_eccP256CurvePoint_compressed_y_0(
                                                                                                                                                                                      v_compressed_y_0
                                                                                                            )))
                                                                 )
                                         );
garciay's avatar
garciay committed
      // Encode it ==> Get octetstring
      log("Encode template ", valueof(v_cert));
      v_encMsg := encvalue(v_cert);
garciay's avatar
garciay committed
      // Update v_sha256AndDigest
      //f_hashWithSha256(bit2oct(v_encMsg));
      //f_HashedId8FromSha256();
      // Sign the certificate
      //f_signWithEcdsaNistp256WithSha256();
      
      setverdict(pass, "Encoding passed.");
   } // End of testcase tc_certificate_1
   
   control {
     execute(tc_certificate_1());
   }
   
} // End of module tc_certificate_1