mirror of
https://github.com/deneraraujo/OpenVPNAdapter.git
synced 2026-04-24 00:00:05 +08:00
Merge commit '86cc97e55fe346502462284d2e636a2b3708163e' as 'Sources/OpenVPN3'
This commit is contained in:
@@ -0,0 +1 @@
|
||||
polartmp
|
||||
@@ -0,0 +1,86 @@
|
||||
cmake_minimum_required(VERSION 2.6)
|
||||
project(POLARSSL C)
|
||||
|
||||
enable_testing()
|
||||
|
||||
if(CMAKE_COMPILER_IS_GNUCC)
|
||||
# JY Added
|
||||
set(CMAKE_OSX_ARCHITECTURES "")
|
||||
set(CMAKE_OSX_DEPLOYMENT_TARGET "")
|
||||
set(CMAKE_OSX_SYSROOT "")
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} $ENV{LIB_FPIC} $ENV{LIB_OPT_LEVEL} $ENV{PLATFORM_FLAGS} $ENV{OTHER_COMPILER_FLAGS} -Wall -W -Wdeclaration-after-statement")
|
||||
if (NOT "$ENV{GCC_CMD}" STREQUAL "")
|
||||
set(CMAKE_C_COMPILER "$ENV{GCC_CMD}")
|
||||
endif()
|
||||
if (NOT "$ENV{GPP_CMD}" STREQUAL "")
|
||||
set(CMAKE_CXX_COMPILER "$ENV{GPP_CMD}")
|
||||
endif()
|
||||
if (NOT "$ENV{AR_CMD}" STREQUAL "")
|
||||
set(CMAKE_AR "$ENV{AR_CMD}")
|
||||
endif()
|
||||
if (NOT "$ENV{RANLIB_CMD}" STREQUAL "")
|
||||
set(CMAKE_RANLIB "$ENV{RANLIB_CMD}")
|
||||
endif()
|
||||
|
||||
# JY Commented out
|
||||
#set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2 -Wall -Wextra -W -Wdeclaration-after-statement")
|
||||
#set(CMAKE_C_FLAGS_DEBUG "-g3 -O0")
|
||||
#set(CMAKE_C_FLAGS_COVERAGE "-g3 -O0 -fprofile-arcs -ftest-coverage -lgcov")
|
||||
endif(CMAKE_COMPILER_IS_GNUCC)
|
||||
|
||||
if(CMAKE_BUILD_TYPE STREQUAL "Coverage")
|
||||
if(CMAKE_COMPILER_IS_GNUCC)
|
||||
set(CMAKE_SHARED_LINKER_FLAGS "-fprofile-arcs -ftest-coverage")
|
||||
endif(CMAKE_COMPILER_IS_GNUCC)
|
||||
endif(CMAKE_BUILD_TYPE STREQUAL "Coverage")
|
||||
|
||||
option(USE_PKCS11_HELPER_LIBRARY "Build PolarSSL with the pkcs11-helper library." OFF)
|
||||
|
||||
option(ENABLE_ZLIB_SUPPORT "Build PolarSSL with zlib library." OFF)
|
||||
|
||||
# JY added
|
||||
if(MINICRYPTO)
|
||||
if(MINICRYPTO_DIR)
|
||||
add_library(minicrypto STATIC IMPORTED)
|
||||
set_property(TARGET minicrypto PROPERTY IMPORTED_LOCATION "${MINICRYPTO_DIR}/libminicrypto.a")
|
||||
endif()
|
||||
if(OSSLCRYPTO_DIR)
|
||||
add_library(crypto STATIC IMPORTED)
|
||||
set_property(TARGET crypto PROPERTY IMPORTED_LOCATION "${OSSLCRYPTO_DIR}/libcrypto.a")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# include full testing infrastructure (JY added)
|
||||
if(ENABLE_TESTING)
|
||||
enable_testing()
|
||||
endif()
|
||||
|
||||
if(LIB_INSTALL_DIR)
|
||||
else()
|
||||
set(LIB_INSTALL_DIR lib)
|
||||
endif()
|
||||
|
||||
include_directories(include/)
|
||||
|
||||
if(ENABLE_ZLIB_SUPPORT)
|
||||
find_package(ZLIB)
|
||||
|
||||
if(ZLIB_FOUND)
|
||||
include_directories(ZLIB_INCLUDE_DIR)
|
||||
endif(ZLIB_FOUND)
|
||||
endif(ENABLE_ZLIB_SUPPORT)
|
||||
|
||||
add_subdirectory(library)
|
||||
add_subdirectory(include)
|
||||
|
||||
# include full testing infrastructure (JY modified)
|
||||
if(ENABLE_TESTING)
|
||||
if(CMAKE_COMPILER_IS_GNUCC)
|
||||
add_subdirectory(tests)
|
||||
endif(CMAKE_COMPILER_IS_GNUCC)
|
||||
add_subdirectory(programs)
|
||||
endif()
|
||||
|
||||
ADD_CUSTOM_TARGET(apidoc
|
||||
COMMAND doxygen doxygen/polarssl.doxyfile
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
@@ -0,0 +1,12 @@
|
||||
Building PolarSSL for android.
|
||||
|
||||
First, build static OpenSSL for PolarSSL/OpenSSL bridge
|
||||
(the build-openssl-small script may be used).
|
||||
|
||||
Next build libminicrypto.a from libcrypto.a :
|
||||
|
||||
$O3/polarssl/build-mini-openssl ref
|
||||
|
||||
Finally, build PolarSSL:
|
||||
|
||||
TARGET=android $O3/polarssl/build-polarssl
|
||||
@@ -0,0 +1,17 @@
|
||||
# this one is important
|
||||
SET(CMAKE_SYSTEM_NAME Linux)
|
||||
#this one not so much
|
||||
SET(CMAKE_SYSTEM_VERSION 1)
|
||||
|
||||
# specify the cross compiler (assumes that PATH already points to android toolchain)
|
||||
SET(CMAKE_C_COMPILER gcc)
|
||||
SET(CMAKE_CXX_COMPILER g++)
|
||||
|
||||
# where is the target environment
|
||||
#SET(CMAKE_FIND_ROOT_PATH /opt/eldk-2007-01-19/ppc_74xx /home/alex/eldk-ppc74xx-inst)
|
||||
|
||||
# search for programs in the build host directories
|
||||
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
||||
# for libraries and headers in the target directories
|
||||
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
||||
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
||||
@@ -0,0 +1,4 @@
|
||||
# specify the cross compiler
|
||||
SET(CMAKE_C_COMPILER clang)
|
||||
SET(CMAKE_CXX_COMPILER clang++)
|
||||
SET(CMAKE_COMPILER_IS_GNUCC 1)
|
||||
@@ -0,0 +1,32 @@
|
||||
diff -uNr polarssl-1.2.7/include/polarssl/bn_mul.h polarssl-1.2.7.new/include/polarssl/bn_mul.h
|
||||
--- polarssl-1.2.7/include/polarssl/bn_mul.h 2013-04-13 03:56:17.000000000 -0600
|
||||
+++ polarssl-1.2.7.new/include/polarssl/bn_mul.h 2013-06-13 16:30:35.000000000 -0600
|
||||
@@ -548,7 +548,7 @@
|
||||
|
||||
#if defined(__arm__)
|
||||
|
||||
-#if defined(__thumb__)
|
||||
+#if defined(__thumb__) && !defined(__thumb2__)
|
||||
|
||||
#define MULADDC_INIT \
|
||||
asm( \
|
||||
diff -uNr polarssl-1.2.7/library/bignum.c polarssl-1.2.7.new/library/bignum.c
|
||||
--- polarssl-1.2.7/library/bignum.c 2013-04-13 03:56:17.000000000 -0600
|
||||
+++ polarssl-1.2.7.new/library/bignum.c 2013-06-13 16:30:35.000000000 -0600
|
||||
@@ -935,7 +935,15 @@
|
||||
/*
|
||||
* Helper for mpi multiplication
|
||||
*/
|
||||
-static void mpi_mul_hlp( size_t i, t_uint *s, t_uint *d, t_uint b )
|
||||
+static
|
||||
+#if defined(__APPLE__) && defined(__arm__)
|
||||
+/*
|
||||
+ * Apple LLVM version 4.2 (clang-425.0.24) (based on LLVM 3.2svn)
|
||||
+ * appears to need this to prevent bad ARM code generation at -O3.
|
||||
+ */
|
||||
+__attribute__ ((noinline))
|
||||
+#endif
|
||||
+void mpi_mul_hlp( size_t i, t_uint *s, t_uint *d, t_uint b )
|
||||
{
|
||||
t_uint c = 0, t = 0;
|
||||
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
#!/usr/bin/env bash
|
||||
set -e
|
||||
. $O3/core/deps/lib-versions
|
||||
POLARSSL_SRC=$HOME/src/mac/$POLARSSL_VERSION
|
||||
PD=$O3/core/deps/polarssl
|
||||
PB=$(basename $POLARSSL_SRC)
|
||||
|
||||
rm -rf polartmp
|
||||
mkdir polartmp
|
||||
cd polartmp
|
||||
cp -a $POLARSSL_SRC polarssl.new
|
||||
|
||||
# extract the PolarSSL source
|
||||
tar xfz $DL/$PB-gpl.tgz
|
||||
|
||||
cd $PB
|
||||
rm $(find . -type f | grep -E 'Makefile|\.orig$|\.rej$')
|
||||
rm -f CMakeLists.txt include/polarssl/config.h include/polarssl/openvpn-polarssl.h
|
||||
|
||||
cd ../polarssl.new
|
||||
rm -f CMakeLists.txt include/polarssl/config.h include/polarssl/openvpn-polarssl.h
|
||||
cd ..
|
||||
|
||||
diff -ur $PB polarssl.new | grep -v '^Only in'
|
||||
+52
@@ -0,0 +1,52 @@
|
||||
#!/usr/bin/env bash
|
||||
# Examples:
|
||||
# $O3/core/deps/polarssl/build-mini-openssl ref
|
||||
# $O3/core/deps/polarssl/build-mini-openssl ref-aesni
|
||||
|
||||
set -e
|
||||
if [ -z "$1" ]; then
|
||||
echo "usage: build-mini-openssl <ref|ref-aesni>"
|
||||
exit 1
|
||||
fi
|
||||
if [ -z "$OPENSSL_DIR" ]; then
|
||||
echo OPENSSL_DIR must be defined
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "$APPLE_FAMILY" = "1" ] && [ -z "$GCC_CMD" ]; then
|
||||
GCC_CMD=clang
|
||||
fi
|
||||
|
||||
if [ "$APPLE_FAMILY" = "1" ]; then
|
||||
NM_FLAGS=-P
|
||||
BSD_SYMBOLS="1"
|
||||
VISIBILITY="-fvisibility=hidden"
|
||||
else
|
||||
NM_FLAGS="-f posix"
|
||||
BSD_SYMBOLS="0"
|
||||
VISIBILITY=""
|
||||
fi
|
||||
|
||||
[ -z "$NM_CMD" ] && NM_CMD=nm
|
||||
[ -z "$AR_CMD" ] && AR_CMD=ar
|
||||
[ -z "$GCC_CMD" ] && GCC_CMD=gcc
|
||||
PD=$O3/core/deps/polarssl
|
||||
cd $OPENSSL_DIR
|
||||
cd lib
|
||||
rm -rf tmp
|
||||
mkdir tmp
|
||||
$NM_CMD $NM_FLAGS libcrypto.a >tmp/nm-file
|
||||
echo "NOTE: on BSD systems, don't worry about any 'no name list' errors above"
|
||||
cd tmp
|
||||
python $O3/common/scripts/sym.py $PD/$1 nm-file $AR_CMD ../libcrypto.a libminicrypto.a buildmini ../mini-undef.sh $BSD_SYMBOLS
|
||||
. buildmini
|
||||
|
||||
# need any special initialization?
|
||||
. ../mini-undef.sh
|
||||
if [ "$SYM_UNDEF_OPENSSL_ia32cap_P" ] && [ "$SYM_UNDEF_OPENSSL_cpuid_setup" ]; then
|
||||
echo BUILDING STUB intel_cpu.c
|
||||
$GCC_CMD $VISIBILITY $LIB_OPT_LEVEL $LIB_FPIC -c $PD/intel_cpu.c
|
||||
$AR_CMD rs libminicrypto.a intel_cpu.o
|
||||
fi
|
||||
|
||||
mv libminicrypto.a ..
|
||||
+167
@@ -0,0 +1,167 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Parameters:
|
||||
# CMAKE_TARGET -- use $CMAKE_TARGET.cmake as toolchain file
|
||||
# AES_NI=1 -- enable AES_NI processor optimization
|
||||
# EXTERNAL_RNG=1 -- disable all internal RNG implementations (caller must provide)
|
||||
# ENABLE_TESTING=1 -- run PolarSSL test scripts after build
|
||||
# DEBUG_BUILD=1 or SELF_TEST=1 -- enable minimal testing on target
|
||||
# ENABLE_SERVER=1 -- enable SSL/TLS server code
|
||||
# ENABLE_FS_IO=1 -- enable PolarSSL file I/O
|
||||
# VERBOSE=1 -- see build commands
|
||||
# USE_MINICRYPTO=1 -- use minicrypto library
|
||||
# NO_WIPE=1 -- don't wipe source tree and reunzip tarball
|
||||
# STOCK_CONFIG=1 -- use stock PolarSSL config.h
|
||||
|
||||
set -e
|
||||
if [ -z "$O3" ]; then
|
||||
echo O3 var must point to ovpn3 tree
|
||||
exit 1
|
||||
fi
|
||||
if [ -z "$TARGET" ]; then
|
||||
echo TARGET var must be defined
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# source vars
|
||||
. $O3/core/vars/vars-${TARGET}
|
||||
. $O3/core/deps/lib-versions
|
||||
|
||||
# extract the PolarSSL source
|
||||
PD=$O3/core/deps/polarssl
|
||||
DIST=polarssl-$PLATFORM
|
||||
|
||||
rm -rf $DIST
|
||||
mkdir $DIST
|
||||
|
||||
if [ "$NO_WIPE" = "1" ]; then
|
||||
echo RETAIN existing source
|
||||
cd $POLARSSL_VERSION
|
||||
elif [ "$NO_WIPE" = "partial" ]; then
|
||||
echo RETAIN existing source but copy config.h and CMakeLists.txt
|
||||
cd $POLARSSL_VERSION
|
||||
|
||||
# define configs
|
||||
if [ "$STOCK_CONFIG" != "1" ]; then
|
||||
cp $PD/config.h include/polarssl/
|
||||
fi
|
||||
cp $PD/CMakeLists.txt .
|
||||
else
|
||||
echo WIPE and reunzip source
|
||||
rm -rf $POLARSSL_VERSION $POLARSSL_VERSION-prerelease
|
||||
[ -z "$DL" ] && DL=~/Downloads
|
||||
tar xfz $DL/$POLARSSL_VERSION-gpl.tgz
|
||||
|
||||
[ -d $POLARSSL_VERSION-prerelease ] && mv $POLARSSL_VERSION-prerelease $POLARSSL_VERSION
|
||||
cd $POLARSSL_VERSION
|
||||
|
||||
# delete makefiles (apparently not needed)
|
||||
rm $(find . -type f | grep Makefile)
|
||||
|
||||
patch -p1 <$PD/relaxed-x509-date.patch
|
||||
#patch -p1 <$PD/dhm.patch
|
||||
#patch -p1 <$PD/entropy-printf.patch
|
||||
|
||||
if [ "$USE_MINICRYPTO" = "1" ]; then
|
||||
# do the big polar-openssl patch
|
||||
echo MERGING polarssl-minicrypto.patch
|
||||
patch -p1 <$PD/polarssl-minicrypto.patch
|
||||
fi
|
||||
|
||||
# define configs
|
||||
cp include/polarssl/config.h include/polarssl/config.h.orig
|
||||
cp CMakeLists.txt CMakeLists.txt.orig
|
||||
cp $PD/config.h include/polarssl/
|
||||
cp $PD/CMakeLists.txt .
|
||||
fi
|
||||
|
||||
# dynamically generated header file with options,
|
||||
# included by config.h
|
||||
OPC=include/polarssl/openvpn-polarssl.h
|
||||
echo '/* Automatically generated by ovpn3/core/deps/polarssl/build-polarssl, do not edit */' >$OPC
|
||||
|
||||
# set options
|
||||
OPT=""
|
||||
|
||||
# relaxed cert checking
|
||||
echo "#define POLARSSL_RELAXED_X509_DATE" >>$OPC
|
||||
|
||||
# RNG
|
||||
if [ "$EXTERNAL_RNG" = "1" ]; then
|
||||
echo "#define EXTERNAL_RNG" >>$OPC
|
||||
fi
|
||||
|
||||
# enable full testing infrastructure
|
||||
if [ "$ENABLE_TESTING" = "1" ]; then
|
||||
OPT="$OPT -DENABLE_TESTING=1"
|
||||
echo "#define ENABLE_TESTING" >>$OPC
|
||||
fi
|
||||
|
||||
# enable minimal testing on target
|
||||
if [ "$DEBUG_BUILD" = "1" ] || [ "$SELF_TEST" = "1" ]; then
|
||||
echo "#define POLARSSL_SELF_TEST" >>$OPC
|
||||
fi
|
||||
|
||||
# configure target
|
||||
if [ "$CMAKE_TARGET" ]; then
|
||||
OPT="$OPT -DCMAKE_TOOLCHAIN_FILE=$PD/$CMAKE_TARGET.cmake"
|
||||
elif [ "$APPLE_FAMILY" = "1" ]; then
|
||||
OPT="$OPT -DCMAKE_TOOLCHAIN_FILE=$PD/apple.cmake"
|
||||
fi
|
||||
|
||||
# Minicrypto
|
||||
if [ "$USE_MINICRYPTO" = "1" ]; then
|
||||
OPT="$OPT -DMINICRYPTO=1"
|
||||
if [ "$MINICRYPTO_DIR" ]; then
|
||||
OPT="$OPT -DMINICRYPTO_DIR=$MINICRYPTO_DIR"
|
||||
fi
|
||||
if [ "$OSSLCRYPTO_DIR" ]; then
|
||||
OPT="$OPT -DOSSLCRYPTO_DIR=$OSSLCRYPTO_DIR"
|
||||
fi
|
||||
if [ "$MINICRYPTO_NO_AES" != "1" ]; then
|
||||
echo "#define POLARSSL_AES_ALT" >>$OPC
|
||||
fi
|
||||
echo "#define POLARSSL_SHA1_ALT" >>$OPC
|
||||
echo "#define POLARSSL_SHA256_ALT" >>$OPC
|
||||
echo "#define POLARSSL_SHA512_ALT" >>$OPC
|
||||
if [ "$AES_NI" = "1" ] && [ "$MINICRYPTO_NO_AES" != "1" ]; then
|
||||
echo "#define POLARSSL_USE_OPENSSL_AES_NI" >>$OPC
|
||||
fi
|
||||
fi
|
||||
|
||||
# Enable SSL/TLS server
|
||||
if [ "$ENABLE_SERVER" = "1" ]; then
|
||||
echo "#define POLARSSL_SSL_SRV_C" >>$OPC
|
||||
fi
|
||||
|
||||
# enable PolarSSL file I/O
|
||||
if [ "$ENABLE_FS_IO" = "1" ]; then
|
||||
echo "#define POLARSSL_FS_IO" >>$OPC
|
||||
fi
|
||||
|
||||
# Build shared library
|
||||
if [ "$SHARED" = "1" ]; then
|
||||
OPT="$OPT -DUSE_SHARED_POLARSSL_LIBRARY=1"
|
||||
fi
|
||||
|
||||
# echo options
|
||||
echo OPTIONS $OPT
|
||||
|
||||
# build it
|
||||
pwd
|
||||
cd ../$DIST
|
||||
cmake $OPT ../$POLARSSL_VERSION
|
||||
if [ "$VERBOSE" = "1" ]; then
|
||||
make VERBOSE=1
|
||||
else
|
||||
make
|
||||
fi
|
||||
|
||||
# test it
|
||||
if [ "$ENABLE_TESTING" = "1" ]; then
|
||||
make test
|
||||
fi
|
||||
|
||||
# copy headers
|
||||
cp -a ../$POLARSSL_VERSION/include/polarssl include/
|
||||
exit 0
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
#!/usr/bin/env bash
|
||||
set -e
|
||||
. $O3/core/deps/lib-versions
|
||||
POLARSSL_SRC=$HOME/src/mac/$POLARSSL_VERSION
|
||||
PD=$O3/core/deps/polarssl
|
||||
PB=$(basename $POLARSSL_SRC)
|
||||
|
||||
rm -rf polartmp
|
||||
mkdir polartmp
|
||||
cd polartmp
|
||||
cp -a $POLARSSL_SRC polarssl.new
|
||||
|
||||
# extract the PolarSSL source
|
||||
tar xfz $DL/$PB-gpl.tgz
|
||||
|
||||
cd $PB
|
||||
rm $(find . -type f | grep -E 'Makefile|\.orig$|\.rej$')
|
||||
rm -f CMakeLists.txt include/polarssl/config.h include/polarssl/openvpn-polarssl.h
|
||||
|
||||
cd ../polarssl.new
|
||||
rm -f CMakeLists.txt include/polarssl/config.h include/polarssl/openvpn-polarssl.h
|
||||
cd ..
|
||||
|
||||
if [ "$CRYPTO_ALT_PATCH" = "1" ]; then
|
||||
diff -uNr $PB polarssl.new >$PD/polar-openssl.patch
|
||||
cp $PD/crypto-alt.txt $PD/polarssl-crypto-alt.patch
|
||||
diff -ur $PB polarssl.new | grep -v '^Only in' >>$PD/polarssl-crypto-alt.patch
|
||||
else
|
||||
diff -ur $PB polarssl.new | grep -v '^Only in'
|
||||
fi
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,959 @@
|
||||
/**
|
||||
* \file config.h
|
||||
*
|
||||
* \brief Configuration options (set of defines)
|
||||
*
|
||||
* Copyright (C) 2006-2012, Brainspark B.V.
|
||||
*
|
||||
* This file is part of PolarSSL (http://www.polarssl.org)
|
||||
* Lead Maintainer: Paul Bakker <polarssl_maintainer at polarssl.org>
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* This set of compile-time options may be used to enable
|
||||
* or disable features selectively, and reduce the global
|
||||
* memory footprint.
|
||||
*/
|
||||
#ifndef POLARSSL_CONFIG_H
|
||||
#define POLARSSL_CONFIG_H
|
||||
|
||||
#include <polarssl/openvpn-polarssl.h>
|
||||
|
||||
#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE)
|
||||
#define _CRT_SECURE_NO_DEPRECATE 1
|
||||
#endif
|
||||
|
||||
/**
|
||||
* \name SECTION: System support
|
||||
*
|
||||
* This section sets system specific settings.
|
||||
* \{
|
||||
*/
|
||||
|
||||
/**
|
||||
* \def POLARSSL_HAVE_INT8
|
||||
*
|
||||
* The system uses 8-bit wide native integers.
|
||||
*
|
||||
* Uncomment if native integers are 8-bit wide.
|
||||
#define POLARSSL_HAVE_INT8
|
||||
*/
|
||||
|
||||
/**
|
||||
* \def POLARSSL_HAVE_INT16
|
||||
*
|
||||
* The system uses 16-bit wide native integers.
|
||||
*
|
||||
* Uncomment if native integers are 16-bit wide.
|
||||
#define POLARSSL_HAVE_INT16
|
||||
*/
|
||||
|
||||
/**
|
||||
* \def POLARSSL_HAVE_LONGLONG
|
||||
*
|
||||
* The compiler supports the 'long long' type.
|
||||
* (Only used on 32-bit platforms)
|
||||
*/
|
||||
#define POLARSSL_HAVE_LONGLONG
|
||||
|
||||
/**
|
||||
* \def POLARSSL_HAVE_ASM
|
||||
*
|
||||
* The compiler has support for asm()
|
||||
*
|
||||
* Uncomment to enable the use of assembly code.
|
||||
*
|
||||
* Requires support for asm() in compiler.
|
||||
*
|
||||
* Used in:
|
||||
* library/timing.c
|
||||
* library/padlock.c
|
||||
* include/polarssl/bn_mul.h
|
||||
*
|
||||
*/
|
||||
#define POLARSSL_HAVE_ASM
|
||||
|
||||
/**
|
||||
* \def POLARSSL_HAVE_SSE2
|
||||
*
|
||||
* CPU supports SSE2 instruction set.
|
||||
*
|
||||
* Uncomment if the CPU supports SSE2 (IA-32 specific).
|
||||
*
|
||||
#define POLARSSL_HAVE_SSE2
|
||||
*/
|
||||
/* \} name */
|
||||
|
||||
/**
|
||||
* \name SECTION: PolarSSL feature support
|
||||
*
|
||||
* This section sets support for features that are or are not needed
|
||||
* within the modules that are enabled.
|
||||
* \{
|
||||
*/
|
||||
|
||||
/**
|
||||
* \def POLARSSL_AES_ROM_TABLES
|
||||
*
|
||||
* Store the AES tables in ROM.
|
||||
*
|
||||
* Uncomment this macro to store the AES tables in ROM.
|
||||
*
|
||||
#define POLARSSL_AES_ROM_TABLES
|
||||
*/
|
||||
|
||||
/**
|
||||
* \def POLARSSL_CIPHER_MODE_CFB
|
||||
*
|
||||
* Enable Cipher Feedback mode (CFB) for symmetric ciphers.
|
||||
*/
|
||||
// JY removed
|
||||
//#define POLARSSL_CIPHER_MODE_CFB
|
||||
|
||||
/**
|
||||
* \def POLARSSL_CIPHER_MODE_CTR
|
||||
*
|
||||
* Enable Counter Block Cipher mode (CTR) for symmetric ciphers.
|
||||
*/
|
||||
// JY removed
|
||||
//#define POLARSSL_CIPHER_MODE_CTR
|
||||
|
||||
/**
|
||||
* \def POLARSSL_CIPHER_NULL_CIPHER
|
||||
*
|
||||
* Enable NULL cipher.
|
||||
* Warning: Only do so when you know what you are doing. This allows for
|
||||
* encryption or channels without any security!
|
||||
*
|
||||
* Requires POLARSSL_ENABLE_WEAK_CIPHERSUITES as well to enable
|
||||
* the following ciphersuites:
|
||||
* TLS_RSA_WITH_NULL_MD5
|
||||
* TLS_RSA_WITH_NULL_SHA
|
||||
* TLS_RSA_WITH_NULL_SHA256
|
||||
*
|
||||
* Uncomment this macro to enable the NULL cipher and ciphersuites
|
||||
#define POLARSSL_CIPHER_NULL_CIPHER
|
||||
*/
|
||||
|
||||
/**
|
||||
* \def POLARSSL_ENABLE_WEAK_CIPHERSUITES
|
||||
*
|
||||
* Enable weak ciphersuites in SSL / TLS
|
||||
* Warning: Only do so when you know what you are doing. This allows for
|
||||
* channels with virtually no security at all!
|
||||
*
|
||||
* This enables the following ciphersuites:
|
||||
* TLS_RSA_WITH_DES_CBC_SHA
|
||||
* TLS_DHE_RSA_WITH_DES_CBC_SHA
|
||||
*
|
||||
* Uncomment this macro to enable weak ciphersuites
|
||||
#define POLARSSL_ENABLE_WEAK_CIPHERSUITES
|
||||
*/
|
||||
|
||||
/**
|
||||
* \def POLARSSL_ERROR_STRERROR_DUMMY
|
||||
*
|
||||
* Enable a dummy error function to make use of error_strerror() in
|
||||
* third party libraries easier.
|
||||
*
|
||||
* Disable if you run into name conflicts and want to really remove the
|
||||
* error_strerror()
|
||||
*/
|
||||
#define POLARSSL_ERROR_STRERROR_DUMMY
|
||||
|
||||
/**
|
||||
* \def POLARSSL_GENPRIME
|
||||
*
|
||||
* Requires: POLARSSL_BIGNUM_C, POLARSSL_RSA_C
|
||||
*
|
||||
* Enable the RSA prime-number generation code.
|
||||
*/
|
||||
#define POLARSSL_GENPRIME
|
||||
|
||||
/**
|
||||
* \def POLARSSL_FS_IO
|
||||
*
|
||||
* Enable functions that use the filesystem.
|
||||
*/
|
||||
// JY removed
|
||||
//#define POLARSSL_FS_IO
|
||||
|
||||
/**
|
||||
* \def POLARSSL_NO_DEFAULT_ENTROPY_SOURCES
|
||||
*
|
||||
* Do not add default entropy sources. These are the platform specific,
|
||||
* hardclock and HAVEGE based poll functions.
|
||||
*
|
||||
* This is useful to have more control over the added entropy sources in an
|
||||
* application.
|
||||
*
|
||||
* Uncomment this macro to prevent loading of default entropy functions.
|
||||
#define POLARSSL_NO_DEFAULT_ENTROPY_SOURCES
|
||||
*/
|
||||
|
||||
/**
|
||||
* \def POLARSSL_NO_PLATFORM_ENTROPY
|
||||
*
|
||||
* Do not use built-in platform entropy functions.
|
||||
* This is useful if your platform does not support
|
||||
* standards like the /dev/urandom or Windows CryptoAPI.
|
||||
*
|
||||
* Uncomment this macro to disable the built-in platform entropy functions.
|
||||
#define POLARSSL_NO_PLATFORM_ENTROPY
|
||||
*/
|
||||
|
||||
// JY added
|
||||
#ifdef EXTERNAL_RNG
|
||||
#define POLARSSL_NO_DEFAULT_ENTROPY_SOURCES
|
||||
#define POLARSSL_NO_PLATFORM_ENTROPY
|
||||
#endif
|
||||
|
||||
/**
|
||||
* \def POLARSSL_PKCS1_V21
|
||||
*
|
||||
* Requires: POLARSSL_MD_C, POLARSSL_RSA_C
|
||||
*
|
||||
* Enable support for PKCS#1 v2.1 encoding.
|
||||
* This enables support for RSAES-OAEP and RSASSA-PSS operations.
|
||||
*/
|
||||
#define POLARSSL_PKCS1_V21
|
||||
|
||||
/**
|
||||
* \def POLARSSL_RSA_NO_CRT
|
||||
*
|
||||
* Do not use the Chinese Remainder Theorem for the RSA private operation.
|
||||
*
|
||||
* Uncomment this macro to disable the use of CRT in RSA.
|
||||
*
|
||||
#define POLARSSL_RSA_NO_CRT
|
||||
*/
|
||||
|
||||
/**
|
||||
* \def POLARSSL_SELF_TEST
|
||||
*
|
||||
* Enable the checkup functions (*_self_test).
|
||||
*/
|
||||
// JY changed
|
||||
#if defined(ENABLE_TESTING) && !defined(POLARSSL_SELF_TEST)
|
||||
#define POLARSSL_SELF_TEST
|
||||
#endif
|
||||
|
||||
/**
|
||||
* \def POLARSSL_SSL_ALL_ALERT_MESSAGES
|
||||
*
|
||||
* Enable sending of alert messages in case of encountered errors as per RFC.
|
||||
* If you choose not to send the alert messages, PolarSSL can still communicate
|
||||
* with other servers, only debugging of failures is harder.
|
||||
*
|
||||
* The advantage of not sending alert messages, is that no information is given
|
||||
* about reasons for failures thus preventing adversaries of gaining intel.
|
||||
*
|
||||
* Enable sending of all alert messages
|
||||
*/
|
||||
#define POLARSSL_SSL_ALERT_MESSAGES
|
||||
|
||||
/**
|
||||
* \def POLARSSL_SSL_DEBUG_ALL
|
||||
*
|
||||
* Enable the debug messages in SSL module for all issues.
|
||||
* Debug messages have been disabled in some places to prevent timing
|
||||
* attacks due to (unbalanced) debugging function calls.
|
||||
*
|
||||
* If you need all error reporting you should enable this during debugging,
|
||||
* but remove this for production servers that should log as well.
|
||||
*
|
||||
* Uncomment this macro to report all debug messages on errors introducing
|
||||
* a timing side-channel.
|
||||
*
|
||||
#define POLARSSL_SSL_DEBUG_ALL
|
||||
*/
|
||||
|
||||
/**
|
||||
* \def POLARSSL_SSL_HW_RECORD_ACCEL
|
||||
*
|
||||
* Enable hooking functions in SSL module for hardware acceleration of
|
||||
* individual records.
|
||||
*
|
||||
* Uncomment this macro to enable hooking functions.
|
||||
#define POLARSSL_SSL_HW_RECORD_ACCEL
|
||||
*/
|
||||
|
||||
/**
|
||||
* \def POLARSSL_SSL_SRV_SUPPORT_SSLV2_CLIENT_HELLO
|
||||
*
|
||||
* Enable support for receiving and parsing SSLv2 Client Hello messages for the
|
||||
* SSL Server module (POLARSSL_SSL_SRV_C)
|
||||
*
|
||||
* Comment this macro to disable support for SSLv2 Client Hello messages.
|
||||
*/
|
||||
// JY removed
|
||||
//#define POLARSSL_SSL_SRV_SUPPORT_SSLV2_CLIENT_HELLO
|
||||
|
||||
/**
|
||||
* \def POLARSSL_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION
|
||||
*
|
||||
* If set, the X509 parser will not break-off when parsing an X509 certificate
|
||||
* and encountering an unknown critical extension.
|
||||
*
|
||||
* Uncomment to prevent an error.
|
||||
*
|
||||
#define POLARSSL_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION
|
||||
*/
|
||||
|
||||
/**
|
||||
* \def POLARSSL_ZLIB_SUPPORT
|
||||
*
|
||||
* If set, the SSL/TLS module uses ZLIB to support compression and
|
||||
* decompression of packet data.
|
||||
*
|
||||
* Used in: library/ssl_tls.c
|
||||
* library/ssl_cli.c
|
||||
* library/ssl_srv.c
|
||||
*
|
||||
* This feature requires zlib library and headers to be present.
|
||||
*
|
||||
* Uncomment to enable use of ZLIB
|
||||
#define POLARSSL_ZLIB_SUPPORT
|
||||
*/
|
||||
/* \} name */
|
||||
|
||||
/**
|
||||
* \name SECTION: PolarSSL modules
|
||||
*
|
||||
* This section enables or disables entire modules in PolarSSL
|
||||
* \{
|
||||
*/
|
||||
|
||||
/**
|
||||
* \def POLARSSL_AES_C
|
||||
*
|
||||
* Enable the AES block cipher.
|
||||
*
|
||||
* Module: library/aes.c
|
||||
* Caller: library/ssl_tls.c
|
||||
* library/pem.c
|
||||
* library/ctr_drbg.c
|
||||
*
|
||||
* This module enables the following ciphersuites (if other requisites are
|
||||
* enabled as well):
|
||||
* TLS_RSA_WITH_AES_128_CBC_SHA
|
||||
* TLS_RSA_WITH_AES_256_CBC_SHA
|
||||
* TLS_DHE_RSA_WITH_AES_128_CBC_SHA
|
||||
* TLS_DHE_RSA_WITH_AES_256_CBC_SHA
|
||||
* TLS_RSA_WITH_AES_128_CBC_SHA256
|
||||
* TLS_RSA_WITH_AES_256_CBC_SHA256
|
||||
* TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
|
||||
* TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
|
||||
* TLS_RSA_WITH_AES_128_GCM_SHA256
|
||||
* TLS_RSA_WITH_AES_256_GCM_SHA384
|
||||
*
|
||||
* PEM uses AES for decrypting encrypted keys.
|
||||
*/
|
||||
#define POLARSSL_AES_C
|
||||
|
||||
/**
|
||||
* \def POLARSSL_ARC4_C
|
||||
*
|
||||
* Enable the ARCFOUR stream cipher.
|
||||
*
|
||||
* Module: library/arc4.c
|
||||
* Caller: library/ssl_tls.c
|
||||
*
|
||||
* This module enables the following ciphersuites:
|
||||
* TLS_RSA_WITH_RC4_128_MD5
|
||||
* TLS_RSA_WITH_RC4_128_SHA
|
||||
*/
|
||||
// JY removed
|
||||
//#define POLARSSL_ARC4_C
|
||||
|
||||
/**
|
||||
* \def POLARSSL_ASN1_PARSE_C
|
||||
*
|
||||
* Enable the generic ASN1 parser.
|
||||
*
|
||||
* Module: library/asn1.c
|
||||
* Caller: library/x509parse.c
|
||||
*/
|
||||
#define POLARSSL_ASN1_PARSE_C
|
||||
|
||||
/**
|
||||
* \def POLARSSL_ASN1_WRITE_C
|
||||
*
|
||||
* Enable the generic ASN1 writer.
|
||||
*
|
||||
* Module: library/asn1write.c
|
||||
*/
|
||||
// JY removed
|
||||
//#define POLARSSL_ASN1_WRITE_C
|
||||
|
||||
/**
|
||||
* \def POLARSSL_BASE64_C
|
||||
*
|
||||
* Enable the Base64 module.
|
||||
*
|
||||
* Module: library/base64.c
|
||||
* Caller: library/pem.c
|
||||
*
|
||||
* This module is required for PEM support (required by X.509).
|
||||
*/
|
||||
#define POLARSSL_BASE64_C
|
||||
|
||||
/**
|
||||
* \def POLARSSL_BIGNUM_C
|
||||
*
|
||||
* Enable the multi-precision integer library.
|
||||
*
|
||||
* Module: library/bignum.c
|
||||
* Caller: library/dhm.c
|
||||
* library/rsa.c
|
||||
* library/ssl_tls.c
|
||||
* library/x509parse.c
|
||||
*
|
||||
* This module is required for RSA and DHM support.
|
||||
*/
|
||||
#define POLARSSL_BIGNUM_C
|
||||
|
||||
/**
|
||||
* \def POLARSSL_BLOWFISH_C
|
||||
*
|
||||
* Enable the Blowfish block cipher.
|
||||
*
|
||||
* Module: library/blowfish.c
|
||||
*/
|
||||
#define POLARSSL_BLOWFISH_C
|
||||
|
||||
/**
|
||||
* \def POLARSSL_CAMELLIA_C
|
||||
*
|
||||
* Enable the Camellia block cipher.
|
||||
*
|
||||
* Module: library/camellia.c
|
||||
* Caller: library/ssl_tls.c
|
||||
*
|
||||
* This module enables the following ciphersuites (if other requisites are
|
||||
* enabled as well):
|
||||
* TLS_RSA_WITH_CAMELLIA_128_CBC_SHA
|
||||
* TLS_RSA_WITH_CAMELLIA_256_CBC_SHA
|
||||
* TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA
|
||||
* TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA
|
||||
* TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256
|
||||
* TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256
|
||||
* TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256
|
||||
* TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256
|
||||
*/
|
||||
// JY removed
|
||||
//#define POLARSSL_CAMELLIA_C
|
||||
|
||||
/**
|
||||
* \def POLARSSL_CERTS_C
|
||||
*
|
||||
* Enable the test certificates.
|
||||
*
|
||||
* Module: library/certs.c
|
||||
* Caller:
|
||||
*
|
||||
* This module is used for testing (ssl_client/server).
|
||||
*/
|
||||
// JY changed
|
||||
#ifdef ENABLE_TESTING
|
||||
#define POLARSSL_CERTS_C
|
||||
#endif
|
||||
|
||||
/**
|
||||
* \def POLARSSL_CIPHER_C
|
||||
*
|
||||
* Enable the generic cipher layer.
|
||||
*
|
||||
* Module: library/cipher.c
|
||||
* Caller:
|
||||
*
|
||||
* Uncomment to enable generic cipher wrappers.
|
||||
*/
|
||||
#define POLARSSL_CIPHER_C
|
||||
|
||||
/**
|
||||
* \def POLARSSL_CTR_DRBG_C
|
||||
*
|
||||
* Enable the CTR_DRBG AES-256-based random generator
|
||||
*
|
||||
* Module: library/ctr_drbg.c
|
||||
* Caller:
|
||||
*
|
||||
* Requires: POLARSSL_AES_C
|
||||
*
|
||||
* This module provides the CTR_DRBG AES-256 random number generator.
|
||||
*/
|
||||
// JY added
|
||||
#ifndef EXTERNAL_RNG
|
||||
#define POLARSSL_CTR_DRBG_C
|
||||
#endif
|
||||
|
||||
/**
|
||||
* \def POLARSSL_DEBUG_C
|
||||
*
|
||||
* Enable the debug functions.
|
||||
*
|
||||
* Module: library/debug.c
|
||||
* Caller: library/ssl_cli.c
|
||||
* library/ssl_srv.c
|
||||
* library/ssl_tls.c
|
||||
*
|
||||
* This module provides debugging functions.
|
||||
*/
|
||||
#define POLARSSL_DEBUG_C
|
||||
|
||||
/**
|
||||
* \def POLARSSL_DES_C
|
||||
*
|
||||
* Enable the DES block cipher.
|
||||
*
|
||||
* Module: library/des.c
|
||||
* Caller: library/pem.c
|
||||
* library/ssl_tls.c
|
||||
*
|
||||
* This module enables the following ciphersuites (if other requisites are
|
||||
* enabled as well):
|
||||
* TLS_RSA_WITH_3DES_EDE_CBC_SHA
|
||||
* TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA
|
||||
*
|
||||
* PEM uses DES/3DES for decrypting encrypted keys.
|
||||
*/
|
||||
#define POLARSSL_DES_C
|
||||
|
||||
/**
|
||||
* \def POLARSSL_DHM_C
|
||||
*
|
||||
* Enable the Diffie-Hellman-Merkle key exchange.
|
||||
*
|
||||
* Module: library/dhm.c
|
||||
* Caller: library/ssl_cli.c
|
||||
* library/ssl_srv.c
|
||||
*
|
||||
* This module enables the following ciphersuites (if other requisites are
|
||||
* enabled as well):
|
||||
* TLS_DHE_RSA_WITH_DES_CBC_SHA
|
||||
* TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA
|
||||
* TLS_DHE_RSA_WITH_AES_128_CBC_SHA
|
||||
* TLS_DHE_RSA_WITH_AES_256_CBC_SHA
|
||||
* TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
|
||||
* TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
|
||||
* TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA
|
||||
* TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA
|
||||
* TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256
|
||||
* TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256
|
||||
* TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
|
||||
* TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
|
||||
*/
|
||||
#define POLARSSL_DHM_C
|
||||
|
||||
/**
|
||||
* \def POLARSSL_ENTROPY_C
|
||||
*
|
||||
* Enable the platform-specific entropy code.
|
||||
*
|
||||
* Module: library/entropy.c
|
||||
* Caller:
|
||||
*
|
||||
* Requires: POLARSSL_SHA4_C
|
||||
*
|
||||
* This module provides a generic entropy pool
|
||||
*/
|
||||
#define POLARSSL_ENTROPY_C
|
||||
|
||||
/**
|
||||
* \def POLARSSL_ERROR_C
|
||||
*
|
||||
* Enable error code to error string conversion.
|
||||
*
|
||||
* Module: library/error.c
|
||||
* Caller:
|
||||
*
|
||||
* This module enables err_strerror().
|
||||
*/
|
||||
#define POLARSSL_ERROR_C
|
||||
|
||||
/**
|
||||
* \def POLARSSL_GCM_C
|
||||
*
|
||||
* Enable the Galois/Counter Mode (GCM) for AES
|
||||
*
|
||||
* Module: library/gcm.c
|
||||
*
|
||||
* Requires: POLARSSL_AES_C
|
||||
*
|
||||
* This module enables the following ciphersuites (if other requisites are
|
||||
* enabled as well):
|
||||
* TLS_RSA_WITH_AES_128_GCM_SHA256
|
||||
* TLS_RSA_WITH_AES_256_GCM_SHA384
|
||||
*/
|
||||
#define POLARSSL_GCM_C
|
||||
|
||||
/**
|
||||
* \def POLARSSL_HAVEGE_C
|
||||
*
|
||||
* Enable the HAVEGE random generator.
|
||||
*
|
||||
* Module: library/havege.c
|
||||
* Caller:
|
||||
*
|
||||
* Requires: POLARSSL_TIMING_C
|
||||
*
|
||||
* This module enables the HAVEGE random number generator.
|
||||
*/
|
||||
// JY removed
|
||||
//#define POLARSSL_HAVEGE_C
|
||||
|
||||
/**
|
||||
* \def POLARSSL_MD_C
|
||||
*
|
||||
* Enable the generic message digest layer.
|
||||
*
|
||||
* Module: library/md.c
|
||||
* Caller:
|
||||
*
|
||||
* Uncomment to enable generic message digest wrappers.
|
||||
*/
|
||||
#define POLARSSL_MD_C
|
||||
|
||||
/**
|
||||
* \def POLARSSL_MD2_C
|
||||
*
|
||||
* Enable the MD2 hash algorithm
|
||||
*
|
||||
* Module: library/md2.c
|
||||
* Caller: library/x509parse.c
|
||||
*
|
||||
* Uncomment to enable support for (rare) MD2-signed X.509 certs.
|
||||
*
|
||||
#define POLARSSL_MD2_C
|
||||
*/
|
||||
|
||||
/**
|
||||
* \def POLARSSL_MD4_C
|
||||
*
|
||||
* Enable the MD4 hash algorithm
|
||||
*
|
||||
* Module: library/md4.c
|
||||
* Caller: library/x509parse.c
|
||||
*
|
||||
* Uncomment to enable support for (rare) MD4-signed X.509 certs.
|
||||
*
|
||||
*/
|
||||
// JY Added for NTLM proxy auth
|
||||
#define POLARSSL_MD4_C
|
||||
|
||||
/**
|
||||
* \def POLARSSL_MD5_C
|
||||
*
|
||||
* Enable the MD5 hash algorithm
|
||||
*
|
||||
* Module: library/md5.c
|
||||
* Caller: library/pem.c
|
||||
* library/ssl_tls.c
|
||||
* library/x509parse.c
|
||||
*
|
||||
* This module is required for SSL/TLS and X.509.
|
||||
* PEM uses MD5 for decrypting encrypted keys.
|
||||
*/
|
||||
#define POLARSSL_MD5_C
|
||||
|
||||
/**
|
||||
* \def POLARSSL_NET_C
|
||||
*
|
||||
* Enable the TCP/IP networking routines.
|
||||
*
|
||||
* Module: library/net.c
|
||||
* Caller:
|
||||
*
|
||||
* This module provides TCP/IP networking routines.
|
||||
*/
|
||||
// JY removed
|
||||
//#define POLARSSL_NET_C
|
||||
|
||||
/**
|
||||
* \def POLARSSL_PADLOCK_C
|
||||
*
|
||||
* Enable VIA Padlock support on x86.
|
||||
*
|
||||
* Module: library/padlock.c
|
||||
* Caller: library/aes.c
|
||||
*
|
||||
* This modules adds support for the VIA PadLock on x86.
|
||||
*/
|
||||
// JY removed
|
||||
//#define POLARSSL_PADLOCK_C
|
||||
|
||||
/**
|
||||
* \def POLARSSL_PBKDF2_C
|
||||
*
|
||||
* Enable PKCS#5 PBKDF2 key derivation function
|
||||
* DEPRECATED: Use POLARSSL_PKCS5_C instead
|
||||
*
|
||||
* Module: library/pbkdf2.c
|
||||
*
|
||||
* Requires: POLARSSL_PKCS5_C
|
||||
*
|
||||
* This module adds support for the PKCS#5 PBKDF2 key derivation function.
|
||||
#define POLARSSL_PBKDF2_C
|
||||
*/
|
||||
|
||||
/**
|
||||
* \def POLARSSL_PEM_C
|
||||
*
|
||||
* Enable PEM decoding
|
||||
*
|
||||
* Module: library/pem.c
|
||||
* Caller: library/x509parse.c
|
||||
*
|
||||
* Requires: POLARSSL_BASE64_C
|
||||
*
|
||||
* This modules adds support for decoding PEM files.
|
||||
*/
|
||||
#define POLARSSL_PEM_C
|
||||
|
||||
/**
|
||||
* \def POLARSSL_PKCS5_C
|
||||
*
|
||||
* Enable PKCS#5 functions
|
||||
*
|
||||
* Module: library/pkcs5.c
|
||||
*
|
||||
* Requires: POLARSSL_MD_C
|
||||
*
|
||||
* This module adds support for the PKCS#5 functions.
|
||||
*/
|
||||
#define POLARSSL_PKCS5_C
|
||||
|
||||
/**
|
||||
* \def POLARSSL_PKCS11_C
|
||||
*
|
||||
* Enable wrapper for PKCS#11 smartcard support.
|
||||
*
|
||||
* Module: library/ssl_srv.c
|
||||
* Caller: library/ssl_cli.c
|
||||
* library/ssl_srv.c
|
||||
*
|
||||
* Requires: POLARSSL_SSL_TLS_C
|
||||
*
|
||||
* This module enables SSL/TLS PKCS #11 smartcard support.
|
||||
* Requires the presence of the PKCS#11 helper library (libpkcs11-helper)
|
||||
#define POLARSSL_PKCS11_C
|
||||
*/
|
||||
|
||||
/**
|
||||
* \def POLARSSL_PKCS12_C
|
||||
*
|
||||
* Enable PKCS#12 PBE functions
|
||||
* Adds algorithms for parsing PKCS#8 encrypted private keys
|
||||
*
|
||||
* Module: library/pkcs12.c
|
||||
* Caller: library/x509parse.c
|
||||
*
|
||||
* Requires: POLARSSL_ASN1_PARSE_C
|
||||
* Can use: POLARSSL_SHA1_C, POLARSSL_DES_C, POLARSSL_ARC4_C
|
||||
*
|
||||
* This module enables PKCS#12 functions.
|
||||
*/
|
||||
#define POLARSSL_PKCS12_C
|
||||
|
||||
/**
|
||||
* \def POLARSSL_RSA_C
|
||||
*
|
||||
* Enable the RSA public-key cryptosystem.
|
||||
*
|
||||
* Module: library/rsa.c
|
||||
* Caller: library/ssl_cli.c
|
||||
* library/ssl_srv.c
|
||||
* library/ssl_tls.c
|
||||
* library/x509.c
|
||||
*
|
||||
* Requires: POLARSSL_BIGNUM_C
|
||||
*
|
||||
* This module is required for SSL/TLS and MD5-signed certificates.
|
||||
*/
|
||||
#define POLARSSL_RSA_C
|
||||
|
||||
/**
|
||||
* \def POLARSSL_SHA1_C
|
||||
*
|
||||
* Enable the SHA1 cryptographic hash algorithm.
|
||||
*
|
||||
* Module: library/sha1.c
|
||||
* Caller: library/ssl_cli.c
|
||||
* library/ssl_srv.c
|
||||
* library/ssl_tls.c
|
||||
* library/x509parse.c
|
||||
*
|
||||
* This module is required for SSL/TLS and SHA1-signed certificates.
|
||||
*/
|
||||
#define POLARSSL_SHA1_C
|
||||
|
||||
/**
|
||||
* \def POLARSSL_SHA2_C
|
||||
*
|
||||
* Enable the SHA-224 and SHA-256 cryptographic hash algorithms.
|
||||
*
|
||||
* Module: library/sha2.c
|
||||
* Caller: library/md_wrap.c
|
||||
* library/x509parse.c
|
||||
*
|
||||
* This module adds support for SHA-224 and SHA-256.
|
||||
* This module is required for the SSL/TLS 1.2 PRF function.
|
||||
*/
|
||||
#define POLARSSL_SHA2_C
|
||||
|
||||
/**
|
||||
* \def POLARSSL_SHA4_C
|
||||
*
|
||||
* Enable the SHA-384 and SHA-512 cryptographic hash algorithms.
|
||||
*
|
||||
* Module: library/sha4.c
|
||||
* Caller: library/md_wrap.c
|
||||
* library/x509parse.c
|
||||
*
|
||||
* This module adds support for SHA-384 and SHA-512.
|
||||
*/
|
||||
#define POLARSSL_SHA4_C
|
||||
|
||||
/**
|
||||
* \def POLARSSL_SSL_CACHE_C
|
||||
*
|
||||
* Enable simple SSL cache implementation.
|
||||
*
|
||||
* Module: library/ssl_cache.c
|
||||
* Caller:
|
||||
*
|
||||
* Requires: POLARSSL_SSL_CACHE_C
|
||||
*/
|
||||
// JY removed
|
||||
//#define POLARSSL_SSL_CACHE_C
|
||||
|
||||
/**
|
||||
* \def POLARSSL_SSL_CLI_C
|
||||
*
|
||||
* Enable the SSL/TLS client code.
|
||||
*
|
||||
* Module: library/ssl_cli.c
|
||||
* Caller:
|
||||
*
|
||||
* Requires: POLARSSL_SSL_TLS_C
|
||||
*
|
||||
* This module is required for SSL/TLS client support.
|
||||
*/
|
||||
#define POLARSSL_SSL_CLI_C
|
||||
|
||||
/**
|
||||
* \def POLARSSL_SSL_SRV_C
|
||||
*
|
||||
* Enable the SSL/TLS server code.
|
||||
*
|
||||
* Module: library/ssl_srv.c
|
||||
* Caller:
|
||||
*
|
||||
* Requires: POLARSSL_SSL_TLS_C
|
||||
*
|
||||
* This module is required for SSL/TLS server support.
|
||||
*/
|
||||
// JY removed
|
||||
//#define POLARSSL_SSL_SRV_C
|
||||
|
||||
/**
|
||||
* \def POLARSSL_SSL_TLS_C
|
||||
*
|
||||
* Enable the generic SSL/TLS code.
|
||||
*
|
||||
* Module: library/ssl_tls.c
|
||||
* Caller: library/ssl_cli.c
|
||||
* library/ssl_srv.c
|
||||
*
|
||||
* Requires: POLARSSL_MD5_C, POLARSSL_SHA1_C, POLARSSL_X509_PARSE_C
|
||||
*
|
||||
* This module is required for SSL/TLS.
|
||||
*/
|
||||
#define POLARSSL_SSL_TLS_C
|
||||
|
||||
/**
|
||||
* \def POLARSSL_TIMING_C
|
||||
*
|
||||
* Enable the portable timing interface.
|
||||
*
|
||||
* Module: library/timing.c
|
||||
* Caller: library/havege.c
|
||||
*
|
||||
* This module is used by the HAVEGE random number generator.
|
||||
*/
|
||||
// JY removed
|
||||
//#define POLARSSL_TIMING_C
|
||||
|
||||
/**
|
||||
* \def POLARSSL_VERSION_C
|
||||
*
|
||||
* Enable run-time version information.
|
||||
*
|
||||
* Module: library/version.c
|
||||
*
|
||||
* This module provides run-time version information.
|
||||
*/
|
||||
#define POLARSSL_VERSION_C
|
||||
|
||||
/**
|
||||
* \def POLARSSL_X509_PARSE_C
|
||||
*
|
||||
* Enable X.509 certificate parsing.
|
||||
*
|
||||
* Module: library/x509parse.c
|
||||
* Caller: library/ssl_cli.c
|
||||
* library/ssl_srv.c
|
||||
* library/ssl_tls.c
|
||||
*
|
||||
* Requires: POLARSSL_ASN1_PARSE_C, POLARSSL_BIGNUM_C, POLARSSL_RSA_C
|
||||
*
|
||||
* This module is required for X.509 certificate parsing.
|
||||
*/
|
||||
#define POLARSSL_X509_PARSE_C
|
||||
|
||||
/**
|
||||
* \def POLARSSL_X509_WRITE_C
|
||||
*
|
||||
* Enable X.509 buffer writing.
|
||||
*
|
||||
* Module: library/x509write.c
|
||||
*
|
||||
* Requires: POLARSSL_BIGNUM_C, POLARSSL_RSA_C
|
||||
*
|
||||
* This module is required for X.509 certificate request writing.
|
||||
*/
|
||||
// JY removed
|
||||
//#define POLARSSL_X509_WRITE_C
|
||||
|
||||
/**
|
||||
* \def POLARSSL_XTEA_C
|
||||
*
|
||||
* Enable the XTEA block cipher.
|
||||
*
|
||||
* Module: library/xtea.c
|
||||
* Caller:
|
||||
*/
|
||||
// JY removed
|
||||
//#define POLARSSL_XTEA_C
|
||||
/* \} name */
|
||||
|
||||
// JY added
|
||||
#define POLARSSL_BLOWFISH_NAME "BF"
|
||||
#define POLARSSL_BLOWFISH_DEFAULT_KEY_LEN 128
|
||||
|
||||
#endif /* config.h */
|
||||
@@ -0,0 +1,16 @@
|
||||
This patch (against PolarSSL 1.2.7) allows alternative crypto
|
||||
implementations to be compiled, without actually defining
|
||||
such implementations.
|
||||
|
||||
* define POLARSSL_AES_ALT to include alternative AES implementation
|
||||
from polarssl/aes_alt.h
|
||||
|
||||
* define POLARSSL_SHA1_ALT to include alternative SHA1 implementation
|
||||
from polarssl/sha1_alt.h
|
||||
|
||||
* define POLARSSL_SHA2_ALT to include alternative SHA2 implementation
|
||||
from polarssl/sha2_alt.h
|
||||
|
||||
* define POLARSSL_SHA4_ALT to include alternative SHA4 implementation
|
||||
from polarssl/sha4_alt.h
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
diff -ur polarssl-1.3.4/library/dhm.c polarssl.new/library/dhm.c
|
||||
--- polarssl-1.3.4/library/dhm.c 2014-01-27 05:36:23.000000000 -0700
|
||||
+++ polarssl.new/library/dhm.c 2014-03-02 14:47:02.000000000 -0700
|
||||
@@ -32,6 +32,8 @@
|
||||
|
||||
#if defined(POLARSSL_DHM_C)
|
||||
|
||||
+#include "polarssl/x509.h" // for POLARSSL_ERR_X509_FEATURE_UNAVAILABLE
|
||||
+
|
||||
#include "polarssl/dhm.h"
|
||||
|
||||
#if defined(POLARSSL_PEM_PARSE_C)
|
||||
@@ -0,0 +1,12 @@
|
||||
diff -ur polarssl-1.3.8.orig/library/entropy.c polarssl-1.3.8/library/entropy.c
|
||||
--- polarssl-1.3.8.orig/library/entropy.c 2014-07-09 03:34:48.000000000 -0600
|
||||
+++ polarssl-1.3.8/library/entropy.c 2014-07-09 16:27:06.000000000 -0600
|
||||
@@ -34,7 +34,7 @@
|
||||
#include "polarssl/entropy.h"
|
||||
#include "polarssl/entropy_poll.h"
|
||||
|
||||
-#if defined(POLARSSL_FS_IO)
|
||||
+#if defined(POLARSSL_FS_IO) || defined(POLARSSL_SELF_TEST)
|
||||
#include <stdio.h>
|
||||
#endif
|
||||
|
||||
Executable
+9
@@ -0,0 +1,9 @@
|
||||
#!/usr/bin/env bash
|
||||
. $O3/core/deps/lib-versions
|
||||
rm -rf gitar.tmp
|
||||
mkdir gitar.tmp
|
||||
cd gitar.tmp
|
||||
git clone https://github.com/polarssl/polarssl.git -b $POLARSSL_VERSION $POLARSSL_VERSION
|
||||
tar cfz $DL/$POLARSSL_VERSION-gpl.tgz $POLARSSL_VERSION
|
||||
cd ..
|
||||
rm -rf gitar.tmp
|
||||
@@ -0,0 +1,22 @@
|
||||
#if defined(_WIN32)
|
||||
typedef unsigned __int64 IA32CAP;
|
||||
#else
|
||||
typedef unsigned long long IA32CAP;
|
||||
#endif
|
||||
|
||||
IA32CAP OPENSSL_ia32_cpuid(void);
|
||||
|
||||
unsigned int OPENSSL_ia32cap_P[2]; // GLOBAL
|
||||
|
||||
void OPENSSL_cpuid_setup(void)
|
||||
{
|
||||
const IA32CAP vec = OPENSSL_ia32_cpuid();
|
||||
|
||||
/*
|
||||
* |(1<<10) sets a reserved bit to signal that variable
|
||||
* was initialized already... This is to avoid interference
|
||||
* with cpuid snippets in ELF .init segment.
|
||||
*/
|
||||
OPENSSL_ia32cap_P[0] = (unsigned int)vec|(1<<10);
|
||||
OPENSSL_ia32cap_P[1] = (unsigned int)(vec>>32);
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
# this one is important
|
||||
SET(CMAKE_SYSTEM_NAME Linux)
|
||||
#this one not so much
|
||||
SET(CMAKE_SYSTEM_VERSION 1)
|
||||
|
||||
# specify the cross compiler
|
||||
SET(CMAKE_C_COMPILER arm-linux-gnueabi-gcc-4.6)
|
||||
SET(CMAKE_CXX_COMPILER arm-linux-gnueabi-g++-4.6)
|
||||
|
||||
# where is the target environment
|
||||
#SET(CMAKE_FIND_ROOT_PATH /opt/eldk-2007-01-19/ppc_74xx /home/alex/eldk-ppc74xx-inst)
|
||||
|
||||
# search for programs in the build host directories
|
||||
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
||||
# for libraries and headers in the target directories
|
||||
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
||||
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
||||
@@ -0,0 +1,782 @@
|
||||
diff -uNr polarssl-1.2.7/include/polarssl/aes.h polarssl.new/include/polarssl/aes.h
|
||||
--- polarssl-1.2.7/include/polarssl/aes.h 2013-04-13 03:56:17.000000000 -0600
|
||||
+++ polarssl.new/include/polarssl/aes.h 2013-06-07 17:43:56.000000000 -0600
|
||||
@@ -29,6 +29,8 @@
|
||||
|
||||
#include <string.h>
|
||||
|
||||
+#include "config.h"
|
||||
+
|
||||
#ifdef _MSC_VER
|
||||
#include <basetsd.h>
|
||||
typedef UINT32 uint32_t;
|
||||
@@ -42,6 +44,12 @@
|
||||
#define POLARSSL_ERR_AES_INVALID_KEY_LENGTH -0x0020 /**< Invalid key length. */
|
||||
#define POLARSSL_ERR_AES_INVALID_INPUT_LENGTH -0x0022 /**< Invalid data input length. */
|
||||
|
||||
+#ifdef POLARSSL_AES_ALT
|
||||
+
|
||||
+#include "polarssl/aes_alt.h"
|
||||
+
|
||||
+#else
|
||||
+
|
||||
/**
|
||||
* \brief AES context structure
|
||||
*/
|
||||
@@ -169,6 +177,17 @@
|
||||
unsigned char stream_block[16],
|
||||
const unsigned char *input,
|
||||
unsigned char *output );
|
||||
+
|
||||
+#ifdef __cplusplus
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
+#endif /* POLARSSL_AES_ALT */
|
||||
+
|
||||
+#ifdef __cplusplus
|
||||
+extern "C" {
|
||||
+#endif
|
||||
+
|
||||
/**
|
||||
* \brief Checkup routine
|
||||
*
|
||||
diff -uNr polarssl-1.2.7/include/polarssl/aes_alt.h polarssl.new/include/polarssl/aes_alt.h
|
||||
--- polarssl-1.2.7/include/polarssl/aes_alt.h 1969-12-31 17:00:00.000000000 -0700
|
||||
+++ polarssl.new/include/polarssl/aes_alt.h 2013-06-07 18:18:37.000000000 -0600
|
||||
@@ -0,0 +1,183 @@
|
||||
+/*
|
||||
+ * Use OpenSSL implementation of AES methods to get asm and hardware acceleration.
|
||||
+ * Don't include this file directly, it is included by aes.h when
|
||||
+ * POLARSSL_AES_ALT is defined.
|
||||
+ */
|
||||
+
|
||||
+#ifdef _MSC_VER
|
||||
+#include <basetsd.h>
|
||||
+typedef UINT32 uint32_t;
|
||||
+#else
|
||||
+#include <inttypes.h>
|
||||
+#endif
|
||||
+
|
||||
+#define OPENSSL_AES_BLOCK_SIZE 16
|
||||
+#define OPENSSL_AES_MAXNR 14
|
||||
+
|
||||
+/**
|
||||
+ * \brief AES context structure
|
||||
+ */
|
||||
+typedef struct
|
||||
+{
|
||||
+ uint32_t rd_key[4 * (OPENSSL_AES_MAXNR + 1)];
|
||||
+ int rounds;
|
||||
+}
|
||||
+aes_context;
|
||||
+
|
||||
+#ifdef __cplusplus
|
||||
+extern "C" {
|
||||
+#endif
|
||||
+
|
||||
+#if defined(POLARSSL_USE_OPENSSL_AES_NI)
|
||||
+
|
||||
+int aesni_set_encrypt_key(const unsigned char *userKey, const int bits,
|
||||
+ aes_context *key);
|
||||
+int aesni_set_decrypt_key(const unsigned char *userKey, const int bits,
|
||||
+ aes_context *key);
|
||||
+void aesni_ecb_encrypt(const unsigned char *in, unsigned char *out,
|
||||
+ size_t length, const aes_context *key, const int enc);
|
||||
+void aesni_cbc_encrypt(const unsigned char *in, unsigned char *out,
|
||||
+ size_t length, const aes_context *key,
|
||||
+ unsigned char *ivec, const int enc);
|
||||
+
|
||||
+#define OPENSSL_AES_SET_ENCRYPT_KEY(k,b,c) aesni_set_encrypt_key(k,b,c)
|
||||
+#define OPENSSL_AES_SET_DECRYPT_KEY(k,b,c) aesni_set_decrypt_key(k,b,c)
|
||||
+#define OPENSSL_AES_ECB_ENCRYPT(i,o,k) aesni_ecb_encrypt(i,o,16,k,AES_ENCRYPT)
|
||||
+#define OPENSSL_AES_ECB_DECRYPT(i,o,k) aesni_ecb_encrypt(i,o,16,k,AES_DECRYPT)
|
||||
+#define OPENSSL_AES_CBC_ENCRYPT(i,o,l,k,iv,e) aesni_cbc_encrypt(i,o,l,k,iv,e)
|
||||
+
|
||||
+#else
|
||||
+
|
||||
+int AES_set_encrypt_key(const unsigned char *userKey, const int bits,
|
||||
+ aes_context *key);
|
||||
+int AES_set_decrypt_key(const unsigned char *userKey, const int bits,
|
||||
+ aes_context *key);
|
||||
+
|
||||
+void AES_encrypt(const unsigned char *in, unsigned char *out, const aes_context *key);
|
||||
+void AES_decrypt(const unsigned char *in, unsigned char *out, const aes_context *key);
|
||||
+
|
||||
+
|
||||
+#define OPENSSL_AES_SET_ENCRYPT_KEY(k,b,c) AES_set_encrypt_key(k,b,c)
|
||||
+#define OPENSSL_AES_SET_DECRYPT_KEY(k,b,c) AES_set_decrypt_key(k,b,c)
|
||||
+#define OPENSSL_AES_ECB_ENCRYPT(i,o,k) AES_encrypt(i,o,k)
|
||||
+#define OPENSSL_AES_ECB_DECRYPT(i,o,k) AES_decrypt(i,o,k)
|
||||
+
|
||||
+#endif
|
||||
+
|
||||
+/**
|
||||
+ * \brief AES key schedule (encryption)
|
||||
+ *
|
||||
+ * \param ctx AES context to be initialized
|
||||
+ * \param key encryption key
|
||||
+ * \param keysize must be 128, 192 or 256
|
||||
+ *
|
||||
+ * \return 0 if successful, or POLARSSL_ERR_AES_INVALID_KEY_LENGTH
|
||||
+ */
|
||||
+static inline int aes_setkey_enc( aes_context *ctx, const unsigned char *key, const unsigned int keysize )
|
||||
+{
|
||||
+ const int status = OPENSSL_AES_SET_ENCRYPT_KEY(key, keysize, ctx);
|
||||
+ return status ? POLARSSL_ERR_AES_INVALID_KEY_LENGTH : 0;
|
||||
+}
|
||||
+
|
||||
+/**
|
||||
+ * \brief AES key schedule (decryption)
|
||||
+ *
|
||||
+ * \param ctx AES context to be initialized
|
||||
+ * \param key decryption key
|
||||
+ * \param keysize must be 128, 192 or 256
|
||||
+ *
|
||||
+ * \return 0 if successful, or POLARSSL_ERR_AES_INVALID_KEY_LENGTH
|
||||
+ */
|
||||
+static inline int aes_setkey_dec( aes_context *ctx, const unsigned char *key, const unsigned int keysize )
|
||||
+{
|
||||
+ const int status = OPENSSL_AES_SET_DECRYPT_KEY(key, keysize, ctx);
|
||||
+ return status ? POLARSSL_ERR_AES_INVALID_KEY_LENGTH : 0;
|
||||
+}
|
||||
+
|
||||
+/**
|
||||
+ * \brief AES-ECB block encryption/decryption
|
||||
+ *
|
||||
+ * \param ctx AES context
|
||||
+ * \param mode AES_ENCRYPT or AES_DECRYPT
|
||||
+ * \param input 16-byte input block
|
||||
+ * \param output 16-byte output block
|
||||
+ *
|
||||
+ * \return 0 if successful
|
||||
+ */
|
||||
+static inline int aes_crypt_ecb( aes_context *ctx,
|
||||
+ const int mode,
|
||||
+ const unsigned char input[16],
|
||||
+ unsigned char output[16] )
|
||||
+{
|
||||
+ if (mode == AES_DECRYPT)
|
||||
+ OPENSSL_AES_ECB_DECRYPT(input, output, ctx);
|
||||
+ else
|
||||
+ OPENSSL_AES_ECB_ENCRYPT(input, output, ctx);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+/**
|
||||
+ * \brief AES-CBC buffer encryption/decryption
|
||||
+ * Length should be a multiple of the block
|
||||
+ * size (16 bytes)
|
||||
+ *
|
||||
+ * \param ctx AES context
|
||||
+ * \param mode AES_ENCRYPT or AES_DECRYPT
|
||||
+ * \param length length of the input data
|
||||
+ * \param iv initialization vector (updated after use)
|
||||
+ * \param input buffer holding the input data
|
||||
+ * \param output buffer holding the output data
|
||||
+ *
|
||||
+ * \return 0 if successful, or POLARSSL_ERR_AES_INVALID_INPUT_LENGTH
|
||||
+ */
|
||||
+static inline int aes_crypt_cbc( aes_context *ctx,
|
||||
+ const int mode,
|
||||
+ size_t length,
|
||||
+ unsigned char iv[16],
|
||||
+ const unsigned char *input,
|
||||
+ unsigned char *output )
|
||||
+{
|
||||
+#ifdef OPENSSL_AES_CBC_ENCRYPT
|
||||
+ if (length & (OPENSSL_AES_BLOCK_SIZE-1))
|
||||
+ return POLARSSL_ERR_AES_INVALID_INPUT_LENGTH;
|
||||
+ OPENSSL_AES_CBC_ENCRYPT(input, output, length, ctx, iv, mode);
|
||||
+ return 0;
|
||||
+#else
|
||||
+ int i;
|
||||
+ unsigned char temp[16];
|
||||
+ if (length & (OPENSSL_AES_BLOCK_SIZE-1))
|
||||
+ return POLARSSL_ERR_AES_INVALID_INPUT_LENGTH;
|
||||
+ if( mode == AES_DECRYPT )
|
||||
+ {
|
||||
+ while( length > 0 )
|
||||
+ {
|
||||
+ memcpy( temp, input, 16 );
|
||||
+ OPENSSL_AES_ECB_DECRYPT(input, output, ctx);
|
||||
+ for( i = 0; i < 16; i++ )
|
||||
+ output[i] = (unsigned char)( output[i] ^ iv[i] );
|
||||
+ memcpy( iv, temp, 16 );
|
||||
+ input += 16;
|
||||
+ output += 16;
|
||||
+ length -= 16;
|
||||
+ }
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ while( length > 0 )
|
||||
+ {
|
||||
+ for( i = 0; i < 16; i++ )
|
||||
+ output[i] = (unsigned char)( input[i] ^ iv[i] );
|
||||
+ OPENSSL_AES_ECB_ENCRYPT(output, output, ctx);
|
||||
+ memcpy( iv, output, 16 );
|
||||
+ input += 16;
|
||||
+ output += 16;
|
||||
+ length -= 16;
|
||||
+ }
|
||||
+ }
|
||||
+ return( 0 );
|
||||
+#endif
|
||||
+}
|
||||
+
|
||||
+#ifdef __cplusplus
|
||||
+}
|
||||
+#endif
|
||||
diff -uNr polarssl-1.2.7/include/polarssl/sha1.h polarssl.new/include/polarssl/sha1.h
|
||||
--- polarssl-1.2.7/include/polarssl/sha1.h 2013-04-13 03:56:17.000000000 -0600
|
||||
+++ polarssl.new/include/polarssl/sha1.h 2013-06-07 17:43:56.000000000 -0600
|
||||
@@ -29,6 +29,8 @@
|
||||
|
||||
#include <string.h>
|
||||
|
||||
+#include "config.h"
|
||||
+
|
||||
#ifdef _MSC_VER
|
||||
#include <basetsd.h>
|
||||
typedef UINT32 uint32_t;
|
||||
@@ -38,6 +40,12 @@
|
||||
|
||||
#define POLARSSL_ERR_SHA1_FILE_IO_ERROR -0x0076 /**< Read/write error in file. */
|
||||
|
||||
+#ifdef POLARSSL_SHA1_ALT
|
||||
+
|
||||
+#include "polarssl/sha1_alt.h"
|
||||
+
|
||||
+#else
|
||||
+
|
||||
/**
|
||||
* \brief SHA-1 context structure
|
||||
*/
|
||||
@@ -80,6 +88,19 @@
|
||||
*/
|
||||
void sha1_finish( sha1_context *ctx, unsigned char output[20] );
|
||||
|
||||
+/* Internal use */
|
||||
+void sha1_process( sha1_context *ctx, const unsigned char data[64] );
|
||||
+
|
||||
+#ifdef __cplusplus
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
+#endif /* POLARSSL_SHA1_ALT */
|
||||
+
|
||||
+#ifdef __cplusplus
|
||||
+extern "C" {
|
||||
+#endif
|
||||
+
|
||||
/**
|
||||
* \brief Output = SHA-1( input buffer )
|
||||
*
|
||||
@@ -152,9 +173,6 @@
|
||||
*/
|
||||
int sha1_self_test( int verbose );
|
||||
|
||||
-/* Internal use */
|
||||
-void sha1_process( sha1_context *ctx, const unsigned char data[64] );
|
||||
-
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
diff -uNr polarssl-1.2.7/include/polarssl/sha1_alt.h polarssl.new/include/polarssl/sha1_alt.h
|
||||
--- polarssl-1.2.7/include/polarssl/sha1_alt.h 1969-12-31 17:00:00.000000000 -0700
|
||||
+++ polarssl.new/include/polarssl/sha1_alt.h 2013-06-07 17:43:56.000000000 -0600
|
||||
@@ -0,0 +1,56 @@
|
||||
+/*
|
||||
+ * Use OpenSSL implementation of SHA1 methods to get asm and hardware acceleration.
|
||||
+ * Don't include this file directly, it is included by sha1.h when
|
||||
+ * POLARSSL_SHA1_ALT is defined.
|
||||
+ */
|
||||
+
|
||||
+#include "polarssl/sha_openssl.h"
|
||||
+
|
||||
+struct openssl_sha_context {
|
||||
+ SHA_LONG h0,h1,h2,h3,h4;
|
||||
+ SHA_LONG Nl,Nh;
|
||||
+ SHA_LONG data[SHA_LBLOCK];
|
||||
+ unsigned int num;
|
||||
+};
|
||||
+
|
||||
+typedef struct
|
||||
+{
|
||||
+ struct openssl_sha_context octx;
|
||||
+
|
||||
+ unsigned char ipad[64]; /*!< HMAC: inner padding */
|
||||
+ unsigned char opad[64]; /*!< HMAC: outer padding */
|
||||
+}
|
||||
+sha1_context;
|
||||
+
|
||||
+#ifdef __cplusplus
|
||||
+extern "C" {
|
||||
+#endif
|
||||
+
|
||||
+int SHA1_Init(struct openssl_sha_context *c);
|
||||
+int SHA1_Update(struct openssl_sha_context *c, const void *data, size_t len);
|
||||
+int SHA1_Final(unsigned char *md, struct openssl_sha_context *c);
|
||||
+void sha1_block_data_order(struct openssl_sha_context *c, const void *p, size_t num);
|
||||
+
|
||||
+static inline void sha1_starts( sha1_context *ctx )
|
||||
+{
|
||||
+ SHA1_Init(&ctx->octx);
|
||||
+}
|
||||
+
|
||||
+static inline void sha1_update( sha1_context *ctx, const unsigned char *input, size_t ilen )
|
||||
+{
|
||||
+ SHA1_Update(&ctx->octx, input, ilen);
|
||||
+}
|
||||
+
|
||||
+static inline void sha1_finish( sha1_context *ctx, unsigned char output[20] )
|
||||
+{
|
||||
+ SHA1_Final(output, &ctx->octx);
|
||||
+}
|
||||
+
|
||||
+static inline void sha1_process( sha1_context *ctx, const unsigned char data[64] )
|
||||
+{
|
||||
+ sha1_block_data_order(&ctx->octx, data, 1);
|
||||
+}
|
||||
+
|
||||
+#ifdef __cplusplus
|
||||
+}
|
||||
+#endif
|
||||
diff -uNr polarssl-1.2.7/include/polarssl/sha2.h polarssl.new/include/polarssl/sha2.h
|
||||
--- polarssl-1.2.7/include/polarssl/sha2.h 2013-04-13 03:56:17.000000000 -0600
|
||||
+++ polarssl.new/include/polarssl/sha2.h 2013-06-07 17:43:56.000000000 -0600
|
||||
@@ -29,6 +29,8 @@
|
||||
|
||||
#include <string.h>
|
||||
|
||||
+#include "config.h"
|
||||
+
|
||||
#ifdef _MSC_VER
|
||||
#include <basetsd.h>
|
||||
typedef UINT32 uint32_t;
|
||||
@@ -38,6 +40,12 @@
|
||||
|
||||
#define POLARSSL_ERR_SHA2_FILE_IO_ERROR -0x0078 /**< Read/write error in file. */
|
||||
|
||||
+#ifdef POLARSSL_SHA2_ALT
|
||||
+
|
||||
+#include "polarssl/sha2_alt.h"
|
||||
+
|
||||
+#else
|
||||
+
|
||||
/**
|
||||
* \brief SHA-256 context structure
|
||||
*/
|
||||
@@ -82,6 +90,19 @@
|
||||
*/
|
||||
void sha2_finish( sha2_context *ctx, unsigned char output[32] );
|
||||
|
||||
+/* Internal use */
|
||||
+void sha2_process( sha2_context *ctx, const unsigned char data[64] );
|
||||
+
|
||||
+#ifdef __cplusplus
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
+#endif /* POLARSSL_SHA2_ALT */
|
||||
+
|
||||
+#ifdef __cplusplus
|
||||
+extern "C" {
|
||||
+#endif
|
||||
+
|
||||
/**
|
||||
* \brief Output = SHA-256( input buffer )
|
||||
*
|
||||
@@ -160,9 +181,6 @@
|
||||
*/
|
||||
int sha2_self_test( int verbose );
|
||||
|
||||
-/* Internal use */
|
||||
-void sha2_process( sha2_context *ctx, const unsigned char data[64] );
|
||||
-
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
diff -uNr polarssl-1.2.7/include/polarssl/sha2_alt.h polarssl.new/include/polarssl/sha2_alt.h
|
||||
--- polarssl-1.2.7/include/polarssl/sha2_alt.h 1969-12-31 17:00:00.000000000 -0700
|
||||
+++ polarssl.new/include/polarssl/sha2_alt.h 2013-06-07 17:43:56.000000000 -0600
|
||||
@@ -0,0 +1,71 @@
|
||||
+/*
|
||||
+ * Use OpenSSL implementation of SHA2 methods to get asm and hardware acceleration.
|
||||
+ * Don't include this file directly, it is included by sha2.h when
|
||||
+ * POLARSSL_SHA2_ALT is defined.
|
||||
+ */
|
||||
+
|
||||
+#include "polarssl/sha_openssl.h"
|
||||
+
|
||||
+struct openssl_sha2_context {
|
||||
+ SHA_LONG h[8];
|
||||
+ SHA_LONG Nl,Nh;
|
||||
+ SHA_LONG data[SHA_LBLOCK];
|
||||
+ unsigned int num,md_len;
|
||||
+};
|
||||
+
|
||||
+typedef struct
|
||||
+{
|
||||
+ struct openssl_sha2_context octx;
|
||||
+
|
||||
+ unsigned char ipad[64]; /*!< HMAC: inner padding */
|
||||
+ unsigned char opad[64]; /*!< HMAC: outer padding */
|
||||
+ int is224; /*!< 0 => SHA-256, else SHA-224 */
|
||||
+}
|
||||
+sha2_context;
|
||||
+
|
||||
+#ifdef __cplusplus
|
||||
+extern "C" {
|
||||
+#endif
|
||||
+
|
||||
+int SHA224_Init(struct openssl_sha2_context *c);
|
||||
+int SHA224_Update(struct openssl_sha2_context *c, const void *data, size_t len);
|
||||
+int SHA224_Final(unsigned char *md, struct openssl_sha2_context *c);
|
||||
+
|
||||
+int SHA256_Init(struct openssl_sha2_context *c);
|
||||
+int SHA256_Update(struct openssl_sha2_context *c, const void *data, size_t len);
|
||||
+int SHA256_Final(unsigned char *md, struct openssl_sha2_context *c);
|
||||
+
|
||||
+void sha256_block_data_order(struct openssl_sha2_context *c, const void *p, size_t num);
|
||||
+
|
||||
+static inline void sha2_starts( sha2_context *ctx, int is224 )
|
||||
+{
|
||||
+ if ((ctx->is224 = is224))
|
||||
+ SHA224_Init(&ctx->octx);
|
||||
+ else
|
||||
+ SHA256_Init(&ctx->octx);
|
||||
+}
|
||||
+
|
||||
+static inline void sha2_update( sha2_context *ctx, const unsigned char *input, size_t ilen )
|
||||
+{
|
||||
+ if (ctx->is224)
|
||||
+ SHA224_Update(&ctx->octx, input, ilen);
|
||||
+ else
|
||||
+ SHA256_Update(&ctx->octx, input, ilen);
|
||||
+}
|
||||
+
|
||||
+static inline void sha2_finish( sha2_context *ctx, unsigned char output[32] )
|
||||
+{
|
||||
+ if (ctx->is224)
|
||||
+ SHA224_Final(output, &ctx->octx);
|
||||
+ else
|
||||
+ SHA256_Final(output, &ctx->octx);
|
||||
+}
|
||||
+
|
||||
+static inline void sha2_process( sha2_context *ctx, const unsigned char data[64] )
|
||||
+{
|
||||
+ sha256_block_data_order(&ctx->octx, data, 1);
|
||||
+}
|
||||
+
|
||||
+#ifdef __cplusplus
|
||||
+}
|
||||
+#endif
|
||||
diff -uNr polarssl-1.2.7/include/polarssl/sha4.h polarssl.new/include/polarssl/sha4.h
|
||||
--- polarssl-1.2.7/include/polarssl/sha4.h 2013-04-13 03:56:17.000000000 -0600
|
||||
+++ polarssl.new/include/polarssl/sha4.h 2013-06-07 17:43:56.000000000 -0600
|
||||
@@ -29,6 +29,8 @@
|
||||
|
||||
#include <string.h>
|
||||
|
||||
+#include "config.h"
|
||||
+
|
||||
#if defined(_MSC_VER) || defined(__WATCOMC__)
|
||||
#define UL64(x) x##ui64
|
||||
typedef unsigned __int64 uint64_t;
|
||||
@@ -39,6 +41,12 @@
|
||||
|
||||
#define POLARSSL_ERR_SHA4_FILE_IO_ERROR -0x007A /**< Read/write error in file. */
|
||||
|
||||
+#ifdef POLARSSL_SHA4_ALT
|
||||
+
|
||||
+#include "polarssl/sha4_alt.h"
|
||||
+
|
||||
+#else
|
||||
+
|
||||
/**
|
||||
* \brief SHA-512 context structure
|
||||
*/
|
||||
@@ -83,6 +91,16 @@
|
||||
*/
|
||||
void sha4_finish( sha4_context *ctx, unsigned char output[64] );
|
||||
|
||||
+#ifdef __cplusplus
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
+#endif /* POLARSSL_SHA4_ALT */
|
||||
+
|
||||
+#ifdef __cplusplus
|
||||
+extern "C" {
|
||||
+#endif
|
||||
+
|
||||
/**
|
||||
* \brief Output = SHA-512( input buffer )
|
||||
*
|
||||
diff -uNr polarssl-1.2.7/include/polarssl/sha4_alt.h polarssl.new/include/polarssl/sha4_alt.h
|
||||
--- polarssl-1.2.7/include/polarssl/sha4_alt.h 1969-12-31 17:00:00.000000000 -0700
|
||||
+++ polarssl.new/include/polarssl/sha4_alt.h 2013-06-07 17:43:56.000000000 -0600
|
||||
@@ -0,0 +1,67 @@
|
||||
+/*
|
||||
+ * Use OpenSSL implementation of SHA4 methods to get asm and hardware acceleration.
|
||||
+ * Don't include this file directly, it is included by sha4.h when
|
||||
+ * POLARSSL_SHA4_ALT is defined.
|
||||
+ */
|
||||
+
|
||||
+#include "polarssl/sha_openssl.h"
|
||||
+
|
||||
+struct openssl_sha4_context {
|
||||
+ SHA_LONG64 h[8];
|
||||
+ SHA_LONG64 Nl,Nh;
|
||||
+ union {
|
||||
+ SHA_LONG64 d[SHA_LBLOCK];
|
||||
+ unsigned char p[SHA512_CBLOCK];
|
||||
+ } u;
|
||||
+ unsigned int num,md_len;
|
||||
+};
|
||||
+
|
||||
+typedef struct
|
||||
+{
|
||||
+ struct openssl_sha4_context octx;
|
||||
+
|
||||
+ unsigned char ipad[128]; /*!< HMAC: inner padding */
|
||||
+ unsigned char opad[128]; /*!< HMAC: outer padding */
|
||||
+ int is384; /*!< 0 => SHA-512, else SHA-384 */
|
||||
+}
|
||||
+sha4_context;
|
||||
+
|
||||
+#ifdef __cplusplus
|
||||
+extern "C" {
|
||||
+#endif
|
||||
+
|
||||
+int SHA384_Init(struct openssl_sha4_context *c);
|
||||
+int SHA384_Update(struct openssl_sha4_context *c, const void *data, size_t len);
|
||||
+int SHA384_Final(unsigned char *md, struct openssl_sha4_context *c);
|
||||
+
|
||||
+int SHA512_Init(struct openssl_sha4_context *c);
|
||||
+int SHA512_Update(struct openssl_sha4_context *c, const void *data, size_t len);
|
||||
+int SHA512_Final(unsigned char *md, struct openssl_sha4_context *c);
|
||||
+
|
||||
+static inline void sha4_starts( sha4_context *ctx, int is384 )
|
||||
+{
|
||||
+ if ((ctx->is384 = is384))
|
||||
+ SHA384_Init(&ctx->octx);
|
||||
+ else
|
||||
+ SHA512_Init(&ctx->octx);
|
||||
+}
|
||||
+
|
||||
+static inline void sha4_update( sha4_context *ctx, const unsigned char *input, size_t ilen )
|
||||
+{
|
||||
+ if (ctx->is384)
|
||||
+ SHA384_Update(&ctx->octx, input, ilen);
|
||||
+ else
|
||||
+ SHA512_Update(&ctx->octx, input, ilen);
|
||||
+}
|
||||
+
|
||||
+static inline void sha4_finish( sha4_context *ctx, unsigned char output[64] )
|
||||
+{
|
||||
+ if (ctx->is384)
|
||||
+ SHA384_Final(output, &ctx->octx);
|
||||
+ else
|
||||
+ SHA512_Final(output, &ctx->octx);
|
||||
+}
|
||||
+
|
||||
+#ifdef __cplusplus
|
||||
+}
|
||||
+#endif
|
||||
diff -uNr polarssl-1.2.7/include/polarssl/sha_openssl.h polarssl.new/include/polarssl/sha_openssl.h
|
||||
--- polarssl-1.2.7/include/polarssl/sha_openssl.h 1969-12-31 17:00:00.000000000 -0700
|
||||
+++ polarssl.new/include/polarssl/sha_openssl.h 2013-06-07 17:43:56.000000000 -0600
|
||||
@@ -0,0 +1,42 @@
|
||||
+/*
|
||||
+ * Common header file for all OpenSSL-imported SHA methods
|
||||
+ */
|
||||
+
|
||||
+#ifndef POLARSSL_SHA_OPENSSL_H
|
||||
+#define POLARSSL_SHA_OPENSSL_H
|
||||
+
|
||||
+/*
|
||||
+ * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
+ * ! SHA_LONG has to be at least 32 bits wide. If it's wider, then !
|
||||
+ * ! SHA_LONG_LOG2 has to be defined along. !
|
||||
+ * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
+ */
|
||||
+
|
||||
+#if defined(__LP32__)
|
||||
+#define SHA_LONG unsigned long
|
||||
+#elif defined(OPENSSL_SYS_CRAY) || defined(__ILP64__)
|
||||
+#define SHA_LONG unsigned long
|
||||
+#define SHA_LONG_LOG2 3
|
||||
+#else
|
||||
+#define SHA_LONG unsigned int
|
||||
+#endif
|
||||
+
|
||||
+#define SHA_LBLOCK 16
|
||||
+
|
||||
+/*
|
||||
+ * Unlike 32-bit digest algorithms, SHA-512 *relies* on SHA_LONG64
|
||||
+ * being exactly 64-bit wide. See Implementation Notes in sha512.c
|
||||
+ * for further details.
|
||||
+ */
|
||||
+#define SHA512_CBLOCK (SHA_LBLOCK*8) /* SHA-512 treats input data as a
|
||||
+ * contiguous array of 64 bit
|
||||
+ * wide big-endian values. */
|
||||
+#if (defined(_WIN32) || defined(_WIN64)) && !defined(__MINGW32__)
|
||||
+#define SHA_LONG64 unsigned __int64
|
||||
+#elif defined(__arch64__)
|
||||
+#define SHA_LONG64 unsigned long
|
||||
+#else
|
||||
+#define SHA_LONG64 unsigned long long
|
||||
+#endif
|
||||
+
|
||||
+#endif
|
||||
diff -uNr polarssl-1.2.7/library/aes.c polarssl.new/library/aes.c
|
||||
--- polarssl-1.2.7/library/aes.c 2013-04-13 03:56:17.000000000 -0600
|
||||
+++ polarssl.new/library/aes.c 2013-06-07 17:43:56.000000000 -0600
|
||||
@@ -38,6 +38,8 @@
|
||||
#include "polarssl/padlock.h"
|
||||
#endif
|
||||
|
||||
+#ifndef POLARSSL_AES_ALT
|
||||
+
|
||||
/*
|
||||
* 32-bit integer manipulation macros (little endian)
|
||||
*/
|
||||
@@ -914,6 +916,7 @@
|
||||
return( 0 );
|
||||
}
|
||||
#endif /* POLARSSL_CIPHER_MODE_CTR */
|
||||
+#endif /* !POLARSSL_AES_ALT */
|
||||
|
||||
#if defined(POLARSSL_SELF_TEST)
|
||||
|
||||
diff -uNr polarssl-1.2.7/library/sha1.c polarssl.new/library/sha1.c
|
||||
--- polarssl-1.2.7/library/sha1.c 2013-04-13 03:56:17.000000000 -0600
|
||||
+++ polarssl.new/library/sha1.c 2013-06-07 17:43:56.000000000 -0600
|
||||
@@ -38,6 +38,8 @@
|
||||
#include <stdio.h>
|
||||
#endif
|
||||
|
||||
+#ifndef POLARSSL_SHA1_ALT
|
||||
+
|
||||
/*
|
||||
* 32-bit integer manipulation macros (big endian)
|
||||
*/
|
||||
@@ -313,6 +315,8 @@
|
||||
PUT_UINT32_BE( ctx->state[4], output, 16 );
|
||||
}
|
||||
|
||||
+#endif /* !POLARSSL_SHA1_ALT */
|
||||
+
|
||||
/*
|
||||
* output = SHA-1( input buffer )
|
||||
*/
|
||||
diff -uNr polarssl-1.2.7/library/sha2.c polarssl.new/library/sha2.c
|
||||
--- polarssl-1.2.7/library/sha2.c 2013-04-13 03:56:17.000000000 -0600
|
||||
+++ polarssl.new/library/sha2.c 2013-06-07 17:43:56.000000000 -0600
|
||||
@@ -38,6 +38,8 @@
|
||||
#include <stdio.h>
|
||||
#endif
|
||||
|
||||
+#ifndef POLARSSL_SHA2_ALT
|
||||
+
|
||||
/*
|
||||
* 32-bit integer manipulation macros (big endian)
|
||||
*/
|
||||
@@ -314,6 +316,8 @@
|
||||
PUT_UINT32_BE( ctx->state[7], output, 28 );
|
||||
}
|
||||
|
||||
+#endif /* !POLARSSL_SHA2_ALT */
|
||||
+
|
||||
/*
|
||||
* output = SHA-256( input buffer )
|
||||
*/
|
||||
diff -uNr polarssl-1.2.7/library/sha4.c polarssl.new/library/sha4.c
|
||||
--- polarssl-1.2.7/library/sha4.c 2013-04-13 03:56:17.000000000 -0600
|
||||
+++ polarssl.new/library/sha4.c 2013-06-07 17:43:56.000000000 -0600
|
||||
@@ -38,6 +38,8 @@
|
||||
#include <stdio.h>
|
||||
#endif
|
||||
|
||||
+#ifndef POLARSSL_SHA4_ALT
|
||||
+
|
||||
/*
|
||||
* 64-bit integer manipulation macros (big endian)
|
||||
*/
|
||||
@@ -312,6 +314,8 @@
|
||||
}
|
||||
}
|
||||
|
||||
+#endif /* !POLARSSL_SHA4_ALT */
|
||||
+
|
||||
/*
|
||||
* output = SHA-512( input buffer )
|
||||
*/
|
||||
diff -uNr polarssl-1.2.7/library/ssl_tls.c polarssl.new/library/ssl_tls.c
|
||||
--- polarssl-1.2.7/library/ssl_tls.c 2013-04-13 03:56:17.000000000 -0600
|
||||
+++ polarssl.new/library/ssl_tls.c 2013-06-07 17:43:56.000000000 -0600
|
||||
@@ -2550,8 +2550,10 @@
|
||||
SSL_DEBUG_BUF( 4, "finished md5 state", (unsigned char *)
|
||||
md5.state, sizeof( md5.state ) );
|
||||
|
||||
+#ifndef POLARSSL_SHA1_ALT
|
||||
SSL_DEBUG_BUF( 4, "finished sha1 state", (unsigned char *)
|
||||
sha1.state, sizeof( sha1.state ) );
|
||||
+#endif
|
||||
|
||||
sender = ( from == SSL_IS_CLIENT ) ? (char *) "CLNT"
|
||||
: (char *) "SRVR";
|
||||
@@ -2621,8 +2623,10 @@
|
||||
SSL_DEBUG_BUF( 4, "finished md5 state", (unsigned char *)
|
||||
md5.state, sizeof( md5.state ) );
|
||||
|
||||
+#ifndef POLARSSL_SHA1_ALT
|
||||
SSL_DEBUG_BUF( 4, "finished sha1 state", (unsigned char *)
|
||||
sha1.state, sizeof( sha1.state ) );
|
||||
+#endif
|
||||
|
||||
sender = ( from == SSL_IS_CLIENT )
|
||||
? (char *) "client finished"
|
||||
@@ -2666,8 +2670,10 @@
|
||||
* Hash( handshake ) )[0.11]
|
||||
*/
|
||||
|
||||
+#ifndef POLARSSL_SHA2_ALT
|
||||
SSL_DEBUG_BUF( 4, "finished sha2 state", (unsigned char *)
|
||||
sha2.state, sizeof( sha2.state ) );
|
||||
+#endif
|
||||
|
||||
sender = ( from == SSL_IS_CLIENT )
|
||||
? (char *) "client finished"
|
||||
@@ -2710,8 +2716,10 @@
|
||||
* Hash( handshake ) )[0.11]
|
||||
*/
|
||||
|
||||
+#ifndef POLARSSL_SHA4_ALT
|
||||
SSL_DEBUG_BUF( 4, "finished sha4 state", (unsigned char *)
|
||||
sha4.state, sizeof( sha4.state ) );
|
||||
+#endif
|
||||
|
||||
sender = ( from == SSL_IS_CLIENT )
|
||||
? (char *) "client finished"
|
||||
diff -uNr polarssl-1.2.7/tests/suites/test_suite_aes.function polarssl.new/tests/suites/test_suite_aes.function
|
||||
--- polarssl-1.2.7/tests/suites/test_suite_aes.function 2013-04-13 03:56:17.000000000 -0600
|
||||
+++ polarssl.new/tests/suites/test_suite_aes.function 2013-06-07 17:43:56.000000000 -0600
|
||||
@@ -1,4 +1,5 @@
|
||||
BEGIN_HEADER
|
||||
+#include <polarssl/config.h>
|
||||
#include <polarssl/aes.h>
|
||||
END_HEADER
|
||||
|
||||
diff -uNr polarssl-1.2.7/tests/suites/test_suite_ctr_drbg.function polarssl.new/tests/suites/test_suite_ctr_drbg.function
|
||||
--- polarssl-1.2.7/tests/suites/test_suite_ctr_drbg.function 2013-04-13 03:56:17.000000000 -0600
|
||||
+++ polarssl.new/tests/suites/test_suite_ctr_drbg.function 2013-06-07 17:43:56.000000000 -0600
|
||||
@@ -1,4 +1,5 @@
|
||||
BEGIN_HEADER
|
||||
+#include <polarssl/config.h>
|
||||
#include <polarssl/ctr_drbg.h>
|
||||
|
||||
int test_offset;
|
||||
@@ -0,0 +1,446 @@
|
||||
diff -uNr polarssl-1.2.7/include/polarssl/aes_alt.h polarssl.new/include/polarssl/aes_alt.h
|
||||
--- polarssl-1.2.7/include/polarssl/aes_alt.h 1969-12-31 17:00:00.000000000 -0700
|
||||
+++ polarssl.new/include/polarssl/aes_alt.h 2013-06-07 18:18:37.000000000 -0600
|
||||
@@ -0,0 +1,183 @@
|
||||
+/*
|
||||
+ * Use OpenSSL implementation of AES methods to get asm and hardware acceleration.
|
||||
+ * Don't include this file directly, it is included by aes.h when
|
||||
+ * POLARSSL_AES_ALT is defined.
|
||||
+ */
|
||||
+
|
||||
+#ifdef _MSC_VER
|
||||
+#include <basetsd.h>
|
||||
+typedef UINT32 uint32_t;
|
||||
+#else
|
||||
+#include <inttypes.h>
|
||||
+#endif
|
||||
+
|
||||
+#define OPENSSL_AES_BLOCK_SIZE 16
|
||||
+#define OPENSSL_AES_MAXNR 14
|
||||
+
|
||||
+/**
|
||||
+ * \brief AES context structure
|
||||
+ */
|
||||
+typedef struct
|
||||
+{
|
||||
+ uint32_t rd_key[4 * (OPENSSL_AES_MAXNR + 1)];
|
||||
+ int rounds;
|
||||
+}
|
||||
+aes_context;
|
||||
+
|
||||
+#ifdef __cplusplus
|
||||
+extern "C" {
|
||||
+#endif
|
||||
+
|
||||
+#if defined(POLARSSL_USE_OPENSSL_AES_NI)
|
||||
+
|
||||
+int aesni_set_encrypt_key(const unsigned char *userKey, const int bits,
|
||||
+ aes_context *key);
|
||||
+int aesni_set_decrypt_key(const unsigned char *userKey, const int bits,
|
||||
+ aes_context *key);
|
||||
+void aesni_ecb_encrypt(const unsigned char *in, unsigned char *out,
|
||||
+ size_t length, const aes_context *key, const int enc);
|
||||
+void aesni_cbc_encrypt(const unsigned char *in, unsigned char *out,
|
||||
+ size_t length, const aes_context *key,
|
||||
+ unsigned char *ivec, const int enc);
|
||||
+
|
||||
+#define OPENSSL_AES_SET_ENCRYPT_KEY(k,b,c) aesni_set_encrypt_key(k,b,c)
|
||||
+#define OPENSSL_AES_SET_DECRYPT_KEY(k,b,c) aesni_set_decrypt_key(k,b,c)
|
||||
+#define OPENSSL_AES_ECB_ENCRYPT(i,o,k) aesni_ecb_encrypt(i,o,16,k,AES_ENCRYPT)
|
||||
+#define OPENSSL_AES_ECB_DECRYPT(i,o,k) aesni_ecb_encrypt(i,o,16,k,AES_DECRYPT)
|
||||
+#define OPENSSL_AES_CBC_ENCRYPT(i,o,l,k,iv,e) aesni_cbc_encrypt(i,o,l,k,iv,e)
|
||||
+
|
||||
+#else
|
||||
+
|
||||
+int AES_set_encrypt_key(const unsigned char *userKey, const int bits,
|
||||
+ aes_context *key);
|
||||
+int AES_set_decrypt_key(const unsigned char *userKey, const int bits,
|
||||
+ aes_context *key);
|
||||
+
|
||||
+void AES_encrypt(const unsigned char *in, unsigned char *out, const aes_context *key);
|
||||
+void AES_decrypt(const unsigned char *in, unsigned char *out, const aes_context *key);
|
||||
+
|
||||
+
|
||||
+#define OPENSSL_AES_SET_ENCRYPT_KEY(k,b,c) AES_set_encrypt_key(k,b,c)
|
||||
+#define OPENSSL_AES_SET_DECRYPT_KEY(k,b,c) AES_set_decrypt_key(k,b,c)
|
||||
+#define OPENSSL_AES_ECB_ENCRYPT(i,o,k) AES_encrypt(i,o,k)
|
||||
+#define OPENSSL_AES_ECB_DECRYPT(i,o,k) AES_decrypt(i,o,k)
|
||||
+
|
||||
+#endif
|
||||
+
|
||||
+/**
|
||||
+ * \brief AES key schedule (encryption)
|
||||
+ *
|
||||
+ * \param ctx AES context to be initialized
|
||||
+ * \param key encryption key
|
||||
+ * \param keysize must be 128, 192 or 256
|
||||
+ *
|
||||
+ * \return 0 if successful, or POLARSSL_ERR_AES_INVALID_KEY_LENGTH
|
||||
+ */
|
||||
+static inline int aes_setkey_enc( aes_context *ctx, const unsigned char *key, const unsigned int keysize )
|
||||
+{
|
||||
+ const int status = OPENSSL_AES_SET_ENCRYPT_KEY(key, keysize, ctx);
|
||||
+ return status ? POLARSSL_ERR_AES_INVALID_KEY_LENGTH : 0;
|
||||
+}
|
||||
+
|
||||
+/**
|
||||
+ * \brief AES key schedule (decryption)
|
||||
+ *
|
||||
+ * \param ctx AES context to be initialized
|
||||
+ * \param key decryption key
|
||||
+ * \param keysize must be 128, 192 or 256
|
||||
+ *
|
||||
+ * \return 0 if successful, or POLARSSL_ERR_AES_INVALID_KEY_LENGTH
|
||||
+ */
|
||||
+static inline int aes_setkey_dec( aes_context *ctx, const unsigned char *key, const unsigned int keysize )
|
||||
+{
|
||||
+ const int status = OPENSSL_AES_SET_DECRYPT_KEY(key, keysize, ctx);
|
||||
+ return status ? POLARSSL_ERR_AES_INVALID_KEY_LENGTH : 0;
|
||||
+}
|
||||
+
|
||||
+/**
|
||||
+ * \brief AES-ECB block encryption/decryption
|
||||
+ *
|
||||
+ * \param ctx AES context
|
||||
+ * \param mode AES_ENCRYPT or AES_DECRYPT
|
||||
+ * \param input 16-byte input block
|
||||
+ * \param output 16-byte output block
|
||||
+ *
|
||||
+ * \return 0 if successful
|
||||
+ */
|
||||
+static inline int aes_crypt_ecb( aes_context *ctx,
|
||||
+ const int mode,
|
||||
+ const unsigned char input[16],
|
||||
+ unsigned char output[16] )
|
||||
+{
|
||||
+ if (mode == AES_DECRYPT)
|
||||
+ OPENSSL_AES_ECB_DECRYPT(input, output, ctx);
|
||||
+ else
|
||||
+ OPENSSL_AES_ECB_ENCRYPT(input, output, ctx);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+/**
|
||||
+ * \brief AES-CBC buffer encryption/decryption
|
||||
+ * Length should be a multiple of the block
|
||||
+ * size (16 bytes)
|
||||
+ *
|
||||
+ * \param ctx AES context
|
||||
+ * \param mode AES_ENCRYPT or AES_DECRYPT
|
||||
+ * \param length length of the input data
|
||||
+ * \param iv initialization vector (updated after use)
|
||||
+ * \param input buffer holding the input data
|
||||
+ * \param output buffer holding the output data
|
||||
+ *
|
||||
+ * \return 0 if successful, or POLARSSL_ERR_AES_INVALID_INPUT_LENGTH
|
||||
+ */
|
||||
+static inline int aes_crypt_cbc( aes_context *ctx,
|
||||
+ const int mode,
|
||||
+ size_t length,
|
||||
+ unsigned char iv[16],
|
||||
+ const unsigned char *input,
|
||||
+ unsigned char *output )
|
||||
+{
|
||||
+#ifdef OPENSSL_AES_CBC_ENCRYPT
|
||||
+ if (length & (OPENSSL_AES_BLOCK_SIZE-1))
|
||||
+ return POLARSSL_ERR_AES_INVALID_INPUT_LENGTH;
|
||||
+ OPENSSL_AES_CBC_ENCRYPT(input, output, length, ctx, iv, mode);
|
||||
+ return 0;
|
||||
+#else
|
||||
+ int i;
|
||||
+ unsigned char temp[16];
|
||||
+ if (length & (OPENSSL_AES_BLOCK_SIZE-1))
|
||||
+ return POLARSSL_ERR_AES_INVALID_INPUT_LENGTH;
|
||||
+ if( mode == AES_DECRYPT )
|
||||
+ {
|
||||
+ while( length > 0 )
|
||||
+ {
|
||||
+ memcpy( temp, input, 16 );
|
||||
+ OPENSSL_AES_ECB_DECRYPT(input, output, ctx);
|
||||
+ for( i = 0; i < 16; i++ )
|
||||
+ output[i] = (unsigned char)( output[i] ^ iv[i] );
|
||||
+ memcpy( iv, temp, 16 );
|
||||
+ input += 16;
|
||||
+ output += 16;
|
||||
+ length -= 16;
|
||||
+ }
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ while( length > 0 )
|
||||
+ {
|
||||
+ for( i = 0; i < 16; i++ )
|
||||
+ output[i] = (unsigned char)( input[i] ^ iv[i] );
|
||||
+ OPENSSL_AES_ECB_ENCRYPT(output, output, ctx);
|
||||
+ memcpy( iv, output, 16 );
|
||||
+ input += 16;
|
||||
+ output += 16;
|
||||
+ length -= 16;
|
||||
+ }
|
||||
+ }
|
||||
+ return( 0 );
|
||||
+#endif
|
||||
+}
|
||||
+
|
||||
+#ifdef __cplusplus
|
||||
+}
|
||||
+#endif
|
||||
diff -uNr polarssl-1.2.7/include/polarssl/sha1_alt.h polarssl.new/include/polarssl/sha1_alt.h
|
||||
--- polarssl-1.2.7/include/polarssl/sha1_alt.h 1969-12-31 17:00:00.000000000 -0700
|
||||
+++ polarssl.new/include/polarssl/sha1_alt.h 2013-06-07 17:43:56.000000000 -0600
|
||||
@@ -0,0 +1,56 @@
|
||||
+/*
|
||||
+ * Use OpenSSL implementation of SHA1 methods to get asm and hardware acceleration.
|
||||
+ * Don't include this file directly, it is included by sha1.h when
|
||||
+ * POLARSSL_SHA1_ALT is defined.
|
||||
+ */
|
||||
+
|
||||
+#include "polarssl/sha_openssl.h"
|
||||
+
|
||||
+struct openssl_sha_context {
|
||||
+ SHA_LONG h0,h1,h2,h3,h4;
|
||||
+ SHA_LONG Nl,Nh;
|
||||
+ SHA_LONG data[SHA_LBLOCK];
|
||||
+ unsigned int num;
|
||||
+};
|
||||
+
|
||||
+typedef struct
|
||||
+{
|
||||
+ struct openssl_sha_context octx;
|
||||
+
|
||||
+ unsigned char ipad[64]; /*!< HMAC: inner padding */
|
||||
+ unsigned char opad[64]; /*!< HMAC: outer padding */
|
||||
+}
|
||||
+sha1_context;
|
||||
+
|
||||
+#ifdef __cplusplus
|
||||
+extern "C" {
|
||||
+#endif
|
||||
+
|
||||
+int SHA1_Init(struct openssl_sha_context *c);
|
||||
+int SHA1_Update(struct openssl_sha_context *c, const void *data, size_t len);
|
||||
+int SHA1_Final(unsigned char *md, struct openssl_sha_context *c);
|
||||
+void sha1_block_data_order(struct openssl_sha_context *c, const void *p, size_t num);
|
||||
+
|
||||
+static inline void sha1_starts( sha1_context *ctx )
|
||||
+{
|
||||
+ SHA1_Init(&ctx->octx);
|
||||
+}
|
||||
+
|
||||
+static inline void sha1_update( sha1_context *ctx, const unsigned char *input, size_t ilen )
|
||||
+{
|
||||
+ SHA1_Update(&ctx->octx, input, ilen);
|
||||
+}
|
||||
+
|
||||
+static inline void sha1_finish( sha1_context *ctx, unsigned char output[20] )
|
||||
+{
|
||||
+ SHA1_Final(output, &ctx->octx);
|
||||
+}
|
||||
+
|
||||
+static inline void sha1_process( sha1_context *ctx, const unsigned char data[64] )
|
||||
+{
|
||||
+ sha1_block_data_order(&ctx->octx, data, 1);
|
||||
+}
|
||||
+
|
||||
+#ifdef __cplusplus
|
||||
+}
|
||||
+#endif
|
||||
diff -uNr polarssl-1.2.7/include/polarssl/sha256_alt.h polarssl.new/include/polarssl/sha256_alt.h
|
||||
--- polarssl-1.2.7/include/polarssl/sha256_alt.h 1969-12-31 17:00:00.000000000 -0700
|
||||
+++ polarssl.new/include/polarssl/sha256_alt.h 2013-06-07 17:43:56.000000000 -0600
|
||||
@@ -0,0 +1,71 @@
|
||||
+/*
|
||||
+ * Use OpenSSL implementation of SHA256 methods to get asm and hardware acceleration.
|
||||
+ * Don't include this file directly, it is included by sha256.h when
|
||||
+ * POLARSSL_SHA256_ALT is defined.
|
||||
+ */
|
||||
+
|
||||
+#include "polarssl/sha_openssl.h"
|
||||
+
|
||||
+struct openssl_sha256_context {
|
||||
+ SHA_LONG h[8];
|
||||
+ SHA_LONG Nl,Nh;
|
||||
+ SHA_LONG data[SHA_LBLOCK];
|
||||
+ unsigned int num,md_len;
|
||||
+};
|
||||
+
|
||||
+typedef struct
|
||||
+{
|
||||
+ struct openssl_sha256_context octx;
|
||||
+
|
||||
+ unsigned char ipad[64]; /*!< HMAC: inner padding */
|
||||
+ unsigned char opad[64]; /*!< HMAC: outer padding */
|
||||
+ int is224; /*!< 0 => SHA-256, else SHA-224 */
|
||||
+}
|
||||
+sha256_context;
|
||||
+
|
||||
+#ifdef __cplusplus
|
||||
+extern "C" {
|
||||
+#endif
|
||||
+
|
||||
+int SHA224_Init(struct openssl_sha256_context *c);
|
||||
+int SHA224_Update(struct openssl_sha256_context *c, const void *data, size_t len);
|
||||
+int SHA224_Final(unsigned char *md, struct openssl_sha256_context *c);
|
||||
+
|
||||
+int SHA256_Init(struct openssl_sha256_context *c);
|
||||
+int SHA256_Update(struct openssl_sha256_context *c, const void *data, size_t len);
|
||||
+int SHA256_Final(unsigned char *md, struct openssl_sha256_context *c);
|
||||
+
|
||||
+void sha256_block_data_order(struct openssl_sha256_context *c, const void *p, size_t num);
|
||||
+
|
||||
+static inline void sha256_starts( sha256_context *ctx, int is224 )
|
||||
+{
|
||||
+ if ((ctx->is224 = is224))
|
||||
+ SHA224_Init(&ctx->octx);
|
||||
+ else
|
||||
+ SHA256_Init(&ctx->octx);
|
||||
+}
|
||||
+
|
||||
+static inline void sha256_update( sha256_context *ctx, const unsigned char *input, size_t ilen )
|
||||
+{
|
||||
+ if (ctx->is224)
|
||||
+ SHA224_Update(&ctx->octx, input, ilen);
|
||||
+ else
|
||||
+ SHA256_Update(&ctx->octx, input, ilen);
|
||||
+}
|
||||
+
|
||||
+static inline void sha256_finish( sha256_context *ctx, unsigned char output[32] )
|
||||
+{
|
||||
+ if (ctx->is224)
|
||||
+ SHA224_Final(output, &ctx->octx);
|
||||
+ else
|
||||
+ SHA256_Final(output, &ctx->octx);
|
||||
+}
|
||||
+
|
||||
+static inline void sha256_process( sha256_context *ctx, const unsigned char data[64] )
|
||||
+{
|
||||
+ sha256_block_data_order(&ctx->octx, data, 1);
|
||||
+}
|
||||
+
|
||||
+#ifdef __cplusplus
|
||||
+}
|
||||
+#endif
|
||||
diff -uNr polarssl-1.2.7/include/polarssl/sha512_alt.h polarssl.new/include/polarssl/sha512_alt.h
|
||||
--- polarssl-1.2.7/include/polarssl/sha512_alt.h 1969-12-31 17:00:00.000000000 -0700
|
||||
+++ polarssl.new/include/polarssl/sha512_alt.h 2013-06-07 17:43:56.000000000 -0600
|
||||
@@ -0,0 +1,74 @@
|
||||
+/*
|
||||
+ * Use OpenSSL implementation of SHA512 methods to get asm and hardware acceleration.
|
||||
+ * Don't include this file directly, it is included by sha512.h when
|
||||
+ * POLARSSL_SHA512_ALT is defined.
|
||||
+ */
|
||||
+
|
||||
+#include "polarssl/sha_openssl.h"
|
||||
+
|
||||
+struct openssl_sha512_context {
|
||||
+ SHA_LONG64 h[8];
|
||||
+ SHA_LONG64 Nl,Nh;
|
||||
+ union {
|
||||
+ SHA_LONG64 d[SHA_LBLOCK];
|
||||
+ unsigned char p[SHA512_CBLOCK];
|
||||
+ } u;
|
||||
+ unsigned int num,md_len;
|
||||
+};
|
||||
+
|
||||
+typedef struct
|
||||
+{
|
||||
+ struct openssl_sha512_context octx;
|
||||
+
|
||||
+ unsigned char ipad[128]; /*!< HMAC: inner padding */
|
||||
+ unsigned char opad[128]; /*!< HMAC: outer padding */
|
||||
+ int is384; /*!< 0 => SHA-512, else SHA-384 */
|
||||
+}
|
||||
+sha512_context;
|
||||
+
|
||||
+#ifdef __cplusplus
|
||||
+extern "C" {
|
||||
+#endif
|
||||
+
|
||||
+int SHA384_Init(struct openssl_sha512_context *c);
|
||||
+int SHA384_Update(struct openssl_sha512_context *c, const void *data, size_t len);
|
||||
+int SHA384_Final(unsigned char *md, struct openssl_sha512_context *c);
|
||||
+
|
||||
+int SHA512_Init(struct openssl_sha512_context *c);
|
||||
+int SHA512_Update(struct openssl_sha512_context *c, const void *data, size_t len);
|
||||
+int SHA512_Final(unsigned char *md, struct openssl_sha512_context *c);
|
||||
+
|
||||
+void sha512_block_data_order(struct openssl_sha512_context *c, const void *p, size_t num);
|
||||
+
|
||||
+static inline void sha512_starts( sha512_context *ctx, int is384 )
|
||||
+{
|
||||
+ if ((ctx->is384 = is384))
|
||||
+ SHA384_Init(&ctx->octx);
|
||||
+ else
|
||||
+ SHA512_Init(&ctx->octx);
|
||||
+}
|
||||
+
|
||||
+static inline void sha512_update( sha512_context *ctx, const unsigned char *input, size_t ilen )
|
||||
+{
|
||||
+ if (ctx->is384)
|
||||
+ SHA384_Update(&ctx->octx, input, ilen);
|
||||
+ else
|
||||
+ SHA512_Update(&ctx->octx, input, ilen);
|
||||
+}
|
||||
+
|
||||
+static inline void sha512_finish( sha512_context *ctx, unsigned char output[64] )
|
||||
+{
|
||||
+ if (ctx->is384)
|
||||
+ SHA384_Final(output, &ctx->octx);
|
||||
+ else
|
||||
+ SHA512_Final(output, &ctx->octx);
|
||||
+}
|
||||
+
|
||||
+static inline void sha512_process( sha512_context *ctx, const unsigned char data[128] )
|
||||
+{
|
||||
+ sha512_block_data_order(&ctx->octx, data, 1);
|
||||
+}
|
||||
+
|
||||
+#ifdef __cplusplus
|
||||
+}
|
||||
+#endif
|
||||
diff -uNr polarssl-1.2.7/include/polarssl/sha_openssl.h polarssl.new/include/polarssl/sha_openssl.h
|
||||
--- polarssl-1.2.7/include/polarssl/sha_openssl.h 1969-12-31 17:00:00.000000000 -0700
|
||||
+++ polarssl.new/include/polarssl/sha_openssl.h 2013-06-07 17:43:56.000000000 -0600
|
||||
@@ -0,0 +1,42 @@
|
||||
+/*
|
||||
+ * Common header file for all OpenSSL-imported SHA methods
|
||||
+ */
|
||||
+
|
||||
+#ifndef POLARSSL_SHA_OPENSSL_H
|
||||
+#define POLARSSL_SHA_OPENSSL_H
|
||||
+
|
||||
+/*
|
||||
+ * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
+ * ! SHA_LONG has to be at least 32 bits wide. If it's wider, then !
|
||||
+ * ! SHA_LONG_LOG2 has to be defined along. !
|
||||
+ * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
+ */
|
||||
+
|
||||
+#if defined(__LP32__)
|
||||
+#define SHA_LONG unsigned long
|
||||
+#elif defined(OPENSSL_SYS_CRAY) || defined(__ILP64__)
|
||||
+#define SHA_LONG unsigned long
|
||||
+#define SHA_LONG_LOG2 3
|
||||
+#else
|
||||
+#define SHA_LONG unsigned int
|
||||
+#endif
|
||||
+
|
||||
+#define SHA_LBLOCK 16
|
||||
+
|
||||
+/*
|
||||
+ * Unlike 32-bit digest algorithms, SHA-512 *relies* on SHA_LONG64
|
||||
+ * being exactly 64-bit wide. See Implementation Notes in sha512.c
|
||||
+ * for further details.
|
||||
+ */
|
||||
+#define SHA512_CBLOCK (SHA_LBLOCK*8) /* SHA-512 treats input data as a
|
||||
+ * contiguous array of 64 bit
|
||||
+ * wide big-endian values. */
|
||||
+#if (defined(_WIN32) || defined(_WIN64)) && !defined(__MINGW32__)
|
||||
+#define SHA_LONG64 unsigned __int64
|
||||
+#elif defined(__arch64__)
|
||||
+#define SHA_LONG64 unsigned long
|
||||
+#else
|
||||
+#define SHA_LONG64 unsigned long long
|
||||
+#endif
|
||||
+
|
||||
+#endif
|
||||
@@ -0,0 +1,24 @@
|
||||
AES_set_encrypt_key
|
||||
AES_set_decrypt_key
|
||||
AES_ecb_encrypt
|
||||
AES_cbc_encrypt
|
||||
BF_set_key
|
||||
BF_ecb_encrypt
|
||||
BF_cbc_encrypt
|
||||
SHA1_Init
|
||||
SHA1_Update
|
||||
SHA1_Final
|
||||
SHA224_Init
|
||||
SHA224_Update
|
||||
SHA224_Final
|
||||
SHA256_Init
|
||||
SHA256_Update
|
||||
SHA256_Final
|
||||
SHA384_Init
|
||||
SHA384_Update
|
||||
SHA384_Final
|
||||
SHA512_Init
|
||||
SHA512_Update
|
||||
SHA512_Final
|
||||
OPENSSL_ia32_cpuid
|
||||
-OPENSSL_cpuid_setup
|
||||
@@ -0,0 +1,24 @@
|
||||
aesni_set_encrypt_key
|
||||
aesni_set_decrypt_key
|
||||
aesni_ecb_encrypt
|
||||
aesni_cbc_encrypt
|
||||
BF_set_key
|
||||
BF_ecb_encrypt
|
||||
BF_cbc_encrypt
|
||||
SHA1_Init
|
||||
SHA1_Update
|
||||
SHA1_Final
|
||||
SHA224_Init
|
||||
SHA224_Update
|
||||
SHA224_Final
|
||||
SHA256_Init
|
||||
SHA256_Update
|
||||
SHA256_Final
|
||||
SHA384_Init
|
||||
SHA384_Update
|
||||
SHA384_Final
|
||||
SHA512_Init
|
||||
SHA512_Update
|
||||
SHA512_Final
|
||||
OPENSSL_ia32_cpuid
|
||||
-OPENSSL_cpuid_setup
|
||||
@@ -0,0 +1,118 @@
|
||||
diff -ur mbedtls-1.3.17/library/x509.c polarssl.new/library/x509.c
|
||||
--- mbedtls-1.3.17/library/x509.c 2016-06-27 13:00:26.000000000 -0600
|
||||
+++ polarssl.new/library/x509.c 2016-08-04 17:21:52.000000000 -0600
|
||||
@@ -490,6 +490,73 @@
|
||||
}
|
||||
|
||||
/*
|
||||
+ * Parse an ASN1_UTC_TIME (yearlen=2) or ASN1_GENERALIZED_TIME (yearlen=4) field.
|
||||
+ */
|
||||
+static int x509_parse_time(unsigned char **p, size_t len, unsigned int yearlen, x509_time *time)
|
||||
+{
|
||||
+ int ret;
|
||||
+
|
||||
+ /* minimum length is 10 or 12 depending on yearlen */
|
||||
+ if (len < yearlen + 8)
|
||||
+ return POLARSSL_ERR_X509_INVALID_DATE;
|
||||
+ len -= yearlen + 8;
|
||||
+
|
||||
+ /* parse year, month, day, hour, minute */
|
||||
+ CHECK( x509_parse_int( p, yearlen, &time->year ) );
|
||||
+ if (yearlen == 2)
|
||||
+ {
|
||||
+ if (time->year < 50)
|
||||
+ time->year += 100;
|
||||
+ time->year += 1900;
|
||||
+ }
|
||||
+ CHECK( x509_parse_int( p, 2, &time->mon ) );
|
||||
+ CHECK( x509_parse_int( p, 2, &time->day ) );
|
||||
+ CHECK( x509_parse_int( p, 2, &time->hour ) );
|
||||
+ CHECK( x509_parse_int( p, 2, &time->min ) );
|
||||
+
|
||||
+ /* parse seconds if present */
|
||||
+ if (len >= 2 && **p >= '0' && **p <= '9')
|
||||
+ {
|
||||
+ CHECK( x509_parse_int( p, 2, &time->sec ) );
|
||||
+ len -= 2;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+#if defined(POLARSSL_RELAXED_X509_DATE)
|
||||
+ /* if relaxed mode, allow seconds to be absent */
|
||||
+ time->sec = 0;
|
||||
+#else
|
||||
+ return POLARSSL_ERR_X509_INVALID_DATE;
|
||||
+#endif
|
||||
+ }
|
||||
+
|
||||
+ /* parse trailing 'Z' if present */
|
||||
+ if (len == 1 && **p == 'Z')
|
||||
+ {
|
||||
+ (*p)++;
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+#if defined(POLARSSL_RELAXED_X509_DATE)
|
||||
+ /* if relaxed mode, allow timezone to be present */
|
||||
+ else if (len == 5 && **p == '+')
|
||||
+ {
|
||||
+ int tz; /* throwaway timezone */
|
||||
+ (*p)++;
|
||||
+ CHECK( x509_parse_int( p, 4, &tz ) );
|
||||
+ return 0;
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
+ /* okay if no trailing 'Z' or timezone specified */
|
||||
+ else if (len == 0)
|
||||
+ return 0;
|
||||
+
|
||||
+ else
|
||||
+ return POLARSSL_ERR_X509_INVALID_DATE;
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
* Time ::= CHOICE {
|
||||
* utcTime UTCTime,
|
||||
* generalTime GeneralizedTime }
|
||||
@@ -515,20 +582,7 @@
|
||||
if( ret != 0 )
|
||||
return( POLARSSL_ERR_X509_INVALID_DATE + ret );
|
||||
|
||||
- CHECK( x509_parse_int( p, 2, &time->year ) );
|
||||
- CHECK( x509_parse_int( p, 2, &time->mon ) );
|
||||
- CHECK( x509_parse_int( p, 2, &time->day ) );
|
||||
- CHECK( x509_parse_int( p, 2, &time->hour ) );
|
||||
- CHECK( x509_parse_int( p, 2, &time->min ) );
|
||||
- if( len > 10 )
|
||||
- CHECK( x509_parse_int( p, 2, &time->sec ) );
|
||||
- if( len > 12 && *(*p)++ != 'Z' )
|
||||
- return( POLARSSL_ERR_X509_INVALID_DATE );
|
||||
-
|
||||
- time->year += 100 * ( time->year < 50 );
|
||||
- time->year += 1900;
|
||||
-
|
||||
- return( 0 );
|
||||
+ return x509_parse_time(p, len, 2, time);
|
||||
}
|
||||
else if( tag == ASN1_GENERALIZED_TIME )
|
||||
{
|
||||
@@ -538,17 +592,7 @@
|
||||
if( ret != 0 )
|
||||
return( POLARSSL_ERR_X509_INVALID_DATE + ret );
|
||||
|
||||
- CHECK( x509_parse_int( p, 4, &time->year ) );
|
||||
- CHECK( x509_parse_int( p, 2, &time->mon ) );
|
||||
- CHECK( x509_parse_int( p, 2, &time->day ) );
|
||||
- CHECK( x509_parse_int( p, 2, &time->hour ) );
|
||||
- CHECK( x509_parse_int( p, 2, &time->min ) );
|
||||
- if( len > 12 )
|
||||
- CHECK( x509_parse_int( p, 2, &time->sec ) );
|
||||
- if( len > 14 && *(*p)++ != 'Z' )
|
||||
- return( POLARSSL_ERR_X509_INVALID_DATE );
|
||||
-
|
||||
- return( 0 );
|
||||
+ return x509_parse_time(p, len, 4, time);
|
||||
}
|
||||
else
|
||||
return( POLARSSL_ERR_X509_INVALID_DATE +
|
||||
Executable
+13
@@ -0,0 +1,13 @@
|
||||
#!/usr/bin/env bash
|
||||
ver=1.2.7
|
||||
src=~/src/mac/polarssl-$ver
|
||||
rm -rf polarssl-$ver polarssl-$ver.new
|
||||
tar xfz $DL/polarssl-$ver-gpl.tgz
|
||||
cp -a polarssl-$ver polarssl-$ver.new
|
||||
cd polarssl-$ver.new
|
||||
cp $src/include/polarssl/bn_mul.h include/polarssl/
|
||||
cp $src/library/bignum.c library/
|
||||
#cp $src/library/mpi_mul_hlp.c library/
|
||||
#cp $src/library/CMakeLists.txt library/
|
||||
cd ..
|
||||
diff -uNr polarssl-$ver polarssl-$ver.new
|
||||
@@ -0,0 +1,37 @@
|
||||
Make the ciphersuites array argument to ssl_set_ciphersuites const.
|
||||
This should be done to assure callers that PolarSSL doesn't intend
|
||||
to modify this array (which it apparently doesn't).
|
||||
|
||||
diff -ur polarssl-1.1.1/include/polarssl/ssl.h polarssl-1.1.1.new/include/polarssl/ssl.h
|
||||
--- polarssl-1.1.1/include/polarssl/ssl.h 2012-01-23 02:57:38.000000000 -0700
|
||||
+++ polarssl-1.1.1.new/include/polarssl/ssl.h 2012-03-14 02:46:30.315215130 -0600
|
||||
@@ -306,7 +306,7 @@
|
||||
sha1_context fin_sha1; /*!< Finished SHA-1 checksum */
|
||||
|
||||
int do_crypt; /*!< en(de)cryption flag */
|
||||
- int *ciphersuites; /*!< allowed ciphersuites */
|
||||
+ const int *ciphersuites; /*!< allowed ciphersuites */
|
||||
size_t pmslen; /*!< premaster length */
|
||||
unsigned int keylen; /*!< symmetric key length */
|
||||
size_t minlen; /*!< min. ciphertext length */
|
||||
@@ -495,7 +495,7 @@
|
||||
* \param ssl SSL context
|
||||
* \param ciphersuites 0-terminated list of allowed ciphersuites
|
||||
*/
|
||||
-void ssl_set_ciphersuites( ssl_context *ssl, int *ciphersuites );
|
||||
+void ssl_set_ciphersuites( ssl_context *ssl, const int *ciphersuites );
|
||||
|
||||
/**
|
||||
* \brief Set the data required to verify peer certificate
|
||||
diff -ur polarssl-1.1.1/library/ssl_tls.c polarssl-1.1.1.new/library/ssl_tls.c
|
||||
--- polarssl-1.1.1/library/ssl_tls.c 2012-01-23 02:57:38.000000000 -0700
|
||||
+++ polarssl-1.1.1.new/library/ssl_tls.c 2012-03-14 02:47:10.830001668 -0600
|
||||
@@ -1838,7 +1838,7 @@
|
||||
ssl->session = session;
|
||||
}
|
||||
|
||||
-void ssl_set_ciphersuites( ssl_context *ssl, int *ciphersuites )
|
||||
+void ssl_set_ciphersuites( ssl_context *ssl, const int *ciphersuites )
|
||||
{
|
||||
ssl->ciphersuites = ciphersuites;
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
This fixes an issue where the cipher.h header doesn't compile when included
|
||||
by C++ code, as C++ is more strict than C about implicit enum casts.
|
||||
|
||||
diff -ur polarssl-1.1.1/include/polarssl/cipher.h /home/james/polarssl-1.1.1/include/polarssl/cipher.h
|
||||
--- polarssl-1.1.1/include/polarssl/cipher.h 2011-11-15 08:38:45.000000000 -0700
|
||||
+++ /home/james/polarssl-1.1.1/include/polarssl/cipher.h 2012-03-12 17:31:12.279631469 -0600
|
||||
@@ -313,7 +313,7 @@
|
||||
static inline cipher_type_t cipher_get_type( const cipher_context_t *ctx )
|
||||
{
|
||||
if( NULL == ctx || NULL == ctx->cipher_info )
|
||||
- return 0;
|
||||
+ return POLARSSL_CIPHER_NONE;
|
||||
|
||||
return ctx->cipher_info->type;
|
||||
}
|
||||
@@ -0,0 +1,181 @@
|
||||
This patch allows the caller to create a proxy object that can be used
|
||||
in place of a private key. The proxy object must define sign and
|
||||
decrypt methods. This functionality is similar to that provided by
|
||||
POLARSSL_PKCS11_C except that it can accomodate any arbitrary
|
||||
implementation of external private keys, not only that provided by
|
||||
the PKCS#11 helper library.
|
||||
|
||||
This is necessary to allow PolarSSL to interact with certificate/key
|
||||
stores on many different platforms that don't natively support
|
||||
PKCS#11 such as Mac (uses Keychain API), Windows (uses CryptoAPI),
|
||||
and Android (android.security.KeyChain).
|
||||
|
||||
In the basic usage model, the library is built with POLARSSL_PKCS11_C
|
||||
and POLARSSL_GENERIC_EXTERNAL_PRIVATE_KEY. Doing this causes the
|
||||
pkcs11_context object to become an interface to any arbitrary
|
||||
external private key implementation that defines sign and decrypt
|
||||
methods. Note that in this configuration, the PKCS#11 helper library
|
||||
(libpkcs11-helper) is not used.
|
||||
|
||||
When POLARSSL_PKCS11_C is defined in the absence of
|
||||
POLARSSL_GENERIC_EXTERNAL_PRIVATE_KEY, the pkcs11_context object
|
||||
reverts to its previous implementation, where it becomes a
|
||||
connector to a certificate/private-key context in the PKCS#11 helper
|
||||
library.
|
||||
|
||||
diff -ur polarssl-1.1.1.orig/include/polarssl/config.h polarssl-1.1.1/include/polarssl/config.h
|
||||
--- polarssl-1.1.1.orig/include/polarssl/config.h 2011-12-22 03:06:27.000000000 -0700
|
||||
+++ polarssl-1.1.1/include/polarssl/config.h 2012-03-14 02:31:04.000000000 -0600
|
||||
@@ -531,10 +531,26 @@
|
||||
*
|
||||
* This module is required for SSL/TLS PKCS #11 smartcard support.
|
||||
* Requires the presence of the PKCS#11 helper library (libpkcs11-helper)
|
||||
+ * unless POLARSSL_GENERIC_EXTERNAL_PRIVATE_KEY is also defined.
|
||||
+ *
|
||||
#define POLARSSL_PKCS11_C
|
||||
*/
|
||||
|
||||
/**
|
||||
+ * \def POLARSSL_GENERIC_EXTERNAL_PRIVATE_KEY
|
||||
+ *
|
||||
+ * Enable support for generic external private key implementations.
|
||||
+ *
|
||||
+ * Module: library/ssl_srv.c
|
||||
+ * Caller: library/ssl_cli.c
|
||||
+ * library/ssl_srv.c
|
||||
+ *
|
||||
+ * Requires: POLARSSL_PKCS11_C
|
||||
+ *
|
||||
+#define POLARSSL_GENERIC_EXTERNAL_PRIVATE_KEY
|
||||
+ */
|
||||
+
|
||||
+/**
|
||||
* \def POLARSSL_RSA_C
|
||||
*
|
||||
* Enable the RSA public-key cryptosystem.
|
||||
diff -ur polarssl-1.1.1.orig/include/polarssl/pkcs11.h polarssl-1.1.1/include/polarssl/pkcs11.h
|
||||
--- polarssl-1.1.1.orig/include/polarssl/pkcs11.h 2011-11-18 07:26:47.000000000 -0700
|
||||
+++ polarssl-1.1.1/include/polarssl/pkcs11.h 2012-03-14 02:28:34.000000000 -0600
|
||||
@@ -35,6 +35,95 @@
|
||||
|
||||
#include "x509.h"
|
||||
|
||||
+#if defined(POLARSSL_GENERIC_EXTERNAL_PRIVATE_KEY)
|
||||
+
|
||||
+/* inline preamble */
|
||||
+#if defined(_MSC_VER) && !defined(inline)
|
||||
+#define inline _inline
|
||||
+#else
|
||||
+#if defined(__ARMCC_VERSION) && !defined(inline)
|
||||
+#define inline __inline
|
||||
+#endif /* __ARMCC_VERSION */
|
||||
+#endif /*_MSC_VER */
|
||||
+
|
||||
+/**
|
||||
+ * This object is a reference to an external private key,
|
||||
+ * and can be used in place of a concrete private key.
|
||||
+ */
|
||||
+typedef struct _pkcs11_context {
|
||||
+ void *parameter; /** user-defined parameter */
|
||||
+ int len; /** private key length in bytes */
|
||||
+
|
||||
+ /** user-defined decrypt method, see pkcs11_decrypt doc below */
|
||||
+ int (*f_decrypt)( struct _pkcs11_context *ctx,
|
||||
+ int mode, size_t *olen,
|
||||
+ const unsigned char *input,
|
||||
+ unsigned char *output,
|
||||
+ unsigned int output_max_len );
|
||||
+
|
||||
+ /** user-defined sign method, see pkcs11_sign doc below */
|
||||
+ int (*f_sign)( struct _pkcs11_context *ctx,
|
||||
+ int mode,
|
||||
+ int hash_id,
|
||||
+ unsigned int hashlen,
|
||||
+ const unsigned char *hash,
|
||||
+ unsigned char *sig );
|
||||
+
|
||||
+} pkcs11_context;
|
||||
+
|
||||
+/**
|
||||
+ * \brief Do an RSA private key decrypt, then remove the message padding
|
||||
+ *
|
||||
+ * \param ctx PKCS #11 context
|
||||
+ * \param mode must be RSA_PRIVATE, for compatibility with rsa.c's signature
|
||||
+ * \param input buffer holding the encrypted data
|
||||
+ * \param output buffer that will hold the plaintext
|
||||
+ * \param olen will contain the plaintext length
|
||||
+ * \param output_max_len maximum length of the output buffer
|
||||
+ *
|
||||
+ * \return 0 if successful, or an POLARSSL_ERR_RSA_XXX error code
|
||||
+ *
|
||||
+ * \note The output buffer must be as large as the size
|
||||
+ * of ctx->N (eg. 128 bytes if RSA-1024 is used) otherwise
|
||||
+ * an error is thrown.
|
||||
+ */
|
||||
+static inline int pkcs11_decrypt( pkcs11_context *ctx,
|
||||
+ int mode, size_t *olen,
|
||||
+ const unsigned char *input,
|
||||
+ unsigned char *output,
|
||||
+ unsigned int output_max_len )
|
||||
+{
|
||||
+ return (*ctx->f_decrypt)(ctx, mode, olen, input, output, output_max_len);
|
||||
+}
|
||||
+
|
||||
+/**
|
||||
+ * \brief Do a private RSA to sign a message digest
|
||||
+ *
|
||||
+ * \param ctx PKCS #11 context
|
||||
+ * \param mode must be RSA_PRIVATE, for compatibility with rsa.c's signature
|
||||
+ * \param hash_id SIG_RSA_RAW, SIG_RSA_MD{2,4,5} or SIG_RSA_SHA{1,224,256,384,512}
|
||||
+ * \param hashlen message digest length (for SIG_RSA_RAW only)
|
||||
+ * \param hash buffer holding the message digest
|
||||
+ * \param sig buffer that will hold the ciphertext
|
||||
+ *
|
||||
+ * \return 0 if the signing operation was successful,
|
||||
+ * or an POLARSSL_ERR_RSA_XXX error code
|
||||
+ *
|
||||
+ * \note The "sig" buffer must be as large as the size
|
||||
+ * of ctx->N (eg. 128 bytes if RSA-1024 is used).
|
||||
+ */
|
||||
+static inline int pkcs11_sign( pkcs11_context *ctx,
|
||||
+ int mode,
|
||||
+ int hash_id,
|
||||
+ unsigned int hashlen,
|
||||
+ const unsigned char *hash,
|
||||
+ unsigned char *sig )
|
||||
+{
|
||||
+ return (*ctx->f_sign)(ctx, mode, hash_id, hashlen, hash, sig);
|
||||
+}
|
||||
+
|
||||
+#else
|
||||
+
|
||||
#include <pkcs11-helper-1.0/pkcs11h-certificate.h>
|
||||
|
||||
/**
|
||||
@@ -121,6 +210,8 @@
|
||||
const unsigned char *hash,
|
||||
unsigned char *sig );
|
||||
|
||||
+#endif /* POLARSSL_GENERIC_EXTERNAL_PRIVATE_KEY */
|
||||
+
|
||||
#endif /* POLARSSL_PKCS11_C */
|
||||
|
||||
#endif /* POLARSSL_PKCS11_H */
|
||||
diff -ur polarssl-1.1.1.orig/library/pkcs11.c polarssl-1.1.1/library/pkcs11.c
|
||||
--- polarssl-1.1.1.orig/library/pkcs11.c 2011-04-24 02:57:21.000000000 -0600
|
||||
+++ polarssl-1.1.1/library/pkcs11.c 2012-03-14 02:28:22.000000000 -0600
|
||||
@@ -29,7 +29,7 @@
|
||||
|
||||
#include "polarssl/pkcs11.h"
|
||||
|
||||
-#if defined(POLARSSL_PKCS11_C)
|
||||
+#if defined(POLARSSL_PKCS11_C) && !defined(POLARSSL_GENERIC_EXTERNAL_PRIVATE_KEY)
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
@@ -235,4 +235,4 @@
|
||||
return( 0 );
|
||||
}
|
||||
|
||||
-#endif /* defined(POLARSSL_PKCS11_C) */
|
||||
+#endif /* defined(POLARSSL_PKCS11_C) && !defined(POLARSSL_GENERIC_EXTERNAL_PRIVATE_KEY) */
|
||||
@@ -0,0 +1,12 @@
|
||||
diff -ur polarssl-1.1.3/library/ssl_tls.c polarssl-1.1.3.jy/library/ssl_tls.c
|
||||
--- polarssl-1.1.3/library/ssl_tls.c 2012-04-20 07:33:14.000000000 -0600
|
||||
+++ polarssl-1.1.3.jy/library/ssl_tls.c 2012-05-29 09:12:11.687371794 -0600
|
||||
@@ -785,7 +785,7 @@
|
||||
/*
|
||||
* Always compute the MAC (RFC4346, CBCTIME).
|
||||
*/
|
||||
- if( ssl->in_msglen <= ssl->maclen + padlen )
|
||||
+ if( ssl->in_msglen < ssl->maclen + padlen )
|
||||
{
|
||||
SSL_DEBUG_MSG( 1, ( "msglen (%d) < maclen (%d) + padlen (%d)",
|
||||
ssl->in_msglen, ssl->maclen, padlen ) );
|
||||
@@ -0,0 +1,44 @@
|
||||
Patch to 1.1.4 to allow X509 v3 trust extensions.
|
||||
--------------------------------------------------
|
||||
Index: x509parse.c
|
||||
===================================================================
|
||||
--- x509parse.c (revision 1322)
|
||||
+++ x509parse.c (working copy)
|
||||
@@ -1134,7 +1134,7 @@
|
||||
{
|
||||
int ret;
|
||||
size_t len;
|
||||
- unsigned char *p, *end;
|
||||
+ unsigned char *p, *end, *crt_end;
|
||||
|
||||
/*
|
||||
* Check for valid input
|
||||
@@ -1168,13 +1168,14 @@
|
||||
return( POLARSSL_ERR_X509_CERT_INVALID_FORMAT );
|
||||
}
|
||||
|
||||
- if( len != (size_t) ( end - p ) )
|
||||
+ if( len > (size_t) ( end - p ) )
|
||||
{
|
||||
x509_free( crt );
|
||||
return( POLARSSL_ERR_X509_CERT_INVALID_FORMAT +
|
||||
POLARSSL_ERR_ASN1_LENGTH_MISMATCH );
|
||||
}
|
||||
-
|
||||
+ crt_end = p + len;
|
||||
+
|
||||
/*
|
||||
* TBSCertificate ::= SEQUENCE {
|
||||
*/
|
||||
@@ -1344,7 +1345,7 @@
|
||||
POLARSSL_ERR_ASN1_LENGTH_MISMATCH );
|
||||
}
|
||||
|
||||
- end = crt->raw.p + crt->raw.len;
|
||||
+ end = crt_end;
|
||||
|
||||
/*
|
||||
* signatureAlgorithm AlgorithmIdentifier,
|
||||
|
||||
----------------------------------------------------
|
||||
End of patch file
|
||||
Reference in New Issue
Block a user