Tizen 5.x migration from openssl 1.0.2 to openssl 1.1.1 16/207816/3 accepted/tizen/unified/20190614.051505 submit/tizen/20190614.021004
authorJihoon Jung <jh8801.jung@samsung.com>
Thu, 13 Jun 2019 04:21:46 +0000 (13:21 +0900)
committerJihoon Jung <jh8801.jung@samsung.com>
Thu, 13 Jun 2019 05:06:57 +0000 (14:06 +0900)
Change-Id: Ia57682cea020e0d7c1df9befb553a1a09769274f
Signed-off-by: Jihoon Jung <jh8801.jung@samsung.com>
packaging/nfc-manager.spec
src/commonlib/CMakeLists.txt
src/commonlib/include/net_nfc_typedef.h
src/commonlib/net_nfc_util_openssl.c
src/manager/CMakeLists.txt

index 28f4496..3210ef2 100644 (file)
@@ -20,7 +20,7 @@ BuildRequires: pkgconfig(mm-sound)
 BuildRequires: pkgconfig(appsvc)
 BuildRequires: pkgconfig(feedback)
 BuildRequires: pkgconfig(capi-media-wav-player)
-BuildRequires: pkgconfig(openssl)
+BuildRequires: pkgconfig(openssl1.1)
 BuildRequires: pkgconfig(deviced)
 BuildRequires: pkgconfig(mm-keysound)
 BuildRequires: pkgconfig(syspopup-caller)
index 3209b30..4ae0d9b 100644 (file)
@@ -26,7 +26,7 @@ ENDIF("${CMAKE_BUILD_TYPE}" STREQUAL "")
 
 INCLUDE(FindPkgConfig)
 pkg_check_modules(commonlib_pkges REQUIRED
-               glib-2.0 gio-2.0 gio-unix-2.0 dlog openssl aul pkgmgr-info libsystemd-daemon)
+               glib-2.0 gio-2.0 gio-unix-2.0 dlog openssl1.1 aul pkgmgr-info libsystemd-daemon)
 
 FOREACH(flag ${commonlib_pkges_CFLAGS})
        SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
index 0ad8874..3484378 100644 (file)
@@ -626,7 +626,9 @@ extern "C" {
                NET_NFC_SIGN_TYPE_PKCS_1,
                NET_NFC_SIGN_TYPE_PKCS_1_V_1_5,
                NET_NFC_SIGN_TYPE_DSA,
+#if OPENSSL_VERSION_NUMBER < 0x10100000L
                NET_NFC_SIGN_TYPE_ECDSA,
+#endif
                NET_NFC_MAX_SIGN_TYPE,
        } net_nfc_sign_type_t;
 
index 04a92a6..3c89ab7 100644 (file)
@@ -388,7 +388,12 @@ int net_nfc_util_openssl_sign_buffer(uint32_t type, uint8_t * buffer, uint32_t l
        OpenSSL_add_all_algorithms();
 
        /* md context */
+#if OPENSSL_VERSION_NUMBER < 0x10100000L // OpenSSL 1.0.2
        EVP_MD_CTX ctx = { 0, };
+#else // OpenSSL 1.1.1
+       EVP_MD_CTX *ctx;
+       ctx = EVP_MD_CTX_new();
+#endif
        EVP_PKEY_CTX *pctx = NULL;
 
        switch (type) {
@@ -415,6 +420,7 @@ int net_nfc_util_openssl_sign_buffer(uint32_t type, uint8_t * buffer, uint32_t l
                break;
 
                /* ECDSA */
+#if OPENSSL_VERSION_NUMBER < 0x10100000L // OpenSSL 1.0.2
        case 4:
                /* md */
                md = EVP_get_digestbyname("sha1");
@@ -422,15 +428,19 @@ int net_nfc_util_openssl_sign_buffer(uint32_t type, uint8_t * buffer, uint32_t l
                /* engine */
                engine = ENGINE_get_default_ECDSA();
                break;
-
+#endif
        default:
                result = -1;
+#if OPENSSL_VERSION_NUMBER >= 0x10100000L // OpenSSL 1.1.1
+               EVP_MD_CTX_free(ctx);
+#endif
                return result;
        }
 
        /* pkey */
        pkey = _load_key(key_file, OPENSSL_FORMAT_PKCS12, password, NULL);
 
+#if OPENSSL_VERSION_NUMBER < 0x10100000L // OpenSSL 1.0.2
        if (!EVP_DigestSignInit(&ctx, &pctx, md, engine, pkey)) {
                result = -1;
                return result;
@@ -445,7 +455,27 @@ int net_nfc_util_openssl_sign_buffer(uint32_t type, uint8_t * buffer, uint32_t l
                result = -1;
                return result;
        }
+#else // OpenSSL 1.1.1
+       if (!EVP_DigestSignInit(ctx, &pctx, md, engine, pkey)) {
+               result = -1;
+               EVP_MD_CTX_free(ctx);
+               return result;
+       }
+
+       if (!EVP_DigestSignUpdate(ctx, buffer, length)) {
+               result = -1;
+               EVP_MD_CTX_free(ctx);
+               return result;
+       }
+
+       if (!EVP_DigestSignFinal(ctx, sign, (size_t *)sign_len)) {
+               result = -1;
+               EVP_MD_CTX_free(ctx);
+               return result;
+       }
 
+       EVP_MD_CTX_free(ctx);
+#endif
        return result;
 }
 
@@ -459,7 +489,12 @@ int net_nfc_util_openssl_verify_signature(uint32_t type, uint8_t * buffer, uint3
        OpenSSL_add_all_algorithms();
 
        /* md context */
+#if OPENSSL_VERSION_NUMBER < 0x10100000L // OpenSSL 1.0.2
        EVP_MD_CTX ctx = { 0, };
+#else // OpenSSL 1.1.1
+       EVP_MD_CTX *ctx;
+       ctx = EVP_MD_CTX_new();
+#endif
        EVP_PKEY_CTX *pctx = NULL;
 
        switch (type) {
@@ -486,6 +521,7 @@ int net_nfc_util_openssl_verify_signature(uint32_t type, uint8_t * buffer, uint3
                break;
 
                /* ECDSA */
+#if OPENSSL_VERSION_NUMBER < 0x10100000L // OpenSSL 1.0.2
        case 4:
                /* md */
                md = EVP_get_digestbyname("sha1");
@@ -493,26 +529,38 @@ int net_nfc_util_openssl_verify_signature(uint32_t type, uint8_t * buffer, uint3
                /* engine */
                engine = ENGINE_get_default_ECDSA();
                break;
-
+#endif
        default:
                result = -1;
+#if OPENSSL_VERSION_NUMBER >= 0x10100000L // OpenSSL 1.1.1
+               EVP_MD_CTX_free(ctx);
+#endif
                return result;
        }
 
        /* pkey */
        X509 *x509 = _load_certificate_from_mem(0, cert, cert_len, NULL);
-       if (x509 == NULL)
+       if (x509 == NULL) {
+#if OPENSSL_VERSION_NUMBER >= 0x10100000L // OpenSSL 1.1.1
+               EVP_MD_CTX_free(ctx);
+#endif
                return 0;
+       }
 
        pkey = X509_PUBKEY_get(X509_get_X509_PUBKEY(x509));
        X509_free(x509);
 
+#if OPENSSL_VERSION_NUMBER < 0x10100000L // OpenSSL 1.0.2
        EVP_DigestVerifyInit(&ctx, &pctx, md, engine, pkey);
        EVP_DigestVerifyUpdate(&ctx, buffer, length);
        result = EVP_DigestVerifyFinal(&ctx, sign, sign_len);
-
+#else // OpenSSL 1.1.1
+       EVP_DigestVerifyInit(ctx, &pctx, md, engine, pkey);
+       EVP_DigestVerifyUpdate(ctx, buffer, length);
+       result = EVP_DigestVerifyFinal(ctx, sign, sign_len);
+       EVP_MD_CTX_free(ctx);
+#endif
        DEBUG_MSG("EVP_DigestVerifyFinal returns %d", result);
-
        return result;
 }
 
@@ -754,16 +802,28 @@ bool net_nfc_util_openssl_digest(const char *algorithm, const uint8_t * buffer,
        if ((md = EVP_get_digestbyname(algorithm)) != NULL) {
                _net_nfc_util_alloc_mem(temp, EVP_MAX_MD_SIZE);
                if (temp != NULL) {
+#if OPENSSL_VERSION_NUMBER < 0x10100000L // OpenSSL 1.0.2
                        EVP_MD_CTX mdCtx;
+#else // OpenSSL 1.1.1
+                       EVP_MD_CTX *mdCtx;
+                       mdCtx = EVP_MD_CTX_new();
+#endif
                        unsigned int resultLen = 0;
 
                        memset(temp, 0, EVP_MAX_MD_SIZE);
 
+#if OPENSSL_VERSION_NUMBER < 0x10100000L // OpenSSL 1.0.2
                        EVP_DigestInit(&mdCtx, md);
                        if (EVP_DigestUpdate(&mdCtx, buffer, buf_len) != 0)
                                DEBUG_ERR_MSG("EVP_DigestUpdate failed");
                        EVP_DigestFinal(&mdCtx, temp, &resultLen);
-
+#else // OpenSSL 1.1.1
+                       EVP_DigestInit(mdCtx, md);
+                       if (EVP_DigestUpdate(mdCtx, buffer, buf_len) != 0)
+                               DEBUG_ERR_MSG("EVP_DigestUpdate failed");
+                       EVP_DigestFinal(mdCtx, temp, &resultLen);
+                       EVP_MD_CTX_free(mdCtx);
+#endif
                        if (*out_len >= resultLen) {
                                *out_len = resultLen;
                                memcpy(result, temp, *out_len);
index 00596db..68f1007 100644 (file)
@@ -17,7 +17,7 @@ IF("${CMAKE_BUILD_TYPE}" STREQUAL "")
 ENDIF("${CMAKE_BUILD_TYPE}" STREQUAL "")
 
 # for package file
-SET(dependents "aul glib-2.0 gio-unix-2.0 vconf dlog tapi appsvc libcurl bluetooth-api capi-network-bluetooth openssl deviced feedback capi-media-wav-player mm-keysound syspopup-caller notification capi-network-wifi-manager capi-system-info sqlite3 capi-network-wifi-direct capi-system-device cynara-client cynara-creds-gdbus cynara-session")
+SET(dependents "aul glib-2.0 gio-unix-2.0 vconf dlog tapi appsvc libcurl bluetooth-api capi-network-bluetooth openssl1.1 deviced feedback capi-media-wav-player mm-keysound syspopup-caller notification capi-network-wifi-manager capi-system-info sqlite3 capi-network-wifi-direct capi-system-device cynara-client cynara-creds-gdbus cynara-session")
 
 IF (TIZEN_TELEPHONY_ENABLED)
        MESSAGE("-DENABLE_TELEPHONY")