forked from wolfSSL/wolfssl
Merge branch 'master' of https://github.com/wolfSSL/wolfssl
This commit is contained in:
@@ -1956,9 +1956,15 @@
|
|||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\..\..\..\wolfcrypt\src\error.c</name>
|
<name>$PROJ_DIR$\..\..\..\..\wolfcrypt\src\error.c</name>
|
||||||
</file>
|
</file>
|
||||||
|
<file>
|
||||||
|
<name>$PROJ_DIR$\..\..\..\..\wolfcrypt\src\fe_low_mem.c</name>
|
||||||
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\..\..\..\wolfcrypt\src\fe_operations.c</name>
|
<name>$PROJ_DIR$\..\..\..\..\wolfcrypt\src\fe_operations.c</name>
|
||||||
</file>
|
</file>
|
||||||
|
<file>
|
||||||
|
<name>$PROJ_DIR$\..\..\..\..\wolfcrypt\src\ge_low_mem.c</name>
|
||||||
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\..\..\..\wolfcrypt\src\ge_operations.c</name>
|
<name>$PROJ_DIR$\..\..\..\..\wolfcrypt\src\ge_operations.c</name>
|
||||||
</file>
|
</file>
|
||||||
@@ -2022,9 +2028,15 @@
|
|||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\..\..\..\wolfcrypt\src\sha512.c</name>
|
<name>$PROJ_DIR$\..\..\..\..\wolfcrypt\src\sha512.c</name>
|
||||||
</file>
|
</file>
|
||||||
|
<file>
|
||||||
|
<name>$PROJ_DIR$\..\..\..\..\wolfcrypt\src\srp.c</name>
|
||||||
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\..\..\..\wolfcrypt\src\tfm.c</name>
|
<name>$PROJ_DIR$\..\..\..\..\wolfcrypt\src\tfm.c</name>
|
||||||
</file>
|
</file>
|
||||||
|
<file>
|
||||||
|
<name>$PROJ_DIR$\..\..\..\..\wolfcrypt\src\wc_encrypt.c</name>
|
||||||
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\..\..\..\wolfcrypt\src\wc_port.c</name>
|
<name>$PROJ_DIR$\..\..\..\..\wolfcrypt\src\wc_port.c</name>
|
||||||
</file>
|
</file>
|
||||||
|
|||||||
@@ -797,7 +797,7 @@ void bench_blake2(void)
|
|||||||
|
|
||||||
#if !defined(NO_RSA) || !defined(NO_DH) \
|
#if !defined(NO_RSA) || !defined(NO_DH) \
|
||||||
|| defined(CYASSL_KEYGEN) || defined(HAVE_ECC)
|
|| defined(CYASSL_KEYGEN) || defined(HAVE_ECC)
|
||||||
static RNG rng;
|
static WC_RNG rng;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef NO_RSA
|
#ifndef NO_RSA
|
||||||
|
|||||||
@@ -2667,7 +2667,7 @@ int random_test(void)
|
|||||||
|
|
||||||
int random_test(void)
|
int random_test(void)
|
||||||
{
|
{
|
||||||
RNG rng;
|
WC_RNG rng;
|
||||||
byte block[32];
|
byte block[32];
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
@@ -2693,7 +2693,7 @@ byte GetEntropy(ENTROPY_CMD cmd, byte* out);
|
|||||||
|
|
||||||
byte GetEntropy(ENTROPY_CMD cmd, byte* out)
|
byte GetEntropy(ENTROPY_CMD cmd, byte* out)
|
||||||
{
|
{
|
||||||
static RNG rng;
|
static WC_RNG rng;
|
||||||
|
|
||||||
if (cmd == INIT)
|
if (cmd == INIT)
|
||||||
return (InitRng(&rng) == 0) ? 1 : 0;
|
return (InitRng(&rng) == 0) ? 1 : 0;
|
||||||
@@ -2768,7 +2768,7 @@ int rsa_test(void)
|
|||||||
byte* tmp;
|
byte* tmp;
|
||||||
size_t bytes;
|
size_t bytes;
|
||||||
RsaKey key;
|
RsaKey key;
|
||||||
RNG rng;
|
WC_RNG rng;
|
||||||
word32 idx = 0;
|
word32 idx = 0;
|
||||||
int ret;
|
int ret;
|
||||||
byte in[] = "Everyone gets Friday off.";
|
byte in[] = "Everyone gets Friday off.";
|
||||||
@@ -3652,7 +3652,7 @@ int dh_test(void)
|
|||||||
byte agree2[256];
|
byte agree2[256];
|
||||||
DhKey key;
|
DhKey key;
|
||||||
DhKey key2;
|
DhKey key2;
|
||||||
RNG rng;
|
WC_RNG rng;
|
||||||
|
|
||||||
|
|
||||||
#ifdef USE_CERT_BUFFERS_1024
|
#ifdef USE_CERT_BUFFERS_1024
|
||||||
@@ -3725,7 +3725,7 @@ int dsa_test(void)
|
|||||||
word32 idx = 0;
|
word32 idx = 0;
|
||||||
byte tmp[1024];
|
byte tmp[1024];
|
||||||
DsaKey key;
|
DsaKey key;
|
||||||
RNG rng;
|
WC_RNG rng;
|
||||||
Sha sha;
|
Sha sha;
|
||||||
byte hash[SHA_DIGEST_SIZE];
|
byte hash[SHA_DIGEST_SIZE];
|
||||||
byte signature[40];
|
byte signature[40];
|
||||||
@@ -4200,7 +4200,7 @@ int hkdf_test(void)
|
|||||||
|
|
||||||
int ecc_test(void)
|
int ecc_test(void)
|
||||||
{
|
{
|
||||||
RNG rng;
|
WC_RNG rng;
|
||||||
byte sharedA[1024];
|
byte sharedA[1024];
|
||||||
byte sharedB[1024];
|
byte sharedB[1024];
|
||||||
byte sig[1024];
|
byte sig[1024];
|
||||||
@@ -4300,7 +4300,7 @@ int ecc_test(void)
|
|||||||
|
|
||||||
int ecc_encrypt_test(void)
|
int ecc_encrypt_test(void)
|
||||||
{
|
{
|
||||||
RNG rng;
|
WC_RNG rng;
|
||||||
int ret;
|
int ret;
|
||||||
ecc_key userA, userB;
|
ecc_key userA, userB;
|
||||||
byte msg[48];
|
byte msg[48];
|
||||||
@@ -4669,7 +4669,7 @@ int pkcs7signed_test(void)
|
|||||||
char data[] = "Hello World";
|
char data[] = "Hello World";
|
||||||
word32 dataSz, outSz, certDerSz, keyDerSz;
|
word32 dataSz, outSz, certDerSz, keyDerSz;
|
||||||
PKCS7 msg;
|
PKCS7 msg;
|
||||||
RNG rng;
|
WC_RNG rng;
|
||||||
|
|
||||||
byte transIdOid[] =
|
byte transIdOid[] =
|
||||||
{ 0x06, 0x0a, 0x60, 0x86, 0x48, 0x01, 0x86, 0xF8, 0x45, 0x01,
|
{ 0x06, 0x0a, 0x60, 0x86, 0x48, 0x01, 0x86, 0xF8, 0x45, 0x01,
|
||||||
|
|||||||
@@ -772,7 +772,7 @@ void bench_blake2(void)
|
|||||||
|
|
||||||
#if !defined(NO_RSA) || !defined(NO_DH) \
|
#if !defined(NO_RSA) || !defined(NO_DH) \
|
||||||
|| defined(CYASSL_KEYGEN) || defined(HAVE_ECC)
|
|| defined(CYASSL_KEYGEN) || defined(HAVE_ECC)
|
||||||
static RNG rng;
|
static WC_RNG rng;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef NO_RSA
|
#ifndef NO_RSA
|
||||||
|
|||||||
@@ -2583,7 +2583,7 @@ int camellia_test(void)
|
|||||||
|
|
||||||
int random_test(void)
|
int random_test(void)
|
||||||
{
|
{
|
||||||
RNG rng;
|
WC_RNG rng;
|
||||||
byte block[32];
|
byte block[32];
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
@@ -2607,7 +2607,7 @@ byte GetEntropy(ENTROPY_CMD cmd, byte* out);
|
|||||||
|
|
||||||
byte GetEntropy(ENTROPY_CMD cmd, byte* out)
|
byte GetEntropy(ENTROPY_CMD cmd, byte* out)
|
||||||
{
|
{
|
||||||
static RNG rng;
|
static WC_RNG rng;
|
||||||
|
|
||||||
if (cmd == INIT)
|
if (cmd == INIT)
|
||||||
return (InitRng(&rng) == 0) ? 1 : 0;
|
return (InitRng(&rng) == 0) ? 1 : 0;
|
||||||
@@ -2682,7 +2682,7 @@ int rsa_test(void)
|
|||||||
byte* tmp;
|
byte* tmp;
|
||||||
size_t bytes;
|
size_t bytes;
|
||||||
RsaKey key;
|
RsaKey key;
|
||||||
RNG rng;
|
WC_RNG rng;
|
||||||
word32 idx = 0;
|
word32 idx = 0;
|
||||||
int ret;
|
int ret;
|
||||||
byte in[] = "Everyone gets Friday off.";
|
byte in[] = "Everyone gets Friday off.";
|
||||||
@@ -3558,7 +3558,7 @@ int dh_test(void)
|
|||||||
byte agree2[256];
|
byte agree2[256];
|
||||||
DhKey key;
|
DhKey key;
|
||||||
DhKey key2;
|
DhKey key2;
|
||||||
RNG rng;
|
WC_RNG rng;
|
||||||
|
|
||||||
|
|
||||||
#ifdef USE_CERT_BUFFERS_1024
|
#ifdef USE_CERT_BUFFERS_1024
|
||||||
@@ -3631,7 +3631,7 @@ int dsa_test(void)
|
|||||||
word32 idx = 0;
|
word32 idx = 0;
|
||||||
byte tmp[1024];
|
byte tmp[1024];
|
||||||
DsaKey key;
|
DsaKey key;
|
||||||
RNG rng;
|
WC_RNG rng;
|
||||||
Sha sha;
|
Sha sha;
|
||||||
byte hash[SHA_DIGEST_SIZE];
|
byte hash[SHA_DIGEST_SIZE];
|
||||||
byte signature[40];
|
byte signature[40];
|
||||||
@@ -4098,7 +4098,7 @@ int hkdf_test(void)
|
|||||||
|
|
||||||
int ecc_test(void)
|
int ecc_test(void)
|
||||||
{
|
{
|
||||||
RNG rng;
|
WC_RNG rng;
|
||||||
byte sharedA[1024];
|
byte sharedA[1024];
|
||||||
byte sharedB[1024];
|
byte sharedB[1024];
|
||||||
byte sig[1024];
|
byte sig[1024];
|
||||||
@@ -4198,7 +4198,7 @@ int ecc_test(void)
|
|||||||
|
|
||||||
int ecc_encrypt_test(void)
|
int ecc_encrypt_test(void)
|
||||||
{
|
{
|
||||||
RNG rng;
|
WC_RNG rng;
|
||||||
int ret;
|
int ret;
|
||||||
ecc_key userA, userB;
|
ecc_key userA, userB;
|
||||||
byte msg[48];
|
byte msg[48];
|
||||||
@@ -4563,8 +4563,8 @@ int pkcs7signed_test(void)
|
|||||||
byte* out;
|
byte* out;
|
||||||
char data[] = "Hello World";
|
char data[] = "Hello World";
|
||||||
word32 dataSz, outSz, certDerSz, keyDerSz;
|
word32 dataSz, outSz, certDerSz, keyDerSz;
|
||||||
PKCS7 msg;
|
PKCS7 msg;
|
||||||
RNG rng;
|
WC_RNG rng;
|
||||||
|
|
||||||
byte transIdOid[] =
|
byte transIdOid[] =
|
||||||
{ 0x06, 0x0a, 0x60, 0x86, 0x48, 0x01, 0x86, 0xF8, 0x45, 0x01,
|
{ 0x06, 0x0a, 0x60, 0x86, 0x48, 0x01, 0x86, 0xF8, 0x45, 0x01,
|
||||||
|
|||||||
@@ -29,14 +29,15 @@ SET(WOLFCRYPT_SOURCES src/aes.c src/arc4.c src/asn.c src/blake2b.c
|
|||||||
src/integer.c src/logging.c src/md2.c src/md4.c src/md5.c src/memory.c
|
src/integer.c src/logging.c src/md2.c src/md4.c src/md5.c src/memory.c
|
||||||
src/misc.c src/pkcs7.c src/poly1305.c src/pwdbased.c src/rabbit.c
|
src/misc.c src/pkcs7.c src/poly1305.c src/pwdbased.c src/rabbit.c
|
||||||
src/random.c src/ripemd.c src/rsa.c src/sha.c src/sha256.c src/sha512.c
|
src/random.c src/ripemd.c src/rsa.c src/sha.c src/sha256.c src/sha512.c
|
||||||
src/tfm.c src/wc_port.c
|
src/tfm.c src/wc_port.c src/wc_encrypt.c src/hash.c
|
||||||
../wolfssl/wolfcrypt/aes.h ../wolfssl/wolfcrypt/arc4.h ../wolfssl/wolfcrypt/asn.h ../wolfssl/wolfcrypt/blake2.h
|
../wolfssl/wolfcrypt/aes.h ../wolfssl/wolfcrypt/arc4.h ../wolfssl/wolfcrypt/asn.h ../wolfssl/wolfcrypt/blake2.h
|
||||||
../wolfssl/wolfcrypt/camellia.h ../wolfssl/wolfcrypt/chacha.h ../wolfssl/wolfcrypt/coding.h ../wolfssl/wolfcrypt/compress.h ../wolfssl/wolfcrypt/des3.h
|
../wolfssl/wolfcrypt/camellia.h ../wolfssl/wolfcrypt/chacha.h ../wolfssl/wolfcrypt/coding.h ../wolfssl/wolfcrypt/compress.h ../wolfssl/wolfcrypt/des3.h
|
||||||
../wolfssl/wolfcrypt/dh.h ../wolfssl/wolfcrypt/dsa.h ../wolfssl/wolfcrypt/ecc.h ../wolfssl/wolfcrypt/error-crypt.h ../wolfssl/wolfcrypt/hc128.h ../wolfssl/wolfcrypt/hmac.h
|
../wolfssl/wolfcrypt/dh.h ../wolfssl/wolfcrypt/dsa.h ../wolfssl/wolfcrypt/ecc.h ../wolfssl/wolfcrypt/error-crypt.h ../wolfssl/wolfcrypt/hc128.h ../wolfssl/wolfcrypt/hmac.h
|
||||||
../wolfssl/wolfcrypt/integer.h ../wolfssl/wolfcrypt/logging.h ../wolfssl/wolfcrypt/md2.h ../wolfssl/wolfcrypt/md4.h ../wolfssl/wolfcrypt/md5.h ../wolfssl/wolfcrypt/memory.h
|
../wolfssl/wolfcrypt/integer.h ../wolfssl/wolfcrypt/logging.h ../wolfssl/wolfcrypt/md2.h ../wolfssl/wolfcrypt/md4.h ../wolfssl/wolfcrypt/md5.h ../wolfssl/wolfcrypt/memory.h
|
||||||
../wolfssl/wolfcrypt/misc.h ../wolfssl/wolfcrypt/pkcs7.h ../wolfssl/wolfcrypt/poly1305.h ../wolfssl/wolfcrypt/pwdbased.h ../wolfssl/wolfcrypt/rabbit.h
|
../wolfssl/wolfcrypt/misc.h ../wolfssl/wolfcrypt/pkcs7.h ../wolfssl/wolfcrypt/poly1305.h ../wolfssl/wolfcrypt/pwdbased.h ../wolfssl/wolfcrypt/rabbit.h
|
||||||
../wolfssl/wolfcrypt/random.h ../wolfssl/wolfcrypt/ripemd.h ../wolfssl/wolfcrypt/rsa.h ../wolfssl/wolfcrypt/sha.h ../wolfssl/wolfcrypt/sha256.h ../wolfssl/wolfcrypt/sha512.h
|
../wolfssl/wolfcrypt/random.h ../wolfssl/wolfcrypt/ripemd.h ../wolfssl/wolfcrypt/rsa.h ../wolfssl/wolfcrypt/sha.h ../wolfssl/wolfcrypt/sha256.h ../wolfssl/wolfcrypt/sha512.h
|
||||||
../wolfssl/wolfcrypt/tfm.h ../wolfssl/wolfcrypt/wc_port.h
|
../wolfssl/wolfcrypt/tfm.h ../wolfssl/wolfcrypt/wc_port.h ../wolfssl/wolfcrypt/wc_encrypt.h
|
||||||
|
../wolfssl/wolfcrypt/hash.h
|
||||||
)
|
)
|
||||||
|
|
||||||
ADD_CONVENIENCE_LIBRARY(wolfcrypt ${WOLFCRYPT_SOURCES})
|
ADD_CONVENIENCE_LIBRARY(wolfcrypt ${WOLFCRYPT_SOURCES})
|
||||||
|
|||||||
@@ -165,6 +165,8 @@
|
|||||||
521648271A8AC2990062516A /* sha512.c in Sources */ = {isa = PBXBuildFile; fileRef = 5216481A1A8AC2990062516A /* sha512.c */; };
|
521648271A8AC2990062516A /* sha512.c in Sources */ = {isa = PBXBuildFile; fileRef = 5216481A1A8AC2990062516A /* sha512.c */; };
|
||||||
521648281A8AC2990062516A /* wolfcrypt_first.c in Sources */ = {isa = PBXBuildFile; fileRef = 5216481B1A8AC2990062516A /* wolfcrypt_first.c */; };
|
521648281A8AC2990062516A /* wolfcrypt_first.c in Sources */ = {isa = PBXBuildFile; fileRef = 5216481B1A8AC2990062516A /* wolfcrypt_first.c */; };
|
||||||
521648291A8AC2990062516A /* wolfcrypt_last.c in Sources */ = {isa = PBXBuildFile; fileRef = 5216481C1A8AC2990062516A /* wolfcrypt_last.c */; };
|
521648291A8AC2990062516A /* wolfcrypt_last.c in Sources */ = {isa = PBXBuildFile; fileRef = 5216481C1A8AC2990062516A /* wolfcrypt_last.c */; };
|
||||||
|
522DBE111B7929C80031F454 /* wc_encrypt.c in Sources */ = {isa = PBXBuildFile; fileRef = 522DBE101B7929C80031F454 /* wc_encrypt.c */; };
|
||||||
|
522DBE131B792A190031F454 /* wc_encrypt.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 522DBE121B7929E70031F454 /* wc_encrypt.h */; };
|
||||||
525BE5BA1B38853E0054BBCD /* hash.c in Sources */ = {isa = PBXBuildFile; fileRef = 525BE5B91B38853E0054BBCD /* hash.c */; };
|
525BE5BA1B38853E0054BBCD /* hash.c in Sources */ = {isa = PBXBuildFile; fileRef = 525BE5B91B38853E0054BBCD /* hash.c */; };
|
||||||
525BE5BC1B3885750054BBCD /* hash.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 525BE5BB1B3885580054BBCD /* hash.h */; };
|
525BE5BC1B3885750054BBCD /* hash.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 525BE5BB1B3885580054BBCD /* hash.h */; };
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
@@ -176,6 +178,7 @@
|
|||||||
dstPath = include/wolfssl/wolfcrypt;
|
dstPath = include/wolfssl/wolfcrypt;
|
||||||
dstSubfolderSpec = 7;
|
dstSubfolderSpec = 7;
|
||||||
files = (
|
files = (
|
||||||
|
522DBE131B792A190031F454 /* wc_encrypt.h in CopyFiles */,
|
||||||
525BE5BC1B3885750054BBCD /* hash.h in CopyFiles */,
|
525BE5BC1B3885750054BBCD /* hash.h in CopyFiles */,
|
||||||
521646CD1A8A7FF30062516A /* aes.h in CopyFiles */,
|
521646CD1A8A7FF30062516A /* aes.h in CopyFiles */,
|
||||||
521646CE1A8A7FF30062516A /* arc4.h in CopyFiles */,
|
521646CE1A8A7FF30062516A /* arc4.h in CopyFiles */,
|
||||||
@@ -473,6 +476,8 @@
|
|||||||
5216481A1A8AC2990062516A /* sha512.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = sha512.c; path = ../../ctaocrypt/src/sha512.c; sourceTree = "<group>"; };
|
5216481A1A8AC2990062516A /* sha512.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = sha512.c; path = ../../ctaocrypt/src/sha512.c; sourceTree = "<group>"; };
|
||||||
5216481B1A8AC2990062516A /* wolfcrypt_first.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = wolfcrypt_first.c; path = ../../ctaocrypt/src/wolfcrypt_first.c; sourceTree = "<group>"; };
|
5216481B1A8AC2990062516A /* wolfcrypt_first.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = wolfcrypt_first.c; path = ../../ctaocrypt/src/wolfcrypt_first.c; sourceTree = "<group>"; };
|
||||||
5216481C1A8AC2990062516A /* wolfcrypt_last.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = wolfcrypt_last.c; path = ../../ctaocrypt/src/wolfcrypt_last.c; sourceTree = "<group>"; };
|
5216481C1A8AC2990062516A /* wolfcrypt_last.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = wolfcrypt_last.c; path = ../../ctaocrypt/src/wolfcrypt_last.c; sourceTree = "<group>"; };
|
||||||
|
522DBE101B7929C80031F454 /* wc_encrypt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = wc_encrypt.c; path = ../../wolfcrypt/src/wc_encrypt.c; sourceTree = SOURCE_ROOT; };
|
||||||
|
522DBE121B7929E70031F454 /* wc_encrypt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = wc_encrypt.h; path = ../../wolfssl/wolfcrypt/wc_encrypt.h; sourceTree = "<group>"; };
|
||||||
525BE5B91B38853E0054BBCD /* hash.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = hash.c; path = ../../wolfcrypt/src/hash.c; sourceTree = "<group>"; };
|
525BE5B91B38853E0054BBCD /* hash.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = hash.c; path = ../../wolfcrypt/src/hash.c; sourceTree = "<group>"; };
|
||||||
525BE5BB1B3885580054BBCD /* hash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = hash.h; path = ../../wolfssl/wolfcrypt/hash.h; sourceTree = "<group>"; };
|
525BE5BB1B3885580054BBCD /* hash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = hash.h; path = ../../wolfssl/wolfcrypt/hash.h; sourceTree = "<group>"; };
|
||||||
52B1344D16F3C9E800C07B32 /* libwolfssl.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libwolfssl.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
52B1344D16F3C9E800C07B32 /* libwolfssl.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libwolfssl.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
@@ -613,6 +618,7 @@
|
|||||||
521646861A8993770062516A /* tfm.h */,
|
521646861A8993770062516A /* tfm.h */,
|
||||||
521646871A8993770062516A /* types.h */,
|
521646871A8993770062516A /* types.h */,
|
||||||
521646881A8993770062516A /* visibility.h */,
|
521646881A8993770062516A /* visibility.h */,
|
||||||
|
522DBE121B7929E70031F454 /* wc_encrypt.h */,
|
||||||
521646891A8993770062516A /* wc_port.h */,
|
521646891A8993770062516A /* wc_port.h */,
|
||||||
);
|
);
|
||||||
name = wolfCrypt;
|
name = wolfCrypt;
|
||||||
@@ -680,6 +686,7 @@
|
|||||||
5216462E1A8992CC0062516A /* sha256.c */,
|
5216462E1A8992CC0062516A /* sha256.c */,
|
||||||
5216462F1A8992CC0062516A /* sha512.c */,
|
5216462F1A8992CC0062516A /* sha512.c */,
|
||||||
521646301A8992CC0062516A /* tfm.c */,
|
521646301A8992CC0062516A /* tfm.c */,
|
||||||
|
522DBE101B7929C80031F454 /* wc_encrypt.c */,
|
||||||
521646311A8992CC0062516A /* wc_port.c */,
|
521646311A8992CC0062516A /* wc_port.c */,
|
||||||
);
|
);
|
||||||
name = wolfCrypt;
|
name = wolfCrypt;
|
||||||
@@ -828,6 +835,7 @@
|
|||||||
521646351A8992CC0062516A /* blake2b.c in Sources */,
|
521646351A8992CC0062516A /* blake2b.c in Sources */,
|
||||||
5216464C1A8992CC0062516A /* ripemd.c in Sources */,
|
5216464C1A8992CC0062516A /* ripemd.c in Sources */,
|
||||||
521646451A8992CC0062516A /* memory.c in Sources */,
|
521646451A8992CC0062516A /* memory.c in Sources */,
|
||||||
|
522DBE111B7929C80031F454 /* wc_encrypt.c in Sources */,
|
||||||
5216463C1A8992CC0062516A /* ecc.c in Sources */,
|
5216463C1A8992CC0062516A /* ecc.c in Sources */,
|
||||||
5216464F1A8992CC0062516A /* sha256.c in Sources */,
|
5216464F1A8992CC0062516A /* sha256.c in Sources */,
|
||||||
521646371A8992CC0062516A /* chacha.c in Sources */,
|
521646371A8992CC0062516A /* chacha.c in Sources */,
|
||||||
|
|||||||
@@ -153,6 +153,8 @@
|
|||||||
5216472A1A8A80100062516A /* types.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 521646BE1A8993F50062516A /* types.h */; };
|
5216472A1A8A80100062516A /* types.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 521646BE1A8993F50062516A /* types.h */; };
|
||||||
5216472B1A8A80100062516A /* visibility.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 521646BF1A8993F50062516A /* visibility.h */; };
|
5216472B1A8A80100062516A /* visibility.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 521646BF1A8993F50062516A /* visibility.h */; };
|
||||||
5216472C1A8A80100062516A /* wc_port.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 521646C01A8993F50062516A /* wc_port.h */; };
|
5216472C1A8A80100062516A /* wc_port.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 521646C01A8993F50062516A /* wc_port.h */; };
|
||||||
|
522DBE0D1B7926FB0031F454 /* wc_encrypt.c in Sources */ = {isa = PBXBuildFile; fileRef = 522DBE0C1B7926FB0031F454 /* wc_encrypt.c */; };
|
||||||
|
522DBE0F1B7927A50031F454 /* wc_encrypt.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 522DBE0E1B7927290031F454 /* wc_encrypt.h */; };
|
||||||
525BE5341B3869110054BBCD /* hash.c in Sources */ = {isa = PBXBuildFile; fileRef = 525BE5331B3869110054BBCD /* hash.c */; };
|
525BE5341B3869110054BBCD /* hash.c in Sources */ = {isa = PBXBuildFile; fileRef = 525BE5331B3869110054BBCD /* hash.c */; };
|
||||||
525BE5361B3869780054BBCD /* hash.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 525BE5351B3869430054BBCD /* hash.h */; };
|
525BE5361B3869780054BBCD /* hash.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 525BE5351B3869430054BBCD /* hash.h */; };
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
@@ -164,6 +166,7 @@
|
|||||||
dstPath = include/wolfssl/wolfcrypt;
|
dstPath = include/wolfssl/wolfcrypt;
|
||||||
dstSubfolderSpec = 7;
|
dstSubfolderSpec = 7;
|
||||||
files = (
|
files = (
|
||||||
|
522DBE0F1B7927A50031F454 /* wc_encrypt.h in CopyFiles */,
|
||||||
525BE5361B3869780054BBCD /* hash.h in CopyFiles */,
|
525BE5361B3869780054BBCD /* hash.h in CopyFiles */,
|
||||||
521646CD1A8A7FF30062516A /* aes.h in CopyFiles */,
|
521646CD1A8A7FF30062516A /* aes.h in CopyFiles */,
|
||||||
521646CE1A8A7FF30062516A /* arc4.h in CopyFiles */,
|
521646CE1A8A7FF30062516A /* arc4.h in CopyFiles */,
|
||||||
@@ -449,6 +452,8 @@
|
|||||||
521646BE1A8993F50062516A /* types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = types.h; path = ../../cyassl/ctaocrypt/types.h; sourceTree = "<group>"; };
|
521646BE1A8993F50062516A /* types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = types.h; path = ../../cyassl/ctaocrypt/types.h; sourceTree = "<group>"; };
|
||||||
521646BF1A8993F50062516A /* visibility.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = visibility.h; path = ../../cyassl/ctaocrypt/visibility.h; sourceTree = "<group>"; };
|
521646BF1A8993F50062516A /* visibility.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = visibility.h; path = ../../cyassl/ctaocrypt/visibility.h; sourceTree = "<group>"; };
|
||||||
521646C01A8993F50062516A /* wc_port.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = wc_port.h; path = ../../cyassl/ctaocrypt/wc_port.h; sourceTree = "<group>"; };
|
521646C01A8993F50062516A /* wc_port.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = wc_port.h; path = ../../cyassl/ctaocrypt/wc_port.h; sourceTree = "<group>"; };
|
||||||
|
522DBE0C1B7926FB0031F454 /* wc_encrypt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = wc_encrypt.c; path = ../../wolfcrypt/src/wc_encrypt.c; sourceTree = SOURCE_ROOT; };
|
||||||
|
522DBE0E1B7927290031F454 /* wc_encrypt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = wc_encrypt.h; path = ../../wolfssl/wolfcrypt/wc_encrypt.h; sourceTree = "<group>"; };
|
||||||
525BE5331B3869110054BBCD /* hash.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = hash.c; path = ../../wolfcrypt/src/hash.c; sourceTree = "<group>"; };
|
525BE5331B3869110054BBCD /* hash.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = hash.c; path = ../../wolfcrypt/src/hash.c; sourceTree = "<group>"; };
|
||||||
525BE5351B3869430054BBCD /* hash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = hash.h; path = ../../wolfssl/wolfcrypt/hash.h; sourceTree = "<group>"; };
|
525BE5351B3869430054BBCD /* hash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = hash.h; path = ../../wolfssl/wolfcrypt/hash.h; sourceTree = "<group>"; };
|
||||||
52B1344D16F3C9E800C07B32 /* libwolfssl.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libwolfssl.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
52B1344D16F3C9E800C07B32 /* libwolfssl.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libwolfssl.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
@@ -589,6 +594,7 @@
|
|||||||
521646861A8993770062516A /* tfm.h */,
|
521646861A8993770062516A /* tfm.h */,
|
||||||
521646871A8993770062516A /* types.h */,
|
521646871A8993770062516A /* types.h */,
|
||||||
521646881A8993770062516A /* visibility.h */,
|
521646881A8993770062516A /* visibility.h */,
|
||||||
|
522DBE0E1B7927290031F454 /* wc_encrypt.h */,
|
||||||
521646891A8993770062516A /* wc_port.h */,
|
521646891A8993770062516A /* wc_port.h */,
|
||||||
);
|
);
|
||||||
name = wolfCrypt;
|
name = wolfCrypt;
|
||||||
@@ -655,6 +661,7 @@
|
|||||||
5216462E1A8992CC0062516A /* sha256.c */,
|
5216462E1A8992CC0062516A /* sha256.c */,
|
||||||
5216462F1A8992CC0062516A /* sha512.c */,
|
5216462F1A8992CC0062516A /* sha512.c */,
|
||||||
521646301A8992CC0062516A /* tfm.c */,
|
521646301A8992CC0062516A /* tfm.c */,
|
||||||
|
522DBE0C1B7926FB0031F454 /* wc_encrypt.c */,
|
||||||
521646311A8992CC0062516A /* wc_port.c */,
|
521646311A8992CC0062516A /* wc_port.c */,
|
||||||
);
|
);
|
||||||
name = wolfCrypt;
|
name = wolfCrypt;
|
||||||
@@ -764,6 +771,7 @@
|
|||||||
5216460F1A89928E0062516A /* ssl.c in Sources */,
|
5216460F1A89928E0062516A /* ssl.c in Sources */,
|
||||||
5216464D1A8992CC0062516A /* rsa.c in Sources */,
|
5216464D1A8992CC0062516A /* rsa.c in Sources */,
|
||||||
5216464B1A8992CC0062516A /* random.c in Sources */,
|
5216464B1A8992CC0062516A /* random.c in Sources */,
|
||||||
|
522DBE0D1B7926FB0031F454 /* wc_encrypt.c in Sources */,
|
||||||
521646101A89928E0062516A /* tls.c in Sources */,
|
521646101A89928E0062516A /* tls.c in Sources */,
|
||||||
5216460D1A89928E0062516A /* ocsp.c in Sources */,
|
5216460D1A89928E0062516A /* ocsp.c in Sources */,
|
||||||
521646431A8992CC0062516A /* md4.c in Sources */,
|
521646431A8992CC0062516A /* md4.c in Sources */,
|
||||||
|
|||||||
12
autogen.sh
12
autogen.sh
@@ -9,17 +9,7 @@ if test -d .git; then
|
|||||||
mkdir .git/hooks
|
mkdir .git/hooks
|
||||||
fi
|
fi
|
||||||
ln -s -f ../../pre-commit.sh .git/hooks/pre-commit
|
ln -s -f ../../pre-commit.sh .git/hooks/pre-commit
|
||||||
fi
|
ln -s -f ../../pre-push.sh .git/hooks/pre-push
|
||||||
|
|
||||||
# Set HAVE_FIPS_SOURCE to 1 in your .profile if you have access to the FIPS
|
|
||||||
# repository. (Hint: If you don't work for us, you don't. This will fail.)
|
|
||||||
if test -n "$HAVE_FIPS_SOURCE" -a ! -d ./fips; then
|
|
||||||
git clone git@github.com:wolfSSL/fips.git
|
|
||||||
SAVEDIR=`pwd`
|
|
||||||
cd ./ctaocrypt/src
|
|
||||||
ln -sf ../../fips/fips.c
|
|
||||||
ln -sf ../../fips/fips_test.c
|
|
||||||
cd $SAVEDIR
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# If this is a source checkout then call autoreconf with error as well
|
# If this is a source checkout then call autoreconf with error as well
|
||||||
|
|||||||
@@ -31,12 +31,4 @@ make -j 8 test;
|
|||||||
RESULT=$?
|
RESULT=$?
|
||||||
[ $RESULT -ne 0 ] && echo -e "\n\nFull config make test failed" && exit 1
|
[ $RESULT -ne 0 ] && echo -e "\n\nFull config make test failed" && exit 1
|
||||||
|
|
||||||
if [ -n "$HAVE_FIPS_SOURCE" ];
|
|
||||||
then
|
|
||||||
echo -e "\n\nTesting with FIPS release code...\n\n"
|
|
||||||
./fips-check.sh
|
|
||||||
RESULT=$?
|
|
||||||
[ $RESULT -ne 0 ] && echo -e "\n\nFIPS build test failed" && exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
exit 0
|
exit 0
|
||||||
|
|||||||
132
configure.ac
132
configure.ac
@@ -6,7 +6,7 @@
|
|||||||
#
|
#
|
||||||
#
|
#
|
||||||
|
|
||||||
AC_INIT([wolfssl],[3.6.2],[https://github.com/wolfssl/wolfssl/issues],[wolfssl],[http://www.wolfssl.com])
|
AC_INIT([wolfssl],[3.6.3],[https://github.com/wolfssl/wolfssl/issues],[wolfssl],[http://www.wolfssl.com])
|
||||||
|
|
||||||
AC_CONFIG_AUX_DIR([build-aux])
|
AC_CONFIG_AUX_DIR([build-aux])
|
||||||
|
|
||||||
@@ -85,7 +85,7 @@ AC_CHECK_TYPES(__uint128_t)
|
|||||||
AC_C_BIGENDIAN
|
AC_C_BIGENDIAN
|
||||||
# mktime check takes forever on some systems, if time supported it would be
|
# mktime check takes forever on some systems, if time supported it would be
|
||||||
# highly unusual for mktime to be missing
|
# highly unusual for mktime to be missing
|
||||||
#AC_FUNC_MKTIME
|
#AC_FUNC_MKTIME
|
||||||
|
|
||||||
AC_PROG_CC
|
AC_PROG_CC
|
||||||
AC_PROG_CC_C_O
|
AC_PROG_CC_C_O
|
||||||
@@ -199,7 +199,7 @@ fi
|
|||||||
AM_CONDITIONAL([BUILD_IPV6], [test "x$ENABLED_IPV6" = "xyes"])
|
AM_CONDITIONAL([BUILD_IPV6], [test "x$ENABLED_IPV6" = "xyes"])
|
||||||
|
|
||||||
|
|
||||||
# Fortress build
|
# Fortress build
|
||||||
AC_ARG_ENABLE([fortress],
|
AC_ARG_ENABLE([fortress],
|
||||||
[ --enable-fortress Enable SSL fortress build (default: disabled)],
|
[ --enable-fortress Enable SSL fortress build (default: disabled)],
|
||||||
[ ENABLED_FORTRESS=$enableval ],
|
[ ENABLED_FORTRESS=$enableval ],
|
||||||
@@ -217,7 +217,7 @@ then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
# ssl bump build
|
# ssl bump build
|
||||||
AC_ARG_ENABLE([bump],
|
AC_ARG_ENABLE([bump],
|
||||||
[ --enable-bump Enable SSL Bump build (default: disabled)],
|
[ --enable-bump Enable SSL Bump build (default: disabled)],
|
||||||
[ ENABLED_BUMP=$enableval ],
|
[ ENABLED_BUMP=$enableval ],
|
||||||
@@ -231,7 +231,7 @@ fi
|
|||||||
|
|
||||||
ENABLED_SLOWMATH="yes"
|
ENABLED_SLOWMATH="yes"
|
||||||
|
|
||||||
# lean psk build
|
# lean psk build
|
||||||
AC_ARG_ENABLE([leanpsk],
|
AC_ARG_ENABLE([leanpsk],
|
||||||
[ --enable-leanpsk Enable Lean PSK build (default: disabled)],
|
[ --enable-leanpsk Enable Lean PSK build (default: disabled)],
|
||||||
[ ENABLED_LEANPSK=$enableval ],
|
[ ENABLED_LEANPSK=$enableval ],
|
||||||
@@ -287,7 +287,7 @@ then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
# Persistent session cache
|
# Persistent session cache
|
||||||
AC_ARG_ENABLE([savesession],
|
AC_ARG_ENABLE([savesession],
|
||||||
[ --enable-savesession Enable persistent session cache (default: disabled)],
|
[ --enable-savesession Enable persistent session cache (default: disabled)],
|
||||||
[ ENABLED_SAVESESSION=$enableval ],
|
[ ENABLED_SAVESESSION=$enableval ],
|
||||||
@@ -300,7 +300,7 @@ then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
# Persistent cert cache
|
# Persistent cert cache
|
||||||
AC_ARG_ENABLE([savecert],
|
AC_ARG_ENABLE([savecert],
|
||||||
[ --enable-savecert Enable persistent cert cache (default: disabled)],
|
[ --enable-savecert Enable persistent cert cache (default: disabled)],
|
||||||
[ ENABLED_SAVECERT=$enableval ],
|
[ ENABLED_SAVECERT=$enableval ],
|
||||||
@@ -313,7 +313,7 @@ then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
# Atomic User Record Layer
|
# Atomic User Record Layer
|
||||||
AC_ARG_ENABLE([atomicuser],
|
AC_ARG_ENABLE([atomicuser],
|
||||||
[ --enable-atomicuser Enable Atomic User Record Layer (default: disabled)],
|
[ --enable-atomicuser Enable Atomic User Record Layer (default: disabled)],
|
||||||
[ ENABLED_ATOMICUSER=$enableval ],
|
[ ENABLED_ATOMICUSER=$enableval ],
|
||||||
@@ -326,7 +326,7 @@ then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
# Public Key Callbacks
|
# Public Key Callbacks
|
||||||
AC_ARG_ENABLE([pkcallbacks],
|
AC_ARG_ENABLE([pkcallbacks],
|
||||||
[ --enable-pkcallbacks Enable Public Key Callbacks (default: disabled)],
|
[ --enable-pkcallbacks Enable Public Key Callbacks (default: disabled)],
|
||||||
[ ENABLED_PKCALLBACKS=$enableval ],
|
[ ENABLED_PKCALLBACKS=$enableval ],
|
||||||
@@ -491,7 +491,7 @@ fi
|
|||||||
AM_CONDITIONAL([BUILD_MD2], [test "x$ENABLED_MD2" = "xyes"])
|
AM_CONDITIONAL([BUILD_MD2], [test "x$ENABLED_MD2" = "xyes"])
|
||||||
|
|
||||||
|
|
||||||
# NULL CIPHER
|
# NULL CIPHER
|
||||||
AC_ARG_ENABLE([nullcipher],
|
AC_ARG_ENABLE([nullcipher],
|
||||||
[ --enable-nullcipher Enable wolfSSL NULL cipher support (default: disabled)],
|
[ --enable-nullcipher Enable wolfSSL NULL cipher support (default: disabled)],
|
||||||
[ ENABLED_NULL_CIPHER=$enableval ],
|
[ ENABLED_NULL_CIPHER=$enableval ],
|
||||||
@@ -650,7 +650,7 @@ then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
# HKDF
|
# HKDF
|
||||||
AC_ARG_ENABLE([hkdf],
|
AC_ARG_ENABLE([hkdf],
|
||||||
[ --enable-hkdf Enable HKDF (HMAC-KDF) support (default: disabled)],
|
[ --enable-hkdf Enable HKDF (HMAC-KDF) support (default: disabled)],
|
||||||
[ ENABLED_HKDF=$enableval ],
|
[ ENABLED_HKDF=$enableval ],
|
||||||
@@ -802,7 +802,7 @@ if test "$ENABLED_FPECC" = "yes"
|
|||||||
then
|
then
|
||||||
if test "$ENABLED_ECC" = "no"
|
if test "$ENABLED_ECC" = "no"
|
||||||
then
|
then
|
||||||
AC_MSG_ERROR([cannot enable fpecc without enabling ecc.])
|
AC_MSG_ERROR([cannot enable fpecc without enabling ecc.])
|
||||||
fi
|
fi
|
||||||
AM_CFLAGS="$AM_CFLAGS -DFP_ECC"
|
AM_CFLAGS="$AM_CFLAGS -DFP_ECC"
|
||||||
fi
|
fi
|
||||||
@@ -819,17 +819,17 @@ if test "$ENABLED_ECC_ENCRYPT" = "yes"
|
|||||||
then
|
then
|
||||||
if test "$ENABLED_ECC" = "no"
|
if test "$ENABLED_ECC" = "no"
|
||||||
then
|
then
|
||||||
AC_MSG_ERROR([cannot enable eccencrypt without enabling ecc.])
|
AC_MSG_ERROR([cannot enable eccencrypt without enabling ecc.])
|
||||||
fi
|
fi
|
||||||
if test "$ENABLED_HKDF" = "no"
|
if test "$ENABLED_HKDF" = "no"
|
||||||
then
|
then
|
||||||
AC_MSG_ERROR([cannot enable eccencrypt without enabling hkdf.])
|
AC_MSG_ERROR([cannot enable eccencrypt without enabling hkdf.])
|
||||||
fi
|
fi
|
||||||
AM_CFLAGS="$AM_CFLAGS -DHAVE_ECC_ENCRYPT"
|
AM_CFLAGS="$AM_CFLAGS -DHAVE_ECC_ENCRYPT"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
# PSK
|
# PSK
|
||||||
AC_ARG_ENABLE([psk],
|
AC_ARG_ENABLE([psk],
|
||||||
[ --enable-psk Enable PSK (default: disabled)],
|
[ --enable-psk Enable PSK (default: disabled)],
|
||||||
[ ENABLED_PSK=$enableval ],
|
[ ENABLED_PSK=$enableval ],
|
||||||
@@ -867,7 +867,7 @@ else
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
# OLD TLS
|
# OLD TLS
|
||||||
AC_ARG_ENABLE([oldtls],
|
AC_ARG_ENABLE([oldtls],
|
||||||
[ --enable-oldtls Enable old TLS versions < 1.2 (default: enabled)],
|
[ --enable-oldtls Enable old TLS versions < 1.2 (default: enabled)],
|
||||||
[ ENABLED_OLD_TLS=$enableval ],
|
[ ENABLED_OLD_TLS=$enableval ],
|
||||||
@@ -887,7 +887,20 @@ else
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
# STACK SIZE info for examples
|
# SSLv3
|
||||||
|
AC_ARG_ENABLE([sslv3],
|
||||||
|
[ --enable-sslv3 Enable SSL version 3.0 (default: disabled)],
|
||||||
|
[ ENABLED_SSLV3=$enableval ],
|
||||||
|
[ ENABLED_SSLV3=no]
|
||||||
|
)
|
||||||
|
|
||||||
|
if test "$ENABLED_SSLV3" = "yes"
|
||||||
|
then
|
||||||
|
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_ALLOW_SSLV3"
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# STACK SIZE info for examples
|
||||||
AC_ARG_ENABLE([stacksize],
|
AC_ARG_ENABLE([stacksize],
|
||||||
[ --enable-stacksize Enable stack size info on examples (default: disabled)],
|
[ --enable-stacksize Enable stack size info on examples (default: disabled)],
|
||||||
[ ENABLED_STACKSIZE=$enableval ],
|
[ ENABLED_STACKSIZE=$enableval ],
|
||||||
@@ -902,7 +915,7 @@ then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
# MEMORY
|
# MEMORY
|
||||||
AC_ARG_ENABLE([memory],
|
AC_ARG_ENABLE([memory],
|
||||||
[ --enable-memory Enable memory callbacks (default: enabled)],
|
[ --enable-memory Enable memory callbacks (default: enabled)],
|
||||||
[ ENABLED_MEMORY=$enableval ],
|
[ ENABLED_MEMORY=$enableval ],
|
||||||
@@ -924,7 +937,7 @@ fi
|
|||||||
AM_CONDITIONAL([BUILD_MEMORY], [test "x$ENABLED_MEMORY" = "xyes"])
|
AM_CONDITIONAL([BUILD_MEMORY], [test "x$ENABLED_MEMORY" = "xyes"])
|
||||||
|
|
||||||
|
|
||||||
# RSA
|
# RSA
|
||||||
AC_ARG_ENABLE([rsa],
|
AC_ARG_ENABLE([rsa],
|
||||||
[ --enable-rsa Enable RSA (default: enabled)],
|
[ --enable-rsa Enable RSA (default: enabled)],
|
||||||
[ ENABLED_RSA=$enableval ],
|
[ ENABLED_RSA=$enableval ],
|
||||||
@@ -1129,7 +1142,7 @@ fi
|
|||||||
AM_CONDITIONAL([BUILD_DES3], [test "x$ENABLED_DES3" = "xyes"])
|
AM_CONDITIONAL([BUILD_DES3], [test "x$ENABLED_DES3" = "xyes"])
|
||||||
|
|
||||||
|
|
||||||
# ARC4
|
# ARC4
|
||||||
AC_ARG_ENABLE([arc4],
|
AC_ARG_ENABLE([arc4],
|
||||||
[ --enable-arc4 Enable ARC4 (default: disabled)],
|
[ --enable-arc4 Enable ARC4 (default: disabled)],
|
||||||
[ ENABLED_ARC4=$enableval ],
|
[ ENABLED_ARC4=$enableval ],
|
||||||
@@ -1156,7 +1169,7 @@ fi
|
|||||||
AM_CONDITIONAL([BUILD_RC4], [test "x$ENABLED_ARC4" = "xyes"])
|
AM_CONDITIONAL([BUILD_RC4], [test "x$ENABLED_ARC4" = "xyes"])
|
||||||
|
|
||||||
|
|
||||||
# MD5
|
# MD5
|
||||||
AC_ARG_ENABLE([md5],
|
AC_ARG_ENABLE([md5],
|
||||||
[ --enable-md5 Enable MD5 (default: enabled)],
|
[ --enable-md5 Enable MD5 (default: enabled)],
|
||||||
[ ENABLED_MD5=$enableval ],
|
[ ENABLED_MD5=$enableval ],
|
||||||
@@ -1178,7 +1191,7 @@ fi
|
|||||||
AM_CONDITIONAL([BUILD_MD5], [test "x$ENABLED_MD5" = "xyes"])
|
AM_CONDITIONAL([BUILD_MD5], [test "x$ENABLED_MD5" = "xyes"])
|
||||||
|
|
||||||
|
|
||||||
# SHA
|
# SHA
|
||||||
AC_ARG_ENABLE([sha],
|
AC_ARG_ENABLE([sha],
|
||||||
[ --enable-sha Enable SHA (default: enabled)],
|
[ --enable-sha Enable SHA (default: enabled)],
|
||||||
[ ENABLED_SHA=$enableval ],
|
[ ENABLED_SHA=$enableval ],
|
||||||
@@ -1200,7 +1213,7 @@ fi
|
|||||||
AM_CONDITIONAL([BUILD_SHA], [test "x$ENABLED_SHA" = "xyes"])
|
AM_CONDITIONAL([BUILD_SHA], [test "x$ENABLED_SHA" = "xyes"])
|
||||||
|
|
||||||
|
|
||||||
# Web Server Build
|
# Web Server Build
|
||||||
AC_ARG_ENABLE([webserver],
|
AC_ARG_ENABLE([webserver],
|
||||||
[ --enable-webserver Enable Web Server (default: disabled)],
|
[ --enable-webserver Enable Web Server (default: disabled)],
|
||||||
[ ENABLED_WEBSERVER=$enableval ],
|
[ ENABLED_WEBSERVER=$enableval ],
|
||||||
@@ -1214,7 +1227,7 @@ fi
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
# HC128
|
# HC128
|
||||||
AC_ARG_ENABLE([hc128],
|
AC_ARG_ENABLE([hc128],
|
||||||
[ --enable-hc128 Enable HC-128 (default: disabled)],
|
[ --enable-hc128 Enable HC-128 (default: disabled)],
|
||||||
[ ENABLED_HC128=$enableval ],
|
[ ENABLED_HC128=$enableval ],
|
||||||
@@ -1360,7 +1373,7 @@ else
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
# Filesystem Build
|
# Filesystem Build
|
||||||
AC_ARG_ENABLE([filesystem],
|
AC_ARG_ENABLE([filesystem],
|
||||||
[ --enable-filesystem Enable Filesystem support (default: enabled)],
|
[ --enable-filesystem Enable Filesystem support (default: enabled)],
|
||||||
[ ENABLED_FILESYSTEM=$enableval ],
|
[ ENABLED_FILESYSTEM=$enableval ],
|
||||||
@@ -1380,7 +1393,7 @@ else
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
# inline Build
|
# inline Build
|
||||||
AC_ARG_ENABLE([inline],
|
AC_ARG_ENABLE([inline],
|
||||||
[ --enable-inline Enable inline functions (default: enabled)],
|
[ --enable-inline Enable inline functions (default: enabled)],
|
||||||
[ ENABLED_INLINE=$enableval ],
|
[ ENABLED_INLINE=$enableval ],
|
||||||
@@ -1502,7 +1515,7 @@ AM_CONDITIONAL([BUILD_NTRU], [test "x$ENABLED_NTRU" = "xyes"])
|
|||||||
|
|
||||||
if test "$ENABLED_NTRU" = "yes" && test "$ENABLED_SMALL" = "yes"
|
if test "$ENABLED_NTRU" = "yes" && test "$ENABLED_SMALL" = "yes"
|
||||||
then
|
then
|
||||||
AC_MSG_ERROR([cannot enable ntru and small, ntru requires TLS which small turns off.])
|
AC_MSG_ERROR([cannot enable ntru and small, ntru requires TLS which small turns off.])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# SNI
|
# SNI
|
||||||
@@ -1658,6 +1671,22 @@ then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# Secure Remote Password
|
||||||
|
AC_ARG_ENABLE([srp],
|
||||||
|
[ --enable-srp Enable Secure Remote Password (default: disabled)],
|
||||||
|
[ ENABLED_SRP=$enableval ],
|
||||||
|
[ ENABLED_SRP=no ]
|
||||||
|
)
|
||||||
|
|
||||||
|
if test "x$ENABLED_SRP" = "xyes"
|
||||||
|
then
|
||||||
|
AM_CFLAGS="$AM_CFLAGS -DWOLFCRYPT_HAVE_SRP"
|
||||||
|
fi
|
||||||
|
|
||||||
|
AM_CONDITIONAL([BUILD_SRP], [test "x$ENABLED_SRP" = "xyes"])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Small Stack
|
# Small Stack
|
||||||
AC_ARG_ENABLE([smallstack],
|
AC_ARG_ENABLE([smallstack],
|
||||||
[ --enable-smallstack Enable Small Stack Usage (default: disabled)],
|
[ --enable-smallstack Enable Small Stack Usage (default: disabled)],
|
||||||
@@ -1694,7 +1723,7 @@ fi
|
|||||||
AM_CONDITIONAL([USE_VALGRIND], [test "x$ENABLED_VALGRIND" = "xyes"])
|
AM_CONDITIONAL([USE_VALGRIND], [test "x$ENABLED_VALGRIND" = "xyes"])
|
||||||
|
|
||||||
|
|
||||||
# Test certs, use internal cert functions for extra testing
|
# Test certs, use internal cert functions for extra testing
|
||||||
AC_ARG_ENABLE([testcert],
|
AC_ARG_ENABLE([testcert],
|
||||||
[ --enable-testcert Enable Test Cert (default: disabled)],
|
[ --enable-testcert Enable Test Cert (default: disabled)],
|
||||||
[ ENABLED_TESTCERT=$enableval ],
|
[ ENABLED_TESTCERT=$enableval ],
|
||||||
@@ -1725,7 +1754,7 @@ then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
# Certificate Service Support
|
# Certificate Service Support
|
||||||
AC_ARG_ENABLE([certservice],
|
AC_ARG_ENABLE([certservice],
|
||||||
[ --enable-certservice Enable cert service (default: disabled)],
|
[ --enable-certservice Enable cert service (default: disabled)],
|
||||||
[ ENABLED_CERT_SERVICE=$enableval ],
|
[ ENABLED_CERT_SERVICE=$enableval ],
|
||||||
@@ -1967,7 +1996,7 @@ AC_ARG_WITH([libz],
|
|||||||
AM_CONDITIONAL([BUILD_LIBZ], [test "x$ENABLED_LIBZ" = "xyes"])
|
AM_CONDITIONAL([BUILD_LIBZ], [test "x$ENABLED_LIBZ" = "xyes"])
|
||||||
|
|
||||||
|
|
||||||
# cavium
|
# cavium
|
||||||
trycaviumdir=""
|
trycaviumdir=""
|
||||||
AC_ARG_WITH([cavium],
|
AC_ARG_WITH([cavium],
|
||||||
[ --with-cavium=PATH PATH to cavium/software dir ],
|
[ --with-cavium=PATH PATH to cavium/software dir ],
|
||||||
@@ -2112,6 +2141,10 @@ AS_IF([test "x$ENABLED_MAXSTRENGTH" = "xyes" && \
|
|||||||
[AM_CFLAGS="$AM_CFLAGS -DNO_OLD_TLS"
|
[AM_CFLAGS="$AM_CFLAGS -DNO_OLD_TLS"
|
||||||
ENABLED_OLD_TLS=no])
|
ENABLED_OLD_TLS=no])
|
||||||
|
|
||||||
|
AS_IF([test "x$ENABLED_MAXSTRENGTH" = "xyes" && \
|
||||||
|
test "x$ENABLED_SSLV3" = "xyes"],
|
||||||
|
[AC_MSG_ERROR([Cannot use Max Strength and SSLv3 at the same time.])])
|
||||||
|
|
||||||
|
|
||||||
# OPTIMIZE FLAGS
|
# OPTIMIZE FLAGS
|
||||||
if test "$GCC" = "yes"
|
if test "$GCC" = "yes"
|
||||||
@@ -2138,6 +2171,12 @@ then
|
|||||||
AM_CFLAGS="$AM_CFLAGS -wd10006"
|
AM_CFLAGS="$AM_CFLAGS -wd10006"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Expose HAVE___UINT128_T to options flags"
|
||||||
|
if test "$ac_cv_type___uint128_t" = "yes"
|
||||||
|
then
|
||||||
|
AM_CFLAGS="$AM_CFLAGS -DHAVE___UINT128_T"
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
LIB_SOCKET_NSL
|
LIB_SOCKET_NSL
|
||||||
AX_HARDEN_CC_COMPILER_FLAGS
|
AX_HARDEN_CC_COMPILER_FLAGS
|
||||||
@@ -2187,7 +2226,7 @@ touch ctaocrypt/src/fips.c
|
|||||||
touch ctaocrypt/src/fips_test.c
|
touch ctaocrypt/src/fips_test.c
|
||||||
echo
|
echo
|
||||||
|
|
||||||
# generate user options header
|
# generate user options header
|
||||||
echo "---"
|
echo "---"
|
||||||
echo "Generating user options header..."
|
echo "Generating user options header..."
|
||||||
|
|
||||||
@@ -2197,7 +2236,7 @@ OPTION_FILE="wolfssl/options.h"
|
|||||||
#fi
|
#fi
|
||||||
rm -f $OPTION_FILE
|
rm -f $OPTION_FILE
|
||||||
|
|
||||||
echo "/* wolfssl options.h" > $OPTION_FILE
|
echo "/* wolfssl options.h" > $OPTION_FILE
|
||||||
echo " * generated from configure options" >> $OPTION_FILE
|
echo " * generated from configure options" >> $OPTION_FILE
|
||||||
echo " *" >> $OPTION_FILE
|
echo " *" >> $OPTION_FILE
|
||||||
echo " * Copyright (C) 2006-2015 wolfSSL Inc." >> $OPTION_FILE
|
echo " * Copyright (C) 2006-2015 wolfSSL Inc." >> $OPTION_FILE
|
||||||
@@ -2206,13 +2245,13 @@ echo " * This file is part of wolfSSL. (formerly known as CyaSSL)" >> $OPTION_FI
|
|||||||
echo " *" >> $OPTION_FILE
|
echo " *" >> $OPTION_FILE
|
||||||
echo " */" >> $OPTION_FILE
|
echo " */" >> $OPTION_FILE
|
||||||
|
|
||||||
echo "" >> $OPTION_FILE
|
echo "" >> $OPTION_FILE
|
||||||
echo "#pragma once" >> $OPTION_FILE
|
echo "#pragma once" >> $OPTION_FILE
|
||||||
echo "" >> $OPTION_FILE
|
echo "" >> $OPTION_FILE
|
||||||
echo "#ifdef __cplusplus" >> $OPTION_FILE
|
echo "#ifdef __cplusplus" >> $OPTION_FILE
|
||||||
echo "extern \"C\" {" >> $OPTION_FILE
|
echo "extern \"C\" {" >> $OPTION_FILE
|
||||||
echo "#endif" >> $OPTION_FILE
|
echo "#endif" >> $OPTION_FILE
|
||||||
echo "" >> $OPTION_FILE
|
echo "" >> $OPTION_FILE
|
||||||
|
|
||||||
for option in $OPTION_FLAGS; do
|
for option in $OPTION_FLAGS; do
|
||||||
defonly=`echo $option | sed 's/-D//'`
|
defonly=`echo $option | sed 's/-D//'`
|
||||||
@@ -2248,11 +2287,11 @@ for option in $OPTION_FLAGS; do
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
echo "" >> $OPTION_FILE
|
echo "" >> $OPTION_FILE
|
||||||
echo "#ifdef __cplusplus" >> $OPTION_FILE
|
echo "#ifdef __cplusplus" >> $OPTION_FILE
|
||||||
echo "}" >> $OPTION_FILE
|
echo "}" >> $OPTION_FILE
|
||||||
echo "#endif" >> $OPTION_FILE
|
echo "#endif" >> $OPTION_FILE
|
||||||
echo "" >> $OPTION_FILE
|
echo "" >> $OPTION_FILE
|
||||||
echo
|
echo
|
||||||
|
|
||||||
#backwards compatability for those who have included options or version
|
#backwards compatability for those who have included options or version
|
||||||
@@ -2283,7 +2322,7 @@ echo " * Debug enabled: $ax_enable_debug"
|
|||||||
echo " * Warnings as failure: $ac_cv_warnings_as_errors"
|
echo " * Warnings as failure: $ac_cv_warnings_as_errors"
|
||||||
echo " * make -j: $enable_jobserver"
|
echo " * make -j: $enable_jobserver"
|
||||||
echo " * VCS checkout: $ac_cv_vcs_checkout"
|
echo " * VCS checkout: $ac_cv_vcs_checkout"
|
||||||
echo
|
echo
|
||||||
echo " Features "
|
echo " Features "
|
||||||
echo " * Single threaded: $ENABLED_SINGLETHREADED"
|
echo " * Single threaded: $ENABLED_SINGLETHREADED"
|
||||||
echo " * Filesystem: $ENABLED_FILESYSTEM"
|
echo " * Filesystem: $ENABLED_FILESYSTEM"
|
||||||
@@ -2337,6 +2376,7 @@ echo " * STUNNEL: $ENABLED_STUNNEL"
|
|||||||
echo " * ERROR_STRINGS: $ENABLED_ERROR_STRINGS"
|
echo " * ERROR_STRINGS: $ENABLED_ERROR_STRINGS"
|
||||||
echo " * DTLS: $ENABLED_DTLS"
|
echo " * DTLS: $ENABLED_DTLS"
|
||||||
echo " * Old TLS Versions: $ENABLED_OLD_TLS"
|
echo " * Old TLS Versions: $ENABLED_OLD_TLS"
|
||||||
|
echo " * SSL version 3.0: $ENABLED_SSLV3"
|
||||||
echo " * OCSP: $ENABLED_OCSP"
|
echo " * OCSP: $ENABLED_OCSP"
|
||||||
echo " * CRL: $ENABLED_CRL"
|
echo " * CRL: $ENABLED_CRL"
|
||||||
echo " * CRL-MONITOR: $ENABLED_CRL_MONITOR"
|
echo " * CRL-MONITOR: $ENABLED_CRL_MONITOR"
|
||||||
@@ -2355,10 +2395,10 @@ echo " * Session Ticket: $ENABLED_SESSION_TICKET"
|
|||||||
echo " * All TLS Extensions: $ENABLED_TLSX"
|
echo " * All TLS Extensions: $ENABLED_TLSX"
|
||||||
echo " * PKCS#7 $ENABLED_PKCS7"
|
echo " * PKCS#7 $ENABLED_PKCS7"
|
||||||
echo " * wolfSCEP $ENABLED_WOLFSCEP"
|
echo " * wolfSCEP $ENABLED_WOLFSCEP"
|
||||||
|
echo " * Secure Remote Password $ENABLED_SRP"
|
||||||
echo " * Small Stack: $ENABLED_SMALL_STACK"
|
echo " * Small Stack: $ENABLED_SMALL_STACK"
|
||||||
echo " * valgrind unit tests: $ENABLED_VALGRIND"
|
echo " * valgrind unit tests: $ENABLED_VALGRIND"
|
||||||
echo " * LIBZ: $ENABLED_LIBZ"
|
echo " * LIBZ: $ENABLED_LIBZ"
|
||||||
echo " * Examples: $ENABLED_EXAMPLES"
|
echo " * Examples: $ENABLED_EXAMPLES"
|
||||||
echo ""
|
echo ""
|
||||||
echo "---"
|
echo "---"
|
||||||
|
|
||||||
|
|||||||
@@ -525,16 +525,17 @@ THREAD_RETURN WOLFSSL_THREAD client_test(void* args)
|
|||||||
|
|
||||||
#ifdef USE_WOLFSSL_MEMORY
|
#ifdef USE_WOLFSSL_MEMORY
|
||||||
if (trackMemory)
|
if (trackMemory)
|
||||||
InitMemoryTracker();
|
InitMemoryTracker();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
switch (version) {
|
switch (version) {
|
||||||
#ifndef NO_OLD_TLS
|
#ifndef NO_OLD_TLS
|
||||||
|
#ifdef WOLFSSL_ALLOW_SSLV3
|
||||||
case 0:
|
case 0:
|
||||||
method = wolfSSLv3_client_method();
|
method = wolfSSLv3_client_method();
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef NO_TLS
|
#ifndef NO_TLS
|
||||||
case 1:
|
case 1:
|
||||||
method = wolfTLSv1_client_method();
|
method = wolfTLSv1_client_method();
|
||||||
@@ -544,9 +545,9 @@ THREAD_RETURN WOLFSSL_THREAD client_test(void* args)
|
|||||||
method = wolfTLSv1_1_client_method();
|
method = wolfTLSv1_1_client_method();
|
||||||
break;
|
break;
|
||||||
#endif /* NO_TLS */
|
#endif /* NO_TLS */
|
||||||
|
|
||||||
#endif /* NO_OLD_TLS */
|
#endif /* NO_OLD_TLS */
|
||||||
|
|
||||||
#ifndef NO_TLS
|
#ifndef NO_TLS
|
||||||
case 3:
|
case 3:
|
||||||
method = wolfTLSv1_2_client_method();
|
method = wolfTLSv1_2_client_method();
|
||||||
|
|||||||
@@ -111,8 +111,10 @@ void echoclient_test(void* args)
|
|||||||
method = DTLSv1_2_client_method();
|
method = DTLSv1_2_client_method();
|
||||||
#elif !defined(NO_TLS)
|
#elif !defined(NO_TLS)
|
||||||
method = CyaSSLv23_client_method();
|
method = CyaSSLv23_client_method();
|
||||||
#else
|
#elif defined(WOLFSSL_ALLOW_SSLV3)
|
||||||
method = SSLv3_client_method();
|
method = SSLv3_client_method();
|
||||||
|
#else
|
||||||
|
#error "no valid client method type"
|
||||||
#endif
|
#endif
|
||||||
ctx = SSL_CTX_new(method);
|
ctx = SSL_CTX_new(method);
|
||||||
|
|
||||||
|
|||||||
@@ -132,8 +132,10 @@ THREAD_RETURN CYASSL_THREAD echoserver_test(void* args)
|
|||||||
method = CyaDTLSv1_2_server_method();
|
method = CyaDTLSv1_2_server_method();
|
||||||
#elif !defined(NO_TLS)
|
#elif !defined(NO_TLS)
|
||||||
method = CyaSSLv23_server_method();
|
method = CyaSSLv23_server_method();
|
||||||
#else
|
#elif defined(WOLFSSL_ALLOW_SSLV3)
|
||||||
method = CyaSSLv3_server_method();
|
method = CyaSSLv3_server_method();
|
||||||
|
#else
|
||||||
|
#error "no valid server method built in"
|
||||||
#endif
|
#endif
|
||||||
ctx = CyaSSL_CTX_new(method);
|
ctx = CyaSSL_CTX_new(method);
|
||||||
/* CyaSSL_CTX_set_session_cache_mode(ctx, SSL_SESS_CACHE_OFF); */
|
/* CyaSSL_CTX_set_session_cache_mode(ctx, SSL_SESS_CACHE_OFF); */
|
||||||
|
|||||||
@@ -158,6 +158,9 @@ static void Usage(void)
|
|||||||
#ifdef HAVE_ANON
|
#ifdef HAVE_ANON
|
||||||
printf("-a Anonymous server\n");
|
printf("-a Anonymous server\n");
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef NO_PSK
|
||||||
|
printf("-I Do not send PSK identity hint\n");
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
THREAD_RETURN CYASSL_THREAD server_test(void* args)
|
THREAD_RETURN CYASSL_THREAD server_test(void* args)
|
||||||
@@ -199,6 +202,10 @@ THREAD_RETURN CYASSL_THREAD server_test(void* args)
|
|||||||
int argc = ((func_args*)args)->argc;
|
int argc = ((func_args*)args)->argc;
|
||||||
char** argv = ((func_args*)args)->argv;
|
char** argv = ((func_args*)args)->argv;
|
||||||
|
|
||||||
|
#ifndef NO_PSK
|
||||||
|
int sendPskIdentityHint = 1;
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_SNI
|
#ifdef HAVE_SNI
|
||||||
char* sniHostName = NULL;
|
char* sniHostName = NULL;
|
||||||
#endif
|
#endif
|
||||||
@@ -230,7 +237,7 @@ THREAD_RETURN CYASSL_THREAD server_test(void* args)
|
|||||||
fdOpenSession(Task_self());
|
fdOpenSession(Task_self());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
while ((ch = mygetopt(argc, argv, "?dbstnNufrRawPp:v:l:A:c:k:Z:S:oO:D:"))
|
while ((ch = mygetopt(argc, argv, "?dbstnNufrRawPIp:v:l:A:c:k:Z:S:oO:D:"))
|
||||||
!= -1) {
|
!= -1) {
|
||||||
switch (ch) {
|
switch (ch) {
|
||||||
case '?' :
|
case '?' :
|
||||||
@@ -363,6 +370,11 @@ THREAD_RETURN CYASSL_THREAD server_test(void* args)
|
|||||||
useAnon = 1;
|
useAnon = 1;
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
|
case 'I':
|
||||||
|
#ifndef NO_PSK
|
||||||
|
sendPskIdentityHint = 0;
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
Usage();
|
Usage();
|
||||||
@@ -390,14 +402,16 @@ THREAD_RETURN CYASSL_THREAD server_test(void* args)
|
|||||||
|
|
||||||
#ifdef USE_CYASSL_MEMORY
|
#ifdef USE_CYASSL_MEMORY
|
||||||
if (trackMemory)
|
if (trackMemory)
|
||||||
InitMemoryTracker();
|
InitMemoryTracker();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
switch (version) {
|
switch (version) {
|
||||||
#ifndef NO_OLD_TLS
|
#ifndef NO_OLD_TLS
|
||||||
|
#ifdef WOLFSSL_ALLOW_SSLV3
|
||||||
case 0:
|
case 0:
|
||||||
method = SSLv3_server_method();
|
method = SSLv3_server_method();
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef NO_TLS
|
#ifndef NO_TLS
|
||||||
case 1:
|
case 1:
|
||||||
@@ -500,7 +514,10 @@ THREAD_RETURN CYASSL_THREAD server_test(void* args)
|
|||||||
if (usePsk) {
|
if (usePsk) {
|
||||||
#ifndef NO_PSK
|
#ifndef NO_PSK
|
||||||
SSL_CTX_set_psk_server_callback(ctx, my_psk_server_cb);
|
SSL_CTX_set_psk_server_callback(ctx, my_psk_server_cb);
|
||||||
SSL_CTX_use_psk_identity_hint(ctx, "cyassl server");
|
|
||||||
|
if (sendPskIdentityHint == 1)
|
||||||
|
SSL_CTX_use_psk_identity_hint(ctx, "cyassl server");
|
||||||
|
|
||||||
if (cipherList == NULL) {
|
if (cipherList == NULL) {
|
||||||
const char *defaultCipherList;
|
const char *defaultCipherList;
|
||||||
#if defined(HAVE_AESGCM) && !defined(NO_DH)
|
#if defined(HAVE_AESGCM) && !defined(NO_DH)
|
||||||
|
|||||||
@@ -79,13 +79,13 @@ linux)
|
|||||||
esac
|
esac
|
||||||
|
|
||||||
git clone . $TEST_DIR
|
git clone . $TEST_DIR
|
||||||
[ $? -ne 0 ] && echo -e "\n\nCouldn't duplicate current working directory.\n\n" && exit 1
|
[ $? -ne 0 ] && echo "\n\nCouldn't duplicate current working directory.\n\n" && exit 1
|
||||||
|
|
||||||
pushd $TEST_DIR
|
pushd $TEST_DIR
|
||||||
|
|
||||||
# make a clone of the last FIPS release tag
|
# make a clone of the last FIPS release tag
|
||||||
git clone -b $CTAO_VERSION $CTAO_REPO old-tree
|
git clone -b $CTAO_VERSION $CTAO_REPO old-tree
|
||||||
[ $? -ne 0 ] && echo -e "\n\nCouldn't checkout the FIPS release.\n\n" && exit 1
|
[ $? -ne 0 ] && echo "\n\nCouldn't checkout the FIPS release.\n\n" && exit 1
|
||||||
|
|
||||||
for MOD in ${WC_MODS[@]}
|
for MOD in ${WC_MODS[@]}
|
||||||
do
|
do
|
||||||
@@ -102,7 +102,7 @@ cp old-tree/$WC_INC_PATH/random.h $WC_INC_PATH
|
|||||||
|
|
||||||
# clone the FIPS repository
|
# clone the FIPS repository
|
||||||
git clone -b $FIPS_VERSION $FIPS_REPO fips
|
git clone -b $FIPS_VERSION $FIPS_REPO fips
|
||||||
[ $? -ne 0 ] && echo -e "\n\nCouldn't checkout the FIPS repository.\n\n" && exit 1
|
[ $? -ne 0 ] && echo "\n\nCouldn't checkout the FIPS repository.\n\n" && exit 1
|
||||||
|
|
||||||
for SRC in ${FIPS_SRCS[@]}
|
for SRC in ${FIPS_SRCS[@]}
|
||||||
do
|
do
|
||||||
@@ -113,7 +113,7 @@ done
|
|||||||
./autogen.sh
|
./autogen.sh
|
||||||
./configure --enable-fips
|
./configure --enable-fips
|
||||||
make
|
make
|
||||||
[ $? -ne 0 ] && echo -e "\n\nMake failed. Debris left for analysis." && exit 1
|
[ $? -ne 0 ] && echo "\n\nMake failed. Debris left for analysis." && exit 1
|
||||||
|
|
||||||
NEWHASH=`./wolfcrypt/test/testwolfcrypt | sed -n 's/hash = \(.*\)/\1/p'`
|
NEWHASH=`./wolfcrypt/test/testwolfcrypt | sed -n 's/hash = \(.*\)/\1/p'`
|
||||||
if [ -n "$NEWHASH" ]; then
|
if [ -n "$NEWHASH" ]; then
|
||||||
@@ -122,7 +122,7 @@ if [ -n "$NEWHASH" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
make test
|
make test
|
||||||
[ $? -ne 0 ] && echo -e "\n\nTest failed. Debris left for analysis." && exit 1
|
[ $? -ne 0 ] && echo "\n\nTest failed. Debris left for analysis." && exit 1
|
||||||
|
|
||||||
# Clean up
|
# Clean up
|
||||||
popd
|
popd
|
||||||
|
|||||||
@@ -285,13 +285,13 @@ int CRYPT_HUFFMAN_DeCompress(unsigned char* out, unsigned int outSz,
|
|||||||
/* RNG Initialize, < 0 on error */
|
/* RNG Initialize, < 0 on error */
|
||||||
int CRYPT_RNG_Initialize(CRYPT_RNG_CTX* rng)
|
int CRYPT_RNG_Initialize(CRYPT_RNG_CTX* rng)
|
||||||
{
|
{
|
||||||
typedef char rng_test[sizeof(CRYPT_RNG_CTX) >= sizeof(RNG) ? 1 : -1];
|
typedef char rng_test[sizeof(CRYPT_RNG_CTX) >= sizeof(WC_RNG) ? 1 : -1];
|
||||||
(void)sizeof(rng_test);
|
(void)sizeof(rng_test);
|
||||||
|
|
||||||
if (rng == NULL)
|
if (rng == NULL)
|
||||||
return BAD_FUNC_ARG;
|
return BAD_FUNC_ARG;
|
||||||
|
|
||||||
return InitRng((RNG*)rng);
|
return InitRng((WC_RNG*)rng);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -301,7 +301,7 @@ int CRYPT_RNG_Get(CRYPT_RNG_CTX* rng, unsigned char* b)
|
|||||||
if (rng == NULL || b == NULL)
|
if (rng == NULL || b == NULL)
|
||||||
return BAD_FUNC_ARG;
|
return BAD_FUNC_ARG;
|
||||||
|
|
||||||
return RNG_GenerateByte((RNG*)rng, (byte*)b);
|
return RNG_GenerateByte((WC_RNG*)rng, (byte*)b);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -312,7 +312,7 @@ int CRYPT_RNG_BlockGenerate(CRYPT_RNG_CTX* rng, unsigned char* b,
|
|||||||
if (rng == NULL || b == NULL)
|
if (rng == NULL || b == NULL)
|
||||||
return BAD_FUNC_ARG;
|
return BAD_FUNC_ARG;
|
||||||
|
|
||||||
return RNG_GenerateBlock((RNG*)rng, b, sz);
|
return RNG_GenerateBlock((WC_RNG*)rng, b, sz);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -512,7 +512,7 @@ int CRYPT_RSA_PublicEncrypt(CRYPT_RSA_CTX* rsa, unsigned char* out,
|
|||||||
return BAD_FUNC_ARG;
|
return BAD_FUNC_ARG;
|
||||||
|
|
||||||
return RsaPublicEncrypt(in, inSz, out, outSz, (RsaKey*)rsa->holder,
|
return RsaPublicEncrypt(in, inSz, out, outSz, (RsaKey*)rsa->holder,
|
||||||
(RNG*)rng);
|
(WC_RNG*)rng);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -614,7 +614,7 @@ int CRYPT_ECC_DHE_KeyMake(CRYPT_ECC_CTX* ecc, CRYPT_RNG_CTX* rng, int keySz)
|
|||||||
if (ecc == NULL || rng == NULL)
|
if (ecc == NULL || rng == NULL)
|
||||||
return BAD_FUNC_ARG;
|
return BAD_FUNC_ARG;
|
||||||
|
|
||||||
return wc_ecc_make_key((RNG*)rng, keySz, (ecc_key*)ecc->holder);
|
return wc_ecc_make_key((WC_RNG*)rng, keySz, (ecc_key*)ecc->holder);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -649,7 +649,7 @@ int CRYPT_ECC_DSA_HashSign(CRYPT_ECC_CTX* ecc, CRYPT_RNG_CTX* rng,
|
|||||||
in == NULL)
|
in == NULL)
|
||||||
return BAD_FUNC_ARG;
|
return BAD_FUNC_ARG;
|
||||||
|
|
||||||
ret = wc_ecc_sign_hash(in, inSz, sig, &inOut, (RNG*)rng,
|
ret = wc_ecc_sign_hash(in, inSz, sig, &inOut, (WC_RNG*)rng,
|
||||||
(ecc_key*)ecc->holder);
|
(ecc_key*)ecc->holder);
|
||||||
*usedSz = inOut;
|
*usedSz = inOut;
|
||||||
|
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ static byte ourData[OUR_DATA_SIZE];
|
|||||||
static byte* key = NULL;
|
static byte* key = NULL;
|
||||||
static byte* iv = NULL;
|
static byte* iv = NULL;
|
||||||
static CRYPT_RNG_CTX mcRng;
|
static CRYPT_RNG_CTX mcRng;
|
||||||
static RNG defRng;
|
static WC_RNG defRng;
|
||||||
|
|
||||||
static int check_md5(void);
|
static int check_md5(void);
|
||||||
static int check_sha(void);
|
static int check_sha(void);
|
||||||
|
|||||||
@@ -25,13 +25,13 @@ Included Project Files
|
|||||||
<wolfssl_root>/mplabx/wolfssl.X/dist/default/production/wolfssl.X.a
|
<wolfssl_root>/mplabx/wolfssl.X/dist/default/production/wolfssl.X.a
|
||||||
|
|
||||||
2. wolfCrypt Test App (wolfcrypt_test.X)
|
2. wolfCrypt Test App (wolfcrypt_test.X)
|
||||||
|
|
||||||
This project tests the wolfCrypt cryptography modules. It is generally
|
This project tests the wolfCrypt cryptography modules. It is generally
|
||||||
a good idea to run this first on an embedded system after compiling
|
a good idea to run this first on an embedded system after compiling
|
||||||
wolfSSL in order to verify all underlying crypto is working correctly.
|
wolfSSL in order to verify all underlying crypto is working correctly.
|
||||||
|
|
||||||
3. wolfCrypt Benchmark App (wolfcrypt_benchmark.X)
|
3. wolfCrypt Benchmark App (wolfcrypt_benchmark.X)
|
||||||
|
|
||||||
This project builds the wolfCrypt benchmark application.
|
This project builds the wolfCrypt benchmark application.
|
||||||
For the benchmark timer, adjust CLOCK value under
|
For the benchmark timer, adjust CLOCK value under
|
||||||
"#elif defined MICROCHIP_PIC32" in wolfcrypt/benchmark/benchmark.c
|
"#elif defined MICROCHIP_PIC32" in wolfcrypt/benchmark/benchmark.c
|
||||||
@@ -40,7 +40,7 @@ PIC32MX/PIC32MZ
|
|||||||
---------------
|
---------------
|
||||||
|
|
||||||
The projects are set for PIC32MX by default. For PIC32MZ, change project
|
The projects are set for PIC32MX by default. For PIC32MZ, change project
|
||||||
properties->Devices and add "CYASSL_MICROCHIP_PIC32M" to
|
properties->Devices and add "WOLFSSL_MICROCHIP_PIC32MZ" to
|
||||||
XC32-gcc->Preprocessing and messages-> Preprocessor macros.
|
XC32-gcc->Preprocessing and messages-> Preprocessor macros.
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -50,6 +50,15 @@
|
|||||||
<itemPath>../../wolfcrypt/src/tfm.c</itemPath>
|
<itemPath>../../wolfcrypt/src/tfm.c</itemPath>
|
||||||
<itemPath>../../wolfcrypt/src/wc_port.c</itemPath>
|
<itemPath>../../wolfcrypt/src/wc_port.c</itemPath>
|
||||||
<itemPath>../../wolfcrypt/src/port/pic32/pic32mz-hash.c</itemPath>
|
<itemPath>../../wolfcrypt/src/port/pic32/pic32mz-hash.c</itemPath>
|
||||||
|
<itemPath>../../wolfcrypt/src/hash.c</itemPath>
|
||||||
|
<itemPath>../../wolfcrypt/src/chacha20_poly1305.c</itemPath>
|
||||||
|
<itemPath>../../wolfcrypt/src/curve25519.c</itemPath>
|
||||||
|
<itemPath>../../wolfcrypt/src/ed25519.c</itemPath>
|
||||||
|
<itemPath>../../wolfcrypt/src/fe_low_mem.c</itemPath>
|
||||||
|
<itemPath>../../wolfcrypt/src/fe_operations.c</itemPath>
|
||||||
|
<itemPath>../../wolfcrypt/src/ge_low_mem.c</itemPath>
|
||||||
|
<itemPath>../../wolfcrypt/src/ge_operations.c</itemPath>
|
||||||
|
<itemPath>../../wolfcrypt/src/wc_encrypt.c</itemPath>
|
||||||
</logicalFolder>
|
</logicalFolder>
|
||||||
<logicalFolder name="f1" displayName="wolfssl" projectFiles="true">
|
<logicalFolder name="f1" displayName="wolfssl" projectFiles="true">
|
||||||
<itemPath>../../src/crl.c</itemPath>
|
<itemPath>../../src/crl.c</itemPath>
|
||||||
@@ -85,7 +94,7 @@
|
|||||||
<targetPluginBoard></targetPluginBoard>
|
<targetPluginBoard></targetPluginBoard>
|
||||||
<platformTool>PKOBSKDEPlatformTool</platformTool>
|
<platformTool>PKOBSKDEPlatformTool</platformTool>
|
||||||
<languageToolchain>XC32</languageToolchain>
|
<languageToolchain>XC32</languageToolchain>
|
||||||
<languageToolchainVersion></languageToolchainVersion>
|
<languageToolchainVersion>1.33</languageToolchainVersion>
|
||||||
<platform>4</platform>
|
<platform>4</platform>
|
||||||
</toolsSet>
|
</toolsSet>
|
||||||
<compileType>
|
<compileType>
|
||||||
|
|||||||
19
pre-push.sh
Executable file
19
pre-push.sh
Executable file
@@ -0,0 +1,19 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Our "pre-push" hook.
|
||||||
|
|
||||||
|
RESULT=0
|
||||||
|
|
||||||
|
if [ -d ./fips ];
|
||||||
|
then
|
||||||
|
echo "\n\nTesting with FIPS release code...\n\n"
|
||||||
|
./fips-check.sh
|
||||||
|
RESULT=$?
|
||||||
|
[ $RESULT -ne 0 ] && echo -e "\n\nFIPS build test failed" && exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
[ $RESULT -ne 0 ] && echo "\nOops, your push failed\n" && exit 1
|
||||||
|
|
||||||
|
echo "\nPush tests passed!\n"
|
||||||
|
exit 0
|
||||||
@@ -6,6 +6,7 @@
|
|||||||
resume_port=11112
|
resume_port=11112
|
||||||
no_pid=-1
|
no_pid=-1
|
||||||
server_pid=$no_pid
|
server_pid=$no_pid
|
||||||
|
counter=0
|
||||||
|
|
||||||
|
|
||||||
remove_ready_file() {
|
remove_ready_file() {
|
||||||
@@ -41,9 +42,10 @@ remove_ready_file
|
|||||||
./examples/server/server -r -R -p $resume_port &
|
./examples/server/server -r -R -p $resume_port &
|
||||||
server_pid=$!
|
server_pid=$!
|
||||||
|
|
||||||
while [ ! -s /tmp/wolfssl_server_ready ]; do
|
while [ ! -s /tmp/wolfssl_server_ready -a "$counter" -lt 20 ]; do
|
||||||
echo -e "waiting for server_ready file..."
|
echo -e "waiting for server_ready file..."
|
||||||
sleep 0.1
|
sleep 0.1
|
||||||
|
counter=$((counter+ 1))
|
||||||
done
|
done
|
||||||
|
|
||||||
./examples/client/client -r -p $resume_port
|
./examples/client/client -r -p $resume_port
|
||||||
|
|||||||
@@ -74,6 +74,7 @@ endif
|
|||||||
|
|
||||||
src_libwolfssl_la_SOURCES += \
|
src_libwolfssl_la_SOURCES += \
|
||||||
wolfcrypt/src/logging.c \
|
wolfcrypt/src/logging.c \
|
||||||
|
wolfcrypt/src/wc_encrypt.c \
|
||||||
wolfcrypt/src/wc_port.c \
|
wolfcrypt/src/wc_port.c \
|
||||||
wolfcrypt/src/error.c
|
wolfcrypt/src/error.c
|
||||||
|
|
||||||
@@ -200,6 +201,10 @@ if BUILD_PKCS7
|
|||||||
src_libwolfssl_la_SOURCES += wolfcrypt/src/pkcs7.c
|
src_libwolfssl_la_SOURCES += wolfcrypt/src/pkcs7.c
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if BUILD_SRP
|
||||||
|
src_libwolfssl_la_SOURCES += wolfcrypt/src/srp.c
|
||||||
|
endif
|
||||||
|
|
||||||
# ssl files
|
# ssl files
|
||||||
src_libwolfssl_la_SOURCES += \
|
src_libwolfssl_la_SOURCES += \
|
||||||
src/internal.c \
|
src/internal.c \
|
||||||
@@ -219,4 +224,3 @@ endif
|
|||||||
if BUILD_SNIFFER
|
if BUILD_SNIFFER
|
||||||
src_libwolfssl_la_SOURCES += src/sniffer.c
|
src_libwolfssl_la_SOURCES += src/sniffer.c
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|||||||
@@ -46,7 +46,11 @@
|
|||||||
|
|
||||||
#if defined(DEBUG_WOLFSSL) || defined(SHOW_SECRETS) || defined(CHACHA_AEAD_TEST)
|
#if defined(DEBUG_WOLFSSL) || defined(SHOW_SECRETS) || defined(CHACHA_AEAD_TEST)
|
||||||
#ifdef FREESCALE_MQX
|
#ifdef FREESCALE_MQX
|
||||||
#include <fio.h>
|
#if MQX_USE_IO_OLD
|
||||||
|
#include <fio.h>
|
||||||
|
#else
|
||||||
|
#include <nio.h>
|
||||||
|
#endif
|
||||||
#else
|
#else
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#endif
|
#endif
|
||||||
@@ -244,7 +248,7 @@ static int QSH_FreeAll(WOLFSSL* ssl)
|
|||||||
|
|
||||||
|
|
||||||
#ifdef HAVE_NTRU
|
#ifdef HAVE_NTRU
|
||||||
static RNG* rng;
|
static WC_RNG* rng;
|
||||||
static wolfSSL_Mutex* rngMutex;
|
static wolfSSL_Mutex* rngMutex;
|
||||||
|
|
||||||
static word32 GetEntropy(unsigned char* out, word32 num_bytes)
|
static word32 GetEntropy(unsigned char* out, word32 num_bytes)
|
||||||
@@ -252,7 +256,7 @@ static word32 GetEntropy(unsigned char* out, word32 num_bytes)
|
|||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
if (rng == NULL) {
|
if (rng == NULL) {
|
||||||
if ((rng = XMALLOC(sizeof(RNG), 0, DYNAMIC_TYPE_TLSX)) == NULL)
|
if ((rng = XMALLOC(sizeof(WC_RNG), 0, DYNAMIC_TYPE_TLSX)) == NULL)
|
||||||
return DRBG_OUT_OF_MEMORY;
|
return DRBG_OUT_OF_MEMORY;
|
||||||
wc_InitRng(rng);
|
wc_InitRng(rng);
|
||||||
}
|
}
|
||||||
@@ -1765,7 +1769,7 @@ int InitSSL(WOLFSSL* ssl, WOLFSSL_CTX* ctx)
|
|||||||
#endif /* NO_PSK */
|
#endif /* NO_PSK */
|
||||||
|
|
||||||
/* RNG */
|
/* RNG */
|
||||||
ssl->rng = (RNG*)XMALLOC(sizeof(RNG), ssl->heap, DYNAMIC_TYPE_RNG);
|
ssl->rng = (WC_RNG*)XMALLOC(sizeof(WC_RNG), ssl->heap, DYNAMIC_TYPE_RNG);
|
||||||
if (ssl->rng == NULL) {
|
if (ssl->rng == NULL) {
|
||||||
WOLFSSL_MSG("RNG Memory error");
|
WOLFSSL_MSG("RNG Memory error");
|
||||||
return MEMORY_E;
|
return MEMORY_E;
|
||||||
@@ -2367,7 +2371,7 @@ DtlsMsg* DtlsMsgInsert(DtlsMsg* head, DtlsMsg* item)
|
|||||||
|
|
||||||
#endif /* WOLFSSL_DTLS */
|
#endif /* WOLFSSL_DTLS */
|
||||||
|
|
||||||
#ifndef NO_OLD_TLS
|
#if defined(WOLFSSL_ALLOW_SSLV3) && !defined(NO_OLD_TLS)
|
||||||
|
|
||||||
ProtocolVersion MakeSSLv3(void)
|
ProtocolVersion MakeSSLv3(void)
|
||||||
{
|
{
|
||||||
@@ -2378,7 +2382,7 @@ ProtocolVersion MakeSSLv3(void)
|
|||||||
return pv;
|
return pv;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* NO_OLD_TLS */
|
#endif /* WOLFSSL_ALLOW_SSLV3 && !NO_OLD_TLS */
|
||||||
|
|
||||||
|
|
||||||
#ifdef WOLFSSL_DTLS
|
#ifdef WOLFSSL_DTLS
|
||||||
@@ -4780,9 +4784,17 @@ static int SanityCheckMsgReceived(WOLFSSL* ssl, byte type)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (ssl->msgsReceived.got_server_key_exchange == 0) {
|
if (ssl->msgsReceived.got_server_key_exchange == 0) {
|
||||||
|
int pskNoServerHint = 0; /* not required in this case */
|
||||||
|
|
||||||
|
#ifndef NO_PSK
|
||||||
|
if (ssl->specs.kea == psk_kea &&
|
||||||
|
ssl->arrays->server_hint[0] == 0)
|
||||||
|
pskNoServerHint = 1;
|
||||||
|
#endif
|
||||||
if (ssl->specs.static_ecdh == 1 ||
|
if (ssl->specs.static_ecdh == 1 ||
|
||||||
ssl->specs.kea == rsa_kea ||
|
ssl->specs.kea == rsa_kea ||
|
||||||
ssl->specs.kea == ntru_kea) {
|
ssl->specs.kea == ntru_kea ||
|
||||||
|
pskNoServerHint) {
|
||||||
WOLFSSL_MSG("No KeyExchange required");
|
WOLFSSL_MSG("No KeyExchange required");
|
||||||
} else {
|
} else {
|
||||||
WOLFSSL_MSG("No ServerKeyExchange before ServerDone");
|
WOLFSSL_MSG("No ServerKeyExchange before ServerDone");
|
||||||
@@ -6674,6 +6686,22 @@ int ProcessReply(WOLFSSL* ssl)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Check for duplicate CCS message in DTLS mode.
|
||||||
|
* DTLS allows for duplicate messages, and it should be
|
||||||
|
* skipped. */
|
||||||
|
if (ssl->options.dtls &&
|
||||||
|
ssl->msgsReceived.got_change_cipher) {
|
||||||
|
|
||||||
|
WOLFSSL_MSG("Duplicate ChangeCipher msg");
|
||||||
|
if (ssl->curSize != 1) {
|
||||||
|
WOLFSSL_MSG("Malicious or corrupted"
|
||||||
|
" duplicate ChangeCipher msg");
|
||||||
|
return LENGTH_ERROR;
|
||||||
|
}
|
||||||
|
ssl->buffers.inputBuffer.idx++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
ret = SanityCheckMsgReceived(ssl, change_cipher_hs);
|
ret = SanityCheckMsgReceived(ssl, change_cipher_hs);
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
return ret;
|
return ret;
|
||||||
@@ -14041,15 +14069,18 @@ int DoSessionTicket(WOLFSSL* ssl,
|
|||||||
#endif
|
#endif
|
||||||
if (TLSX_SupportExtensions(ssl)) {
|
if (TLSX_SupportExtensions(ssl)) {
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
/* auto populate extensions supported unless user defined */
|
|
||||||
if ((ret = TLSX_PopulateExtensions(ssl, 1)) != 0)
|
|
||||||
return ret;
|
|
||||||
#else
|
#else
|
||||||
if (IsAtLeastTLSv1_2(ssl)) {
|
if (IsAtLeastTLSv1_2(ssl)) {
|
||||||
#endif
|
#endif
|
||||||
/* Process the hello extension. Skip unsupported. */
|
/* Process the hello extension. Skip unsupported. */
|
||||||
word16 totalExtSz;
|
word16 totalExtSz;
|
||||||
|
|
||||||
|
#ifdef HAVE_TLS_EXTENSIONS
|
||||||
|
/* auto populate extensions supported unless user defined */
|
||||||
|
if ((ret = TLSX_PopulateExtensions(ssl, 1)) != 0)
|
||||||
|
return ret;
|
||||||
|
#endif
|
||||||
|
|
||||||
if ((i - begin) + OPAQUE16_LEN > helloSz)
|
if ((i - begin) + OPAQUE16_LEN > helloSz)
|
||||||
return BUFFER_ERROR;
|
return BUFFER_ERROR;
|
||||||
|
|
||||||
|
|||||||
2
src/io.c
2
src/io.c
@@ -527,6 +527,8 @@ int EmbedGenerateCookie(WOLFSSL* ssl, byte *buf, int sz, void *ctx)
|
|||||||
|
|
||||||
#ifdef HAVE_OCSP
|
#ifdef HAVE_OCSP
|
||||||
|
|
||||||
|
#include <stdlib.h> /* atoi() */
|
||||||
|
|
||||||
|
|
||||||
static int Word16ToString(char* d, word16 number)
|
static int Word16ToString(char* d, word16 number)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -31,7 +31,11 @@
|
|||||||
#include <wolfssl/error-ssl.h>
|
#include <wolfssl/error-ssl.h>
|
||||||
#if defined(SHOW_SECRETS) || defined(CHACHA_AEAD_TEST)
|
#if defined(SHOW_SECRETS) || defined(CHACHA_AEAD_TEST)
|
||||||
#ifdef FREESCALE_MQX
|
#ifdef FREESCALE_MQX
|
||||||
#include <fio.h>
|
#if MQX_USE_IO_OLD
|
||||||
|
#include <fio.h>
|
||||||
|
#else
|
||||||
|
#include <nio.h>
|
||||||
|
#endif
|
||||||
#else
|
#else
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -239,7 +239,8 @@ static const char* const msgTable[] =
|
|||||||
"Decrypt Keys Not Set Up",
|
"Decrypt Keys Not Set Up",
|
||||||
"Late Key Load Error",
|
"Late Key Load Error",
|
||||||
"Got Certificate Status msg",
|
"Got Certificate Status msg",
|
||||||
"RSA Key Missing Error"
|
"RSA Key Missing Error",
|
||||||
|
"Secure Renegotiation Not Supported"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -1117,7 +1118,7 @@ static int SetNamedPrivateKey(const char* name, const char* address, int port,
|
|||||||
sniffer->server = serverIp;
|
sniffer->server = serverIp;
|
||||||
sniffer->port = port;
|
sniffer->port = port;
|
||||||
|
|
||||||
sniffer->ctx = SSL_CTX_new(SSLv3_client_method());
|
sniffer->ctx = SSL_CTX_new(TLSv1_client_method());
|
||||||
if (!sniffer->ctx) {
|
if (!sniffer->ctx) {
|
||||||
SetError(MEMORY_STR, error, NULL, 0);
|
SetError(MEMORY_STR, error, NULL, 0);
|
||||||
#ifdef HAVE_SNI
|
#ifdef HAVE_SNI
|
||||||
@@ -1322,7 +1323,6 @@ static int ProcessClientKeyExchange(const byte* input, int* sslBytes,
|
|||||||
wc_FreeRsaKey(&key);
|
wc_FreeRsaKey(&key);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
ret = 0; /* not in error state */
|
|
||||||
session->sslServer->arrays->preMasterSz = SECRET_LEN;
|
session->sslServer->arrays->preMasterSz = SECRET_LEN;
|
||||||
|
|
||||||
/* store for client side as well */
|
/* store for client side as well */
|
||||||
@@ -1816,6 +1816,14 @@ static int DoHandShake(const byte* input, int* sslBytes,
|
|||||||
SetError(HANDSHAKE_INPUT_STR, error, session, FATAL_ERROR_STATE);
|
SetError(HANDSHAKE_INPUT_STR, error, session, FATAL_ERROR_STATE);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* A session's arrays are released when the handshake is completed. */
|
||||||
|
if (session->sslServer->arrays == NULL &&
|
||||||
|
session->sslClient->arrays == NULL) {
|
||||||
|
|
||||||
|
SetError(NO_SECURE_RENEGOTIATION, error, session, FATAL_ERROR_STATE);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case hello_verify_request:
|
case hello_verify_request:
|
||||||
|
|||||||
153
src/ssl.c
153
src/ssl.c
@@ -36,6 +36,8 @@
|
|||||||
#if defined(OPENSSL_EXTRA) || defined(HAVE_WEBSERVER) || \
|
#if defined(OPENSSL_EXTRA) || defined(HAVE_WEBSERVER) || \
|
||||||
defined(WOLFSSL_KEY_GEN)
|
defined(WOLFSSL_KEY_GEN)
|
||||||
#include <wolfssl/openssl/evp.h>
|
#include <wolfssl/openssl/evp.h>
|
||||||
|
/* openssl headers end, wolfssl internal headers next */
|
||||||
|
#include <wolfssl/wolfcrypt/wc_encrypt.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef OPENSSL_EXTRA
|
#ifdef OPENSSL_EXTRA
|
||||||
@@ -1763,7 +1765,7 @@ int wolfSSL_set_group_messages(WOLFSSL* ssl)
|
|||||||
static int SetMinVersionHelper(byte* minVersion, int version)
|
static int SetMinVersionHelper(byte* minVersion, int version)
|
||||||
{
|
{
|
||||||
switch (version) {
|
switch (version) {
|
||||||
#ifndef NO_OLD_TLS
|
#if defined(WOLFSSL_ALLOW_SSLV3) && !defined(NO_OLD_TLS)
|
||||||
case WOLFSSL_SSLV3:
|
case WOLFSSL_SSLV3:
|
||||||
*minVersion = SSLv3_MINOR;
|
*minVersion = SSLv3_MINOR;
|
||||||
break;
|
break;
|
||||||
@@ -1834,7 +1836,7 @@ int wolfSSL_SetVersion(WOLFSSL* ssl, int version)
|
|||||||
}
|
}
|
||||||
|
|
||||||
switch (version) {
|
switch (version) {
|
||||||
#ifndef NO_OLD_TLS
|
#if defined(WOLFSSL_ALLOW_SSLV3) && !defined(NO_OLD_TLS)
|
||||||
case WOLFSSL_SSLV3:
|
case WOLFSSL_SSLV3:
|
||||||
ssl->version = MakeSSLv3();
|
ssl->version = MakeSSLv3();
|
||||||
break;
|
break;
|
||||||
@@ -3024,16 +3026,16 @@ static int ProcessChainBuffer(WOLFSSL_CTX* ctx, const unsigned char* buff,
|
|||||||
static INLINE WOLFSSL_METHOD* cm_pick_method(void)
|
static INLINE WOLFSSL_METHOD* cm_pick_method(void)
|
||||||
{
|
{
|
||||||
#ifndef NO_WOLFSSL_CLIENT
|
#ifndef NO_WOLFSSL_CLIENT
|
||||||
#ifdef NO_OLD_TLS
|
#if defined(WOLFSSL_ALLOW_SSLV3) && !defined(NO_OLD_TLS)
|
||||||
return wolfTLSv1_2_client_method();
|
|
||||||
#else
|
|
||||||
return wolfSSLv3_client_method();
|
return wolfSSLv3_client_method();
|
||||||
|
#else
|
||||||
|
return wolfTLSv1_2_client_method();
|
||||||
#endif
|
#endif
|
||||||
#elif !defined(NO_WOLFSSL_SERVER)
|
#elif !defined(NO_WOLFSSL_SERVER)
|
||||||
#ifdef NO_OLD_TLS
|
#if defined(WOLFSSL_ALLOW_SSLV3) && !defined(NO_OLD_TLS)
|
||||||
return wolfTLSv1_2_server_method();
|
|
||||||
#else
|
|
||||||
return wolfSSLv3_server_method();
|
return wolfSSLv3_server_method();
|
||||||
|
#else
|
||||||
|
return wolfTLSv1_2_server_method();
|
||||||
#endif
|
#endif
|
||||||
#else
|
#else
|
||||||
return NULL;
|
return NULL;
|
||||||
@@ -5333,7 +5335,7 @@ int wolfSSL_dtls_got_timeout(WOLFSSL* ssl)
|
|||||||
/* client only parts */
|
/* client only parts */
|
||||||
#ifndef NO_WOLFSSL_CLIENT
|
#ifndef NO_WOLFSSL_CLIENT
|
||||||
|
|
||||||
#ifndef NO_OLD_TLS
|
#if defined(WOLFSSL_ALLOW_SSLV3) && !defined(NO_OLD_TLS)
|
||||||
WOLFSSL_METHOD* wolfSSLv3_client_method(void)
|
WOLFSSL_METHOD* wolfSSLv3_client_method(void)
|
||||||
{
|
{
|
||||||
WOLFSSL_METHOD* method =
|
WOLFSSL_METHOD* method =
|
||||||
@@ -5621,7 +5623,7 @@ int wolfSSL_dtls_got_timeout(WOLFSSL* ssl)
|
|||||||
/* server only parts */
|
/* server only parts */
|
||||||
#ifndef NO_WOLFSSL_SERVER
|
#ifndef NO_WOLFSSL_SERVER
|
||||||
|
|
||||||
#ifndef NO_OLD_TLS
|
#if defined(WOLFSSL_ALLOW_SSLV3) && !defined(NO_OLD_TLS)
|
||||||
WOLFSSL_METHOD* wolfSSLv3_server_method(void)
|
WOLFSSL_METHOD* wolfSSLv3_server_method(void)
|
||||||
{
|
{
|
||||||
WOLFSSL_METHOD* method =
|
WOLFSSL_METHOD* method =
|
||||||
@@ -10918,7 +10920,7 @@ int wolfSSL_cmp_peer_cert_to_file(WOLFSSL* ssl, const char *fname)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
static RNG globalRNG;
|
static WC_RNG globalRNG;
|
||||||
static int initGlobalRNG = 0;
|
static int initGlobalRNG = 0;
|
||||||
|
|
||||||
/* SSL_SUCCESS on ok */
|
/* SSL_SUCCESS on ok */
|
||||||
@@ -10945,19 +10947,19 @@ int wolfSSL_RAND_seed(const void* seed, int len)
|
|||||||
/* SSL_SUCCESS on ok */
|
/* SSL_SUCCESS on ok */
|
||||||
int wolfSSL_RAND_bytes(unsigned char* buf, int num)
|
int wolfSSL_RAND_bytes(unsigned char* buf, int num)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
int initTmpRng = 0;
|
int initTmpRng = 0;
|
||||||
RNG* rng = NULL;
|
WC_RNG* rng = NULL;
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
RNG* tmpRNG = NULL;
|
WC_RNG* tmpRNG = NULL;
|
||||||
#else
|
#else
|
||||||
RNG tmpRNG[1];
|
WC_RNG tmpRNG[1];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
WOLFSSL_ENTER("wolfSSL_RAND_bytes");
|
WOLFSSL_ENTER("wolfSSL_RAND_bytes");
|
||||||
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
tmpRNG = (RNG*)XMALLOC(sizeof(RNG), NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
tmpRNG = (WC_RNG*)XMALLOC(sizeof(WC_RNG), NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
if (tmpRNG == NULL)
|
if (tmpRNG == NULL)
|
||||||
return ret;
|
return ret;
|
||||||
#endif
|
#endif
|
||||||
@@ -11283,12 +11285,12 @@ int wolfSSL_BN_rand(WOLFSSL_BIGNUM* bn, int bits, int top, int bottom)
|
|||||||
int ret = 0;
|
int ret = 0;
|
||||||
int len = bits / 8;
|
int len = bits / 8;
|
||||||
int initTmpRng = 0;
|
int initTmpRng = 0;
|
||||||
RNG* rng = NULL;
|
WC_RNG* rng = NULL;
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
RNG* tmpRNG = NULL;
|
WC_RNG* tmpRNG = NULL;
|
||||||
byte* buff = NULL;
|
byte* buff = NULL;
|
||||||
#else
|
#else
|
||||||
RNG tmpRNG[1];
|
WC_RNG tmpRNG[1];
|
||||||
byte buff[1024];
|
byte buff[1024];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -11301,7 +11303,7 @@ int wolfSSL_BN_rand(WOLFSSL_BIGNUM* bn, int bits, int top, int bottom)
|
|||||||
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
buff = (byte*)XMALLOC(1024, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
buff = (byte*)XMALLOC(1024, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
tmpRNG = (RNG*) XMALLOC(sizeof(RNG), NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
tmpRNG = (WC_RNG*) XMALLOC(sizeof(WC_RNG), NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
if (buff == NULL || tmpRNG == NULL) {
|
if (buff == NULL || tmpRNG == NULL) {
|
||||||
XFREE(buff, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
XFREE(buff, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
XFREE(tmpRNG, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
XFREE(tmpRNG, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
@@ -11924,23 +11926,23 @@ int wolfSSL_DH_generate_key(WOLFSSL_DH* dh)
|
|||||||
word32 pubSz = 768;
|
word32 pubSz = 768;
|
||||||
word32 privSz = 768;
|
word32 privSz = 768;
|
||||||
int initTmpRng = 0;
|
int initTmpRng = 0;
|
||||||
RNG* rng = NULL;
|
WC_RNG* rng = NULL;
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
unsigned char* pub = NULL;
|
unsigned char* pub = NULL;
|
||||||
unsigned char* priv = NULL;
|
unsigned char* priv = NULL;
|
||||||
RNG* tmpRNG = NULL;
|
WC_RNG* tmpRNG = NULL;
|
||||||
#else
|
#else
|
||||||
unsigned char pub [768];
|
unsigned char pub [768];
|
||||||
unsigned char priv[768];
|
unsigned char priv[768];
|
||||||
RNG tmpRNG[1];
|
WC_RNG tmpRNG[1];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
WOLFSSL_MSG("wolfSSL_DH_generate_key");
|
WOLFSSL_MSG("wolfSSL_DH_generate_key");
|
||||||
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
tmpRNG = (RNG*)XMALLOC(sizeof(RNG), NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
tmpRNG = (WC_RNG*)XMALLOC(sizeof(WC_RNG), NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
pub = (unsigned char*)XMALLOC(pubSz, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
pub = (unsigned char*)XMALLOC(pubSz, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
priv = (unsigned char*)XMALLOC(privSz, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
priv = (unsigned char*)XMALLOC(privSz, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
|
||||||
if (tmpRNG == NULL || pub == NULL || priv == NULL) {
|
if (tmpRNG == NULL || pub == NULL || priv == NULL) {
|
||||||
XFREE(tmpRNG, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
XFREE(tmpRNG, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
@@ -12515,11 +12517,12 @@ int wolfSSL_RSA_generate_key_ex(WOLFSSL_RSA* rsa, int bits, WOLFSSL_BIGNUM* bn,
|
|||||||
|
|
||||||
(void)cb;
|
(void)cb;
|
||||||
(void)bn;
|
(void)bn;
|
||||||
|
(void)bits;
|
||||||
|
|
||||||
WOLFSSL_ENTER("wolfSSL_RSA_generate_key_ex");
|
WOLFSSL_ENTER("wolfSSL_RSA_generate_key_ex");
|
||||||
|
|
||||||
if (rsa == NULL || rsa->internal == NULL ||
|
if (rsa == NULL || rsa->internal == NULL) {
|
||||||
bits < RSA_MIN_SIZE || bits > RSA_MAX_SIZE) {
|
/* bit size checked during make key call */
|
||||||
WOLFSSL_MSG("bad arguments");
|
WOLFSSL_MSG("bad arguments");
|
||||||
return SSL_FAILURE;
|
return SSL_FAILURE;
|
||||||
}
|
}
|
||||||
@@ -12527,13 +12530,13 @@ int wolfSSL_RSA_generate_key_ex(WOLFSSL_RSA* rsa, int bits, WOLFSSL_BIGNUM* bn,
|
|||||||
#ifdef WOLFSSL_KEY_GEN
|
#ifdef WOLFSSL_KEY_GEN
|
||||||
{
|
{
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
RNG* rng = NULL;
|
WC_RNG* rng = NULL;
|
||||||
#else
|
#else
|
||||||
RNG rng[1];
|
WC_RNG rng[1];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
rng = (RNG*)XMALLOC(sizeof(RNG), NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
rng = (WC_RNG*)XMALLOC(sizeof(WC_RNG), NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
if (rng == NULL)
|
if (rng == NULL)
|
||||||
return SSL_FAILURE;
|
return SSL_FAILURE;
|
||||||
#endif
|
#endif
|
||||||
@@ -12648,15 +12651,15 @@ int wolfSSL_DSA_generate_key(WOLFSSL_DSA* dsa)
|
|||||||
#ifdef WOLFSSL_KEY_GEN
|
#ifdef WOLFSSL_KEY_GEN
|
||||||
{
|
{
|
||||||
int initTmpRng = 0;
|
int initTmpRng = 0;
|
||||||
RNG *rng = NULL;
|
WC_RNG *rng = NULL;
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
RNG *tmpRNG = NULL;
|
WC_RNG *tmpRNG = NULL;
|
||||||
#else
|
#else
|
||||||
RNG tmpRNG[1];
|
WC_RNG tmpRNG[1];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
tmpRNG = (RNG*)XMALLOC(sizeof(RNG), NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
tmpRNG = (WC_RNG*)XMALLOC(sizeof(WC_RNG), NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
if (tmpRNG == NULL)
|
if (tmpRNG == NULL)
|
||||||
return SSL_FATAL_ERROR;
|
return SSL_FATAL_ERROR;
|
||||||
#endif
|
#endif
|
||||||
@@ -12721,15 +12724,15 @@ int wolfSSL_DSA_generate_parameters_ex(WOLFSSL_DSA* dsa, int bits,
|
|||||||
#ifdef WOLFSSL_KEY_GEN
|
#ifdef WOLFSSL_KEY_GEN
|
||||||
{
|
{
|
||||||
int initTmpRng = 0;
|
int initTmpRng = 0;
|
||||||
RNG *rng = NULL;
|
WC_RNG *rng = NULL;
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
RNG *tmpRNG = NULL;
|
WC_RNG *tmpRNG = NULL;
|
||||||
#else
|
#else
|
||||||
RNG tmpRNG[1];
|
WC_RNG tmpRNG[1];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
tmpRNG = (RNG*)XMALLOC(sizeof(RNG), NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
tmpRNG = (WC_RNG*)XMALLOC(sizeof(WC_RNG), NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
if (tmpRNG == NULL)
|
if (tmpRNG == NULL)
|
||||||
return SSL_FATAL_ERROR;
|
return SSL_FATAL_ERROR;
|
||||||
#endif
|
#endif
|
||||||
@@ -12773,13 +12776,13 @@ int wolfSSL_DSA_generate_parameters_ex(WOLFSSL_DSA* dsa, int bits,
|
|||||||
int wolfSSL_DSA_do_sign(const unsigned char* d, unsigned char* sigRet,
|
int wolfSSL_DSA_do_sign(const unsigned char* d, unsigned char* sigRet,
|
||||||
WOLFSSL_DSA* dsa)
|
WOLFSSL_DSA* dsa)
|
||||||
{
|
{
|
||||||
int ret = SSL_FATAL_ERROR;
|
int ret = SSL_FATAL_ERROR;
|
||||||
int initTmpRng = 0;
|
int initTmpRng = 0;
|
||||||
RNG* rng = NULL;
|
WC_RNG* rng = NULL;
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
RNG* tmpRNG = NULL;
|
WC_RNG* tmpRNG = NULL;
|
||||||
#else
|
#else
|
||||||
RNG tmpRNG[1];
|
WC_RNG tmpRNG[1];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
WOLFSSL_ENTER("wolfSSL_DSA_do_sign");
|
WOLFSSL_ENTER("wolfSSL_DSA_do_sign");
|
||||||
@@ -12800,7 +12803,7 @@ int wolfSSL_DSA_do_sign(const unsigned char* d, unsigned char* sigRet,
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
tmpRNG = (RNG*)XMALLOC(sizeof(RNG), NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
tmpRNG = (WC_RNG*)XMALLOC(sizeof(WC_RNG), NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
if (tmpRNG == NULL)
|
if (tmpRNG == NULL)
|
||||||
return SSL_FATAL_ERROR;
|
return SSL_FATAL_ERROR;
|
||||||
#endif
|
#endif
|
||||||
@@ -12872,17 +12875,17 @@ int wolfSSL_RSA_sign(int type, const unsigned char* m,
|
|||||||
unsigned int mLen, unsigned char* sigRet,
|
unsigned int mLen, unsigned char* sigRet,
|
||||||
unsigned int* sigLen, WOLFSSL_RSA* rsa)
|
unsigned int* sigLen, WOLFSSL_RSA* rsa)
|
||||||
{
|
{
|
||||||
word32 outLen;
|
word32 outLen;
|
||||||
word32 signSz;
|
word32 signSz;
|
||||||
int initTmpRng = 0;
|
int initTmpRng = 0;
|
||||||
RNG* rng = NULL;
|
WC_RNG* rng = NULL;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
RNG* tmpRNG = NULL;
|
WC_RNG* tmpRNG = NULL;
|
||||||
byte* encodedSig = NULL;
|
byte* encodedSig = NULL;
|
||||||
#else
|
#else
|
||||||
RNG tmpRNG[1];
|
WC_RNG tmpRNG[1];
|
||||||
byte encodedSig[MAX_ENCODED_SIG_SZ];
|
byte encodedSig[MAX_ENCODED_SIG_SZ];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
WOLFSSL_MSG("wolfSSL_RSA_sign");
|
WOLFSSL_MSG("wolfSSL_RSA_sign");
|
||||||
@@ -12910,7 +12913,7 @@ int wolfSSL_RSA_sign(int type, const unsigned char* m,
|
|||||||
outLen = (word32)wolfSSL_BN_num_bytes(rsa->n);
|
outLen = (word32)wolfSSL_BN_num_bytes(rsa->n);
|
||||||
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
tmpRNG = (RNG*)XMALLOC(sizeof(RNG), NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
tmpRNG = (WC_RNG*)XMALLOC(sizeof(WC_RNG), NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
if (tmpRNG == NULL)
|
if (tmpRNG == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
@@ -14021,12 +14024,12 @@ int wolfSSL_EC_KEY_set_group(WOLFSSL_EC_KEY *key, WOLFSSL_EC_GROUP *group)
|
|||||||
|
|
||||||
int wolfSSL_EC_KEY_generate_key(WOLFSSL_EC_KEY *key)
|
int wolfSSL_EC_KEY_generate_key(WOLFSSL_EC_KEY *key)
|
||||||
{
|
{
|
||||||
int initTmpRng = 0;
|
int initTmpRng = 0;
|
||||||
RNG* rng = NULL;
|
WC_RNG* rng = NULL;
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
RNG* tmpRNG = NULL;
|
WC_RNG* tmpRNG = NULL;
|
||||||
#else
|
#else
|
||||||
RNG tmpRNG[1];
|
WC_RNG tmpRNG[1];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
WOLFSSL_ENTER("wolfSSL_EC_KEY_generate_key");
|
WOLFSSL_ENTER("wolfSSL_EC_KEY_generate_key");
|
||||||
@@ -14038,7 +14041,7 @@ int wolfSSL_EC_KEY_generate_key(WOLFSSL_EC_KEY *key)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
tmpRNG = (RNG*)XMALLOC(sizeof(RNG), NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
tmpRNG = (WC_RNG*)XMALLOC(sizeof(WC_RNG), NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
if (tmpRNG == NULL)
|
if (tmpRNG == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
#endif
|
#endif
|
||||||
@@ -14656,12 +14659,12 @@ WOLFSSL_ECDSA_SIG *wolfSSL_ECDSA_do_sign(const unsigned char *d, int dlen,
|
|||||||
WOLFSSL_EC_KEY *key)
|
WOLFSSL_EC_KEY *key)
|
||||||
{
|
{
|
||||||
WOLFSSL_ECDSA_SIG *sig = NULL;
|
WOLFSSL_ECDSA_SIG *sig = NULL;
|
||||||
int initTmpRng = 0;
|
int initTmpRng = 0;
|
||||||
RNG* rng = NULL;
|
WC_RNG* rng = NULL;
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
RNG* tmpRNG = NULL;
|
WC_RNG* tmpRNG = NULL;
|
||||||
#else
|
#else
|
||||||
RNG tmpRNG[1];
|
WC_RNG tmpRNG[1];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
WOLFSSL_ENTER("wolfSSL_ECDSA_do_sign");
|
WOLFSSL_ENTER("wolfSSL_ECDSA_do_sign");
|
||||||
@@ -14683,7 +14686,7 @@ WOLFSSL_ECDSA_SIG *wolfSSL_ECDSA_do_sign(const unsigned char *d, int dlen,
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
tmpRNG = (RNG*)XMALLOC(sizeof(RNG), NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
tmpRNG = (WC_RNG*)XMALLOC(sizeof(WC_RNG), NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
if (tmpRNG == NULL)
|
if (tmpRNG == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
#endif
|
#endif
|
||||||
@@ -15484,7 +15487,7 @@ int wolfSSL_get_chain_cert_pem(WOLFSSL_X509_CHAIN* chain, int idx,
|
|||||||
word32 szNeeded = 0;
|
word32 szNeeded = 0;
|
||||||
|
|
||||||
WOLFSSL_ENTER("wolfSSL_get_chain_cert_pem");
|
WOLFSSL_ENTER("wolfSSL_get_chain_cert_pem");
|
||||||
if (!chain || !outLen)
|
if (!chain || !outLen || idx < 0 || idx >= wolfSSL_get_chain_count(chain))
|
||||||
return BAD_FUNC_ARG;
|
return BAD_FUNC_ARG;
|
||||||
|
|
||||||
/* Null output buffer return size needed in outLen */
|
/* Null output buffer return size needed in outLen */
|
||||||
@@ -16344,11 +16347,11 @@ int wolfSSL_EC25519_generate_key(unsigned char *priv, unsigned int *privSz,
|
|||||||
#else /* WOLFSSL_KEY_GEN */
|
#else /* WOLFSSL_KEY_GEN */
|
||||||
int ret = SSL_FAILURE;
|
int ret = SSL_FAILURE;
|
||||||
int initTmpRng = 0;
|
int initTmpRng = 0;
|
||||||
RNG *rng = NULL;
|
WC_RNG *rng = NULL;
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
RNG *tmpRNG = NULL;
|
WC_RNG *tmpRNG = NULL;
|
||||||
#else
|
#else
|
||||||
RNG tmpRNG[1];
|
WC_RNG tmpRNG[1];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
WOLFSSL_ENTER("wolfSSL_EC25519_generate_key");
|
WOLFSSL_ENTER("wolfSSL_EC25519_generate_key");
|
||||||
@@ -16360,7 +16363,7 @@ int wolfSSL_EC25519_generate_key(unsigned char *priv, unsigned int *privSz,
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
tmpRNG = (RNG*)XMALLOC(sizeof(RNG), NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
tmpRNG = (WC_RNG*)XMALLOC(sizeof(WC_RNG), NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
if (tmpRNG == NULL)
|
if (tmpRNG == NULL)
|
||||||
return SSL_FAILURE;
|
return SSL_FAILURE;
|
||||||
#endif
|
#endif
|
||||||
@@ -16482,11 +16485,11 @@ int wolfSSL_ED25519_generate_key(unsigned char *priv, unsigned int *privSz,
|
|||||||
#else /* WOLFSSL_KEY_GEN */
|
#else /* WOLFSSL_KEY_GEN */
|
||||||
int ret = SSL_FAILURE;
|
int ret = SSL_FAILURE;
|
||||||
int initTmpRng = 0;
|
int initTmpRng = 0;
|
||||||
RNG *rng = NULL;
|
WC_RNG *rng = NULL;
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
RNG *tmpRNG = NULL;
|
WC_RNG *tmpRNG = NULL;
|
||||||
#else
|
#else
|
||||||
RNG tmpRNG[1];
|
WC_RNG tmpRNG[1];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
WOLFSSL_ENTER("wolfSSL_ED25519_generate_key");
|
WOLFSSL_ENTER("wolfSSL_ED25519_generate_key");
|
||||||
@@ -16498,7 +16501,7 @@ int wolfSSL_ED25519_generate_key(unsigned char *priv, unsigned int *privSz,
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
tmpRNG = (RNG*)XMALLOC(sizeof(RNG), NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
tmpRNG = (WC_RNG*)XMALLOC(sizeof(WC_RNG), NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
if (tmpRNG == NULL)
|
if (tmpRNG == NULL)
|
||||||
return SSL_FATAL_ERROR;
|
return SSL_FATAL_ERROR;
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -310,7 +310,7 @@ static int PRF(byte* digest, word32 digLen, const byte* secret, word32 secLen,
|
|||||||
|
|
||||||
/* If a cipher suite wants an algorithm better than sha256, it
|
/* If a cipher suite wants an algorithm better than sha256, it
|
||||||
* should use better. */
|
* should use better. */
|
||||||
if (hash_type < sha256_mac)
|
if (hash_type < sha256_mac || hash_type == blake2b_mac)
|
||||||
hash_type = sha256_mac;
|
hash_type = sha256_mac;
|
||||||
ret = p_hash(digest, digLen, secret, secLen, labelSeed,
|
ret = p_hash(digest, digLen, secret, secLen, labelSeed,
|
||||||
labLen + seedLen, hash_type);
|
labLen + seedLen, hash_type);
|
||||||
@@ -350,7 +350,7 @@ int BuildTlsFinished(WOLFSSL* ssl, Hashes* hashes, const byte* sender)
|
|||||||
|
|
||||||
if (IsAtLeastTLSv1_2(ssl)) {
|
if (IsAtLeastTLSv1_2(ssl)) {
|
||||||
#ifndef NO_SHA256
|
#ifndef NO_SHA256
|
||||||
if (ssl->specs.mac_algorithm <= sha256_mac) {
|
if (ssl->specs.mac_algorithm <= sha256_mac || ssl->specs.mac_algorithm == blake2b_mac) {
|
||||||
int ret = wc_Sha256GetHash(&ssl->hsHashes->hashSha256,handshake_hash);
|
int ret = wc_Sha256GetHash(&ssl->hsHashes->hashSha256,handshake_hash);
|
||||||
|
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
@@ -2058,7 +2058,7 @@ int TLSX_UseSessionTicket(TLSX** extensions, SessionTicket* ticket)
|
|||||||
|
|
||||||
|
|
||||||
#ifdef HAVE_QSH
|
#ifdef HAVE_QSH
|
||||||
static RNG* rng;
|
static WC_RNG* rng;
|
||||||
static wolfSSL_Mutex* rngMutex;
|
static wolfSSL_Mutex* rngMutex;
|
||||||
|
|
||||||
static void TLSX_QSH_FreeAll(QSHScheme* list)
|
static void TLSX_QSH_FreeAll(QSHScheme* list)
|
||||||
@@ -2841,7 +2841,7 @@ static word32 GetEntropy(unsigned char* out, word32 num_bytes)
|
|||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
if (rng == NULL) {
|
if (rng == NULL) {
|
||||||
if ((rng = XMALLOC(sizeof(RNG), 0, DYNAMIC_TYPE_TLSX)) == NULL)
|
if ((rng = XMALLOC(sizeof(WC_RNG), 0, DYNAMIC_TYPE_TLSX)) == NULL)
|
||||||
return DRBG_OUT_OF_MEMORY;
|
return DRBG_OUT_OF_MEMORY;
|
||||||
wc_InitRng(rng);
|
wc_InitRng(rng);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,6 @@ includedir=${prefix}/include
|
|||||||
|
|
||||||
Name: wolfssl
|
Name: wolfssl
|
||||||
Description: wolfssl C library.
|
Description: wolfssl C library.
|
||||||
Version: 3.6.2
|
Version: 3.6.3
|
||||||
Libs: -L${libdir} -lwolfssl
|
Libs: -L${libdir} -lwolfssl
|
||||||
Cflags: -I${includedir}
|
Cflags: -I${includedir}
|
||||||
|
|||||||
@@ -27,7 +27,7 @@
|
|||||||
/* defn adds */
|
/* defn adds */
|
||||||
char* wolfSSL_error_string(int err);
|
char* wolfSSL_error_string(int err);
|
||||||
int wolfSSL_swig_connect(WOLFSSL*, const char* server, int port);
|
int wolfSSL_swig_connect(WOLFSSL*, const char* server, int port);
|
||||||
RNG* GetRng(void);
|
WC_RNG* GetRng(void);
|
||||||
RsaKey* GetRsaPrivateKey(const char* file);
|
RsaKey* GetRsaPrivateKey(const char* file);
|
||||||
void FillSignStr(unsigned char*, const char*, int);
|
void FillSignStr(unsigned char*, const char*, int);
|
||||||
%}
|
%}
|
||||||
@@ -44,11 +44,11 @@ int wolfSSL_Init(void);
|
|||||||
char* wolfSSL_error_string(int);
|
char* wolfSSL_error_string(int);
|
||||||
int wolfSSL_swig_connect(WOLFSSL*, const char* server, int port);
|
int wolfSSL_swig_connect(WOLFSSL*, const char* server, int port);
|
||||||
|
|
||||||
int wc_RsaSSL_Sign(const unsigned char* in, int inLen, unsigned char* out, int outLen, RsaKey* key, RNG* rng);
|
int wc_RsaSSL_Sign(const unsigned char* in, int inLen, unsigned char* out, int outLen, RsaKey* key, WC_RNG* rng);
|
||||||
|
|
||||||
int wc_RsaSSL_Verify(const unsigned char* in, int inLen, unsigned char* out, int outLen, RsaKey* key);
|
int wc_RsaSSL_Verify(const unsigned char* in, int inLen, unsigned char* out, int outLen, RsaKey* key);
|
||||||
|
|
||||||
RNG* GetRng(void);
|
WC_RNG* GetRng(void);
|
||||||
RsaKey* GetRsaPrivateKey(const char* file);
|
RsaKey* GetRsaPrivateKey(const char* file);
|
||||||
void FillSignStr(unsigned char*, const char*, int);
|
void FillSignStr(unsigned char*, const char*, int);
|
||||||
|
|
||||||
|
|||||||
@@ -182,9 +182,9 @@ char* wolfSSL_error_string(int err)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
RNG* GetRng(void)
|
WC_RNG* GetRng(void)
|
||||||
{
|
{
|
||||||
RNG* rng = (RNG*)malloc(sizeof(RNG));
|
WC_RNG* rng = (WC_RNG*)malloc(sizeof(WC_RNG));
|
||||||
|
|
||||||
if (rng)
|
if (rng)
|
||||||
if (wc_InitRng(rng) != 0) {
|
if (wc_InitRng(rng) != 0) {
|
||||||
|
|||||||
4
tests/CONF_FILES_README.md
Normal file
4
tests/CONF_FILES_README.md
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
suites.c is a dynamicically written program where new test cases can be written
|
||||||
|
and added to as needed. When creating a new configure file for a test be sure
|
||||||
|
to use the exact formatting as the existing configure files. Reference test.conf
|
||||||
|
for an example.
|
||||||
1
tests/README
Normal file
1
tests/README
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Before creating any new configure files (.conf) read the CONF_FILES_README.md
|
||||||
@@ -101,8 +101,10 @@ static void test_wolfSSL_Method_Allocators(void)
|
|||||||
TEST_METHOD_ALLOCATOR(a, AssertNull)
|
TEST_METHOD_ALLOCATOR(a, AssertNull)
|
||||||
|
|
||||||
#ifndef NO_OLD_TLS
|
#ifndef NO_OLD_TLS
|
||||||
TEST_VALID_METHOD_ALLOCATOR(wolfSSLv3_server_method);
|
#ifdef WOLFSSL_ALLOW_SSLV3
|
||||||
TEST_VALID_METHOD_ALLOCATOR(wolfSSLv3_client_method);
|
TEST_VALID_METHOD_ALLOCATOR(wolfSSLv3_server_method);
|
||||||
|
TEST_VALID_METHOD_ALLOCATOR(wolfSSLv3_client_method);
|
||||||
|
#endif
|
||||||
TEST_VALID_METHOD_ALLOCATOR(wolfTLSv1_server_method);
|
TEST_VALID_METHOD_ALLOCATOR(wolfTLSv1_server_method);
|
||||||
TEST_VALID_METHOD_ALLOCATOR(wolfTLSv1_client_method);
|
TEST_VALID_METHOD_ALLOCATOR(wolfTLSv1_client_method);
|
||||||
TEST_VALID_METHOD_ALLOCATOR(wolfTLSv1_1_server_method);
|
TEST_VALID_METHOD_ALLOCATOR(wolfTLSv1_1_server_method);
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ tests_unit_test_SOURCES = \
|
|||||||
tests/api.c \
|
tests/api.c \
|
||||||
tests/suites.c \
|
tests/suites.c \
|
||||||
tests/hash.c \
|
tests/hash.c \
|
||||||
|
tests/srp.c \
|
||||||
examples/client/client.c \
|
examples/client/client.c \
|
||||||
examples/server/server.c
|
examples/server/server.c
|
||||||
tests_unit_test_CFLAGS = -DNO_MAIN_DRIVER $(AM_CFLAGS)
|
tests_unit_test_CFLAGS = -DNO_MAIN_DRIVER $(AM_CFLAGS)
|
||||||
@@ -19,5 +20,7 @@ tests_unit_test_DEPENDENCIES = src/libwolfssl.la
|
|||||||
endif
|
endif
|
||||||
EXTRA_DIST += tests/unit.h
|
EXTRA_DIST += tests/unit.h
|
||||||
EXTRA_DIST += tests/test.conf \
|
EXTRA_DIST += tests/test.conf \
|
||||||
|
tests/test-qsh.conf \
|
||||||
|
tests/test-psk-no-id.conf \
|
||||||
tests/test-dtls.conf
|
tests/test-dtls.conf
|
||||||
DISTCLEANFILES+= tests/.libs/unit.test
|
DISTCLEANFILES+= tests/.libs/unit.test
|
||||||
|
|||||||
696
tests/srp.c
Normal file
696
tests/srp.c
Normal file
@@ -0,0 +1,696 @@
|
|||||||
|
/* srp.c SRP unit tests
|
||||||
|
*
|
||||||
|
* Copyright (C) 2006-2015 wolfSSL Inc.
|
||||||
|
*
|
||||||
|
* This file is part of wolfSSL. (formerly known as CyaSSL)
|
||||||
|
*
|
||||||
|
* wolfSSL is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Geteral Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* wolfSSL 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 Geteral Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Geteral 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
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include <config.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <wolfssl/wolfcrypt/settings.h>
|
||||||
|
|
||||||
|
#include <tests/unit.h>
|
||||||
|
#include <wolfssl/wolfcrypt/sha512.h>
|
||||||
|
#include <wolfssl/wolfcrypt/srp.h>
|
||||||
|
|
||||||
|
#ifdef WOLFCRYPT_HAVE_SRP
|
||||||
|
|
||||||
|
static byte username[] = "user";
|
||||||
|
static word32 usernameSz = 4;
|
||||||
|
|
||||||
|
static byte password[] = "password";
|
||||||
|
static word32 passwordSz = 8;
|
||||||
|
|
||||||
|
static byte N[] = {
|
||||||
|
0xD4, 0xC7, 0xF8, 0xA2, 0xB3, 0x2C, 0x11, 0xB8, 0xFB, 0xA9, 0x58, 0x1E,
|
||||||
|
0xC4, 0xBA, 0x4F, 0x1B, 0x04, 0x21, 0x56, 0x42, 0xEF, 0x73, 0x55, 0xE3,
|
||||||
|
0x7C, 0x0F, 0xC0, 0x44, 0x3E, 0xF7, 0x56, 0xEA, 0x2C, 0x6B, 0x8E, 0xEB,
|
||||||
|
0x75, 0x5A, 0x1C, 0x72, 0x30, 0x27, 0x66, 0x3C, 0xAA, 0x26, 0x5E, 0xF7,
|
||||||
|
0x85, 0xB8, 0xFF, 0x6A, 0x9B, 0x35, 0x22, 0x7A, 0x52, 0xD8, 0x66, 0x33,
|
||||||
|
0xDB, 0xDF, 0xCA, 0x43
|
||||||
|
};
|
||||||
|
|
||||||
|
static byte g[] = {
|
||||||
|
0x02
|
||||||
|
};
|
||||||
|
|
||||||
|
static byte salt[] = {
|
||||||
|
0x80, 0x66, 0x61, 0x5B, 0x7D, 0x33, 0xA2, 0x2E, 0x79, 0x18
|
||||||
|
};
|
||||||
|
|
||||||
|
static byte verifier[] = {
|
||||||
|
0x24, 0x5F, 0xA5, 0x1B, 0x2A, 0x28, 0xF8, 0xFF, 0xE2, 0xA0, 0xF8, 0x61,
|
||||||
|
0x7B, 0x0F, 0x3C, 0x05, 0xD6, 0x4A, 0x55, 0xDF, 0x74, 0x31, 0x54, 0x47,
|
||||||
|
0xA1, 0xFA, 0x9D, 0x25, 0x7B, 0x02, 0x88, 0x0A, 0xE8, 0x5A, 0xBA, 0x8B,
|
||||||
|
0xA2, 0xD3, 0x8A, 0x62, 0x46, 0x8C, 0xEC, 0x52, 0xBE, 0xDE, 0xFC, 0x75,
|
||||||
|
0xF5, 0xDB, 0x9C, 0x8C, 0x9B, 0x34, 0x7A, 0xE7, 0x4A, 0x5F, 0xBB, 0x96,
|
||||||
|
0x38, 0x19, 0xAB, 0x24
|
||||||
|
};
|
||||||
|
|
||||||
|
static byte a[] = {
|
||||||
|
0x37, 0x95, 0xF2, 0xA6, 0xF1, 0x6F, 0x0D, 0x58, 0xBF, 0xED, 0x44, 0x87,
|
||||||
|
0xE0, 0xB6, 0xCC, 0x1C, 0xA0, 0x50, 0xC6, 0x61, 0xBB, 0x36, 0xE0, 0x9A,
|
||||||
|
0xF3, 0xF7, 0x1E, 0x7A, 0x61, 0x86, 0x5A, 0xF5
|
||||||
|
};
|
||||||
|
|
||||||
|
static byte A[] = {
|
||||||
|
0x8D, 0x28, 0xC5, 0x6A, 0x46, 0x5C, 0x82, 0xDB, 0xC7, 0xF6, 0x8B, 0x62,
|
||||||
|
0x1A, 0xAD, 0xA1, 0x76, 0x1B, 0x55, 0xFF, 0xAB, 0x10, 0x2F, 0xFF, 0x4A,
|
||||||
|
0xAA, 0x46, 0xAD, 0x33, 0x64, 0xDE, 0x28, 0x2E, 0x82, 0x7A, 0xBE, 0xEA,
|
||||||
|
0x32, 0xFC, 0xD6, 0x14, 0x01, 0x71, 0xE6, 0xC8, 0xC9, 0x53, 0x69, 0x55,
|
||||||
|
0xE1, 0xF8, 0x3D, 0xDD, 0xC7, 0xD5, 0x21, 0xCE, 0xFF, 0x17, 0xFC, 0x23,
|
||||||
|
0xBF, 0xCF, 0x2D, 0xB0
|
||||||
|
};
|
||||||
|
|
||||||
|
static byte b[] = {
|
||||||
|
0x2B, 0xDD, 0x30, 0x30, 0x53, 0xAF, 0xD8, 0x3A, 0xE7, 0xE0, 0x17, 0x82,
|
||||||
|
0x39, 0x44, 0x2C, 0xDB, 0x30, 0x88, 0x0F, 0xC8, 0x88, 0xC2, 0xB2, 0xC1,
|
||||||
|
0x78, 0x43, 0x2F, 0xD5, 0x60, 0xD4, 0xDA, 0x43
|
||||||
|
};
|
||||||
|
|
||||||
|
static byte B[] = {
|
||||||
|
0xB5, 0x80, 0x36, 0x7F, 0x50, 0x89, 0xC1, 0x04, 0x42, 0x98, 0xD7, 0x6A,
|
||||||
|
0x37, 0x8E, 0xF1, 0x81, 0x52, 0xC5, 0x7A, 0xA1, 0xD5, 0xB7, 0x66, 0x84,
|
||||||
|
0xA1, 0x3E, 0x32, 0x82, 0x2B, 0x3A, 0xB5, 0xD7, 0x3D, 0x50, 0xF1, 0x58,
|
||||||
|
0xBD, 0x89, 0x75, 0xC7, 0x51, 0xCF, 0x6C, 0x03, 0xD4, 0xCA, 0xD5, 0x6E,
|
||||||
|
0x97, 0x4D, 0xA3, 0x1E, 0x19, 0x0B, 0xF0, 0xAA, 0x7D, 0x14, 0x90, 0x80,
|
||||||
|
0x0E, 0xC7, 0x92, 0xAD
|
||||||
|
};
|
||||||
|
|
||||||
|
static byte key[] = {
|
||||||
|
0x66, 0x00, 0x9D, 0x58, 0xB3, 0xD2, 0x0D, 0x4B, 0x69, 0x7F, 0xCF, 0x48,
|
||||||
|
0xFF, 0x8F, 0x15, 0x81, 0x4C, 0x4B, 0xFE, 0x9D, 0x85, 0x77, 0x88, 0x60,
|
||||||
|
0x1D, 0x1E, 0x51, 0xCF, 0x75, 0xCC, 0x58, 0x00, 0xE7, 0x8D, 0x22, 0x87,
|
||||||
|
0x13, 0x6C, 0x88, 0x55
|
||||||
|
};
|
||||||
|
|
||||||
|
static byte client_proof[] = {
|
||||||
|
0x0D, 0x49, 0xE1, 0x9C, 0x3A, 0x88, 0x43, 0x15, 0x45, 0xA8, 0xAC, 0xAB,
|
||||||
|
0xEA, 0x15, 0x1A, 0xEE, 0xF9, 0x38, 0x4D, 0x21
|
||||||
|
};
|
||||||
|
|
||||||
|
static byte server_proof[] = {
|
||||||
|
0xBD, 0xB1, 0x20, 0x70, 0x46, 0xC9, 0xD6, 0xCC, 0xE2, 0x1D, 0x75, 0xA2,
|
||||||
|
0xD0, 0xAF, 0xC5, 0xBC, 0xAE, 0x12, 0xFC, 0x75
|
||||||
|
};
|
||||||
|
|
||||||
|
static void test_SrpInit(void)
|
||||||
|
{
|
||||||
|
Srp srp;
|
||||||
|
|
||||||
|
/* invalid params */
|
||||||
|
AssertIntEQ(BAD_FUNC_ARG, wc_SrpInit(NULL, SRP_TYPE_SHA, SRP_CLIENT_SIDE));
|
||||||
|
AssertIntEQ(BAD_FUNC_ARG, wc_SrpInit(&srp, 255, SRP_CLIENT_SIDE));
|
||||||
|
AssertIntEQ(BAD_FUNC_ARG, wc_SrpInit(&srp, SRP_TYPE_SHA, 255 ));
|
||||||
|
|
||||||
|
/* success */
|
||||||
|
AssertIntEQ(0, wc_SrpInit(&srp, SRP_TYPE_SHA, SRP_CLIENT_SIDE));
|
||||||
|
|
||||||
|
wc_SrpTerm(&srp);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void test_SrpSetUsername(void)
|
||||||
|
{
|
||||||
|
Srp srp;
|
||||||
|
|
||||||
|
AssertIntEQ(0, wc_SrpInit(&srp, SRP_TYPE_SHA, SRP_CLIENT_SIDE));
|
||||||
|
|
||||||
|
/* invalid params */
|
||||||
|
AssertIntEQ(BAD_FUNC_ARG, wc_SrpSetUsername(NULL, username, usernameSz));
|
||||||
|
AssertIntEQ(BAD_FUNC_ARG, wc_SrpSetUsername(&srp, NULL, usernameSz));
|
||||||
|
|
||||||
|
/* success */
|
||||||
|
AssertIntEQ(0, wc_SrpSetUsername(&srp, username, usernameSz));
|
||||||
|
AssertIntEQ((int) usernameSz, srp.userSz);
|
||||||
|
AssertIntEQ(0, XMEMCMP(srp.user, username, usernameSz));
|
||||||
|
|
||||||
|
wc_SrpTerm(&srp);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void test_SrpSetParams(void)
|
||||||
|
{
|
||||||
|
Srp srp;
|
||||||
|
|
||||||
|
AssertIntEQ(0, wc_SrpInit(&srp, SRP_TYPE_SHA, SRP_CLIENT_SIDE));
|
||||||
|
|
||||||
|
/* invalid call order */
|
||||||
|
AssertIntEQ(SRP_CALL_ORDER_E, wc_SrpSetParams(&srp, N, sizeof(N),
|
||||||
|
g, sizeof(g),
|
||||||
|
salt, sizeof(salt)));
|
||||||
|
|
||||||
|
/* fix call order */
|
||||||
|
AssertIntEQ(0, wc_SrpSetUsername(&srp, username, usernameSz));
|
||||||
|
|
||||||
|
/* invalid params */
|
||||||
|
AssertIntEQ(BAD_FUNC_ARG, wc_SrpSetParams(NULL, N, sizeof(N),
|
||||||
|
g, sizeof(g),
|
||||||
|
salt, sizeof(salt)));
|
||||||
|
AssertIntEQ(BAD_FUNC_ARG, wc_SrpSetParams(&srp, NULL, sizeof(N),
|
||||||
|
g, sizeof(g),
|
||||||
|
salt, sizeof(salt)));
|
||||||
|
AssertIntEQ(BAD_FUNC_ARG, wc_SrpSetParams(&srp, N, sizeof(N),
|
||||||
|
NULL, sizeof(g),
|
||||||
|
salt, sizeof(salt)));
|
||||||
|
AssertIntEQ(BAD_FUNC_ARG, wc_SrpSetParams(&srp, N, sizeof(N),
|
||||||
|
g, sizeof(g),
|
||||||
|
NULL, sizeof(salt)));
|
||||||
|
|
||||||
|
/* success */
|
||||||
|
AssertIntEQ(0, wc_SrpSetParams(&srp, N, sizeof(N),
|
||||||
|
g, sizeof(g),
|
||||||
|
salt, sizeof(salt)));
|
||||||
|
|
||||||
|
AssertIntEQ(sizeof(salt), srp.saltSz);
|
||||||
|
AssertIntEQ(0, XMEMCMP(srp.salt, salt, srp.saltSz));
|
||||||
|
|
||||||
|
wc_SrpTerm(&srp);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void test_SrpSetPassword(void)
|
||||||
|
{
|
||||||
|
Srp srp;
|
||||||
|
byte v[64];
|
||||||
|
word32 vSz = 0;
|
||||||
|
|
||||||
|
AssertIntEQ(0, wc_SrpInit(&srp, SRP_TYPE_SHA, SRP_CLIENT_SIDE));
|
||||||
|
AssertIntEQ(0, wc_SrpSetUsername(&srp, username, usernameSz));
|
||||||
|
|
||||||
|
/* invalid call order */
|
||||||
|
AssertIntEQ(SRP_CALL_ORDER_E,
|
||||||
|
wc_SrpSetPassword(&srp, password, passwordSz));
|
||||||
|
AssertIntEQ(SRP_CALL_ORDER_E,
|
||||||
|
wc_SrpGetVerifier(&srp, v, &vSz));
|
||||||
|
|
||||||
|
/* fix call order */
|
||||||
|
AssertIntEQ(0, wc_SrpSetParams(&srp, N, sizeof(N),
|
||||||
|
g, sizeof(g),
|
||||||
|
salt, sizeof(salt)));
|
||||||
|
|
||||||
|
/* invalid params */
|
||||||
|
AssertIntEQ(BAD_FUNC_ARG, wc_SrpSetPassword(NULL, password, passwordSz));
|
||||||
|
AssertIntEQ(BAD_FUNC_ARG, wc_SrpSetPassword(&srp, NULL, passwordSz));
|
||||||
|
|
||||||
|
/* success */
|
||||||
|
AssertIntEQ(0, wc_SrpSetPassword(&srp, password, passwordSz));
|
||||||
|
|
||||||
|
/* invalid params */
|
||||||
|
AssertIntEQ(BAD_FUNC_ARG, wc_SrpGetVerifier(NULL, v, &vSz));
|
||||||
|
AssertIntEQ(BAD_FUNC_ARG, wc_SrpGetVerifier(&srp, NULL, &vSz));
|
||||||
|
AssertIntEQ(BUFFER_E, wc_SrpGetVerifier(&srp, v, &vSz));
|
||||||
|
|
||||||
|
/* success */
|
||||||
|
vSz = sizeof(v);
|
||||||
|
AssertIntEQ(0, wc_SrpGetVerifier(&srp, v, &vSz));
|
||||||
|
AssertIntEQ(vSz, sizeof(verifier));
|
||||||
|
AssertIntEQ(0, XMEMCMP(verifier, v, vSz));
|
||||||
|
|
||||||
|
/* invalid params - client side srp */
|
||||||
|
AssertIntEQ(BAD_FUNC_ARG, wc_SrpSetVerifier(&srp, v, vSz));
|
||||||
|
|
||||||
|
wc_SrpTerm(&srp);
|
||||||
|
AssertIntEQ(0, wc_SrpInit(&srp, SRP_TYPE_SHA, SRP_SERVER_SIDE));
|
||||||
|
|
||||||
|
/* invalid params */
|
||||||
|
AssertIntEQ(BAD_FUNC_ARG, wc_SrpSetVerifier(NULL, v, vSz));
|
||||||
|
AssertIntEQ(BAD_FUNC_ARG, wc_SrpSetVerifier(&srp, NULL, vSz));
|
||||||
|
|
||||||
|
/* success */
|
||||||
|
AssertIntEQ(0, wc_SrpSetVerifier(&srp, v, vSz));
|
||||||
|
|
||||||
|
wc_SrpTerm(&srp);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void test_SrpGetPublic(void)
|
||||||
|
{
|
||||||
|
Srp srp;
|
||||||
|
byte public[64];
|
||||||
|
word32 publicSz = 0;
|
||||||
|
|
||||||
|
AssertIntEQ(0, wc_SrpInit(&srp, SRP_TYPE_SHA, SRP_CLIENT_SIDE));
|
||||||
|
AssertIntEQ(0, wc_SrpSetUsername(&srp, username, usernameSz));
|
||||||
|
AssertIntEQ(0, wc_SrpSetParams(&srp, N, sizeof(N),
|
||||||
|
g, sizeof(g),
|
||||||
|
salt, sizeof(salt)));
|
||||||
|
|
||||||
|
/* invalid call order */
|
||||||
|
AssertIntEQ(SRP_CALL_ORDER_E, wc_SrpGetPublic(&srp, public, &publicSz));
|
||||||
|
|
||||||
|
/* fix call order */
|
||||||
|
AssertIntEQ(0, wc_SrpSetPassword(&srp, password, passwordSz));
|
||||||
|
|
||||||
|
/* invalid params */
|
||||||
|
AssertIntEQ(BAD_FUNC_ARG, wc_SrpGetPublic(NULL, public, &publicSz));
|
||||||
|
AssertIntEQ(BAD_FUNC_ARG, wc_SrpGetPublic(&srp, NULL, &publicSz));
|
||||||
|
AssertIntEQ(BAD_FUNC_ARG, wc_SrpGetPublic(&srp, public, NULL));
|
||||||
|
AssertIntEQ(BUFFER_E, wc_SrpGetPublic(&srp, public, &publicSz));
|
||||||
|
|
||||||
|
/* success */
|
||||||
|
publicSz = sizeof(public);
|
||||||
|
AssertIntEQ(0, wc_SrpSetPrivate(&srp, a, sizeof(a)));
|
||||||
|
AssertIntEQ(0, wc_SrpGetPublic(&srp, public, &publicSz));
|
||||||
|
AssertIntEQ(publicSz, sizeof(A));
|
||||||
|
AssertIntEQ(0, XMEMCMP(public, A, publicSz));
|
||||||
|
|
||||||
|
wc_SrpTerm(&srp);
|
||||||
|
|
||||||
|
AssertIntEQ(0, wc_SrpInit(&srp, SRP_TYPE_SHA, SRP_SERVER_SIDE));
|
||||||
|
AssertIntEQ(0, wc_SrpSetUsername(&srp, username, usernameSz));
|
||||||
|
AssertIntEQ(0, wc_SrpSetParams(&srp, N, sizeof(N),
|
||||||
|
g, sizeof(g),
|
||||||
|
salt, sizeof(salt)));
|
||||||
|
|
||||||
|
/* invalid call order */
|
||||||
|
AssertIntEQ(SRP_CALL_ORDER_E, wc_SrpGetPublic(&srp, public, &publicSz));
|
||||||
|
|
||||||
|
/* fix call order */
|
||||||
|
AssertIntEQ(0, wc_SrpSetVerifier(&srp, verifier, sizeof(verifier)));
|
||||||
|
|
||||||
|
/* success */
|
||||||
|
AssertIntEQ(0, wc_SrpSetPrivate(&srp, b, sizeof(b)));
|
||||||
|
AssertIntEQ(0, wc_SrpGetPublic(&srp, public, &publicSz));
|
||||||
|
AssertIntEQ(publicSz, sizeof(B));
|
||||||
|
AssertIntEQ(0, XMEMCMP(public, B, publicSz));
|
||||||
|
|
||||||
|
wc_SrpTerm(&srp);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void test_SrpComputeKey(void)
|
||||||
|
{
|
||||||
|
Srp cli, srv;
|
||||||
|
byte clientPubKey[64];
|
||||||
|
byte serverPubKey[64];
|
||||||
|
word32 clientPubKeySz = 64;
|
||||||
|
word32 serverPubKeySz = 64;
|
||||||
|
|
||||||
|
AssertIntEQ(0, wc_SrpInit(&cli, SRP_TYPE_SHA, SRP_CLIENT_SIDE));
|
||||||
|
AssertIntEQ(0, wc_SrpInit(&srv, SRP_TYPE_SHA, SRP_SERVER_SIDE));
|
||||||
|
|
||||||
|
/* invalid call order */
|
||||||
|
AssertIntEQ(SRP_CALL_ORDER_E, wc_SrpComputeKey(&cli,
|
||||||
|
clientPubKey, clientPubKeySz,
|
||||||
|
serverPubKey, serverPubKeySz));
|
||||||
|
|
||||||
|
/* fix call order */
|
||||||
|
AssertIntEQ(0, wc_SrpSetUsername(&cli, username, usernameSz));
|
||||||
|
AssertIntEQ(0, wc_SrpSetUsername(&srv, username, usernameSz));
|
||||||
|
|
||||||
|
AssertIntEQ(0, wc_SrpSetParams(&cli, N, sizeof(N),
|
||||||
|
g, sizeof(g),
|
||||||
|
salt, sizeof(salt)));
|
||||||
|
AssertIntEQ(0, wc_SrpSetParams(&srv, N, sizeof(N),
|
||||||
|
g, sizeof(g),
|
||||||
|
salt, sizeof(salt)));
|
||||||
|
|
||||||
|
AssertIntEQ(0, wc_SrpSetPassword(&cli, password, passwordSz));
|
||||||
|
AssertIntEQ(0, wc_SrpSetVerifier(&srv, verifier, sizeof(verifier)));
|
||||||
|
|
||||||
|
AssertIntEQ(0, wc_SrpSetPrivate(&cli, a, sizeof(a)));
|
||||||
|
AssertIntEQ(0, wc_SrpGetPublic(&cli, clientPubKey, &clientPubKeySz));
|
||||||
|
AssertIntEQ(0, XMEMCMP(clientPubKey, A, clientPubKeySz));
|
||||||
|
AssertIntEQ(0, wc_SrpSetPrivate(&srv, b, sizeof(b)));
|
||||||
|
AssertIntEQ(0, wc_SrpGetPublic(&srv, serverPubKey, &serverPubKeySz));
|
||||||
|
AssertIntEQ(0, XMEMCMP(serverPubKey, B, serverPubKeySz));
|
||||||
|
|
||||||
|
/* invalid params */
|
||||||
|
AssertIntEQ(BAD_FUNC_ARG, wc_SrpComputeKey(NULL,
|
||||||
|
clientPubKey, clientPubKeySz,
|
||||||
|
serverPubKey, serverPubKeySz));
|
||||||
|
AssertIntEQ(BAD_FUNC_ARG, wc_SrpComputeKey(&cli,
|
||||||
|
NULL, clientPubKeySz,
|
||||||
|
serverPubKey, serverPubKeySz));
|
||||||
|
AssertIntEQ(BAD_FUNC_ARG, wc_SrpComputeKey(&cli,
|
||||||
|
clientPubKey, 0,
|
||||||
|
serverPubKey, serverPubKeySz));
|
||||||
|
AssertIntEQ(BAD_FUNC_ARG, wc_SrpComputeKey(&cli,
|
||||||
|
clientPubKey, clientPubKeySz,
|
||||||
|
NULL, serverPubKeySz));
|
||||||
|
AssertIntEQ(BAD_FUNC_ARG, wc_SrpComputeKey(&cli,
|
||||||
|
clientPubKey, clientPubKeySz,
|
||||||
|
serverPubKey, 0));
|
||||||
|
|
||||||
|
/* success */
|
||||||
|
AssertIntEQ(0, wc_SrpComputeKey(&cli, clientPubKey, clientPubKeySz,
|
||||||
|
serverPubKey, serverPubKeySz));
|
||||||
|
AssertIntEQ(0, wc_SrpComputeKey(&srv, clientPubKey, clientPubKeySz,
|
||||||
|
serverPubKey, serverPubKeySz));
|
||||||
|
AssertIntEQ(0, XMEMCMP(cli.key, key, sizeof(key)));
|
||||||
|
AssertIntEQ(0, XMEMCMP(srv.key, key, sizeof(key)));
|
||||||
|
|
||||||
|
wc_SrpTerm(&cli);
|
||||||
|
wc_SrpTerm(&srv);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void test_SrpGetProofAndVerify(void)
|
||||||
|
{
|
||||||
|
Srp cli, srv;
|
||||||
|
byte clientPubKey[64];
|
||||||
|
byte serverPubKey[64];
|
||||||
|
word32 clientPubKeySz = 64;
|
||||||
|
word32 serverPubKeySz = 64;
|
||||||
|
byte clientProof[SRP_MAX_DIGEST_SIZE];
|
||||||
|
byte serverProof[SRP_MAX_DIGEST_SIZE];
|
||||||
|
word32 clientProofSz = SRP_MAX_DIGEST_SIZE;
|
||||||
|
word32 serverProofSz = SRP_MAX_DIGEST_SIZE;
|
||||||
|
|
||||||
|
AssertIntEQ(0, wc_SrpInit(&cli, SRP_TYPE_SHA, SRP_CLIENT_SIDE));
|
||||||
|
AssertIntEQ(0, wc_SrpInit(&srv, SRP_TYPE_SHA, SRP_SERVER_SIDE));
|
||||||
|
|
||||||
|
AssertIntEQ(0, wc_SrpSetUsername(&cli, username, usernameSz));
|
||||||
|
AssertIntEQ(0, wc_SrpSetUsername(&srv, username, usernameSz));
|
||||||
|
|
||||||
|
AssertIntEQ(0, wc_SrpSetParams(&cli, N, sizeof(N),
|
||||||
|
g, sizeof(g),
|
||||||
|
salt, sizeof(salt)));
|
||||||
|
AssertIntEQ(0, wc_SrpSetParams(&srv, N, sizeof(N),
|
||||||
|
g, sizeof(g),
|
||||||
|
salt, sizeof(salt)));
|
||||||
|
|
||||||
|
AssertIntEQ(0, wc_SrpSetPassword(&cli, password, passwordSz));
|
||||||
|
AssertIntEQ(0, wc_SrpSetVerifier(&srv, verifier, sizeof(verifier)));
|
||||||
|
|
||||||
|
AssertIntEQ(0, wc_SrpSetPrivate(&cli, a, sizeof(a)));
|
||||||
|
AssertIntEQ(0, wc_SrpGetPublic(&cli, clientPubKey, &clientPubKeySz));
|
||||||
|
AssertIntEQ(0, XMEMCMP(clientPubKey, A, clientPubKeySz));
|
||||||
|
|
||||||
|
AssertIntEQ(0, wc_SrpSetPrivate(&srv, b, sizeof(b)));
|
||||||
|
AssertIntEQ(0, wc_SrpGetPublic(&srv, serverPubKey, &serverPubKeySz));
|
||||||
|
AssertIntEQ(0, XMEMCMP(serverPubKey, B, serverPubKeySz));
|
||||||
|
|
||||||
|
AssertIntEQ(0, wc_SrpComputeKey(&cli, clientPubKey, clientPubKeySz,
|
||||||
|
serverPubKey, serverPubKeySz));
|
||||||
|
AssertIntEQ(0, XMEMCMP(cli.key, key, sizeof(key)));
|
||||||
|
|
||||||
|
AssertIntEQ(0, wc_SrpComputeKey(&srv, clientPubKey, clientPubKeySz,
|
||||||
|
serverPubKey, serverPubKeySz));
|
||||||
|
AssertIntEQ(0, XMEMCMP(srv.key, key, sizeof(key)));
|
||||||
|
|
||||||
|
/* invalid params */
|
||||||
|
serverProofSz = 0;
|
||||||
|
AssertIntEQ(BAD_FUNC_ARG, wc_SrpGetProof(NULL, clientProof,&clientProofSz));
|
||||||
|
AssertIntEQ(BAD_FUNC_ARG, wc_SrpGetProof(&cli, NULL, &clientProofSz));
|
||||||
|
AssertIntEQ(BAD_FUNC_ARG, wc_SrpGetProof(&cli, clientProof,NULL));
|
||||||
|
AssertIntEQ(BUFFER_E, wc_SrpGetProof(&srv, serverProof,&serverProofSz));
|
||||||
|
|
||||||
|
AssertIntEQ(BAD_FUNC_ARG,
|
||||||
|
wc_SrpVerifyPeersProof(NULL, clientProof, clientProofSz));
|
||||||
|
AssertIntEQ(BAD_FUNC_ARG,
|
||||||
|
wc_SrpVerifyPeersProof(&cli, NULL, clientProofSz));
|
||||||
|
AssertIntEQ(BUFFER_E,
|
||||||
|
wc_SrpVerifyPeersProof(&srv, serverProof, serverProofSz));
|
||||||
|
serverProofSz = SRP_MAX_DIGEST_SIZE;
|
||||||
|
|
||||||
|
/* success */
|
||||||
|
AssertIntEQ(0, wc_SrpGetProof(&cli, clientProof, &clientProofSz));
|
||||||
|
AssertIntEQ(0, XMEMCMP(clientProof, client_proof, sizeof(client_proof)));
|
||||||
|
AssertIntEQ(0, wc_SrpVerifyPeersProof(&srv, clientProof, clientProofSz));
|
||||||
|
AssertIntEQ(0, wc_SrpGetProof(&srv, serverProof, &serverProofSz));
|
||||||
|
AssertIntEQ(0, XMEMCMP(serverProof, server_proof, sizeof(server_proof)));
|
||||||
|
AssertIntEQ(0, wc_SrpVerifyPeersProof(&cli, serverProof, serverProofSz));
|
||||||
|
|
||||||
|
wc_SrpTerm(&cli);
|
||||||
|
wc_SrpTerm(&srv);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int sha512_key_gen(Srp* srp, byte* secret, word32 size)
|
||||||
|
{
|
||||||
|
Sha512 hash;
|
||||||
|
int r;
|
||||||
|
|
||||||
|
srp->key = (byte*)XMALLOC(SHA512_DIGEST_SIZE, NULL, DYNAMIC_TYPE_SRP);
|
||||||
|
if (srp->key == NULL)
|
||||||
|
return MEMORY_E;
|
||||||
|
|
||||||
|
srp->keySz = SHA512_DIGEST_SIZE;
|
||||||
|
|
||||||
|
r = wc_InitSha512(&hash);
|
||||||
|
if (!r) r = wc_Sha512Update(&hash, secret, size);
|
||||||
|
if (!r) r = wc_Sha512Final(&hash, srp->key);
|
||||||
|
|
||||||
|
XMEMSET(&hash, 0, sizeof(Sha512));
|
||||||
|
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void test_SrpKeyGenFunc_cb(void)
|
||||||
|
{
|
||||||
|
Srp cli, srv;
|
||||||
|
byte clientPubKey[1024];
|
||||||
|
byte serverPubKey[1024];
|
||||||
|
word32 clientPubKeySz = 1024;
|
||||||
|
word32 serverPubKeySz = 1024;
|
||||||
|
byte clientProof[SRP_MAX_DIGEST_SIZE];
|
||||||
|
byte serverProof[SRP_MAX_DIGEST_SIZE];
|
||||||
|
word32 clientProofSz = SRP_MAX_DIGEST_SIZE;
|
||||||
|
word32 serverProofSz = SRP_MAX_DIGEST_SIZE;
|
||||||
|
|
||||||
|
byte username_[] = "alice";
|
||||||
|
word32 usernameSz_ = 5;
|
||||||
|
|
||||||
|
byte password_[] = "password123";
|
||||||
|
word32 passwordSz_ = 11;
|
||||||
|
|
||||||
|
byte N_[] = {
|
||||||
|
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC9, 0x0F, 0xDA, 0xA2,
|
||||||
|
0x21, 0x68, 0xC2, 0x34, 0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1,
|
||||||
|
0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74, 0x02, 0x0B, 0xBE, 0xA6,
|
||||||
|
0x3B, 0x13, 0x9B, 0x22, 0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD,
|
||||||
|
0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B, 0x30, 0x2B, 0x0A, 0x6D,
|
||||||
|
0xF2, 0x5F, 0x14, 0x37, 0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45,
|
||||||
|
0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6, 0xF4, 0x4C, 0x42, 0xE9,
|
||||||
|
0xA6, 0x37, 0xED, 0x6B, 0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED,
|
||||||
|
0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5, 0xAE, 0x9F, 0x24, 0x11,
|
||||||
|
0x7C, 0x4B, 0x1F, 0xE6, 0x49, 0x28, 0x66, 0x51, 0xEC, 0xE4, 0x5B, 0x3D,
|
||||||
|
0xC2, 0x00, 0x7C, 0xB8, 0xA1, 0x63, 0xBF, 0x05, 0x98, 0xDA, 0x48, 0x36,
|
||||||
|
0x1C, 0x55, 0xD3, 0x9A, 0x69, 0x16, 0x3F, 0xA8, 0xFD, 0x24, 0xCF, 0x5F,
|
||||||
|
0x83, 0x65, 0x5D, 0x23, 0xDC, 0xA3, 0xAD, 0x96, 0x1C, 0x62, 0xF3, 0x56,
|
||||||
|
0x20, 0x85, 0x52, 0xBB, 0x9E, 0xD5, 0x29, 0x07, 0x70, 0x96, 0x96, 0x6D,
|
||||||
|
0x67, 0x0C, 0x35, 0x4E, 0x4A, 0xBC, 0x98, 0x04, 0xF1, 0x74, 0x6C, 0x08,
|
||||||
|
0xCA, 0x18, 0x21, 0x7C, 0x32, 0x90, 0x5E, 0x46, 0x2E, 0x36, 0xCE, 0x3B,
|
||||||
|
0xE3, 0x9E, 0x77, 0x2C, 0x18, 0x0E, 0x86, 0x03, 0x9B, 0x27, 0x83, 0xA2,
|
||||||
|
0xEC, 0x07, 0xA2, 0x8F, 0xB5, 0xC5, 0x5D, 0xF0, 0x6F, 0x4C, 0x52, 0xC9,
|
||||||
|
0xDE, 0x2B, 0xCB, 0xF6, 0x95, 0x58, 0x17, 0x18, 0x39, 0x95, 0x49, 0x7C,
|
||||||
|
0xEA, 0x95, 0x6A, 0xE5, 0x15, 0xD2, 0x26, 0x18, 0x98, 0xFA, 0x05, 0x10,
|
||||||
|
0x15, 0x72, 0x8E, 0x5A, 0x8A, 0xAA, 0xC4, 0x2D, 0xAD, 0x33, 0x17, 0x0D,
|
||||||
|
0x04, 0x50, 0x7A, 0x33, 0xA8, 0x55, 0x21, 0xAB, 0xDF, 0x1C, 0xBA, 0x64,
|
||||||
|
0xEC, 0xFB, 0x85, 0x04, 0x58, 0xDB, 0xEF, 0x0A, 0x8A, 0xEA, 0x71, 0x57,
|
||||||
|
0x5D, 0x06, 0x0C, 0x7D, 0xB3, 0x97, 0x0F, 0x85, 0xA6, 0xE1, 0xE4, 0xC7,
|
||||||
|
0xAB, 0xF5, 0xAE, 0x8C, 0xDB, 0x09, 0x33, 0xD7, 0x1E, 0x8C, 0x94, 0xE0,
|
||||||
|
0x4A, 0x25, 0x61, 0x9D, 0xCE, 0xE3, 0xD2, 0x26, 0x1A, 0xD2, 0xEE, 0x6B,
|
||||||
|
0xF1, 0x2F, 0xFA, 0x06, 0xD9, 0x8A, 0x08, 0x64, 0xD8, 0x76, 0x02, 0x73,
|
||||||
|
0x3E, 0xC8, 0x6A, 0x64, 0x52, 0x1F, 0x2B, 0x18, 0x17, 0x7B, 0x20, 0x0C,
|
||||||
|
0xBB, 0xE1, 0x17, 0x57, 0x7A, 0x61, 0x5D, 0x6C, 0x77, 0x09, 0x88, 0xC0,
|
||||||
|
0xBA, 0xD9, 0x46, 0xE2, 0x08, 0xE2, 0x4F, 0xA0, 0x74, 0xE5, 0xAB, 0x31,
|
||||||
|
0x43, 0xDB, 0x5B, 0xFC, 0xE0, 0xFD, 0x10, 0x8E, 0x4B, 0x82, 0xD1, 0x20,
|
||||||
|
0xA9, 0x3A, 0xD2, 0xCA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
|
||||||
|
};
|
||||||
|
|
||||||
|
byte g_[] = {
|
||||||
|
0x05
|
||||||
|
};
|
||||||
|
|
||||||
|
byte salt_[] = {
|
||||||
|
0xBE, 0xB2, 0x53, 0x79, 0xD1, 0xA8, 0x58, 0x1E, 0xB5, 0xA7, 0x27, 0x67,
|
||||||
|
0x3A, 0x24, 0x41, 0xEE
|
||||||
|
};
|
||||||
|
|
||||||
|
byte verifier_[] = {
|
||||||
|
0x9B, 0x5E, 0x06, 0x17, 0x01, 0xEA, 0x7A, 0xEB, 0x39, 0xCF, 0x6E, 0x35,
|
||||||
|
0x19, 0x65, 0x5A, 0x85, 0x3C, 0xF9, 0x4C, 0x75, 0xCA, 0xF2, 0x55, 0x5E,
|
||||||
|
0xF1, 0xFA, 0xF7, 0x59, 0xBB, 0x79, 0xCB, 0x47, 0x70, 0x14, 0xE0, 0x4A,
|
||||||
|
0x88, 0xD6, 0x8F, 0xFC, 0x05, 0x32, 0x38, 0x91, 0xD4, 0xC2, 0x05, 0xB8,
|
||||||
|
0xDE, 0x81, 0xC2, 0xF2, 0x03, 0xD8, 0xFA, 0xD1, 0xB2, 0x4D, 0x2C, 0x10,
|
||||||
|
0x97, 0x37, 0xF1, 0xBE, 0xBB, 0xD7, 0x1F, 0x91, 0x24, 0x47, 0xC4, 0xA0,
|
||||||
|
0x3C, 0x26, 0xB9, 0xFA, 0xD8, 0xED, 0xB3, 0xE7, 0x80, 0x77, 0x8E, 0x30,
|
||||||
|
0x25, 0x29, 0xED, 0x1E, 0xE1, 0x38, 0xCC, 0xFC, 0x36, 0xD4, 0xBA, 0x31,
|
||||||
|
0x3C, 0xC4, 0x8B, 0x14, 0xEA, 0x8C, 0x22, 0xA0, 0x18, 0x6B, 0x22, 0x2E,
|
||||||
|
0x65, 0x5F, 0x2D, 0xF5, 0x60, 0x3F, 0xD7, 0x5D, 0xF7, 0x6B, 0x3B, 0x08,
|
||||||
|
0xFF, 0x89, 0x50, 0x06, 0x9A, 0xDD, 0x03, 0xA7, 0x54, 0xEE, 0x4A, 0xE8,
|
||||||
|
0x85, 0x87, 0xCC, 0xE1, 0xBF, 0xDE, 0x36, 0x79, 0x4D, 0xBA, 0xE4, 0x59,
|
||||||
|
0x2B, 0x7B, 0x90, 0x4F, 0x44, 0x2B, 0x04, 0x1C, 0xB1, 0x7A, 0xEB, 0xAD,
|
||||||
|
0x1E, 0x3A, 0xEB, 0xE3, 0xCB, 0xE9, 0x9D, 0xE6, 0x5F, 0x4B, 0xB1, 0xFA,
|
||||||
|
0x00, 0xB0, 0xE7, 0xAF, 0x06, 0x86, 0x3D, 0xB5, 0x3B, 0x02, 0x25, 0x4E,
|
||||||
|
0xC6, 0x6E, 0x78, 0x1E, 0x3B, 0x62, 0xA8, 0x21, 0x2C, 0x86, 0xBE, 0xB0,
|
||||||
|
0xD5, 0x0B, 0x5B, 0xA6, 0xD0, 0xB4, 0x78, 0xD8, 0xC4, 0xE9, 0xBB, 0xCE,
|
||||||
|
0xC2, 0x17, 0x65, 0x32, 0x6F, 0xBD, 0x14, 0x05, 0x8D, 0x2B, 0xBD, 0xE2,
|
||||||
|
0xC3, 0x30, 0x45, 0xF0, 0x38, 0x73, 0xE5, 0x39, 0x48, 0xD7, 0x8B, 0x79,
|
||||||
|
0x4F, 0x07, 0x90, 0xE4, 0x8C, 0x36, 0xAE, 0xD6, 0xE8, 0x80, 0xF5, 0x57,
|
||||||
|
0x42, 0x7B, 0x2F, 0xC0, 0x6D, 0xB5, 0xE1, 0xE2, 0xE1, 0xD7, 0xE6, 0x61,
|
||||||
|
0xAC, 0x48, 0x2D, 0x18, 0xE5, 0x28, 0xD7, 0x29, 0x5E, 0xF7, 0x43, 0x72,
|
||||||
|
0x95, 0xFF, 0x1A, 0x72, 0xD4, 0x02, 0x77, 0x17, 0x13, 0xF1, 0x68, 0x76,
|
||||||
|
0xDD, 0x05, 0x0A, 0xE5, 0xB7, 0xAD, 0x53, 0xCC, 0xB9, 0x08, 0x55, 0xC9,
|
||||||
|
0x39, 0x56, 0x64, 0x83, 0x58, 0xAD, 0xFD, 0x96, 0x64, 0x22, 0xF5, 0x24,
|
||||||
|
0x98, 0x73, 0x2D, 0x68, 0xD1, 0xD7, 0xFB, 0xEF, 0x10, 0xD7, 0x80, 0x34,
|
||||||
|
0xAB, 0x8D, 0xCB, 0x6F, 0x0F, 0xCF, 0x88, 0x5C, 0xC2, 0xB2, 0xEA, 0x2C,
|
||||||
|
0x3E, 0x6A, 0xC8, 0x66, 0x09, 0xEA, 0x05, 0x8A, 0x9D, 0xA8, 0xCC, 0x63,
|
||||||
|
0x53, 0x1D, 0xC9, 0x15, 0x41, 0x4D, 0xF5, 0x68, 0xB0, 0x94, 0x82, 0xDD,
|
||||||
|
0xAC, 0x19, 0x54, 0xDE, 0xC7, 0xEB, 0x71, 0x4F, 0x6F, 0xF7, 0xD4, 0x4C,
|
||||||
|
0xD5, 0xB8, 0x6F, 0x6B, 0xD1, 0x15, 0x81, 0x09, 0x30, 0x63, 0x7C, 0x01,
|
||||||
|
0xD0, 0xF6, 0x01, 0x3B, 0xC9, 0x74, 0x0F, 0xA2, 0xC6, 0x33, 0xBA, 0x89
|
||||||
|
};
|
||||||
|
|
||||||
|
byte a_[] = {
|
||||||
|
0x60, 0x97, 0x55, 0x27, 0x03, 0x5C, 0xF2, 0xAD, 0x19, 0x89, 0x80, 0x6F,
|
||||||
|
0x04, 0x07, 0x21, 0x0B, 0xC8, 0x1E, 0xDC, 0x04, 0xE2, 0x76, 0x2A, 0x56,
|
||||||
|
0xAF, 0xD5, 0x29, 0xDD, 0xDA, 0x2D, 0x43, 0x93
|
||||||
|
};
|
||||||
|
|
||||||
|
byte A_[] = {
|
||||||
|
0xFA, 0xB6, 0xF5, 0xD2, 0x61, 0x5D, 0x1E, 0x32, 0x35, 0x12, 0xE7, 0x99,
|
||||||
|
0x1C, 0xC3, 0x74, 0x43, 0xF4, 0x87, 0xDA, 0x60, 0x4C, 0xA8, 0xC9, 0x23,
|
||||||
|
0x0F, 0xCB, 0x04, 0xE5, 0x41, 0xDC, 0xE6, 0x28, 0x0B, 0x27, 0xCA, 0x46,
|
||||||
|
0x80, 0xB0, 0x37, 0x4F, 0x17, 0x9D, 0xC3, 0xBD, 0xC7, 0x55, 0x3F, 0xE6,
|
||||||
|
0x24, 0x59, 0x79, 0x8C, 0x70, 0x1A, 0xD8, 0x64, 0xA9, 0x13, 0x90, 0xA2,
|
||||||
|
0x8C, 0x93, 0xB6, 0x44, 0xAD, 0xBF, 0x9C, 0x00, 0x74, 0x5B, 0x94, 0x2B,
|
||||||
|
0x79, 0xF9, 0x01, 0x2A, 0x21, 0xB9, 0xB7, 0x87, 0x82, 0x31, 0x9D, 0x83,
|
||||||
|
0xA1, 0xF8, 0x36, 0x28, 0x66, 0xFB, 0xD6, 0xF4, 0x6B, 0xFC, 0x0D, 0xDB,
|
||||||
|
0x2E, 0x1A, 0xB6, 0xE4, 0xB4, 0x5A, 0x99, 0x06, 0xB8, 0x2E, 0x37, 0xF0,
|
||||||
|
0x5D, 0x6F, 0x97, 0xF6, 0xA3, 0xEB, 0x6E, 0x18, 0x20, 0x79, 0x75, 0x9C,
|
||||||
|
0x4F, 0x68, 0x47, 0x83, 0x7B, 0x62, 0x32, 0x1A, 0xC1, 0xB4, 0xFA, 0x68,
|
||||||
|
0x64, 0x1F, 0xCB, 0x4B, 0xB9, 0x8D, 0xD6, 0x97, 0xA0, 0xC7, 0x36, 0x41,
|
||||||
|
0x38, 0x5F, 0x4B, 0xAB, 0x25, 0xB7, 0x93, 0x58, 0x4C, 0xC3, 0x9F, 0xC8,
|
||||||
|
0xD4, 0x8D, 0x4B, 0xD8, 0x67, 0xA9, 0xA3, 0xC1, 0x0F, 0x8E, 0xA1, 0x21,
|
||||||
|
0x70, 0x26, 0x8E, 0x34, 0xFE, 0x3B, 0xBE, 0x6F, 0xF8, 0x99, 0x98, 0xD6,
|
||||||
|
0x0D, 0xA2, 0xF3, 0xE4, 0x28, 0x3C, 0xBE, 0xC1, 0x39, 0x3D, 0x52, 0xAF,
|
||||||
|
0x72, 0x4A, 0x57, 0x23, 0x0C, 0x60, 0x4E, 0x9F, 0xBC, 0xE5, 0x83, 0xD7,
|
||||||
|
0x61, 0x3E, 0x6B, 0xFF, 0xD6, 0x75, 0x96, 0xAD, 0x12, 0x1A, 0x87, 0x07,
|
||||||
|
0xEE, 0xC4, 0x69, 0x44, 0x95, 0x70, 0x33, 0x68, 0x6A, 0x15, 0x5F, 0x64,
|
||||||
|
0x4D, 0x5C, 0x58, 0x63, 0xB4, 0x8F, 0x61, 0xBD, 0xBF, 0x19, 0xA5, 0x3E,
|
||||||
|
0xAB, 0x6D, 0xAD, 0x0A, 0x18, 0x6B, 0x8C, 0x15, 0x2E, 0x5F, 0x5D, 0x8C,
|
||||||
|
0xAD, 0x4B, 0x0E, 0xF8, 0xAA, 0x4E, 0xA5, 0x00, 0x88, 0x34, 0xC3, 0xCD,
|
||||||
|
0x34, 0x2E, 0x5E, 0x0F, 0x16, 0x7A, 0xD0, 0x45, 0x92, 0xCD, 0x8B, 0xD2,
|
||||||
|
0x79, 0x63, 0x93, 0x98, 0xEF, 0x9E, 0x11, 0x4D, 0xFA, 0xAA, 0xB9, 0x19,
|
||||||
|
0xE1, 0x4E, 0x85, 0x09, 0x89, 0x22, 0x4D, 0xDD, 0x98, 0x57, 0x6D, 0x79,
|
||||||
|
0x38, 0x5D, 0x22, 0x10, 0x90, 0x2E, 0x9F, 0x9B, 0x1F, 0x2D, 0x86, 0xCF,
|
||||||
|
0xA4, 0x7E, 0xE2, 0x44, 0x63, 0x54, 0x65, 0xF7, 0x10, 0x58, 0x42, 0x1A,
|
||||||
|
0x01, 0x84, 0xBE, 0x51, 0xDD, 0x10, 0xCC, 0x9D, 0x07, 0x9E, 0x6F, 0x16,
|
||||||
|
0x04, 0xE7, 0xAA, 0x9B, 0x7C, 0xF7, 0x88, 0x3C, 0x7D, 0x4C, 0xE1, 0x2B,
|
||||||
|
0x06, 0xEB, 0xE1, 0x60, 0x81, 0xE2, 0x3F, 0x27, 0xA2, 0x31, 0xD1, 0x84,
|
||||||
|
0x32, 0xD7, 0xD1, 0xBB, 0x55, 0xC2, 0x8A, 0xE2, 0x1F, 0xFC, 0xF0, 0x05,
|
||||||
|
0xF5, 0x75, 0x28, 0xD1, 0x5A, 0x88, 0x88, 0x1B, 0xB3, 0xBB, 0xB7, 0xFE
|
||||||
|
};
|
||||||
|
|
||||||
|
byte b_[] = {
|
||||||
|
0xE4, 0x87, 0xCB, 0x59, 0xD3, 0x1A, 0xC5, 0x50, 0x47, 0x1E, 0x81, 0xF0,
|
||||||
|
0x0F, 0x69, 0x28, 0xE0, 0x1D, 0xDA, 0x08, 0xE9, 0x74, 0xA0, 0x04, 0xF4,
|
||||||
|
0x9E, 0x61, 0xF5, 0xD1, 0x05, 0x28, 0x4D, 0x20
|
||||||
|
};
|
||||||
|
|
||||||
|
byte B_[] = {
|
||||||
|
0x40, 0xF5, 0x70, 0x88, 0xA4, 0x82, 0xD4, 0xC7, 0x73, 0x33, 0x84, 0xFE,
|
||||||
|
0x0D, 0x30, 0x1F, 0xDD, 0xCA, 0x90, 0x80, 0xAD, 0x7D, 0x4F, 0x6F, 0xDF,
|
||||||
|
0x09, 0xA0, 0x10, 0x06, 0xC3, 0xCB, 0x6D, 0x56, 0x2E, 0x41, 0x63, 0x9A,
|
||||||
|
0xE8, 0xFA, 0x21, 0xDE, 0x3B, 0x5D, 0xBA, 0x75, 0x85, 0xB2, 0x75, 0x58,
|
||||||
|
0x9B, 0xDB, 0x27, 0x98, 0x63, 0xC5, 0x62, 0x80, 0x7B, 0x2B, 0x99, 0x08,
|
||||||
|
0x3C, 0xD1, 0x42, 0x9C, 0xDB, 0xE8, 0x9E, 0x25, 0xBF, 0xBD, 0x7E, 0x3C,
|
||||||
|
0xAD, 0x31, 0x73, 0xB2, 0xE3, 0xC5, 0xA0, 0xB1, 0x74, 0xDA, 0x6D, 0x53,
|
||||||
|
0x91, 0xE6, 0xA0, 0x6E, 0x46, 0x5F, 0x03, 0x7A, 0x40, 0x06, 0x25, 0x48,
|
||||||
|
0x39, 0xA5, 0x6B, 0xF7, 0x6D, 0xA8, 0x4B, 0x1C, 0x94, 0xE0, 0xAE, 0x20,
|
||||||
|
0x85, 0x76, 0x15, 0x6F, 0xE5, 0xC1, 0x40, 0xA4, 0xBA, 0x4F, 0xFC, 0x9E,
|
||||||
|
0x38, 0xC3, 0xB0, 0x7B, 0x88, 0x84, 0x5F, 0xC6, 0xF7, 0xDD, 0xDA, 0x93,
|
||||||
|
0x38, 0x1F, 0xE0, 0xCA, 0x60, 0x84, 0xC4, 0xCD, 0x2D, 0x33, 0x6E, 0x54,
|
||||||
|
0x51, 0xC4, 0x64, 0xCC, 0xB6, 0xEC, 0x65, 0xE7, 0xD1, 0x6E, 0x54, 0x8A,
|
||||||
|
0x27, 0x3E, 0x82, 0x62, 0x84, 0xAF, 0x25, 0x59, 0xB6, 0x26, 0x42, 0x74,
|
||||||
|
0x21, 0x59, 0x60, 0xFF, 0xF4, 0x7B, 0xDD, 0x63, 0xD3, 0xAF, 0xF0, 0x64,
|
||||||
|
0xD6, 0x13, 0x7A, 0xF7, 0x69, 0x66, 0x1C, 0x9D, 0x4F, 0xEE, 0x47, 0x38,
|
||||||
|
0x26, 0x03, 0xC8, 0x8E, 0xAA, 0x09, 0x80, 0x58, 0x1D, 0x07, 0x75, 0x84,
|
||||||
|
0x61, 0xB7, 0x77, 0xE4, 0x35, 0x6D, 0xDA, 0x58, 0x35, 0x19, 0x8B, 0x51,
|
||||||
|
0xFE, 0xEA, 0x30, 0x8D, 0x70, 0xF7, 0x54, 0x50, 0xB7, 0x16, 0x75, 0xC0,
|
||||||
|
0x8C, 0x7D, 0x83, 0x02, 0xFD, 0x75, 0x39, 0xDD, 0x1F, 0xF2, 0xA1, 0x1C,
|
||||||
|
0xB4, 0x25, 0x8A, 0xA7, 0x0D, 0x23, 0x44, 0x36, 0xAA, 0x42, 0xB6, 0xA0,
|
||||||
|
0x61, 0x5F, 0x3F, 0x91, 0x5D, 0x55, 0xCC, 0x3B, 0x96, 0x6B, 0x27, 0x16,
|
||||||
|
0xB3, 0x6E, 0x4D, 0x1A, 0x06, 0xCE, 0x5E, 0x5D, 0x2E, 0xA3, 0xBE, 0xE5,
|
||||||
|
0xA1, 0x27, 0x0E, 0x87, 0x51, 0xDA, 0x45, 0xB6, 0x0B, 0x99, 0x7B, 0x0F,
|
||||||
|
0xFD, 0xB0, 0xF9, 0x96, 0x2F, 0xEE, 0x4F, 0x03, 0xBE, 0xE7, 0x80, 0xBA,
|
||||||
|
0x0A, 0x84, 0x5B, 0x1D, 0x92, 0x71, 0x42, 0x17, 0x83, 0xAE, 0x66, 0x01,
|
||||||
|
0xA6, 0x1E, 0xA2, 0xE3, 0x42, 0xE4, 0xF2, 0xE8, 0xBC, 0x93, 0x5A, 0x40,
|
||||||
|
0x9E, 0xAD, 0x19, 0xF2, 0x21, 0xBD, 0x1B, 0x74, 0xE2, 0x96, 0x4D, 0xD1,
|
||||||
|
0x9F, 0xC8, 0x45, 0xF6, 0x0E, 0xFC, 0x09, 0x33, 0x8B, 0x60, 0xB6, 0xB2,
|
||||||
|
0x56, 0xD8, 0xCA, 0xC8, 0x89, 0xCC, 0xA3, 0x06, 0xCC, 0x37, 0x0A, 0x0B,
|
||||||
|
0x18, 0xC8, 0xB8, 0x86, 0xE9, 0x5D, 0xA0, 0xAF, 0x52, 0x35, 0xFE, 0xF4,
|
||||||
|
0x39, 0x30, 0x20, 0xD2, 0xB7, 0xF3, 0x05, 0x69, 0x04, 0x75, 0x90, 0x42
|
||||||
|
};
|
||||||
|
|
||||||
|
byte key_[] = {
|
||||||
|
0x5C, 0xBC, 0x21, 0x9D, 0xB0, 0x52, 0x13, 0x8E, 0xE1, 0x14, 0x8C, 0x71,
|
||||||
|
0xCD, 0x44, 0x98, 0x96, 0x3D, 0x68, 0x25, 0x49, 0xCE, 0x91, 0xCA, 0x24,
|
||||||
|
0xF0, 0x98, 0x46, 0x8F, 0x06, 0x01, 0x5B, 0xEB, 0x6A, 0xF2, 0x45, 0xC2,
|
||||||
|
0x09, 0x3F, 0x98, 0xC3, 0x65, 0x1B, 0xCA, 0x83, 0xAB, 0x8C, 0xAB, 0x2B,
|
||||||
|
0x58, 0x0B, 0xBF, 0x02, 0x18, 0x4F, 0xEF, 0xDF, 0x26, 0x14, 0x2F, 0x73,
|
||||||
|
0xDF, 0x95, 0xAC, 0x50
|
||||||
|
};
|
||||||
|
|
||||||
|
AssertIntEQ(0, wc_SrpInit(&cli, SRP_TYPE_SHA512, SRP_CLIENT_SIDE));
|
||||||
|
AssertIntEQ(0, wc_SrpInit(&srv, SRP_TYPE_SHA512, SRP_SERVER_SIDE));
|
||||||
|
|
||||||
|
AssertIntEQ(0, wc_SrpSetUsername(&cli, username_, usernameSz_));
|
||||||
|
AssertIntEQ(0, wc_SrpSetUsername(&srv, username_, usernameSz_));
|
||||||
|
|
||||||
|
AssertIntEQ(0, wc_SrpSetParams(&cli, N_, sizeof(N_),
|
||||||
|
g_, sizeof(g_),
|
||||||
|
salt_, sizeof(salt_)));
|
||||||
|
AssertIntEQ(0, wc_SrpSetParams(&srv, N_, sizeof(N_),
|
||||||
|
g_, sizeof(g_),
|
||||||
|
salt_, sizeof(salt_)));
|
||||||
|
|
||||||
|
AssertIntEQ(0, wc_SrpSetPassword(&cli, password_, passwordSz_));
|
||||||
|
AssertIntEQ(0, wc_SrpSetVerifier(&srv, verifier_, sizeof(verifier_)));
|
||||||
|
|
||||||
|
AssertIntEQ(0, wc_SrpSetPrivate(&cli, a_, sizeof(a_)));
|
||||||
|
AssertIntEQ(0, wc_SrpGetPublic(&cli, clientPubKey, &clientPubKeySz));
|
||||||
|
AssertIntEQ(0, XMEMCMP(clientPubKey, A_, clientPubKeySz));
|
||||||
|
|
||||||
|
AssertIntEQ(0, wc_SrpSetPrivate(&srv, b_, sizeof(b_)));
|
||||||
|
AssertIntEQ(0, wc_SrpGetPublic(&srv, serverPubKey, &serverPubKeySz));
|
||||||
|
AssertIntEQ(0, XMEMCMP(serverPubKey, B_, serverPubKeySz));
|
||||||
|
|
||||||
|
cli.keyGenFunc_cb = sha512_key_gen;
|
||||||
|
AssertIntEQ(0, wc_SrpComputeKey(&cli, clientPubKey, clientPubKeySz,
|
||||||
|
serverPubKey, serverPubKeySz));
|
||||||
|
AssertIntEQ(0, XMEMCMP(cli.key, key_, sizeof(key_)));
|
||||||
|
|
||||||
|
srv.keyGenFunc_cb = sha512_key_gen;
|
||||||
|
AssertIntEQ(0, wc_SrpComputeKey(&srv, clientPubKey, clientPubKeySz,
|
||||||
|
serverPubKey, serverPubKeySz));
|
||||||
|
AssertIntEQ(0, XMEMCMP(srv.key, key_, sizeof(key_)));
|
||||||
|
|
||||||
|
AssertIntEQ(0, wc_SrpGetProof(&cli, clientProof, &clientProofSz));
|
||||||
|
AssertIntEQ(0, wc_SrpVerifyPeersProof(&srv, clientProof, clientProofSz));
|
||||||
|
|
||||||
|
AssertIntEQ(0, wc_SrpGetProof(&srv, serverProof, &serverProofSz));
|
||||||
|
AssertIntEQ(0, wc_SrpVerifyPeersProof(&cli, serverProof, serverProofSz));
|
||||||
|
|
||||||
|
wc_SrpTerm(&cli);
|
||||||
|
wc_SrpTerm(&srv);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void SrpTest(void)
|
||||||
|
{
|
||||||
|
#ifdef WOLFCRYPT_HAVE_SRP
|
||||||
|
test_SrpInit();
|
||||||
|
test_SrpSetUsername();
|
||||||
|
test_SrpSetParams();
|
||||||
|
test_SrpSetPassword();
|
||||||
|
test_SrpGetPublic();
|
||||||
|
test_SrpComputeKey();
|
||||||
|
test_SrpGetProofAndVerify();
|
||||||
|
test_SrpKeyGenFunc_cb();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
@@ -36,7 +36,7 @@
|
|||||||
#define MAX_COMMAND_SZ 240
|
#define MAX_COMMAND_SZ 240
|
||||||
#define MAX_SUITE_SZ 80
|
#define MAX_SUITE_SZ 80
|
||||||
#define NOT_BUILT_IN -123
|
#define NOT_BUILT_IN -123
|
||||||
#ifdef NO_OLD_TLS
|
#if defined(NO_OLD_TLS) || !defined(WOLFSSL_ALLOW_SSLV3)
|
||||||
#define VERSION_TOO_OLD -124
|
#define VERSION_TOO_OLD -124
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -52,6 +52,28 @@ static char flagSep[] = " ";
|
|||||||
static char svrPort[] = "0";
|
static char svrPort[] = "0";
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef WOLFSSL_ALLOW_SSLV3
|
||||||
|
/* if the protocol version is sslv3 return 1, else 0 */
|
||||||
|
static int IsSslVersion(const char* line)
|
||||||
|
{
|
||||||
|
const char* find = "-v ";
|
||||||
|
char* begin = strstr(line, find);
|
||||||
|
|
||||||
|
if (begin) {
|
||||||
|
int version = -1;
|
||||||
|
|
||||||
|
begin += 3;
|
||||||
|
|
||||||
|
version = atoi(begin);
|
||||||
|
|
||||||
|
if (version == 0)
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif /* !WOLFSSL_ALLOW_SSLV3 */
|
||||||
|
|
||||||
#ifdef NO_OLD_TLS
|
#ifdef NO_OLD_TLS
|
||||||
/* if the protocol version is less than tls 1.2 return 1, else 0 */
|
/* if the protocol version is less than tls 1.2 return 1, else 0 */
|
||||||
static int IsOldTlsVersion(const char* line)
|
static int IsOldTlsVersion(const char* line)
|
||||||
@@ -71,7 +93,7 @@ static int IsOldTlsVersion(const char* line)
|
|||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif /* NO_OLD_TLS */
|
#endif /* NO_OLD_TLS */
|
||||||
|
|
||||||
|
|
||||||
@@ -168,6 +190,15 @@ static int execute_test_case(int svr_argc, char** svr_argv,
|
|||||||
return NOT_BUILT_IN;
|
return NOT_BUILT_IN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef WOLFSSL_ALLOW_SSLV3
|
||||||
|
if (IsSslVersion(commandLine) == 1) {
|
||||||
|
#ifdef DEBUG_SUITE_TESTS
|
||||||
|
printf("protocol version on line %s is too old\n", commandLine);
|
||||||
|
#endif
|
||||||
|
return VERSION_TOO_OLD;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef NO_OLD_TLS
|
#ifdef NO_OLD_TLS
|
||||||
if (IsOldTlsVersion(commandLine) == 1) {
|
if (IsOldTlsVersion(commandLine) == 1) {
|
||||||
#ifdef DEBUG_SUITE_TESTS
|
#ifdef DEBUG_SUITE_TESTS
|
||||||
@@ -476,6 +507,17 @@ int SuiteTest(void)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef NO_PSK
|
||||||
|
/* add psk extra suites */
|
||||||
|
strcpy(argv0[1], "tests/test-psk-no-id.conf");
|
||||||
|
printf("starting psk no identity extra cipher suite tests\n");
|
||||||
|
test_harness(&args);
|
||||||
|
if (args.return_code != 0) {
|
||||||
|
printf("error from script %d\n", args.return_code);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
printf(" End Cipher Suite Tests\n");
|
printf(" End Cipher Suite Tests\n");
|
||||||
|
|
||||||
wolfSSL_CTX_free(cipherSuiteCtx);
|
wolfSSL_CTX_free(cipherSuiteCtx);
|
||||||
|
|||||||
154
tests/test-psk-no-id.conf
Normal file
154
tests/test-psk-no-id.conf
Normal file
@@ -0,0 +1,154 @@
|
|||||||
|
# No Hint server TLSv1 PSK-AES128
|
||||||
|
-s
|
||||||
|
-I
|
||||||
|
-v 1
|
||||||
|
-l PSK-AES128-CBC-SHA
|
||||||
|
|
||||||
|
# No Hint client TLSv1 PSK-AES128
|
||||||
|
-s
|
||||||
|
-v 1
|
||||||
|
-l PSK-AES128-CBC-SHA
|
||||||
|
|
||||||
|
# No Hint server TLSv1 PSK-AES256
|
||||||
|
-s
|
||||||
|
-I
|
||||||
|
-v 1
|
||||||
|
-l PSK-AES256-CBC-SHA
|
||||||
|
|
||||||
|
# No Hint client TLSv1 PSK-AES256
|
||||||
|
-s
|
||||||
|
-v 1
|
||||||
|
-l PSK-AES256-CBC-SHA
|
||||||
|
|
||||||
|
# No Hint server TLSv1.1 PSK-AES128
|
||||||
|
-s
|
||||||
|
-I
|
||||||
|
-v 2
|
||||||
|
-l PSK-AES128-CBC-SHA
|
||||||
|
|
||||||
|
# No Hint client TLSv1.1 PSK-AES128
|
||||||
|
-s
|
||||||
|
-v 2
|
||||||
|
-l PSK-AES128-CBC-SHA
|
||||||
|
|
||||||
|
# No Hint server TLSv1.1 PSK-AES256
|
||||||
|
-s
|
||||||
|
-I
|
||||||
|
-v 2
|
||||||
|
-l PSK-AES256-CBC-SHA
|
||||||
|
|
||||||
|
# No Hint client TLSv1.1 PSK-AES256
|
||||||
|
-s
|
||||||
|
-v 2
|
||||||
|
-l PSK-AES256-CBC-SHA
|
||||||
|
|
||||||
|
# No Hint server TLSv1.2 PSK-AES128
|
||||||
|
-s
|
||||||
|
-I
|
||||||
|
-v 3
|
||||||
|
-l PSK-AES128-CBC-SHA
|
||||||
|
|
||||||
|
# No Hint client TLSv1.2 PSK-AES128
|
||||||
|
-s
|
||||||
|
-v 3
|
||||||
|
-l PSK-AES128-CBC-SHA
|
||||||
|
|
||||||
|
# No Hint server TLSv1.2 PSK-AES256
|
||||||
|
-s
|
||||||
|
-I
|
||||||
|
-v 3
|
||||||
|
-l PSK-AES256-CBC-SHA
|
||||||
|
|
||||||
|
# No Hint client TLSv1.2 PSK-AES256
|
||||||
|
-s
|
||||||
|
-v 3
|
||||||
|
-l PSK-AES256-CBC-SHA
|
||||||
|
|
||||||
|
# No Hint server TLSv1.0 PSK-AES128-SHA256
|
||||||
|
-s
|
||||||
|
-I
|
||||||
|
-v 1
|
||||||
|
-l PSK-AES128-CBC-SHA256
|
||||||
|
|
||||||
|
# No Hint client TLSv1.0 PSK-AES128-SHA256
|
||||||
|
-s
|
||||||
|
-v 1
|
||||||
|
-l PSK-AES128-CBC-SHA256
|
||||||
|
|
||||||
|
# No Hint server TLSv1.1 PSK-AES128-SHA256
|
||||||
|
-s
|
||||||
|
-I
|
||||||
|
-v 2
|
||||||
|
-l PSK-AES128-CBC-SHA256
|
||||||
|
|
||||||
|
# No Hint client TLSv1.1 PSK-AES128-SHA256
|
||||||
|
-s
|
||||||
|
-v 2
|
||||||
|
-l PSK-AES128-CBC-SHA256
|
||||||
|
|
||||||
|
# No Hint server TLSv1.2 PSK-AES128-SHA256
|
||||||
|
-s
|
||||||
|
-I
|
||||||
|
-v 3
|
||||||
|
-l PSK-AES128-CBC-SHA256
|
||||||
|
|
||||||
|
# No Hint client TLSv1.2 PSK-AES128-SHA256
|
||||||
|
-s
|
||||||
|
-v 3
|
||||||
|
-l PSK-AES128-CBC-SHA256
|
||||||
|
|
||||||
|
# No Hint server TLSv1.0 PSK-AES256-SHA384
|
||||||
|
-s
|
||||||
|
-I
|
||||||
|
-v 1
|
||||||
|
-l PSK-AES256-CBC-SHA384
|
||||||
|
|
||||||
|
# No Hint client TLSv1.0 PSK-AES256-SHA384
|
||||||
|
-s
|
||||||
|
-v 1
|
||||||
|
-l PSK-AES256-CBC-SHA384
|
||||||
|
|
||||||
|
# No Hint server TLSv1.1 PSK-AES256-SHA384
|
||||||
|
-s
|
||||||
|
-I
|
||||||
|
-v 2
|
||||||
|
-l PSK-AES256-CBC-SHA384
|
||||||
|
|
||||||
|
# No Hint client TLSv1.1 PSK-AES256-SHA384
|
||||||
|
-s
|
||||||
|
-v 2
|
||||||
|
-l PSK-AES256-CBC-SHA384
|
||||||
|
|
||||||
|
# No Hint server TLSv1.2 PSK-AES256-SHA384
|
||||||
|
-s
|
||||||
|
-I
|
||||||
|
-v 3
|
||||||
|
-l PSK-AES256-CBC-SHA384
|
||||||
|
|
||||||
|
# No Hint client TLSv1.2 PSK-AES256-SHA384
|
||||||
|
-s
|
||||||
|
-v 3
|
||||||
|
-l PSK-AES256-CBC-SHA384
|
||||||
|
|
||||||
|
# server TLSv1.2 PSK-AES128-GCM-SHA256
|
||||||
|
-s
|
||||||
|
-I
|
||||||
|
-v 3
|
||||||
|
-l PSK-AES128-GCM-SHA256
|
||||||
|
|
||||||
|
# client TLSv1.2 PSK-AES128-GCM-SHA256
|
||||||
|
-s
|
||||||
|
-v 3
|
||||||
|
-l PSK-AES128-GCM-SHA256
|
||||||
|
|
||||||
|
# server TLSv1.2 PSK-AES256-GCM-SHA384
|
||||||
|
-s
|
||||||
|
-I
|
||||||
|
-v 3
|
||||||
|
-l PSK-AES256-GCM-SHA384
|
||||||
|
|
||||||
|
# client TLSv1.2 PSK-AES256-GCM-SHA384
|
||||||
|
-s
|
||||||
|
-v 3
|
||||||
|
-l PSK-AES256-GCM-SHA384
|
||||||
|
|
||||||
@@ -77,6 +77,8 @@ int unit_test(int argc, char** argv)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
SrpTest();
|
||||||
|
|
||||||
#ifdef HAVE_CAVIUM
|
#ifdef HAVE_CAVIUM
|
||||||
CspShutdown(CAVIUM_DEV_ID);
|
CspShutdown(CAVIUM_DEV_ID);
|
||||||
#endif
|
#endif
|
||||||
@@ -92,7 +94,7 @@ void wait_tcp_ready(func_args* args)
|
|||||||
(void)args;
|
(void)args;
|
||||||
#elif defined(_POSIX_THREADS) && !defined(__MINGW32__)
|
#elif defined(_POSIX_THREADS) && !defined(__MINGW32__)
|
||||||
pthread_mutex_lock(&args->signal->mutex);
|
pthread_mutex_lock(&args->signal->mutex);
|
||||||
|
|
||||||
if (!args->signal->ready)
|
if (!args->signal->ready)
|
||||||
pthread_cond_wait(&args->signal->cond, &args->signal->mutex);
|
pthread_cond_wait(&args->signal->cond, &args->signal->mutex);
|
||||||
args->signal->ready = 0; /* reset */
|
args->signal->ready = 0; /* reset */
|
||||||
@@ -176,4 +178,3 @@ void FreeTcpReady(tcp_ready* ready)
|
|||||||
(void)ready;
|
(void)ready;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
10
tests/unit.h
10
tests/unit.h
@@ -27,8 +27,8 @@
|
|||||||
|
|
||||||
#define Fail(description, result) do { \
|
#define Fail(description, result) do { \
|
||||||
printf("\nERROR - %s line %d failed with:", __FILE__, __LINE__); \
|
printf("\nERROR - %s line %d failed with:", __FILE__, __LINE__); \
|
||||||
printf("\n\n test: "); printf description; \
|
printf("\n expected: "); printf description; \
|
||||||
printf("\n\n result: "); printf result; \
|
printf("\n result: "); printf result; printf("\n\n"); \
|
||||||
abort(); \
|
abort(); \
|
||||||
} while(0)
|
} while(0)
|
||||||
|
|
||||||
@@ -76,9 +76,9 @@
|
|||||||
|
|
||||||
|
|
||||||
void ApiTest(void);
|
void ApiTest(void);
|
||||||
int SuiteTest(void);
|
int SuiteTest(void);
|
||||||
int HashTest(void);
|
int HashTest(void);
|
||||||
|
void SrpTest(void);
|
||||||
|
|
||||||
|
|
||||||
#endif /* CyaSSL_UNIT_H */
|
#endif /* CyaSSL_UNIT_H */
|
||||||
|
|
||||||
|
|||||||
@@ -32,7 +32,11 @@
|
|||||||
|
|
||||||
#ifdef FREESCALE_MQX
|
#ifdef FREESCALE_MQX
|
||||||
#include <mqx.h>
|
#include <mqx.h>
|
||||||
#include <fio.h>
|
#if MQX_USE_IO_OLD
|
||||||
|
#include <fio.h>
|
||||||
|
#else
|
||||||
|
#include <nio.h>
|
||||||
|
#endif
|
||||||
#else
|
#else
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#endif
|
#endif
|
||||||
@@ -194,7 +198,7 @@ static int OpenNitroxDevice(int dma_mode,int dev_id)
|
|||||||
#if !defined(NO_RSA) || !defined(NO_DH) \
|
#if !defined(NO_RSA) || !defined(NO_DH) \
|
||||||
|| defined(WOLFSSL_KEYGEN) || defined(HAVE_ECC)
|
|| defined(WOLFSSL_KEYGEN) || defined(HAVE_ECC)
|
||||||
#define HAVE_LOCAL_RNG
|
#define HAVE_LOCAL_RNG
|
||||||
static RNG rng;
|
static WC_RNG rng;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* use kB instead of mB for embedded benchmarking */
|
/* use kB instead of mB for embedded benchmarking */
|
||||||
|
|||||||
@@ -55,19 +55,6 @@ int wc_AesCbcDecrypt(Aes* aes, byte* out, const byte* in, word32 sz)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int wc_AesCbcEncryptWithKey(byte* out, const byte* in, word32 inSz,
|
|
||||||
const byte* key, word32 keySz, const byte* iv)
|
|
||||||
{
|
|
||||||
return AesCbcDecryptWithKey(out, in, inSz, key, keySz, iv);
|
|
||||||
}
|
|
||||||
|
|
||||||
int wc_AesCbcDecryptWithKey(byte* out, const byte* in, word32 inSz,
|
|
||||||
const byte* key, word32 keySz, const byte* iv)
|
|
||||||
{
|
|
||||||
return AesCbcDecryptWithKey(out, in, inSz, key, keySz, iv);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* AES-CTR */
|
/* AES-CTR */
|
||||||
#ifdef WOLFSSL_AES_COUNTER
|
#ifdef WOLFSSL_AES_COUNTER
|
||||||
void wc_AesCtrEncrypt(Aes* aes, byte* out, const byte* in, word32 sz)
|
void wc_AesCtrEncrypt(Aes* aes, byte* out, const byte* in, word32 sz)
|
||||||
@@ -1727,59 +1714,6 @@ int wc_AesSetIV(Aes* aes, const byte* iv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int wc_AesCbcDecryptWithKey(byte* out, const byte* in, word32 inSz,
|
|
||||||
const byte* key, word32 keySz, const byte* iv)
|
|
||||||
{
|
|
||||||
int ret = 0;
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
|
||||||
Aes* aes = NULL;
|
|
||||||
#else
|
|
||||||
Aes aes[1];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
|
||||||
aes = (Aes*)XMALLOC(sizeof(Aes), NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
if (aes == NULL)
|
|
||||||
return MEMORY_E;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
ret = wc_AesSetKey(aes, key, keySz, iv, AES_DECRYPTION);
|
|
||||||
if (ret == 0)
|
|
||||||
ret = wc_AesCbcDecrypt(aes, out, in, inSz);
|
|
||||||
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
|
||||||
XFREE(aes, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
int wc_AesCbcEncryptWithKey(byte* out, const byte* in, word32 inSz,
|
|
||||||
const byte* key, word32 keySz, const byte* iv)
|
|
||||||
{
|
|
||||||
int ret = 0;
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
|
||||||
Aes* aes = NULL;
|
|
||||||
#else
|
|
||||||
Aes aes[1];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
|
||||||
aes = (Aes*)XMALLOC(sizeof(Aes), NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
if (aes == NULL)
|
|
||||||
return MEMORY_E;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
ret = wc_AesSetKey(aes, key, keySz, iv, AES_ENCRYPTION);
|
|
||||||
if (ret == 0)
|
|
||||||
ret = wc_AesCbcEncrypt(aes, out, in, inSz);
|
|
||||||
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
|
||||||
XFREE(aes, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* AES-DIRECT */
|
/* AES-DIRECT */
|
||||||
|
|||||||
@@ -42,6 +42,7 @@
|
|||||||
#include <wolfssl/wolfcrypt/logging.h>
|
#include <wolfssl/wolfcrypt/logging.h>
|
||||||
|
|
||||||
#include <wolfssl/wolfcrypt/random.h>
|
#include <wolfssl/wolfcrypt/random.h>
|
||||||
|
#include <wolfssl/wolfcrypt/hash.h>
|
||||||
|
|
||||||
|
|
||||||
#ifndef NO_RC4
|
#ifndef NO_RC4
|
||||||
@@ -66,7 +67,11 @@
|
|||||||
|
|
||||||
#ifdef WOLFSSL_DEBUG_ENCODING
|
#ifdef WOLFSSL_DEBUG_ENCODING
|
||||||
#ifdef FREESCALE_MQX
|
#ifdef FREESCALE_MQX
|
||||||
#include <fio.h>
|
#if MQX_USE_IO_OLD
|
||||||
|
#include <fio.h>
|
||||||
|
#else
|
||||||
|
#include <nio.h>
|
||||||
|
#endif
|
||||||
#else
|
#else
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#endif
|
#endif
|
||||||
@@ -904,6 +909,9 @@ static int DecryptKey(const char* password, int passwordSz, byte* salt,
|
|||||||
byte key[MAX_KEY_SIZE];
|
byte key[MAX_KEY_SIZE];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
(void)input;
|
||||||
|
(void)length;
|
||||||
|
|
||||||
switch (id) {
|
switch (id) {
|
||||||
case PBE_MD5_DES:
|
case PBE_MD5_DES:
|
||||||
typeH = MD5;
|
typeH = MD5;
|
||||||
@@ -1484,11 +1492,13 @@ int wc_DsaKeyToDer(DsaKey* key, byte* output, word32 inLen)
|
|||||||
sizes[i] = SetLength(rawLen, tmps[i] + 1) + 1 + lbit; /* tag & lbit */
|
sizes[i] = SetLength(rawLen, tmps[i] + 1) + 1 + lbit; /* tag & lbit */
|
||||||
|
|
||||||
if (sizes[i] <= MAX_SEQ_SZ) {
|
if (sizes[i] <= MAX_SEQ_SZ) {
|
||||||
|
int err;
|
||||||
|
|
||||||
/* leading zero */
|
/* leading zero */
|
||||||
if (lbit)
|
if (lbit)
|
||||||
tmps[i][sizes[i]-1] = 0x00;
|
tmps[i][sizes[i]-1] = 0x00;
|
||||||
|
|
||||||
int err = mp_to_unsigned_bin(keyInt, tmps[i] + sizes[i]);
|
err = mp_to_unsigned_bin(keyInt, tmps[i] + sizes[i]);
|
||||||
if (err == MP_OKAY) {
|
if (err == MP_OKAY) {
|
||||||
sizes[i] += (rawLen-lbit); /* lbit included in rawLen */
|
sizes[i] += (rawLen-lbit); /* lbit included in rawLen */
|
||||||
intTotalLen += sizes[i];
|
intTotalLen += sizes[i];
|
||||||
@@ -4913,11 +4923,13 @@ int wc_RsaKeyToDer(RsaKey* key, byte* output, word32 inLen)
|
|||||||
sizes[i] = SetLength(rawLen, tmps[i] + 1) + 1 + lbit; /* tag & lbit */
|
sizes[i] = SetLength(rawLen, tmps[i] + 1) + 1 + lbit; /* tag & lbit */
|
||||||
|
|
||||||
if (sizes[i] <= MAX_SEQ_SZ) {
|
if (sizes[i] <= MAX_SEQ_SZ) {
|
||||||
|
int err;
|
||||||
|
|
||||||
/* leading zero */
|
/* leading zero */
|
||||||
if (lbit)
|
if (lbit)
|
||||||
tmps[i][sizes[i]-1] = 0x00;
|
tmps[i][sizes[i]-1] = 0x00;
|
||||||
|
|
||||||
int err = mp_to_unsigned_bin(keyInt, tmps[i] + sizes[i]);
|
err = mp_to_unsigned_bin(keyInt, tmps[i] + sizes[i]);
|
||||||
if (err == MP_OKAY) {
|
if (err == MP_OKAY) {
|
||||||
sizes[i] += (rawLen-lbit); /* lbit included in rawLen */
|
sizes[i] += (rawLen-lbit); /* lbit included in rawLen */
|
||||||
intTotalLen += sizes[i];
|
intTotalLen += sizes[i];
|
||||||
@@ -5755,7 +5767,7 @@ static int SetName(byte* output, CertName* name)
|
|||||||
|
|
||||||
/* encode info from cert into DER encoded format */
|
/* encode info from cert into DER encoded format */
|
||||||
static int EncodeCert(Cert* cert, DerCert* der, RsaKey* rsaKey, ecc_key* eccKey,
|
static int EncodeCert(Cert* cert, DerCert* der, RsaKey* rsaKey, ecc_key* eccKey,
|
||||||
RNG* rng, const byte* ntruKey, word16 ntruSz)
|
WC_RNG* rng, const byte* ntruKey, word16 ntruSz)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
@@ -5927,7 +5939,7 @@ static int WriteCertBody(DerCert* der, byte* buffer)
|
|||||||
|
|
||||||
/* Make RSA signature from buffer (sz), write to sig (sigSz) */
|
/* Make RSA signature from buffer (sz), write to sig (sigSz) */
|
||||||
static int MakeSignature(const byte* buffer, int sz, byte* sig, int sigSz,
|
static int MakeSignature(const byte* buffer, int sz, byte* sig, int sigSz,
|
||||||
RsaKey* rsaKey, ecc_key* eccKey, RNG* rng,
|
RsaKey* rsaKey, ecc_key* eccKey, WC_RNG* rng,
|
||||||
int sigAlgoType)
|
int sigAlgoType)
|
||||||
{
|
{
|
||||||
int encSigSz, digestSz, typeH = 0, ret = 0;
|
int encSigSz, digestSz, typeH = 0, ret = 0;
|
||||||
@@ -6052,7 +6064,7 @@ static int AddSignature(byte* buffer, int bodySz, const byte* sig, int sigSz,
|
|||||||
|
|
||||||
/* Make an x509 Certificate v3 any key type from cert input, write to buffer */
|
/* Make an x509 Certificate v3 any key type from cert input, write to buffer */
|
||||||
static int MakeAnyCert(Cert* cert, byte* derBuffer, word32 derSz,
|
static int MakeAnyCert(Cert* cert, byte* derBuffer, word32 derSz,
|
||||||
RsaKey* rsaKey, ecc_key* eccKey, RNG* rng,
|
RsaKey* rsaKey, ecc_key* eccKey, WC_RNG* rng,
|
||||||
const byte* ntruKey, word16 ntruSz)
|
const byte* ntruKey, word16 ntruSz)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
@@ -6089,7 +6101,7 @@ static int MakeAnyCert(Cert* cert, byte* derBuffer, word32 derSz,
|
|||||||
|
|
||||||
/* Make an x509 Certificate v3 RSA or ECC from cert input, write to buffer */
|
/* Make an x509 Certificate v3 RSA or ECC from cert input, write to buffer */
|
||||||
int wc_MakeCert(Cert* cert, byte* derBuffer, word32 derSz, RsaKey* rsaKey,
|
int wc_MakeCert(Cert* cert, byte* derBuffer, word32 derSz, RsaKey* rsaKey,
|
||||||
ecc_key* eccKey, RNG* rng)
|
ecc_key* eccKey, WC_RNG* rng)
|
||||||
{
|
{
|
||||||
return MakeAnyCert(cert, derBuffer, derSz, rsaKey, eccKey, rng, NULL, 0);
|
return MakeAnyCert(cert, derBuffer, derSz, rsaKey, eccKey, rng, NULL, 0);
|
||||||
}
|
}
|
||||||
@@ -6098,7 +6110,7 @@ int wc_MakeCert(Cert* cert, byte* derBuffer, word32 derSz, RsaKey* rsaKey,
|
|||||||
#ifdef HAVE_NTRU
|
#ifdef HAVE_NTRU
|
||||||
|
|
||||||
int wc_MakeNtruCert(Cert* cert, byte* derBuffer, word32 derSz,
|
int wc_MakeNtruCert(Cert* cert, byte* derBuffer, word32 derSz,
|
||||||
const byte* ntruKey, word16 keySz, RNG* rng)
|
const byte* ntruKey, word16 keySz, WC_RNG* rng)
|
||||||
{
|
{
|
||||||
return MakeAnyCert(cert, derBuffer, derSz, NULL, NULL, rng, ntruKey, keySz);
|
return MakeAnyCert(cert, derBuffer, derSz, NULL, NULL, rng, ntruKey, keySz);
|
||||||
}
|
}
|
||||||
@@ -6314,7 +6326,7 @@ int wc_MakeCertReq(Cert* cert, byte* derBuffer, word32 derSz,
|
|||||||
|
|
||||||
|
|
||||||
int wc_SignCert(int requestSz, int sType, byte* buffer, word32 buffSz,
|
int wc_SignCert(int requestSz, int sType, byte* buffer, word32 buffSz,
|
||||||
RsaKey* rsaKey, ecc_key* eccKey, RNG* rng)
|
RsaKey* rsaKey, ecc_key* eccKey, WC_RNG* rng)
|
||||||
{
|
{
|
||||||
int sigSz;
|
int sigSz;
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
@@ -6351,7 +6363,7 @@ int wc_SignCert(int requestSz, int sType, byte* buffer, word32 buffSz,
|
|||||||
|
|
||||||
|
|
||||||
int wc_MakeSelfCert(Cert* cert, byte* buffer, word32 buffSz,
|
int wc_MakeSelfCert(Cert* cert, byte* buffer, word32 buffSz,
|
||||||
RsaKey* key, RNG* rng)
|
RsaKey* key, WC_RNG* rng)
|
||||||
{
|
{
|
||||||
int ret = wc_MakeCert(cert, buffer, buffSz, key, NULL, rng);
|
int ret = wc_MakeCert(cert, buffer, buffSz, key, NULL, rng);
|
||||||
|
|
||||||
@@ -7583,7 +7595,7 @@ int EncodeOcspRequest(OcspRequest* req)
|
|||||||
|
|
||||||
extSz = 0;
|
extSz = 0;
|
||||||
if (req->useNonce) {
|
if (req->useNonce) {
|
||||||
RNG rng;
|
WC_RNG rng;
|
||||||
if (wc_InitRng(&rng) != 0) {
|
if (wc_InitRng(&rng) != 0) {
|
||||||
WOLFSSL_MSG("\tCannot initialize RNG. Skipping the OSCP Nonce.");
|
WOLFSSL_MSG("\tCannot initialize RNG. Skipping the OSCP Nonce.");
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -225,7 +225,7 @@ static int CEscape(int escaped, byte e, byte* out, word32* i, word32 max,
|
|||||||
}
|
}
|
||||||
*i = idx;
|
*i = idx;
|
||||||
|
|
||||||
return getSzOnly ? LENGTH_ONLY_E : 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -319,6 +319,8 @@ static int DoBase64_Encode(const byte* in, word32 inLen, byte* out,
|
|||||||
return ASN_INPUT_E;
|
return ASN_INPUT_E;
|
||||||
|
|
||||||
*outLen = i;
|
*outLen = i;
|
||||||
|
if(ret == 0)
|
||||||
|
return getSzOnly ? LENGTH_ONLY_E : 0;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ const curve25519_set_type curve25519_sets[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
int wc_curve25519_make_key(RNG* rng, int keysize, curve25519_key* key)
|
int wc_curve25519_make_key(WC_RNG* rng, int keysize, curve25519_key* key)
|
||||||
{
|
{
|
||||||
unsigned char basepoint[CURVE25519_KEYSIZE] = {9};
|
unsigned char basepoint[CURVE25519_KEYSIZE] = {9};
|
||||||
int ret;
|
int ret;
|
||||||
|
|||||||
@@ -91,37 +91,12 @@ void wc_Des_SetIV(Des* des, const byte* iv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int wc_Des_CbcEncryptWithKey(byte* out, const byte* in, word32 sz,
|
|
||||||
const byte* key, const byte* iv)
|
|
||||||
{
|
|
||||||
return Des_CbcEncryptWithKey(out, in, sz, key, iv);
|
|
||||||
}
|
|
||||||
|
|
||||||
int wc_Des_CbcDecryptWithKey(byte* out, const byte* in, word32 sz,
|
|
||||||
const byte* key, const byte* iv)
|
|
||||||
{
|
|
||||||
return Des_CbcDecryptWithKey(out, in, sz, key, iv);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int wc_Des3_SetIV(Des3* des, const byte* iv)
|
int wc_Des3_SetIV(Des3* des, const byte* iv)
|
||||||
{
|
{
|
||||||
return Des3_SetIV_fips(des, iv);
|
return Des3_SetIV_fips(des, iv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int wc_Des3_CbcEncryptWithKey(byte* out, const byte* in, word32 sz,
|
|
||||||
const byte* key, const byte* iv)
|
|
||||||
{
|
|
||||||
return Des3_CbcEncryptWithKey(out, in, sz, key, iv);
|
|
||||||
}
|
|
||||||
|
|
||||||
int wc_Des3_CbcDecryptWithKey(byte* out, const byte* in, word32 sz,
|
|
||||||
const byte* key, const byte* iv)
|
|
||||||
{
|
|
||||||
return Des3_CbcDecryptWithKey(out, in, sz, key, iv);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef HAVE_CAVIUM
|
#ifdef HAVE_CAVIUM
|
||||||
|
|
||||||
/* Initiliaze Des3 for use with Nitrox device */
|
/* Initiliaze Des3 for use with Nitrox device */
|
||||||
@@ -1501,61 +1476,6 @@ void wc_Des_SetIV(Des* des, const byte* iv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int wc_Des_CbcEncryptWithKey(byte* out, const byte* in, word32 sz,
|
|
||||||
const byte* key, const byte* iv)
|
|
||||||
{
|
|
||||||
int ret = 0;
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
|
||||||
Des* des = NULL;
|
|
||||||
#else
|
|
||||||
Des des[1];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
|
||||||
des = (Des*)XMALLOC(sizeof(Des), NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
if (des == NULL)
|
|
||||||
return MEMORY_E;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
ret = wc_Des_SetKey(des, key, iv, DES_ENCRYPTION);
|
|
||||||
if (ret == 0)
|
|
||||||
ret = wc_Des_CbcEncrypt(des, out, in, sz);
|
|
||||||
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
|
||||||
XFREE(des, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
int wc_Des_CbcDecryptWithKey(byte* out, const byte* in, word32 sz,
|
|
||||||
const byte* key, const byte* iv)
|
|
||||||
{
|
|
||||||
int ret = 0;
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
|
||||||
Des* des = NULL;
|
|
||||||
#else
|
|
||||||
Des des[1];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
|
||||||
des = (Des*)XMALLOC(sizeof(Des), NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
if (des == NULL)
|
|
||||||
return MEMORY_E;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
ret = wc_Des_SetKey(des, key, iv, DES_DECRYPTION);
|
|
||||||
if (ret == 0)
|
|
||||||
ret = wc_Des_CbcDecrypt(des, out, in, sz);
|
|
||||||
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
|
||||||
XFREE(des, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int wc_Des3_SetIV(Des3* des, const byte* iv)
|
int wc_Des3_SetIV(Des3* des, const byte* iv)
|
||||||
{
|
{
|
||||||
if (des && iv)
|
if (des && iv)
|
||||||
@@ -1567,61 +1487,6 @@ int wc_Des3_SetIV(Des3* des, const byte* iv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int wc_Des3_CbcEncryptWithKey(byte* out, const byte* in, word32 sz,
|
|
||||||
const byte* key, const byte* iv)
|
|
||||||
{
|
|
||||||
int ret = 0;
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
|
||||||
Des3* des3 = NULL;
|
|
||||||
#else
|
|
||||||
Des3 des3[1];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
|
||||||
des3 = (Des3*)XMALLOC(sizeof(Des3), NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
if (des3 == NULL)
|
|
||||||
return MEMORY_E;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
ret = wc_Des3_SetKey(des3, key, iv, DES_ENCRYPTION);
|
|
||||||
if (ret == 0)
|
|
||||||
ret = wc_Des3_CbcEncrypt(des3, out, in, sz);
|
|
||||||
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
|
||||||
XFREE(des3, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
int wc_Des3_CbcDecryptWithKey(byte* out, const byte* in, word32 sz,
|
|
||||||
const byte* key, const byte* iv)
|
|
||||||
{
|
|
||||||
int ret = 0;
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
|
||||||
Des3* des3 = NULL;
|
|
||||||
#else
|
|
||||||
Des3 des3[1];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
|
||||||
des3 = (Des3*)XMALLOC(sizeof(Des3), NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
if (des3 == NULL)
|
|
||||||
return MEMORY_E;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
ret = wc_Des3_SetKey(des3, key, iv, DES_DECRYPTION);
|
|
||||||
if (ret == 0)
|
|
||||||
ret = wc_Des3_CbcDecrypt(des3, out, in, sz);
|
|
||||||
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
|
||||||
XFREE(des3, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef HAVE_CAVIUM
|
#ifdef HAVE_CAVIUM
|
||||||
|
|
||||||
#include "cavium_common.h"
|
#include "cavium_common.h"
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ static word32 DiscreteLogWorkFactor(word32 n)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int GeneratePrivate(DhKey* key, RNG* rng, byte* priv, word32* privSz)
|
static int GeneratePrivate(DhKey* key, WC_RNG* rng, byte* priv, word32* privSz)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
word32 sz = mp_unsigned_bin_size(&key->p);
|
word32 sz = mp_unsigned_bin_size(&key->p);
|
||||||
@@ -132,7 +132,7 @@ static int GeneratePublic(DhKey* key, const byte* priv, word32 privSz,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int wc_DhGenerateKeyPair(DhKey* key, RNG* rng, byte* priv, word32* privSz,
|
int wc_DhGenerateKeyPair(DhKey* key, WC_RNG* rng, byte* priv, word32* privSz,
|
||||||
byte* pub, word32* pubSz)
|
byte* pub, word32* pubSz)
|
||||||
{
|
{
|
||||||
int ret = GeneratePrivate(key, rng, priv, privSz);
|
int ret = GeneratePrivate(key, rng, priv, privSz);
|
||||||
|
|||||||
@@ -18,7 +18,6 @@
|
|||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
*/
|
*/
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
@@ -85,7 +84,7 @@ void wc_FreeDsaKey(DsaKey* key)
|
|||||||
|
|
||||||
#ifdef WOLFSSL_KEY_GEN
|
#ifdef WOLFSSL_KEY_GEN
|
||||||
|
|
||||||
int wc_MakeDsaKey(RNG *rng, DsaKey *dsa)
|
int wc_MakeDsaKey(WC_RNG *rng, DsaKey *dsa)
|
||||||
{
|
{
|
||||||
unsigned char *buf;
|
unsigned char *buf;
|
||||||
int qsize, err;
|
int qsize, err;
|
||||||
@@ -146,7 +145,7 @@ int wc_MakeDsaKey(RNG *rng, DsaKey *dsa)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* modulus_size in bits */
|
/* modulus_size in bits */
|
||||||
int wc_MakeDsaParameters(RNG *rng, int modulus_size, DsaKey *dsa)
|
int wc_MakeDsaParameters(WC_RNG *rng, int modulus_size, DsaKey *dsa)
|
||||||
{
|
{
|
||||||
mp_int tmp, tmp2;
|
mp_int tmp, tmp2;
|
||||||
int err, msize, qsize,
|
int err, msize, qsize,
|
||||||
@@ -341,7 +340,7 @@ int wc_MakeDsaParameters(RNG *rng, int modulus_size, DsaKey *dsa)
|
|||||||
#endif /* WOLFSSL_KEY_GEN */
|
#endif /* WOLFSSL_KEY_GEN */
|
||||||
|
|
||||||
|
|
||||||
int wc_DsaSign(const byte* digest, byte* out, DsaKey* key, RNG* rng)
|
int wc_DsaSign(const byte* digest, byte* out, DsaKey* key, WC_RNG* rng)
|
||||||
{
|
{
|
||||||
mp_int k, kInv, r, s, H;
|
mp_int k, kInv, r, s, H;
|
||||||
int ret, sz;
|
int ret, sz;
|
||||||
|
|||||||
@@ -1652,7 +1652,7 @@ int wc_ecc_point_is_at_infinity(ecc_point* p)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int wc_ecc_make_key_ex(RNG* rng, ecc_key* key, const ecc_set_type* dp)
|
static int wc_ecc_make_key_ex(WC_RNG* rng, ecc_key* key, const ecc_set_type* dp)
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
ecc_point* base;
|
ecc_point* base;
|
||||||
@@ -1775,7 +1775,7 @@ static int wc_ecc_make_key_ex(RNG* rng, ecc_key* key, const ecc_set_type* dp)
|
|||||||
return MP_OKAY if successful,
|
return MP_OKAY if successful,
|
||||||
upon error all allocated memory will be freed
|
upon error all allocated memory will be freed
|
||||||
*/
|
*/
|
||||||
int wc_ecc_make_key(RNG* rng, int keysize, ecc_key* key)
|
int wc_ecc_make_key(WC_RNG* rng, int keysize, ecc_key* key)
|
||||||
{
|
{
|
||||||
int x, err;
|
int x, err;
|
||||||
|
|
||||||
@@ -1835,7 +1835,7 @@ int wc_ecc_init(ecc_key* key)
|
|||||||
return MP_OKAY if successful
|
return MP_OKAY if successful
|
||||||
*/
|
*/
|
||||||
int wc_ecc_sign_hash(const byte* in, word32 inlen, byte* out, word32 *outlen,
|
int wc_ecc_sign_hash(const byte* in, word32 inlen, byte* out, word32 *outlen,
|
||||||
RNG* rng, ecc_key* key)
|
WC_RNG* rng, ecc_key* key)
|
||||||
{
|
{
|
||||||
mp_int r;
|
mp_int r;
|
||||||
mp_int s;
|
mp_int s;
|
||||||
@@ -1870,7 +1870,7 @@ int wc_ecc_sign_hash(const byte* in, word32 inlen, byte* out, word32 *outlen,
|
|||||||
s [out] The destination for s component of the signature
|
s [out] The destination for s component of the signature
|
||||||
return MP_OKAY if successful
|
return MP_OKAY if successful
|
||||||
*/
|
*/
|
||||||
int wc_ecc_sign_hash_ex(const byte* in, word32 inlen, RNG* rng,
|
int wc_ecc_sign_hash_ex(const byte* in, word32 inlen, WC_RNG* rng,
|
||||||
ecc_key* key, mp_int *r, mp_int *s)
|
ecc_key* key, mp_int *r, mp_int *s)
|
||||||
{
|
{
|
||||||
mp_int e;
|
mp_int e;
|
||||||
@@ -4331,7 +4331,9 @@ static int accel_fp_mul2add(int idx1, int idx2,
|
|||||||
if ((err = mp_to_unsigned_bin(&tka, kb[0])) != MP_OKAY) {
|
if ((err = mp_to_unsigned_bin(&tka, kb[0])) != MP_OKAY) {
|
||||||
mp_clear(&tka);
|
mp_clear(&tka);
|
||||||
mp_clear(&tkb);
|
mp_clear(&tkb);
|
||||||
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
XFREE(kb[0], NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
XFREE(kb[0], NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
#endif
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4832,7 +4834,7 @@ int wc_ecc_ctx_set_peer_salt(ecEncCtx* ctx, const byte* salt)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int ecc_ctx_set_salt(ecEncCtx* ctx, int flags, RNG* rng)
|
static int ecc_ctx_set_salt(ecEncCtx* ctx, int flags, WC_RNG* rng)
|
||||||
{
|
{
|
||||||
byte* saltBuffer = NULL;
|
byte* saltBuffer = NULL;
|
||||||
|
|
||||||
@@ -4864,7 +4866,7 @@ static void ecc_ctx_init(ecEncCtx* ctx, int flags)
|
|||||||
|
|
||||||
|
|
||||||
/* allow ecc context reset so user doesn't have to init/free for resue */
|
/* allow ecc context reset so user doesn't have to init/free for resue */
|
||||||
int wc_ecc_ctx_reset(ecEncCtx* ctx, RNG* rng)
|
int wc_ecc_ctx_reset(ecEncCtx* ctx, WC_RNG* rng)
|
||||||
{
|
{
|
||||||
if (ctx == NULL || rng == NULL)
|
if (ctx == NULL || rng == NULL)
|
||||||
return BAD_FUNC_ARG;
|
return BAD_FUNC_ARG;
|
||||||
@@ -4875,7 +4877,7 @@ int wc_ecc_ctx_reset(ecEncCtx* ctx, RNG* rng)
|
|||||||
|
|
||||||
|
|
||||||
/* alloc/init and set defaults, return new Context */
|
/* alloc/init and set defaults, return new Context */
|
||||||
ecEncCtx* wc_ecc_ctx_new(int flags, RNG* rng)
|
ecEncCtx* wc_ecc_ctx_new(int flags, WC_RNG* rng)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
ecEncCtx* ctx = (ecEncCtx*)XMALLOC(sizeof(ecEncCtx), 0, DYNAMIC_TYPE_ECC);
|
ecEncCtx* ctx = (ecEncCtx*)XMALLOC(sizeof(ecEncCtx), 0, DYNAMIC_TYPE_ECC);
|
||||||
|
|||||||
@@ -32,6 +32,7 @@
|
|||||||
|
|
||||||
#include <wolfssl/wolfcrypt/ed25519.h>
|
#include <wolfssl/wolfcrypt/ed25519.h>
|
||||||
#include <wolfssl/wolfcrypt/error-crypt.h>
|
#include <wolfssl/wolfcrypt/error-crypt.h>
|
||||||
|
#include <wolfssl/wolfcrypt/hash.h>
|
||||||
#ifdef NO_INLINE
|
#ifdef NO_INLINE
|
||||||
#include <wolfssl/wolfcrypt/misc.h>
|
#include <wolfssl/wolfcrypt/misc.h>
|
||||||
#else
|
#else
|
||||||
@@ -41,7 +42,7 @@
|
|||||||
/* generate an ed25519 key pair.
|
/* generate an ed25519 key pair.
|
||||||
* returns 0 on success
|
* returns 0 on success
|
||||||
*/
|
*/
|
||||||
int wc_ed25519_make_key(RNG* rng, int keySz, ed25519_key* key)
|
int wc_ed25519_make_key(WC_RNG* rng, int keySz, ed25519_key* key)
|
||||||
{
|
{
|
||||||
byte az[ED25519_PRV_KEY_SIZE];
|
byte az[ED25519_PRV_KEY_SIZE];
|
||||||
int ret;
|
int ret;
|
||||||
@@ -111,6 +112,8 @@ int wc_ed25519_sign_msg(const byte* in, word32 inlen, byte* out,
|
|||||||
/* step 1: create nonce to use where nonce is r in
|
/* step 1: create nonce to use where nonce is r in
|
||||||
r = H(h_b, ... ,h_2b-1,M) */
|
r = H(h_b, ... ,h_2b-1,M) */
|
||||||
ret = wc_Sha512Hash(key->k, ED25519_KEY_SIZE, az);
|
ret = wc_Sha512Hash(key->k, ED25519_KEY_SIZE, az);
|
||||||
|
if (ret != 0)
|
||||||
|
return ret;
|
||||||
|
|
||||||
/* apply clamp */
|
/* apply clamp */
|
||||||
az[0] &= 248;
|
az[0] &= 248;
|
||||||
@@ -129,7 +132,7 @@ int wc_ed25519_sign_msg(const byte* in, word32 inlen, byte* out,
|
|||||||
ret = wc_Sha512Final(&sha, nonce);
|
ret = wc_Sha512Final(&sha, nonce);
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
sc_reduce(nonce);
|
sc_reduce(nonce);
|
||||||
|
|
||||||
/* step 2: computing R = rB where rB is the scalar multiplication of
|
/* step 2: computing R = rB where rB is the scalar multiplication of
|
||||||
@@ -377,6 +380,7 @@ int wc_ed25519_export_private_only(ed25519_key* key, byte* out, word32* outLen)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
export private key, including public part
|
export private key, including public part
|
||||||
outLen should contain the size of out buffer when input. outLen is than set
|
outLen should contain the size of out buffer when input. outLen is than set
|
||||||
|
|||||||
@@ -328,6 +328,15 @@ const char* wc_GetErrorString(int error)
|
|||||||
case ECC_PRIV_KEY_E:
|
case ECC_PRIV_KEY_E:
|
||||||
return " ECC private key is not valid error";
|
return " ECC private key is not valid error";
|
||||||
|
|
||||||
|
case SRP_CALL_ORDER_E:
|
||||||
|
return "SRP function called in the wrong order error";
|
||||||
|
|
||||||
|
case SRP_VERIFY_E:
|
||||||
|
return "SRP proof verification error";
|
||||||
|
|
||||||
|
case SRP_BAD_KEY_E:
|
||||||
|
return "SRP bad key values error";
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return "unknown error number";
|
return "unknown error number";
|
||||||
|
|
||||||
|
|||||||
@@ -24,6 +24,8 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <wolfssl/wolfcrypt/settings.h>
|
#include <wolfssl/wolfcrypt/settings.h>
|
||||||
|
#include <wolfssl/wolfcrypt/logging.h>
|
||||||
|
#include <wolfssl/wolfcrypt/error-crypt.h>
|
||||||
|
|
||||||
#if !defined(WOLFSSL_TI_HASH)
|
#if !defined(WOLFSSL_TI_HASH)
|
||||||
|
|
||||||
@@ -55,8 +57,40 @@ int wc_ShaGetHash(Sha* sha, byte* hash)
|
|||||||
WOLFSSL_API void wc_ShaRestorePos(Sha* s1, Sha* s2) {
|
WOLFSSL_API void wc_ShaRestorePos(Sha* s1, Sha* s2) {
|
||||||
*s1 = *s2 ;
|
*s1 = *s2 ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int wc_ShaHash(const byte* data, word32 len, byte* hash)
|
||||||
|
{
|
||||||
|
int ret = 0;
|
||||||
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
|
Sha* sha;
|
||||||
|
#else
|
||||||
|
Sha sha[1];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
|
sha = (Sha*)XMALLOC(sizeof(Sha), NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
if (sha == NULL)
|
||||||
|
return MEMORY_E;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if ((ret = wc_InitSha(sha)) != 0) {
|
||||||
|
WOLFSSL_MSG("wc_InitSha failed");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
wc_ShaUpdate(sha, data, len);
|
||||||
|
wc_ShaFinal(sha, hash);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
|
XFREE(sha, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* !defined(NO_SHA) */
|
||||||
|
|
||||||
#if !defined(NO_SHA256)
|
#if !defined(NO_SHA256)
|
||||||
int wc_Sha256GetHash(Sha256* sha256, byte* hash)
|
int wc_Sha256GetHash(Sha256* sha256, byte* hash)
|
||||||
{
|
{
|
||||||
@@ -70,7 +104,109 @@ int wc_Sha256GetHash(Sha256* sha256, byte* hash)
|
|||||||
WOLFSSL_API void wc_Sha256RestorePos(Sha256* s1, Sha256* s2) {
|
WOLFSSL_API void wc_Sha256RestorePos(Sha256* s1, Sha256* s2) {
|
||||||
*s1 = *s2 ;
|
*s1 = *s2 ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int wc_Sha256Hash(const byte* data, word32 len, byte* hash)
|
||||||
|
{
|
||||||
|
int ret = 0;
|
||||||
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
|
Sha256* sha256;
|
||||||
|
#else
|
||||||
|
Sha256 sha256[1];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
|
sha256 = (Sha256*)XMALLOC(sizeof(Sha256), NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
if (sha256 == NULL)
|
||||||
|
return MEMORY_E;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if ((ret = wc_InitSha256(sha256)) != 0) {
|
||||||
|
WOLFSSL_MSG("InitSha256 failed");
|
||||||
|
}
|
||||||
|
else if ((ret = wc_Sha256Update(sha256, data, len)) != 0) {
|
||||||
|
WOLFSSL_MSG("Sha256Update failed");
|
||||||
|
}
|
||||||
|
else if ((ret = wc_Sha256Final(sha256, hash)) != 0) {
|
||||||
|
WOLFSSL_MSG("Sha256Final failed");
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
|
XFREE(sha256, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
#endif /* !defined(NO_SHA256) */
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(WOLFSSL_SHA512)
|
||||||
|
int wc_Sha512Hash(const byte* data, word32 len, byte* hash)
|
||||||
|
{
|
||||||
|
int ret = 0;
|
||||||
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
|
Sha512* sha512;
|
||||||
|
#else
|
||||||
|
Sha512 sha512[1];
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
|
sha512 = (Sha512*)XMALLOC(sizeof(Sha512), NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
if (sha512 == NULL)
|
||||||
|
return MEMORY_E;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if ((ret = wc_InitSha512(sha512)) != 0) {
|
||||||
|
WOLFSSL_MSG("InitSha512 failed");
|
||||||
|
}
|
||||||
|
else if ((ret = wc_Sha512Update(sha512, data, len)) != 0) {
|
||||||
|
WOLFSSL_MSG("Sha512Update failed");
|
||||||
|
}
|
||||||
|
else if ((ret = wc_Sha512Final(sha512, hash)) != 0) {
|
||||||
|
WOLFSSL_MSG("Sha512Final failed");
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
|
XFREE(sha512, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(WOLFSSL_SHA384)
|
||||||
|
int wc_Sha384Hash(const byte* data, word32 len, byte* hash)
|
||||||
|
{
|
||||||
|
int ret = 0;
|
||||||
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
|
Sha384* sha384;
|
||||||
|
#else
|
||||||
|
Sha384 sha384[1];
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
|
sha384 = (Sha384*)XMALLOC(sizeof(Sha384), NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
if (sha384 == NULL)
|
||||||
|
return MEMORY_E;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if ((ret = wc_InitSha384(sha384)) != 0) {
|
||||||
|
WOLFSSL_MSG("InitSha384 failed");
|
||||||
|
}
|
||||||
|
else if ((ret = wc_Sha384Update(sha384, data, len)) != 0) {
|
||||||
|
WOLFSSL_MSG("Sha384Update failed");
|
||||||
|
}
|
||||||
|
else if ((ret = wc_Sha384Final(sha384, hash)) != 0) {
|
||||||
|
WOLFSSL_MSG("Sha384Final failed");
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
|
XFREE(sha384, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* defined(WOLFSSL_SHA384) */
|
||||||
|
#endif /* defined(WOLFSSL_SHA512) */
|
||||||
|
|
||||||
|
#endif /* !defined(WOLFSSL_TI_HASH) */
|
||||||
|
|
||||||
|
|||||||
@@ -134,31 +134,31 @@ static int InitHmac(Hmac* hmac, int type)
|
|||||||
ret = wc_InitSha(&hmac->hash.sha);
|
ret = wc_InitSha(&hmac->hash.sha);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef NO_SHA256
|
#ifndef NO_SHA256
|
||||||
case SHA256:
|
case SHA256:
|
||||||
ret = wc_InitSha256(&hmac->hash.sha256);
|
ret = wc_InitSha256(&hmac->hash.sha256);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef WOLFSSL_SHA384
|
#ifdef WOLFSSL_SHA384
|
||||||
case SHA384:
|
case SHA384:
|
||||||
ret = wc_InitSha384(&hmac->hash.sha384);
|
ret = wc_InitSha384(&hmac->hash.sha384);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef WOLFSSL_SHA512
|
#ifdef WOLFSSL_SHA512
|
||||||
case SHA512:
|
case SHA512:
|
||||||
ret = wc_InitSha512(&hmac->hash.sha512);
|
ret = wc_InitSha512(&hmac->hash.sha512);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_BLAKE2
|
#ifdef HAVE_BLAKE2
|
||||||
case BLAKE2B_ID:
|
case BLAKE2B_ID:
|
||||||
ret = wc_InitBlake2b(&hmac->hash.blake2b, BLAKE2B_256);
|
ret = wc_InitBlake2b(&hmac->hash.blake2b, BLAKE2B_256);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return BAD_FUNC_ARG;
|
return BAD_FUNC_ARG;
|
||||||
}
|
}
|
||||||
@@ -287,7 +287,7 @@ int wc_HmacSetKey(Hmac* hmac, int type, const byte* key, word32 length)
|
|||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_BLAKE2
|
#ifdef HAVE_BLAKE2
|
||||||
case BLAKE2B_ID:
|
case BLAKE2B_ID:
|
||||||
{
|
{
|
||||||
hmac_block_size = BLAKE2B_BLOCKBYTES;
|
hmac_block_size = BLAKE2B_BLOCKBYTES;
|
||||||
@@ -367,7 +367,7 @@ static int HmacKeyInnerHash(Hmac* hmac)
|
|||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_BLAKE2
|
#ifdef HAVE_BLAKE2
|
||||||
case BLAKE2B_ID:
|
case BLAKE2B_ID:
|
||||||
ret = wc_Blake2bUpdate(&hmac->hash.blake2b,
|
ret = wc_Blake2bUpdate(&hmac->hash.blake2b,
|
||||||
(byte*) hmac->ipad,BLAKE2B_BLOCKBYTES);
|
(byte*) hmac->ipad,BLAKE2B_BLOCKBYTES);
|
||||||
@@ -438,7 +438,7 @@ int wc_HmacUpdate(Hmac* hmac, const byte* msg, word32 length)
|
|||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_BLAKE2
|
#ifdef HAVE_BLAKE2
|
||||||
case BLAKE2B_ID:
|
case BLAKE2B_ID:
|
||||||
ret = wc_Blake2bUpdate(&hmac->hash.blake2b, msg, length);
|
ret = wc_Blake2bUpdate(&hmac->hash.blake2b, msg, length);
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
@@ -570,7 +570,7 @@ int wc_HmacFinal(Hmac* hmac, byte* hash)
|
|||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_BLAKE2
|
#ifdef HAVE_BLAKE2
|
||||||
case BLAKE2B_ID:
|
case BLAKE2B_ID:
|
||||||
{
|
{
|
||||||
ret = wc_Blake2bFinal(&hmac->hash.blake2b, (byte*) hmac->innerHash,
|
ret = wc_Blake2bFinal(&hmac->hash.blake2b, (byte*) hmac->innerHash,
|
||||||
@@ -622,7 +622,7 @@ int wc_HmacInitCavium(Hmac* hmac, int devId)
|
|||||||
hmac->devId = devId;
|
hmac->devId = devId;
|
||||||
hmac->magic = WOLFSSL_HMAC_CAVIUM_MAGIC;
|
hmac->magic = WOLFSSL_HMAC_CAVIUM_MAGIC;
|
||||||
hmac->data = NULL; /* buffered input data */
|
hmac->data = NULL; /* buffered input data */
|
||||||
|
|
||||||
hmac->innerHashKeyed = 0;
|
hmac->innerHashKeyed = 0;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@@ -650,7 +650,7 @@ static void HmacCaviumFinal(Hmac* hmac, byte* hash)
|
|||||||
(byte*)hmac->ipad, hmac->dataLen, hmac->data, hash, &requestId,
|
(byte*)hmac->ipad, hmac->dataLen, hmac->data, hash, &requestId,
|
||||||
hmac->devId) != 0) {
|
hmac->devId) != 0) {
|
||||||
WOLFSSL_MSG("Cavium Hmac failed");
|
WOLFSSL_MSG("Cavium Hmac failed");
|
||||||
}
|
}
|
||||||
hmac->innerHashKeyed = 0; /* tell update to start over if used again */
|
hmac->innerHashKeyed = 0; /* tell update to start over if used again */
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -685,7 +685,7 @@ static void HmacCaviumUpdate(Hmac* hmac, const byte* msg, word32 length)
|
|||||||
if (hmac->dataLen)
|
if (hmac->dataLen)
|
||||||
XMEMCPY(tmp, hmac->data, hmac->dataLen);
|
XMEMCPY(tmp, hmac->data, hmac->dataLen);
|
||||||
XMEMCPY(tmp + hmac->dataLen, msg, add);
|
XMEMCPY(tmp + hmac->dataLen, msg, add);
|
||||||
|
|
||||||
hmac->dataLen += add;
|
hmac->dataLen += add;
|
||||||
XFREE(hmac->data, NULL, DYNAMIC_TYPE_CAVIUM_TMP);
|
XFREE(hmac->data, NULL, DYNAMIC_TYPE_CAVIUM_TMP);
|
||||||
hmac->data = tmp;
|
hmac->data = tmp;
|
||||||
@@ -751,31 +751,31 @@ static INLINE int GetHashSizeByType(int type)
|
|||||||
return SHA_DIGEST_SIZE;
|
return SHA_DIGEST_SIZE;
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef NO_SHA256
|
#ifndef NO_SHA256
|
||||||
case SHA256:
|
case SHA256:
|
||||||
return SHA256_DIGEST_SIZE;
|
return SHA256_DIGEST_SIZE;
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef WOLFSSL_SHA384
|
#ifdef WOLFSSL_SHA384
|
||||||
case SHA384:
|
case SHA384:
|
||||||
return SHA384_DIGEST_SIZE;
|
return SHA384_DIGEST_SIZE;
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef WOLFSSL_SHA512
|
#ifdef WOLFSSL_SHA512
|
||||||
case SHA512:
|
case SHA512:
|
||||||
return SHA512_DIGEST_SIZE;
|
return SHA512_DIGEST_SIZE;
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_BLAKE2
|
#ifdef HAVE_BLAKE2
|
||||||
case BLAKE2B_ID:
|
case BLAKE2B_ID:
|
||||||
return BLAKE2B_OUTBYTES;
|
return BLAKE2B_OUTBYTES;
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return BAD_FUNC_ARG;
|
return BAD_FUNC_ARG;
|
||||||
break;
|
break;
|
||||||
@@ -824,7 +824,7 @@ int wc_HKDF(int type, const byte* inKey, word32 inKeySz,
|
|||||||
localSalt = tmp;
|
localSalt = tmp;
|
||||||
saltSz = hashSz;
|
saltSz = hashSz;
|
||||||
}
|
}
|
||||||
|
|
||||||
do {
|
do {
|
||||||
ret = wc_HmacSetKey(&myHmac, type, localSalt, saltSz);
|
ret = wc_HmacSetKey(&myHmac, type, localSalt, saltSz);
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
@@ -876,4 +876,3 @@ int wc_HKDF(int type, const byte* inKey, word32 inKeySz,
|
|||||||
|
|
||||||
#endif /* HAVE_FIPS */
|
#endif /* HAVE_FIPS */
|
||||||
#endif /* NO_HMAC */
|
#endif /* NO_HMAC */
|
||||||
|
|
||||||
|
|||||||
@@ -47,7 +47,11 @@
|
|||||||
|
|
||||||
#ifdef SHOW_GEN
|
#ifdef SHOW_GEN
|
||||||
#ifdef FREESCALE_MQX
|
#ifdef FREESCALE_MQX
|
||||||
#include <fio.h>
|
#if MQX_USE_IO_OLD
|
||||||
|
#include <fio.h>
|
||||||
|
#else
|
||||||
|
#include <nio.h>
|
||||||
|
#endif
|
||||||
#else
|
#else
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#endif
|
#endif
|
||||||
@@ -4284,7 +4288,7 @@ static int mp_prime_is_divisible (mp_int * a, int *result)
|
|||||||
|
|
||||||
static const int USE_BBS = 1;
|
static const int USE_BBS = 1;
|
||||||
|
|
||||||
int mp_rand_prime(mp_int* N, int len, RNG* rng, void* heap)
|
int mp_rand_prime(mp_int* N, int len, WC_RNG* rng, void* heap)
|
||||||
{
|
{
|
||||||
int err, res, type;
|
int err, res, type;
|
||||||
byte* buf;
|
byte* buf;
|
||||||
@@ -4535,12 +4539,14 @@ LBL_U:mp_clear (&v);
|
|||||||
#endif /* WOLFSSL_KEY_GEN */
|
#endif /* WOLFSSL_KEY_GEN */
|
||||||
|
|
||||||
|
|
||||||
#ifdef HAVE_ECC
|
#if defined(HAVE_ECC) || defined(WOLFSSL_KEY_GEN) || defined(HAVE_COMP_KEY)
|
||||||
|
|
||||||
/* chars used in radix conversions */
|
/* chars used in radix conversions */
|
||||||
const char *mp_s_rmap = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\
|
const char *mp_s_rmap = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\
|
||||||
abcdefghijklmnopqrstuvwxyz+/";
|
abcdefghijklmnopqrstuvwxyz+/";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_ECC
|
||||||
/* read a string [ASCII] in a given radix */
|
/* read a string [ASCII] in a given radix */
|
||||||
int mp_read_radix (mp_int * a, const char *str, int radix)
|
int mp_read_radix (mp_int * a, const char *str, int radix)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -90,7 +90,11 @@ void wolfSSL_Debugging_OFF(void)
|
|||||||
#ifdef DEBUG_WOLFSSL
|
#ifdef DEBUG_WOLFSSL
|
||||||
|
|
||||||
#ifdef FREESCALE_MQX
|
#ifdef FREESCALE_MQX
|
||||||
#include <fio.h>
|
#if MQX_USE_IO_OLD
|
||||||
|
#include <fio.h>
|
||||||
|
#else
|
||||||
|
#include <nio.h>
|
||||||
|
#endif
|
||||||
#else
|
#else
|
||||||
#include <stdio.h> /* for default printf stuff */
|
#include <stdio.h> /* for default printf stuff */
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -945,7 +945,7 @@ int wc_PKCS7_VerifySignedData(PKCS7* pkcs7, byte* pkiMsg, word32 pkiMsgSz)
|
|||||||
/* create ASN.1 fomatted RecipientInfo structure, returns sequence size */
|
/* create ASN.1 fomatted RecipientInfo structure, returns sequence size */
|
||||||
WOLFSSL_LOCAL int wc_CreateRecipientInfo(const byte* cert, word32 certSz,
|
WOLFSSL_LOCAL int wc_CreateRecipientInfo(const byte* cert, word32 certSz,
|
||||||
int keyEncAlgo, int blockKeySz,
|
int keyEncAlgo, int blockKeySz,
|
||||||
RNG* rng, byte* contentKeyPlain,
|
WC_RNG* rng, byte* contentKeyPlain,
|
||||||
byte* contentKeyEnc,
|
byte* contentKeyEnc,
|
||||||
int* keyEncSz, byte* out, word32 outSz)
|
int* keyEncSz, byte* out, word32 outSz)
|
||||||
{
|
{
|
||||||
@@ -1178,7 +1178,7 @@ int wc_PKCS7_EncodeEnvelopedData(PKCS7* pkcs7, byte* output, word32 outputSz)
|
|||||||
byte envDataSeq[MAX_SEQ_SZ];
|
byte envDataSeq[MAX_SEQ_SZ];
|
||||||
byte ver[MAX_VERSION_SZ];
|
byte ver[MAX_VERSION_SZ];
|
||||||
|
|
||||||
RNG rng;
|
WC_RNG rng;
|
||||||
int contentKeyEncSz, blockKeySz;
|
int contentKeyEncSz, blockKeySz;
|
||||||
byte contentKeyPlain[MAX_CONTENT_KEY_LEN];
|
byte contentKeyPlain[MAX_CONTENT_KEY_LEN];
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
|
|||||||
@@ -39,33 +39,33 @@ int wc_GenerateSeed(OS_Seed* os, byte* seed, word32 sz)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_CAVIUM
|
#ifdef HAVE_CAVIUM
|
||||||
int wc_InitRngCavium(RNG* rng, int i)
|
int wc_InitRngCavium(WC_RNG* rng, int i)
|
||||||
{
|
{
|
||||||
return InitRngCavium(rng, i);
|
return InitRngCavium(rng, i);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
int wc_InitRng(RNG* rng)
|
int wc_InitRng(WC_RNG* rng)
|
||||||
{
|
{
|
||||||
return InitRng_fips(rng);
|
return InitRng_fips(rng);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int wc_RNG_GenerateBlock(RNG* rng, byte* b, word32 sz)
|
int wc_RNG_GenerateBlock(WC_RNG* rng, byte* b, word32 sz)
|
||||||
{
|
{
|
||||||
return RNG_GenerateBlock_fips(rng, b, sz);
|
return RNG_GenerateBlock_fips(rng, b, sz);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int wc_RNG_GenerateByte(RNG* rng, byte* b)
|
int wc_RNG_GenerateByte(WC_RNG* rng, byte* b)
|
||||||
{
|
{
|
||||||
return RNG_GenerateByte(rng, b);
|
return RNG_GenerateByte(rng, b);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(HAVE_HASHDRBG) || defined(NO_RC4)
|
#if defined(HAVE_HASHDRBG) || defined(NO_RC4)
|
||||||
|
|
||||||
int wc_FreeRng(RNG* rng)
|
int wc_FreeRng(WC_RNG* rng)
|
||||||
{
|
{
|
||||||
return FreeRng_fips(rng);
|
return FreeRng_fips(rng);
|
||||||
}
|
}
|
||||||
@@ -434,7 +434,7 @@ static int Hash_DRBG_Uninstantiate(DRBG* drbg)
|
|||||||
|
|
||||||
|
|
||||||
/* Get seed and key cipher */
|
/* Get seed and key cipher */
|
||||||
int wc_InitRng(RNG* rng)
|
int wc_InitRng(WC_RNG* rng)
|
||||||
{
|
{
|
||||||
int ret = BAD_FUNC_ARG;
|
int ret = BAD_FUNC_ARG;
|
||||||
|
|
||||||
@@ -487,7 +487,7 @@ int wc_InitRng(RNG* rng)
|
|||||||
|
|
||||||
|
|
||||||
/* place a generated block in output */
|
/* place a generated block in output */
|
||||||
int wc_RNG_GenerateBlock(RNG* rng, byte* output, word32 sz)
|
int wc_RNG_GenerateBlock(WC_RNG* rng, byte* output, word32 sz)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
@@ -536,13 +536,13 @@ int wc_RNG_GenerateBlock(RNG* rng, byte* output, word32 sz)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int wc_RNG_GenerateByte(RNG* rng, byte* b)
|
int wc_RNG_GenerateByte(WC_RNG* rng, byte* b)
|
||||||
{
|
{
|
||||||
return wc_RNG_GenerateBlock(rng, b, 1);
|
return wc_RNG_GenerateBlock(rng, b, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int wc_FreeRng(RNG* rng)
|
int wc_FreeRng(WC_RNG* rng)
|
||||||
{
|
{
|
||||||
int ret = BAD_FUNC_ARG;
|
int ret = BAD_FUNC_ARG;
|
||||||
|
|
||||||
@@ -687,7 +687,7 @@ static int wc_RNG_HealthTestLocal(int reseed)
|
|||||||
#else /* HAVE_HASHDRBG || NO_RC4 */
|
#else /* HAVE_HASHDRBG || NO_RC4 */
|
||||||
|
|
||||||
/* Get seed and key cipher */
|
/* Get seed and key cipher */
|
||||||
int wc_InitRng(RNG* rng)
|
int wc_InitRng(WC_RNG* rng)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
@@ -736,11 +736,11 @@ int wc_InitRng(RNG* rng)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_CAVIUM
|
#ifdef HAVE_CAVIUM
|
||||||
static void CaviumRNG_GenerateBlock(RNG* rng, byte* output, word32 sz);
|
static void CaviumRNG_GenerateBlock(WC_RNG* rng, byte* output, word32 sz);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* place a generated block in output */
|
/* place a generated block in output */
|
||||||
int wc_RNG_GenerateBlock(RNG* rng, byte* output, word32 sz)
|
int wc_RNG_GenerateBlock(WC_RNG* rng, byte* output, word32 sz)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_INTEL_RDGEN
|
#ifdef HAVE_INTEL_RDGEN
|
||||||
if(IS_INTEL_RDRAND)
|
if(IS_INTEL_RDRAND)
|
||||||
@@ -757,13 +757,13 @@ int wc_RNG_GenerateBlock(RNG* rng, byte* output, word32 sz)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int wc_RNG_GenerateByte(RNG* rng, byte* b)
|
int wc_RNG_GenerateByte(WC_RNG* rng, byte* b)
|
||||||
{
|
{
|
||||||
return wc_RNG_GenerateBlock(rng, b, 1);
|
return wc_RNG_GenerateBlock(rng, b, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int wc_FreeRng(RNG* rng)
|
int wc_FreeRng(WC_RNG* rng)
|
||||||
{
|
{
|
||||||
(void)rng;
|
(void)rng;
|
||||||
return 0;
|
return 0;
|
||||||
@@ -776,7 +776,7 @@ int wc_FreeRng(RNG* rng)
|
|||||||
#include "cavium_common.h"
|
#include "cavium_common.h"
|
||||||
|
|
||||||
/* Initiliaze RNG for use with Nitrox device */
|
/* Initiliaze RNG for use with Nitrox device */
|
||||||
int wc_InitRngCavium(RNG* rng, int devId)
|
int wc_InitRngCavium(WC_RNG* rng, int devId)
|
||||||
{
|
{
|
||||||
if (rng == NULL)
|
if (rng == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
@@ -788,7 +788,7 @@ int wc_InitRngCavium(RNG* rng, int devId)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void CaviumRNG_GenerateBlock(RNG* rng, byte* output, word32 sz)
|
static void CaviumRNG_GenerateBlock(WC_RNG* rng, byte* output, word32 sz)
|
||||||
{
|
{
|
||||||
wolfssl_word offset = 0;
|
wolfssl_word offset = 0;
|
||||||
word32 requestId;
|
word32 requestId;
|
||||||
@@ -1017,18 +1017,6 @@ int wc_GenerateSeed(OS_Seed* os, byte* output, word32 sz)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#elif defined(MBED)
|
|
||||||
|
|
||||||
/* write a real one !!!, just for testing board */
|
|
||||||
int wc_GenerateSeed(OS_Seed* os, byte* output, word32 sz)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
for (i = 0; i < sz; i++ )
|
|
||||||
output[i] = i;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#elif defined(MICROCHIP_PIC32)
|
#elif defined(MICROCHIP_PIC32)
|
||||||
|
|
||||||
#ifdef MICROCHIP_MPLAB_HARMONY
|
#ifdef MICROCHIP_MPLAB_HARMONY
|
||||||
@@ -1225,7 +1213,7 @@ int wc_GenerateSeed(OS_Seed* os, byte* output, word32 sz)
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#elif defined(WOLFSSL_LPC43xx) || defined(WOLFSSL_STM32F2xx)
|
#elif defined(WOLFSSL_LPC43xx) || defined(WOLFSSL_STM32F2xx) || defined(MBED)
|
||||||
|
|
||||||
#warning "write a real random seed!!!!, just for testing now"
|
#warning "write a real random seed!!!!, just for testing now"
|
||||||
|
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ int wc_FreeRsaKey(RsaKey* key)
|
|||||||
|
|
||||||
|
|
||||||
int wc_RsaPublicEncrypt(const byte* in, word32 inLen, byte* out,
|
int wc_RsaPublicEncrypt(const byte* in, word32 inLen, byte* out,
|
||||||
word32 outLen, RsaKey* key, RNG* rng)
|
word32 outLen, RsaKey* key, WC_RNG* rng)
|
||||||
{
|
{
|
||||||
return RsaPublicEncrypt_fips(in, inLen, out, outLen, key, rng);
|
return RsaPublicEncrypt_fips(in, inLen, out, outLen, key, rng);
|
||||||
}
|
}
|
||||||
@@ -64,7 +64,7 @@ int wc_RsaPrivateDecrypt(const byte* in, word32 inLen, byte* out,
|
|||||||
|
|
||||||
|
|
||||||
int wc_RsaSSL_Sign(const byte* in, word32 inLen, byte* out,
|
int wc_RsaSSL_Sign(const byte* in, word32 inLen, byte* out,
|
||||||
word32 outLen, RsaKey* key, RNG* rng)
|
word32 outLen, RsaKey* key, WC_RNG* rng)
|
||||||
{
|
{
|
||||||
return RsaSSL_Sign_fips(in, inLen, out, outLen, key, rng);
|
return RsaSSL_Sign_fips(in, inLen, out, outLen, key, rng);
|
||||||
}
|
}
|
||||||
@@ -96,7 +96,7 @@ int wc_RsaFlattenPublicKey(RsaKey* key, byte* a, word32* aSz, byte* b,
|
|||||||
return RsaFlattenPublicKey(key, a, aSz, b, bSz);
|
return RsaFlattenPublicKey(key, a, aSz, b, bSz);
|
||||||
}
|
}
|
||||||
#ifdef WOLFSSL_KEY_GEN
|
#ifdef WOLFSSL_KEY_GEN
|
||||||
int wc_MakeRsaKey(RsaKey* key, int size, long e, RNG* rng)
|
int wc_MakeRsaKey(RsaKey* key, int size, long e, WC_RNG* rng)
|
||||||
{
|
{
|
||||||
return MakeRsaKey(key, size, e, rng);
|
return MakeRsaKey(key, size, e, rng);
|
||||||
}
|
}
|
||||||
@@ -144,6 +144,22 @@ int wc_RsaFlattenPublicKey(RsaKey* key, byte* a, word32* aSz, byte* b,
|
|||||||
word32 outLen, RsaKey* key);
|
word32 outLen, RsaKey* key);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
enum {
|
||||||
|
RSA_PUBLIC_ENCRYPT = 0,
|
||||||
|
RSA_PUBLIC_DECRYPT = 1,
|
||||||
|
RSA_PRIVATE_ENCRYPT = 2,
|
||||||
|
RSA_PRIVATE_DECRYPT = 3,
|
||||||
|
|
||||||
|
RSA_BLOCK_TYPE_1 = 1,
|
||||||
|
RSA_BLOCK_TYPE_2 = 2,
|
||||||
|
|
||||||
|
RSA_MIN_SIZE = 512,
|
||||||
|
RSA_MAX_SIZE = 4096,
|
||||||
|
|
||||||
|
RSA_MIN_PAD_SZ = 11 /* seperator + 0 + pad value + 8 pads */
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
int wc_InitRsaKey(RsaKey* key, void* heap)
|
int wc_InitRsaKey(RsaKey* key, void* heap)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_CAVIUM
|
#ifdef HAVE_CAVIUM
|
||||||
@@ -203,7 +219,7 @@ int wc_FreeRsaKey(RsaKey* key)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int wc_RsaPad(const byte* input, word32 inputLen, byte* pkcsBlock,
|
static int wc_RsaPad(const byte* input, word32 inputLen, byte* pkcsBlock,
|
||||||
word32 pkcsBlockLen, byte padValue, RNG* rng)
|
word32 pkcsBlockLen, byte padValue, WC_RNG* rng)
|
||||||
{
|
{
|
||||||
if (inputLen == 0)
|
if (inputLen == 0)
|
||||||
return 0;
|
return 0;
|
||||||
@@ -375,7 +391,7 @@ done:
|
|||||||
|
|
||||||
|
|
||||||
int wc_RsaPublicEncrypt(const byte* in, word32 inLen, byte* out, word32 outLen,
|
int wc_RsaPublicEncrypt(const byte* in, word32 inLen, byte* out, word32 outLen,
|
||||||
RsaKey* key, RNG* rng)
|
RsaKey* key, WC_RNG* rng)
|
||||||
{
|
{
|
||||||
int sz, ret;
|
int sz, ret;
|
||||||
|
|
||||||
@@ -521,7 +537,7 @@ int wc_RsaSSL_Verify(const byte* in, word32 inLen, byte* out, word32 outLen,
|
|||||||
|
|
||||||
/* for Rsa Sign */
|
/* for Rsa Sign */
|
||||||
int wc_RsaSSL_Sign(const byte* in, word32 inLen, byte* out, word32 outLen,
|
int wc_RsaSSL_Sign(const byte* in, word32 inLen, byte* out, word32 outLen,
|
||||||
RsaKey* key, RNG* rng)
|
RsaKey* key, WC_RNG* rng)
|
||||||
{
|
{
|
||||||
int sz, ret;
|
int sz, ret;
|
||||||
|
|
||||||
@@ -588,7 +604,7 @@ int wc_RsaFlattenPublicKey(RsaKey* key, byte* e, word32* eSz, byte* n,
|
|||||||
|
|
||||||
#ifdef WOLFSSL_KEY_GEN
|
#ifdef WOLFSSL_KEY_GEN
|
||||||
/* Make an RSA key for size bits, with e specified, 65537 is a good e */
|
/* Make an RSA key for size bits, with e specified, 65537 is a good e */
|
||||||
int wc_MakeRsaKey(RsaKey* key, int size, long e, RNG* rng)
|
int wc_MakeRsaKey(RsaKey* key, int size, long e, WC_RNG* rng)
|
||||||
{
|
{
|
||||||
mp_int p, q, tmp1, tmp2, tmp3;
|
mp_int p, q, tmp1, tmp2, tmp3;
|
||||||
int err;
|
int err;
|
||||||
|
|||||||
@@ -57,11 +57,6 @@
|
|||||||
return ShaFinal_fips(sha,out);
|
return ShaFinal_fips(sha,out);
|
||||||
}
|
}
|
||||||
|
|
||||||
int wc_ShaHash(const byte* data, word32 sz, byte* out)
|
|
||||||
{
|
|
||||||
return ShaHash(data, sz, out);
|
|
||||||
}
|
|
||||||
|
|
||||||
#else /* else build without fips */
|
#else /* else build without fips */
|
||||||
|
|
||||||
#if defined(WOLFSSL_TI_HASH)
|
#if defined(WOLFSSL_TI_HASH)
|
||||||
@@ -421,36 +416,6 @@ int wc_ShaFinal(Sha* sha, byte* hash)
|
|||||||
#endif /* STM32F2_HASH */
|
#endif /* STM32F2_HASH */
|
||||||
|
|
||||||
|
|
||||||
int wc_ShaHash(const byte* data, word32 len, byte* hash)
|
|
||||||
{
|
|
||||||
int ret = 0;
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
|
||||||
Sha* sha;
|
|
||||||
#else
|
|
||||||
Sha sha[1];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
|
||||||
sha = (Sha*)XMALLOC(sizeof(Sha), NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
if (sha == NULL)
|
|
||||||
return MEMORY_E;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if ((ret = wc_InitSha(sha)) != 0) {
|
|
||||||
WOLFSSL_MSG("wc_InitSha failed");
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
wc_ShaUpdate(sha, data, len);
|
|
||||||
wc_ShaFinal(sha, hash);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
|
||||||
XFREE(sha, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* HAVE_FIPS */
|
#endif /* HAVE_FIPS */
|
||||||
#endif /* WOLFSSL_TI_HASH */
|
#endif /* WOLFSSL_TI_HASH */
|
||||||
|
|||||||
@@ -49,11 +49,6 @@ int wc_Sha256Final(Sha256* sha, byte* out)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int wc_Sha256Hash(const byte* data, word32 len, byte* out)
|
|
||||||
{
|
|
||||||
return Sha256Hash(data, len, out);
|
|
||||||
}
|
|
||||||
|
|
||||||
#else /* else build without fips */
|
#else /* else build without fips */
|
||||||
|
|
||||||
#if !defined(NO_SHA256) && defined(WOLFSSL_TI_HASH)
|
#if !defined(NO_SHA256) && defined(WOLFSSL_TI_HASH)
|
||||||
@@ -545,37 +540,6 @@ int wc_Sha256Final(Sha256* sha256, byte* hash)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
int wc_Sha256Hash(const byte* data, word32 len, byte* hash)
|
|
||||||
{
|
|
||||||
int ret = 0;
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
|
||||||
Sha256* sha256;
|
|
||||||
#else
|
|
||||||
Sha256 sha256[1];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
|
||||||
sha256 = (Sha256*)XMALLOC(sizeof(Sha256), NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
if (sha256 == NULL)
|
|
||||||
return MEMORY_E;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if ((ret = wc_InitSha256(sha256)) != 0) {
|
|
||||||
WOLFSSL_MSG("InitSha256 failed");
|
|
||||||
}
|
|
||||||
else if ((ret = wc_Sha256Update(sha256, data, len)) != 0) {
|
|
||||||
WOLFSSL_MSG("Sha256Update failed");
|
|
||||||
}
|
|
||||||
else if ((ret = wc_Sha256Final(sha256, hash)) != 0) {
|
|
||||||
WOLFSSL_MSG("Sha256Final failed");
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
|
||||||
XFREE(sha256, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if defined(HAVE_INTEL_AVX1) || defined(HAVE_INTEL_AVX2)
|
#if defined(HAVE_INTEL_AVX1) || defined(HAVE_INTEL_AVX2)
|
||||||
|
|
||||||
|
|||||||
@@ -47,11 +47,6 @@ int wc_Sha512Final(Sha512* sha, byte* out)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int wc_Sha512Hash(const byte* data, word32 len, byte* out)
|
|
||||||
{
|
|
||||||
return Sha512Hash(data, len, out);
|
|
||||||
}
|
|
||||||
|
|
||||||
#if defined(WOLFSSL_SHA384) || defined(HAVE_AESGCM)
|
#if defined(WOLFSSL_SHA384) || defined(HAVE_AESGCM)
|
||||||
|
|
||||||
int wc_InitSha384(Sha384* sha)
|
int wc_InitSha384(Sha384* sha)
|
||||||
@@ -72,10 +67,6 @@ int wc_Sha384Final(Sha384* sha, byte* out)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int wc_Sha384Hash(const byte* data, word32 len, byte* out)
|
|
||||||
{
|
|
||||||
return Sha384Hash(data, len, out);
|
|
||||||
}
|
|
||||||
#endif /* WOLFSSL_SHA384 */
|
#endif /* WOLFSSL_SHA384 */
|
||||||
#else /* else build without using fips */
|
#else /* else build without using fips */
|
||||||
#include <wolfssl/wolfcrypt/logging.h>
|
#include <wolfssl/wolfcrypt/logging.h>
|
||||||
@@ -609,37 +600,6 @@ int wc_Sha512Final(Sha512* sha512, byte* hash)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int wc_Sha512Hash(const byte* data, word32 len, byte* hash)
|
|
||||||
{
|
|
||||||
int ret = 0;
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
|
||||||
Sha512* sha512;
|
|
||||||
#else
|
|
||||||
Sha512 sha512[1];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
|
||||||
sha512 = (Sha512*)XMALLOC(sizeof(Sha512), NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
if (sha512 == NULL)
|
|
||||||
return MEMORY_E;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if ((ret = wc_InitSha512(sha512)) != 0) {
|
|
||||||
WOLFSSL_MSG("InitSha512 failed");
|
|
||||||
}
|
|
||||||
else if ((ret = wc_Sha512Update(sha512, data, len)) != 0) {
|
|
||||||
WOLFSSL_MSG("Sha512Update failed");
|
|
||||||
}
|
|
||||||
else if ((ret = wc_Sha512Final(sha512, hash)) != 0) {
|
|
||||||
WOLFSSL_MSG("Sha512Final failed");
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
|
||||||
XFREE(sha512, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if defined(HAVE_INTEL_AVX1)
|
#if defined(HAVE_INTEL_AVX1)
|
||||||
|
|
||||||
@@ -1563,37 +1523,6 @@ int wc_Sha384Final(Sha384* sha384, byte* hash)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int wc_Sha384Hash(const byte* data, word32 len, byte* hash)
|
|
||||||
{
|
|
||||||
int ret = 0;
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
|
||||||
Sha384* sha384;
|
|
||||||
#else
|
|
||||||
Sha384 sha384[1];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
|
||||||
sha384 = (Sha384*)XMALLOC(sizeof(Sha384), NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
if (sha384 == NULL)
|
|
||||||
return MEMORY_E;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if ((ret = wc_InitSha384(sha384)) != 0) {
|
|
||||||
WOLFSSL_MSG("InitSha384 failed");
|
|
||||||
}
|
|
||||||
else if ((ret = wc_Sha384Update(sha384, data, len)) != 0) {
|
|
||||||
WOLFSSL_MSG("Sha384Update failed");
|
|
||||||
}
|
|
||||||
else if ((ret = wc_Sha384Final(sha384, hash)) != 0) {
|
|
||||||
WOLFSSL_MSG("Sha384Final failed");
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
|
||||||
XFREE(sha384, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if defined(HAVE_INTEL_AVX1)
|
#if defined(HAVE_INTEL_AVX1)
|
||||||
|
|
||||||
|
|||||||
677
wolfcrypt/src/srp.c
Normal file
677
wolfcrypt/src/srp.c
Normal file
@@ -0,0 +1,677 @@
|
|||||||
|
/* srp.c
|
||||||
|
*
|
||||||
|
* Copyright (C) 2006-2015 wolfSSL Inc.
|
||||||
|
*
|
||||||
|
* This file is part of wolfSSL. (formerly known as CyaSSL)
|
||||||
|
*
|
||||||
|
* wolfSSL 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.
|
||||||
|
*
|
||||||
|
* wolfSSL 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
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include <config.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <wolfssl/wolfcrypt/settings.h>
|
||||||
|
|
||||||
|
#ifdef WOLFCRYPT_HAVE_SRP
|
||||||
|
|
||||||
|
#include <wolfssl/wolfcrypt/srp.h>
|
||||||
|
#include <wolfssl/wolfcrypt/random.h>
|
||||||
|
#include <wolfssl/wolfcrypt/error-crypt.h>
|
||||||
|
|
||||||
|
#ifdef NO_INLINE
|
||||||
|
#include <wolfssl/wolfcrypt/misc.h>
|
||||||
|
#else
|
||||||
|
#include <wolfcrypt/src/misc.c>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/** Computes the session key using the Mask Generation Function 1. */
|
||||||
|
static int wc_SrpSetKey(Srp* srp, byte* secret, word32 size);
|
||||||
|
|
||||||
|
static int SrpHashInit(SrpHash* hash, SrpType type)
|
||||||
|
{
|
||||||
|
hash->type = type;
|
||||||
|
|
||||||
|
switch (type) {
|
||||||
|
#ifndef NO_SHA
|
||||||
|
case SRP_TYPE_SHA:
|
||||||
|
return wc_InitSha(&hash->data.sha);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef NO_SHA256
|
||||||
|
case SRP_TYPE_SHA256:
|
||||||
|
return wc_InitSha256(&hash->data.sha256);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef WOLFSSL_SHA384
|
||||||
|
case SRP_TYPE_SHA384:
|
||||||
|
return wc_InitSha384(&hash->data.sha384);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef WOLFSSL_SHA512
|
||||||
|
case SRP_TYPE_SHA512:
|
||||||
|
return wc_InitSha512(&hash->data.sha512);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
default:
|
||||||
|
return BAD_FUNC_ARG;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static int SrpHashUpdate(SrpHash* hash, const byte* data, word32 size)
|
||||||
|
{
|
||||||
|
switch (hash->type) {
|
||||||
|
#ifndef NO_SHA
|
||||||
|
case SRP_TYPE_SHA:
|
||||||
|
return wc_ShaUpdate(&hash->data.sha, data, size);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef NO_SHA256
|
||||||
|
case SRP_TYPE_SHA256:
|
||||||
|
return wc_Sha256Update(&hash->data.sha256, data, size);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef WOLFSSL_SHA384
|
||||||
|
case SRP_TYPE_SHA384:
|
||||||
|
return wc_Sha384Update(&hash->data.sha384, data, size);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef WOLFSSL_SHA512
|
||||||
|
case SRP_TYPE_SHA512:
|
||||||
|
return wc_Sha512Update(&hash->data.sha512, data, size);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
default:
|
||||||
|
return BAD_FUNC_ARG;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static int SrpHashFinal(SrpHash* hash, byte* digest)
|
||||||
|
{
|
||||||
|
switch (hash->type) {
|
||||||
|
#ifndef NO_SHA
|
||||||
|
case SRP_TYPE_SHA:
|
||||||
|
return wc_ShaFinal(&hash->data.sha, digest);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef NO_SHA256
|
||||||
|
case SRP_TYPE_SHA256:
|
||||||
|
return wc_Sha256Final(&hash->data.sha256, digest);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef WOLFSSL_SHA384
|
||||||
|
case SRP_TYPE_SHA384:
|
||||||
|
return wc_Sha384Final(&hash->data.sha384, digest);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef WOLFSSL_SHA512
|
||||||
|
case SRP_TYPE_SHA512:
|
||||||
|
return wc_Sha512Final(&hash->data.sha512, digest);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
default:
|
||||||
|
return BAD_FUNC_ARG;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static word32 SrpHashSize(SrpType type)
|
||||||
|
{
|
||||||
|
switch (type) {
|
||||||
|
#ifndef NO_SHA
|
||||||
|
case SRP_TYPE_SHA:
|
||||||
|
return SHA_DIGEST_SIZE;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef NO_SHA256
|
||||||
|
case SRP_TYPE_SHA256:
|
||||||
|
return SHA256_DIGEST_SIZE;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef WOLFSSL_SHA384
|
||||||
|
case SRP_TYPE_SHA384:
|
||||||
|
return SHA384_DIGEST_SIZE;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef WOLFSSL_SHA512
|
||||||
|
case SRP_TYPE_SHA512:
|
||||||
|
return SHA512_DIGEST_SIZE;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int wc_SrpInit(Srp* srp, SrpType type, SrpSide side)
|
||||||
|
{
|
||||||
|
int r;
|
||||||
|
|
||||||
|
/* validating params */
|
||||||
|
|
||||||
|
if (!srp)
|
||||||
|
return BAD_FUNC_ARG;
|
||||||
|
|
||||||
|
if (side != SRP_CLIENT_SIDE && side != SRP_SERVER_SIDE)
|
||||||
|
return BAD_FUNC_ARG;
|
||||||
|
|
||||||
|
if (type != SRP_TYPE_SHA && type != SRP_TYPE_SHA256 &&
|
||||||
|
type != SRP_TYPE_SHA384 && type != SRP_TYPE_SHA512)
|
||||||
|
return BAD_FUNC_ARG;
|
||||||
|
|
||||||
|
/* initializing variables */
|
||||||
|
|
||||||
|
XMEMSET(srp, 0, sizeof(Srp));
|
||||||
|
|
||||||
|
if ((r = SrpHashInit(&srp->client_proof, type)) != 0)
|
||||||
|
return r;
|
||||||
|
|
||||||
|
if ((r = SrpHashInit(&srp->server_proof, type)) != 0)
|
||||||
|
return r;
|
||||||
|
|
||||||
|
if ((r = mp_init_multi(&srp->N, &srp->g, &srp->auth,
|
||||||
|
&srp->priv, 0, 0)) != 0)
|
||||||
|
return r;
|
||||||
|
|
||||||
|
srp->side = side; srp->type = type;
|
||||||
|
srp->salt = NULL; srp->saltSz = 0;
|
||||||
|
srp->user = NULL; srp->userSz = 0;
|
||||||
|
srp->key = NULL; srp->keySz = 0;
|
||||||
|
|
||||||
|
srp->keyGenFunc_cb = wc_SrpSetKey;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wc_SrpTerm(Srp* srp)
|
||||||
|
{
|
||||||
|
if (srp) {
|
||||||
|
mp_clear(&srp->N); mp_clear(&srp->g);
|
||||||
|
mp_clear(&srp->auth); mp_clear(&srp->priv);
|
||||||
|
|
||||||
|
ForceZero(srp->salt, srp->saltSz);
|
||||||
|
XFREE(srp->salt, NULL, DYNAMIC_TYPE_SRP);
|
||||||
|
ForceZero(srp->user, srp->userSz);
|
||||||
|
XFREE(srp->user, NULL, DYNAMIC_TYPE_SRP);
|
||||||
|
ForceZero(srp->key, srp->keySz);
|
||||||
|
XFREE(srp->key, NULL, DYNAMIC_TYPE_SRP);
|
||||||
|
|
||||||
|
ForceZero(srp, sizeof(Srp));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int wc_SrpSetUsername(Srp* srp, const byte* username, word32 size)
|
||||||
|
{
|
||||||
|
if (!srp || !username)
|
||||||
|
return BAD_FUNC_ARG;
|
||||||
|
|
||||||
|
srp->user = (byte*)XMALLOC(size, NULL, DYNAMIC_TYPE_SRP);
|
||||||
|
if (srp->user == NULL)
|
||||||
|
return MEMORY_E;
|
||||||
|
|
||||||
|
srp->userSz = size;
|
||||||
|
XMEMCPY(srp->user, username, srp->userSz);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int wc_SrpSetParams(Srp* srp, const byte* N, word32 nSz,
|
||||||
|
const byte* g, word32 gSz,
|
||||||
|
const byte* salt, word32 saltSz)
|
||||||
|
{
|
||||||
|
SrpHash hash;
|
||||||
|
byte digest1[SRP_MAX_DIGEST_SIZE];
|
||||||
|
byte digest2[SRP_MAX_DIGEST_SIZE];
|
||||||
|
byte pad = 0;
|
||||||
|
int i, j, r;
|
||||||
|
|
||||||
|
if (!srp || !N || !g || !salt || nSz < gSz)
|
||||||
|
return BAD_FUNC_ARG;
|
||||||
|
|
||||||
|
if (!srp->user)
|
||||||
|
return SRP_CALL_ORDER_E;
|
||||||
|
|
||||||
|
/* Set N */
|
||||||
|
if (mp_read_unsigned_bin(&srp->N, N, nSz) != MP_OKAY)
|
||||||
|
return MP_READ_E;
|
||||||
|
|
||||||
|
if (mp_count_bits(&srp->N) < SRP_DEFAULT_MIN_BITS)
|
||||||
|
return BAD_FUNC_ARG;
|
||||||
|
|
||||||
|
/* Set g */
|
||||||
|
if (mp_read_unsigned_bin(&srp->g, g, gSz) != MP_OKAY)
|
||||||
|
return MP_READ_E;
|
||||||
|
|
||||||
|
if (mp_cmp(&srp->N, &srp->g) != MP_GT)
|
||||||
|
return BAD_FUNC_ARG;
|
||||||
|
|
||||||
|
/* Set salt */
|
||||||
|
if (srp->salt) {
|
||||||
|
ForceZero(srp->salt, srp->saltSz);
|
||||||
|
XFREE(srp->salt, NULL, DYNAMIC_TYPE_SRP);
|
||||||
|
}
|
||||||
|
|
||||||
|
srp->salt = (byte*)XMALLOC(saltSz, NULL, DYNAMIC_TYPE_SRP);
|
||||||
|
if (srp->salt == NULL)
|
||||||
|
return MEMORY_E;
|
||||||
|
|
||||||
|
XMEMCPY(srp->salt, salt, saltSz);
|
||||||
|
srp->saltSz = saltSz;
|
||||||
|
|
||||||
|
/* Set k = H(N, g) */
|
||||||
|
r = SrpHashInit(&hash, srp->type);
|
||||||
|
if (!r) r = SrpHashUpdate(&hash, (byte*) N, nSz);
|
||||||
|
for (i = 0; (word32)i < nSz - gSz; i++)
|
||||||
|
SrpHashUpdate(&hash, &pad, 1);
|
||||||
|
if (!r) r = SrpHashUpdate(&hash, (byte*) g, gSz);
|
||||||
|
if (!r) r = SrpHashFinal(&hash, srp->k);
|
||||||
|
|
||||||
|
/* update client proof */
|
||||||
|
|
||||||
|
/* digest1 = H(N) */
|
||||||
|
if (!r) r = SrpHashInit(&hash, srp->type);
|
||||||
|
if (!r) r = SrpHashUpdate(&hash, (byte*) N, nSz);
|
||||||
|
if (!r) r = SrpHashFinal(&hash, digest1);
|
||||||
|
|
||||||
|
/* digest2 = H(g) */
|
||||||
|
if (!r) r = SrpHashInit(&hash, srp->type);
|
||||||
|
if (!r) r = SrpHashUpdate(&hash, (byte*) g, gSz);
|
||||||
|
if (!r) r = SrpHashFinal(&hash, digest2);
|
||||||
|
|
||||||
|
/* digest1 = H(N) ^ H(g) */
|
||||||
|
if (r == 0) {
|
||||||
|
for (i = 0, j = SrpHashSize(srp->type); i < j; i++)
|
||||||
|
digest1[i] ^= digest2[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
/* digest2 = H(user) */
|
||||||
|
if (!r) r = SrpHashInit(&hash, srp->type);
|
||||||
|
if (!r) r = SrpHashUpdate(&hash, srp->user, srp->userSz);
|
||||||
|
if (!r) r = SrpHashFinal(&hash, digest2);
|
||||||
|
|
||||||
|
/* client proof = H( H(N) ^ H(g) | H(user) | salt) */
|
||||||
|
if (!r) r = SrpHashUpdate(&srp->client_proof, digest1, j);
|
||||||
|
if (!r) r = SrpHashUpdate(&srp->client_proof, digest2, j);
|
||||||
|
if (!r) r = SrpHashUpdate(&srp->client_proof, salt, saltSz);
|
||||||
|
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
int wc_SrpSetPassword(Srp* srp, const byte* password, word32 size)
|
||||||
|
{
|
||||||
|
SrpHash hash;
|
||||||
|
byte digest[SRP_MAX_DIGEST_SIZE];
|
||||||
|
word32 digestSz;
|
||||||
|
int r;
|
||||||
|
|
||||||
|
if (!srp || !password || srp->side != SRP_CLIENT_SIDE)
|
||||||
|
return BAD_FUNC_ARG;
|
||||||
|
|
||||||
|
if (!srp->salt)
|
||||||
|
return SRP_CALL_ORDER_E;
|
||||||
|
|
||||||
|
digestSz = SrpHashSize(srp->type);
|
||||||
|
|
||||||
|
/* digest = H(username | ':' | password) */
|
||||||
|
r = SrpHashInit(&hash, srp->type);
|
||||||
|
if (!r) r = SrpHashUpdate(&hash, srp->user, srp->userSz);
|
||||||
|
if (!r) r = SrpHashUpdate(&hash, (const byte*) ":", 1);
|
||||||
|
if (!r) r = SrpHashUpdate(&hash, password, size);
|
||||||
|
if (!r) r = SrpHashFinal(&hash, digest);
|
||||||
|
|
||||||
|
/* digest = H(salt | H(username | ':' | password)) */
|
||||||
|
if (!r) r = SrpHashInit(&hash, srp->type);
|
||||||
|
if (!r) r = SrpHashUpdate(&hash, srp->salt, srp->saltSz);
|
||||||
|
if (!r) r = SrpHashUpdate(&hash, digest, digestSz);
|
||||||
|
if (!r) r = SrpHashFinal(&hash, digest);
|
||||||
|
|
||||||
|
/* Set x (private key) */
|
||||||
|
if (!r) r = mp_read_unsigned_bin(&srp->auth, digest, digestSz);
|
||||||
|
|
||||||
|
ForceZero(digest, SRP_MAX_DIGEST_SIZE);
|
||||||
|
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
int wc_SrpGetVerifier(Srp* srp, byte* verifier, word32* size)
|
||||||
|
{
|
||||||
|
mp_int v;
|
||||||
|
int r;
|
||||||
|
|
||||||
|
if (!srp || !verifier || !size || srp->side != SRP_CLIENT_SIDE)
|
||||||
|
return BAD_FUNC_ARG;
|
||||||
|
|
||||||
|
if (mp_iszero(&srp->auth))
|
||||||
|
return SRP_CALL_ORDER_E;
|
||||||
|
|
||||||
|
r = mp_init(&v);
|
||||||
|
if (r != MP_OKAY)
|
||||||
|
return MP_INIT_E;
|
||||||
|
|
||||||
|
/* v = g ^ x % N */
|
||||||
|
if (!r) r = mp_exptmod(&srp->g, &srp->auth, &srp->N, &v);
|
||||||
|
if (!r) r = *size < (word32)mp_unsigned_bin_size(&v) ? BUFFER_E : MP_OKAY;
|
||||||
|
if (!r) r = mp_to_unsigned_bin(&v, verifier);
|
||||||
|
if (!r) *size = mp_unsigned_bin_size(&v);
|
||||||
|
|
||||||
|
mp_clear(&v);
|
||||||
|
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
int wc_SrpSetVerifier(Srp* srp, const byte* verifier, word32 size)
|
||||||
|
{
|
||||||
|
if (!srp || !verifier || srp->side != SRP_SERVER_SIDE)
|
||||||
|
return BAD_FUNC_ARG;
|
||||||
|
|
||||||
|
return mp_read_unsigned_bin(&srp->auth, verifier, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
int wc_SrpSetPrivate(Srp* srp, const byte* private, word32 size)
|
||||||
|
{
|
||||||
|
mp_int p;
|
||||||
|
int r;
|
||||||
|
|
||||||
|
if (!srp || !private || !size)
|
||||||
|
return BAD_FUNC_ARG;
|
||||||
|
|
||||||
|
if (mp_iszero(&srp->auth))
|
||||||
|
return SRP_CALL_ORDER_E;
|
||||||
|
|
||||||
|
r = mp_init(&p);
|
||||||
|
if (r != MP_OKAY)
|
||||||
|
return MP_INIT_E;
|
||||||
|
if (!r) r = mp_read_unsigned_bin(&p, private, size);
|
||||||
|
if (!r) r = mp_mod(&p, &srp->N, &srp->priv);
|
||||||
|
if (!r) r = mp_iszero(&srp->priv) ? SRP_BAD_KEY_E : 0;
|
||||||
|
|
||||||
|
mp_clear(&p);
|
||||||
|
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Generates random data using wolfcrypt RNG. */
|
||||||
|
static int wc_SrpGenPrivate(Srp* srp, byte* private, word32 size)
|
||||||
|
{
|
||||||
|
WC_RNG rng;
|
||||||
|
int r = wc_InitRng(&rng);
|
||||||
|
|
||||||
|
if (!r) r = wc_RNG_GenerateBlock(&rng, private, size);
|
||||||
|
if (!r) r = wc_SrpSetPrivate(srp, private, size);
|
||||||
|
if (!r) wc_FreeRng(&rng);
|
||||||
|
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
int wc_SrpGetPublic(Srp* srp, byte* public, word32* size)
|
||||||
|
{
|
||||||
|
mp_int pubkey;
|
||||||
|
word32 modulusSz;
|
||||||
|
int r;
|
||||||
|
|
||||||
|
if (!srp || !public || !size)
|
||||||
|
return BAD_FUNC_ARG;
|
||||||
|
|
||||||
|
if (mp_iszero(&srp->auth))
|
||||||
|
return SRP_CALL_ORDER_E;
|
||||||
|
|
||||||
|
modulusSz = mp_unsigned_bin_size(&srp->N);
|
||||||
|
if (*size < modulusSz)
|
||||||
|
return BUFFER_E;
|
||||||
|
|
||||||
|
r = mp_init(&pubkey);
|
||||||
|
if (r != MP_OKAY)
|
||||||
|
return MP_INIT_E;
|
||||||
|
|
||||||
|
/* priv = random() */
|
||||||
|
if (mp_iszero(&srp->priv))
|
||||||
|
r = wc_SrpGenPrivate(srp, public, modulusSz);
|
||||||
|
|
||||||
|
/* client side: A = g ^ a % N */
|
||||||
|
if (srp->side == SRP_CLIENT_SIDE) {
|
||||||
|
if (!r) r = mp_exptmod(&srp->g, &srp->priv, &srp->N, &pubkey);
|
||||||
|
|
||||||
|
/* server side: B = (k * v + (g ^ b % N)) % N */
|
||||||
|
} else {
|
||||||
|
mp_int i, j;
|
||||||
|
|
||||||
|
if (mp_init_multi(&i, &j, 0, 0, 0, 0) == MP_OKAY) {
|
||||||
|
if (!r) r = mp_read_unsigned_bin(&i, srp->k,SrpHashSize(srp->type));
|
||||||
|
if (!r) r = mp_iszero(&i) ? SRP_BAD_KEY_E : 0;
|
||||||
|
if (!r) r = mp_exptmod(&srp->g, &srp->priv, &srp->N, &pubkey);
|
||||||
|
if (!r) r = mp_mulmod(&i, &srp->auth, &srp->N, &j);
|
||||||
|
if (!r) r = mp_add(&j, &pubkey, &i);
|
||||||
|
if (!r) r = mp_mod(&i, &srp->N, &pubkey);
|
||||||
|
|
||||||
|
mp_clear(&i); mp_clear(&j);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* extract public key to buffer */
|
||||||
|
XMEMSET(public, 0, modulusSz);
|
||||||
|
if (!r) r = mp_to_unsigned_bin(&pubkey, public);
|
||||||
|
if (!r) *size = mp_unsigned_bin_size(&pubkey);
|
||||||
|
mp_clear(&pubkey);
|
||||||
|
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int wc_SrpSetKey(Srp* srp, byte* secret, word32 size)
|
||||||
|
{
|
||||||
|
SrpHash hash;
|
||||||
|
byte digest[SRP_MAX_DIGEST_SIZE];
|
||||||
|
word32 i, j, digestSz = SrpHashSize(srp->type);
|
||||||
|
byte counter[4];
|
||||||
|
int r = BAD_FUNC_ARG;
|
||||||
|
|
||||||
|
srp->key = (byte*)XMALLOC(2 * digestSz, NULL, DYNAMIC_TYPE_SRP);
|
||||||
|
if (srp->key == NULL)
|
||||||
|
return MEMORY_E;
|
||||||
|
|
||||||
|
srp->keySz = 2 * digestSz;
|
||||||
|
|
||||||
|
for (i = j = 0; j < srp->keySz; i++) {
|
||||||
|
counter[0] = (i >> 24) & 0xFF;
|
||||||
|
counter[1] = (i >> 16) & 0xFF;
|
||||||
|
counter[2] = (i >> 8) & 0xFF;
|
||||||
|
counter[3] = i & 0xFF;
|
||||||
|
|
||||||
|
r = SrpHashInit(&hash, srp->type);
|
||||||
|
if (!r) r = SrpHashUpdate(&hash, secret, size);
|
||||||
|
if (!r) r = SrpHashUpdate(&hash, counter, 4);
|
||||||
|
|
||||||
|
if(j + digestSz > srp->keySz) {
|
||||||
|
if (!r) r = SrpHashFinal(&hash, digest);
|
||||||
|
XMEMCPY(srp->key + j, digest, srp->keySz - j);
|
||||||
|
j = srp->keySz;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (!r) r = SrpHashFinal(&hash, srp->key + j);
|
||||||
|
j += digestSz;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ForceZero(digest, sizeof(digest));
|
||||||
|
ForceZero(&hash, sizeof(SrpHash));
|
||||||
|
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
int wc_SrpComputeKey(Srp* srp, byte* clientPubKey, word32 clientPubKeySz,
|
||||||
|
byte* serverPubKey, word32 serverPubKeySz)
|
||||||
|
{
|
||||||
|
SrpHash hash;
|
||||||
|
byte *secret;
|
||||||
|
byte digest[SRP_MAX_DIGEST_SIZE];
|
||||||
|
word32 i, secretSz, digestSz;
|
||||||
|
mp_int u, s, temp1, temp2;
|
||||||
|
byte pad = 0;
|
||||||
|
int r;
|
||||||
|
|
||||||
|
/* validating params */
|
||||||
|
|
||||||
|
if (!srp || !clientPubKey || clientPubKeySz == 0
|
||||||
|
|| !serverPubKey || serverPubKeySz == 0)
|
||||||
|
return BAD_FUNC_ARG;
|
||||||
|
|
||||||
|
if (mp_iszero(&srp->priv))
|
||||||
|
return SRP_CALL_ORDER_E;
|
||||||
|
|
||||||
|
/* initializing variables */
|
||||||
|
|
||||||
|
if ((r = SrpHashInit(&hash, srp->type)) != 0)
|
||||||
|
return r;
|
||||||
|
|
||||||
|
digestSz = SrpHashSize(srp->type);
|
||||||
|
secretSz = mp_unsigned_bin_size(&srp->N);
|
||||||
|
|
||||||
|
if ((secret = (byte*)XMALLOC(secretSz, NULL, DYNAMIC_TYPE_SRP)) == NULL)
|
||||||
|
return MEMORY_E;
|
||||||
|
|
||||||
|
if ((r = mp_init_multi(&u, &s, &temp1, &temp2, 0, 0)) != MP_OKAY) {
|
||||||
|
XFREE(secret, NULL, DYNAMIC_TYPE_SRP);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* building u (random scrambling parameeter) */
|
||||||
|
|
||||||
|
/* H(A) */
|
||||||
|
for (i = 0; !r && i < secretSz - clientPubKeySz; i++)
|
||||||
|
r = SrpHashUpdate(&hash, &pad, 1);
|
||||||
|
if (!r) r = SrpHashUpdate(&hash, clientPubKey, clientPubKeySz);
|
||||||
|
|
||||||
|
/* H(A | B) */
|
||||||
|
for (i = 0; !r && i < secretSz - serverPubKeySz; i++)
|
||||||
|
r = SrpHashUpdate(&hash, &pad, 1);
|
||||||
|
if (!r) r = SrpHashUpdate(&hash, serverPubKey, serverPubKeySz);
|
||||||
|
|
||||||
|
/* set u */
|
||||||
|
if (!r) r = SrpHashFinal(&hash, digest);
|
||||||
|
if (!r) r = mp_read_unsigned_bin(&u, digest, SrpHashSize(srp->type));
|
||||||
|
|
||||||
|
/* building s (secret) */
|
||||||
|
|
||||||
|
if (!r && srp->side == SRP_CLIENT_SIDE) {
|
||||||
|
|
||||||
|
/* temp1 = B - k * v; rejects k == 0, B == 0 and B >= N. */
|
||||||
|
r = mp_read_unsigned_bin(&temp1, srp->k, digestSz);
|
||||||
|
if (!r) r = mp_iszero(&temp1) ? SRP_BAD_KEY_E : 0;
|
||||||
|
if (!r) r = mp_exptmod(&srp->g, &srp->auth, &srp->N, &temp2);
|
||||||
|
if (!r) r = mp_mulmod(&temp1, &temp2, &srp->N, &s);
|
||||||
|
if (!r) r = mp_read_unsigned_bin(&temp2, serverPubKey, serverPubKeySz);
|
||||||
|
if (!r) r = mp_iszero(&temp2) ? SRP_BAD_KEY_E : 0;
|
||||||
|
if (!r) r = mp_cmp(&temp2, &srp->N) != MP_LT ? SRP_BAD_KEY_E : 0;
|
||||||
|
if (!r) r = mp_sub(&temp2, &s, &temp1);
|
||||||
|
|
||||||
|
/* temp2 = a + u * x */
|
||||||
|
if (!r) r = mp_mulmod(&u, &srp->auth, &srp->N, &s);
|
||||||
|
if (!r) r = mp_add(&srp->priv, &s, &temp2);
|
||||||
|
|
||||||
|
/* secret = temp1 ^ temp2 % N */
|
||||||
|
if (!r) r = mp_exptmod(&temp1, &temp2, &srp->N, &s);
|
||||||
|
|
||||||
|
} else if (!r && srp->side == SRP_SERVER_SIDE) {
|
||||||
|
/* temp1 = v ^ u % N */
|
||||||
|
r = mp_exptmod(&srp->auth, &u, &srp->N, &temp1);
|
||||||
|
|
||||||
|
/* temp2 = A * temp1 % N; rejects A == 0, A >= N */
|
||||||
|
if (!r) r = mp_read_unsigned_bin(&s, clientPubKey, clientPubKeySz);
|
||||||
|
if (!r) r = mp_iszero(&s) ? SRP_BAD_KEY_E : 0;
|
||||||
|
if (!r) r = mp_cmp(&s, &srp->N) != MP_LT ? SRP_BAD_KEY_E : 0;
|
||||||
|
if (!r) r = mp_mulmod(&s, &temp1, &srp->N, &temp2);
|
||||||
|
|
||||||
|
/* rejects A * v ^ u % N >= 1, A * v ^ u % N == -1 % N */
|
||||||
|
if (!r) r = mp_read_unsigned_bin(&temp1, (const byte*)"\001", 1);
|
||||||
|
if (!r) r = mp_cmp(&temp2, &temp1) != MP_GT ? SRP_BAD_KEY_E : 0;
|
||||||
|
if (!r) r = mp_sub(&srp->N, &temp1, &s);
|
||||||
|
if (!r) r = mp_cmp(&temp2, &s) == MP_EQ ? SRP_BAD_KEY_E : 0;
|
||||||
|
|
||||||
|
/* secret = temp2 * b % N */
|
||||||
|
if (!r) r = mp_exptmod(&temp2, &srp->priv, &srp->N, &s);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* building session key from secret */
|
||||||
|
|
||||||
|
if (!r) r = mp_to_unsigned_bin(&s, secret);
|
||||||
|
if (!r) r = srp->keyGenFunc_cb(srp, secret, mp_unsigned_bin_size(&s));
|
||||||
|
|
||||||
|
/* updating client proof = H( H(N) ^ H(g) | H(user) | salt | A | B | K) */
|
||||||
|
|
||||||
|
if (!r) r = SrpHashUpdate(&srp->client_proof, clientPubKey, clientPubKeySz);
|
||||||
|
if (!r) r = SrpHashUpdate(&srp->client_proof, serverPubKey, serverPubKeySz);
|
||||||
|
if (!r) r = SrpHashUpdate(&srp->client_proof, srp->key, srp->keySz);
|
||||||
|
|
||||||
|
/* updating server proof = H(A) */
|
||||||
|
|
||||||
|
if (!r) r = SrpHashUpdate(&srp->server_proof, clientPubKey, clientPubKeySz);
|
||||||
|
|
||||||
|
XFREE(secret, NULL, DYNAMIC_TYPE_SRP);
|
||||||
|
mp_clear(&u); mp_clear(&s); mp_clear(&temp1); mp_clear(&temp2);
|
||||||
|
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
int wc_SrpGetProof(Srp* srp, byte* proof, word32* size)
|
||||||
|
{
|
||||||
|
int r;
|
||||||
|
|
||||||
|
if (!srp || !proof || !size)
|
||||||
|
return BAD_FUNC_ARG;
|
||||||
|
|
||||||
|
if (*size < SrpHashSize(srp->type))
|
||||||
|
return BUFFER_E;
|
||||||
|
|
||||||
|
if ((r = SrpHashFinal(srp->side == SRP_CLIENT_SIDE
|
||||||
|
? &srp->client_proof
|
||||||
|
: &srp->server_proof, proof)) != 0)
|
||||||
|
return r;
|
||||||
|
|
||||||
|
*size = SrpHashSize(srp->type);
|
||||||
|
|
||||||
|
if (srp->side == SRP_CLIENT_SIDE) {
|
||||||
|
/* server proof = H( A | client proof | K) */
|
||||||
|
if (!r) r = SrpHashUpdate(&srp->server_proof, proof, *size);
|
||||||
|
if (!r) r = SrpHashUpdate(&srp->server_proof, srp->key, srp->keySz);
|
||||||
|
}
|
||||||
|
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
int wc_SrpVerifyPeersProof(Srp* srp, byte* proof, word32 size)
|
||||||
|
{
|
||||||
|
byte digest[SRP_MAX_DIGEST_SIZE];
|
||||||
|
int r;
|
||||||
|
|
||||||
|
if (!srp || !proof)
|
||||||
|
return BAD_FUNC_ARG;
|
||||||
|
|
||||||
|
if (size != SrpHashSize(srp->type))
|
||||||
|
return BUFFER_E;
|
||||||
|
|
||||||
|
r = SrpHashFinal(srp->side == SRP_CLIENT_SIDE ? &srp->server_proof
|
||||||
|
: &srp->client_proof, digest);
|
||||||
|
|
||||||
|
if (srp->side == SRP_SERVER_SIDE) {
|
||||||
|
/* server proof = H( A | client proof | K) */
|
||||||
|
if (!r) r = SrpHashUpdate(&srp->server_proof, proof, size);
|
||||||
|
if (!r) r = SrpHashUpdate(&srp->server_proof, srp->key, srp->keySz);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!r && XMEMCMP(proof, digest, size) != 0)
|
||||||
|
r = SRP_VERIFY_E;
|
||||||
|
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* WOLFCRYPT_HAVE_SRP */
|
||||||
@@ -2264,6 +2264,7 @@ static const int lnz[16] = {
|
|||||||
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0
|
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifdef WOLFSSL_KEY_GEN
|
||||||
/* swap the elements of two integers, for cases where you can't simply swap the
|
/* swap the elements of two integers, for cases where you can't simply swap the
|
||||||
* mp_int pointers around
|
* mp_int pointers around
|
||||||
*/
|
*/
|
||||||
@@ -2275,6 +2276,7 @@ static void fp_exch (fp_int * a, fp_int * b)
|
|||||||
*a = *b;
|
*a = *b;
|
||||||
*b = t;
|
*b = t;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Counts the number of lsbs which are zero before the first zero bit */
|
/* Counts the number of lsbs which are zero before the first zero bit */
|
||||||
int fp_cnt_lsb(fp_int *a)
|
int fp_cnt_lsb(fp_int *a)
|
||||||
@@ -2410,7 +2412,7 @@ int mp_mod_d(fp_int *a, fp_digit b, fp_digit *c)
|
|||||||
void fp_gcd(fp_int *a, fp_int *b, fp_int *c);
|
void fp_gcd(fp_int *a, fp_int *b, fp_int *c);
|
||||||
void fp_lcm(fp_int *a, fp_int *b, fp_int *c);
|
void fp_lcm(fp_int *a, fp_int *b, fp_int *c);
|
||||||
int fp_isprime(fp_int *a);
|
int fp_isprime(fp_int *a);
|
||||||
int fp_randprime(fp_int* N, int len, RNG* rng, void* heap);
|
int fp_randprime(fp_int* N, int len, WC_RNG* rng, void* heap);
|
||||||
|
|
||||||
int mp_gcd(fp_int *a, fp_int *b, fp_int *c)
|
int mp_gcd(fp_int *a, fp_int *b, fp_int *c)
|
||||||
{
|
{
|
||||||
@@ -2433,7 +2435,7 @@ int mp_prime_is_prime(mp_int* a, int t, int* result)
|
|||||||
return MP_OKAY;
|
return MP_OKAY;
|
||||||
}
|
}
|
||||||
|
|
||||||
int mp_rand_prime(mp_int* N, int len, RNG* rng, void* heap)
|
int mp_rand_prime(mp_int* N, int len, WC_RNG* rng, void* heap)
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
@@ -2587,7 +2589,7 @@ int fp_isprime(fp_int *a)
|
|||||||
return FP_YES;
|
return FP_YES;
|
||||||
}
|
}
|
||||||
|
|
||||||
int fp_randprime(fp_int* N, int len, RNG* rng, void* heap)
|
int fp_randprime(fp_int* N, int len, WC_RNG* rng, void* heap)
|
||||||
{
|
{
|
||||||
static const int USE_BBS = 1;
|
static const int USE_BBS = 1;
|
||||||
int err, type;
|
int err, type;
|
||||||
@@ -2724,12 +2726,14 @@ int mp_add_d(fp_int *a, fp_digit b, fp_int *c)
|
|||||||
#endif /* HAVE_ECC || !NO_PWDBASED */
|
#endif /* HAVE_ECC || !NO_PWDBASED */
|
||||||
|
|
||||||
|
|
||||||
#ifdef HAVE_ECC
|
#if defined(HAVE_ECC) || defined(WOLFSSL_KEY_GEN) || defined(HAVE_COMP_KEY)
|
||||||
|
|
||||||
/* chars used in radix conversions */
|
/* chars used in radix conversions */
|
||||||
static const char *fp_s_rmap = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\
|
static const char *fp_s_rmap = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\
|
||||||
abcdefghijklmnopqrstuvwxyz+/";
|
abcdefghijklmnopqrstuvwxyz+/";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_ECC
|
||||||
static int fp_read_radix(fp_int *a, const char *str, int radix)
|
static int fp_read_radix(fp_int *a, const char *str, int radix)
|
||||||
{
|
{
|
||||||
int y, neg;
|
int y, neg;
|
||||||
@@ -2842,6 +2846,7 @@ int mp_cnt_lsb(fp_int* a)
|
|||||||
|
|
||||||
#endif /* HAVE_COMP_KEY */
|
#endif /* HAVE_COMP_KEY */
|
||||||
|
|
||||||
|
#endif /* HAVE_ECC */
|
||||||
|
|
||||||
#if defined(WOLFSSL_KEY_GEN) || defined(HAVE_COMP_KEY)
|
#if defined(WOLFSSL_KEY_GEN) || defined(HAVE_COMP_KEY)
|
||||||
|
|
||||||
@@ -2953,7 +2958,5 @@ int mp_toradix (mp_int *a, char *str, int radix)
|
|||||||
|
|
||||||
#endif /* defined(WOLFSSL_KEY_GEN) || defined(HAVE_COMP_KEY) */
|
#endif /* defined(WOLFSSL_KEY_GEN) || defined(HAVE_COMP_KEY) */
|
||||||
|
|
||||||
#endif /* HAVE_ECC */
|
|
||||||
|
|
||||||
#endif /* USE_FAST_MATH */
|
#endif /* USE_FAST_MATH */
|
||||||
|
|
||||||
|
|||||||
201
wolfcrypt/src/wc_encrypt.c
Normal file
201
wolfcrypt/src/wc_encrypt.c
Normal file
@@ -0,0 +1,201 @@
|
|||||||
|
/* wc_encrypt.c
|
||||||
|
*
|
||||||
|
* Copyright (C) 2006-2015 wolfSSL Inc.
|
||||||
|
*
|
||||||
|
* This file is part of wolfSSL. (formerly known as CyaSSL)
|
||||||
|
*
|
||||||
|
* wolfSSL 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.
|
||||||
|
*
|
||||||
|
* wolfSSL 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
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include <config.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <wolfssl/wolfcrypt/settings.h>
|
||||||
|
#include <wolfssl/wolfcrypt/aes.h>
|
||||||
|
#include <wolfssl/wolfcrypt/des3.h>
|
||||||
|
#include <wolfssl/wolfcrypt/wc_encrypt.h>
|
||||||
|
#include <wolfssl/wolfcrypt/error-crypt.h>
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef NO_AES
|
||||||
|
int wc_AesCbcDecryptWithKey(byte* out, const byte* in, word32 inSz,
|
||||||
|
const byte* key, word32 keySz, const byte* iv)
|
||||||
|
{
|
||||||
|
int ret = 0;
|
||||||
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
|
Aes* aes = NULL;
|
||||||
|
#else
|
||||||
|
Aes aes[1];
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
|
aes = (Aes*)XMALLOC(sizeof(Aes), NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
if (aes == NULL)
|
||||||
|
return MEMORY_E;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
ret = wc_AesSetKey(aes, key, keySz, iv, AES_DECRYPTION);
|
||||||
|
if (ret == 0)
|
||||||
|
ret = wc_AesCbcDecrypt(aes, out, in, inSz);
|
||||||
|
|
||||||
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
|
XFREE(aes, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int wc_AesCbcEncryptWithKey(byte* out, const byte* in, word32 inSz,
|
||||||
|
const byte* key, word32 keySz, const byte* iv)
|
||||||
|
{
|
||||||
|
int ret = 0;
|
||||||
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
|
Aes* aes = NULL;
|
||||||
|
#else
|
||||||
|
Aes aes[1];
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
|
aes = (Aes*)XMALLOC(sizeof(Aes), NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
if (aes == NULL)
|
||||||
|
return MEMORY_E;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
ret = wc_AesSetKey(aes, key, keySz, iv, AES_ENCRYPTION);
|
||||||
|
if (ret == 0)
|
||||||
|
ret = wc_AesCbcEncrypt(aes, out, in, inSz);
|
||||||
|
|
||||||
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
|
XFREE(aes, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
#endif /* !NO_AES */
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef NO_DES3
|
||||||
|
int wc_Des_CbcEncryptWithKey(byte* out, const byte* in, word32 sz,
|
||||||
|
const byte* key, const byte* iv)
|
||||||
|
{
|
||||||
|
int ret = 0;
|
||||||
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
|
Des* des = NULL;
|
||||||
|
#else
|
||||||
|
Des des[1];
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
|
des = (Des*)XMALLOC(sizeof(Des), NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
if (des == NULL)
|
||||||
|
return MEMORY_E;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
ret = wc_Des_SetKey(des, key, iv, DES_ENCRYPTION);
|
||||||
|
if (ret == 0)
|
||||||
|
ret = wc_Des_CbcEncrypt(des, out, in, sz);
|
||||||
|
|
||||||
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
|
XFREE(des, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int wc_Des_CbcDecryptWithKey(byte* out, const byte* in, word32 sz,
|
||||||
|
const byte* key, const byte* iv)
|
||||||
|
{
|
||||||
|
int ret = 0;
|
||||||
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
|
Des* des = NULL;
|
||||||
|
#else
|
||||||
|
Des des[1];
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
|
des = (Des*)XMALLOC(sizeof(Des), NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
if (des == NULL)
|
||||||
|
return MEMORY_E;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
ret = wc_Des_SetKey(des, key, iv, DES_DECRYPTION);
|
||||||
|
if (ret == 0)
|
||||||
|
ret = wc_Des_CbcDecrypt(des, out, in, sz);
|
||||||
|
|
||||||
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
|
XFREE(des, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int wc_Des3_CbcEncryptWithKey(byte* out, const byte* in, word32 sz,
|
||||||
|
const byte* key, const byte* iv)
|
||||||
|
{
|
||||||
|
int ret = 0;
|
||||||
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
|
Des3* des3 = NULL;
|
||||||
|
#else
|
||||||
|
Des3 des3[1];
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
|
des3 = (Des3*)XMALLOC(sizeof(Des3), NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
if (des3 == NULL)
|
||||||
|
return MEMORY_E;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
ret = wc_Des3_SetKey(des3, key, iv, DES_ENCRYPTION);
|
||||||
|
if (ret == 0)
|
||||||
|
ret = wc_Des3_CbcEncrypt(des3, out, in, sz);
|
||||||
|
|
||||||
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
|
XFREE(des3, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int wc_Des3_CbcDecryptWithKey(byte* out, const byte* in, word32 sz,
|
||||||
|
const byte* key, const byte* iv)
|
||||||
|
{
|
||||||
|
int ret = 0;
|
||||||
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
|
Des3* des3 = NULL;
|
||||||
|
#else
|
||||||
|
Des3 des3[1];
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
|
des3 = (Des3*)XMALLOC(sizeof(Des3), NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
if (des3 == NULL)
|
||||||
|
return MEMORY_E;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
ret = wc_Des3_SetKey(des3, key, iv, DES_DECRYPTION);
|
||||||
|
if (ret == 0)
|
||||||
|
ret = wc_Des3_CbcDecrypt(des3, out, in, sz);
|
||||||
|
|
||||||
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
|
XFREE(des3, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* !NO_DES3 */
|
||||||
@@ -53,6 +53,7 @@
|
|||||||
#include <wolfssl/wolfcrypt/hmac.h>
|
#include <wolfssl/wolfcrypt/hmac.h>
|
||||||
#include <wolfssl/wolfcrypt/dh.h>
|
#include <wolfssl/wolfcrypt/dh.h>
|
||||||
#include <wolfssl/wolfcrypt/dsa.h>
|
#include <wolfssl/wolfcrypt/dsa.h>
|
||||||
|
#include <wolfssl/wolfcrypt/srp.h>
|
||||||
#include <wolfssl/wolfcrypt/hc128.h>
|
#include <wolfssl/wolfcrypt/hc128.h>
|
||||||
#include <wolfssl/wolfcrypt/rabbit.h>
|
#include <wolfssl/wolfcrypt/rabbit.h>
|
||||||
#include <wolfssl/wolfcrypt/chacha.h>
|
#include <wolfssl/wolfcrypt/chacha.h>
|
||||||
@@ -125,8 +126,12 @@
|
|||||||
|
|
||||||
#ifdef FREESCALE_MQX
|
#ifdef FREESCALE_MQX
|
||||||
#include <mqx.h>
|
#include <mqx.h>
|
||||||
#include <fio.h>
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#if MQX_USE_IO_OLD
|
||||||
|
#include <fio.h>
|
||||||
|
#else
|
||||||
|
#include <nio.h>
|
||||||
|
#endif
|
||||||
#else
|
#else
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#endif
|
#endif
|
||||||
@@ -179,6 +184,7 @@ int camellia_test(void);
|
|||||||
int rsa_test(void);
|
int rsa_test(void);
|
||||||
int dh_test(void);
|
int dh_test(void);
|
||||||
int dsa_test(void);
|
int dsa_test(void);
|
||||||
|
int srp_test(void);
|
||||||
int random_test(void);
|
int random_test(void);
|
||||||
int pwdbased_test(void);
|
int pwdbased_test(void);
|
||||||
int ripemd_test(void);
|
int ripemd_test(void);
|
||||||
@@ -500,6 +506,13 @@ int wolfcrypt_test(void* args)
|
|||||||
printf( "DSA test passed!\n");
|
printf( "DSA test passed!\n");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef WOLFCRYPT_HAVE_SRP
|
||||||
|
if ( (ret = srp_test()) != 0)
|
||||||
|
return err_sys("SRP test failed!\n", ret);
|
||||||
|
else
|
||||||
|
printf( "SRP test passed!\n");
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef NO_PWDBASED
|
#ifndef NO_PWDBASED
|
||||||
if ( (ret = pwdbased_test()) != 0)
|
if ( (ret = pwdbased_test()) != 0)
|
||||||
return err_sys("PWDBASED test failed!\n", ret);
|
return err_sys("PWDBASED test failed!\n", ret);
|
||||||
@@ -3244,7 +3257,7 @@ int random_test(void)
|
|||||||
|
|
||||||
int random_test(void)
|
int random_test(void)
|
||||||
{
|
{
|
||||||
RNG rng;
|
WC_RNG rng;
|
||||||
byte block[32];
|
byte block[32];
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
@@ -3272,7 +3285,7 @@ byte GetEntropy(ENTROPY_CMD cmd, byte* out);
|
|||||||
|
|
||||||
byte GetEntropy(ENTROPY_CMD cmd, byte* out)
|
byte GetEntropy(ENTROPY_CMD cmd, byte* out)
|
||||||
{
|
{
|
||||||
static RNG rng;
|
static WC_RNG rng;
|
||||||
|
|
||||||
if (cmd == INIT)
|
if (cmd == INIT)
|
||||||
return (wc_InitRng(&rng) == 0) ? 1 : 0;
|
return (wc_InitRng(&rng) == 0) ? 1 : 0;
|
||||||
@@ -3344,7 +3357,7 @@ int rsa_test(void)
|
|||||||
byte* tmp;
|
byte* tmp;
|
||||||
size_t bytes;
|
size_t bytes;
|
||||||
RsaKey key;
|
RsaKey key;
|
||||||
RNG rng;
|
WC_RNG rng;
|
||||||
word32 idx = 0;
|
word32 idx = 0;
|
||||||
int ret;
|
int ret;
|
||||||
byte in[] = "Everyone gets Friday off.";
|
byte in[] = "Everyone gets Friday off.";
|
||||||
@@ -3478,19 +3491,25 @@ int rsa_test(void)
|
|||||||
FILE* pemFile;
|
FILE* pemFile;
|
||||||
|
|
||||||
ret = wc_InitRsaKey(&genKey, 0);
|
ret = wc_InitRsaKey(&genKey, 0);
|
||||||
if (ret != 0)
|
if (ret != 0) {
|
||||||
|
free(tmp);
|
||||||
return -300;
|
return -300;
|
||||||
|
}
|
||||||
ret = wc_MakeRsaKey(&genKey, 1024, 65537, &rng);
|
ret = wc_MakeRsaKey(&genKey, 1024, 65537, &rng);
|
||||||
if (ret != 0)
|
if (ret != 0) {
|
||||||
|
free(tmp);
|
||||||
return -301;
|
return -301;
|
||||||
|
}
|
||||||
|
|
||||||
der = (byte*)malloc(FOURK_BUF);
|
der = (byte*)malloc(FOURK_BUF);
|
||||||
if (der == NULL) {
|
if (der == NULL) {
|
||||||
|
free(tmp);
|
||||||
wc_FreeRsaKey(&genKey);
|
wc_FreeRsaKey(&genKey);
|
||||||
return -307;
|
return -307;
|
||||||
}
|
}
|
||||||
pem = (byte*)malloc(FOURK_BUF);
|
pem = (byte*)malloc(FOURK_BUF);
|
||||||
if (pem == NULL) {
|
if (pem == NULL) {
|
||||||
|
free(tmp);
|
||||||
free(der);
|
free(der);
|
||||||
wc_FreeRsaKey(&genKey);
|
wc_FreeRsaKey(&genKey);
|
||||||
return -308;
|
return -308;
|
||||||
@@ -3500,6 +3519,7 @@ int rsa_test(void)
|
|||||||
if (derSz < 0) {
|
if (derSz < 0) {
|
||||||
free(der);
|
free(der);
|
||||||
free(pem);
|
free(pem);
|
||||||
|
free(tmp);
|
||||||
return -302;
|
return -302;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3511,6 +3531,7 @@ int rsa_test(void)
|
|||||||
if (!keyFile) {
|
if (!keyFile) {
|
||||||
free(der);
|
free(der);
|
||||||
free(pem);
|
free(pem);
|
||||||
|
free(tmp);
|
||||||
wc_FreeRsaKey(&genKey);
|
wc_FreeRsaKey(&genKey);
|
||||||
return -303;
|
return -303;
|
||||||
}
|
}
|
||||||
@@ -3519,6 +3540,7 @@ int rsa_test(void)
|
|||||||
if (ret != derSz) {
|
if (ret != derSz) {
|
||||||
free(der);
|
free(der);
|
||||||
free(pem);
|
free(pem);
|
||||||
|
free(tmp);
|
||||||
wc_FreeRsaKey(&genKey);
|
wc_FreeRsaKey(&genKey);
|
||||||
return -313;
|
return -313;
|
||||||
}
|
}
|
||||||
@@ -3527,6 +3549,7 @@ int rsa_test(void)
|
|||||||
if (pemSz < 0) {
|
if (pemSz < 0) {
|
||||||
free(der);
|
free(der);
|
||||||
free(pem);
|
free(pem);
|
||||||
|
free(tmp);
|
||||||
wc_FreeRsaKey(&genKey);
|
wc_FreeRsaKey(&genKey);
|
||||||
return -304;
|
return -304;
|
||||||
}
|
}
|
||||||
@@ -3539,6 +3562,7 @@ int rsa_test(void)
|
|||||||
if (!pemFile) {
|
if (!pemFile) {
|
||||||
free(der);
|
free(der);
|
||||||
free(pem);
|
free(pem);
|
||||||
|
free(tmp);
|
||||||
wc_FreeRsaKey(&genKey);
|
wc_FreeRsaKey(&genKey);
|
||||||
return -305;
|
return -305;
|
||||||
}
|
}
|
||||||
@@ -3547,6 +3571,7 @@ int rsa_test(void)
|
|||||||
if (ret != pemSz) {
|
if (ret != pemSz) {
|
||||||
free(der);
|
free(der);
|
||||||
free(pem);
|
free(pem);
|
||||||
|
free(tmp);
|
||||||
wc_FreeRsaKey(&genKey);
|
wc_FreeRsaKey(&genKey);
|
||||||
return -314;
|
return -314;
|
||||||
}
|
}
|
||||||
@@ -3555,6 +3580,7 @@ int rsa_test(void)
|
|||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
free(der);
|
free(der);
|
||||||
free(pem);
|
free(pem);
|
||||||
|
free(tmp);
|
||||||
wc_FreeRsaKey(&genKey);
|
wc_FreeRsaKey(&genKey);
|
||||||
return -3060;
|
return -3060;
|
||||||
}
|
}
|
||||||
@@ -3563,6 +3589,7 @@ int rsa_test(void)
|
|||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
free(der);
|
free(der);
|
||||||
free(pem);
|
free(pem);
|
||||||
|
free(tmp);
|
||||||
wc_FreeRsaKey(&derIn);
|
wc_FreeRsaKey(&derIn);
|
||||||
wc_FreeRsaKey(&genKey);
|
wc_FreeRsaKey(&genKey);
|
||||||
return -306;
|
return -306;
|
||||||
@@ -3590,10 +3617,13 @@ int rsa_test(void)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
derCert = (byte*)malloc(FOURK_BUF);
|
derCert = (byte*)malloc(FOURK_BUF);
|
||||||
if (derCert == NULL)
|
if (derCert == NULL) {
|
||||||
|
free(tmp);
|
||||||
return -309;
|
return -309;
|
||||||
|
}
|
||||||
pem = (byte*)malloc(FOURK_BUF);
|
pem = (byte*)malloc(FOURK_BUF);
|
||||||
if (pem == NULL) {
|
if (pem == NULL) {
|
||||||
|
free(tmp);
|
||||||
free(derCert);
|
free(derCert);
|
||||||
return -310;
|
return -310;
|
||||||
}
|
}
|
||||||
@@ -3614,6 +3644,7 @@ int rsa_test(void)
|
|||||||
if (certSz < 0) {
|
if (certSz < 0) {
|
||||||
free(derCert);
|
free(derCert);
|
||||||
free(pem);
|
free(pem);
|
||||||
|
free(tmp);
|
||||||
return -401;
|
return -401;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3623,6 +3654,7 @@ int rsa_test(void)
|
|||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
free(derCert);
|
free(derCert);
|
||||||
free(pem);
|
free(pem);
|
||||||
|
free(tmp);
|
||||||
return -402;
|
return -402;
|
||||||
}
|
}
|
||||||
FreeDecodedCert(&decode);
|
FreeDecodedCert(&decode);
|
||||||
@@ -3636,6 +3668,7 @@ int rsa_test(void)
|
|||||||
if (!derFile) {
|
if (!derFile) {
|
||||||
free(derCert);
|
free(derCert);
|
||||||
free(pem);
|
free(pem);
|
||||||
|
free(tmp);
|
||||||
return -403;
|
return -403;
|
||||||
}
|
}
|
||||||
ret = (int)fwrite(derCert, 1, certSz, derFile);
|
ret = (int)fwrite(derCert, 1, certSz, derFile);
|
||||||
@@ -3643,6 +3676,7 @@ int rsa_test(void)
|
|||||||
if (ret != certSz) {
|
if (ret != certSz) {
|
||||||
free(derCert);
|
free(derCert);
|
||||||
free(pem);
|
free(pem);
|
||||||
|
free(tmp);
|
||||||
return -414;
|
return -414;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3650,6 +3684,7 @@ int rsa_test(void)
|
|||||||
if (pemSz < 0) {
|
if (pemSz < 0) {
|
||||||
free(derCert);
|
free(derCert);
|
||||||
free(pem);
|
free(pem);
|
||||||
|
free(tmp);
|
||||||
return -404;
|
return -404;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3661,6 +3696,7 @@ int rsa_test(void)
|
|||||||
if (!pemFile) {
|
if (!pemFile) {
|
||||||
free(derCert);
|
free(derCert);
|
||||||
free(pem);
|
free(pem);
|
||||||
|
free(tmp);
|
||||||
return -405;
|
return -405;
|
||||||
}
|
}
|
||||||
ret = (int)fwrite(pem, 1, pemSz, pemFile);
|
ret = (int)fwrite(pem, 1, pemSz, pemFile);
|
||||||
@@ -3668,6 +3704,7 @@ int rsa_test(void)
|
|||||||
if (ret != pemSz) {
|
if (ret != pemSz) {
|
||||||
free(derCert);
|
free(derCert);
|
||||||
free(pem);
|
free(pem);
|
||||||
|
free(tmp);
|
||||||
return -406;
|
return -406;
|
||||||
}
|
}
|
||||||
free(pem);
|
free(pem);
|
||||||
@@ -3691,11 +3728,14 @@ int rsa_test(void)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
derCert = (byte*)malloc(FOURK_BUF);
|
derCert = (byte*)malloc(FOURK_BUF);
|
||||||
if (derCert == NULL)
|
if (derCert == NULL) {
|
||||||
|
free(tmp);
|
||||||
return -311;
|
return -311;
|
||||||
|
}
|
||||||
pem = (byte*)malloc(FOURK_BUF);
|
pem = (byte*)malloc(FOURK_BUF);
|
||||||
if (pem == NULL) {
|
if (pem == NULL) {
|
||||||
free(derCert);
|
free(derCert);
|
||||||
|
free(tmp);
|
||||||
return -312;
|
return -312;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3704,6 +3744,7 @@ int rsa_test(void)
|
|||||||
if (!file3) {
|
if (!file3) {
|
||||||
free(derCert);
|
free(derCert);
|
||||||
free(pem);
|
free(pem);
|
||||||
|
free(tmp);
|
||||||
return -412;
|
return -412;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3714,18 +3755,24 @@ int rsa_test(void)
|
|||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
free(derCert);
|
free(derCert);
|
||||||
free(pem);
|
free(pem);
|
||||||
|
free(tmp);
|
||||||
return -411;
|
return -411;
|
||||||
}
|
}
|
||||||
ret = wc_RsaPrivateKeyDecode(tmp, &idx3, &caKey, (word32)bytes3);
|
ret = wc_RsaPrivateKeyDecode(tmp, &idx3, &caKey, (word32)bytes3);
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
free(derCert);
|
free(derCert);
|
||||||
free(pem);
|
free(pem);
|
||||||
|
free(tmp);
|
||||||
wc_FreeRsaKey(&caKey);
|
wc_FreeRsaKey(&caKey);
|
||||||
return -413;
|
return -413;
|
||||||
}
|
}
|
||||||
|
|
||||||
wc_InitCert(&myCert);
|
wc_InitCert(&myCert);
|
||||||
|
|
||||||
|
#ifdef NO_SHA
|
||||||
|
myCert.sigType = CTC_SHA256wRSA;
|
||||||
|
#endif
|
||||||
|
|
||||||
strncpy(myCert.subject.country, "US", CTC_NAME_SIZE);
|
strncpy(myCert.subject.country, "US", CTC_NAME_SIZE);
|
||||||
strncpy(myCert.subject.state, "OR", CTC_NAME_SIZE);
|
strncpy(myCert.subject.state, "OR", CTC_NAME_SIZE);
|
||||||
strncpy(myCert.subject.locality, "Portland", CTC_NAME_SIZE);
|
strncpy(myCert.subject.locality, "Portland", CTC_NAME_SIZE);
|
||||||
@@ -3738,6 +3785,7 @@ int rsa_test(void)
|
|||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
free(derCert);
|
free(derCert);
|
||||||
free(pem);
|
free(pem);
|
||||||
|
free(tmp);
|
||||||
wc_FreeRsaKey(&caKey);
|
wc_FreeRsaKey(&caKey);
|
||||||
return -405;
|
return -405;
|
||||||
}
|
}
|
||||||
@@ -3746,6 +3794,7 @@ int rsa_test(void)
|
|||||||
if (certSz < 0) {
|
if (certSz < 0) {
|
||||||
free(derCert);
|
free(derCert);
|
||||||
free(pem);
|
free(pem);
|
||||||
|
free(tmp);
|
||||||
wc_FreeRsaKey(&caKey);
|
wc_FreeRsaKey(&caKey);
|
||||||
return -407;
|
return -407;
|
||||||
}
|
}
|
||||||
@@ -3755,6 +3804,7 @@ int rsa_test(void)
|
|||||||
if (certSz < 0) {
|
if (certSz < 0) {
|
||||||
free(derCert);
|
free(derCert);
|
||||||
free(pem);
|
free(pem);
|
||||||
|
free(tmp);
|
||||||
wc_FreeRsaKey(&caKey);
|
wc_FreeRsaKey(&caKey);
|
||||||
return -408;
|
return -408;
|
||||||
}
|
}
|
||||||
@@ -3766,6 +3816,7 @@ int rsa_test(void)
|
|||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
free(derCert);
|
free(derCert);
|
||||||
free(pem);
|
free(pem);
|
||||||
|
free(tmp);
|
||||||
wc_FreeRsaKey(&caKey);
|
wc_FreeRsaKey(&caKey);
|
||||||
return -409;
|
return -409;
|
||||||
}
|
}
|
||||||
@@ -3780,6 +3831,7 @@ int rsa_test(void)
|
|||||||
if (!derFile) {
|
if (!derFile) {
|
||||||
free(derCert);
|
free(derCert);
|
||||||
free(pem);
|
free(pem);
|
||||||
|
free(tmp);
|
||||||
wc_FreeRsaKey(&caKey);
|
wc_FreeRsaKey(&caKey);
|
||||||
return -410;
|
return -410;
|
||||||
}
|
}
|
||||||
@@ -3788,6 +3840,7 @@ int rsa_test(void)
|
|||||||
if (ret != certSz) {
|
if (ret != certSz) {
|
||||||
free(derCert);
|
free(derCert);
|
||||||
free(pem);
|
free(pem);
|
||||||
|
free(tmp);
|
||||||
wc_FreeRsaKey(&caKey);
|
wc_FreeRsaKey(&caKey);
|
||||||
return -416;
|
return -416;
|
||||||
}
|
}
|
||||||
@@ -3796,6 +3849,7 @@ int rsa_test(void)
|
|||||||
if (pemSz < 0) {
|
if (pemSz < 0) {
|
||||||
free(derCert);
|
free(derCert);
|
||||||
free(pem);
|
free(pem);
|
||||||
|
free(tmp);
|
||||||
wc_FreeRsaKey(&caKey);
|
wc_FreeRsaKey(&caKey);
|
||||||
return -411;
|
return -411;
|
||||||
}
|
}
|
||||||
@@ -3808,6 +3862,7 @@ int rsa_test(void)
|
|||||||
if (!pemFile) {
|
if (!pemFile) {
|
||||||
free(derCert);
|
free(derCert);
|
||||||
free(pem);
|
free(pem);
|
||||||
|
free(tmp);
|
||||||
wc_FreeRsaKey(&caKey);
|
wc_FreeRsaKey(&caKey);
|
||||||
return -412;
|
return -412;
|
||||||
}
|
}
|
||||||
@@ -3815,6 +3870,7 @@ int rsa_test(void)
|
|||||||
if (ret != pemSz) {
|
if (ret != pemSz) {
|
||||||
free(derCert);
|
free(derCert);
|
||||||
free(pem);
|
free(pem);
|
||||||
|
free(tmp);
|
||||||
wc_FreeRsaKey(&caKey);
|
wc_FreeRsaKey(&caKey);
|
||||||
return -415;
|
return -415;
|
||||||
}
|
}
|
||||||
@@ -3842,11 +3898,14 @@ int rsa_test(void)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
derCert = (byte*)malloc(FOURK_BUF);
|
derCert = (byte*)malloc(FOURK_BUF);
|
||||||
if (derCert == NULL)
|
if (derCert == NULL) {
|
||||||
|
free(tmp);
|
||||||
return -5311;
|
return -5311;
|
||||||
|
}
|
||||||
pem = (byte*)malloc(FOURK_BUF);
|
pem = (byte*)malloc(FOURK_BUF);
|
||||||
if (pem == NULL) {
|
if (pem == NULL) {
|
||||||
free(derCert);
|
free(derCert);
|
||||||
|
free(tmp);
|
||||||
return -5312;
|
return -5312;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3855,6 +3914,7 @@ int rsa_test(void)
|
|||||||
if (!file3) {
|
if (!file3) {
|
||||||
free(derCert);
|
free(derCert);
|
||||||
free(pem);
|
free(pem);
|
||||||
|
free(tmp);
|
||||||
return -5412;
|
return -5412;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3866,6 +3926,7 @@ int rsa_test(void)
|
|||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
free(derCert);
|
free(derCert);
|
||||||
free(pem);
|
free(pem);
|
||||||
|
free(tmp);
|
||||||
return -5413;
|
return -5413;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3885,6 +3946,7 @@ int rsa_test(void)
|
|||||||
free(pem);
|
free(pem);
|
||||||
free(derCert);
|
free(derCert);
|
||||||
wc_ecc_free(&caKey);
|
wc_ecc_free(&caKey);
|
||||||
|
free(tmp);
|
||||||
return -5405;
|
return -5405;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3893,6 +3955,7 @@ int rsa_test(void)
|
|||||||
free(pem);
|
free(pem);
|
||||||
free(derCert);
|
free(derCert);
|
||||||
wc_ecc_free(&caKey);
|
wc_ecc_free(&caKey);
|
||||||
|
free(tmp);
|
||||||
return -5407;
|
return -5407;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3902,6 +3965,7 @@ int rsa_test(void)
|
|||||||
free(pem);
|
free(pem);
|
||||||
free(derCert);
|
free(derCert);
|
||||||
wc_ecc_free(&caKey);
|
wc_ecc_free(&caKey);
|
||||||
|
free(tmp);
|
||||||
return -5408;
|
return -5408;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3909,6 +3973,7 @@ int rsa_test(void)
|
|||||||
InitDecodedCert(&decode, derCert, certSz, 0);
|
InitDecodedCert(&decode, derCert, certSz, 0);
|
||||||
ret = ParseCert(&decode, CERT_TYPE, NO_VERIFY, 0);
|
ret = ParseCert(&decode, CERT_TYPE, NO_VERIFY, 0);
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
|
free(tmp);
|
||||||
free(pem);
|
free(pem);
|
||||||
free(derCert);
|
free(derCert);
|
||||||
wc_ecc_free(&caKey);
|
wc_ecc_free(&caKey);
|
||||||
@@ -3926,6 +3991,7 @@ int rsa_test(void)
|
|||||||
free(pem);
|
free(pem);
|
||||||
free(derCert);
|
free(derCert);
|
||||||
wc_ecc_free(&caKey);
|
wc_ecc_free(&caKey);
|
||||||
|
free(tmp);
|
||||||
return -5410;
|
return -5410;
|
||||||
}
|
}
|
||||||
ret = (int)fwrite(derCert, 1, certSz, derFile);
|
ret = (int)fwrite(derCert, 1, certSz, derFile);
|
||||||
@@ -3934,6 +4000,7 @@ int rsa_test(void)
|
|||||||
free(pem);
|
free(pem);
|
||||||
free(derCert);
|
free(derCert);
|
||||||
wc_ecc_free(&caKey);
|
wc_ecc_free(&caKey);
|
||||||
|
free(tmp);
|
||||||
return -5414;
|
return -5414;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3942,6 +4009,7 @@ int rsa_test(void)
|
|||||||
free(pem);
|
free(pem);
|
||||||
free(derCert);
|
free(derCert);
|
||||||
wc_ecc_free(&caKey);
|
wc_ecc_free(&caKey);
|
||||||
|
free(tmp);
|
||||||
return -5411;
|
return -5411;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3954,6 +4022,7 @@ int rsa_test(void)
|
|||||||
free(pem);
|
free(pem);
|
||||||
free(derCert);
|
free(derCert);
|
||||||
wc_ecc_free(&caKey);
|
wc_ecc_free(&caKey);
|
||||||
|
free(tmp);
|
||||||
return -5412;
|
return -5412;
|
||||||
}
|
}
|
||||||
ret = (int)fwrite(pem, 1, pemSz, pemFile);
|
ret = (int)fwrite(pem, 1, pemSz, pemFile);
|
||||||
@@ -3961,6 +4030,7 @@ int rsa_test(void)
|
|||||||
free(pem);
|
free(pem);
|
||||||
free(derCert);
|
free(derCert);
|
||||||
wc_ecc_free(&caKey);
|
wc_ecc_free(&caKey);
|
||||||
|
free(tmp);
|
||||||
return -5415;
|
return -5415;
|
||||||
}
|
}
|
||||||
fclose(pemFile);
|
fclose(pemFile);
|
||||||
@@ -3986,11 +4056,14 @@ int rsa_test(void)
|
|||||||
DecodedCert decode;
|
DecodedCert decode;
|
||||||
#endif
|
#endif
|
||||||
derCert = (byte*)malloc(FOURK_BUF);
|
derCert = (byte*)malloc(FOURK_BUF);
|
||||||
if (derCert == NULL)
|
if (derCert == NULL) {
|
||||||
|
free(tmp);
|
||||||
return -311;
|
return -311;
|
||||||
|
}
|
||||||
pem = (byte*)malloc(FOURK_BUF);
|
pem = (byte*)malloc(FOURK_BUF);
|
||||||
if (pem == NULL) {
|
if (pem == NULL) {
|
||||||
free(derCert);
|
free(derCert);
|
||||||
|
free(tmp);
|
||||||
return -312;
|
return -312;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4007,6 +4080,7 @@ int rsa_test(void)
|
|||||||
if (rc != DRBG_OK) {
|
if (rc != DRBG_OK) {
|
||||||
free(derCert);
|
free(derCert);
|
||||||
free(pem);
|
free(pem);
|
||||||
|
free(tmp);
|
||||||
return -448;
|
return -448;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4016,6 +4090,7 @@ int rsa_test(void)
|
|||||||
if (rc != NTRU_OK) {
|
if (rc != NTRU_OK) {
|
||||||
free(derCert);
|
free(derCert);
|
||||||
free(pem);
|
free(pem);
|
||||||
|
free(tmp);
|
||||||
return -449;
|
return -449;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4025,6 +4100,7 @@ int rsa_test(void)
|
|||||||
if (rc != NTRU_OK) {
|
if (rc != NTRU_OK) {
|
||||||
free(derCert);
|
free(derCert);
|
||||||
free(pem);
|
free(pem);
|
||||||
|
free(tmp);
|
||||||
return -450;
|
return -450;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4033,6 +4109,7 @@ int rsa_test(void)
|
|||||||
if (rc != NTRU_OK) {
|
if (rc != NTRU_OK) {
|
||||||
free(derCert);
|
free(derCert);
|
||||||
free(pem);
|
free(pem);
|
||||||
|
free(tmp);
|
||||||
return -451;
|
return -451;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4041,6 +4118,7 @@ int rsa_test(void)
|
|||||||
if (!caFile) {
|
if (!caFile) {
|
||||||
free(derCert);
|
free(derCert);
|
||||||
free(pem);
|
free(pem);
|
||||||
|
free(tmp);
|
||||||
return -452;
|
return -452;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4051,12 +4129,14 @@ int rsa_test(void)
|
|||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
free(derCert);
|
free(derCert);
|
||||||
free(pem);
|
free(pem);
|
||||||
|
free(tmp);
|
||||||
return -453;
|
return -453;
|
||||||
}
|
}
|
||||||
ret = wc_RsaPrivateKeyDecode(tmp, &idx3, &caKey, (word32)bytes);
|
ret = wc_RsaPrivateKeyDecode(tmp, &idx3, &caKey, (word32)bytes);
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
free(derCert);
|
free(derCert);
|
||||||
free(pem);
|
free(pem);
|
||||||
|
free(tmp);
|
||||||
return -454;
|
return -454;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4075,6 +4155,7 @@ int rsa_test(void)
|
|||||||
free(derCert);
|
free(derCert);
|
||||||
free(pem);
|
free(pem);
|
||||||
wc_FreeRsaKey(&caKey);
|
wc_FreeRsaKey(&caKey);
|
||||||
|
free(tmp);
|
||||||
return -455;
|
return -455;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4084,6 +4165,7 @@ int rsa_test(void)
|
|||||||
free(derCert);
|
free(derCert);
|
||||||
free(pem);
|
free(pem);
|
||||||
wc_FreeRsaKey(&caKey);
|
wc_FreeRsaKey(&caKey);
|
||||||
|
free(tmp);
|
||||||
return -456;
|
return -456;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4093,6 +4175,7 @@ int rsa_test(void)
|
|||||||
if (certSz < 0) {
|
if (certSz < 0) {
|
||||||
free(derCert);
|
free(derCert);
|
||||||
free(pem);
|
free(pem);
|
||||||
|
free(tmp);
|
||||||
return -457;
|
return -457;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4103,6 +4186,7 @@ int rsa_test(void)
|
|||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
free(derCert);
|
free(derCert);
|
||||||
free(pem);
|
free(pem);
|
||||||
|
free(tmp);
|
||||||
return -458;
|
return -458;
|
||||||
}
|
}
|
||||||
FreeDecodedCert(&decode);
|
FreeDecodedCert(&decode);
|
||||||
@@ -4111,6 +4195,7 @@ int rsa_test(void)
|
|||||||
if (!derFile) {
|
if (!derFile) {
|
||||||
free(derCert);
|
free(derCert);
|
||||||
free(pem);
|
free(pem);
|
||||||
|
free(tmp);
|
||||||
return -459;
|
return -459;
|
||||||
}
|
}
|
||||||
ret = (int)fwrite(derCert, 1, certSz, derFile);
|
ret = (int)fwrite(derCert, 1, certSz, derFile);
|
||||||
@@ -4118,6 +4203,7 @@ int rsa_test(void)
|
|||||||
if (ret != certSz) {
|
if (ret != certSz) {
|
||||||
free(derCert);
|
free(derCert);
|
||||||
free(pem);
|
free(pem);
|
||||||
|
free(tmp);
|
||||||
return -473;
|
return -473;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4125,6 +4211,7 @@ int rsa_test(void)
|
|||||||
if (pemSz < 0) {
|
if (pemSz < 0) {
|
||||||
free(derCert);
|
free(derCert);
|
||||||
free(pem);
|
free(pem);
|
||||||
|
free(tmp);
|
||||||
return -460;
|
return -460;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4132,6 +4219,7 @@ int rsa_test(void)
|
|||||||
if (!pemFile) {
|
if (!pemFile) {
|
||||||
free(derCert);
|
free(derCert);
|
||||||
free(pem);
|
free(pem);
|
||||||
|
free(tmp);
|
||||||
return -461;
|
return -461;
|
||||||
}
|
}
|
||||||
ret = (int)fwrite(pem, 1, pemSz, pemFile);
|
ret = (int)fwrite(pem, 1, pemSz, pemFile);
|
||||||
@@ -4139,6 +4227,7 @@ int rsa_test(void)
|
|||||||
if (ret != pemSz) {
|
if (ret != pemSz) {
|
||||||
free(derCert);
|
free(derCert);
|
||||||
free(pem);
|
free(pem);
|
||||||
|
free(tmp);
|
||||||
return -474;
|
return -474;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4146,6 +4235,7 @@ int rsa_test(void)
|
|||||||
if (!ntruPrivFile) {
|
if (!ntruPrivFile) {
|
||||||
free(derCert);
|
free(derCert);
|
||||||
free(pem);
|
free(pem);
|
||||||
|
free(tmp);
|
||||||
return -462;
|
return -462;
|
||||||
}
|
}
|
||||||
ret = (int)fwrite(private_key, 1, private_key_len, ntruPrivFile);
|
ret = (int)fwrite(private_key, 1, private_key_len, ntruPrivFile);
|
||||||
@@ -4153,6 +4243,7 @@ int rsa_test(void)
|
|||||||
if (ret != private_key_len) {
|
if (ret != private_key_len) {
|
||||||
free(pem);
|
free(pem);
|
||||||
free(derCert);
|
free(derCert);
|
||||||
|
free(tmp);
|
||||||
return -475;
|
return -475;
|
||||||
}
|
}
|
||||||
free(pem);
|
free(pem);
|
||||||
@@ -4169,11 +4260,14 @@ int rsa_test(void)
|
|||||||
FILE* reqFile;
|
FILE* reqFile;
|
||||||
|
|
||||||
der = (byte*)malloc(FOURK_BUF);
|
der = (byte*)malloc(FOURK_BUF);
|
||||||
if (der == NULL)
|
if (der == NULL) {
|
||||||
|
free(tmp);
|
||||||
return -463;
|
return -463;
|
||||||
|
}
|
||||||
pem = (byte*)malloc(FOURK_BUF);
|
pem = (byte*)malloc(FOURK_BUF);
|
||||||
if (pem == NULL) {
|
if (pem == NULL) {
|
||||||
free(der);
|
free(der);
|
||||||
|
free(tmp);
|
||||||
return -464;
|
return -464;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4195,6 +4289,7 @@ int rsa_test(void)
|
|||||||
if (derSz < 0) {
|
if (derSz < 0) {
|
||||||
free(pem);
|
free(pem);
|
||||||
free(der);
|
free(der);
|
||||||
|
free(tmp);
|
||||||
return -465;
|
return -465;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4203,6 +4298,7 @@ int rsa_test(void)
|
|||||||
if (derSz < 0) {
|
if (derSz < 0) {
|
||||||
free(pem);
|
free(pem);
|
||||||
free(der);
|
free(der);
|
||||||
|
free(tmp);
|
||||||
return -466;
|
return -466;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4210,6 +4306,7 @@ int rsa_test(void)
|
|||||||
if (pemSz < 0) {
|
if (pemSz < 0) {
|
||||||
free(pem);
|
free(pem);
|
||||||
free(der);
|
free(der);
|
||||||
|
free(tmp);
|
||||||
return -467;
|
return -467;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4221,6 +4318,7 @@ int rsa_test(void)
|
|||||||
if (!reqFile) {
|
if (!reqFile) {
|
||||||
free(pem);
|
free(pem);
|
||||||
free(der);
|
free(der);
|
||||||
|
free(tmp);
|
||||||
return -468;
|
return -468;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4229,6 +4327,7 @@ int rsa_test(void)
|
|||||||
if (ret != derSz) {
|
if (ret != derSz) {
|
||||||
free(pem);
|
free(pem);
|
||||||
free(der);
|
free(der);
|
||||||
|
free(tmp);
|
||||||
return -471;
|
return -471;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4240,6 +4339,7 @@ int rsa_test(void)
|
|||||||
if (!reqFile) {
|
if (!reqFile) {
|
||||||
free(pem);
|
free(pem);
|
||||||
free(der);
|
free(der);
|
||||||
|
free(tmp);
|
||||||
return -469;
|
return -469;
|
||||||
}
|
}
|
||||||
ret = (int)fwrite(pem, 1, pemSz, reqFile);
|
ret = (int)fwrite(pem, 1, pemSz, reqFile);
|
||||||
@@ -4247,6 +4347,7 @@ int rsa_test(void)
|
|||||||
if (ret != pemSz) {
|
if (ret != pemSz) {
|
||||||
free(pem);
|
free(pem);
|
||||||
free(der);
|
free(der);
|
||||||
|
free(tmp);
|
||||||
return -470;
|
return -470;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4295,7 +4396,7 @@ int dh_test(void)
|
|||||||
byte agree2[256];
|
byte agree2[256];
|
||||||
DhKey key;
|
DhKey key;
|
||||||
DhKey key2;
|
DhKey key2;
|
||||||
RNG rng;
|
WC_RNG rng;
|
||||||
|
|
||||||
#ifdef USE_CERT_BUFFERS_1024
|
#ifdef USE_CERT_BUFFERS_1024
|
||||||
XMEMCPY(tmp, dh_key_der_1024, sizeof_dh_key_der_1024);
|
XMEMCPY(tmp, dh_key_der_1024, sizeof_dh_key_der_1024);
|
||||||
@@ -4384,7 +4485,7 @@ int dsa_test(void)
|
|||||||
word32 idx = 0;
|
word32 idx = 0;
|
||||||
byte tmp[1024];
|
byte tmp[1024];
|
||||||
DsaKey key;
|
DsaKey key;
|
||||||
RNG rng;
|
WC_RNG rng;
|
||||||
Sha sha;
|
Sha sha;
|
||||||
byte hash[SHA_DIGEST_SIZE];
|
byte hash[SHA_DIGEST_SIZE];
|
||||||
byte signature[40];
|
byte signature[40];
|
||||||
@@ -4537,6 +4638,101 @@ int dsa_test(void)
|
|||||||
|
|
||||||
#endif /* NO_DSA */
|
#endif /* NO_DSA */
|
||||||
|
|
||||||
|
#ifdef WOLFCRYPT_HAVE_SRP
|
||||||
|
|
||||||
|
int srp_test(void)
|
||||||
|
{
|
||||||
|
Srp cli, srv;
|
||||||
|
int r;
|
||||||
|
|
||||||
|
byte clientPubKey[80]; /* A */
|
||||||
|
byte serverPubKey[80]; /* B */
|
||||||
|
word32 clientPubKeySz = 80;
|
||||||
|
word32 serverPubKeySz = 80;
|
||||||
|
byte clientProof[SRP_MAX_DIGEST_SIZE]; /* M1 */
|
||||||
|
byte serverProof[SRP_MAX_DIGEST_SIZE]; /* M2 */
|
||||||
|
word32 clientProofSz = SRP_MAX_DIGEST_SIZE;
|
||||||
|
word32 serverProofSz = SRP_MAX_DIGEST_SIZE;
|
||||||
|
|
||||||
|
byte username[] = "user";
|
||||||
|
word32 usernameSz = 4;
|
||||||
|
|
||||||
|
byte password[] = "password";
|
||||||
|
word32 passwordSz = 8;
|
||||||
|
|
||||||
|
byte N[] = {
|
||||||
|
0xC9, 0x4D, 0x67, 0xEB, 0x5B, 0x1A, 0x23, 0x46, 0xE8, 0xAB, 0x42, 0x2F,
|
||||||
|
0xC6, 0xA0, 0xED, 0xAE, 0xDA, 0x8C, 0x7F, 0x89, 0x4C, 0x9E, 0xEE, 0xC4,
|
||||||
|
0x2F, 0x9E, 0xD2, 0x50, 0xFD, 0x7F, 0x00, 0x46, 0xE5, 0xAF, 0x2C, 0xF7,
|
||||||
|
0x3D, 0x6B, 0x2F, 0xA2, 0x6B, 0xB0, 0x80, 0x33, 0xDA, 0x4D, 0xE3, 0x22,
|
||||||
|
0xE1, 0x44, 0xE7, 0xA8, 0xE9, 0xB1, 0x2A, 0x0E, 0x46, 0x37, 0xF6, 0x37,
|
||||||
|
0x1F, 0x34, 0xA2, 0x07, 0x1C, 0x4B, 0x38, 0x36, 0xCB, 0xEE, 0xAB, 0x15,
|
||||||
|
0x03, 0x44, 0x60, 0xFA, 0xA7, 0xAD, 0xF4, 0x83
|
||||||
|
};
|
||||||
|
|
||||||
|
byte g[] = {
|
||||||
|
0x02
|
||||||
|
};
|
||||||
|
|
||||||
|
byte salt[] = {
|
||||||
|
0xB2, 0xE5, 0x8E, 0xCC, 0xD0, 0xCF, 0x9D, 0x10, 0x3A, 0x56
|
||||||
|
};
|
||||||
|
|
||||||
|
byte verifier[] = {
|
||||||
|
0x7C, 0xAB, 0x17, 0xFE, 0x54, 0x3E, 0x8C, 0x13, 0xF2, 0x3D, 0x21, 0xE7,
|
||||||
|
0xD2, 0xAF, 0xAF, 0xDB, 0xA1, 0x52, 0x69, 0x9D, 0x49, 0x01, 0x79, 0x91,
|
||||||
|
0xCF, 0xD1, 0x3F, 0xE5, 0x28, 0x72, 0xCA, 0xBE, 0x13, 0xD1, 0xC2, 0xDA,
|
||||||
|
0x65, 0x34, 0x55, 0x8F, 0x34, 0x0E, 0x05, 0xB8, 0xB4, 0x0F, 0x7F, 0x6B,
|
||||||
|
0xBB, 0xB0, 0x6B, 0x50, 0xD8, 0xB1, 0xCC, 0xB7, 0x81, 0xFE, 0xD4, 0x42,
|
||||||
|
0xF5, 0x11, 0xBC, 0x8A, 0x28, 0xEB, 0x50, 0xB3, 0x46, 0x08, 0xBA, 0x24,
|
||||||
|
0xA2, 0xFB, 0x7F, 0x2E, 0x0A, 0xA5, 0x33, 0xCC
|
||||||
|
};
|
||||||
|
|
||||||
|
/* client knows username and password. */
|
||||||
|
/* server knows N, g, salt and verifier. */
|
||||||
|
|
||||||
|
r = wc_SrpInit(&cli, SRP_TYPE_SHA, SRP_CLIENT_SIDE);
|
||||||
|
if (!r) r = wc_SrpSetUsername(&cli, username, usernameSz);
|
||||||
|
|
||||||
|
/* client sends username to server */
|
||||||
|
|
||||||
|
if (!r) r = wc_SrpInit(&srv, SRP_TYPE_SHA, SRP_SERVER_SIDE);
|
||||||
|
if (!r) r = wc_SrpSetUsername(&srv, username, usernameSz);
|
||||||
|
if (!r) r = wc_SrpSetParams(&srv, N, sizeof(N),
|
||||||
|
g, sizeof(g),
|
||||||
|
salt, sizeof(salt));
|
||||||
|
if (!r) r = wc_SrpSetVerifier(&srv, verifier, sizeof(verifier));
|
||||||
|
if (!r) r = wc_SrpGetPublic(&srv, serverPubKey, &serverPubKeySz);
|
||||||
|
|
||||||
|
/* server sends N, g, salt and B to client */
|
||||||
|
|
||||||
|
if (!r) r = wc_SrpSetParams(&cli, N, sizeof(N),
|
||||||
|
g, sizeof(g),
|
||||||
|
salt, sizeof(salt));
|
||||||
|
if (!r) r = wc_SrpSetPassword(&cli, password, passwordSz);
|
||||||
|
if (!r) r = wc_SrpGetPublic(&cli, clientPubKey, &clientPubKeySz);
|
||||||
|
if (!r) r = wc_SrpComputeKey(&cli, clientPubKey, clientPubKeySz,
|
||||||
|
serverPubKey, serverPubKeySz);
|
||||||
|
if (!r) r = wc_SrpGetProof(&cli, clientProof, &clientProofSz);
|
||||||
|
|
||||||
|
/* client sends A and M1 to server */
|
||||||
|
|
||||||
|
if (!r) r = wc_SrpComputeKey(&srv, clientPubKey, clientPubKeySz,
|
||||||
|
serverPubKey, serverPubKeySz);
|
||||||
|
if (!r) r = wc_SrpVerifyPeersProof(&srv, clientProof, clientProofSz);
|
||||||
|
if (!r) r = wc_SrpGetProof(&srv, serverProof, &serverProofSz);
|
||||||
|
|
||||||
|
/* server sends M2 to client */
|
||||||
|
|
||||||
|
if (!r) r = wc_SrpVerifyPeersProof(&cli, serverProof, serverProofSz);
|
||||||
|
|
||||||
|
wc_SrpTerm(&cli);
|
||||||
|
wc_SrpTerm(&srv);
|
||||||
|
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* WOLFCRYPT_HAVE_SRP */
|
||||||
|
|
||||||
#ifdef OPENSSL_EXTRA
|
#ifdef OPENSSL_EXTRA
|
||||||
|
|
||||||
@@ -5000,7 +5196,7 @@ typedef struct rawEccVector {
|
|||||||
|
|
||||||
int ecc_test(void)
|
int ecc_test(void)
|
||||||
{
|
{
|
||||||
RNG rng;
|
WC_RNG rng;
|
||||||
byte sharedA[1024];
|
byte sharedA[1024];
|
||||||
byte sharedB[1024];
|
byte sharedB[1024];
|
||||||
byte sig[1024];
|
byte sig[1024];
|
||||||
@@ -5256,7 +5452,7 @@ int ecc_test(void)
|
|||||||
|
|
||||||
int ecc_encrypt_test(void)
|
int ecc_encrypt_test(void)
|
||||||
{
|
{
|
||||||
RNG rng;
|
WC_RNG rng;
|
||||||
int ret;
|
int ret;
|
||||||
ecc_key userA, userB;
|
ecc_key userA, userB;
|
||||||
byte msg[48];
|
byte msg[48];
|
||||||
@@ -5391,7 +5587,7 @@ int ecc_encrypt_test(void)
|
|||||||
|
|
||||||
int curve25519_test(void)
|
int curve25519_test(void)
|
||||||
{
|
{
|
||||||
RNG rng;
|
WC_RNG rng;
|
||||||
byte sharedA[32];
|
byte sharedA[32];
|
||||||
byte sharedB[32];
|
byte sharedB[32];
|
||||||
byte exportBuf[32];
|
byte exportBuf[32];
|
||||||
@@ -5554,7 +5750,7 @@ int curve25519_test(void)
|
|||||||
#ifdef HAVE_ED25519
|
#ifdef HAVE_ED25519
|
||||||
int ed25519_test(void)
|
int ed25519_test(void)
|
||||||
{
|
{
|
||||||
RNG rng;
|
WC_RNG rng;
|
||||||
byte out[ED25519_SIG_SIZE];
|
byte out[ED25519_SIG_SIZE];
|
||||||
byte exportPKey[ED25519_KEY_SIZE];
|
byte exportPKey[ED25519_KEY_SIZE];
|
||||||
byte exportSKey[ED25519_KEY_SIZE];
|
byte exportSKey[ED25519_KEY_SIZE];
|
||||||
@@ -6204,8 +6400,8 @@ int pkcs7signed_test(void)
|
|||||||
byte* out;
|
byte* out;
|
||||||
char data[] = "Hello World";
|
char data[] = "Hello World";
|
||||||
word32 dataSz, outSz, certDerSz, keyDerSz;
|
word32 dataSz, outSz, certDerSz, keyDerSz;
|
||||||
PKCS7 msg;
|
PKCS7 msg;
|
||||||
RNG rng;
|
WC_RNG rng;
|
||||||
|
|
||||||
byte transIdOid[] =
|
byte transIdOid[] =
|
||||||
{ 0x06, 0x0a, 0x60, 0x86, 0x48, 0x01, 0x86, 0xF8, 0x45, 0x01,
|
{ 0x06, 0x0a, 0x60, 0x86, 0x48, 0x01, 0x86, 0xF8, 0x45, 0x01,
|
||||||
|
|||||||
@@ -291,6 +291,10 @@
|
|||||||
RelativePath=".\src\tls.c"
|
RelativePath=".\src\tls.c"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="wolfcrypt\src\wc_encrypt.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
</Filter>
|
</Filter>
|
||||||
<Filter
|
<Filter
|
||||||
Name="Header Files"
|
Name="Header Files"
|
||||||
|
|||||||
@@ -308,6 +308,7 @@
|
|||||||
<ClCompile Include="wolfcrypt\src\sha.c" />
|
<ClCompile Include="wolfcrypt\src\sha.c" />
|
||||||
<ClCompile Include="wolfcrypt\src\sha256.c" />
|
<ClCompile Include="wolfcrypt\src\sha256.c" />
|
||||||
<ClCompile Include="wolfcrypt\src\sha512.c" />
|
<ClCompile Include="wolfcrypt\src\sha512.c" />
|
||||||
|
<ClCompile Include="wolfcrypt\src\wc_encrypt.c" />
|
||||||
<ClCompile Include="src\ssl.c" />
|
<ClCompile Include="src\ssl.c" />
|
||||||
<ClCompile Include="src\tls.c" />
|
<ClCompile Include="src\tls.c" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|||||||
@@ -331,7 +331,9 @@ typedef byte word24[3];
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined(NO_HC128) && !defined(NO_RSA) && !defined(NO_TLS)
|
#if !defined(NO_HC128) && !defined(NO_RSA) && !defined(NO_TLS)
|
||||||
#define BUILD_TLS_RSA_WITH_HC_128_MD5
|
#ifndef NO_MD5
|
||||||
|
#define BUILD_TLS_RSA_WITH_HC_128_MD5
|
||||||
|
#endif
|
||||||
#if !defined(NO_SHA)
|
#if !defined(NO_SHA)
|
||||||
#define BUILD_TLS_RSA_WITH_HC_128_SHA
|
#define BUILD_TLS_RSA_WITH_HC_128_SHA
|
||||||
#endif
|
#endif
|
||||||
@@ -366,13 +368,17 @@ typedef byte word24[3];
|
|||||||
|
|
||||||
#if !defined(NO_DH) && !defined(NO_PSK) && !defined(NO_TLS)
|
#if !defined(NO_DH) && !defined(NO_PSK) && !defined(NO_TLS)
|
||||||
#ifndef NO_SHA256
|
#ifndef NO_SHA256
|
||||||
#define BUILD_TLS_DHE_PSK_WITH_AES_128_CBC_SHA256
|
#ifndef NO_AES
|
||||||
|
#define BUILD_TLS_DHE_PSK_WITH_AES_128_CBC_SHA256
|
||||||
|
#endif
|
||||||
#ifdef HAVE_NULL_CIPHER
|
#ifdef HAVE_NULL_CIPHER
|
||||||
#define BUILD_TLS_DHE_PSK_WITH_NULL_SHA256
|
#define BUILD_TLS_DHE_PSK_WITH_NULL_SHA256
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#ifdef WOLFSSL_SHA384
|
#ifdef WOLFSSL_SHA384
|
||||||
#define BUILD_TLS_DHE_PSK_WITH_AES_256_CBC_SHA384
|
#ifndef NO_AES
|
||||||
|
#define BUILD_TLS_DHE_PSK_WITH_AES_256_CBC_SHA384
|
||||||
|
#endif
|
||||||
#ifdef HAVE_NULL_CIPHER
|
#ifdef HAVE_NULL_CIPHER
|
||||||
#define BUILD_TLS_DHE_PSK_WITH_NULL_SHA384
|
#define BUILD_TLS_DHE_PSK_WITH_NULL_SHA384
|
||||||
#endif
|
#endif
|
||||||
@@ -385,46 +391,66 @@ typedef byte word24[3];
|
|||||||
#if !defined(NO_RSA)
|
#if !defined(NO_RSA)
|
||||||
#define BUILD_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
|
#define BUILD_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
|
||||||
#define BUILD_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
|
#define BUILD_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
|
||||||
#define BUILD_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA
|
#if defined(WOLFSSL_STATIC_DH)
|
||||||
#define BUILD_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA
|
#define BUILD_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA
|
||||||
|
#define BUILD_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define BUILD_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
|
#define BUILD_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
|
||||||
#define BUILD_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
|
#define BUILD_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
|
||||||
|
|
||||||
#define BUILD_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA
|
#if defined(WOLFSSL_STATIC_DH)
|
||||||
#define BUILD_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA
|
#define BUILD_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA
|
||||||
|
#define BUILD_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA
|
||||||
|
#endif
|
||||||
#endif /* NO_SHA */
|
#endif /* NO_SHA */
|
||||||
#ifndef NO_SHA256
|
#ifndef NO_SHA256
|
||||||
#if !defined(NO_RSA)
|
#if !defined(NO_RSA)
|
||||||
#define BUILD_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
|
#define BUILD_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
|
||||||
#define BUILD_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256
|
#if defined(WOLFSSL_STATIC_DH)
|
||||||
|
#define BUILD_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#define BUILD_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
|
#define BUILD_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
|
||||||
#define BUILD_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256
|
#if defined(WOLFSSL_STATIC_DH)
|
||||||
|
#define BUILD_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef WOLFSSL_SHA384
|
#ifdef WOLFSSL_SHA384
|
||||||
#if !defined(NO_RSA)
|
#if !defined(NO_RSA)
|
||||||
#define BUILD_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
|
#define BUILD_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
|
||||||
#define BUILD_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384
|
#if defined(WOLFSSL_STATIC_DH)
|
||||||
|
#define BUILD_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#define BUILD_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
|
#define BUILD_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
|
||||||
#define BUILD_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384
|
#if defined(WOLFSSL_STATIC_DH)
|
||||||
|
#define BUILD_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined (HAVE_AESGCM)
|
#if defined (HAVE_AESGCM)
|
||||||
#if !defined(NO_RSA)
|
#if !defined(NO_RSA)
|
||||||
#define BUILD_TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256
|
#if defined(WOLFSSL_STATIC_DH)
|
||||||
|
#define BUILD_TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256
|
||||||
|
#endif
|
||||||
#if defined(WOLFSSL_SHA384)
|
#if defined(WOLFSSL_SHA384)
|
||||||
#define BUILD_TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384
|
#if defined(WOLFSSL_STATIC_DH)
|
||||||
|
#define BUILD_TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define BUILD_TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256
|
#if defined(WOLFSSL_STATIC_DH)
|
||||||
|
#define BUILD_TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(WOLFSSL_SHA384)
|
#if defined(WOLFSSL_SHA384)
|
||||||
#define BUILD_TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384
|
#if defined(WOLFSSL_STATIC_DH)
|
||||||
|
#define BUILD_TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#endif /* NO_AES */
|
#endif /* NO_AES */
|
||||||
@@ -432,22 +458,30 @@ typedef byte word24[3];
|
|||||||
#if !defined(NO_SHA)
|
#if !defined(NO_SHA)
|
||||||
#if !defined(NO_RSA)
|
#if !defined(NO_RSA)
|
||||||
#define BUILD_TLS_ECDHE_RSA_WITH_RC4_128_SHA
|
#define BUILD_TLS_ECDHE_RSA_WITH_RC4_128_SHA
|
||||||
#define BUILD_TLS_ECDH_RSA_WITH_RC4_128_SHA
|
#if defined(WOLFSSL_STATIC_DH)
|
||||||
|
#define BUILD_TLS_ECDH_RSA_WITH_RC4_128_SHA
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define BUILD_TLS_ECDHE_ECDSA_WITH_RC4_128_SHA
|
#define BUILD_TLS_ECDHE_ECDSA_WITH_RC4_128_SHA
|
||||||
#define BUILD_TLS_ECDH_ECDSA_WITH_RC4_128_SHA
|
#if defined(WOLFSSL_STATIC_DH)
|
||||||
|
#define BUILD_TLS_ECDH_ECDSA_WITH_RC4_128_SHA
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#if !defined(NO_DES3)
|
#if !defined(NO_DES3)
|
||||||
#ifndef NO_SHA
|
#ifndef NO_SHA
|
||||||
#if !defined(NO_RSA)
|
#if !defined(NO_RSA)
|
||||||
#define BUILD_TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA
|
#define BUILD_TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA
|
||||||
#define BUILD_TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA
|
#if defined(WOLFSSL_STATIC_DH)
|
||||||
|
#define BUILD_TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define BUILD_TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA
|
#define BUILD_TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA
|
||||||
#define BUILD_TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA
|
#if defined(WOLFSSL_STATIC_DH)
|
||||||
|
#define BUILD_TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA
|
||||||
|
#endif
|
||||||
#endif /* NO_SHA */
|
#endif /* NO_SHA */
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
@@ -2215,7 +2249,7 @@ struct WOLFSSL {
|
|||||||
HS_Hashes* hsHashes;
|
HS_Hashes* hsHashes;
|
||||||
void* IOCB_ReadCtx;
|
void* IOCB_ReadCtx;
|
||||||
void* IOCB_WriteCtx;
|
void* IOCB_WriteCtx;
|
||||||
RNG* rng;
|
WC_RNG* rng;
|
||||||
void* verifyCbCtx; /* cert verify callback user ctx*/
|
void* verifyCbCtx; /* cert verify callback user ctx*/
|
||||||
VerifyCallback verifyCallback; /* cert verification callback */
|
VerifyCallback verifyCallback; /* cert verification callback */
|
||||||
void* heap; /* for user overrides */
|
void* heap; /* for user overrides */
|
||||||
|
|||||||
@@ -107,6 +107,7 @@
|
|||||||
#define CLIENT_HELLO_LATE_KEY_STR 72
|
#define CLIENT_HELLO_LATE_KEY_STR 72
|
||||||
#define GOT_CERT_STATUS_STR 73
|
#define GOT_CERT_STATUS_STR 73
|
||||||
#define RSA_KEY_MISSING_STR 74
|
#define RSA_KEY_MISSING_STR 74
|
||||||
|
#define NO_SECURE_RENEGOTIATION 75
|
||||||
/* !!!! also add to msgTable in sniffer.c and .rc file !!!! */
|
/* !!!! also add to msgTable in sniffer.c and .rc file !!!! */
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -89,5 +89,6 @@ STRINGTABLE
|
|||||||
72, "Late Key Load Error"
|
72, "Late Key Load Error"
|
||||||
73, "Got Certificate Status msg"
|
73, "Got Certificate Status msg"
|
||||||
74, "RSA Key Missing Error"
|
74, "RSA Key Missing Error"
|
||||||
|
75, "Secure Renegotiation Not Supported"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -32,7 +32,11 @@
|
|||||||
|
|
||||||
#ifndef NO_FILESYSTEM
|
#ifndef NO_FILESYSTEM
|
||||||
#ifdef FREESCALE_MQX
|
#ifdef FREESCALE_MQX
|
||||||
#include <fio.h>
|
#if MQX_USE_IO_OLD
|
||||||
|
#include <fio.h>
|
||||||
|
#else
|
||||||
|
#include <nio.h>
|
||||||
|
#endif
|
||||||
#else
|
#else
|
||||||
#include <stdio.h> /* ERR_printf */
|
#include <stdio.h> /* ERR_printf */
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -1520,6 +1520,8 @@ static INLINE int myDecryptVerifyCb(WOLFSSL* ssl,
|
|||||||
|
|
||||||
/* decrypt */
|
/* decrypt */
|
||||||
ret = wc_AesCbcDecrypt(&decCtx->aes, decOut, decIn, decSz);
|
ret = wc_AesCbcDecrypt(&decCtx->aes, decOut, decIn, decSz);
|
||||||
|
if (ret != 0)
|
||||||
|
return ret;
|
||||||
|
|
||||||
if (wolfSSL_GetCipherType(ssl) == WOLFSSL_AEAD_TYPE) {
|
if (wolfSSL_GetCipherType(ssl) == WOLFSSL_AEAD_TYPE) {
|
||||||
*padSz = wolfSSL_GetAeadMacSize(ssl);
|
*padSz = wolfSSL_GetAeadMacSize(ssl);
|
||||||
@@ -1606,7 +1608,7 @@ static INLINE void FreeAtomicUser(WOLFSSL* ssl)
|
|||||||
static INLINE int myEccSign(WOLFSSL* ssl, const byte* in, word32 inSz,
|
static INLINE int myEccSign(WOLFSSL* ssl, const byte* in, word32 inSz,
|
||||||
byte* out, word32* outSz, const byte* key, word32 keySz, void* ctx)
|
byte* out, word32* outSz, const byte* key, word32 keySz, void* ctx)
|
||||||
{
|
{
|
||||||
RNG rng;
|
WC_RNG rng;
|
||||||
int ret;
|
int ret;
|
||||||
word32 idx = 0;
|
word32 idx = 0;
|
||||||
ecc_key myKey;
|
ecc_key myKey;
|
||||||
@@ -1657,7 +1659,7 @@ static INLINE int myEccVerify(WOLFSSL* ssl, const byte* sig, word32 sigSz,
|
|||||||
static INLINE int myRsaSign(WOLFSSL* ssl, const byte* in, word32 inSz,
|
static INLINE int myRsaSign(WOLFSSL* ssl, const byte* in, word32 inSz,
|
||||||
byte* out, word32* outSz, const byte* key, word32 keySz, void* ctx)
|
byte* out, word32* outSz, const byte* key, word32 keySz, void* ctx)
|
||||||
{
|
{
|
||||||
RNG rng;
|
WC_RNG rng;
|
||||||
int ret;
|
int ret;
|
||||||
word32 idx = 0;
|
word32 idx = 0;
|
||||||
RsaKey myKey;
|
RsaKey myKey;
|
||||||
@@ -1715,7 +1717,7 @@ static INLINE int myRsaEnc(WOLFSSL* ssl, const byte* in, word32 inSz,
|
|||||||
int ret;
|
int ret;
|
||||||
word32 idx = 0;
|
word32 idx = 0;
|
||||||
RsaKey myKey;
|
RsaKey myKey;
|
||||||
RNG rng;
|
WC_RNG rng;
|
||||||
|
|
||||||
(void)ssl;
|
(void)ssl;
|
||||||
(void)ctx;
|
(void)ctx;
|
||||||
@@ -1820,8 +1822,8 @@ static INLINE const char* mymktemp(char *tempfn, int len, int num)
|
|||||||
int x, size;
|
int x, size;
|
||||||
static const char alphanum[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
static const char alphanum[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||||
"abcdefghijklmnopqrstuvwxyz";
|
"abcdefghijklmnopqrstuvwxyz";
|
||||||
RNG rng;
|
WC_RNG rng;
|
||||||
byte out;
|
byte out;
|
||||||
|
|
||||||
if (tempfn == NULL || len < 1 || num < 1 || len <= num) {
|
if (tempfn == NULL || len < 1 || num < 1 || len <= num) {
|
||||||
printf("Bad input\n");
|
printf("Bad input\n");
|
||||||
@@ -1862,7 +1864,7 @@ static INLINE const char* mymktemp(char *tempfn, int len, int num)
|
|||||||
} key_ctx;
|
} key_ctx;
|
||||||
|
|
||||||
static key_ctx myKey_ctx;
|
static key_ctx myKey_ctx;
|
||||||
static RNG rng;
|
static WC_RNG rng;
|
||||||
|
|
||||||
static INLINE int TicketInit(void)
|
static INLINE int TicketInit(void)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -26,8 +26,8 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define LIBWOLFSSL_VERSION_STRING "3.6.2"
|
#define LIBWOLFSSL_VERSION_STRING "3.6.3"
|
||||||
#define LIBWOLFSSL_VERSION_HEX 0x03006002
|
#define LIBWOLFSSL_VERSION_HEX 0x03006003
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -133,12 +133,6 @@ WOLFSSL_API int wc_AesCbcEncrypt(Aes* aes, byte* out,
|
|||||||
const byte* in, word32 sz);
|
const byte* in, word32 sz);
|
||||||
WOLFSSL_API int wc_AesCbcDecrypt(Aes* aes, byte* out,
|
WOLFSSL_API int wc_AesCbcDecrypt(Aes* aes, byte* out,
|
||||||
const byte* in, word32 sz);
|
const byte* in, word32 sz);
|
||||||
WOLFSSL_API int wc_AesCbcEncryptWithKey(byte* out, const byte* in, word32 inSz,
|
|
||||||
const byte* key, word32 keySz,
|
|
||||||
const byte* iv);
|
|
||||||
WOLFSSL_API int wc_AesCbcDecryptWithKey(byte* out, const byte* in, word32 inSz,
|
|
||||||
const byte* key, word32 keySz,
|
|
||||||
const byte* iv);
|
|
||||||
|
|
||||||
/* AES-CTR */
|
/* AES-CTR */
|
||||||
#ifdef WOLFSSL_AES_COUNTER
|
#ifdef WOLFSSL_AES_COUNTER
|
||||||
|
|||||||
@@ -149,15 +149,15 @@ typedef struct Cert {
|
|||||||
*/
|
*/
|
||||||
WOLFSSL_API void wc_InitCert(Cert*);
|
WOLFSSL_API void wc_InitCert(Cert*);
|
||||||
WOLFSSL_API int wc_MakeCert(Cert*, byte* derBuffer, word32 derSz, RsaKey*,
|
WOLFSSL_API int wc_MakeCert(Cert*, byte* derBuffer, word32 derSz, RsaKey*,
|
||||||
ecc_key*, RNG*);
|
ecc_key*, WC_RNG*);
|
||||||
#ifdef WOLFSSL_CERT_REQ
|
#ifdef WOLFSSL_CERT_REQ
|
||||||
WOLFSSL_API int wc_MakeCertReq(Cert*, byte* derBuffer, word32 derSz,
|
WOLFSSL_API int wc_MakeCertReq(Cert*, byte* derBuffer, word32 derSz,
|
||||||
RsaKey*, ecc_key*);
|
RsaKey*, ecc_key*);
|
||||||
#endif
|
#endif
|
||||||
WOLFSSL_API int wc_SignCert(int requestSz, int sigType, byte* derBuffer,
|
WOLFSSL_API int wc_SignCert(int requestSz, int sigType, byte* derBuffer,
|
||||||
word32 derSz, RsaKey*, ecc_key*, RNG*);
|
word32 derSz, RsaKey*, ecc_key*, WC_RNG*);
|
||||||
WOLFSSL_API int wc_MakeSelfCert(Cert*, byte* derBuffer, word32 derSz, RsaKey*,
|
WOLFSSL_API int wc_MakeSelfCert(Cert*, byte* derBuffer, word32 derSz, RsaKey*,
|
||||||
RNG*);
|
WC_RNG*);
|
||||||
WOLFSSL_API int wc_SetIssuer(Cert*, const char*);
|
WOLFSSL_API int wc_SetIssuer(Cert*, const char*);
|
||||||
WOLFSSL_API int wc_SetSubject(Cert*, const char*);
|
WOLFSSL_API int wc_SetSubject(Cert*, const char*);
|
||||||
#ifdef WOLFSSL_ALT_NAMES
|
#ifdef WOLFSSL_ALT_NAMES
|
||||||
@@ -170,7 +170,8 @@ WOLFSSL_API int wc_SetDatesBuffer(Cert*, const byte*, int);
|
|||||||
|
|
||||||
#ifdef HAVE_NTRU
|
#ifdef HAVE_NTRU
|
||||||
WOLFSSL_API int wc_MakeNtruCert(Cert*, byte* derBuffer, word32 derSz,
|
WOLFSSL_API int wc_MakeNtruCert(Cert*, byte* derBuffer, word32 derSz,
|
||||||
const byte* ntruKey, word16 keySz, RNG*);
|
const byte* ntruKey, word16 keySz,
|
||||||
|
WC_RNG*);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* WOLFSSL_CERT_GEN */
|
#endif /* WOLFSSL_CERT_GEN */
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ enum {
|
|||||||
};
|
};
|
||||||
|
|
||||||
WOLFSSL_API
|
WOLFSSL_API
|
||||||
int wc_curve25519_make_key(RNG* rng, int keysize, curve25519_key* key);
|
int wc_curve25519_make_key(WC_RNG* rng, int keysize, curve25519_key* key);
|
||||||
|
|
||||||
WOLFSSL_API
|
WOLFSSL_API
|
||||||
int wc_curve25519_shared_secret(curve25519_key* private_key,
|
int wc_curve25519_shared_secret(curve25519_key* private_key,
|
||||||
|
|||||||
@@ -92,12 +92,6 @@ WOLFSSL_API int wc_Des_CbcDecrypt(Des* des, byte* out,
|
|||||||
const byte* in, word32 sz);
|
const byte* in, word32 sz);
|
||||||
WOLFSSL_API int wc_Des_EcbEncrypt(Des* des, byte* out,
|
WOLFSSL_API int wc_Des_EcbEncrypt(Des* des, byte* out,
|
||||||
const byte* in, word32 sz);
|
const byte* in, word32 sz);
|
||||||
WOLFSSL_API int wc_Des_CbcDecryptWithKey(byte* out,
|
|
||||||
const byte* in, word32 sz,
|
|
||||||
const byte* key, const byte* iv);
|
|
||||||
WOLFSSL_API int wc_Des_CbcEncryptWithKey(byte* out,
|
|
||||||
const byte* in, word32 sz,
|
|
||||||
const byte* key, const byte* iv);
|
|
||||||
|
|
||||||
WOLFSSL_API int wc_Des3_SetKey(Des3* des, const byte* key,
|
WOLFSSL_API int wc_Des3_SetKey(Des3* des, const byte* key,
|
||||||
const byte* iv,int dir);
|
const byte* iv,int dir);
|
||||||
@@ -106,12 +100,6 @@ WOLFSSL_API int wc_Des3_CbcEncrypt(Des3* des, byte* out,
|
|||||||
const byte* in,word32 sz);
|
const byte* in,word32 sz);
|
||||||
WOLFSSL_API int wc_Des3_CbcDecrypt(Des3* des, byte* out,
|
WOLFSSL_API int wc_Des3_CbcDecrypt(Des3* des, byte* out,
|
||||||
const byte* in,word32 sz);
|
const byte* in,word32 sz);
|
||||||
WOLFSSL_API int wc_Des3_CbcEncryptWithKey(byte* out,
|
|
||||||
const byte* in, word32 sz,
|
|
||||||
const byte* key, const byte* iv);
|
|
||||||
WOLFSSL_API int wc_Des3_CbcDecryptWithKey(byte* out,
|
|
||||||
const byte* in, word32 sz,
|
|
||||||
const byte* key, const byte* iv);
|
|
||||||
|
|
||||||
#ifdef HAVE_CAVIUM
|
#ifdef HAVE_CAVIUM
|
||||||
WOLFSSL_API int wc_Des3_InitCavium(Des3*, int);
|
WOLFSSL_API int wc_Des3_InitCavium(Des3*, int);
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ typedef struct DhKey {
|
|||||||
WOLFSSL_API void wc_InitDhKey(DhKey* key);
|
WOLFSSL_API void wc_InitDhKey(DhKey* key);
|
||||||
WOLFSSL_API void wc_FreeDhKey(DhKey* key);
|
WOLFSSL_API void wc_FreeDhKey(DhKey* key);
|
||||||
|
|
||||||
WOLFSSL_API int wc_DhGenerateKeyPair(DhKey* key, RNG* rng, byte* priv,
|
WOLFSSL_API int wc_DhGenerateKeyPair(DhKey* key, WC_RNG* rng, byte* priv,
|
||||||
word32* privSz, byte* pub, word32* pubSz);
|
word32* privSz, byte* pub, word32* pubSz);
|
||||||
WOLFSSL_API int wc_DhAgree(DhKey* key, byte* agree, word32* agreeSz,
|
WOLFSSL_API int wc_DhAgree(DhKey* key, byte* agree, word32* agreeSz,
|
||||||
const byte* priv, word32 privSz, const byte* otherPub,
|
const byte* priv, word32 privSz, const byte* otherPub,
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ typedef struct DsaKey {
|
|||||||
WOLFSSL_API void wc_InitDsaKey(DsaKey* key);
|
WOLFSSL_API void wc_InitDsaKey(DsaKey* key);
|
||||||
WOLFSSL_API void wc_FreeDsaKey(DsaKey* key);
|
WOLFSSL_API void wc_FreeDsaKey(DsaKey* key);
|
||||||
WOLFSSL_API int wc_DsaSign(const byte* digest, byte* out,
|
WOLFSSL_API int wc_DsaSign(const byte* digest, byte* out,
|
||||||
DsaKey* key, RNG* rng);
|
DsaKey* key, WC_RNG* rng);
|
||||||
WOLFSSL_API int wc_DsaVerify(const byte* digest, const byte* sig,
|
WOLFSSL_API int wc_DsaVerify(const byte* digest, const byte* sig,
|
||||||
DsaKey* key, int* answer);
|
DsaKey* key, int* answer);
|
||||||
WOLFSSL_API int wc_DsaPublicKeyDecode(const byte* input, word32* inOutIdx,
|
WOLFSSL_API int wc_DsaPublicKeyDecode(const byte* input, word32* inOutIdx,
|
||||||
@@ -67,8 +67,8 @@ WOLFSSL_API int wc_DsaPrivateKeyDecode(const byte* input, word32* inOutIdx,
|
|||||||
WOLFSSL_API int wc_DsaKeyToDer(DsaKey* key, byte* output, word32 inLen);
|
WOLFSSL_API int wc_DsaKeyToDer(DsaKey* key, byte* output, word32 inLen);
|
||||||
|
|
||||||
#ifdef WOLFSSL_KEY_GEN
|
#ifdef WOLFSSL_KEY_GEN
|
||||||
WOLFSSL_API int wc_MakeDsaKey(RNG *rng, DsaKey *dsa);
|
WOLFSSL_API int wc_MakeDsaKey(WC_RNG *rng, DsaKey *dsa);
|
||||||
WOLFSSL_API int wc_MakeDsaParameters(RNG *rng, int modulus_size, DsaKey *dsa);
|
WOLFSSL_API int wc_MakeDsaParameters(WC_RNG *rng, int modulus_size, DsaKey *dsa);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|||||||
@@ -134,7 +134,7 @@ extern const ecc_set_type ecc_sets[];
|
|||||||
|
|
||||||
|
|
||||||
WOLFSSL_API
|
WOLFSSL_API
|
||||||
int wc_ecc_make_key(RNG* rng, int keysize, ecc_key* key);
|
int wc_ecc_make_key(WC_RNG* rng, int keysize, ecc_key* key);
|
||||||
WOLFSSL_API
|
WOLFSSL_API
|
||||||
int wc_ecc_check_key(ecc_key* key);
|
int wc_ecc_check_key(ecc_key* key);
|
||||||
WOLFSSL_API
|
WOLFSSL_API
|
||||||
@@ -145,9 +145,9 @@ int wc_ecc_shared_secret_ssh(ecc_key* private_key, ecc_point* point,
|
|||||||
byte* out, word32 *outlen);
|
byte* out, word32 *outlen);
|
||||||
WOLFSSL_API
|
WOLFSSL_API
|
||||||
int wc_ecc_sign_hash(const byte* in, word32 inlen, byte* out, word32 *outlen,
|
int wc_ecc_sign_hash(const byte* in, word32 inlen, byte* out, word32 *outlen,
|
||||||
RNG* rng, ecc_key* key);
|
WC_RNG* rng, ecc_key* key);
|
||||||
WOLFSSL_API
|
WOLFSSL_API
|
||||||
int wc_ecc_sign_hash_ex(const byte* in, word32 inlen, RNG* rng,
|
int wc_ecc_sign_hash_ex(const byte* in, word32 inlen, WC_RNG* rng,
|
||||||
ecc_key* key, mp_int *r, mp_int *s);
|
ecc_key* key, mp_int *r, mp_int *s);
|
||||||
WOLFSSL_API
|
WOLFSSL_API
|
||||||
int wc_ecc_verify_hash(const byte* sig, word32 siglen, const byte* hash,
|
int wc_ecc_verify_hash(const byte* sig, word32 siglen, const byte* hash,
|
||||||
@@ -248,11 +248,11 @@ enum ecFlags {
|
|||||||
typedef struct ecEncCtx ecEncCtx;
|
typedef struct ecEncCtx ecEncCtx;
|
||||||
|
|
||||||
WOLFSSL_API
|
WOLFSSL_API
|
||||||
ecEncCtx* wc_ecc_ctx_new(int flags, RNG* rng);
|
ecEncCtx* wc_ecc_ctx_new(int flags, WC_RNG* rng);
|
||||||
WOLFSSL_API
|
WOLFSSL_API
|
||||||
void wc_ecc_ctx_free(ecEncCtx*);
|
void wc_ecc_ctx_free(ecEncCtx*);
|
||||||
WOLFSSL_API
|
WOLFSSL_API
|
||||||
int wc_ecc_ctx_reset(ecEncCtx*, RNG*); /* reset for use again w/o alloc/free */
|
int wc_ecc_ctx_reset(ecEncCtx*, WC_RNG*); /* reset for use again w/o alloc/free */
|
||||||
|
|
||||||
WOLFSSL_API
|
WOLFSSL_API
|
||||||
const byte* wc_ecc_ctx_get_own_salt(ecEncCtx*);
|
const byte* wc_ecc_ctx_get_own_salt(ecEncCtx*);
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ typedef struct {
|
|||||||
|
|
||||||
|
|
||||||
WOLFSSL_API
|
WOLFSSL_API
|
||||||
int wc_ed25519_make_key(RNG* rng, int keysize, ed25519_key* key);
|
int wc_ed25519_make_key(WC_RNG* rng, int keysize, ed25519_key* key);
|
||||||
WOLFSSL_API
|
WOLFSSL_API
|
||||||
int wc_ed25519_sign_msg(const byte* in, word32 inlen, byte* out,
|
int wc_ed25519_sign_msg(const byte* in, word32 inlen, byte* out,
|
||||||
word32 *outlen, ed25519_key* key);
|
word32 *outlen, ed25519_key* key);
|
||||||
|
|||||||
@@ -151,6 +151,10 @@ enum {
|
|||||||
ECC_INF_E = -215, /* ECC point infinity error */
|
ECC_INF_E = -215, /* ECC point infinity error */
|
||||||
ECC_PRIV_KEY_E = -216, /* ECC private key not valid error */
|
ECC_PRIV_KEY_E = -216, /* ECC private key not valid error */
|
||||||
|
|
||||||
|
SRP_CALL_ORDER_E = -217, /* SRP function called in the wrong order. */
|
||||||
|
SRP_VERIFY_E = -218, /* SRP proof verification failed. */
|
||||||
|
SRP_BAD_KEY_E = -219, /* SRP bad ephemeral values. */
|
||||||
|
|
||||||
MIN_CODE_E = -300 /* errors -101 - -299 */
|
MIN_CODE_E = -300 /* errors -101 - -299 */
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -163,5 +167,3 @@ WOLFSSL_API const char* wc_GetErrorString(int error);
|
|||||||
} /* extern "C" */
|
} /* extern "C" */
|
||||||
#endif
|
#endif
|
||||||
#endif /* WOLF_CRYPT_ERROR_H */
|
#endif /* WOLF_CRYPT_ERROR_H */
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -22,20 +22,35 @@
|
|||||||
#ifndef WOLF_CRYPT_HASH_H
|
#ifndef WOLF_CRYPT_HASH_H
|
||||||
#define WOLF_CRYPT_HASH_H
|
#define WOLF_CRYPT_HASH_H
|
||||||
|
|
||||||
|
#include <wolfssl/wolfcrypt/types.h>
|
||||||
|
|
||||||
#ifndef NO_MD5
|
#ifndef NO_MD5
|
||||||
#include <wolfssl/wolfcrypt/md5.h>
|
#include <wolfssl/wolfcrypt/md5.h>
|
||||||
WOLFSSL_API void wc_Md5GetHash(Md5*, byte*);
|
WOLFSSL_API void wc_Md5GetHash(Md5*, byte*);
|
||||||
WOLFSSL_API void wc_Md5RestorePos(Md5*, Md5*) ;
|
WOLFSSL_API void wc_Md5RestorePos(Md5*, Md5*) ;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef NO_SHA
|
#ifndef NO_SHA
|
||||||
#include <wolfssl/wolfcrypt/sha.h>
|
#include <wolfssl/wolfcrypt/sha.h>
|
||||||
WOLFSSL_API int wc_ShaGetHash(Sha*, byte*);
|
WOLFSSL_API int wc_ShaGetHash(Sha*, byte*);
|
||||||
WOLFSSL_API void wc_ShaRestorePos(Sha*, Sha*) ;
|
WOLFSSL_API void wc_ShaRestorePos(Sha*, Sha*) ;
|
||||||
|
WOLFSSL_API int wc_ShaHash(const byte*, word32, byte*);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef NO_SHA256
|
#ifndef NO_SHA256
|
||||||
#include <wolfssl/wolfcrypt/sha256.h>
|
#include <wolfssl/wolfcrypt/sha256.h>
|
||||||
WOLFSSL_API int wc_Sha256GetHash(Sha256*, byte*);
|
WOLFSSL_API int wc_Sha256GetHash(Sha256*, byte*);
|
||||||
WOLFSSL_API void wc_Sha256RestorePos(Sha256*, Sha256*) ;
|
WOLFSSL_API void wc_Sha256RestorePos(Sha256*, Sha256*) ;
|
||||||
|
WOLFSSL_API int wc_Sha256Hash(const byte*, word32, byte*);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#ifdef WOLFSSL_SHA512
|
||||||
|
#include <wolfssl/wolfcrypt/sha512.h>
|
||||||
|
WOLFSSL_API int wc_Sha512Hash(const byte*, word32, byte*);
|
||||||
|
#if defined(WOLFSSL_SHA384)
|
||||||
|
WOLFSSL_API int wc_Sha384Hash(const byte*, word32, byte*);
|
||||||
|
#endif /* defined(WOLFSSL_SHA384) */
|
||||||
|
#endif /* WOLFSSL_SHA512 */
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* WOLF_CRYPT_HASH_H */
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ nobase_include_HEADERS+= \
|
|||||||
wolfssl/wolfcrypt/md5.h \
|
wolfssl/wolfcrypt/md5.h \
|
||||||
wolfssl/wolfcrypt/misc.h \
|
wolfssl/wolfcrypt/misc.h \
|
||||||
wolfssl/wolfcrypt/pkcs7.h \
|
wolfssl/wolfcrypt/pkcs7.h \
|
||||||
|
wolfssl/wolfcrypt/wc_encrypt.h \
|
||||||
wolfssl/wolfcrypt/wc_port.h \
|
wolfssl/wolfcrypt/wc_port.h \
|
||||||
wolfssl/wolfcrypt/pwdbased.h \
|
wolfssl/wolfcrypt/pwdbased.h \
|
||||||
wolfssl/wolfcrypt/rabbit.h \
|
wolfssl/wolfcrypt/rabbit.h \
|
||||||
@@ -45,6 +46,7 @@ nobase_include_HEADERS+= \
|
|||||||
wolfssl/wolfcrypt/blake2-int.h \
|
wolfssl/wolfcrypt/blake2-int.h \
|
||||||
wolfssl/wolfcrypt/blake2-impl.h \
|
wolfssl/wolfcrypt/blake2-impl.h \
|
||||||
wolfssl/wolfcrypt/tfm.h \
|
wolfssl/wolfcrypt/tfm.h \
|
||||||
|
wolfssl/wolfcrypt/srp.h \
|
||||||
wolfssl/wolfcrypt/types.h \
|
wolfssl/wolfcrypt/types.h \
|
||||||
wolfssl/wolfcrypt/visibility.h \
|
wolfssl/wolfcrypt/visibility.h \
|
||||||
wolfssl/wolfcrypt/logging.h \
|
wolfssl/wolfcrypt/logging.h \
|
||||||
@@ -56,4 +58,3 @@ noinst_HEADERS+= \
|
|||||||
wolfssl/wolfcrypt/port/pic32/pic32mz-crypt.h \
|
wolfssl/wolfcrypt/port/pic32/pic32mz-crypt.h \
|
||||||
wolfssl/wolfcrypt/port/ti/ti-hash.h \
|
wolfssl/wolfcrypt/port/ti/ti-hash.h \
|
||||||
wolfssl/wolfcrypt/port/ti/ti-ccm.h
|
wolfssl/wolfcrypt/port/ti/ti-ccm.h
|
||||||
|
|
||||||
|
|||||||
@@ -307,7 +307,7 @@ int mp_radix_size (mp_int * a, int radix, int *size);
|
|||||||
#if defined(HAVE_ECC) || defined(WOLFSSL_KEY_GEN)
|
#if defined(HAVE_ECC) || defined(WOLFSSL_KEY_GEN)
|
||||||
int mp_sqrmod(mp_int* a, mp_int* b, mp_int* c);
|
int mp_sqrmod(mp_int* a, mp_int* b, mp_int* c);
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_ECC
|
#if defined(HAVE_ECC) || defined(WOLFSSL_KEY_GEN)
|
||||||
int mp_read_radix(mp_int* a, const char* str, int radix);
|
int mp_read_radix(mp_int* a, const char* str, int radix);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -315,7 +315,7 @@ int mp_radix_size (mp_int * a, int radix, int *size);
|
|||||||
int mp_prime_is_prime (mp_int * a, int t, int *result);
|
int mp_prime_is_prime (mp_int * a, int t, int *result);
|
||||||
int mp_gcd (mp_int * a, mp_int * b, mp_int * c);
|
int mp_gcd (mp_int * a, mp_int * b, mp_int * c);
|
||||||
int mp_lcm (mp_int * a, mp_int * b, mp_int * c);
|
int mp_lcm (mp_int * a, mp_int * b, mp_int * c);
|
||||||
int mp_rand_prime(mp_int* N, int len, RNG* rng, void* heap);
|
int mp_rand_prime(mp_int* N, int len, WC_RNG* rng, void* heap);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int mp_cnt_lsb(mp_int *a);
|
int mp_cnt_lsb(mp_int *a);
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ typedef struct PKCS7 {
|
|||||||
word32 contentSz; /* content size */
|
word32 contentSz; /* content size */
|
||||||
int contentOID; /* PKCS#7 content type OID sum */
|
int contentOID; /* PKCS#7 content type OID sum */
|
||||||
|
|
||||||
RNG* rng;
|
WC_RNG* rng;
|
||||||
|
|
||||||
int hashOID;
|
int hashOID;
|
||||||
int encryptOID; /* key encryption algorithm OID */
|
int encryptOID; /* key encryption algorithm OID */
|
||||||
@@ -100,7 +100,7 @@ WOLFSSL_LOCAL int wc_GetContentType(const byte* input, word32* inOutIdx,
|
|||||||
word32* oid, word32 maxIdx);
|
word32* oid, word32 maxIdx);
|
||||||
WOLFSSL_LOCAL int wc_CreateRecipientInfo(const byte* cert, word32 certSz,
|
WOLFSSL_LOCAL int wc_CreateRecipientInfo(const byte* cert, word32 certSz,
|
||||||
int keyEncAlgo, int blockKeySz,
|
int keyEncAlgo, int blockKeySz,
|
||||||
RNG* rng, byte* contentKeyPlain,
|
WC_RNG* rng, byte* contentKeyPlain,
|
||||||
byte* contentKeyEnc,
|
byte* contentKeyEnc,
|
||||||
int* keyEncSz, byte* out, word32 outSz);
|
int* keyEncSz, byte* out, word32 outSz);
|
||||||
|
|
||||||
|
|||||||
@@ -51,9 +51,9 @@ WOLFSSL_API int wc_PKCS12_PBKDF(byte* output, const byte* passwd, int pLen,
|
|||||||
int kLen, int typeH, int purpose);
|
int kLen, int typeH, int purpose);
|
||||||
|
|
||||||
/* helper functions */
|
/* helper functions */
|
||||||
WOLFSSL_LOCAL int GetDigestSize(int hashType);
|
WOLFSSL_LOCAL int GetDigestSize(int typeH);
|
||||||
WOLFSSL_LOCAL int GetPKCS12HashSizes(int hashType, word32* v, word32* u);
|
WOLFSSL_LOCAL int GetPKCS12HashSizes(int typeH, word32* v, word32* u);
|
||||||
WOLFSSL_LOCAL int DoPKCS12Hash(int hashType, byte* buffer, word32 totalLen,
|
WOLFSSL_LOCAL int DoPKCS12Hash(int typeH, byte* buffer, word32 totalLen,
|
||||||
byte* Ai, word32 u, int iterations);
|
byte* Ai, word32 u, int iterations);
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -84,11 +84,11 @@ struct DRBG; /* Private DRBG state */
|
|||||||
|
|
||||||
|
|
||||||
/* Hash-based Deterministic Random Bit Generator */
|
/* Hash-based Deterministic Random Bit Generator */
|
||||||
typedef struct RNG {
|
typedef struct WC_RNG {
|
||||||
struct DRBG* drbg;
|
struct DRBG* drbg;
|
||||||
OS_Seed seed;
|
OS_Seed seed;
|
||||||
byte status;
|
byte status;
|
||||||
} RNG;
|
} WC_RNG;
|
||||||
|
|
||||||
|
|
||||||
#else /* HAVE_HASHDRBG || NO_RC4 */
|
#else /* HAVE_HASHDRBG || NO_RC4 */
|
||||||
@@ -99,36 +99,42 @@ typedef struct RNG {
|
|||||||
/* secure Random Number Generator */
|
/* secure Random Number Generator */
|
||||||
|
|
||||||
|
|
||||||
typedef struct RNG {
|
typedef struct WC_RNG {
|
||||||
OS_Seed seed;
|
OS_Seed seed;
|
||||||
Arc4 cipher;
|
Arc4 cipher;
|
||||||
#ifdef HAVE_CAVIUM
|
#ifdef HAVE_CAVIUM
|
||||||
int devId; /* nitrox device id */
|
int devId; /* nitrox device id */
|
||||||
word32 magic; /* using cavium magic */
|
word32 magic; /* using cavium magic */
|
||||||
#endif
|
#endif
|
||||||
} RNG;
|
} WC_RNG;
|
||||||
|
|
||||||
|
|
||||||
#endif /* HAVE_HASH_DRBG || NO_RC4 */
|
#endif /* HAVE_HASH_DRBG || NO_RC4 */
|
||||||
|
|
||||||
#endif /* HAVE_FIPS */
|
#endif /* HAVE_FIPS */
|
||||||
|
|
||||||
|
/* NO_OLD_RNGNAME removes RNG struct name to prevent possible type conflicts,
|
||||||
|
* can't be used with CTaoCrypt FIPS */
|
||||||
|
#if !defined(NO_OLD_RNGNAME) && !defined(HAVE_FIPS)
|
||||||
|
#define RNG WC_RNG
|
||||||
|
#endif
|
||||||
|
|
||||||
WOLFSSL_LOCAL
|
WOLFSSL_LOCAL
|
||||||
int wc_GenerateSeed(OS_Seed* os, byte* seed, word32 sz);
|
int wc_GenerateSeed(OS_Seed* os, byte* seed, word32 sz);
|
||||||
|
|
||||||
#if defined(HAVE_HASHDRBG) || defined(NO_RC4)
|
#if defined(HAVE_HASHDRBG) || defined(NO_RC4)
|
||||||
|
|
||||||
#ifdef HAVE_CAVIUM
|
#ifdef HAVE_CAVIUM
|
||||||
WOLFSSL_API int wc_InitRngCavium(RNG*, int);
|
WOLFSSL_API int wc_InitRngCavium(WC_RNG*, int);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* HAVE_HASH_DRBG || NO_RC4 */
|
#endif /* HAVE_HASH_DRBG || NO_RC4 */
|
||||||
|
|
||||||
|
|
||||||
WOLFSSL_API int wc_InitRng(RNG*);
|
WOLFSSL_API int wc_InitRng(WC_RNG*);
|
||||||
WOLFSSL_API int wc_RNG_GenerateBlock(RNG*, byte*, word32 sz);
|
WOLFSSL_API int wc_RNG_GenerateBlock(WC_RNG*, byte*, word32 sz);
|
||||||
WOLFSSL_API int wc_RNG_GenerateByte(RNG*, byte*);
|
WOLFSSL_API int wc_RNG_GenerateByte(WC_RNG*, byte*);
|
||||||
WOLFSSL_API int wc_FreeRng(RNG*);
|
WOLFSSL_API int wc_FreeRng(WC_RNG*);
|
||||||
|
|
||||||
|
|
||||||
#if defined(HAVE_HASHDRBG) || defined(NO_RC4)
|
#if defined(HAVE_HASHDRBG) || defined(NO_RC4)
|
||||||
|
|||||||
@@ -47,19 +47,6 @@
|
|||||||
enum {
|
enum {
|
||||||
RSA_PUBLIC = 0,
|
RSA_PUBLIC = 0,
|
||||||
RSA_PRIVATE = 1,
|
RSA_PRIVATE = 1,
|
||||||
|
|
||||||
RSA_PUBLIC_ENCRYPT = 0,
|
|
||||||
RSA_PUBLIC_DECRYPT = 1,
|
|
||||||
RSA_PRIVATE_ENCRYPT = 2,
|
|
||||||
RSA_PRIVATE_DECRYPT = 3,
|
|
||||||
|
|
||||||
RSA_BLOCK_TYPE_1 = 1,
|
|
||||||
RSA_BLOCK_TYPE_2 = 2,
|
|
||||||
|
|
||||||
RSA_MIN_SIZE = 512,
|
|
||||||
RSA_MAX_SIZE = 4096,
|
|
||||||
|
|
||||||
RSA_MIN_PAD_SZ = 11 /* seperator + 0 + pad value + 8 pads */
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -90,13 +77,13 @@ WOLFSSL_API int wc_InitRsaKey(RsaKey* key, void*);
|
|||||||
WOLFSSL_API int wc_FreeRsaKey(RsaKey* key);
|
WOLFSSL_API int wc_FreeRsaKey(RsaKey* key);
|
||||||
|
|
||||||
WOLFSSL_API int wc_RsaPublicEncrypt(const byte* in, word32 inLen, byte* out,
|
WOLFSSL_API int wc_RsaPublicEncrypt(const byte* in, word32 inLen, byte* out,
|
||||||
word32 outLen, RsaKey* key, RNG* rng);
|
word32 outLen, RsaKey* key, WC_RNG* rng);
|
||||||
WOLFSSL_API int wc_RsaPrivateDecryptInline(byte* in, word32 inLen, byte** out,
|
WOLFSSL_API int wc_RsaPrivateDecryptInline(byte* in, word32 inLen, byte** out,
|
||||||
RsaKey* key);
|
RsaKey* key);
|
||||||
WOLFSSL_API int wc_RsaPrivateDecrypt(const byte* in, word32 inLen, byte* out,
|
WOLFSSL_API int wc_RsaPrivateDecrypt(const byte* in, word32 inLen, byte* out,
|
||||||
word32 outLen, RsaKey* key);
|
word32 outLen, RsaKey* key);
|
||||||
WOLFSSL_API int wc_RsaSSL_Sign(const byte* in, word32 inLen, byte* out,
|
WOLFSSL_API int wc_RsaSSL_Sign(const byte* in, word32 inLen, byte* out,
|
||||||
word32 outLen, RsaKey* key, RNG* rng);
|
word32 outLen, RsaKey* key, WC_RNG* rng);
|
||||||
WOLFSSL_API int wc_RsaSSL_VerifyInline(byte* in, word32 inLen, byte** out,
|
WOLFSSL_API int wc_RsaSSL_VerifyInline(byte* in, word32 inLen, byte** out,
|
||||||
RsaKey* key);
|
RsaKey* key);
|
||||||
WOLFSSL_API int wc_RsaSSL_Verify(const byte* in, word32 inLen, byte* out,
|
WOLFSSL_API int wc_RsaSSL_Verify(const byte* in, word32 inLen, byte* out,
|
||||||
@@ -118,7 +105,7 @@ WOLFSSL_API int wc_RsaFlattenPublicKey(RsaKey*, byte*, word32*, byte*,
|
|||||||
word32*);
|
word32*);
|
||||||
|
|
||||||
#ifdef WOLFSSL_KEY_GEN
|
#ifdef WOLFSSL_KEY_GEN
|
||||||
WOLFSSL_API int wc_MakeRsaKey(RsaKey* key, int size, long e, RNG* rng);
|
WOLFSSL_API int wc_MakeRsaKey(RsaKey* key, int size, long e, WC_RNG* rng);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_CAVIUM
|
#ifdef HAVE_CAVIUM
|
||||||
|
|||||||
@@ -111,6 +111,9 @@
|
|||||||
/* Uncomment next line if building for VxWorks */
|
/* Uncomment next line if building for VxWorks */
|
||||||
/* #define WOLFSSL_VXWORKS */
|
/* #define WOLFSSL_VXWORKS */
|
||||||
|
|
||||||
|
/* Uncomment next line to enable deprecated less secure static DH suites */
|
||||||
|
/* #define WOLFSSL_STATIC_DH */
|
||||||
|
|
||||||
#include <wolfssl/wolfcrypt/visibility.h>
|
#include <wolfssl/wolfcrypt/visibility.h>
|
||||||
|
|
||||||
#ifdef WOLFSSL_USER_SETTINGS
|
#ifdef WOLFSSL_USER_SETTINGS
|
||||||
@@ -118,6 +121,12 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* make sure old RNG name is used with CTaoCrypt FIPS */
|
||||||
|
#ifdef HAVE_FIPS
|
||||||
|
#define WC_RNG RNG
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#ifdef IPHONE
|
#ifdef IPHONE
|
||||||
#define SIZEOF_LONG_LONG 8
|
#define SIZEOF_LONG_LONG 8
|
||||||
#endif
|
#endif
|
||||||
@@ -178,6 +187,7 @@
|
|||||||
#define USE_FAST_MATH
|
#define USE_FAST_MATH
|
||||||
#define TFM_TIMING_RESISTANT
|
#define TFM_TIMING_RESISTANT
|
||||||
#define NEED_AES_TABLES
|
#define NEED_AES_TABLES
|
||||||
|
#define WOLFSSL_HAVE_MIN
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef WOLFSSL_MICROCHIP_PIC32MZ
|
#ifdef WOLFSSL_MICROCHIP_PIC32MZ
|
||||||
@@ -307,6 +317,10 @@
|
|||||||
|
|
||||||
|
|
||||||
#ifdef FREERTOS
|
#ifdef FREERTOS
|
||||||
|
#include "FreeRTOS.h"
|
||||||
|
/* FreeRTOS pvPortRealloc() only in AVR32_UC3 port */
|
||||||
|
#define XMALLOC(s, h, type) pvPortMalloc((s))
|
||||||
|
#define XFREE(p, h, type) vPortFree((p))
|
||||||
#ifndef NO_WRITEV
|
#ifndef NO_WRITEV
|
||||||
#define NO_WRITEV
|
#define NO_WRITEV
|
||||||
#endif
|
#endif
|
||||||
@@ -328,7 +342,6 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef SINGLE_THREADED
|
#ifndef SINGLE_THREADED
|
||||||
#include "FreeRTOS.h"
|
|
||||||
#include "semphr.h"
|
#include "semphr.h"
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
@@ -454,7 +467,11 @@
|
|||||||
#include "mqx.h"
|
#include "mqx.h"
|
||||||
#ifndef NO_FILESYSTEM
|
#ifndef NO_FILESYSTEM
|
||||||
#include "mfs.h"
|
#include "mfs.h"
|
||||||
#include "fio.h"
|
#if MQX_USE_IO_OLD
|
||||||
|
#include "fio.h"
|
||||||
|
#else
|
||||||
|
#include "nio.h"
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#ifndef SINGLE_THREADED
|
#ifndef SINGLE_THREADED
|
||||||
#include "mutex.h"
|
#include "mutex.h"
|
||||||
|
|||||||
@@ -76,7 +76,6 @@ typedef struct Sha {
|
|||||||
WOLFSSL_API int wc_InitSha(Sha*);
|
WOLFSSL_API int wc_InitSha(Sha*);
|
||||||
WOLFSSL_API int wc_ShaUpdate(Sha*, const byte*, word32);
|
WOLFSSL_API int wc_ShaUpdate(Sha*, const byte*, word32);
|
||||||
WOLFSSL_API int wc_ShaFinal(Sha*, byte*);
|
WOLFSSL_API int wc_ShaFinal(Sha*, byte*);
|
||||||
WOLFSSL_API int wc_ShaHash(const byte*, word32, byte*);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} /* extern "C" */
|
} /* extern "C" */
|
||||||
|
|||||||
@@ -74,7 +74,6 @@ typedef struct Sha256 {
|
|||||||
WOLFSSL_API int wc_InitSha256(Sha256*);
|
WOLFSSL_API int wc_InitSha256(Sha256*);
|
||||||
WOLFSSL_API int wc_Sha256Update(Sha256*, const byte*, word32);
|
WOLFSSL_API int wc_Sha256Update(Sha256*, const byte*, word32);
|
||||||
WOLFSSL_API int wc_Sha256Final(Sha256*, byte*);
|
WOLFSSL_API int wc_Sha256Final(Sha256*, byte*);
|
||||||
WOLFSSL_API int wc_Sha256Hash(const byte*, word32, byte*);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} /* extern "C" */
|
} /* extern "C" */
|
||||||
|
|||||||
@@ -64,7 +64,6 @@ typedef struct Sha512 {
|
|||||||
WOLFSSL_API int wc_InitSha512(Sha512*);
|
WOLFSSL_API int wc_InitSha512(Sha512*);
|
||||||
WOLFSSL_API int wc_Sha512Update(Sha512*, const byte*, word32);
|
WOLFSSL_API int wc_Sha512Update(Sha512*, const byte*, word32);
|
||||||
WOLFSSL_API int wc_Sha512Final(Sha512*, byte*);
|
WOLFSSL_API int wc_Sha512Final(Sha512*, byte*);
|
||||||
WOLFSSL_API int wc_Sha512Hash(const byte*, word32, byte*);
|
|
||||||
|
|
||||||
#if defined(WOLFSSL_SHA384)
|
#if defined(WOLFSSL_SHA384)
|
||||||
|
|
||||||
@@ -91,7 +90,6 @@ typedef struct Sha384 {
|
|||||||
WOLFSSL_API int wc_InitSha384(Sha384*);
|
WOLFSSL_API int wc_InitSha384(Sha384*);
|
||||||
WOLFSSL_API int wc_Sha384Update(Sha384*, const byte*, word32);
|
WOLFSSL_API int wc_Sha384Update(Sha384*, const byte*, word32);
|
||||||
WOLFSSL_API int wc_Sha384Final(Sha384*, byte*);
|
WOLFSSL_API int wc_Sha384Final(Sha384*, byte*);
|
||||||
WOLFSSL_API int wc_Sha384Hash(const byte*, word32, byte*);
|
|
||||||
|
|
||||||
#endif /* WOLFSSL_SHA384 */
|
#endif /* WOLFSSL_SHA384 */
|
||||||
|
|
||||||
|
|||||||
308
wolfssl/wolfcrypt/srp.h
Normal file
308
wolfssl/wolfcrypt/srp.h
Normal file
@@ -0,0 +1,308 @@
|
|||||||
|
/* srp.h
|
||||||
|
*
|
||||||
|
* Copyright (C) 2006-2015 wolfSSL Inc.
|
||||||
|
*
|
||||||
|
* This file is part of wolfSSL. (formerly known as CyaSSL)
|
||||||
|
*
|
||||||
|
* wolfSSL 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.
|
||||||
|
*
|
||||||
|
* wolfSSL 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
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef WOLFCRYPT_HAVE_SRP
|
||||||
|
|
||||||
|
#ifndef WOLFCRYPT_SRP_H
|
||||||
|
#define WOLFCRYPT_SRP_H
|
||||||
|
|
||||||
|
#include <wolfssl/wolfcrypt/types.h>
|
||||||
|
#include <wolfssl/wolfcrypt/sha.h>
|
||||||
|
#include <wolfssl/wolfcrypt/sha256.h>
|
||||||
|
#include <wolfssl/wolfcrypt/sha512.h>
|
||||||
|
#include <wolfssl/wolfcrypt/integer.h>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Select the largest available hash for the buffer size. */
|
||||||
|
#if defined(WOLFSSL_SHA512)
|
||||||
|
#define SRP_MAX_DIGEST_SIZE SHA512_DIGEST_SIZE
|
||||||
|
#elif defined(WOLFSSL_SHA384)
|
||||||
|
#define SRP_MAX_DIGEST_SIZE SHA384_DIGEST_SIZE
|
||||||
|
#elif !defined(NO_SHA256)
|
||||||
|
#define SRP_MAX_DIGEST_SIZE SHA256_DIGEST_SIZE
|
||||||
|
#elif !defined(NO_SHA)
|
||||||
|
#define SRP_MAX_DIGEST_SIZE SHA_DIGEST_SIZE
|
||||||
|
#else
|
||||||
|
#error "You have to have some kind of SHA hash if you want to use SRP."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Set the minimum number of bits acceptable in an SRP modulus */
|
||||||
|
#define SRP_DEFAULT_MIN_BITS 512
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SRP side, client or server.
|
||||||
|
*/
|
||||||
|
typedef enum {
|
||||||
|
SRP_CLIENT_SIDE = 0,
|
||||||
|
SRP_SERVER_SIDE = 1,
|
||||||
|
} SrpSide;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SRP hash type, SHA[1|256|384|512].
|
||||||
|
*/
|
||||||
|
typedef enum {
|
||||||
|
#ifndef NO_SHA
|
||||||
|
SRP_TYPE_SHA = 1,
|
||||||
|
#endif
|
||||||
|
#ifndef NO_SHA256
|
||||||
|
SRP_TYPE_SHA256 = 2,
|
||||||
|
#endif
|
||||||
|
#ifdef WOLFSSL_SHA384
|
||||||
|
SRP_TYPE_SHA384 = 3,
|
||||||
|
#endif
|
||||||
|
#ifdef WOLFSSL_SHA512
|
||||||
|
SRP_TYPE_SHA512 = 4,
|
||||||
|
#endif
|
||||||
|
} SrpType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SRP hash struct.
|
||||||
|
*/
|
||||||
|
typedef struct {
|
||||||
|
byte type;
|
||||||
|
union {
|
||||||
|
#ifndef NO_SHA
|
||||||
|
Sha sha;
|
||||||
|
#endif
|
||||||
|
#ifndef NO_SHA256
|
||||||
|
Sha256 sha256;
|
||||||
|
#endif
|
||||||
|
#ifdef WOLFSSL_SHA384
|
||||||
|
Sha384 sha384;
|
||||||
|
#endif
|
||||||
|
#ifdef WOLFSSL_SHA512
|
||||||
|
Sha512 sha512;
|
||||||
|
#endif
|
||||||
|
} data;
|
||||||
|
} SrpHash;
|
||||||
|
|
||||||
|
typedef struct Srp {
|
||||||
|
SrpSide side; /**< Client or Server, @see SrpSide. */
|
||||||
|
SrpType type; /**< Hash type, @see SrpType. */
|
||||||
|
byte* user; /**< Username, login. */
|
||||||
|
word32 userSz; /**< Username length. */
|
||||||
|
byte* salt; /**< Small salt. */
|
||||||
|
word32 saltSz; /**< Salt length. */
|
||||||
|
mp_int N; /**< Modulus. N = 2q+1, [q, N] are primes.*/
|
||||||
|
mp_int g; /**< Generator. A generator modulo N. */
|
||||||
|
byte k[SRP_MAX_DIGEST_SIZE]; /**< Multiplier parameeter. k = H(N, g) */
|
||||||
|
mp_int auth; /**< Client: x = H(salt + H(user:pswd)) */
|
||||||
|
/**< Server: v = g ^ x % N */
|
||||||
|
mp_int priv; /**< Private ephemeral value. */
|
||||||
|
SrpHash client_proof; /**< Client proof. Sent to the Server. */
|
||||||
|
SrpHash server_proof; /**< Server proof. Sent to the Client. */
|
||||||
|
byte* key; /**< Session key. */
|
||||||
|
word32 keySz; /**< Session key length. */
|
||||||
|
int (*keyGenFunc_cb) (struct Srp* srp, byte* secret, word32 size);
|
||||||
|
/**< Function responsible for generating the session key. */
|
||||||
|
/**< It MUST use XMALLOC with type DYNAMIC_TYPE_SRP to allocate the */
|
||||||
|
/**< key buffer for this structure and set keySz to the buffer size. */
|
||||||
|
/**< The default function used by this implementation is a modified */
|
||||||
|
/**< version of t_mgf1 that uses the proper hash function according */
|
||||||
|
/**< to srp->type. */
|
||||||
|
} Srp;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes the Srp struct for usage.
|
||||||
|
*
|
||||||
|
* @param[out] srp the Srp structure to be initialized.
|
||||||
|
* @param[in] type the hash type to be used.
|
||||||
|
* @param[in] side the side of the communication.
|
||||||
|
*
|
||||||
|
* @return 0 on success, {@literal <} 0 on error. @see error-crypt.h
|
||||||
|
*/
|
||||||
|
WOLFSSL_API int wc_SrpInit(Srp* srp, SrpType type, SrpSide side);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Releases the Srp struct resources after usage.
|
||||||
|
*
|
||||||
|
* @param[in,out] srp the Srp structure to be terminated.
|
||||||
|
*/
|
||||||
|
WOLFSSL_API void wc_SrpTerm(Srp* srp);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the username.
|
||||||
|
*
|
||||||
|
* This function MUST be called after wc_SrpInit.
|
||||||
|
*
|
||||||
|
* @param[in,out] srp the Srp structure.
|
||||||
|
* @param[in] username the buffer containing the username.
|
||||||
|
* @param[in] size the username size in bytes
|
||||||
|
*
|
||||||
|
* @return 0 on success, {@literal <} 0 on error. @see error-crypt.h
|
||||||
|
*/
|
||||||
|
WOLFSSL_API int wc_SrpSetUsername(Srp* srp, const byte* username, word32 size);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the srp parameeters based on the username.
|
||||||
|
*
|
||||||
|
* This function MUST be called after wc_SrpSetUsername.
|
||||||
|
*
|
||||||
|
* @param[in,out] srp the Srp structure.
|
||||||
|
* @param[in] N the Modulus. N = 2q+1, [q, N] are primes.
|
||||||
|
* @param[in] nSz the N size in bytes.
|
||||||
|
* @param[in] g the Generator modulo N.
|
||||||
|
* @param[in] gSz the g size in bytes
|
||||||
|
* @param[in] salt a small random salt. Specific for each username.
|
||||||
|
* @param[in] saltSz the salt size in bytes
|
||||||
|
*
|
||||||
|
* @return 0 on success, {@literal <} 0 on error. @see error-crypt.h
|
||||||
|
*/
|
||||||
|
WOLFSSL_API int wc_SrpSetParams(Srp* srp, const byte* N, word32 nSz,
|
||||||
|
const byte* g, word32 gSz,
|
||||||
|
const byte* salt, word32 saltSz);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the password.
|
||||||
|
*
|
||||||
|
* Setting the password does not persists the clear password data in the
|
||||||
|
* srp structure. The client calculates x = H(salt + H(user:pswd)) and stores
|
||||||
|
* it in the auth field.
|
||||||
|
*
|
||||||
|
* This function MUST be called after wc_SrpSetParams and is CLIENT SIDE ONLY.
|
||||||
|
*
|
||||||
|
* @param[in,out] srp the Srp structure.
|
||||||
|
* @param[in] password the buffer containing the password.
|
||||||
|
* @param[in] size the password size in bytes.
|
||||||
|
*
|
||||||
|
* @return 0 on success, {@literal <} 0 on error. @see error-crypt.h
|
||||||
|
*/
|
||||||
|
WOLFSSL_API int wc_SrpSetPassword(Srp* srp, const byte* password, word32 size);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the password.
|
||||||
|
*
|
||||||
|
* This function MUST be called after wc_SrpSetParams and is SERVER SIDE ONLY.
|
||||||
|
*
|
||||||
|
* @param[in,out] srp the Srp structure.
|
||||||
|
* @param[in] verifier the buffer containing the verifier.
|
||||||
|
* @param[in] size the verifier size in bytes.
|
||||||
|
*
|
||||||
|
* @return 0 on success, {@literal <} 0 on error. @see error-crypt.h
|
||||||
|
*/
|
||||||
|
WOLFSSL_API int wc_SrpSetVerifier(Srp* srp, const byte* verifier, word32 size);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the verifier.
|
||||||
|
*
|
||||||
|
* The client calculates the verifier with v = g ^ x % N.
|
||||||
|
* This function MAY be called after wc_SrpSetPassword and is SERVER SIDE ONLY.
|
||||||
|
*
|
||||||
|
* @param[in,out] srp the Srp structure.
|
||||||
|
* @param[out] verifier the buffer to write the verifier.
|
||||||
|
* @param[in,out] size the buffer size in bytes. Will be updated with the
|
||||||
|
* verifier size.
|
||||||
|
*
|
||||||
|
* @return 0 on success, {@literal <} 0 on error. @see error-crypt.h
|
||||||
|
*/
|
||||||
|
WOLFSSL_API int wc_SrpGetVerifier(Srp* srp, byte* verifier, word32* size);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the private ephemeral value.
|
||||||
|
*
|
||||||
|
* The private ephemeral value is known as:
|
||||||
|
* a at the client side. a = random()
|
||||||
|
* b at the server side. b = random()
|
||||||
|
* This function is handy for unit test cases or if the developer wants to use
|
||||||
|
* an external random source to set the ephemeral value.
|
||||||
|
* This function MAY be called before wc_SrpGetPublic.
|
||||||
|
*
|
||||||
|
* @param[in,out] srp the Srp structure.
|
||||||
|
* @param[in] private the ephemeral value.
|
||||||
|
* @param[in] size the private size in bytes.
|
||||||
|
*
|
||||||
|
* @return 0 on success, {@literal <} 0 on error. @see error-crypt.h
|
||||||
|
*/
|
||||||
|
WOLFSSL_API int wc_SrpSetPrivate(Srp* srp, const byte* private, word32 size);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the public ephemeral value.
|
||||||
|
*
|
||||||
|
* The public ephemeral value is known as:
|
||||||
|
* A at the client side. A = g ^ a % N
|
||||||
|
* B at the server side. B = (k * v + (g ˆ b % N)) % N
|
||||||
|
* This function MUST be called after wc_SrpSetPassword or wc_SrpSetVerifier.
|
||||||
|
*
|
||||||
|
* @param[in,out] srp the Srp structure.
|
||||||
|
* @param[out] public the buffer to write the public ephemeral value.
|
||||||
|
* @param[in,out] size the the buffer size in bytes. Will be updated with
|
||||||
|
* the ephemeral value size.
|
||||||
|
*
|
||||||
|
* @return 0 on success, {@literal <} 0 on error. @see error-crypt.h
|
||||||
|
*/
|
||||||
|
WOLFSSL_API int wc_SrpGetPublic(Srp* srp, byte* public, word32* size);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Computes the session key.
|
||||||
|
*
|
||||||
|
* This function is handy for unit test cases or if the developer wants to use
|
||||||
|
* an external random source to set the ephemeral value.
|
||||||
|
* This function MUST be called after wc_SrpSetPassword or wc_SrpSetVerifier.
|
||||||
|
*
|
||||||
|
* @param[in,out] srp the Srp structure.
|
||||||
|
* @param[out] public the buffer to write the public ephemeral value.
|
||||||
|
* @param[in,out] size the the buffer size in bytes. Will be updated with
|
||||||
|
the ephemeral value size.
|
||||||
|
*
|
||||||
|
* @return 0 on success, {@literal <} 0 on error. @see error-crypt.h
|
||||||
|
*/
|
||||||
|
WOLFSSL_API int wc_SrpComputeKey(Srp* srp,
|
||||||
|
byte* clientPubKey, word32 clientPubKeySz,
|
||||||
|
byte* serverPubKey, word32 serverPubKeySz);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the proof.
|
||||||
|
*
|
||||||
|
* This function MUST be called after wc_SrpComputeKey.
|
||||||
|
*
|
||||||
|
* @param[in,out] srp the Srp structure.
|
||||||
|
* @param[out] proof the buffer to write the proof.
|
||||||
|
* @param[in,out] size the buffer size in bytes. Will be updated with the
|
||||||
|
* proof size.
|
||||||
|
*
|
||||||
|
* @return 0 on success, {@literal <} 0 on error. @see error-crypt.h
|
||||||
|
*/
|
||||||
|
WOLFSSL_API int wc_SrpGetProof(Srp* srp, byte* proof, word32* size);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Verifies the peers proof.
|
||||||
|
*
|
||||||
|
* This function MUST be called before wc_SrpGetSessionKey.
|
||||||
|
*
|
||||||
|
* @param[in,out] srp the Srp structure.
|
||||||
|
* @param[in] proof the peers proof.
|
||||||
|
* @param[in] size the proof size in bytes.
|
||||||
|
*
|
||||||
|
* @return 0 on success, {@literal <} 0 on error. @see error-crypt.h
|
||||||
|
*/
|
||||||
|
WOLFSSL_API int wc_SrpVerifyPeersProof(Srp* srp, byte* proof, word32 size);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* WOLFCRYPT_SRP_H */
|
||||||
|
#endif /* WOLFCRYPT_HAVE_SRP */
|
||||||
@@ -718,7 +718,7 @@ int mp_radix_size (mp_int * a, int radix, int *size);
|
|||||||
int mp_gcd(fp_int *a, fp_int *b, fp_int *c);
|
int mp_gcd(fp_int *a, fp_int *b, fp_int *c);
|
||||||
int mp_lcm(fp_int *a, fp_int *b, fp_int *c);
|
int mp_lcm(fp_int *a, fp_int *b, fp_int *c);
|
||||||
int mp_prime_is_prime(mp_int* a, int t, int* result);
|
int mp_prime_is_prime(mp_int* a, int t, int* result);
|
||||||
int mp_rand_prime(mp_int* N, int len, RNG* rng, void* heap);
|
int mp_rand_prime(mp_int* N, int len, WC_RNG* rng, void* heap);
|
||||||
int mp_exch(mp_int *a, mp_int *b);
|
int mp_exch(mp_int *a, mp_int *b);
|
||||||
#endif /* WOLFSSL_KEY_GEN */
|
#endif /* WOLFSSL_KEY_GEN */
|
||||||
|
|
||||||
|
|||||||
@@ -143,6 +143,9 @@
|
|||||||
#ifdef HAVE_THREAD_LS
|
#ifdef HAVE_THREAD_LS
|
||||||
#if defined(_MSC_VER)
|
#if defined(_MSC_VER)
|
||||||
#define THREAD_LS_T __declspec(thread)
|
#define THREAD_LS_T __declspec(thread)
|
||||||
|
/* Thread local storage only in FreeRTOS v8.2.1 and higher */
|
||||||
|
#elif defined(FREERTOS)
|
||||||
|
#define THREAD_LS_T
|
||||||
#else
|
#else
|
||||||
#define THREAD_LS_T __thread
|
#define THREAD_LS_T __thread
|
||||||
#endif
|
#endif
|
||||||
@@ -176,7 +179,7 @@
|
|||||||
#define XREALLOC(p, n, h, t) realloc((p), (n))
|
#define XREALLOC(p, n, h, t) realloc((p), (n))
|
||||||
#elif !defined(MICRIUM_MALLOC) && !defined(EBSNET) \
|
#elif !defined(MICRIUM_MALLOC) && !defined(EBSNET) \
|
||||||
&& !defined(WOLFSSL_SAFERTOS) && !defined(FREESCALE_MQX) \
|
&& !defined(WOLFSSL_SAFERTOS) && !defined(FREESCALE_MQX) \
|
||||||
&& !defined(WOLFSSL_LEANPSK)
|
&& !defined(WOLFSSL_LEANPSK) && !defined(FREERTOS)
|
||||||
/* default C runtime, can install different routines at runtime via cbs */
|
/* default C runtime, can install different routines at runtime via cbs */
|
||||||
#include <wolfssl/wolfcrypt/memory.h>
|
#include <wolfssl/wolfcrypt/memory.h>
|
||||||
#define XMALLOC(s, h, t) ((void)h, (void)t, wolfSSL_Malloc((s)))
|
#define XMALLOC(s, h, t) ((void)h, (void)t, wolfSSL_Malloc((s)))
|
||||||
@@ -212,7 +215,7 @@
|
|||||||
|
|
||||||
#ifndef CTYPE_USER
|
#ifndef CTYPE_USER
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#if defined(HAVE_ECC) || defined(HAVE_OCSP)
|
#if defined(HAVE_ECC) || defined(HAVE_OCSP) || defined(WOLFSSL_KEY_GEN)
|
||||||
#define XTOUPPER(c) toupper((c))
|
#define XTOUPPER(c) toupper((c))
|
||||||
#define XISALPHA(c) isalpha((c))
|
#define XISALPHA(c) isalpha((c))
|
||||||
#endif
|
#endif
|
||||||
@@ -268,7 +271,8 @@
|
|||||||
DYNAMIC_TYPE_TLSX = 43,
|
DYNAMIC_TYPE_TLSX = 43,
|
||||||
DYNAMIC_TYPE_OCSP = 44,
|
DYNAMIC_TYPE_OCSP = 44,
|
||||||
DYNAMIC_TYPE_SIGNATURE = 45,
|
DYNAMIC_TYPE_SIGNATURE = 45,
|
||||||
DYNAMIC_TYPE_HASHES = 46
|
DYNAMIC_TYPE_HASHES = 46,
|
||||||
|
DYNAMIC_TYPE_SRP = 47,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* max error buffer string size */
|
/* max error buffer string size */
|
||||||
|
|||||||
62
wolfssl/wolfcrypt/wc_encrypt.h
Normal file
62
wolfssl/wolfcrypt/wc_encrypt.h
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
/* wc_encrypt.h
|
||||||
|
*
|
||||||
|
* Copyright (C) 2006-2015 wolfSSL Inc.
|
||||||
|
*
|
||||||
|
* This file is part of wolfSSL. (formerly known as CyaSSL)
|
||||||
|
*
|
||||||
|
* wolfSSL 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.
|
||||||
|
*
|
||||||
|
* wolfSSL 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
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef WOLF_CRYPT_ENCRYPT_H
|
||||||
|
#define WOLF_CRYPT_ENCRYPT_H
|
||||||
|
|
||||||
|
#include <wolfssl/wolfcrypt/types.h>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef NO_AES
|
||||||
|
WOLFSSL_API int wc_AesCbcEncryptWithKey(byte* out, const byte* in, word32 inSz,
|
||||||
|
const byte* key, word32 keySz,
|
||||||
|
const byte* iv);
|
||||||
|
WOLFSSL_API int wc_AesCbcDecryptWithKey(byte* out, const byte* in, word32 inSz,
|
||||||
|
const byte* key, word32 keySz,
|
||||||
|
const byte* iv);
|
||||||
|
#endif /* !NO_AES */
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef NO_DES3
|
||||||
|
WOLFSSL_API int wc_Des_CbcDecryptWithKey(byte* out,
|
||||||
|
const byte* in, word32 sz,
|
||||||
|
const byte* key, const byte* iv);
|
||||||
|
WOLFSSL_API int wc_Des_CbcEncryptWithKey(byte* out,
|
||||||
|
const byte* in, word32 sz,
|
||||||
|
const byte* key, const byte* iv);
|
||||||
|
WOLFSSL_API int wc_Des3_CbcEncryptWithKey(byte* out,
|
||||||
|
const byte* in, word32 sz,
|
||||||
|
const byte* key, const byte* iv);
|
||||||
|
WOLFSSL_API int wc_Des3_CbcDecryptWithKey(byte* out,
|
||||||
|
const byte* in, word32 sz,
|
||||||
|
const byte* key, const byte* iv);
|
||||||
|
#endif /* !NO_DES3 */
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* WOLF_CRYPT_ENCRYPT_H */
|
||||||
|
|
||||||
Reference in New Issue
Block a user