/* * @author * * @version * 1.0 * @desc * * @remark * * @see * */ module TestCodec_Certificates { // LibCommon import from LibCommon_BasicTypesAndValues all; import from LibCommon_DataStrings all; // 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; // 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 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, 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 template (omit) PsidSsp m_appPermissions( in template (value) Psid p_psid, in template (omit) ServiceSpecificPermissions p_ssp := omit ) := { psid := p_psid, ssp := p_ssp } // 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 { 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; var HashedId8 v_sha256AndDigest; var bitstring v_encMsg; var integer v_res := 0; var bitstring v_expEncMsg := oct2bit('310020'O); // 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( m_issuerIdentifier_self(v_self), m_toBeSignedCertificate( { name := v_certId }, v_cracaId, v_crlSeries, 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 ))) ) ); // Encode it ==> Get octetstring log("Encode template ", valueof(v_cert)); v_encMsg := encvalue(v_cert); // 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