Преглед изворни кода

fix odr violations in amalgamated build

Tom Lötzsch пре 7 година
родитељ
комит
41403853e7

+ 2 - 0
CMakeLists.txt

@@ -441,6 +441,8 @@ if(UA_ENABLE_ENCRYPTION)
             ${PROJECT_SOURCE_DIR}/plugins/ua_securitypolicy_basic128rsa15.h)
     set(default_plugin_headers ${default_plugin_headers}
             ${PROJECT_SOURCE_DIR}/plugins/ua_securitypolicy_basic256sha256.h)
+    set(default_plugin_sources ${default_plugin_sources}
+            ${PROJECT_SOURCE_DIR}/plugins/ua_securitypolicy_common.c)
     set(default_plugin_sources ${default_plugin_sources}
             ${PROJECT_SOURCE_DIR}/plugins/ua_securitypolicy_basic128rsa15.c)
     set(default_plugin_sources ${default_plugin_sources}

+ 7 - 16
plugins/ua_securitypolicy_basic128rsa15.c

@@ -7,7 +7,6 @@
 
 #include <mbedtls/aes.h>
 #include <mbedtls/md.h>
-#include <mbedtls/sha1.h>
 #include <mbedtls/x509_crt.h>
 #include <mbedtls/ctr_drbg.h>
 #include <mbedtls/entropy.h>
@@ -16,6 +15,7 @@
 
 #include "ua_plugin_pki.h"
 #include "ua_plugin_securitypolicy.h"
+#include "ua_securitypolicy_common.h"
 #include "ua_securitypolicy_basic128rsa15.h"
 #include "ua_types.h"
 #include "ua_types_generated_handling.h"
@@ -77,15 +77,6 @@ typedef struct {
     mbedtls_x509_crt remoteCertificate;
 } Basic128Rsa15_ChannelContext;
 
-static void
-sha1(const unsigned char *input, size_t ilen, unsigned char output[20] ) {
-    mbedtls_sha1_context sha1Context;
-    mbedtls_sha1_init(&sha1Context);
-    mbedtls_sha1_starts(&sha1Context);
-    mbedtls_sha1_update(&sha1Context, input, ilen);
-    mbedtls_sha1_finish(&sha1Context, output);
-    mbedtls_sha1_free(&sha1Context);
-}
 
 /********************/
 /* AsymmetricModule */
@@ -258,8 +249,8 @@ asym_decrypt_sp_basic128rsa15(const UA_SecurityPolicy *securityPolicy,
 }
 
 static size_t
-asym_getRemoteEncryptionKeyLength(const UA_SecurityPolicy *securityPolicy,
-                                  const Basic128Rsa15_ChannelContext *cc) {
+asym_getRemoteEncryptionKeyLength_sp_basic128rsa15(const UA_SecurityPolicy *securityPolicy,
+                                                   const Basic128Rsa15_ChannelContext *cc) {
     return mbedtls_pk_get_len(&cc->remoteCertificate.pk) * 8;
 }
 
@@ -271,8 +262,8 @@ asym_getRemoteBlockSize_sp_basic128rsa15(const UA_SecurityPolicy *securityPolicy
 }
 
 static size_t
-asym_getRemotePlainTextBlockSize(const UA_SecurityPolicy *securityPolicy,
-                                 const Basic128Rsa15_ChannelContext *cc) {
+asym_getRemotePlainTextBlockSize_sp_basic128rsa15(const UA_SecurityPolicy *securityPolicy,
+                                                  const Basic128Rsa15_ChannelContext *cc) {
     mbedtls_rsa_context *const rsaContext = mbedtls_pk_rsa(cc->remoteCertificate.pk);
     return rsaContext->len - UA_SECURITYPOLICY_BASIC128RSA15_RSAPADDING_LEN;
 }
@@ -878,13 +869,13 @@ UA_SecurityPolicy_Basic128Rsa15(UA_SecurityPolicy *policy, UA_CertificateVerific
             asym_decrypt_sp_basic128rsa15;
     asym_encryptionAlgorithm->getLocalKeyLength = NULL; // TODO: Write function
     asym_encryptionAlgorithm->getRemoteKeyLength =
-        (size_t (*)(const UA_SecurityPolicy *, const void *))asym_getRemoteEncryptionKeyLength;
+        (size_t (*)(const UA_SecurityPolicy *, const void *))asym_getRemoteEncryptionKeyLength_sp_basic128rsa15;
     asym_encryptionAlgorithm->getLocalBlockSize = NULL; // TODO: Write function
     asym_encryptionAlgorithm->getRemoteBlockSize = (size_t (*)(const UA_SecurityPolicy *,
                                                                const void *))asym_getRemoteBlockSize_sp_basic128rsa15;
     asym_encryptionAlgorithm->getLocalPlainTextBlockSize = NULL; // TODO: Write function
     asym_encryptionAlgorithm->getRemotePlainTextBlockSize =
-        (size_t (*)(const UA_SecurityPolicy *, const void *))asym_getRemotePlainTextBlockSize;
+        (size_t (*)(const UA_SecurityPolicy *, const void *))asym_getRemotePlainTextBlockSize_sp_basic128rsa15;
 
     asymmetricModule->makeCertificateThumbprint = asym_makeThumbprint_sp_basic128rsa15;
     asymmetricModule->compareCertificateThumbprint =

+ 7 - 17
plugins/ua_securitypolicy_basic256sha256.c

@@ -8,7 +8,6 @@
 
 #include <mbedtls/aes.h>
 #include <mbedtls/md.h>
-#include <mbedtls/sha1.h>
 #include <mbedtls/sha256.h>
 #include <mbedtls/x509_crt.h>
 #include <mbedtls/ctr_drbg.h>
@@ -18,6 +17,7 @@
 
 #include "ua_plugin_pki.h"
 #include "ua_plugin_securitypolicy.h"
+#include "ua_securitypolicy_common.h"
 #include "ua_securitypolicy_basic256sha256.h"
 #include "ua_types.h"
 #include "ua_types_generated_handling.h"
@@ -80,16 +80,6 @@ typedef struct {
     mbedtls_x509_crt remoteCertificate;
 } Basic256Sha256_ChannelContext;
 
-static void
-sha1(const unsigned char *input, size_t ilen, unsigned char output[20] ) {
-    mbedtls_sha1_context sha1Context;
-    mbedtls_sha1_init(&sha1Context);
-    mbedtls_sha1_starts(&sha1Context);
-    mbedtls_sha1_update(&sha1Context, input, ilen);
-    mbedtls_sha1_finish(&sha1Context, output);
-    mbedtls_sha1_free(&sha1Context);
-}
-
 /********************/
 /* AsymmetricModule */
 /********************/
@@ -282,8 +272,8 @@ asym_decrypt_sp_basic256sha256(const UA_SecurityPolicy *securityPolicy,
 }
 
 static size_t
-asym_getRemoteEncryptionKeyLength(const UA_SecurityPolicy *securityPolicy,
-                                  const Basic256Sha256_ChannelContext *cc) {
+asym_getRemoteEncryptionKeyLength_sp_basic256sha256(const UA_SecurityPolicy *securityPolicy,
+                                                    const Basic256Sha256_ChannelContext *cc) {
     return mbedtls_pk_get_len(&cc->remoteCertificate.pk) * 8;
 }
 
@@ -295,8 +285,8 @@ asym_getRemoteBlockSize_sp_basic256sha256(const UA_SecurityPolicy *securityPolic
 }
 
 static size_t
-asym_getRemotePlainTextBlockSize(const UA_SecurityPolicy *securityPolicy,
-                                 const Basic256Sha256_ChannelContext *cc) {
+asym_getRemotePlainTextBlockSize_sp_basic256sha256(const UA_SecurityPolicy *securityPolicy,
+                                                   const Basic256Sha256_ChannelContext *cc) {
     mbedtls_rsa_context *const rsaContext = mbedtls_pk_rsa(cc->remoteCertificate.pk);
     return rsaContext->len - UA_SECURITYPOLICY_BASIC256SHA256_RSAPADDING_LEN;
 }
@@ -903,13 +893,13 @@ UA_SecurityPolicy_Basic256Sha256(UA_SecurityPolicy *policy, UA_CertificateVerifi
             asym_decrypt_sp_basic256sha256;
     asym_encryptionAlgorithm->getLocalKeyLength = NULL; // TODO: Write function
     asym_encryptionAlgorithm->getRemoteKeyLength =
-        (size_t (*)(const UA_SecurityPolicy *, const void *))asym_getRemoteEncryptionKeyLength;
+        (size_t (*)(const UA_SecurityPolicy *, const void *))asym_getRemoteEncryptionKeyLength_sp_basic256sha256;
     asym_encryptionAlgorithm->getLocalBlockSize = NULL; // TODO: Write function
     asym_encryptionAlgorithm->getRemoteBlockSize = (size_t (*)(const UA_SecurityPolicy *,
                                                                const void *))asym_getRemoteBlockSize_sp_basic256sha256;
     asym_encryptionAlgorithm->getLocalPlainTextBlockSize = NULL; // TODO: Write function
     asym_encryptionAlgorithm->getRemotePlainTextBlockSize =
-        (size_t (*)(const UA_SecurityPolicy *, const void *))asym_getRemotePlainTextBlockSize;
+        (size_t (*)(const UA_SecurityPolicy *, const void *))asym_getRemotePlainTextBlockSize_sp_basic256sha256;
 
     asymmetricModule->makeCertificateThumbprint = asym_makeThumbprint_sp_basic256sha256;
     asymmetricModule->compareCertificateThumbprint =

+ 19 - 0
plugins/ua_securitypolicy_common.c

@@ -0,0 +1,19 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <mbedtls/sha1.h>
+
+#include "ua_securitypolicy_common.h"
+
+
+void
+sha1(const unsigned char *input, size_t ilen, unsigned char output[20]) {
+    mbedtls_sha1_context sha1Context;
+    mbedtls_sha1_init(&sha1Context);
+    mbedtls_sha1_starts(&sha1Context);
+    mbedtls_sha1_update(&sha1Context, input, ilen);
+    mbedtls_sha1_finish(&sha1Context, output);
+    mbedtls_sha1_free(&sha1Context);
+}

+ 12 - 0
plugins/ua_securitypolicy_common.h

@@ -0,0 +1,12 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+ 
+#ifndef UA_SECURITYPOLICY_COMMON_H_
+#define UA_SECURITYPOLICY_COMMON_H_
+
+void
+sha1(const unsigned char *input, size_t ilen, unsigned char output[20]);
+
+#endif // UA_SECURITYPOLICY_COMMON_H_

+ 4 - 2
tests/CMakeLists.txt

@@ -21,9 +21,9 @@ include_directories(${PROJECT_SOURCE_DIR}/tests/testing-plugins)
 
 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin/tests)
 if (MSVC)
-	set(TESTS_BINARY_DIR ${CMAKE_BINARY_DIR}/bin/tests/${CMAKE_BUILD_TYPE})
+    set(TESTS_BINARY_DIR ${CMAKE_BINARY_DIR}/bin/tests/${CMAKE_BUILD_TYPE})
 else()
-	set(TESTS_BINARY_DIR ${CMAKE_BINARY_DIR}/bin/tests)
+    set(TESTS_BINARY_DIR ${CMAKE_BINARY_DIR}/bin/tests)
 endif()
 
 
@@ -42,6 +42,8 @@ set(test_plugin_sources ${PROJECT_SOURCE_DIR}/plugins/ua_network_tcp.c
 )
 
 if(UA_ENABLE_ENCRYPTION)
+    set(test_plugin_sources ${test_plugin_sources}
+        ${PROJECT_SOURCE_DIR}/plugins/ua_securitypolicy_common.c)
     set(test_plugin_sources ${test_plugin_sources}
         ${PROJECT_SOURCE_DIR}/plugins/ua_securitypolicy_basic128rsa15.c)
     set(test_plugin_sources ${test_plugin_sources}

+ 2 - 0
tests/fuzz/CMakeLists.txt

@@ -64,6 +64,8 @@ set(fuzzing_plugin_sources ${PROJECT_SOURCE_DIR}/plugins/ua_network_tcp.c
 )
 
 if(UA_ENABLE_ENCRYPTION)
+    set(fuzzing_plugin_sources ${fuzzing_plugin_sources}
+        ${PROJECT_SOURCE_DIR}/plugins/ua_securitypolicy_common.c)
     set(fuzzing_plugin_sources ${fuzzing_plugin_sources}
         ${PROJECT_SOURCE_DIR}/plugins/ua_securitypolicy_basic128rsa15.c)
     set(fuzzing_plugin_sources ${fuzzing_plugin_sources}