-
Notifications
You must be signed in to change notification settings - Fork 30
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #69 from paolostivanin/mbedtls
Add mbedtls support
- Loading branch information
Showing
6 changed files
with
264 additions
and
18 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,111 @@ | ||
#*************************************************************************** | ||
# _ _ ____ _ | ||
# Project ___| | | | _ \| | | ||
# / __| | | | |_) | | | ||
# | (__| |_| | _ <| |___ | ||
# \___|\___/|_| \_\_____| | ||
# | ||
# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al. | ||
# | ||
# This software is licensed as described in the file COPYING, which | ||
# you should have received as part of this distribution. The terms | ||
# are also available at https://curl.se/docs/copyright.html. | ||
# | ||
# You may opt to use, copy, modify, merge, publish, distribute and/or sell | ||
# copies of the Software, and permit persons to whom the Software is | ||
# furnished to do so, under the terms of the COPYING file. | ||
# | ||
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
# KIND, either express or implied. | ||
# | ||
# SPDX-License-Identifier: curl | ||
# | ||
########################################################################### | ||
# Find the mbedtls library | ||
# | ||
# Input variables: | ||
# | ||
# MBEDTLS_INCLUDE_DIR The mbedtls include directory | ||
# MBEDTLS_INCLUDE_DIRS The mbedtls include directory (deprecated) | ||
# MBEDTLS_LIBRARY Path to mbedtls library | ||
# MBEDX509_LIBRARY Path to mbedx509 library | ||
# MBEDCRYPTO_LIBRARY Path to mbedcrypto library | ||
# | ||
# Result variables: | ||
# | ||
# MBEDTLS_FOUND System has mbedtls | ||
# MBEDTLS_INCLUDE_DIRS The mbedtls include directories | ||
# MBEDTLS_LIBRARIES The mbedtls library names | ||
# MBEDTLS_VERSION Version of mbedtls | ||
|
||
if(DEFINED MBEDTLS_INCLUDE_DIRS AND NOT DEFINED MBEDTLS_INCLUDE_DIR) | ||
message(WARNING "MBEDTLS_INCLUDE_DIRS is deprecated, use MBEDTLS_INCLUDE_DIR instead.") | ||
set(MBEDTLS_INCLUDE_DIR "${MBEDTLS_INCLUDE_DIRS}") | ||
unset(MBEDTLS_INCLUDE_DIRS) | ||
endif() | ||
|
||
if(CURL_USE_PKGCONFIG) | ||
find_package(PkgConfig QUIET) | ||
pkg_check_modules(PC_MBEDTLS "mbedtls") | ||
endif() | ||
|
||
find_path(MBEDTLS_INCLUDE_DIR NAMES "mbedtls/ssl.h" | ||
HINTS | ||
${PC_MBEDTLS_INCLUDEDIR} | ||
${PC_MBEDTLS_INCLUDE_DIRS} | ||
) | ||
|
||
find_library(MBEDTLS_LIBRARY NAMES "mbedtls" | ||
HINTS | ||
${PC_MBEDTLS_LIBDIR} | ||
${PC_MBEDTLS_LIBRARY_DIRS} | ||
) | ||
find_library(MBEDX509_LIBRARY NAMES "mbedx509" | ||
HINTS | ||
${PC_MBEDTLS_LIBDIR} | ||
${PC_MBEDTLS_LIBRARY_DIRS} | ||
) | ||
find_library(MBEDCRYPTO_LIBRARY NAMES "mbedcrypto" | ||
HINTS | ||
${PC_MBEDTLS_LIBDIR} | ||
${PC_MBEDTLS_LIBRARY_DIRS} | ||
) | ||
|
||
if(PC_MBEDTLS_VERSION) | ||
set(MBEDTLS_VERSION ${PC_MBEDTLS_VERSION}) | ||
elseif(MBEDTLS_INCLUDE_DIR) | ||
if(EXISTS "${MBEDTLS_INCLUDE_DIR}/mbedtls/build_info.h") # 3.x | ||
set(_version_header "${MBEDTLS_INCLUDE_DIR}/mbedtls/build_info.h") | ||
elseif(EXISTS "${MBEDTLS_INCLUDE_DIR}/mbedtls/version.h") # 2.x | ||
set(_version_header "${MBEDTLS_INCLUDE_DIR}/mbedtls/version.h") | ||
else() | ||
unset(_version_header) | ||
endif() | ||
if(_version_header) | ||
set(_version_regex "#[\t ]*define[\t ]+MBEDTLS_VERSION_STRING[\t ]+\"([0-9.]+)\"") | ||
file(STRINGS "${_version_header}" _version_str REGEX "${_version_regex}") | ||
string(REGEX REPLACE "${_version_regex}" "\\1" _version_str "${_version_str}") | ||
set(MBEDTLS_VERSION "${_version_str}") | ||
unset(_version_regex) | ||
unset(_version_str) | ||
unset(_version_header) | ||
endif() | ||
endif() | ||
|
||
include(FindPackageHandleStandardArgs) | ||
find_package_handle_standard_args(MbedTLS | ||
REQUIRED_VARS | ||
MBEDTLS_INCLUDE_DIR | ||
MBEDTLS_LIBRARY | ||
MBEDX509_LIBRARY | ||
MBEDCRYPTO_LIBRARY | ||
VERSION_VAR | ||
MBEDTLS_VERSION | ||
) | ||
|
||
if(MBEDTLS_FOUND) | ||
set(MBEDTLS_INCLUDE_DIRS ${MBEDTLS_INCLUDE_DIR}) | ||
set(MBEDTLS_LIBRARIES ${MBEDTLS_LIBRARY} ${MBEDX509_LIBRARY} ${MBEDCRYPTO_LIBRARY}) | ||
endif() | ||
|
||
mark_as_advanced(MBEDTLS_INCLUDE_DIR MBEDTLS_LIBRARY MBEDX509_LIBRARY MBEDCRYPTO_LIBRARY) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,94 @@ | ||
#include <stdio.h> | ||
#include <stdlib.h> | ||
#include <mbedtls/md.h> | ||
#include "../whmac.h" | ||
#include "../cotp.h" | ||
|
||
typedef struct whmac_handle_s whmac_handle_t; | ||
|
||
struct whmac_handle_s | ||
{ | ||
mbedtls_md_context_t sha_ctx; | ||
const mbedtls_md_info_t *md_info; | ||
int algo; | ||
size_t dlen; | ||
}; | ||
|
||
int | ||
whmac_check (void) | ||
{ | ||
return 0; | ||
} | ||
|
||
size_t | ||
whmac_getlen (whmac_handle_t *hd) | ||
{ | ||
return mbedtls_md_get_size(hd->md_info); | ||
} | ||
|
||
whmac_handle_t * | ||
whmac_gethandle (int algo) | ||
{ | ||
const mbedtls_md_type_t openssl_algo[] = { | ||
MBEDTLS_MD_SHA1, | ||
MBEDTLS_MD_SHA256, | ||
MBEDTLS_MD_SHA512, | ||
}; | ||
|
||
whmac_handle_t *whmac_handle = calloc (1, sizeof(*whmac_handle)); | ||
if (whmac_handle == NULL) { | ||
return NULL; | ||
} | ||
|
||
if (algo > 2) { | ||
free (whmac_handle); | ||
return NULL; | ||
} | ||
|
||
mbedtls_md_init (&(whmac_handle->sha_ctx)); | ||
whmac_handle->md_info = mbedtls_md_info_from_type (openssl_algo[algo]); | ||
int ret = mbedtls_md_setup (&(whmac_handle->sha_ctx), whmac_handle->md_info, 1); | ||
if (ret != 0) { | ||
printf ("mbedtls_md_setup() returned -0x%04x\n", -ret); | ||
mbedtls_md_free (&(whmac_handle->sha_ctx)); | ||
free (whmac_handle); | ||
return NULL; | ||
} | ||
|
||
return whmac_handle; | ||
} | ||
|
||
void | ||
whmac_freehandle (whmac_handle_t *hd) | ||
{ | ||
mbedtls_md_free (&(hd->sha_ctx)); | ||
free (hd); | ||
} | ||
|
||
int | ||
whmac_setkey (whmac_handle_t *hd, | ||
unsigned char *buffer, | ||
size_t buflen) | ||
{ | ||
mbedtls_md_hmac_starts (&(hd->sha_ctx), buffer, buflen); | ||
return NO_ERROR; | ||
} | ||
|
||
void | ||
whmac_update (whmac_handle_t *hd, | ||
unsigned char *buffer, | ||
size_t buflen) | ||
{ | ||
mbedtls_md_hmac_update (&(hd->sha_ctx), buffer, buflen); | ||
} | ||
|
||
ssize_t | ||
whmac_finalize (whmac_handle_t *hd, | ||
unsigned char *buffer, | ||
size_t buflen) | ||
{ | ||
mbedtls_md_hmac_finish (&(hd->sha_ctx), buffer); | ||
|
||
return buflen; | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters