Commit f6f03a62 authored by garciay's avatar garciay
Browse files

STF538: Finalize CAM TP implementation

parent 3e0f4357
Loading
Loading
Loading
Loading
+118 −55
Original line number Original line Diff line number Diff line
@@ -1188,14 +1188,14 @@ module LibItsSecurity_Functions {
            } // End of function f_verifyCertificateSignatureWithIssuingCertificate
            } // End of function f_verifyCertificateSignatureWithIssuingCertificate
            
            
            /**
            /**
            * @desc Verify the signature of the provided secured message
             * @desc Verify the signature of the provided secured message for ECDSA Nist-P256 algorithm
             * @param p_securedMessage  The message to be verified
             * @param p_securedMessage  The message to be verified
             * @param p_publicKey       The ECDSA public key to verify a signature
             * @param p_publicKey       The ECDSA public key to verify a signature
             * @param p_certificate     EtsiTs103097Certificate to be used to verify the message
             * @param p_certificate     EtsiTs103097Certificate to be used to verify the message
             * @return true on success, false otherwise
             * @return true on success, false otherwise
            * @verdict
             * @verdict Unchanged
             */
             */
            function f_verifyGnSecuredMessageSignatureWithPublicKey(
            function f_verifyGnSecuredMessageSignature_ecdsaNistP256(
                                                                     in template (value) Ieee1609Dot2Data p_securedMessage,
                                                                     in template (value) Ieee1609Dot2Data p_securedMessage,
                                                                     in template (value) EccP256CurvePoint p_publicKey
                                                                     in template (value) EccP256CurvePoint p_publicKey
            ) return boolean {
            ) return boolean {
@@ -1203,51 +1203,118 @@ module LibItsSecurity_Functions {
                // Local variables
                // Local variables
                var octetstring v_secPayload;
                var octetstring v_secPayload;
                var octetstring v_signedData;
                var octetstring v_signedData;
// FIXME (DF) UNUSED
//                var Oct32 v_hash;
                var integer v_counter;
                var boolean v_result := false;
                var boolean v_result := false;
                var template (value) ToBeSignedData v_toBeSignedData;
                var template (value) ToBeSignedData v_toBeSignedData;
                
                
//                log(">>> f_verifyGnSecuredMessageSignatureWithPublicKey: p_securedMessage= ", p_securedMessage);
                log(">>> f_verifyGnSecuredMessageSignature_ecdsaNistP256: p_securedMessage= ", p_securedMessage);
//                log(">>> f_verifyGnSecuredMessageSignatureWithPublicKey: p_publicKey= ", p_publicKey);
                log(">>> f_verifyGnSecuredMessageSignature_ecdsaNistP256: p_publicKey= ", p_publicKey);
                
                
                // Create Ieee1609Dot2Data payload to be signed
                // Create Ieee1609Dot2Data payload to be signed
                /* FIXME To be reviewed v_toBeSignedData := m_toBeSignedSecuredMessage(
                v_toBeSignedData := valueof(p_securedMessage.content.signedData.tbsData);
                    valueof(p_securedMessage.header_fields),
                log("f_verifyGnSecuredMessageSignature_ecdsaNistP256: v_toBeSignedData=", p_securedMessage.content.signedData.tbsData);
                    valueof(p_securedMessage.payload_field),
                    e_signature
                );
                log("f_verifyGnSecuredMessageSignatureWithPublicKey: v_toBeSignedData=", v_toBeSignedData);
                
                
                v_secPayload := bit2oct(encvalue(v_toBeSignedData));
                v_secPayload := bit2oct(encvalue(v_toBeSignedData));
                log("f_verifyGnSecuredMessageSignatureWithPublicKey: v_secPayload=", v_secPayload);
                log("f_verifyGnSecuredMessageSignature_ecdsaNistP256: v_secPayload=", v_secPayload);
                
                
                // Verify payload
                // Verify payload
                for (v_counter := 0; v_counter < lengthof(p_securedMessage.trailer_fields); v_counter := v_counter + 1) {
                v_signedData := valueof(p_securedMessage.content.signedData.signature_.ecdsaNistP256Signature.rSig.x_only) & valueof(p_securedMessage.content.signedData.signature_.ecdsaNistP256Signature.sSig);
                    var Ieee1609Dot2Data v_securedMessage := valueof(p_securedMessage);
                log("f_verifyGnSecuredMessageSignature_ecdsaNistP256: v_signedData=", v_signedData);
                    if (
                        (v_securedMessage.trailer_fields[v_counter].type_ == e_signature) and
                        (v_securedMessage.trailer_fields[v_counter].trailerField.signature_.algorithm == e_ecdsa_nistp256_with_sha256)
                    ) {
                        v_signedData :=
                        '0000'O &
                        v_securedMessage.trailer_fields[v_counter].trailerField.signature_.ecdsaNistP256Signature.rSig &
                        v_securedMessage.trailer_fields[v_counter].trailerField.signature_.ecdsaNistP256Signature.sSig;
                        log("f_verifyGnSecuredMessageSignatureWithPublicKey: v_signedData=", v_signedData);
                v_result := f_verifyWithEcdsaNistp256WithSha256(
                v_result := f_verifyWithEcdsaNistp256WithSha256(
                    v_secPayload, 
                    v_secPayload, 
                    v_signedData,
                    v_signedData,
                    valueof(p_publicKey.uncompressedP256.x),
                    valueof(p_publicKey.uncompressedP256.x),
                    valueof(p_publicKey.uncompressedP256.y)
                    valueof(p_publicKey.uncompressedP256.y)
                );
                );
                        break;
                    }
                }*/ // End of 'for' statement
                
                
                log("f_verifyGnSecuredMessageSignatureWithPublicKey: v_result=", v_result);
                log("f_verifyGnSecuredMessageSignature_ecdsaNistP256: v_result=", v_result);
                return v_result;
                return v_result;
            } // End of function f_verifyCertificateSignatureWithPublicKey
            } // End of function f_verifyGnSecuredMessageSignature_ecdsaNistP256
            
            /**
             * @desc Verify the signature of the provided secured message for ECDSA Brainpool-P256 algorithm
             * @param p_securedMessage  The message to be verified
             * @param p_publicKey       The ECDSA public key to verify a signature
             * @param p_certificate     EtsiTs103097Certificate to be used to verify the message
             * @return true on success, false otherwise
             * @verdict Unchanged
             */
            function f_verifyGnSecuredMessageSignature_ecdsaBrainpoolP256r1(
                                                                            in template (value) Ieee1609Dot2Data p_securedMessage,
                                                                            in template (value) EccP256CurvePoint p_publicKey
            ) return boolean {
                
                // Local variables
                var octetstring v_secPayload;
                var octetstring v_signedData;
                var boolean v_result := false;
                var template (value) ToBeSignedData v_toBeSignedData;
                
                log(">>> f_verifyGnSecuredMessageSignature_ecdsaBrainpoolP256r1: p_securedMessage= ", p_securedMessage);
                log(">>> f_verifyGnSecuredMessageSignature_ecdsaBrainpoolP256r1: p_publicKey= ", p_publicKey);
                
                // Create Ieee1609Dot2Data payload to be signed
                v_toBeSignedData := valueof(p_securedMessage.content.signedData.tbsData);
                log("f_verifyGnSecuredMessageSignature_ecdsaBrainpoolP256r1: v_toBeSignedData=", p_securedMessage.content.signedData.tbsData);
                
                v_secPayload := bit2oct(encvalue(v_toBeSignedData));
                log("f_verifyGnSecuredMessageSignature_ecdsaBrainpoolP256r1: v_secPayload=", v_secPayload);
                
                // Verify payload
                v_signedData := valueof(p_securedMessage.content.signedData.signature_.ecdsaBrainpoolP256r1Signature.rSig.x_only) & valueof(p_securedMessage.content.signedData.signature_.ecdsaBrainpoolP256r1Signature.sSig);
                log("f_verifyGnSecuredMessageSignature_ecdsaBrainpoolP256r1: v_signedData=", v_signedData);
                v_result := f_verifyWithEcdsaBrainpoolp256WithSha256(
                    v_secPayload, 
                    v_signedData,
                    valueof(p_publicKey.uncompressedP256.x),
                    valueof(p_publicKey.uncompressedP256.y)
                );
                
                log("f_verifyGnSecuredMessageSignature_ecdsaBrainpoolP256r1: v_result=", v_result);
                return v_result;
            } // End of function f_verifyGnSecuredMessageSignature_ecdsaBrainpoolP256r1
            
            /**
             * @desc Verify the signature of the provided secured message for ECDSA Brainpool-P384 algorithm
             * @param p_securedMessage  The message to be verified
             * @param p_publicKey       The ECDSA public key to verify a signature
             * @param p_certificate     EtsiTs103097Certificate to be used to verify the message
             * @return true on success, false otherwise
             * @verdict Unchanged
             */
            function f_verifyGnSecuredMessageSignature_ecdsaBrainpoolP384r1(
                                                                            in template (value) Ieee1609Dot2Data p_securedMessage,
                                                                            in template (value) EccP384CurvePoint p_publicKey
            ) return boolean {
                
                // Local variables
                var octetstring v_secPayload;
                var octetstring v_signedData;
                var boolean v_result := false;
                var template (value) ToBeSignedData v_toBeSignedData;
                
                log(">>> f_verifyGnSecuredMessageSignature_ecdsaBrainpoolP384r1: p_securedMessage= ", p_securedMessage);
                log(">>> f_verifyGnSecuredMessageSignature_ecdsaBrainpoolP384r1: p_publicKey= ", p_publicKey);
                
                // Create Ieee1609Dot2Data payload to be signed
                v_toBeSignedData := valueof(p_securedMessage.content.signedData.tbsData);
                log("f_verifyGnSecuredMessageSignature_ecdsaBrainpoolP384r1: v_toBeSignedData=", p_securedMessage.content.signedData.tbsData);
                
                v_secPayload := bit2oct(encvalue(v_toBeSignedData));
                log("f_verifyGnSecuredMessageSignature_ecdsaBrainpoolP384r1: v_secPayload=", v_secPayload);
                
                // Verify payload
                v_signedData := valueof(p_securedMessage.content.signedData.signature_.ecdsaBrainpoolP384r1Signature.rSig.x_only) & valueof(p_securedMessage.content.signedData.signature_.ecdsaBrainpoolP384r1Signature.sSig);
                log("f_verifyGnSecuredMessageSignature_ecdsaBrainpoolP384r1: v_signedData=", v_signedData);
                v_result := f_verifyWithEcdsaBrainpoolp256WithSha256(
                    v_secPayload, 
                    v_signedData,
                    valueof(p_publicKey.uncompressedP384.x),
                    valueof(p_publicKey.uncompressedP384.y)
                );
                
                log("f_verifyGnSecuredMessageSignature_ecdsaBrainpoolP384r1: v_result=", v_result);
                return v_result;
            } // End of function f_verifyGnSecuredMessageSignature_ecdsaBrainpoolP384r1
            
            
            /**
            /**
            * @desc Verify the signature of the provided secured message
            * @desc Verify the signature of the provided secured message
@@ -1261,18 +1328,15 @@ module LibItsSecurity_Functions {
                                                                      in template (value) EtsiTs103097Certificate p_certificate
                                                                      in template (value) EtsiTs103097Certificate p_certificate
            ) return boolean {
            ) return boolean {
                
                
                /* FIXME To be reviewed for (var integer v_counter := 0; v_counter < lengthof(p_certificate.subject_attributes); v_counter := v_counter + 1) {
                if (ischosen(p_securedMessage.content.signedData.signature_.ecdsaBrainpoolP256r1Signature)) {
                    var SubjectAttribute v_subjectAttribute := valueof(p_certificate.subject_attributes[v_counter]);
                    return f_verifyGnSecuredMessageSignature_ecdsaBrainpoolP256r1(p_securedMessage, p_certificate.toBeSigned.verifyKeyIndicator.verificationKey.ecdsaBrainpoolP256r1);
                    
                } else if (ischosen(p_securedMessage.content.signedData.signature_.ecdsaBrainpoolP384r1Signature)) {
                    log("f_verifyGnSecuredMessageSignatureWithCertificate: processing ", v_subjectAttribute);
                    return f_verifyGnSecuredMessageSignature_ecdsaBrainpoolP384r1(p_securedMessage, p_certificate.toBeSigned.verifyKeyIndicator.verificationKey.ecdsaBrainpoolP384r1);
                    if (v_subjectAttribute.type_ == e_verification_key) {
                } else if (ischosen(p_securedMessage.content.signedData.signature_.ecdsaNistP256Signature)) {
                        return f_verifyGnSecuredMessageSignatureWithPublicKey(
                    return f_verifyGnSecuredMessageSignature_ecdsaNistP256(p_securedMessage, p_certificate.toBeSigned.verifyKeyIndicator.verificationKey.ecdsaNistP256);
                            p_securedMessage,
                            valueof(p_certificate.subject_attributes[v_counter].attribute.key));
                }
                }
                }*/ // End of 'for' statement
                
                
                return false;
                return true;
            } // End of function f_verifyGnSecuredOtherMessageWithDeviceCertificate
            } // End of function f_verifyGnSecuredOtherMessageWithDeviceCertificate
            
            
        } // End of group deviceSignatureHelpers
        } // End of group deviceSignatureHelpers
@@ -1287,7 +1351,6 @@ module LibItsSecurity_Functions {
            */
            */
            function f_getMsgHeaderInfo(
            function f_getMsgHeaderInfo(
                                        in template(omit) Ieee1609Dot2Data p_securedMessage,
                                        in template(omit) Ieee1609Dot2Data p_securedMessage,
                                        in HeaderInfo p_headerInfo,
                                        out HeaderInfo p_return
                                        out HeaderInfo p_return
            ) return boolean {
            ) return boolean {
                var integer v_length;
                var integer v_length;
+22 −2
Original line number Original line Diff line number Diff line
@@ -712,6 +712,16 @@ module LibItsSecurity_Templates {
            unsecuredData := p_unsecuredData 
            unsecuredData := p_unsecuredData 
        } // End of template m_ieee1609Dot2Data_unsecured
        } // End of template m_ieee1609Dot2Data_unsecured
        
        
        /**
         * @desc Receive template for 'unsecured' Payload 
         * @see Draft ETSI TS 103 097 V1.3.1 Clause 5.2 Payload
         */
        template (present) Ieee1609Dot2Content mw_ieee1609Dot2Data_unsecured(
                                                                             template (present) Opaque p_unsecuredData := ?
        ) := {
            unsecuredData := p_unsecuredData 
        } // End of template mw_ieee1609Dot2Data_unsecured
        
        /**
        /**
         * @desc Send template for 'signed' Payload 
         * @desc Send template for 'signed' Payload 
         * @see Draft ETSI TS 103 097 V1.3.1 Clause 5.2 Payload
         * @see Draft ETSI TS 103 097 V1.3.1 Clause 5.2 Payload
@@ -722,6 +732,16 @@ module LibItsSecurity_Templates {
            signedData := p_signedData
            signedData := p_signedData
        } // End of template m_ieee1609Dot2Data_signed
        } // End of template m_ieee1609Dot2Data_signed
        
        
        /**
         * @desc Send template for 'signed' Payload 
         * @see Draft ETSI TS 103 097 V1.3.1 Clause 5.2 Payload
         */
        template (present) Ieee1609Dot2Content mw_ieee1609Dot2Data_signed(
                                                                          template (present) SignedData p_signedData := ?
        ) := {
            signedData := p_signedData
        } // End of template mw_ieee1609Dot2Data_signed
        
    } // End of group ieee1609Dot2Data
    } // End of group ieee1609Dot2Data
    
    
    /**
    /**
@@ -880,8 +900,8 @@ module LibItsSecurity_Templates {
        } // End of template m_ecdsaP256Signature
        } // End of template m_ecdsaP256Signature
        
        
        template (present) EcdsaP256Signature mw_ecdsaP256Signature(
        template (present) EcdsaP256Signature mw_ecdsaP256Signature(
                                                                    template (present) EccP256CurvePoint p_rSig,
                                                                    template (present) EccP256CurvePoint p_rSig := ?,
                                                                    template (present) Oct32 p_sSig
                                                                    template (present) Oct32 p_sSig := ?
        ) := {
        ) := {
            rSig := p_rSig,
            rSig := p_rSig,
            sSig := p_sSig
            sSig := p_sSig
+0 −1
Original line number Original line Diff line number Diff line
@@ -242,7 +242,6 @@ module LibItsSecurity_TypesAndValues {
    
    
    type enumerated SignAlgorithm {
    type enumerated SignAlgorithm {
        e_nistp_256,
        e_nistp_256,
        e_nistp_384,
        e_brainpool_256,
        e_brainpool_256,
        e_brainpool_384
        e_brainpool_384
    }
    }