Commit 11e297de authored by garciay's avatar garciay
Browse files

Validate AtsSecurity/CAM test cases

parent 5ab845bf
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -153,7 +153,7 @@ module LibItsCommon_Functions {
        
        
        /**
        /**
         * @desc    This external function gets the current time
         * @desc    This external function gets the current time
         * @return  Timestamp - current time in Epoch format
         * @return  Timestamp - current time since 01/01/2014 in milliseconds
         */
         */
        external function fx_getCurrentTime() return TimestampIts;
        external function fx_getCurrentTime() return TimestampIts;
        
        
+42 −50
Original line number Original line Diff line number Diff line
@@ -121,10 +121,29 @@ module LibItsSecurity_Functions {
        
        
        group hostSignatureHelpers {
        group hostSignatureHelpers {
            
            
            /**
            function f_prepareCertificates(
             * @desc 2004/01/01 00:00:00 epoch in milliseconds
                                           in template (omit) charstring p_certificateName,
             */
                                           out Certificate p_aaCertificate,
            const Time64 c_offsetGnTime := 1072915200;
                                           out Certificate p_atCertificate
            ) runs on ItsSecurityBaseComponent return boolean {
                
                // Load certificates if required
                if (ispresent(p_certificateName) and (valueof(p_certificateName) != cc_taCertA)) {
                    if (f_readCertificate(valueof(p_certificateName) & ".AA_CERT", p_aaCertificate) == false) {
                        return false;
                    }
                    if (f_readCertificate(valueof(p_certificateName) & ".AT_CERT", p_atCertificate) == false) {
                        return false;
                    }
                } else {
                    p_aaCertificate := vc_aaCertificate;
                    p_atCertificate := vc_atCertificate;
                }
                // Store the certificte to build this message
                vc_lastAtCertificateUsed := p_atCertificate;
                
                return true;
            } // End of function f_prepareCertificates
            
            
            /**
            /**
            * @desc Build a template of a secured beacon to be used for the Test Adapter secured beaconing processing
            * @desc Build a template of a secured beacon to be used for the Test Adapter secured beaconing processing
@@ -239,7 +258,6 @@ module LibItsSecurity_Functions {
                            // Add mandatory header
                            // Add mandatory header
                            v_headerFields[k] := valueof(p_mandatoryHeaders[j]);
                            v_headerFields[k] := valueof(p_mandatoryHeaders[j]);
                            k := k + 1;
                            k := k + 1;
                            j := j + 1;
                        }
                        }
                    } // End of 'for' statement
                    } // End of 'for' statement
                        
                        
@@ -323,17 +341,9 @@ module LibItsSecurity_Functions {
                var HeaderField v_signerInfo;
                var HeaderField v_signerInfo;
                 
                 
                // Load certificates if required
                // Load certificates if required
                if (ispresent(p_certificateName) and (valueof(p_certificateName) != cc_taCertA)) {
                if (f_prepareCertificates(p_certificateName, v_aaCertificate, v_atCertificate) == false) {
                    if (f_readCertificate(valueof(p_certificateName) & ".AA_CERT", v_aaCertificate) == false) {
                    return false;
                    return false;
                }
                }
                    if (f_readCertificate(valueof(p_certificateName) & ".AT_CERT", v_atCertificate) == false) {
                        return false;
                    }
                } else {
                    v_aaCertificate := vc_aaCertificate;
                    v_atCertificate := vc_atCertificate;
                }
                
                
                if (p_addMissingHeaders == true) {
                if (p_addMissingHeaders == true) {
                    // Prepare mandatory headers
                    // Prepare mandatory headers
@@ -364,7 +374,7 @@ module LibItsSecurity_Functions {
                    }
                    }
                    v_mandatoryHeaders := {
                    v_mandatoryHeaders := {
                        v_signerInfo,
                        v_signerInfo,
                        valueof(m_header_field_generation_time(1000 * (f_getCurrentTime() - c_offsetGnTime))), // In us
                        valueof(m_header_field_generation_time(1000 * f_getCurrentTime())), // In us
                        valueof(m_header_field_its_aid(c_its_aid_CAM))
                        valueof(m_header_field_its_aid(c_its_aid_CAM))
                    }
                    }
                }
                }
@@ -400,17 +410,9 @@ module LibItsSecurity_Functions {
                var HeaderField v_signerInfo;
                var HeaderField v_signerInfo;
                 
                 
                // Load certificates if required
                // Load certificates if required
                if (ispresent(p_certificateName) and (valueof(p_certificateName) != cc_taCertA)) {
                if (f_prepareCertificates(p_certificateName, v_aaCertificate, v_atCertificate) == false) {
                    if (f_readCertificate(valueof(p_certificateName) & ".AA_CERT", v_aaCertificate) == false) {
                    return false;
                    return false;
                }
                }
                    if (f_readCertificate(valueof(p_certificateName) & ".AT_CERT", v_atCertificate) == false) {
                        return false;
                    }
                } else {
                    v_aaCertificate := vc_aaCertificate;
                    v_atCertificate := vc_atCertificate;
                }
                
                
                // Add additional headers if required
                // Add additional headers if required
                if (p_addMissingHeaders == true) {
                if (p_addMissingHeaders == true) {
@@ -442,7 +444,7 @@ module LibItsSecurity_Functions {
                    }
                    }
                    v_mandatoryHeaders := {
                    v_mandatoryHeaders := {
                        v_signerInfo,
                        v_signerInfo,
                        valueof(m_header_field_generation_time(1000 * (f_getCurrentTime() - c_offsetGnTime))), // In us
                        valueof(m_header_field_generation_time(1000 * f_getCurrentTime())), // In us
                        valueof(m_header_field_generation_location(p_threeDLocation)),
                        valueof(m_header_field_generation_location(p_threeDLocation)),
                        valueof(m_header_field_its_aid(c_its_aid_DENM))
                        valueof(m_header_field_its_aid(c_its_aid_DENM))
                    }
                    }
@@ -480,17 +482,9 @@ module LibItsSecurity_Functions {
                var HeaderField v_signerInfo;
                var HeaderField v_signerInfo;
                 
                 
                // Load certificates if required
                // Load certificates if required
                if (ispresent(p_certificateName) and (valueof(p_certificateName) != cc_taCertA)) {
                if (f_prepareCertificates(p_certificateName, v_aaCertificate, v_atCertificate) == false) {
                    if (f_readCertificate(valueof(p_certificateName) & ".AA_CERT", v_aaCertificate) == false) {
                        return false;
                    }
                    if (f_readCertificate(valueof(p_certificateName) & ".AT_CERT", v_atCertificate) == false) {
                    return false;
                    return false;
                }
                }
                } else {
                    v_aaCertificate := vc_aaCertificate;
                    v_atCertificate := vc_atCertificate;
                }
                
                
                // Add additional headers if required
                // Add additional headers if required
                if (p_addMissingHeaders == true) {
                if (p_addMissingHeaders == true) {
@@ -522,7 +516,7 @@ module LibItsSecurity_Functions {
                    }
                    }
                    v_mandatoryHeaders := {
                    v_mandatoryHeaders := {
                        v_signerInfo,
                        v_signerInfo,
                        valueof(m_header_field_generation_time(1000 * (f_getCurrentTime() - c_offsetGnTime))), // In us
                        valueof(m_header_field_generation_time(1000 * f_getCurrentTime())), // In us
                        valueof(m_header_field_generation_location(p_threeDLocation))
                        valueof(m_header_field_generation_location(p_threeDLocation))
                    }
                    }
                }
                }
@@ -584,9 +578,7 @@ module LibItsSecurity_Functions {
                                                                        in template (value) Certificate p_certificateToBeVerified,
                                                                        in template (value) Certificate p_certificateToBeVerified,
                                                                        in template (value) Certificate p_issuingCertificate
                                                                        in template (value) Certificate p_issuingCertificate
            ) return boolean {
            ) return boolean {
                var integer v_counter;
                for (var integer v_counter := 0; v_counter < lengthof(p_issuingCertificate.subject_attributes); v_counter := v_counter + 1) {
                
                for (v_counter := 0; v_counter < lengthof(p_issuingCertificate.subject_attributes); v_counter := v_counter + 1) {
                    if (valueof(p_issuingCertificate.subject_attributes[v_counter].type_) == e_verification_key) {
                    if (valueof(p_issuingCertificate.subject_attributes[v_counter].type_) == e_verification_key) {
                        return f_verifyCertificateSignatureWithPublicKey(
                        return f_verifyCertificateSignatureWithPublicKey(
                            p_certificateToBeVerified,
                            p_certificateToBeVerified,
@@ -618,7 +610,7 @@ module LibItsSecurity_Functions {
                var boolean v_result := false;
                var boolean v_result := false;
                var template (value) ToBeSignedSecuredMessage v_toBeSignedSecuredMessage;
                var template (value) ToBeSignedSecuredMessage v_toBeSignedSecuredMessage;
                
                
//                log(">>> f_verifyGnSecuredMessageSignatureWithPublicKey: ", p_securedMessage);
                log(">>> f_verifyGnSecuredMessageSignatureWithPublicKey: ", p_securedMessage, p_publicKey);
                
                
                // Create SecuredMessage payload to be signed
                // Create SecuredMessage payload to be signed
                v_toBeSignedSecuredMessage := m_toBeSignedSecuredMessage(
                v_toBeSignedSecuredMessage := m_toBeSignedSecuredMessage(
@@ -626,13 +618,14 @@ module LibItsSecurity_Functions {
                    p_securedMessage.payload_field,
                    p_securedMessage.payload_field,
                    e_signature
                    e_signature
                );
                );
                log("f_verifyGnSecuredMessageSignatureWithPublicKey: v_toBeSignedSecuredMessage=", v_toBeSignedSecuredMessage);
                
                
                v_secPayload := bit2oct(encvalue(v_toBeSignedSecuredMessage));
                v_secPayload := bit2oct(encvalue(v_toBeSignedSecuredMessage));
//                log("f_verifyGnSecuredMessageSignatureWithPublicKey: v_secPayload=", v_secPayload);
                log("f_verifyGnSecuredMessageSignatureWithPublicKey: v_secPayload=", v_secPayload);
                
                
                // Calculate the hash of the SecuredMessage payload to be signed
                // Calculate the hash of the SecuredMessage payload to be signed
                v_hash := fx_hashWithSha256(v_secPayload);
                v_hash := fx_hashWithSha256(v_secPayload);
//                log("f_verifyGnSecuredMessageSignatureWithPublicKey: v_hash=", v_hash);
                log("f_verifyGnSecuredMessageSignatureWithPublicKey: v_hash=", v_hash);
                
                
                // Verify payload
                // Verify payload
                for (v_counter := 0; v_counter < lengthof(p_securedMessage.trailer_fields); v_counter := v_counter + 1) {
                for (v_counter := 0; v_counter < lengthof(p_securedMessage.trailer_fields); v_counter := v_counter + 1) {
@@ -645,7 +638,7 @@ module LibItsSecurity_Functions {
                        '0000'O &
                        '0000'O &
                        v_securedMessage.trailer_fields[v_counter].trailerField.signature_.signature_.ecdsa_signature.r.x &
                        v_securedMessage.trailer_fields[v_counter].trailerField.signature_.signature_.ecdsa_signature.r.x &
                        v_securedMessage.trailer_fields[v_counter].trailerField.signature_.signature_.ecdsa_signature.s;
                        v_securedMessage.trailer_fields[v_counter].trailerField.signature_.signature_.ecdsa_signature.s;
//                        log("f_verifyGnSecuredMessageSignatureWithPublicKey: v_signedData=", v_signedData);
                        log("f_verifyGnSecuredMessageSignatureWithPublicKey: v_signedData=", v_signedData);
                        v_result := f_verifyWithEcdsaNistp256WithSha256(
                        v_result := f_verifyWithEcdsaNistp256WithSha256(
                            v_hash,
                            v_hash,
                            v_signedData,
                            v_signedData,
@@ -656,7 +649,7 @@ module LibItsSecurity_Functions {
                    }
                    }
                } // End of 'for' statement
                } // End of 'for' statement
                
                
//                log("f_verifyGnSecuredMessageSignatureWithPublicKey: v_result=", v_result);
                log("f_verifyGnSecuredMessageSignatureWithPublicKey: v_result=", v_result);
                return v_result;
                return v_result;
            } // End of function f_verifyCertificateSignatureWithPublicKey
            } // End of function f_verifyCertificateSignatureWithPublicKey
            
            
@@ -675,9 +668,8 @@ module LibItsSecurity_Functions {
                for (var integer v_counter := 0; v_counter < lengthof(p_certificate.subject_attributes); v_counter := v_counter + 1) {
                for (var integer v_counter := 0; v_counter < lengthof(p_certificate.subject_attributes); v_counter := v_counter + 1) {
                    var SubjectAttribute v_subjectAttribute := valueof(p_certificate.subject_attributes[v_counter]);
                    var SubjectAttribute v_subjectAttribute := valueof(p_certificate.subject_attributes[v_counter]);
                    
                    
//                    log("f_verifyGnSecuredMessageSignatureWithCertificate: processing ", v_subjectAttribute);
                    log("f_verifyGnSecuredMessageSignatureWithCertificate: processing ", v_subjectAttribute);
                    if (v_subjectAttribute.type_ == e_verification_key) {
                    if (v_subjectAttribute.type_ == e_verification_key) {
//                    if (valueof(p_certificate.subject_attributes[v_counter].type_) == e_verification_key) {
                        return f_verifyGnSecuredMessageSignatureWithPublicKey(
                        return f_verifyGnSecuredMessageSignatureWithPublicKey(
                            p_securedMessage,
                            p_securedMessage,
                            p_certificate.subject_attributes[v_counter].attribute.key);
                            p_certificate.subject_attributes[v_counter].attribute.key);
+3 −2
Original line number Original line Diff line number Diff line
@@ -21,8 +21,9 @@ module LibItsSecurity_TestSystem {
        type component ItsSecurityBaseComponent {
        type component ItsSecurityBaseComponent {
            
            
            // Certificates
            // Certificates
            var Certificate vc_aaCertificate;
            var Certificate vc_aaCertificate;           /** Test Adapter AT certificate */
            var Certificate vc_atCertificate;
            var Certificate vc_atCertificate;           /** Test Adapter AT certificate */
            var Certificate vc_lastAtCertificateUsed;   /** Last Test Adapter certificate used in 'f_buildGnSecuredXXX' functions */
            
            
            // Private keys
            // Private keys
            var Oct32 vc_signingPrivateKey; 
            var Oct32 vc_signingPrivateKey; 
+1 −1

File changed.

Contains only whitespace changes.