Commit 6953349d authored by garciay's avatar garciay
Browse files

STF538: Start Encryption TPs implementation

        Start Certificate generation script
parent 7956a8a1
Loading
Loading
Loading
Loading
+67 −0
Original line number Diff line number Diff line
module ItsGenCert_Functions {
    
    // 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_Templates all;
    
    // AtsGenCert
    import from ItsGenCert_TypeAndValues all;
    import from ItsGenCert_Templates all;
    import from ItsGenCert_Pics all;
    
    function f_fill_certificate(
                                in certificate_params p_certificate_params,
                                inout certificate_details p_certificate_details
    ) return integer {
        p_certificate_details.certificate := valueof(
                                                 m_etsiTs103097Certificate(
                                                     m_issuerIdentifier_self(p_certificate_params.hash_algorithm),
                                                     m_toBeSignedCertificate(
                                                         { name := p_certificate_params.certificate_id },
                                                         m_verificationKeyIndicator_verificationKey(
                                                             m_publicVerificationKey_ecdsaNistP256(
                                                                 m_eccP256CurvePoint_uncompressed(
                                                                     p_certificate_details.public_key_x,
                                                                     p_certificate_details.public_key_y
                                                         ))),
                                                         p_certificate_params.validity_period,
                                                         p_certificate_params.region,
                                                         p_certificate_params.app_permissions
                                                 )));
        if (not(ispresent(p_certificate_params.issuing_permissions))) { // all required
            p_certificate_details.certificate.toBeSigned.certIssuePermissions := { valueof(m_psidGroupPermissions(m_subjectPermissions_all)) };
        } else {
            // TODO
        }
        
        log("p_certificate_details.certificate = ", p_certificate_details.certificate);
        
        return 0;
    } // End of function f_fill_certificate
    
    function f_finalyse_certificate(
                                    in certificate_params p_certificate_params,
                                    inout certificate_details p_certificate_details
    ) return integer {
        return -1;
    } // End of function f_finalyse_certificate
    
    function f_get_certificate_params(
                                      in charstring p_certificate_id,
                                      out certificate_params p_certificate_params
    ) return integer {
        for (var integer v_counter := 0; v_counter < lengthof(PICS_CERTFICATES); v_counter := v_counter + 1) {
          if (PICS_CERTFICATES[v_counter].certificate_id == p_certificate_id) {
            p_certificate_params := PICS_CERTFICATES[v_counter];
            return 0;
          }
        } // End of 'for' statement

      return -1;
    } // End of function f_get_certificate_params

} // End of module ItsGenCert_Functions 
+47 −0
Original line number Diff line number Diff line
/**
 *  @author   ETSI / STF481 / STF507 / STF517 / STF538
 *  @version  $URL$
 *            $Id$
 *  @desc     Module containing Pics for Security ATS
 *  @copyright   ETSI Copyright Notification
 *               No part may be reproduced except as authorized by written permission.
 *               The copyright and the foregoing restriction extend to reproduction in all media.
 *               All rights reserved.
 *
 */
module ItsGenCert_Pics {
    
    // 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_TypesAndValues all;
    import from ItsGenCert_TypeAndValues all;
    
    modulepar certificate_params_list PICS_CERTFICATES := { 
        { 
            "CERT_IUT_A_RCA",                                                   // certificate_id
            omit,                                                               // current_position
            { start_ := c_2018_01_01_gmt_paris, duration := c_six_months },     // validity_period
            omit,                                                               // app_permissions
            omit,                                                               // issuing_permissions
            sha256,                                                             // hash_algorithm
            e_nist_p256,                                                        // curve
            "CERT_IUT_A_RCA"                                                    // signed_by
        }, 
        { 
            "CERT_IUT_A_AA",                                                    // certificate_id
            omit,                                                               // current_position
            { start_ := c_2018_01_01_gmt_paris, duration := c_six_months },     // validity_period
            omit,                                                               // app_permissions
            omit,                                                               // issuing_permissions
            sha256,                                                             // hash_algorithm
            e_nist_p256,                                                        // curve
            "CERT_IUT_A_RCA"                                                    // signed_by
        }
 //       { cc_iutCert_B, sha256, '0000000000000000'O, '0000000000000000'O, { circularRegion := { center := {0, 0}, radius := 1000 } } } // CERT_IUT_B_AT
    }
    
} // End of module ItsGenCert_Pics 
+38 −0
Original line number Diff line number Diff line
module ItsGenCert_Templates {
    
    // 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_Templates all;
    
    // AtsGenCert
    import from ItsGenCert_TypeAndValues all;
    import from ItsGenCert_Pics all;
    
    template (omit) ToBeSignedCertificate m_toBeSignedCertificate(
                                                                  in template (value) CertificateId p_id,
                                                                  in template (value) VerificationKeyIndicator p_verifyKeyIndicator,
                                                                  in template (value) ValidityPeriod p_validityPeriod,
                                                                  in template (omit) GeographicRegion p_region := omit,
                                                                  in template (omit) SequenceOfPsidSsp p_appPermissions := omit,
                                                                  in template (omit) SubjectAssurance p_assuranceLevel := omit,
                                                                  in template (omit) PublicEncryptionKey p_encryptionKey := omit
    ) := { 
        id                     := p_id,
        cracaId                := '000000'O, // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 2
        crlSeries              := 0, // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 3
        validityPeriod         := p_validityPeriod,
        region                 := p_region,
        assuranceLevel         := p_assuranceLevel,
        appPermissions         := p_appPermissions,
        certIssuePermissions   := omit,
        certRequestPermissions := omit, 
        canRequestRollover     := omit,
        encryptionKey          := p_encryptionKey,
        verifyKeyIndicator     := p_verifyKeyIndicator
    } // End of template m_toBeSignedCertificate_aa
    
} // End of module ItsGenCert_Templates 
+8 −0
Original line number Diff line number Diff line
module ItsGenCert_TestSystem {
    
    // LibItsSecurity
    import from LibItsSecurity_TestSystem all;
    
    type component TCType extends ItsSecurityBaseComponent { }
    
} // End of module ItsGenCert_TestSystem
+57 −0
Original line number Diff line number Diff line
module ItsGenCert_TypeAndValues {
    
    // 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;
    
    const Time64 c_its_epoch := 1072911600000;
    /**
     * @desc Start date/time in milliseconds
     * @remark See https://www/epochconverter.com/
     */
    const Time32 c_2018_01_01_gmt_paris := 1514764800;
    const Time32 c_2020_01_01_gmt_paris := 1577836800;
    const Time32 c_2010_01_01_gmt_paris := 1262304000;
    /**
     * @desc Six months duration
     */
    const Duration c_six_months := { hours := 6 * 30 * 24 };
    /**
     * @desc One year duration
     */
    const Duration c_one_year := { years := 1 };
    
    /**
     * @desc This record contains, for each certificate, the parameters to generate it
     */
    type record certificate_params {
        charstring              certificate_id,
        GeographicRegion        region optional,
        ValidityPeriod          validity_period,
        SequenceOfPsidSsp       app_permissions optional,
        SequenceOfPsidSspRange  issuing_permissions optional,
        HashAlgorithm           hash_algorithm,
        Curve                   curve,
        charstring              signed_by
    } // End of type certificate_params
    type record of certificate_params certificate_params_list;
    
    type enumerated Curve {
      e_nist_p256,
      e_brainpool_p256,
      e_brainpool_p384
    } // End of type Curve
    
    type record certificate_details {
      EtsiTs103097Certificate   certificate,
      octetstring               enc_cert,
      octetstring               private_key,
      octetstring               public_key_x,
      octetstring               public_key_y,
      HashedId8                 hashid8,
      HashedId8                 issuer
    } // End of type certificate_details
    
} // End of module ItsGenCert_TypeAndValues
Loading