mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2025-08-02 12:14:38 +02:00
Merge wolfSSL master.
This commit is contained in:
279
src/internal.c
279
src/internal.c
@@ -3576,10 +3576,7 @@ int InitSSL(WOLFSSL* ssl, WOLFSSL_CTX* ctx)
|
|||||||
|
|
||||||
#ifndef NO_OLD_TLS
|
#ifndef NO_OLD_TLS
|
||||||
#ifndef NO_MD5
|
#ifndef NO_MD5
|
||||||
ret = wc_InitMd5(&ssl->hsHashes->hashMd5);
|
wc_InitMd5(&ssl->hsHashes->hashMd5);
|
||||||
if (ret != 0) {
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
#ifndef NO_SHA
|
#ifndef NO_SHA
|
||||||
ret = wc_InitSha(&ssl->hsHashes->hashSha);
|
ret = wc_InitSha(&ssl->hsHashes->hashSha);
|
||||||
@@ -4800,10 +4797,7 @@ static int HashOutputRaw(WOLFSSL* ssl, const byte* output, int sz)
|
|||||||
wc_ShaUpdate(&ssl->hsHashes->hashSha, output, sz);
|
wc_ShaUpdate(&ssl->hsHashes->hashSha, output, sz);
|
||||||
#endif
|
#endif
|
||||||
#ifndef NO_MD5
|
#ifndef NO_MD5
|
||||||
ret = wc_Md5Update(&ssl->hsHashes->hashMd5, output, sz);
|
wc_Md5Update(&ssl->hsHashes->hashMd5, output, sz);
|
||||||
if (ret != 0) {
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
#endif /* NO_OLD_TLS */
|
#endif /* NO_OLD_TLS */
|
||||||
|
|
||||||
@@ -4851,16 +4845,10 @@ static int HashOutput(WOLFSSL* ssl, const byte* output, int sz, int ivSz)
|
|||||||
#endif
|
#endif
|
||||||
#ifndef NO_OLD_TLS
|
#ifndef NO_OLD_TLS
|
||||||
#ifndef NO_SHA
|
#ifndef NO_SHA
|
||||||
ret = wc_ShaUpdate(&ssl->hsHashes->hashSha, adj, sz);
|
wc_ShaUpdate(&ssl->hsHashes->hashSha, adj, sz);
|
||||||
if (ret != 0) {
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
#ifndef NO_MD5
|
#ifndef NO_MD5
|
||||||
ret = wc_Md5Update(&ssl->hsHashes->hashMd5, adj, sz);
|
wc_Md5Update(&ssl->hsHashes->hashMd5, adj, sz);
|
||||||
if (ret != 0) {
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -5530,7 +5518,7 @@ static const byte PAD2[PAD_MD5] =
|
|||||||
|
|
||||||
static int BuildMD5(WOLFSSL* ssl, Hashes* hashes, const byte* sender)
|
static int BuildMD5(WOLFSSL* ssl, Hashes* hashes, const byte* sender)
|
||||||
{
|
{
|
||||||
int ret;
|
|
||||||
byte md5_result[MD5_DIGEST_SIZE];
|
byte md5_result[MD5_DIGEST_SIZE];
|
||||||
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
@@ -5554,75 +5542,18 @@ static int BuildMD5(WOLFSSL* ssl, Hashes* hashes, const byte* sender)
|
|||||||
/* make md5 inner */
|
/* make md5 inner */
|
||||||
md5[0] = ssl->hsHashes->hashMd5 ; /* Save current position */
|
md5[0] = ssl->hsHashes->hashMd5 ; /* Save current position */
|
||||||
|
|
||||||
ret = wc_Md5Update(&ssl->hsHashes->hashMd5, sender, SIZEOF_SENDER);
|
wc_Md5Update(&ssl->hsHashes->hashMd5, sender, SIZEOF_SENDER);
|
||||||
if (ret != 0) {
|
wc_Md5Update(&ssl->hsHashes->hashMd5, ssl->arrays->masterSecret,SECRET_LEN);
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
wc_Md5Update(&ssl->hsHashes->hashMd5, PAD1, PAD_MD5);
|
||||||
XFREE(md5, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
XFREE(md5_2, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
#endif
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
ret = wc_Md5Update(&ssl->hsHashes->hashMd5, ssl->arrays->masterSecret,
|
|
||||||
SECRET_LEN);
|
|
||||||
if (ret != 0) {
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
|
||||||
XFREE(md5, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
XFREE(md5_2, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
#endif
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
ret = wc_Md5Update(&ssl->hsHashes->hashMd5, PAD1, PAD_MD5);
|
|
||||||
if (ret != 0) {
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
|
||||||
XFREE(md5, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
XFREE(md5_2, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
#endif
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
wc_Md5GetHash(&ssl->hsHashes->hashMd5, md5_result);
|
wc_Md5GetHash(&ssl->hsHashes->hashMd5, md5_result);
|
||||||
wc_Md5RestorePos(&ssl->hsHashes->hashMd5, md5) ; /* Restore current position */
|
wc_Md5RestorePos(&ssl->hsHashes->hashMd5, md5) ; /* Restore current position */
|
||||||
|
|
||||||
/* make md5 outer */
|
/* make md5 outer */
|
||||||
ret = wc_InitMd5(md5_2) ;
|
wc_InitMd5(md5_2) ;
|
||||||
if (ret != 0) {
|
wc_Md5Update(md5_2, ssl->arrays->masterSecret,SECRET_LEN);
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
wc_Md5Update(md5_2, PAD2, PAD_MD5);
|
||||||
XFREE(md5, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
wc_Md5Update(md5_2, md5_result, MD5_DIGEST_SIZE);
|
||||||
XFREE(md5_2, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
wc_Md5Final(md5_2, hashes->md5);
|
||||||
#endif
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
ret = wc_Md5Update(md5_2, ssl->arrays->masterSecret,SECRET_LEN);
|
|
||||||
if (ret != 0) {
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
|
||||||
XFREE(md5, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
XFREE(md5_2, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
#endif
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
ret = wc_Md5Update(md5_2, PAD2, PAD_MD5);
|
|
||||||
if (ret != 0) {
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
|
||||||
XFREE(md5, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
XFREE(md5_2, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
#endif
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
ret = wc_Md5Update(md5_2, md5_result, MD5_DIGEST_SIZE);
|
|
||||||
if (ret != 0) {
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
|
||||||
XFREE(md5, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
XFREE(md5_2, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
#endif
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
ret = wc_Md5Final(md5_2, hashes->md5);
|
|
||||||
if (ret != 0) {
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
|
||||||
XFREE(md5, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
XFREE(md5_2, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
#endif
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
XFREE(md5, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
XFREE(md5, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
@@ -10217,9 +10148,10 @@ static int SSL_hmac(WOLFSSL* ssl, byte* digest, const byte* in, word32 sz,
|
|||||||
byte result[MAX_DIGEST_SIZE];
|
byte result[MAX_DIGEST_SIZE];
|
||||||
word32 digestSz = ssl->specs.hash_size; /* actual sizes */
|
word32 digestSz = ssl->specs.hash_size; /* actual sizes */
|
||||||
word32 padSz = ssl->specs.pad_size;
|
word32 padSz = ssl->specs.pad_size;
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
Md5 md5;
|
Md5 md5;
|
||||||
Sha sha;
|
Sha sha;
|
||||||
int ret;
|
|
||||||
|
|
||||||
/* data */
|
/* data */
|
||||||
byte seq[SEQ_SZ];
|
byte seq[SEQ_SZ];
|
||||||
@@ -10237,109 +10169,45 @@ static int SSL_hmac(WOLFSSL* ssl, byte* digest, const byte* in, word32 sz,
|
|||||||
WriteSEQ(ssl, verify, seq);
|
WriteSEQ(ssl, verify, seq);
|
||||||
|
|
||||||
if (ssl->specs.mac_algorithm == md5_mac) {
|
if (ssl->specs.mac_algorithm == md5_mac) {
|
||||||
ret = wc_InitMd5(&md5);
|
wc_InitMd5(&md5);
|
||||||
if (ret != 0) {
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
/* inner */
|
/* inner */
|
||||||
ret = wc_Md5Update(&md5, macSecret, digestSz);
|
wc_Md5Update(&md5, macSecret, digestSz);
|
||||||
if (ret != 0) {
|
wc_Md5Update(&md5, PAD1, padSz);
|
||||||
return ret;
|
wc_Md5Update(&md5, seq, SEQ_SZ);
|
||||||
}
|
wc_Md5Update(&md5, conLen, sizeof(conLen));
|
||||||
ret = wc_Md5Update(&md5, PAD1, padSz);
|
|
||||||
if (ret != 0) {
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
ret = wc_Md5Update(&md5, seq, SEQ_SZ);
|
|
||||||
if (ret != 0) {
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
ret = wc_Md5Update(&md5, conLen, sizeof(conLen));
|
|
||||||
if (ret != 0) {
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
/* in buffer */
|
/* in buffer */
|
||||||
ret = wc_Md5Update(&md5, in, sz);
|
wc_Md5Update(&md5, in, sz);
|
||||||
if (ret != 0) {
|
wc_Md5Final(&md5, result);
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
ret = wc_Md5Final(&md5, result);
|
|
||||||
if (ret != 0) {
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
/* outer */
|
/* outer */
|
||||||
ret = wc_Md5Update(&md5, macSecret, digestSz);
|
wc_Md5Update(&md5, macSecret, digestSz);
|
||||||
if (ret != 0) {
|
wc_Md5Update(&md5, PAD2, padSz);
|
||||||
return ret;
|
wc_Md5Update(&md5, result, digestSz);
|
||||||
}
|
wc_Md5Final(&md5, digest);
|
||||||
ret = wc_Md5Update(&md5, PAD2, padSz);
|
|
||||||
if (ret != 0) {
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
ret = wc_Md5Update(&md5, result, digestSz);
|
|
||||||
if (ret != 0) {
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
ret = wc_Md5Final(&md5, digest);
|
|
||||||
if (ret != 0) {
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ret = wc_InitSha(&sha);
|
ret = wc_InitSha(&sha);
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
return ret;
|
return ret;
|
||||||
/* inner */
|
/* inner */
|
||||||
ret = wc_ShaUpdate(&sha, macSecret, digestSz);
|
wc_ShaUpdate(&sha, macSecret, digestSz);
|
||||||
if (ret != 0) {
|
wc_ShaUpdate(&sha, PAD1, padSz);
|
||||||
return ret;
|
wc_ShaUpdate(&sha, seq, SEQ_SZ);
|
||||||
}
|
wc_ShaUpdate(&sha, conLen, sizeof(conLen));
|
||||||
ret = wc_ShaUpdate(&sha, PAD1, padSz);
|
|
||||||
if (ret != 0) {
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
ret = wc_ShaUpdate(&sha, seq, SEQ_SZ);
|
|
||||||
if (ret != 0) {
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
ret = wc_ShaUpdate(&sha, conLen, sizeof(conLen));
|
|
||||||
if (ret != 0) {
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
/* in buffer */
|
/* in buffer */
|
||||||
ret = wc_ShaUpdate(&sha, in, sz);
|
wc_ShaUpdate(&sha, in, sz);
|
||||||
if (ret != 0) {
|
wc_ShaFinal(&sha, result);
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
ret = wc_ShaFinal(&sha, result);
|
|
||||||
if (ret != 0) {
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
/* outer */
|
/* outer */
|
||||||
ret = wc_ShaUpdate(&sha, macSecret, digestSz);
|
wc_ShaUpdate(&sha, macSecret, digestSz);
|
||||||
if (ret != 0) {
|
wc_ShaUpdate(&sha, PAD2, padSz);
|
||||||
return ret;
|
wc_ShaUpdate(&sha, result, digestSz);
|
||||||
}
|
wc_ShaFinal(&sha, digest);
|
||||||
ret = wc_ShaUpdate(&sha, PAD2, padSz);
|
|
||||||
if (ret != 0) {
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
ret = wc_ShaUpdate(&sha, result, digestSz);
|
|
||||||
if (ret != 0) {
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
ret = wc_ShaFinal(&sha, digest);
|
|
||||||
if (ret != 0) {
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return ret;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef NO_CERTS
|
#ifndef NO_CERTS
|
||||||
static int BuildMD5_CertVerify(WOLFSSL* ssl, byte* digest)
|
static void BuildMD5_CertVerify(WOLFSSL* ssl, byte* digest)
|
||||||
{
|
{
|
||||||
int ret;
|
|
||||||
byte md5_result[MD5_DIGEST_SIZE];
|
byte md5_result[MD5_DIGEST_SIZE];
|
||||||
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
@@ -10352,75 +10220,23 @@ static int BuildMD5_CertVerify(WOLFSSL* ssl, byte* digest)
|
|||||||
|
|
||||||
/* make md5 inner */
|
/* make md5 inner */
|
||||||
md5[0] = ssl->hsHashes->hashMd5 ; /* Save current position */
|
md5[0] = ssl->hsHashes->hashMd5 ; /* Save current position */
|
||||||
ret = wc_Md5Update(&ssl->hsHashes->hashMd5, ssl->arrays->masterSecret,
|
wc_Md5Update(&ssl->hsHashes->hashMd5, ssl->arrays->masterSecret,SECRET_LEN);
|
||||||
SECRET_LEN);
|
wc_Md5Update(&ssl->hsHashes->hashMd5, PAD1, PAD_MD5);
|
||||||
if (ret != 0) {
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
|
||||||
XFREE(md5, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
XFREE(md5_2, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
#endif
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
ret = wc_Md5Update(&ssl->hsHashes->hashMd5, PAD1, PAD_MD5);
|
|
||||||
if (ret != 0) {
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
|
||||||
XFREE(md5, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
XFREE(md5_2, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
#endif
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
wc_Md5GetHash(&ssl->hsHashes->hashMd5, md5_result);
|
wc_Md5GetHash(&ssl->hsHashes->hashMd5, md5_result);
|
||||||
wc_Md5RestorePos(&ssl->hsHashes->hashMd5, md5) ; /* Restore current position */
|
wc_Md5RestorePos(&ssl->hsHashes->hashMd5, md5) ; /* Restore current position */
|
||||||
|
|
||||||
/* make md5 outer */
|
/* make md5 outer */
|
||||||
ret = wc_InitMd5(md5_2) ;
|
wc_InitMd5(md5_2) ;
|
||||||
if (ret != 0) {
|
wc_Md5Update(md5_2, ssl->arrays->masterSecret, SECRET_LEN);
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
wc_Md5Update(md5_2, PAD2, PAD_MD5);
|
||||||
XFREE(md5, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
wc_Md5Update(md5_2, md5_result, MD5_DIGEST_SIZE);
|
||||||
XFREE(md5_2, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
#endif
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
ret = wc_Md5Update(md5_2, ssl->arrays->masterSecret, SECRET_LEN);
|
|
||||||
if (ret != 0) {
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
|
||||||
XFREE(md5, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
XFREE(md5_2, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
#endif
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
ret = wc_Md5Update(md5_2, PAD2, PAD_MD5);
|
|
||||||
if (ret != 0) {
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
|
||||||
XFREE(md5, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
XFREE(md5_2, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
#endif
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
ret = wc_Md5Update(md5_2, md5_result, MD5_DIGEST_SIZE);
|
|
||||||
if (ret != 0) {
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
|
||||||
XFREE(md5, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
XFREE(md5_2, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
#endif
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = wc_Md5Final(md5_2, digest);
|
wc_Md5Final(md5_2, digest);
|
||||||
if (ret != 0) {
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
|
||||||
XFREE(md5, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
XFREE(md5_2, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
#endif
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
XFREE(md5, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
XFREE(md5, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
XFREE(md5_2, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
XFREE(md5_2, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -10497,10 +10313,7 @@ static int BuildCertHashes(WOLFSSL* ssl, Hashes* hashes)
|
|||||||
}
|
}
|
||||||
#if ! defined( NO_OLD_TLS )
|
#if ! defined( NO_OLD_TLS )
|
||||||
else {
|
else {
|
||||||
ret = BuildMD5_CertVerify(ssl, hashes->md5);
|
BuildMD5_CertVerify(ssl, hashes->md5);
|
||||||
if (ret != 0) {
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
BuildSHA_CertVerify(ssl, hashes->sha);
|
BuildSHA_CertVerify(ssl, hashes->sha);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
77
src/ssl.c
77
src/ssl.c
@@ -1669,10 +1669,7 @@ int wolfSSL_Rehandshake(WOLFSSL* ssl)
|
|||||||
|
|
||||||
#ifndef NO_OLD_TLS
|
#ifndef NO_OLD_TLS
|
||||||
#ifndef NO_MD5
|
#ifndef NO_MD5
|
||||||
ret = wc_InitMd5(&ssl->hsHashes->hashMd5);
|
wc_InitMd5(&ssl->hsHashes->hashMd5);
|
||||||
if (ret != 0) {
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
#ifndef NO_SHA
|
#ifndef NO_SHA
|
||||||
ret = wc_InitSha(&ssl->hsHashes->hashSha);
|
ret = wc_InitSha(&ssl->hsHashes->hashSha);
|
||||||
@@ -7768,9 +7765,6 @@ int wolfSSL_DTLS_SetCookieSecret(WOLFSSL* ssl,
|
|||||||
int wolfSSL_connect(WOLFSSL* ssl)
|
int wolfSSL_connect(WOLFSSL* ssl)
|
||||||
{
|
{
|
||||||
int neededState;
|
int neededState;
|
||||||
#if !defined(NO_OLD_TLS) && defined(WOLFSSL_DTLS)
|
|
||||||
int ret;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
WOLFSSL_ENTER("SSL_connect()");
|
WOLFSSL_ENTER("SSL_connect()");
|
||||||
|
|
||||||
@@ -7862,17 +7856,14 @@ int wolfSSL_DTLS_SetCookieSecret(WOLFSSL* ssl,
|
|||||||
#ifdef WOLFSSL_DTLS
|
#ifdef WOLFSSL_DTLS
|
||||||
if (IsDtlsNotSctpMode(ssl)) {
|
if (IsDtlsNotSctpMode(ssl)) {
|
||||||
/* re-init hashes, exclude first hello and verify request */
|
/* re-init hashes, exclude first hello and verify request */
|
||||||
#ifndef NO_OLD_TLS
|
#ifndef NO_OLD_TLS
|
||||||
ret = wc_InitMd5(&ssl->hsHashes->hashMd5);
|
wc_InitMd5(&ssl->hsHashes->hashMd5);
|
||||||
if (ret) {
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
if ( (ssl->error = wc_InitSha(&ssl->hsHashes->hashSha))
|
if ( (ssl->error = wc_InitSha(&ssl->hsHashes->hashSha))
|
||||||
!= 0) {
|
!= 0) {
|
||||||
WOLFSSL_ERROR(ssl->error);
|
WOLFSSL_ERROR(ssl->error);
|
||||||
return SSL_FATAL_ERROR;
|
return SSL_FATAL_ERROR;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (IsAtLeastTLSv1_2(ssl)) {
|
if (IsAtLeastTLSv1_2(ssl)) {
|
||||||
#ifndef NO_SHA256
|
#ifndef NO_SHA256
|
||||||
if ( (ssl->error = wc_InitSha256(
|
if ( (ssl->error = wc_InitSha256(
|
||||||
@@ -10704,7 +10695,6 @@ int wolfSSL_set_compression(WOLFSSL* ssl)
|
|||||||
int keyLeft;
|
int keyLeft;
|
||||||
int ivLeft;
|
int ivLeft;
|
||||||
int keyOutput = 0;
|
int keyOutput = 0;
|
||||||
int ret;
|
|
||||||
byte digest[MD5_DIGEST_SIZE];
|
byte digest[MD5_DIGEST_SIZE];
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
Md5* md5 = NULL;
|
Md5* md5 = NULL;
|
||||||
@@ -10721,10 +10711,7 @@ int wolfSSL_set_compression(WOLFSSL* ssl)
|
|||||||
(void)type;
|
(void)type;
|
||||||
|
|
||||||
WOLFSSL_ENTER("wolfSSL_EVP_BytesToKey");
|
WOLFSSL_ENTER("wolfSSL_EVP_BytesToKey");
|
||||||
ret = wc_InitMd5(md5);
|
wc_InitMd5(md5);
|
||||||
if (ret != 0) {
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* only support MD5 for now */
|
/* only support MD5 for now */
|
||||||
if (XSTRNCMP(md, "MD5", 3) != 0) return 0;
|
if (XSTRNCMP(md, "MD5", 3) != 0) return 0;
|
||||||
@@ -10769,56 +10756,18 @@ int wolfSSL_set_compression(WOLFSSL* ssl)
|
|||||||
while (keyOutput < (keyLen + ivLen)) {
|
while (keyOutput < (keyLen + ivLen)) {
|
||||||
int digestLeft = MD5_DIGEST_SIZE;
|
int digestLeft = MD5_DIGEST_SIZE;
|
||||||
/* D_(i - 1) */
|
/* D_(i - 1) */
|
||||||
if (keyOutput) { /* first time D_0 is empty */
|
if (keyOutput) /* first time D_0 is empty */
|
||||||
ret = wc_Md5Update(md5, digest, MD5_DIGEST_SIZE);
|
wc_Md5Update(md5, digest, MD5_DIGEST_SIZE);
|
||||||
if (ret != 0) {
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
|
||||||
XFREE(md5, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
#endif
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* data */
|
/* data */
|
||||||
ret = wc_Md5Update(md5, data, sz);
|
wc_Md5Update(md5, data, sz);
|
||||||
if (ret !=0) {
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
|
||||||
XFREE(md5, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
#endif
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
/* salt */
|
/* salt */
|
||||||
if (salt) {
|
if (salt)
|
||||||
ret = wc_Md5Update(md5, salt, EVP_SALT_SIZE);
|
wc_Md5Update(md5, salt, EVP_SALT_SIZE);
|
||||||
if (ret != 0) {
|
wc_Md5Final(md5, digest);
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
|
||||||
XFREE(md5, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
#endif
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ret = wc_Md5Final(md5, digest);
|
|
||||||
if (ret != 0) {
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
|
||||||
XFREE(md5, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
#endif
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
/* count */
|
/* count */
|
||||||
for (j = 1; j < count; j++) {
|
for (j = 1; j < count; j++) {
|
||||||
ret = wc_Md5Update(md5, digest, MD5_DIGEST_SIZE);
|
wc_Md5Update(md5, digest, MD5_DIGEST_SIZE);
|
||||||
if (ret != 0) {
|
wc_Md5Final(md5, digest);
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
|
||||||
XFREE(md5, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
#endif
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
ret = wc_Md5Final(md5, digest);
|
|
||||||
if (ret != 0) {
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
|
||||||
XFREE(md5, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
#endif
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (keyLeft) {
|
if (keyLeft) {
|
||||||
|
@@ -1132,7 +1132,6 @@ int md5_test(void)
|
|||||||
testVector a, b, c, d, e;
|
testVector a, b, c, d, e;
|
||||||
testVector test_md5[5];
|
testVector test_md5[5];
|
||||||
int times = sizeof(test_md5) / sizeof(testVector), i;
|
int times = sizeof(test_md5) / sizeof(testVector), i;
|
||||||
int ret;
|
|
||||||
|
|
||||||
a.input = "abc";
|
a.input = "abc";
|
||||||
a.output = "\x90\x01\x50\x98\x3c\xd2\x4f\xb0\xd6\x96\x3f\x7d\x28\xe1\x7f"
|
a.output = "\x90\x01\x50\x98\x3c\xd2\x4f\xb0\xd6\x96\x3f\x7d\x28\xe1\x7f"
|
||||||
@@ -1172,21 +1171,11 @@ int md5_test(void)
|
|||||||
test_md5[3] = d;
|
test_md5[3] = d;
|
||||||
test_md5[4] = e;
|
test_md5[4] = e;
|
||||||
|
|
||||||
ret = wc_InitMd5(&md5);
|
wc_InitMd5(&md5);
|
||||||
if (ret != 0) {
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < times; ++i) {
|
for (i = 0; i < times; ++i) {
|
||||||
ret = wc_Md5Update(&md5, (byte*)test_md5[i].input,
|
wc_Md5Update(&md5, (byte*)test_md5[i].input, (word32)test_md5[i].inLen);
|
||||||
(word32)test_md5[i].inLen);
|
wc_Md5Final(&md5, hash);
|
||||||
if (ret != 0) {
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
ret = wc_Md5Final(&md5, hash);
|
|
||||||
if (ret != 0){
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (XMEMCMP(hash, test_md5[i].output, MD5_DIGEST_SIZE) != 0)
|
if (XMEMCMP(hash, test_md5[i].output, MD5_DIGEST_SIZE) != 0)
|
||||||
return -5 - i;
|
return -5 - i;
|
||||||
|
Reference in New Issue
Block a user