Loading ttcn/Common/LibItsCommon_Functions.ttcn +1 −1 Original line number Diff line number Diff line Loading @@ -153,7 +153,7 @@ module LibItsCommon_Functions { /** * @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; Loading ttcn/Security/LibItsSecurity_Functions.ttcn3 +42 −50 Original line number Diff line number Diff line Loading @@ -121,10 +121,29 @@ module LibItsSecurity_Functions { group hostSignatureHelpers { /** * @desc 2004/01/01 00:00:00 epoch in milliseconds */ const Time64 c_offsetGnTime := 1072915200; function f_prepareCertificates( in template (omit) charstring p_certificateName, out Certificate p_aaCertificate, 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 Loading Loading @@ -239,7 +258,6 @@ module LibItsSecurity_Functions { // Add mandatory header v_headerFields[k] := valueof(p_mandatoryHeaders[j]); k := k + 1; j := j + 1; } } // End of 'for' statement Loading Loading @@ -323,17 +341,9 @@ module LibItsSecurity_Functions { var HeaderField v_signerInfo; // Load certificates if required if (ispresent(p_certificateName) and (valueof(p_certificateName) != cc_taCertA)) { if (f_readCertificate(valueof(p_certificateName) & ".AA_CERT", v_aaCertificate) == false) { if (f_prepareCertificates(p_certificateName, v_aaCertificate, v_atCertificate) == 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) { // Prepare mandatory headers Loading Loading @@ -364,7 +374,7 @@ module LibItsSecurity_Functions { } v_mandatoryHeaders := { 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)) } } Loading Loading @@ -400,17 +410,9 @@ module LibItsSecurity_Functions { var HeaderField v_signerInfo; // Load certificates if required if (ispresent(p_certificateName) and (valueof(p_certificateName) != cc_taCertA)) { if (f_readCertificate(valueof(p_certificateName) & ".AA_CERT", v_aaCertificate) == false) { if (f_prepareCertificates(p_certificateName, v_aaCertificate, v_atCertificate) == 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 if (p_addMissingHeaders == true) { Loading Loading @@ -442,7 +444,7 @@ module LibItsSecurity_Functions { } v_mandatoryHeaders := { 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_its_aid(c_its_aid_DENM)) } Loading Loading @@ -480,17 +482,9 @@ module LibItsSecurity_Functions { var HeaderField v_signerInfo; // Load certificates if required if (ispresent(p_certificateName) and (valueof(p_certificateName) != cc_taCertA)) { if (f_readCertificate(valueof(p_certificateName) & ".AA_CERT", v_aaCertificate) == false) { return false; } if (f_readCertificate(valueof(p_certificateName) & ".AT_CERT", v_atCertificate) == false) { if (f_prepareCertificates(p_certificateName, v_aaCertificate, v_atCertificate) == false) { return false; } } else { v_aaCertificate := vc_aaCertificate; v_atCertificate := vc_atCertificate; } // Add additional headers if required if (p_addMissingHeaders == true) { Loading Loading @@ -522,7 +516,7 @@ module LibItsSecurity_Functions { } v_mandatoryHeaders := { 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)) } } Loading Loading @@ -584,9 +578,7 @@ module LibItsSecurity_Functions { in template (value) Certificate p_certificateToBeVerified, in template (value) Certificate p_issuingCertificate ) return boolean { var integer v_counter; for (v_counter := 0; v_counter < lengthof(p_issuingCertificate.subject_attributes); v_counter := v_counter + 1) { for (var integer 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) { return f_verifyCertificateSignatureWithPublicKey( p_certificateToBeVerified, Loading Loading @@ -618,7 +610,7 @@ module LibItsSecurity_Functions { var boolean v_result := false; var template (value) ToBeSignedSecuredMessage v_toBeSignedSecuredMessage; // log(">>> f_verifyGnSecuredMessageSignatureWithPublicKey: ", p_securedMessage); log(">>> f_verifyGnSecuredMessageSignatureWithPublicKey: ", p_securedMessage, p_publicKey); // Create SecuredMessage payload to be signed v_toBeSignedSecuredMessage := m_toBeSignedSecuredMessage( Loading @@ -626,13 +618,14 @@ module LibItsSecurity_Functions { p_securedMessage.payload_field, e_signature ); log("f_verifyGnSecuredMessageSignatureWithPublicKey: v_toBeSignedSecuredMessage=", 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 v_hash := fx_hashWithSha256(v_secPayload); // log("f_verifyGnSecuredMessageSignatureWithPublicKey: v_hash=", v_hash); log("f_verifyGnSecuredMessageSignatureWithPublicKey: v_hash=", v_hash); // Verify payload for (v_counter := 0; v_counter < lengthof(p_securedMessage.trailer_fields); v_counter := v_counter + 1) { Loading @@ -645,7 +638,7 @@ module LibItsSecurity_Functions { '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.s; // log("f_verifyGnSecuredMessageSignatureWithPublicKey: v_signedData=", v_signedData); log("f_verifyGnSecuredMessageSignatureWithPublicKey: v_signedData=", v_signedData); v_result := f_verifyWithEcdsaNistp256WithSha256( v_hash, v_signedData, Loading @@ -656,7 +649,7 @@ module LibItsSecurity_Functions { } } // End of 'for' statement // log("f_verifyGnSecuredMessageSignatureWithPublicKey: v_result=", v_result); log("f_verifyGnSecuredMessageSignatureWithPublicKey: v_result=", v_result); return v_result; } // End of function f_verifyCertificateSignatureWithPublicKey Loading @@ -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) { 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 (valueof(p_certificate.subject_attributes[v_counter].type_) == e_verification_key) { return f_verifyGnSecuredMessageSignatureWithPublicKey( p_securedMessage, p_certificate.subject_attributes[v_counter].attribute.key); Loading ttcn/Security/LibItsSecurity_TestSystem.ttcn3 +3 −2 Original line number Diff line number Diff line Loading @@ -21,8 +21,9 @@ module LibItsSecurity_TestSystem { type component ItsSecurityBaseComponent { // Certificates var Certificate vc_aaCertificate; var Certificate vc_atCertificate; var Certificate vc_aaCertificate; /** Test Adapter AT certificate */ var Certificate vc_atCertificate; /** Test Adapter AT certificate */ var Certificate vc_lastAtCertificateUsed; /** Last Test Adapter certificate used in 'f_buildGnSecuredXXX' functions */ // Private keys var Oct32 vc_signingPrivateKey; Loading ttcn/Security/LibItsSecurity_Templates.ttcn3 +1 −1 File changed.Contains only whitespace changes. Show changes Loading
ttcn/Common/LibItsCommon_Functions.ttcn +1 −1 Original line number Diff line number Diff line Loading @@ -153,7 +153,7 @@ module LibItsCommon_Functions { /** * @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; Loading
ttcn/Security/LibItsSecurity_Functions.ttcn3 +42 −50 Original line number Diff line number Diff line Loading @@ -121,10 +121,29 @@ module LibItsSecurity_Functions { group hostSignatureHelpers { /** * @desc 2004/01/01 00:00:00 epoch in milliseconds */ const Time64 c_offsetGnTime := 1072915200; function f_prepareCertificates( in template (omit) charstring p_certificateName, out Certificate p_aaCertificate, 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 Loading Loading @@ -239,7 +258,6 @@ module LibItsSecurity_Functions { // Add mandatory header v_headerFields[k] := valueof(p_mandatoryHeaders[j]); k := k + 1; j := j + 1; } } // End of 'for' statement Loading Loading @@ -323,17 +341,9 @@ module LibItsSecurity_Functions { var HeaderField v_signerInfo; // Load certificates if required if (ispresent(p_certificateName) and (valueof(p_certificateName) != cc_taCertA)) { if (f_readCertificate(valueof(p_certificateName) & ".AA_CERT", v_aaCertificate) == false) { if (f_prepareCertificates(p_certificateName, v_aaCertificate, v_atCertificate) == 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) { // Prepare mandatory headers Loading Loading @@ -364,7 +374,7 @@ module LibItsSecurity_Functions { } v_mandatoryHeaders := { 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)) } } Loading Loading @@ -400,17 +410,9 @@ module LibItsSecurity_Functions { var HeaderField v_signerInfo; // Load certificates if required if (ispresent(p_certificateName) and (valueof(p_certificateName) != cc_taCertA)) { if (f_readCertificate(valueof(p_certificateName) & ".AA_CERT", v_aaCertificate) == false) { if (f_prepareCertificates(p_certificateName, v_aaCertificate, v_atCertificate) == 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 if (p_addMissingHeaders == true) { Loading Loading @@ -442,7 +444,7 @@ module LibItsSecurity_Functions { } v_mandatoryHeaders := { 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_its_aid(c_its_aid_DENM)) } Loading Loading @@ -480,17 +482,9 @@ module LibItsSecurity_Functions { var HeaderField v_signerInfo; // Load certificates if required if (ispresent(p_certificateName) and (valueof(p_certificateName) != cc_taCertA)) { if (f_readCertificate(valueof(p_certificateName) & ".AA_CERT", v_aaCertificate) == false) { return false; } if (f_readCertificate(valueof(p_certificateName) & ".AT_CERT", v_atCertificate) == false) { if (f_prepareCertificates(p_certificateName, v_aaCertificate, v_atCertificate) == false) { return false; } } else { v_aaCertificate := vc_aaCertificate; v_atCertificate := vc_atCertificate; } // Add additional headers if required if (p_addMissingHeaders == true) { Loading Loading @@ -522,7 +516,7 @@ module LibItsSecurity_Functions { } v_mandatoryHeaders := { 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)) } } Loading Loading @@ -584,9 +578,7 @@ module LibItsSecurity_Functions { in template (value) Certificate p_certificateToBeVerified, in template (value) Certificate p_issuingCertificate ) return boolean { var integer v_counter; for (v_counter := 0; v_counter < lengthof(p_issuingCertificate.subject_attributes); v_counter := v_counter + 1) { for (var integer 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) { return f_verifyCertificateSignatureWithPublicKey( p_certificateToBeVerified, Loading Loading @@ -618,7 +610,7 @@ module LibItsSecurity_Functions { var boolean v_result := false; var template (value) ToBeSignedSecuredMessage v_toBeSignedSecuredMessage; // log(">>> f_verifyGnSecuredMessageSignatureWithPublicKey: ", p_securedMessage); log(">>> f_verifyGnSecuredMessageSignatureWithPublicKey: ", p_securedMessage, p_publicKey); // Create SecuredMessage payload to be signed v_toBeSignedSecuredMessage := m_toBeSignedSecuredMessage( Loading @@ -626,13 +618,14 @@ module LibItsSecurity_Functions { p_securedMessage.payload_field, e_signature ); log("f_verifyGnSecuredMessageSignatureWithPublicKey: v_toBeSignedSecuredMessage=", 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 v_hash := fx_hashWithSha256(v_secPayload); // log("f_verifyGnSecuredMessageSignatureWithPublicKey: v_hash=", v_hash); log("f_verifyGnSecuredMessageSignatureWithPublicKey: v_hash=", v_hash); // Verify payload for (v_counter := 0; v_counter < lengthof(p_securedMessage.trailer_fields); v_counter := v_counter + 1) { Loading @@ -645,7 +638,7 @@ module LibItsSecurity_Functions { '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.s; // log("f_verifyGnSecuredMessageSignatureWithPublicKey: v_signedData=", v_signedData); log("f_verifyGnSecuredMessageSignatureWithPublicKey: v_signedData=", v_signedData); v_result := f_verifyWithEcdsaNistp256WithSha256( v_hash, v_signedData, Loading @@ -656,7 +649,7 @@ module LibItsSecurity_Functions { } } // End of 'for' statement // log("f_verifyGnSecuredMessageSignatureWithPublicKey: v_result=", v_result); log("f_verifyGnSecuredMessageSignatureWithPublicKey: v_result=", v_result); return v_result; } // End of function f_verifyCertificateSignatureWithPublicKey Loading @@ -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) { 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 (valueof(p_certificate.subject_attributes[v_counter].type_) == e_verification_key) { return f_verifyGnSecuredMessageSignatureWithPublicKey( p_securedMessage, p_certificate.subject_attributes[v_counter].attribute.key); Loading
ttcn/Security/LibItsSecurity_TestSystem.ttcn3 +3 −2 Original line number Diff line number Diff line Loading @@ -21,8 +21,9 @@ module LibItsSecurity_TestSystem { type component ItsSecurityBaseComponent { // Certificates var Certificate vc_aaCertificate; var Certificate vc_atCertificate; var Certificate vc_aaCertificate; /** Test Adapter AT certificate */ var Certificate vc_atCertificate; /** Test Adapter AT certificate */ var Certificate vc_lastAtCertificateUsed; /** Last Test Adapter certificate used in 'f_buildGnSecuredXXX' functions */ // Private keys var Oct32 vc_signingPrivateKey; Loading
ttcn/Security/LibItsSecurity_Templates.ttcn3 +1 −1 File changed.Contains only whitespace changes. Show changes