forked from wolfSSL/wolfssl
3
.gitignore
vendored
3
.gitignore
vendored
@@ -64,6 +64,7 @@ testsuite/testsuite
|
|||||||
tests/unit
|
tests/unit
|
||||||
testsuite/testsuite.test
|
testsuite/testsuite.test
|
||||||
tests/unit.test
|
tests/unit.test
|
||||||
|
tests/bio_write_test.txt
|
||||||
testsuite/*.der
|
testsuite/*.der
|
||||||
testsuite/*.pem
|
testsuite/*.pem
|
||||||
testsuite/*.raw
|
testsuite/*.raw
|
||||||
@@ -188,4 +189,4 @@ wolfcrypt/user-crypto/lib/libusercrypto.*
|
|||||||
wrapper/CSharp/x64/
|
wrapper/CSharp/x64/
|
||||||
|
|
||||||
# Visual Studio Code Workspace Files
|
# Visual Studio Code Workspace Files
|
||||||
*.vscode
|
*.vscode
|
||||||
|
|||||||
9
certs/dsaparams.pem
Normal file
9
certs/dsaparams.pem
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
-----BEGIN DSA PARAMETERS-----
|
||||||
|
MIIBHwKBgQDN3iVogFMN5XfW0pA5P5CiPzOUbuhPK2OrMKsVuhHqil2NzLjUodXB
|
||||||
|
R51ac2piSdEGB2f2L6M5vU4NtNMiI4TskyZaSe58iUhmTejo2FD7pXGfIhjl5gtG
|
||||||
|
h2buUo9GT7UDzu3jvuW1gdJZ6cCtTdBNJve6UOjJj/4kGT0up1I8bQIVAPtH++yB
|
||||||
|
IMgc6Uq6BG8Zm5TugmfTAoGBAJuVu4XFWEoynKpEhdZo3D4U9M5to0k46tZhSJJa
|
||||||
|
QJVJOKrhOSloWEeKSwHhLo5sY29AylA/jAuZ5HJCuLHCJkjxnIPGNy5arhEJ2fOt
|
||||||
|
H2+trVDjeDLm3o6qv9EAn7MCEhmiFewUGFwOJs75rsx7tdEm/IX+FJO2nX124zWX
|
||||||
|
Ht7E
|
||||||
|
-----END DSA PARAMETERS-----
|
||||||
@@ -31,7 +31,8 @@ EXTRA_DIST += \
|
|||||||
certs/server-revoked-cert.pem \
|
certs/server-revoked-cert.pem \
|
||||||
certs/server-revoked-key.pem \
|
certs/server-revoked-key.pem \
|
||||||
certs/wolfssl-website-ca.pem \
|
certs/wolfssl-website-ca.pem \
|
||||||
certs/test-servercert.p12
|
certs/test-servercert.p12 \
|
||||||
|
certs/dsaparams.pem
|
||||||
EXTRA_DIST += \
|
EXTRA_DIST += \
|
||||||
certs/ca-key.der \
|
certs/ca-key.der \
|
||||||
certs/ca-cert.der \
|
certs/ca-cert.der \
|
||||||
|
|||||||
@@ -1288,6 +1288,15 @@ THREAD_RETURN WOLFSSL_THREAD client_test(void* args)
|
|||||||
wolfSSL_CTX_set_verify(ctx, SSL_VERIFY_NONE, 0);
|
wolfSSL_CTX_set_verify(ctx, SSL_VERIFY_NONE, 0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(OPENSSL_EXTRA)
|
||||||
|
if (wolfSSL_CTX_get_read_ahead(ctx) != 0) {
|
||||||
|
err_sys("bad read ahead default value");
|
||||||
|
}
|
||||||
|
if (wolfSSL_CTX_set_read_ahead(ctx, 1) != SSL_SUCCESS) {
|
||||||
|
err_sys("error setting read ahead value");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
ssl = wolfSSL_new(ctx);
|
ssl = wolfSSL_new(ctx);
|
||||||
if (ssl == NULL)
|
if (ssl == NULL)
|
||||||
err_sys("unable to get SSL object");
|
err_sys("unable to get SSL object");
|
||||||
@@ -1445,13 +1454,13 @@ THREAD_RETURN WOLFSSL_THREAD client_test(void* args)
|
|||||||
|
|
||||||
#ifdef OPENSSL_EXTRA
|
#ifdef OPENSSL_EXTRA
|
||||||
{
|
{
|
||||||
byte* rnd;
|
byte* rnd;
|
||||||
byte* pt;
|
byte* pt;
|
||||||
int size;
|
size_t size;
|
||||||
|
|
||||||
/* get size of buffer then print */
|
/* get size of buffer then print */
|
||||||
size = wolfSSL_get_client_random(NULL, NULL, 0);
|
size = wolfSSL_get_client_random(NULL, NULL, 0);
|
||||||
if (size < 0) {
|
if (size == 0) {
|
||||||
err_sys("error getting client random buffer size");
|
err_sys("error getting client random buffer size");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1461,7 +1470,7 @@ THREAD_RETURN WOLFSSL_THREAD client_test(void* args)
|
|||||||
}
|
}
|
||||||
|
|
||||||
size = wolfSSL_get_client_random(ssl, rnd, size);
|
size = wolfSSL_get_client_random(ssl, rnd, size);
|
||||||
if (size < 0) {
|
if (size == 0) {
|
||||||
XFREE(rnd, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
XFREE(rnd, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
err_sys("error getting client random buffer");
|
err_sys("error getting client random buffer");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -882,6 +882,9 @@ THREAD_RETURN CYASSL_THREAD server_test(void* args)
|
|||||||
ssl = SSL_new(ctx);
|
ssl = SSL_new(ctx);
|
||||||
if (ssl == NULL)
|
if (ssl == NULL)
|
||||||
err_sys("unable to get SSL");
|
err_sys("unable to get SSL");
|
||||||
|
#ifdef OPENSSL_EXTRA
|
||||||
|
wolfSSL_KeepArrays(ssl);
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(WOLFSSL_STATIC_MEMORY) && defined(DEBUG_WOLFSSL)
|
#if defined(WOLFSSL_STATIC_MEMORY) && defined(DEBUG_WOLFSSL)
|
||||||
{
|
{
|
||||||
@@ -1022,6 +1025,39 @@ THREAD_RETURN CYASSL_THREAD server_test(void* args)
|
|||||||
}
|
}
|
||||||
|
|
||||||
showPeer(ssl);
|
showPeer(ssl);
|
||||||
|
if (SSL_state(ssl) != 0) {
|
||||||
|
err_sys("SSL in error state");
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef OPENSSL_EXTRA
|
||||||
|
{
|
||||||
|
byte* rnd;
|
||||||
|
byte* pt;
|
||||||
|
size_t size;
|
||||||
|
|
||||||
|
/* get size of buffer then print */
|
||||||
|
size = wolfSSL_get_server_random(NULL, NULL, 0);
|
||||||
|
if (size == 0) {
|
||||||
|
err_sys("error getting server random buffer size");
|
||||||
|
}
|
||||||
|
|
||||||
|
rnd = (byte*)XMALLOC(size, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
if (rnd == NULL) {
|
||||||
|
err_sys("error creating server random buffer");
|
||||||
|
}
|
||||||
|
|
||||||
|
size = wolfSSL_get_server_random(ssl, rnd, size);
|
||||||
|
if (size == 0) {
|
||||||
|
XFREE(rnd, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
err_sys("error getting server random buffer");
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("Server Random : ");
|
||||||
|
for (pt = rnd; pt < rnd + size; pt++) printf("%02X", *pt);
|
||||||
|
printf("\n");
|
||||||
|
XFREE(rnd, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_ALPN
|
#ifdef HAVE_ALPN
|
||||||
if (alpnList != NULL) {
|
if (alpnList != NULL) {
|
||||||
|
|||||||
@@ -231,6 +231,7 @@ mkdir -p $RPM_BUILD_ROOT/
|
|||||||
%{_includedir}/wolfssl/wolfcrypt/wolfevent.h
|
%{_includedir}/wolfssl/wolfcrypt/wolfevent.h
|
||||||
%{_includedir}/wolfssl/error-ssl.h
|
%{_includedir}/wolfssl/error-ssl.h
|
||||||
%{_includedir}/wolfssl/ocsp.h
|
%{_includedir}/wolfssl/ocsp.h
|
||||||
|
%{_includedir}/wolfssl/openssl/aes.h
|
||||||
%{_includedir}/wolfssl/openssl/asn1.h
|
%{_includedir}/wolfssl/openssl/asn1.h
|
||||||
%{_includedir}/wolfssl/openssl/bio.h
|
%{_includedir}/wolfssl/openssl/bio.h
|
||||||
%{_includedir}/wolfssl/openssl/bn.h
|
%{_includedir}/wolfssl/openssl/bn.h
|
||||||
@@ -275,6 +276,8 @@ mkdir -p $RPM_BUILD_ROOT/
|
|||||||
%{_libdir}/pkgconfig/wolfssl.pc
|
%{_libdir}/pkgconfig/wolfssl.pc
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Fri Nov 11 2016 Jacob Barthelmeh <jacob@wolfssl.com>
|
||||||
|
- Added header for wolfssl/openssl/aes.h
|
||||||
* Fri Oct 28 2016 Jacob Barthelmeh <jacob@wolfssl.com>
|
* Fri Oct 28 2016 Jacob Barthelmeh <jacob@wolfssl.com>
|
||||||
- Added header for pkcs12
|
- Added header for pkcs12
|
||||||
* Fri Sep 23 2016 John Safranek <john@wolfssl.com>
|
* Fri Sep 23 2016 John Safranek <john@wolfssl.com>
|
||||||
|
|||||||
446
src/bio.c
Normal file
446
src/bio.c
Normal file
@@ -0,0 +1,446 @@
|
|||||||
|
/* bio.c
|
||||||
|
*
|
||||||
|
* Copyright (C) 2006-2016 wolfSSL Inc.
|
||||||
|
*
|
||||||
|
* This file is part of wolfSSL.
|
||||||
|
*
|
||||||
|
* 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-1335, USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*** TBD ***/
|
||||||
|
WOLFSSL_API long wolfSSL_BIO_ctrl(WOLFSSL_BIO *bio, int cmd, long larg, void *parg)
|
||||||
|
{
|
||||||
|
(void)bio;
|
||||||
|
(void)cmd;
|
||||||
|
(void)larg;
|
||||||
|
(void)parg;
|
||||||
|
|
||||||
|
WOLFSSL_ENTER("BIO_ctrl");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Return the number of pending bytes in read and write buffers */
|
||||||
|
size_t wolfSSL_BIO_ctrl_pending(WOLFSSL_BIO *bio)
|
||||||
|
{
|
||||||
|
WOLFSSL_ENTER("BIO_ctrl_pending");
|
||||||
|
if (bio == NULL) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bio->ssl != NULL) {
|
||||||
|
return (long)wolfSSL_pending(bio->ssl);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bio->type == BIO_MEMORY) {
|
||||||
|
return bio->memLen;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* type BIO_BIO then check paired buffer */
|
||||||
|
if (bio->type == BIO_BIO && bio->pair != NULL) {
|
||||||
|
WOLFSSL_BIO* pair = bio->pair;
|
||||||
|
if (pair->wrIdx > 0 && pair->wrIdx <= pair->rdIdx) {
|
||||||
|
/* in wrap around state where begining of buffer is being
|
||||||
|
* overwritten */
|
||||||
|
return pair->wrSz - pair->rdIdx + pair->wrIdx;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
/* simple case where has not wrapped around */
|
||||||
|
return pair->wrIdx - pair->rdIdx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
long wolfSSL_BIO_get_mem_ptr(WOLFSSL_BIO *bio, WOLFSSL_BUF_MEM **ptr)
|
||||||
|
{
|
||||||
|
WOLFSSL_ENTER("BIO_get_mem_ptr");
|
||||||
|
|
||||||
|
if (bio == NULL || ptr == NULL) {
|
||||||
|
return SSL_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
*ptr = (WOLFSSL_BUF_MEM*)(bio->mem);
|
||||||
|
return SSL_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*** TBD ***/
|
||||||
|
WOLFSSL_API long wolfSSL_BIO_int_ctrl(WOLFSSL_BIO *bp, int cmd, long larg, int iarg)
|
||||||
|
{
|
||||||
|
(void) bp;
|
||||||
|
(void) cmd;
|
||||||
|
(void) larg;
|
||||||
|
(void) iarg;
|
||||||
|
WOLFSSL_ENTER("BIO_int_ctrl");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int wolfSSL_BIO_set_write_buf_size(WOLFSSL_BIO *bio, long size)
|
||||||
|
{
|
||||||
|
WOLFSSL_ENTER("wolfSSL_BIO_set_write_buf_size");
|
||||||
|
|
||||||
|
if (bio == NULL || bio->type != BIO_BIO || size < 0) {
|
||||||
|
return SSL_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* if already in pair then do not change size */
|
||||||
|
if (bio->pair != NULL) {
|
||||||
|
WOLFSSL_MSG("WOLFSSL_BIO is paired, free from pair before changing");
|
||||||
|
return SSL_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
bio->wrSz = (int)size;
|
||||||
|
if (bio->wrSz < 0) {
|
||||||
|
WOLFSSL_MSG("Unexpected negative size value");
|
||||||
|
return SSL_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bio->mem != NULL) {
|
||||||
|
XFREE(bio->mem, bio->heap, DYNAMIC_TYPE_OPENSSL);
|
||||||
|
}
|
||||||
|
|
||||||
|
bio->mem = (byte*)XMALLOC(bio->wrSz, bio->heap, DYNAMIC_TYPE_OPENSSL);
|
||||||
|
if (bio->mem == NULL) {
|
||||||
|
WOLFSSL_MSG("Memory allocation error");
|
||||||
|
return SSL_FAILURE;
|
||||||
|
}
|
||||||
|
bio->wrIdx = 0;
|
||||||
|
bio->rdIdx = 0;
|
||||||
|
|
||||||
|
return SSL_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Joins two BIO_BIO types. The write of b1 goes to the read of b2 and vise
|
||||||
|
* versa. Creating something similar to a two way pipe.
|
||||||
|
* Reading and writing between the two BIOs is not thread safe, they are
|
||||||
|
* expected to be used by the same thread. */
|
||||||
|
int wolfSSL_BIO_make_bio_pair(WOLFSSL_BIO *b1, WOLFSSL_BIO *b2)
|
||||||
|
{
|
||||||
|
WOLFSSL_ENTER("wolfSSL_BIO_make_bio_pair");
|
||||||
|
|
||||||
|
if (b1 == NULL || b2 == NULL) {
|
||||||
|
WOLFSSL_LEAVE("wolfSSL_BIO_make_bio_pair", BAD_FUNC_ARG);
|
||||||
|
return SSL_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* both are expected to be of type BIO and not already paired */
|
||||||
|
if (b1->type != BIO_BIO || b2->type != BIO_BIO ||
|
||||||
|
b1->pair != NULL || b2->pair != NULL) {
|
||||||
|
WOLFSSL_MSG("Expected type BIO and not already paired");
|
||||||
|
return SSL_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* set default write size if not already set */
|
||||||
|
if (b1->mem == NULL && wolfSSL_BIO_set_write_buf_size(b1,
|
||||||
|
WOLFSSL_BIO_SIZE) != SSL_SUCCESS) {
|
||||||
|
return SSL_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (b2->mem == NULL && wolfSSL_BIO_set_write_buf_size(b2,
|
||||||
|
WOLFSSL_BIO_SIZE) != SSL_SUCCESS) {
|
||||||
|
return SSL_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
b1->pair = b2;
|
||||||
|
b2->pair = b1;
|
||||||
|
|
||||||
|
return SSL_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int wolfSSL_BIO_ctrl_reset_read_request(WOLFSSL_BIO *b)
|
||||||
|
{
|
||||||
|
WOLFSSL_ENTER("wolfSSL_BIO_ctrl_reset_read_request");
|
||||||
|
|
||||||
|
if (b == NULL) {
|
||||||
|
return SSL_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
b->readRq = 0;
|
||||||
|
|
||||||
|
return SSL_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Does not advance read index pointer */
|
||||||
|
int wolfSSL_BIO_nread0(WOLFSSL_BIO *bio, char **buf)
|
||||||
|
{
|
||||||
|
WOLFSSL_ENTER("wolfSSL_BIO_nread0");
|
||||||
|
|
||||||
|
if (bio == NULL || buf == NULL) {
|
||||||
|
WOLFSSL_MSG("NULL argument passed in");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* if paired read from pair */
|
||||||
|
if (bio->pair != NULL) {
|
||||||
|
WOLFSSL_BIO* pair = bio->pair;
|
||||||
|
|
||||||
|
/* case where have wrapped around write buffer */
|
||||||
|
*buf = (char*)pair->mem + pair->rdIdx;
|
||||||
|
if (pair->wrIdx > 0 && pair->rdIdx >= pair->wrIdx) {
|
||||||
|
return pair->wrSz - pair->rdIdx;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return pair->wrIdx - pair->rdIdx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* similar to wolfSSL_BIO_nread0 but advances the read index */
|
||||||
|
int wolfSSL_BIO_nread(WOLFSSL_BIO *bio, char **buf, int num)
|
||||||
|
{
|
||||||
|
int sz = WOLFSSL_BIO_UNSET;
|
||||||
|
|
||||||
|
WOLFSSL_ENTER("wolfSSL_BIO_nread");
|
||||||
|
|
||||||
|
if (bio == NULL || buf == NULL) {
|
||||||
|
WOLFSSL_MSG("NULL argument passed in");
|
||||||
|
return SSL_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bio->pair != NULL) {
|
||||||
|
/* special case if asking to read 0 bytes */
|
||||||
|
if (num == 0) {
|
||||||
|
*buf = (char*)bio->pair->mem + bio->pair->rdIdx;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* get amount able to read and set buffer pointer */
|
||||||
|
sz = wolfSSL_BIO_nread0(bio, buf);
|
||||||
|
if (sz == 0) {
|
||||||
|
return WOLFSSL_BIO_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (num < sz) {
|
||||||
|
sz = num;
|
||||||
|
}
|
||||||
|
bio->pair->rdIdx += sz;
|
||||||
|
|
||||||
|
/* check if have read to the end of the buffer and need to reset */
|
||||||
|
if (bio->pair->rdIdx == bio->pair->wrSz) {
|
||||||
|
bio->pair->rdIdx = 0;
|
||||||
|
if (bio->pair->wrIdx == bio->pair->wrSz) {
|
||||||
|
bio->pair->wrIdx = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* check if read up to write index, if so then reset indexs */
|
||||||
|
if (bio->pair->rdIdx == bio->pair->wrIdx) {
|
||||||
|
bio->pair->rdIdx = 0;
|
||||||
|
bio->pair->wrIdx = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return sz;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int wolfSSL_BIO_nwrite(WOLFSSL_BIO *bio, char **buf, int num)
|
||||||
|
{
|
||||||
|
int sz = WOLFSSL_BIO_UNSET;
|
||||||
|
|
||||||
|
WOLFSSL_ENTER("wolfSSL_BIO_nwrite");
|
||||||
|
|
||||||
|
if (bio == NULL || buf == NULL) {
|
||||||
|
WOLFSSL_MSG("NULL argument passed in");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bio->pair != NULL) {
|
||||||
|
if (num == 0) {
|
||||||
|
*buf = (char*)bio->mem + bio->wrIdx;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bio->wrIdx < bio->rdIdx) {
|
||||||
|
/* if wrapped around only write up to read index. In this case
|
||||||
|
* rdIdx is always greater then wrIdx so sz will not be negative. */
|
||||||
|
sz = bio->rdIdx - bio->wrIdx;
|
||||||
|
}
|
||||||
|
else if (bio->rdIdx > 0 && bio->wrIdx == bio->rdIdx) {
|
||||||
|
return WOLFSSL_BIO_ERROR; /* no more room to write */
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
/* write index is past read index so write to end of buffer */
|
||||||
|
sz = bio->wrSz - bio->wrIdx;
|
||||||
|
|
||||||
|
if (sz <= 0) {
|
||||||
|
/* either an error has occured with write index or it is at the
|
||||||
|
* end of the write buffer. */
|
||||||
|
if (bio->rdIdx == 0) {
|
||||||
|
/* no more room, nothing has been read */
|
||||||
|
return WOLFSSL_BIO_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
bio->wrIdx = 0;
|
||||||
|
|
||||||
|
/* check case where read index is not at 0 */
|
||||||
|
if (bio->rdIdx > 0) {
|
||||||
|
sz = bio->rdIdx; /* can write up to the read index */
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
sz = bio->wrSz; /* no restriction other then buffer size */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (num < sz) {
|
||||||
|
sz = num;
|
||||||
|
}
|
||||||
|
*buf = (char*)bio->mem + bio->wrIdx;
|
||||||
|
bio->wrIdx += sz;
|
||||||
|
|
||||||
|
/* if at the end of the buffer and space for wrap around then set
|
||||||
|
* write index back to 0 */
|
||||||
|
if (bio->wrIdx == bio->wrSz && bio->rdIdx > 0) {
|
||||||
|
bio->wrIdx = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return sz;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Reset BIO to initial state */
|
||||||
|
int wolfSSL_BIO_reset(WOLFSSL_BIO *bio)
|
||||||
|
{
|
||||||
|
WOLFSSL_ENTER("wolfSSL_BIO_reset");
|
||||||
|
|
||||||
|
if (bio == NULL) {
|
||||||
|
WOLFSSL_MSG("NULL argument passed in");
|
||||||
|
/* -1 is consistent failure even for FILE type */
|
||||||
|
return WOLFSSL_BIO_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (bio->type) {
|
||||||
|
#ifndef NO_FILESYSTEM
|
||||||
|
case BIO_FILE:
|
||||||
|
XREWIND(bio->file);
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
case BIO_BIO:
|
||||||
|
bio->rdIdx = 0;
|
||||||
|
bio->wrIdx = 0;
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
default:
|
||||||
|
WOLFSSL_MSG("Unknown BIO type needs added to reset function");
|
||||||
|
}
|
||||||
|
|
||||||
|
return WOLFSSL_BIO_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifndef NO_FILESYSTEM
|
||||||
|
long wolfSSL_BIO_set_fp(WOLFSSL_BIO *bio, XFILE fp, int c)
|
||||||
|
{
|
||||||
|
WOLFSSL_ENTER("wolfSSL_BIO_set_fp");
|
||||||
|
|
||||||
|
if (bio == NULL || fp == NULL) {
|
||||||
|
WOLFSSL_LEAVE("wolfSSL_BIO_set_fp", BAD_FUNC_ARG);
|
||||||
|
return SSL_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bio->type != BIO_FILE) {
|
||||||
|
return SSL_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
bio->close = (byte)c;
|
||||||
|
bio->file = fp;
|
||||||
|
|
||||||
|
return SSL_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
long wolfSSL_BIO_get_fp(WOLFSSL_BIO *bio, XFILE* fp)
|
||||||
|
{
|
||||||
|
WOLFSSL_ENTER("wolfSSL_BIO_get_fp");
|
||||||
|
|
||||||
|
if (bio == NULL || fp == NULL) {
|
||||||
|
return SSL_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bio->type != BIO_FILE) {
|
||||||
|
return SSL_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
*fp = bio->file;
|
||||||
|
|
||||||
|
return SSL_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* overwrites file */
|
||||||
|
int wolfSSL_BIO_write_filename(WOLFSSL_BIO *bio, char *name)
|
||||||
|
{
|
||||||
|
WOLFSSL_ENTER("wolfSSL_BIO_write_filename");
|
||||||
|
|
||||||
|
if (bio == NULL || name == NULL) {
|
||||||
|
return SSL_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bio->type == BIO_FILE) {
|
||||||
|
if (bio->file != NULL && bio->close == BIO_CLOSE) {
|
||||||
|
XFCLOSE(bio->file);
|
||||||
|
}
|
||||||
|
|
||||||
|
bio->file = XFOPEN(name, "w");
|
||||||
|
if (bio->file == NULL) {
|
||||||
|
return SSL_FAILURE;
|
||||||
|
}
|
||||||
|
bio->close = BIO_CLOSE;
|
||||||
|
|
||||||
|
return SSL_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
return SSL_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int wolfSSL_BIO_seek(WOLFSSL_BIO *bio, int ofs)
|
||||||
|
{
|
||||||
|
WOLFSSL_ENTER("wolfSSL_BIO_seek");
|
||||||
|
|
||||||
|
if (bio == NULL) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* offset ofs from begining of file */
|
||||||
|
if (bio->type == BIO_FILE && XFSEEK(bio->file, ofs, SEEK_SET) < 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif /* NO_FILESYSTEM */
|
||||||
|
|
||||||
|
|
||||||
|
long wolfSSL_BIO_set_mem_eof_return(WOLFSSL_BIO *bio, int v)
|
||||||
|
{
|
||||||
|
WOLFSSL_ENTER("wolfSSL_BIO_set_mem_eof_return");
|
||||||
|
|
||||||
|
if (bio != NULL) {
|
||||||
|
bio->eof = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
101
src/internal.c
101
src/internal.c
@@ -1386,6 +1386,10 @@ int InitSSL_Ctx(WOLFSSL_CTX* ctx, WOLFSSL_METHOD* method, void* heap)
|
|||||||
WOLFSSL_MSG("Bad Cert Manager New");
|
WOLFSSL_MSG("Bad Cert Manager New");
|
||||||
return BAD_CERT_MANAGER_ERROR;
|
return BAD_CERT_MANAGER_ERROR;
|
||||||
}
|
}
|
||||||
|
#ifdef OPENSSL_EXTRA
|
||||||
|
/* setup WOLFSSL_X509_STORE */
|
||||||
|
ctx->x509_store.cm = ctx->cm;
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(HAVE_EXTENDED_MASTER) && !defined(NO_WOLFSSL_CLIENT)
|
#if defined(HAVE_EXTENDED_MASTER) && !defined(NO_WOLFSSL_CLIENT)
|
||||||
@@ -2573,6 +2577,13 @@ void FreeX509Name(WOLFSSL_X509_NAME* name, void* heap)
|
|||||||
/* Initialize wolfSSL X509 type */
|
/* Initialize wolfSSL X509 type */
|
||||||
void InitX509(WOLFSSL_X509* x509, int dynamicFlag, void* heap)
|
void InitX509(WOLFSSL_X509* x509, int dynamicFlag, void* heap)
|
||||||
{
|
{
|
||||||
|
if (x509 == NULL) {
|
||||||
|
WOLFSSL_MSG("Null parameter passed in!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
XMEMSET(x509, 0, sizeof(WOLFSSL_X509));
|
||||||
|
|
||||||
x509->heap = heap;
|
x509->heap = heap;
|
||||||
InitX509Name(&x509->issuer, 0);
|
InitX509Name(&x509->issuer, 0);
|
||||||
InitX509Name(&x509->subject, 0);
|
InitX509Name(&x509->subject, 0);
|
||||||
@@ -2628,6 +2639,12 @@ void FreeX509(WOLFSSL_X509* x509)
|
|||||||
#ifdef OPENSSL_EXTRA
|
#ifdef OPENSSL_EXTRA
|
||||||
XFREE(x509->authKeyId, x509->heap, DYNAMIC_TYPE_X509_EXT);
|
XFREE(x509->authKeyId, x509->heap, DYNAMIC_TYPE_X509_EXT);
|
||||||
XFREE(x509->subjKeyId, x509->heap, DYNAMIC_TYPE_X509_EXT);
|
XFREE(x509->subjKeyId, x509->heap, DYNAMIC_TYPE_X509_EXT);
|
||||||
|
if (x509->authInfo != NULL) {
|
||||||
|
XFREE(x509->authInfo, x509->heap, DYNAMIC_TYPE_X509_EXT);
|
||||||
|
}
|
||||||
|
if (x509->extKeyUsageSrc != NULL) {
|
||||||
|
XFREE(x509->extKeyUsageSrc, x509->heap, DYNAMIC_TYPE_X509_EXT);
|
||||||
|
}
|
||||||
#endif /* OPENSSL_EXTRA */
|
#endif /* OPENSSL_EXTRA */
|
||||||
if (x509->altNames)
|
if (x509->altNames)
|
||||||
FreeAltNames(x509->altNames, NULL);
|
FreeAltNames(x509->altNames, NULL);
|
||||||
@@ -3299,6 +3316,10 @@ int SetSSL_CTX(WOLFSSL* ssl, WOLFSSL_CTX* ctx)
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef OPENSSL_EXTRA
|
||||||
|
ssl->readAhead = ctx->readAhead;
|
||||||
|
#endif
|
||||||
|
|
||||||
return SSL_SUCCESS;
|
return SSL_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5295,6 +5316,32 @@ static int GetRecordHeader(WOLFSSL* ssl, const byte* input, word32* inOutIdx,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef OPENSSL_EXTRA
|
||||||
|
/* case where specific protocols are turned off */
|
||||||
|
if (!ssl->options.dtls && ssl->options.mask > 0) {
|
||||||
|
if (rh->pvMinor == SSLv3_MINOR &&
|
||||||
|
(ssl->options.mask & SSL_OP_NO_SSLv3) == SSL_OP_NO_SSLv3) {
|
||||||
|
WOLFSSL_MSG("Option set to not allow SSLv3");
|
||||||
|
return VERSION_ERROR;
|
||||||
|
}
|
||||||
|
if (rh->pvMinor == TLSv1_MINOR &&
|
||||||
|
(ssl->options.mask & SSL_OP_NO_TLSv1) == SSL_OP_NO_TLSv1) {
|
||||||
|
WOLFSSL_MSG("Option set to not allow TLSv1");
|
||||||
|
return VERSION_ERROR;
|
||||||
|
}
|
||||||
|
if (rh->pvMinor == TLSv1_1_MINOR &&
|
||||||
|
(ssl->options.mask & SSL_OP_NO_TLSv1_1) == SSL_OP_NO_TLSv1_1) {
|
||||||
|
WOLFSSL_MSG("Option set to not allow TLSv1.1");
|
||||||
|
return VERSION_ERROR;
|
||||||
|
}
|
||||||
|
if (rh->pvMinor == TLSv1_2_MINOR &&
|
||||||
|
(ssl->options.mask & SSL_OP_NO_TLSv1_2) == SSL_OP_NO_TLSv1_2) {
|
||||||
|
WOLFSSL_MSG("Option set to not allow TLSv1.2");
|
||||||
|
return VERSION_ERROR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif /* OPENSSL_EXTRA */
|
||||||
|
|
||||||
/* catch version mismatch */
|
/* catch version mismatch */
|
||||||
if (rh->pvMajor != ssl->version.major || rh->pvMinor != ssl->version.minor){
|
if (rh->pvMajor != ssl->version.major || rh->pvMinor != ssl->version.minor){
|
||||||
if (ssl->options.side == WOLFSSL_SERVER_END &&
|
if (ssl->options.side == WOLFSSL_SERVER_END &&
|
||||||
@@ -6293,6 +6340,23 @@ int CopyDecodedToX509(WOLFSSL_X509* x509, DecodedCert* dCert)
|
|||||||
x509->pathLength = dCert->pathLength;
|
x509->pathLength = dCert->pathLength;
|
||||||
x509->keyUsage = dCert->extKeyUsage;
|
x509->keyUsage = dCert->extKeyUsage;
|
||||||
|
|
||||||
|
x509->CRLdistSet = dCert->extCRLdistSet;
|
||||||
|
x509->CRLdistCrit = dCert->extCRLdistCrit;
|
||||||
|
x509->CRLInfo = dCert->extCrlInfo;
|
||||||
|
x509->CRLInfoSz = dCert->extCrlInfoSz;
|
||||||
|
x509->authInfoSet = dCert->extAuthInfoSet;
|
||||||
|
x509->authInfoCrit = dCert->extAuthInfoCrit;
|
||||||
|
if (dCert->extAuthInfo != NULL && dCert->extAuthInfoSz > 0) {
|
||||||
|
x509->authInfo = (byte*)XMALLOC(dCert->extAuthInfoSz, x509->heap,
|
||||||
|
DYNAMIC_TYPE_X509_EXT);
|
||||||
|
if (x509->authInfo != NULL) {
|
||||||
|
XMEMCPY(x509->authInfo, dCert->extAuthInfo, dCert->extAuthInfoSz);
|
||||||
|
x509->authInfoSz = dCert->extAuthInfoSz;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
ret = MEMORY_E;
|
||||||
|
}
|
||||||
|
}
|
||||||
x509->basicConstSet = dCert->extBasicConstSet;
|
x509->basicConstSet = dCert->extBasicConstSet;
|
||||||
x509->basicConstCrit = dCert->extBasicConstCrit;
|
x509->basicConstCrit = dCert->extBasicConstCrit;
|
||||||
x509->basicConstPlSet = dCert->pathLengthSet;
|
x509->basicConstPlSet = dCert->pathLengthSet;
|
||||||
@@ -6326,10 +6390,33 @@ int CopyDecodedToX509(WOLFSSL_X509* x509, DecodedCert* dCert)
|
|||||||
}
|
}
|
||||||
x509->keyUsageSet = dCert->extKeyUsageSet;
|
x509->keyUsageSet = dCert->extKeyUsageSet;
|
||||||
x509->keyUsageCrit = dCert->extKeyUsageCrit;
|
x509->keyUsageCrit = dCert->extKeyUsageCrit;
|
||||||
|
if (dCert->extExtKeyUsageSrc != NULL && dCert->extExtKeyUsageSz > 0) {
|
||||||
|
x509->extKeyUsageSrc = (byte*)XMALLOC(dCert->extExtKeyUsageSz,
|
||||||
|
x509->heap, DYNAMIC_TYPE_X509_EXT);
|
||||||
|
if (x509->extKeyUsageSrc != NULL) {
|
||||||
|
XMEMCPY(x509->extKeyUsageSrc, dCert->extExtKeyUsageSrc,
|
||||||
|
dCert->extExtKeyUsageSz);
|
||||||
|
x509->extKeyUsageSz = dCert->extExtKeyUsageSz;
|
||||||
|
x509->extKeyUsageCrit = dCert->extExtKeyUsageCrit;
|
||||||
|
x509->extKeyUsageCount = dCert->extExtKeyUsageCount;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
ret = MEMORY_E;
|
||||||
|
}
|
||||||
|
}
|
||||||
#ifdef WOLFSSL_SEP
|
#ifdef WOLFSSL_SEP
|
||||||
x509->certPolicySet = dCert->extCertPolicySet;
|
x509->certPolicySet = dCert->extCertPolicySet;
|
||||||
x509->certPolicyCrit = dCert->extCertPolicyCrit;
|
x509->certPolicyCrit = dCert->extCertPolicyCrit;
|
||||||
#endif /* WOLFSSL_SEP */
|
#endif /* WOLFSSL_SEP */
|
||||||
|
#ifdef WOLFSSL_CERT_EXT
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < dCert->extCertPoliciesNb && i < MAX_CERTPOL_NB; i++)
|
||||||
|
XMEMCPY(x509->certPolicies[i], dCert->extCertPolicies[i],
|
||||||
|
MAX_CERTPOL_SZ);
|
||||||
|
x509->certPoliciesNb = dCert->extCertPoliciesNb;
|
||||||
|
}
|
||||||
|
#endif /* WOLFSSL_CERT_EXT */
|
||||||
#endif /* OPENSSL_EXTRA */
|
#endif /* OPENSSL_EXTRA */
|
||||||
#ifdef HAVE_ECC
|
#ifdef HAVE_ECC
|
||||||
x509->pkCurveOID = dCert->pkCurveOID;
|
x509->pkCurveOID = dCert->pkCurveOID;
|
||||||
@@ -6389,8 +6476,12 @@ static int DoCertificate(WOLFSSL* ssl, byte* input, word32* inOutIdx,
|
|||||||
while (listSz) {
|
while (listSz) {
|
||||||
word32 certSz;
|
word32 certSz;
|
||||||
|
|
||||||
if (totalCerts >= MAX_CHAIN_DEPTH)
|
if (totalCerts >= MAX_CHAIN_DEPTH) {
|
||||||
|
#ifdef OPENSSL_EXTRA
|
||||||
|
ssl->peerVerifyRet = X509_V_ERR_CERT_CHAIN_TOO_LONG;
|
||||||
|
#endif
|
||||||
return MAX_CHAIN_ERROR;
|
return MAX_CHAIN_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
if ((*inOutIdx - begin) + OPAQUE24_LEN > size)
|
if ((*inOutIdx - begin) + OPAQUE24_LEN > size)
|
||||||
return BUFFER_ERROR;
|
return BUFFER_ERROR;
|
||||||
@@ -6611,6 +6702,9 @@ static int DoCertificate(WOLFSSL* ssl, byte* input, word32* inOutIdx,
|
|||||||
|
|
||||||
if (ret == 0) {
|
if (ret == 0) {
|
||||||
WOLFSSL_MSG("Verified Peer's cert");
|
WOLFSSL_MSG("Verified Peer's cert");
|
||||||
|
#ifdef OPENSSL_EXTRA
|
||||||
|
ssl->peerVerifyRet = X509_V_OK;
|
||||||
|
#endif
|
||||||
fatal = 0;
|
fatal = 0;
|
||||||
}
|
}
|
||||||
else if (ret == ASN_PARSE_E) {
|
else if (ret == ASN_PARSE_E) {
|
||||||
@@ -6748,6 +6842,9 @@ static int DoCertificate(WOLFSSL* ssl, byte* input, word32* inOutIdx,
|
|||||||
XFREE(dCert, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
XFREE(dCert, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
#endif
|
#endif
|
||||||
ssl->error = ret;
|
ssl->error = ret;
|
||||||
|
#ifdef OPENSSL_EXTRA
|
||||||
|
ssl->peerVerifyRet = X509_V_ERR_CERT_REJECTED;
|
||||||
|
#endif
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
ssl->options.havePeerCert = 1;
|
ssl->options.havePeerCert = 1;
|
||||||
@@ -9383,7 +9480,7 @@ int ProcessReply(WOLFSSL* ssl)
|
|||||||
int ret = 0, type, readSz;
|
int ret = 0, type, readSz;
|
||||||
int atomicUser = 0;
|
int atomicUser = 0;
|
||||||
word32 startIdx = 0;
|
word32 startIdx = 0;
|
||||||
#ifdef WOLFSSL_DTLS
|
#if defined(WOLFSSL_DTLS)
|
||||||
int used;
|
int used;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
788
tests/api.c
788
tests/api.c
@@ -46,6 +46,10 @@
|
|||||||
#ifdef OPENSSL_EXTRA
|
#ifdef OPENSSL_EXTRA
|
||||||
#include <wolfssl/openssl/ssl.h>
|
#include <wolfssl/openssl/ssl.h>
|
||||||
#include <wolfssl/openssl/pkcs12.h>
|
#include <wolfssl/openssl/pkcs12.h>
|
||||||
|
#include <wolfssl/openssl/evp.h>
|
||||||
|
#include <wolfssl/openssl/dh.h>
|
||||||
|
#include <wolfssl/openssl/bn.h>
|
||||||
|
#include <wolfssl/openssl/pem.h>
|
||||||
#ifndef NO_DES3
|
#ifndef NO_DES3
|
||||||
#include <wolfssl/openssl/des.h>
|
#include <wolfssl/openssl/des.h>
|
||||||
#endif
|
#endif
|
||||||
@@ -632,7 +636,13 @@ static THREAD_RETURN WOLFSSL_THREAD test_server_nofail(void* args)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
((func_args*)args)->return_code = TEST_FAIL;
|
((func_args*)args)->return_code = TEST_FAIL;
|
||||||
method = wolfSSLv23_server_method();
|
if (((func_args*)args)->callbacks != NULL &&
|
||||||
|
((func_args*)args)->callbacks->method != NULL) {
|
||||||
|
method = ((func_args*)args)->callbacks->method();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
method = wolfSSLv23_server_method();
|
||||||
|
}
|
||||||
ctx = wolfSSL_CTX_new(method);
|
ctx = wolfSSL_CTX_new(method);
|
||||||
|
|
||||||
#if defined(USE_WINDOWS_API)
|
#if defined(USE_WINDOWS_API)
|
||||||
@@ -774,7 +784,13 @@ static void test_client_nofail(void* args)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
((func_args*)args)->return_code = TEST_FAIL;
|
((func_args*)args)->return_code = TEST_FAIL;
|
||||||
method = wolfSSLv23_client_method();
|
if (((func_args*)args)->callbacks != NULL &&
|
||||||
|
((func_args*)args)->callbacks->method != NULL) {
|
||||||
|
method = ((func_args*)args)->callbacks->method();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
method = wolfSSLv23_client_method();
|
||||||
|
}
|
||||||
ctx = wolfSSL_CTX_new(method);
|
ctx = wolfSSL_CTX_new(method);
|
||||||
|
|
||||||
#ifdef OPENSSL_EXTRA
|
#ifdef OPENSSL_EXTRA
|
||||||
@@ -1139,6 +1155,8 @@ static void test_wolfSSL_read_write(void)
|
|||||||
func_args server_args;
|
func_args server_args;
|
||||||
THREAD_TYPE serverThread;
|
THREAD_TYPE serverThread;
|
||||||
|
|
||||||
|
XMEMSET(&client_args, 0, sizeof(func_args));
|
||||||
|
XMEMSET(&server_args, 0, sizeof(func_args));
|
||||||
#ifdef WOLFSSL_TIRTOS
|
#ifdef WOLFSSL_TIRTOS
|
||||||
fdOpenSession(Task_self());
|
fdOpenSession(Task_self());
|
||||||
#endif
|
#endif
|
||||||
@@ -1194,6 +1212,8 @@ static void test_wolfSSL_dtls_export(void)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* set using dtls */
|
/* set using dtls */
|
||||||
|
XMEMSET(&client_args, 0, sizeof(func_args));
|
||||||
|
XMEMSET(&server_args, 0, sizeof(func_args));
|
||||||
XMEMSET(&server_cbf, 0, sizeof(callback_functions));
|
XMEMSET(&server_cbf, 0, sizeof(callback_functions));
|
||||||
XMEMSET(&client_cbf, 0, sizeof(callback_functions));
|
XMEMSET(&client_cbf, 0, sizeof(callback_functions));
|
||||||
server_cbf.method = wolfDTLSv1_2_server_method;
|
server_cbf.method = wolfDTLSv1_2_server_method;
|
||||||
@@ -1237,6 +1257,9 @@ static void test_wolfSSL_client_server(callback_functions* client_callbacks,
|
|||||||
func_args server_args;
|
func_args server_args;
|
||||||
THREAD_TYPE serverThread;
|
THREAD_TYPE serverThread;
|
||||||
|
|
||||||
|
XMEMSET(&client_args, 0, sizeof(func_args));
|
||||||
|
XMEMSET(&server_args, 0, sizeof(func_args));
|
||||||
|
|
||||||
StartTCP();
|
StartTCP();
|
||||||
|
|
||||||
client_args.callbacks = client_callbacks;
|
client_args.callbacks = client_callbacks;
|
||||||
@@ -1971,7 +1994,7 @@ static void test_wolfSSL_DisableExtendedMasterSecret(void)
|
|||||||
*----------------------------------------------------------------------------*/
|
*----------------------------------------------------------------------------*/
|
||||||
static void test_wolfSSL_X509_NAME_get_entry(void)
|
static void test_wolfSSL_X509_NAME_get_entry(void)
|
||||||
{
|
{
|
||||||
#ifndef NO_CERTS
|
#if !defined(NO_CERTS) && !defined(NO_RSA)
|
||||||
#if defined(OPENSSL_EXTRA) && (defined(KEEP_PEER_CERT) || defined(SESSION_CERTS)) \
|
#if defined(OPENSSL_EXTRA) && (defined(KEEP_PEER_CERT) || defined(SESSION_CERTS)) \
|
||||||
&& (defined(HAVE_LIGHTY) || defined(WOLFSSL_MYSQL_COMPATIBLE))
|
&& (defined(HAVE_LIGHTY) || defined(WOLFSSL_MYSQL_COMPATIBLE))
|
||||||
printf(testingFmt, "wolfSSL_X509_NAME_get_entry()");
|
printf(testingFmt, "wolfSSL_X509_NAME_get_entry()");
|
||||||
@@ -2019,7 +2042,7 @@ static void test_wolfSSL_PKCS12(void)
|
|||||||
{
|
{
|
||||||
/* .p12 file is encrypted with DES3 */
|
/* .p12 file is encrypted with DES3 */
|
||||||
#if defined(OPENSSL_EXTRA) && !defined(NO_DES3) && !defined(NO_FILESYSTEM) && \
|
#if defined(OPENSSL_EXTRA) && !defined(NO_DES3) && !defined(NO_FILESYSTEM) && \
|
||||||
!defined(NO_ASN) && !defined(NO_PWDBASED)
|
!defined(NO_ASN) && !defined(NO_PWDBASED) && !defined(NO_RSA)
|
||||||
byte buffer[5300];
|
byte buffer[5300];
|
||||||
char file[] = "./certs/test-servercert.p12";
|
char file[] = "./certs/test-servercert.p12";
|
||||||
FILE *f;
|
FILE *f;
|
||||||
@@ -2231,12 +2254,12 @@ static void test_wolfSSL_DES(void)
|
|||||||
/* check, check of odd parity */
|
/* check, check of odd parity */
|
||||||
XMEMSET(key, 4, sizeof(DES_key_schedule)); key[0] = 3; /*set even parity*/
|
XMEMSET(key, 4, sizeof(DES_key_schedule)); key[0] = 3; /*set even parity*/
|
||||||
XMEMSET(myDes, 5, sizeof(const_DES_cblock));
|
XMEMSET(myDes, 5, sizeof(const_DES_cblock));
|
||||||
DES_set_key_checked(&myDes, &key);
|
AssertIntEQ(DES_set_key_checked(&myDes, &key), -1);
|
||||||
AssertIntNE(key[0], myDes[0]); /* should not have copied over key */
|
AssertIntNE(key[0], myDes[0]); /* should not have copied over key */
|
||||||
|
|
||||||
/* set odd parity for success case */
|
/* set odd parity for success case */
|
||||||
key[0] = 4;
|
key[0] = 4;
|
||||||
DES_set_key_checked(&myDes, &key);
|
AssertIntEQ(DES_set_key_checked(&myDes, &key), 0);
|
||||||
for (i = 0; i < sizeof(DES_key_schedule); i++) {
|
for (i = 0; i < sizeof(DES_key_schedule); i++) {
|
||||||
AssertIntEQ(key[i], myDes[i]);
|
AssertIntEQ(key[i], myDes[i]);
|
||||||
}
|
}
|
||||||
@@ -2244,7 +2267,7 @@ static void test_wolfSSL_DES(void)
|
|||||||
/* check weak key */
|
/* check weak key */
|
||||||
XMEMSET(key, 1, sizeof(DES_key_schedule));
|
XMEMSET(key, 1, sizeof(DES_key_schedule));
|
||||||
XMEMSET(myDes, 5, sizeof(const_DES_cblock));
|
XMEMSET(myDes, 5, sizeof(const_DES_cblock));
|
||||||
DES_set_key_checked(&myDes, &key);
|
AssertIntEQ(DES_set_key_checked(&myDes, &key), -2);
|
||||||
AssertIntNE(key[0], myDes[0]); /* should not have copied over key */
|
AssertIntNE(key[0], myDes[0]); /* should not have copied over key */
|
||||||
|
|
||||||
/* now do unchecked copy of a weak key over */
|
/* now do unchecked copy of a weak key over */
|
||||||
@@ -2258,6 +2281,745 @@ static void test_wolfSSL_DES(void)
|
|||||||
#endif /* defined(OPENSSL_EXTRA) && !defined(NO_DES3) */
|
#endif /* defined(OPENSSL_EXTRA) && !defined(NO_DES3) */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void test_wolfSSL_certs(void)
|
||||||
|
{
|
||||||
|
#if defined(OPENSSL_EXTRA) && !defined(NO_CERTS) && \
|
||||||
|
!defined(NO_FILESYSTEM) && !defined(NO_RSA)
|
||||||
|
X509* x509;
|
||||||
|
WOLFSSL* ssl;
|
||||||
|
WOLFSSL_CTX* ctx;
|
||||||
|
STACK_OF(ASN1_OBJECT)* sk;
|
||||||
|
int crit;
|
||||||
|
|
||||||
|
printf(testingFmt, "wolfSSL_certs()");
|
||||||
|
|
||||||
|
AssertNotNull(ctx = SSL_CTX_new(wolfSSLv23_server_method()));
|
||||||
|
AssertTrue(SSL_CTX_use_certificate_file(ctx, svrCert, SSL_FILETYPE_PEM));
|
||||||
|
AssertTrue(SSL_CTX_use_PrivateKey_file(ctx, svrKey, SSL_FILETYPE_PEM));
|
||||||
|
AssertNotNull(ssl = SSL_new(ctx));
|
||||||
|
|
||||||
|
AssertIntEQ(wolfSSL_check_private_key(ssl), SSL_SUCCESS);
|
||||||
|
|
||||||
|
#ifdef HAVE_PK_CALLBACKS
|
||||||
|
AssertIntEQ((int)SSL_set_tlsext_debug_arg(ssl, NULL), SSL_SUCCESS);
|
||||||
|
#endif /* HAVE_PK_CALLBACKS */
|
||||||
|
|
||||||
|
/* create and use x509 */
|
||||||
|
x509 = wolfSSL_X509_load_certificate_file(cliCert, SSL_FILETYPE_PEM);
|
||||||
|
AssertNotNull(x509);
|
||||||
|
AssertIntEQ(SSL_use_certificate(ssl, x509), SSL_SUCCESS);
|
||||||
|
|
||||||
|
#ifndef HAVE_USER_RSA
|
||||||
|
/* with loading in a new cert the check on private key should now fail */
|
||||||
|
AssertIntNE(wolfSSL_check_private_key(ssl), SSL_SUCCESS);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(USE_CERT_BUFFERS_2048)
|
||||||
|
AssertIntEQ(SSL_use_certificate_ASN1(ssl,
|
||||||
|
(unsigned char*)server_cert_der_2048,
|
||||||
|
sizeof_server_cert_der_2048), SSL_SUCCESS);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(NO_SHA) && !defined(NO_SHA256)
|
||||||
|
/************* Get Digest of Certificate ******************/
|
||||||
|
{
|
||||||
|
byte digest[64]; /* max digest size */
|
||||||
|
word32 digestSz;
|
||||||
|
|
||||||
|
XMEMSET(digest, 0, sizeof(digest));
|
||||||
|
AssertIntEQ(X509_digest(x509, wolfSSL_EVP_sha1(), digest, &digestSz),
|
||||||
|
SSL_SUCCESS);
|
||||||
|
AssertIntEQ(X509_digest(x509, wolfSSL_EVP_sha256(), digest, &digestSz),
|
||||||
|
SSL_SUCCESS);
|
||||||
|
|
||||||
|
AssertIntEQ(X509_digest(NULL, wolfSSL_EVP_sha1(), digest, &digestSz),
|
||||||
|
SSL_FAILURE);
|
||||||
|
}
|
||||||
|
#endif /* !NO_SHA && !NO_SHA256*/
|
||||||
|
|
||||||
|
/* test and checkout X509 extensions */
|
||||||
|
sk = (STACK_OF(ASN1_OBJECT)*)X509_get_ext_d2i(x509, NID_basic_constraints,
|
||||||
|
&crit, NULL);
|
||||||
|
AssertNotNull(sk);
|
||||||
|
AssertIntEQ(crit, 0);
|
||||||
|
wolfSSL_sk_ASN1_OBJECT_free(sk);
|
||||||
|
|
||||||
|
sk = (STACK_OF(ASN1_OBJECT)*)X509_get_ext_d2i(x509, NID_key_usage,
|
||||||
|
&crit, NULL);
|
||||||
|
/* AssertNotNull(sk); NID not yet supported */
|
||||||
|
AssertIntEQ(crit, -1);
|
||||||
|
wolfSSL_sk_ASN1_OBJECT_free(sk);
|
||||||
|
|
||||||
|
sk = (STACK_OF(ASN1_OBJECT)*)X509_get_ext_d2i(x509, NID_ext_key_usage,
|
||||||
|
&crit, NULL);
|
||||||
|
/* AssertNotNull(sk); no extension set */
|
||||||
|
wolfSSL_sk_ASN1_OBJECT_free(sk);
|
||||||
|
|
||||||
|
sk = (STACK_OF(ASN1_OBJECT)*)X509_get_ext_d2i(x509,
|
||||||
|
NID_authority_key_identifier, &crit, NULL);
|
||||||
|
AssertNotNull(sk);
|
||||||
|
wolfSSL_sk_ASN1_OBJECT_free(sk);
|
||||||
|
|
||||||
|
sk = (STACK_OF(ASN1_OBJECT)*)X509_get_ext_d2i(x509,
|
||||||
|
NID_private_key_usage_period, &crit, NULL);
|
||||||
|
/* AssertNotNull(sk); NID not yet supported */
|
||||||
|
AssertIntEQ(crit, -1);
|
||||||
|
wolfSSL_sk_ASN1_OBJECT_free(sk);
|
||||||
|
|
||||||
|
sk = (STACK_OF(ASN1_OBJECT)*)X509_get_ext_d2i(x509, NID_subject_alt_name,
|
||||||
|
&crit, NULL);
|
||||||
|
/* AssertNotNull(sk); no alt names set */
|
||||||
|
wolfSSL_sk_ASN1_OBJECT_free(sk);
|
||||||
|
|
||||||
|
sk = (STACK_OF(ASN1_OBJECT)*)X509_get_ext_d2i(x509, NID_issuer_alt_name,
|
||||||
|
&crit, NULL);
|
||||||
|
/* AssertNotNull(sk); NID not yet supported */
|
||||||
|
AssertIntEQ(crit, -1);
|
||||||
|
wolfSSL_sk_ASN1_OBJECT_free(sk);
|
||||||
|
|
||||||
|
sk = (STACK_OF(ASN1_OBJECT)*)X509_get_ext_d2i(x509, NID_info_access, &crit,
|
||||||
|
NULL);
|
||||||
|
/* AssertNotNull(sk); no auth info set */
|
||||||
|
wolfSSL_sk_ASN1_OBJECT_free(sk);
|
||||||
|
|
||||||
|
sk = (STACK_OF(ASN1_OBJECT)*)X509_get_ext_d2i(x509, NID_sinfo_access,
|
||||||
|
&crit, NULL);
|
||||||
|
/* AssertNotNull(sk); NID not yet supported */
|
||||||
|
AssertIntEQ(crit, -1);
|
||||||
|
wolfSSL_sk_ASN1_OBJECT_free(sk);
|
||||||
|
|
||||||
|
sk = (STACK_OF(ASN1_OBJECT)*)X509_get_ext_d2i(x509, NID_name_constraints,
|
||||||
|
&crit, NULL);
|
||||||
|
/* AssertNotNull(sk); NID not yet supported */
|
||||||
|
AssertIntEQ(crit, -1);
|
||||||
|
wolfSSL_sk_ASN1_OBJECT_free(sk);
|
||||||
|
|
||||||
|
sk = (STACK_OF(ASN1_OBJECT)*)X509_get_ext_d2i(x509,
|
||||||
|
NID_certificate_policies, &crit, NULL);
|
||||||
|
#if !defined(WOLFSSL_SEP) && !defined(WOLFSSL_CERT_EXT)
|
||||||
|
AssertNull(sk);
|
||||||
|
#else
|
||||||
|
/* AssertNotNull(sk); no cert policy set */
|
||||||
|
#endif
|
||||||
|
wolfSSL_sk_ASN1_OBJECT_free(sk);
|
||||||
|
|
||||||
|
sk = (STACK_OF(ASN1_OBJECT)*)X509_get_ext_d2i(x509, NID_policy_mappings,
|
||||||
|
&crit, NULL);
|
||||||
|
/* AssertNotNull(sk); NID not yet supported */
|
||||||
|
AssertIntEQ(crit, -1);
|
||||||
|
wolfSSL_sk_ASN1_OBJECT_free(sk);
|
||||||
|
|
||||||
|
sk = (STACK_OF(ASN1_OBJECT)*)X509_get_ext_d2i(x509, NID_policy_constraints,
|
||||||
|
&crit, NULL);
|
||||||
|
/* AssertNotNull(sk); NID not yet supported */
|
||||||
|
AssertIntEQ(crit, -1);
|
||||||
|
wolfSSL_sk_ASN1_OBJECT_free(sk);
|
||||||
|
|
||||||
|
sk = (STACK_OF(ASN1_OBJECT)*)X509_get_ext_d2i(x509, NID_inhibit_any_policy,
|
||||||
|
&crit, NULL);
|
||||||
|
/* AssertNotNull(sk); NID not yet supported */
|
||||||
|
AssertIntEQ(crit, -1);
|
||||||
|
wolfSSL_sk_ASN1_OBJECT_free(sk);
|
||||||
|
|
||||||
|
sk = (STACK_OF(ASN1_OBJECT)*)X509_get_ext_d2i(x509, NID_tlsfeature, &crit,
|
||||||
|
NULL);
|
||||||
|
/* AssertNotNull(sk); NID not yet supported */
|
||||||
|
AssertIntEQ(crit, -1);
|
||||||
|
wolfSSL_sk_ASN1_OBJECT_free(sk);
|
||||||
|
|
||||||
|
/* test invalid cases */
|
||||||
|
crit = 0;
|
||||||
|
sk = (STACK_OF(ASN1_OBJECT)*)X509_get_ext_d2i(x509, -1, &crit, NULL);
|
||||||
|
AssertNull(sk);
|
||||||
|
AssertIntEQ(crit, -1);
|
||||||
|
sk = (STACK_OF(ASN1_OBJECT)*)X509_get_ext_d2i(NULL, NID_tlsfeature,
|
||||||
|
NULL, NULL);
|
||||||
|
AssertNull(sk);
|
||||||
|
|
||||||
|
AssertIntEQ(SSL_get_hit(ssl), 0);
|
||||||
|
X509_free(x509);
|
||||||
|
SSL_free(ssl);
|
||||||
|
SSL_CTX_free(ctx);
|
||||||
|
|
||||||
|
printf(resultFmt, passed);
|
||||||
|
#endif /* defined(OPENSSL_EXTRA) && !defined(NO_CERTS) */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void test_wolfSSL_private_keys(void)
|
||||||
|
{
|
||||||
|
#if defined(OPENSSL_EXTRA) && !defined(NO_CERTS) && \
|
||||||
|
!defined(NO_FILESYSTEM) && !defined(NO_RSA)
|
||||||
|
WOLFSSL* ssl;
|
||||||
|
WOLFSSL_CTX* ctx;
|
||||||
|
EVP_PKEY* pkey = NULL;
|
||||||
|
|
||||||
|
printf(testingFmt, "wolfSSL_private_keys()");
|
||||||
|
|
||||||
|
OpenSSL_add_all_digests();
|
||||||
|
OpenSSL_add_all_algorithms();
|
||||||
|
|
||||||
|
AssertNotNull(ctx = SSL_CTX_new(wolfSSLv23_server_method()));
|
||||||
|
AssertTrue(SSL_CTX_use_certificate_file(ctx, svrCert, SSL_FILETYPE_PEM));
|
||||||
|
AssertTrue(SSL_CTX_use_PrivateKey_file(ctx, svrKey, SSL_FILETYPE_PEM));
|
||||||
|
AssertNotNull(ssl = SSL_new(ctx));
|
||||||
|
|
||||||
|
AssertIntEQ(wolfSSL_check_private_key(ssl), SSL_SUCCESS);
|
||||||
|
|
||||||
|
#ifdef USE_CERT_BUFFERS_2048
|
||||||
|
{
|
||||||
|
const unsigned char* server_key = (const unsigned char*)server_key_der_2048;
|
||||||
|
|
||||||
|
AssertIntEQ(SSL_use_RSAPrivateKey_ASN1(ssl,
|
||||||
|
(unsigned char*)client_key_der_2048,
|
||||||
|
sizeof_client_key_der_2048), SSL_SUCCESS);
|
||||||
|
#ifndef HAVE_USER_RSA
|
||||||
|
/* Should missmatch now that a different private key loaded */
|
||||||
|
AssertIntNE(wolfSSL_check_private_key(ssl), SSL_SUCCESS);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
AssertIntEQ(SSL_use_PrivateKey_ASN1(0, ssl,
|
||||||
|
(unsigned char*)server_key,
|
||||||
|
sizeof_server_key_der_2048), SSL_SUCCESS);
|
||||||
|
/* After loading back in DER format of original key, should match */
|
||||||
|
AssertIntEQ(wolfSSL_check_private_key(ssl), SSL_SUCCESS);
|
||||||
|
|
||||||
|
/* pkey not set yet, expecting to fail */
|
||||||
|
AssertIntEQ(SSL_use_PrivateKey(ssl, pkey), SSL_FAILURE);
|
||||||
|
|
||||||
|
/* set PKEY and test again */
|
||||||
|
AssertNotNull(wolfSSL_d2i_PrivateKey(EVP_PKEY_RSA, &pkey,
|
||||||
|
&server_key, (long)sizeof_server_key_der_2048));
|
||||||
|
AssertIntEQ(SSL_use_PrivateKey(ssl, pkey), SSL_SUCCESS);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
EVP_PKEY_free(pkey);
|
||||||
|
SSL_free(ssl); /* frees x509 also since loaded into ssl */
|
||||||
|
SSL_CTX_free(ctx);
|
||||||
|
|
||||||
|
/* test existence of no-op macros in wolfssl/openssl/ssl.h */
|
||||||
|
CONF_modules_free();
|
||||||
|
ENGINE_cleanup();
|
||||||
|
CONF_modules_unload();
|
||||||
|
|
||||||
|
printf(resultFmt, passed);
|
||||||
|
#endif /* defined(OPENSSL_EXTRA) && !defined(NO_CERTS) */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void test_wolfSSL_PEM_PrivateKey(void)
|
||||||
|
{
|
||||||
|
#if defined(OPENSSL_EXTRA) && !defined(NO_CERTS) && \
|
||||||
|
!defined(NO_FILESYSTEM) && !defined(NO_RSA) && \
|
||||||
|
(defined(WOLFSSL_KEY_GEN) || defined(WOLFSSL_CERT_GEN)) && \
|
||||||
|
defined(USE_CERT_BUFFERS_2048)
|
||||||
|
const unsigned char* server_key = (const unsigned char*)server_key_der_2048;
|
||||||
|
EVP_PKEY* pkey = NULL;
|
||||||
|
BIO* bio;
|
||||||
|
|
||||||
|
printf(testingFmt, "wolfSSL_PEM_PrivateKey()");
|
||||||
|
|
||||||
|
bio = wolfSSL_BIO_new(wolfSSL_BIO_s_mem());
|
||||||
|
AssertNotNull(bio);
|
||||||
|
|
||||||
|
AssertNotNull(wolfSSL_d2i_PrivateKey(EVP_PKEY_RSA, &pkey,
|
||||||
|
&server_key, (long)sizeof_server_key_der_2048));
|
||||||
|
AssertIntEQ(PEM_write_bio_PrivateKey(bio, pkey, NULL, NULL, 0, NULL, NULL),
|
||||||
|
SSL_SUCCESS);
|
||||||
|
|
||||||
|
BIO_free(bio);
|
||||||
|
EVP_PKEY_free(pkey);
|
||||||
|
|
||||||
|
printf(resultFmt, passed);
|
||||||
|
#endif /* defined(OPENSSL_EXTRA) && !defined(NO_CERTS) */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void test_wolfSSL_tmp_dh(void)
|
||||||
|
{
|
||||||
|
#if defined(OPENSSL_EXTRA) && !defined(NO_CERTS) && \
|
||||||
|
!defined(NO_FILESYSTEM) && !defined(NO_DSA) && !defined(NO_RSA)
|
||||||
|
byte buffer[5300];
|
||||||
|
char file[] = "./certs/dsaparams.pem";
|
||||||
|
FILE *f;
|
||||||
|
int bytes;
|
||||||
|
DSA* dsa;
|
||||||
|
DH* dh;
|
||||||
|
BIO* bio;
|
||||||
|
SSL* ssl;
|
||||||
|
SSL_CTX* ctx;
|
||||||
|
|
||||||
|
printf(testingFmt, "wolfSSL_tmp_dh()");
|
||||||
|
|
||||||
|
AssertNotNull(ctx = SSL_CTX_new(wolfSSLv23_server_method()));
|
||||||
|
AssertTrue(SSL_CTX_use_certificate_file(ctx, svrCert, SSL_FILETYPE_PEM));
|
||||||
|
AssertTrue(SSL_CTX_use_PrivateKey_file(ctx, svrKey, SSL_FILETYPE_PEM));
|
||||||
|
AssertNotNull(ssl = SSL_new(ctx));
|
||||||
|
|
||||||
|
f = fopen(file, "rb");
|
||||||
|
AssertNotNull(f);
|
||||||
|
bytes = (int)fread(buffer, 1, sizeof(buffer), f);
|
||||||
|
fclose(f);
|
||||||
|
|
||||||
|
bio = BIO_new_mem_buf((void*)buffer, bytes);
|
||||||
|
AssertNotNull(bio);
|
||||||
|
|
||||||
|
dsa = wolfSSL_PEM_read_bio_DSAparams(bio, NULL, NULL, NULL);
|
||||||
|
AssertNotNull(dsa);
|
||||||
|
|
||||||
|
dh = wolfSSL_DSA_dup_DH(dsa);
|
||||||
|
AssertNotNull(dh);
|
||||||
|
|
||||||
|
AssertIntEQ((int)SSL_CTX_set_tmp_dh(ctx, dh), SSL_SUCCESS);
|
||||||
|
AssertIntEQ((int)SSL_set_tmp_dh(ssl, dh), SSL_SUCCESS);
|
||||||
|
|
||||||
|
BIO_free(bio);
|
||||||
|
DSA_free(dsa);
|
||||||
|
DH_free(dh);
|
||||||
|
SSL_free(ssl);
|
||||||
|
SSL_CTX_free(ctx);
|
||||||
|
|
||||||
|
printf(resultFmt, passed);
|
||||||
|
#endif /* defined(OPENSSL_EXTRA) && !defined(NO_CERTS) */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void test_wolfSSL_ctrl(void)
|
||||||
|
{
|
||||||
|
#if defined(OPENSSL_EXTRA)
|
||||||
|
byte buffer[5300];
|
||||||
|
BIO* bio;
|
||||||
|
int bytes;
|
||||||
|
BUF_MEM* ptr = NULL;
|
||||||
|
|
||||||
|
printf(testingFmt, "wolfSSL_crtl()");
|
||||||
|
|
||||||
|
bytes = sizeof(buffer);
|
||||||
|
bio = BIO_new_mem_buf((void*)buffer, bytes);
|
||||||
|
AssertNotNull(bio);
|
||||||
|
AssertNotNull(BIO_s_socket());
|
||||||
|
|
||||||
|
AssertIntEQ((int)wolfSSL_BIO_get_mem_ptr(bio, &ptr), SSL_SUCCESS);
|
||||||
|
|
||||||
|
/* needs tested after stubs filled out @TODO
|
||||||
|
SSL_ctrl
|
||||||
|
SSL_CTX_ctrl
|
||||||
|
*/
|
||||||
|
|
||||||
|
BIO_free(bio);
|
||||||
|
printf(resultFmt, passed);
|
||||||
|
#endif /* defined(OPENSSL_EXTRA) */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void test_wolfSSL_CTX_add_extra_chain_cert(void)
|
||||||
|
{
|
||||||
|
#if defined(OPENSSL_EXTRA) && !defined(NO_CERTS) && \
|
||||||
|
!defined(NO_FILESYSTEM) && !defined(NO_RSA)
|
||||||
|
char caFile[] = "./certs/client-ca.pem";
|
||||||
|
char clientFile[] = "./certs/client-cert.pem";
|
||||||
|
SSL_CTX* ctx;
|
||||||
|
X509* x509 = NULL;
|
||||||
|
|
||||||
|
printf(testingFmt, "wolfSSL_CTX_add_extra_chain_cert()");
|
||||||
|
|
||||||
|
AssertNotNull(ctx = SSL_CTX_new(wolfSSLv23_server_method()));
|
||||||
|
|
||||||
|
x509 = wolfSSL_X509_load_certificate_file(caFile, SSL_FILETYPE_PEM);
|
||||||
|
AssertNotNull(x509);
|
||||||
|
AssertIntEQ((int)SSL_CTX_add_extra_chain_cert(ctx, x509), SSL_SUCCESS);
|
||||||
|
|
||||||
|
x509 = wolfSSL_X509_load_certificate_file(clientFile, SSL_FILETYPE_PEM);
|
||||||
|
AssertNotNull(x509);
|
||||||
|
AssertIntEQ((int)SSL_CTX_add_extra_chain_cert(ctx, x509), SSL_SUCCESS);
|
||||||
|
|
||||||
|
AssertNull(SSL_CTX_get_default_passwd_cb(ctx));
|
||||||
|
AssertNull(SSL_CTX_get_default_passwd_cb_userdata(ctx));
|
||||||
|
|
||||||
|
SSL_CTX_free(ctx);
|
||||||
|
printf(resultFmt, passed);
|
||||||
|
#endif /* defined(OPENSSL_EXTRA) && !defined(NO_CERTS) && \
|
||||||
|
!defined(NO_FILESYSTEM) && !defined(NO_RSA) */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void test_wolfSSL_ERR_peek_last_error_line(void)
|
||||||
|
{
|
||||||
|
#if defined(OPENSSL_EXTRA) && !defined(NO_CERTS) && \
|
||||||
|
!defined(NO_FILESYSTEM) && defined(DEBUG_WOLFSSL)
|
||||||
|
tcp_ready ready;
|
||||||
|
func_args client_args;
|
||||||
|
func_args server_args;
|
||||||
|
THREAD_TYPE serverThread;
|
||||||
|
callback_functions client_cb;
|
||||||
|
callback_functions server_cb;
|
||||||
|
int line = 0;
|
||||||
|
const char* file = NULL;
|
||||||
|
|
||||||
|
printf(testingFmt, "wolfSSL_ERR_peek_last_error_line()");
|
||||||
|
|
||||||
|
/* create a failed connection and inspect the error */
|
||||||
|
#ifdef WOLFSSL_TIRTOS
|
||||||
|
fdOpenSession(Task_self());
|
||||||
|
#endif
|
||||||
|
XMEMSET(&client_args, 0, sizeof(func_args));
|
||||||
|
XMEMSET(&server_args, 0, sizeof(func_args));
|
||||||
|
|
||||||
|
StartTCP();
|
||||||
|
InitTcpReady(&ready);
|
||||||
|
|
||||||
|
client_cb.method = wolfTLSv1_1_client_method;
|
||||||
|
server_cb.method = wolfTLSv1_2_server_method;
|
||||||
|
|
||||||
|
server_args.signal = &ready;
|
||||||
|
server_args.callbacks = &server_cb;
|
||||||
|
client_args.signal = &ready;
|
||||||
|
client_args.callbacks = &client_cb;
|
||||||
|
|
||||||
|
start_thread(test_server_nofail, &server_args, &serverThread);
|
||||||
|
wait_tcp_ready(&server_args);
|
||||||
|
test_client_nofail(&client_args);
|
||||||
|
join_thread(serverThread);
|
||||||
|
|
||||||
|
FreeTcpReady(&ready);
|
||||||
|
|
||||||
|
/* check that error code was stored */
|
||||||
|
AssertIntNE((int)ERR_peek_last_error_line(NULL, NULL), 0);
|
||||||
|
ERR_peek_last_error_line(NULL, &line);
|
||||||
|
AssertIntNE(line, 0);
|
||||||
|
ERR_peek_last_error_line(&file, NULL);
|
||||||
|
AssertNotNull(file);
|
||||||
|
|
||||||
|
#ifdef WOLFSSL_TIRTOS
|
||||||
|
fdOpenSession(Task_self());
|
||||||
|
#endif
|
||||||
|
|
||||||
|
printf(resultFmt, passed);
|
||||||
|
#endif /* defined(OPENSSL_EXTRA) && !defined(NO_CERTS) && \
|
||||||
|
!defined(NO_FILESYSTEM) && !defined(DEBUG_WOLFSSL) */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void test_wolfSSL_X509_STORE_set_flags(void)
|
||||||
|
{
|
||||||
|
#if defined(OPENSSL_EXTRA) && !defined(NO_CERTS) && \
|
||||||
|
!defined(NO_FILESYSTEM) && !defined(NO_RSA)
|
||||||
|
|
||||||
|
X509_STORE* store;
|
||||||
|
X509* x509;
|
||||||
|
|
||||||
|
printf(testingFmt, "wolfSSL_ERR_peek_last_error_line()");
|
||||||
|
AssertNotNull((store = wolfSSL_X509_STORE_new()));
|
||||||
|
AssertNotNull((x509 =
|
||||||
|
wolfSSL_X509_load_certificate_file(svrCert, SSL_FILETYPE_PEM)));
|
||||||
|
AssertIntEQ(X509_STORE_add_cert(store, x509), SSL_SUCCESS);
|
||||||
|
|
||||||
|
#ifdef HAVE_CRL
|
||||||
|
AssertIntEQ(X509_STORE_set_flags(store, WOLFSSL_CRL_CHECKALL), SSL_SUCCESS);
|
||||||
|
#else
|
||||||
|
AssertIntEQ(X509_STORE_set_flags(store, WOLFSSL_CRL_CHECKALL),
|
||||||
|
NOT_COMPILED_IN);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
wolfSSL_X509_free(x509);
|
||||||
|
wolfSSL_X509_STORE_free(store);
|
||||||
|
|
||||||
|
printf(resultFmt, passed);
|
||||||
|
#endif /* defined(OPENSSL_EXTRA) && !defined(NO_CERTS) && \
|
||||||
|
!defined(NO_FILESYSTEM) && !defined(NO_RSA) */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void test_wolfSSL_BN(void)
|
||||||
|
{
|
||||||
|
#if defined(OPENSSL_EXTRA) && !defined(NO_ASN)
|
||||||
|
BIGNUM* a;
|
||||||
|
BIGNUM* b;
|
||||||
|
BIGNUM* c;
|
||||||
|
BIGNUM* d;
|
||||||
|
ASN1_INTEGER ai;
|
||||||
|
unsigned char value[1];
|
||||||
|
|
||||||
|
printf(testingFmt, "wolfSSL_BN()");
|
||||||
|
|
||||||
|
AssertNotNull(b = BN_new());
|
||||||
|
AssertNotNull(c = BN_new());
|
||||||
|
AssertNotNull(d = BN_new());
|
||||||
|
|
||||||
|
value[0] = 0x03;
|
||||||
|
|
||||||
|
/* at the moment hard setting since no set function */
|
||||||
|
ai.data[0] = 0x02; /* tag for ASN_INTEGER */
|
||||||
|
ai.data[1] = 0x01; /* length of integer */
|
||||||
|
ai.data[2] = value[0];
|
||||||
|
|
||||||
|
AssertNotNull(a = ASN1_INTEGER_to_BN(&ai, NULL));
|
||||||
|
|
||||||
|
value[0] = 0x02;
|
||||||
|
AssertNotNull(BN_bin2bn(value, sizeof(value), b));
|
||||||
|
|
||||||
|
value[0] = 0x05;
|
||||||
|
AssertNotNull(BN_bin2bn(value, sizeof(value), c));
|
||||||
|
|
||||||
|
/* a^b mod c = */
|
||||||
|
AssertIntEQ(BN_mod_exp(d, NULL, b, c, NULL), SSL_FAILURE);
|
||||||
|
AssertIntEQ(BN_mod_exp(d, a, b, c, NULL), SSL_SUCCESS);
|
||||||
|
|
||||||
|
/* check result 3^2 mod 5 */
|
||||||
|
value[0] = 0;
|
||||||
|
AssertIntEQ(BN_bn2bin(d, value), SSL_SUCCESS);
|
||||||
|
AssertIntEQ((int)(value[0] & 0x04), 4);
|
||||||
|
|
||||||
|
BN_free(a);
|
||||||
|
BN_free(b);
|
||||||
|
BN_free(c);
|
||||||
|
BN_clear_free(d);
|
||||||
|
|
||||||
|
printf(resultFmt, passed);
|
||||||
|
#endif /* defined(OPENSSL_EXTRA) && !defined(NO_ASN) */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void test_wolfSSL_set_options(void)
|
||||||
|
{
|
||||||
|
#if defined(OPENSSL_EXTRA) && !defined(NO_CERTS) && \
|
||||||
|
!defined(NO_FILESYSTEM) && !defined(NO_RSA)
|
||||||
|
SSL* ssl;
|
||||||
|
SSL_CTX* ctx;
|
||||||
|
|
||||||
|
printf(testingFmt, "wolfSSL_set_options()");
|
||||||
|
|
||||||
|
AssertNotNull(ctx = SSL_CTX_new(wolfSSLv23_server_method()));
|
||||||
|
AssertTrue(SSL_CTX_use_certificate_file(ctx, svrCert, SSL_FILETYPE_PEM));
|
||||||
|
AssertTrue(SSL_CTX_use_PrivateKey_file(ctx, svrKey, SSL_FILETYPE_PEM));
|
||||||
|
AssertNotNull(ssl = SSL_new(ctx));
|
||||||
|
|
||||||
|
AssertTrue(SSL_set_options(ssl, SSL_OP_NO_TLSv1) == SSL_OP_NO_TLSv1);
|
||||||
|
AssertTrue(SSL_get_options(ssl) == SSL_OP_NO_TLSv1);
|
||||||
|
|
||||||
|
AssertIntGT((int)SSL_set_options(ssl, (SSL_OP_COOKIE_EXCHANGE |
|
||||||
|
SSL_OP_NO_SSLv2)), 0);
|
||||||
|
AssertTrue((SSL_set_options(ssl, SSL_OP_COOKIE_EXCHANGE) &
|
||||||
|
SSL_OP_COOKIE_EXCHANGE) == SSL_OP_COOKIE_EXCHANGE);
|
||||||
|
AssertTrue((SSL_set_options(ssl, SSL_OP_NO_TLSv1_2) &
|
||||||
|
SSL_OP_NO_TLSv1_2) == SSL_OP_NO_TLSv1_2);
|
||||||
|
AssertTrue((SSL_set_options(ssl, SSL_OP_NO_COMPRESSION) &
|
||||||
|
SSL_OP_NO_COMPRESSION) == SSL_OP_NO_COMPRESSION);
|
||||||
|
|
||||||
|
SSL_free(ssl);
|
||||||
|
SSL_CTX_free(ctx);
|
||||||
|
|
||||||
|
printf(resultFmt, passed);
|
||||||
|
#endif /* defined(OPENSSL_EXTRA) && !defined(NO_CERTS) && \
|
||||||
|
!defined(NO_FILESYSTEM) && !defined(NO_RSA) */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void test_wolfSSL_PEM_read_bio(void)
|
||||||
|
{
|
||||||
|
#if defined(OPENSSL_EXTRA) && !defined(NO_CERTS) && \
|
||||||
|
!defined(NO_FILESYSTEM) && !defined(NO_RSA)
|
||||||
|
byte buffer[5300];
|
||||||
|
FILE *f;
|
||||||
|
int bytes;
|
||||||
|
X509* x509;
|
||||||
|
BIO* bio = NULL;
|
||||||
|
|
||||||
|
printf(testingFmt, "wolfSSL_PEM_read_bio()");
|
||||||
|
|
||||||
|
AssertNotNull(f = fopen(cliCert, "rb"));
|
||||||
|
bytes = (int)fread(buffer, 1, sizeof(buffer), f);
|
||||||
|
fclose(f);
|
||||||
|
|
||||||
|
AssertNull(x509 = PEM_read_bio_X509_AUX(bio, NULL, NULL, NULL));
|
||||||
|
AssertNotNull(bio = BIO_new_mem_buf((void*)buffer, bytes));
|
||||||
|
AssertNotNull(x509 = PEM_read_bio_X509_AUX(bio, NULL, NULL, NULL));
|
||||||
|
AssertIntEQ((int)BIO_set_fd(bio, 0, BIO_NOCLOSE), 1);
|
||||||
|
|
||||||
|
BIO_free(bio);
|
||||||
|
X509_free(x509);
|
||||||
|
|
||||||
|
printf(resultFmt, passed);
|
||||||
|
#endif /* defined(OPENSSL_EXTRA) && !defined(NO_CERTS) && \
|
||||||
|
!defined(NO_FILESYSTEM) && !defined(NO_RSA) */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void test_wolfSSL_BIO(void)
|
||||||
|
{
|
||||||
|
#if defined(OPENSSL_EXTRA)
|
||||||
|
byte buffer[20];
|
||||||
|
BIO* bio1;
|
||||||
|
BIO* bio2;
|
||||||
|
BIO* bio3;
|
||||||
|
char* bufPt;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
printf(testingFmt, "wolfSSL_BIO()");
|
||||||
|
|
||||||
|
for (i = 0; i < 20; i++) {
|
||||||
|
buffer[i] = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Creating and testing type BIO_s_bio */
|
||||||
|
AssertNotNull(bio1 = BIO_new(BIO_s_bio()));
|
||||||
|
AssertNotNull(bio2 = BIO_new(BIO_s_bio()));
|
||||||
|
AssertNotNull(bio3 = BIO_new(BIO_s_bio()));
|
||||||
|
|
||||||
|
/* read/write before set up */
|
||||||
|
AssertIntEQ(BIO_read(bio1, buffer, 2), WOLFSSL_BIO_UNSET);
|
||||||
|
AssertIntEQ(BIO_write(bio1, buffer, 2), WOLFSSL_BIO_UNSET);
|
||||||
|
|
||||||
|
AssertIntEQ(BIO_set_write_buf_size(bio1, 20), SSL_SUCCESS);
|
||||||
|
AssertIntEQ(BIO_set_write_buf_size(bio2, 8), SSL_SUCCESS);
|
||||||
|
AssertIntEQ(BIO_make_bio_pair(bio1, bio2), SSL_SUCCESS);
|
||||||
|
|
||||||
|
AssertIntEQ(BIO_nwrite(bio1, &bufPt, 10), 10);
|
||||||
|
XMEMCPY(bufPt, buffer, 10);
|
||||||
|
AssertIntEQ(BIO_write(bio1, buffer + 10, 10), 10);
|
||||||
|
/* write buffer full */
|
||||||
|
AssertIntEQ(BIO_write(bio1, buffer, 10), WOLFSSL_BIO_ERROR);
|
||||||
|
AssertIntEQ(BIO_flush(bio1), SSL_SUCCESS);
|
||||||
|
AssertIntEQ((int)BIO_ctrl_pending(bio1), 0);
|
||||||
|
|
||||||
|
/* write the other direction with pair */
|
||||||
|
AssertIntEQ((int)BIO_nwrite(bio2, &bufPt, 10), 8);
|
||||||
|
XMEMCPY(bufPt, buffer, 8);
|
||||||
|
AssertIntEQ(BIO_write(bio2, buffer, 10), WOLFSSL_BIO_ERROR);
|
||||||
|
|
||||||
|
/* try read */
|
||||||
|
AssertIntEQ((int)BIO_ctrl_pending(bio1), 8);
|
||||||
|
AssertIntEQ((int)BIO_ctrl_pending(bio2), 20);
|
||||||
|
|
||||||
|
AssertIntEQ(BIO_nread(bio2, &bufPt, (int)BIO_ctrl_pending(bio2)), 20);
|
||||||
|
for (i = 0; i < 20; i++) {
|
||||||
|
AssertIntEQ((int)bufPt[i], i);
|
||||||
|
}
|
||||||
|
AssertIntEQ(BIO_nread(bio2, &bufPt, 1), WOLFSSL_BIO_ERROR);
|
||||||
|
AssertIntEQ(BIO_nread(bio1, &bufPt, (int)BIO_ctrl_pending(bio1)), 8);
|
||||||
|
for (i = 0; i < 8; i++) {
|
||||||
|
AssertIntEQ((int)bufPt[i], i);
|
||||||
|
}
|
||||||
|
AssertIntEQ(BIO_nread(bio1, &bufPt, 1), WOLFSSL_BIO_ERROR);
|
||||||
|
AssertIntEQ(BIO_ctrl_reset_read_request(bio1), 1);
|
||||||
|
|
||||||
|
/* new pair */
|
||||||
|
AssertIntEQ(BIO_make_bio_pair(bio1, bio3), SSL_FAILURE);
|
||||||
|
BIO_free(bio2); /* free bio2 and automaticly remove from pair */
|
||||||
|
AssertIntEQ(BIO_make_bio_pair(bio1, bio3), SSL_SUCCESS);
|
||||||
|
AssertIntEQ((int)BIO_ctrl_pending(bio3), 0);
|
||||||
|
AssertIntEQ(BIO_nread(bio3, &bufPt, 10), WOLFSSL_BIO_ERROR);
|
||||||
|
|
||||||
|
/* test wrap around... */
|
||||||
|
AssertIntEQ(BIO_reset(bio1), 0);
|
||||||
|
AssertIntEQ(BIO_reset(bio3), 0);
|
||||||
|
|
||||||
|
/* fill write buffer, read only small amount then write again */
|
||||||
|
AssertIntEQ(BIO_nwrite(bio1, &bufPt, 20), 20);
|
||||||
|
XMEMCPY(bufPt, buffer, 20);
|
||||||
|
AssertIntEQ(BIO_nread(bio3, &bufPt, 4), 4);
|
||||||
|
for (i = 0; i < 4; i++) {
|
||||||
|
AssertIntEQ(bufPt[i], i);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* try writing over read index */
|
||||||
|
AssertIntEQ(BIO_nwrite(bio1, &bufPt, 5), 4);
|
||||||
|
XMEMSET(bufPt, 0, 4);
|
||||||
|
AssertIntEQ((int)BIO_ctrl_pending(bio3), 20);
|
||||||
|
|
||||||
|
/* read and write 0 bytes */
|
||||||
|
AssertIntEQ(BIO_nread(bio3, &bufPt, 0), 0);
|
||||||
|
AssertIntEQ(BIO_nwrite(bio1, &bufPt, 0), 0);
|
||||||
|
|
||||||
|
/* should read only to end of write buffer then need to read again */
|
||||||
|
AssertIntEQ(BIO_nread(bio3, &bufPt, 20), 16);
|
||||||
|
for (i = 0; i < 16; i++) {
|
||||||
|
AssertIntEQ(bufPt[i], buffer[4 + i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
AssertIntEQ(BIO_nread(bio3, NULL, 0), SSL_FAILURE);
|
||||||
|
AssertIntEQ(BIO_nread0(bio3, &bufPt), 4);
|
||||||
|
for (i = 0; i < 4; i++) {
|
||||||
|
AssertIntEQ(bufPt[i], 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* read index should not have advanced with nread0 */
|
||||||
|
AssertIntEQ(BIO_nread(bio3, &bufPt, 5), 4);
|
||||||
|
for (i = 0; i < 4; i++) {
|
||||||
|
AssertIntEQ(bufPt[i], 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* write and fill up buffer checking reset of index state */
|
||||||
|
AssertIntEQ(BIO_nwrite(bio1, &bufPt, 20), 20);
|
||||||
|
XMEMCPY(bufPt, buffer, 20);
|
||||||
|
|
||||||
|
/* test reset on data in bio1 write buffer */
|
||||||
|
AssertIntEQ(BIO_reset(bio1), 0);
|
||||||
|
AssertIntEQ((int)BIO_ctrl_pending(bio3), 0);
|
||||||
|
AssertIntEQ(BIO_nread(bio3, &bufPt, 3), WOLFSSL_BIO_ERROR);
|
||||||
|
AssertIntEQ(BIO_nwrite(bio1, &bufPt, 20), 20);
|
||||||
|
XMEMCPY(bufPt, buffer, 20);
|
||||||
|
AssertIntEQ(BIO_nread(bio3, &bufPt, 6), 6);
|
||||||
|
for (i = 0; i < 6; i++) {
|
||||||
|
AssertIntEQ(bufPt[i], i);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* test case of writing twice with offset read index */
|
||||||
|
AssertIntEQ(BIO_nwrite(bio1, &bufPt, 3), 3);
|
||||||
|
AssertIntEQ(BIO_nwrite(bio1, &bufPt, 4), 3); /* try overwriting */
|
||||||
|
AssertIntEQ(BIO_nwrite(bio1, &bufPt, 4), WOLFSSL_BIO_ERROR);
|
||||||
|
AssertIntEQ(BIO_nread(bio3, &bufPt, 0), 0);
|
||||||
|
AssertIntEQ(BIO_nwrite(bio1, &bufPt, 4), WOLFSSL_BIO_ERROR);
|
||||||
|
AssertIntEQ(BIO_nread(bio3, &bufPt, 1), 1);
|
||||||
|
AssertIntEQ(BIO_nwrite(bio1, &bufPt, 4), 1);
|
||||||
|
AssertIntEQ(BIO_nwrite(bio1, &bufPt, 4), WOLFSSL_BIO_ERROR);
|
||||||
|
|
||||||
|
BIO_free(bio1);
|
||||||
|
BIO_free(bio3);
|
||||||
|
|
||||||
|
/* BIOs with file pointers */
|
||||||
|
#if !defined(NO_FILESYSTEM)
|
||||||
|
{
|
||||||
|
XFILE f1;
|
||||||
|
XFILE f2;
|
||||||
|
BIO* f_bio1;
|
||||||
|
BIO* f_bio2;
|
||||||
|
unsigned char cert[300];
|
||||||
|
char testFile[] = "tests/bio_write_test.txt";
|
||||||
|
char msg[] = "bio_write_test.txt contains the first 300 bytes of certs/server-cert.pem\ncreated by tests/unit.test\n\n";
|
||||||
|
|
||||||
|
AssertNotNull(f_bio1 = BIO_new(BIO_s_file()));
|
||||||
|
AssertNotNull(f_bio2 = BIO_new(BIO_s_file()));
|
||||||
|
|
||||||
|
AssertIntEQ((int)BIO_set_mem_eof_return(f_bio1, -1), 0);
|
||||||
|
AssertIntEQ((int)BIO_set_mem_eof_return(NULL, -1), 0);
|
||||||
|
|
||||||
|
f1 = XFOPEN(svrCert, "rwb");
|
||||||
|
AssertIntEQ((int)BIO_set_fp(f_bio1, f1, BIO_CLOSE), SSL_SUCCESS);
|
||||||
|
AssertIntEQ(BIO_write_filename(f_bio2, testFile),
|
||||||
|
SSL_SUCCESS);
|
||||||
|
|
||||||
|
AssertIntEQ(BIO_read(f_bio1, cert, sizeof(cert)), sizeof(cert));
|
||||||
|
AssertIntEQ(BIO_write(f_bio2, msg, sizeof(msg)), sizeof(msg));
|
||||||
|
AssertIntEQ(BIO_write(f_bio2, cert, sizeof(cert)), sizeof(cert));
|
||||||
|
|
||||||
|
AssertIntEQ((int)BIO_get_fp(f_bio2, &f2), SSL_SUCCESS);
|
||||||
|
AssertIntEQ(BIO_reset(f_bio2), 0);
|
||||||
|
AssertIntEQ(BIO_seek(f_bio2, 4), 0);
|
||||||
|
|
||||||
|
BIO_free(f_bio1);
|
||||||
|
BIO_free(f_bio2);
|
||||||
|
}
|
||||||
|
#endif /* !defined(NO_FILESYSTEM) */
|
||||||
|
|
||||||
|
printf(resultFmt, passed);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------*
|
/*----------------------------------------------------------------------------*
|
||||||
| Main
|
| Main
|
||||||
*----------------------------------------------------------------------------*/
|
*----------------------------------------------------------------------------*/
|
||||||
@@ -2304,6 +3066,18 @@ void ApiTest(void)
|
|||||||
|
|
||||||
/* compatibility tests */
|
/* compatibility tests */
|
||||||
test_wolfSSL_DES();
|
test_wolfSSL_DES();
|
||||||
|
test_wolfSSL_certs();
|
||||||
|
test_wolfSSL_private_keys();
|
||||||
|
test_wolfSSL_PEM_PrivateKey();
|
||||||
|
test_wolfSSL_tmp_dh();
|
||||||
|
test_wolfSSL_ctrl();
|
||||||
|
test_wolfSSL_CTX_add_extra_chain_cert();
|
||||||
|
test_wolfSSL_ERR_peek_last_error_line();
|
||||||
|
test_wolfSSL_X509_STORE_set_flags();
|
||||||
|
test_wolfSSL_BN();
|
||||||
|
test_wolfSSL_set_options();
|
||||||
|
test_wolfSSL_PEM_read_bio();
|
||||||
|
test_wolfSSL_BIO();
|
||||||
|
|
||||||
AssertIntEQ(test_wolfSSL_Cleanup(), SSL_SUCCESS);
|
AssertIntEQ(test_wolfSSL_Cleanup(), SSL_SUCCESS);
|
||||||
printf(" End API Tests\n");
|
printf(" End API Tests\n");
|
||||||
|
|||||||
@@ -1959,6 +1959,9 @@ int wc_AesSetKey(Aes* aes, const byte* userKey, word32 keylen,
|
|||||||
checkAESNI = 1;
|
checkAESNI = 1;
|
||||||
}
|
}
|
||||||
if (haveAESNI) {
|
if (haveAESNI) {
|
||||||
|
#ifdef WOLFSSL_AES_COUNTER
|
||||||
|
aes->left = 0;
|
||||||
|
#endif /* WOLFSSL_AES_COUNTER */
|
||||||
aes->use_aesni = 1;
|
aes->use_aesni = 1;
|
||||||
if (iv)
|
if (iv)
|
||||||
XMEMCPY(aes->reg, iv, AES_BLOCK_SIZE);
|
XMEMCPY(aes->reg, iv, AES_BLOCK_SIZE);
|
||||||
@@ -2842,6 +2845,33 @@ int wc_InitAes_h(Aes* aes, void* h)
|
|||||||
#endif /* AES-CBC block */
|
#endif /* AES-CBC block */
|
||||||
#endif /* HAVE_AES_CBC */
|
#endif /* HAVE_AES_CBC */
|
||||||
|
|
||||||
|
#ifdef HAVE_AES_ECB
|
||||||
|
int wc_AesEcbEncrypt(Aes* aes, byte* out, const byte* in, word32 sz)
|
||||||
|
{
|
||||||
|
if ((in == NULL) || (out == NULL) || (aes == NULL))
|
||||||
|
return BAD_FUNC_ARG;
|
||||||
|
while (sz>0) {
|
||||||
|
wc_AesEncryptDirect(aes, out, in);
|
||||||
|
out += AES_BLOCK_SIZE;
|
||||||
|
in += AES_BLOCK_SIZE;
|
||||||
|
sz -= AES_BLOCK_SIZE;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
int wc_AesEcbDecrypt(Aes* aes, byte* out, const byte* in, word32 sz)
|
||||||
|
{
|
||||||
|
if ((in == NULL) || (out == NULL) || (aes == NULL))
|
||||||
|
return BAD_FUNC_ARG;
|
||||||
|
while (sz>0) {
|
||||||
|
wc_AesDecryptDirect(aes, out, in);
|
||||||
|
out += AES_BLOCK_SIZE;
|
||||||
|
in += AES_BLOCK_SIZE;
|
||||||
|
sz -= AES_BLOCK_SIZE;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* AES-CTR */
|
/* AES-CTR */
|
||||||
#ifdef WOLFSSL_AES_COUNTER
|
#ifdef WOLFSSL_AES_COUNTER
|
||||||
|
|
||||||
|
|||||||
@@ -2553,6 +2553,10 @@ void InitDecodedCert(DecodedCert* cert, byte* source, word32 inSz, void* heap)
|
|||||||
#ifdef OPENSSL_EXTRA
|
#ifdef OPENSSL_EXTRA
|
||||||
XMEMSET(&cert->issuerName, 0, sizeof(DecodedName));
|
XMEMSET(&cert->issuerName, 0, sizeof(DecodedName));
|
||||||
XMEMSET(&cert->subjectName, 0, sizeof(DecodedName));
|
XMEMSET(&cert->subjectName, 0, sizeof(DecodedName));
|
||||||
|
cert->extCRLdistSet = 0;
|
||||||
|
cert->extCRLdistCrit = 0;
|
||||||
|
cert->extAuthInfoSet = 0;
|
||||||
|
cert->extAuthInfoCrit = 0;
|
||||||
cert->extBasicConstSet = 0;
|
cert->extBasicConstSet = 0;
|
||||||
cert->extBasicConstCrit = 0;
|
cert->extBasicConstCrit = 0;
|
||||||
cert->extSubjAltNameSet = 0;
|
cert->extSubjAltNameSet = 0;
|
||||||
@@ -5199,11 +5203,19 @@ static int DecodeCertExtensions(DecodedCert* cert)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case CRL_DIST_OID:
|
case CRL_DIST_OID:
|
||||||
|
#ifdef OPENSSL_EXTRA
|
||||||
|
cert->extCRLdistSet = 1;
|
||||||
|
cert->extCRLdistCrit = critical;
|
||||||
|
#endif
|
||||||
if (DecodeCrlDist(&input[idx], length, cert) < 0)
|
if (DecodeCrlDist(&input[idx], length, cert) < 0)
|
||||||
return ASN_PARSE_E;
|
return ASN_PARSE_E;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case AUTH_INFO_OID:
|
case AUTH_INFO_OID:
|
||||||
|
#ifdef OPENSSL_EXTRA
|
||||||
|
cert->extAuthInfoSet = 1;
|
||||||
|
cert->extAuthInfoCrit = critical;
|
||||||
|
#endif
|
||||||
if (DecodeAuthInfo(&input[idx], length, cert) < 0)
|
if (DecodeAuthInfo(&input[idx], length, cert) < 0)
|
||||||
return ASN_PARSE_E;
|
return ASN_PARSE_E;
|
||||||
break;
|
break;
|
||||||
@@ -5727,6 +5739,8 @@ const char* BEGIN_CERT_REQ = "-----BEGIN CERTIFICATE REQUEST-----";
|
|||||||
const char* END_CERT_REQ = "-----END CERTIFICATE REQUEST-----";
|
const char* END_CERT_REQ = "-----END CERTIFICATE REQUEST-----";
|
||||||
const char* BEGIN_DH_PARAM = "-----BEGIN DH PARAMETERS-----";
|
const char* BEGIN_DH_PARAM = "-----BEGIN DH PARAMETERS-----";
|
||||||
const char* END_DH_PARAM = "-----END DH PARAMETERS-----";
|
const char* END_DH_PARAM = "-----END DH PARAMETERS-----";
|
||||||
|
const char* BEGIN_DSA_PARAM = "-----BEGIN DSA PARAMETERS-----";
|
||||||
|
const char* END_DSA_PARAM = "-----END DSA PARAMETERS-----";
|
||||||
const char* BEGIN_X509_CRL = "-----BEGIN X509 CRL-----";
|
const char* BEGIN_X509_CRL = "-----BEGIN X509 CRL-----";
|
||||||
const char* END_X509_CRL = "-----END X509 CRL-----";
|
const char* END_X509_CRL = "-----END X509 CRL-----";
|
||||||
const char* BEGIN_RSA_PRIV = "-----BEGIN RSA PRIVATE KEY-----";
|
const char* BEGIN_RSA_PRIV = "-----BEGIN RSA PRIVATE KEY-----";
|
||||||
@@ -5855,6 +5869,20 @@ int wc_DerToPemEx(const byte* der, word32 derSz, byte* output, word32 outSz,
|
|||||||
headerLen = (int)XSTRLEN(header);
|
headerLen = (int)XSTRLEN(header);
|
||||||
footerLen = (int)XSTRLEN(footer);
|
footerLen = (int)XSTRLEN(footer);
|
||||||
|
|
||||||
|
/* if null output and 0 size passed in then return size needed */
|
||||||
|
if (!output && outSz == 0) {
|
||||||
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
|
XFREE(header, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
XFREE(footer, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
#endif
|
||||||
|
outLen = 0;
|
||||||
|
if ((err = Base64_Encode(der, derSz, NULL, (word32*)&outLen))
|
||||||
|
!= LENGTH_ONLY_E) {
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
return headerLen + footerLen + outLen;
|
||||||
|
}
|
||||||
|
|
||||||
if (!der || !output) {
|
if (!der || !output) {
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
XFREE(header, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
XFREE(header, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
|||||||
@@ -76,6 +76,10 @@ int wc_Des_EcbEncrypt(Des* des, byte* out, const byte* in, word32 sz)
|
|||||||
return Des_EcbEncrypt(des, out, in, sz);
|
return Des_EcbEncrypt(des, out, in, sz);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int wc_Des3_EcbEncrypt(Des3* des, byte* out, const byte* in, word32 sz)
|
||||||
|
{
|
||||||
|
return Des3_EcbEncrypt(des, out, in, sz);
|
||||||
|
}
|
||||||
#endif /* WOLFSSL_DES_ECB */
|
#endif /* WOLFSSL_DES_ECB */
|
||||||
|
|
||||||
|
|
||||||
@@ -1617,6 +1621,10 @@ int wc_Des_EcbEncrypt(Des* des, byte* out, const byte* in, word32 sz)
|
|||||||
{
|
{
|
||||||
word32 blocks = sz / DES_BLOCK_SIZE;
|
word32 blocks = sz / DES_BLOCK_SIZE;
|
||||||
|
|
||||||
|
if (des == NULL || out == NULL || in == NULL) {
|
||||||
|
return BAD_FUNC_ARG;
|
||||||
|
}
|
||||||
|
|
||||||
while (blocks--) {
|
while (blocks--) {
|
||||||
DesProcessBlock(des, in, out);
|
DesProcessBlock(des, in, out);
|
||||||
|
|
||||||
@@ -1626,6 +1634,25 @@ int wc_Des_EcbEncrypt(Des* des, byte* out, const byte* in, word32 sz)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int wc_Des3_EcbEncrypt(Des3* des, byte* out, const byte* in, word32 sz)
|
||||||
|
{
|
||||||
|
word32 blocks = sz / DES_BLOCK_SIZE;
|
||||||
|
/* printf("wc_Des3_EcbEncrypt(%016x, %016x, %d)\n",
|
||||||
|
*(unsigned long *)in, *(unsigned long *)out, sz) ; */
|
||||||
|
|
||||||
|
if (des == NULL || out == NULL || in == NULL) {
|
||||||
|
return BAD_FUNC_ARG;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (blocks--) {
|
||||||
|
Des3ProcessBlock(des, in, out);
|
||||||
|
|
||||||
|
out += DES_BLOCK_SIZE;
|
||||||
|
in += DES_BLOCK_SIZE;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* WOLFSSL_DES_ECB */
|
#endif /* WOLFSSL_DES_ECB */
|
||||||
|
|
||||||
#endif /* End wolfCrypt software implementation */
|
#endif /* End wolfCrypt software implementation */
|
||||||
|
|||||||
535
wolfcrypt/src/evp.c
Normal file
535
wolfcrypt/src/evp.c
Normal file
@@ -0,0 +1,535 @@
|
|||||||
|
/* evp.c
|
||||||
|
*
|
||||||
|
* Copyright (C) 2006-2016 wolfSSL Inc.
|
||||||
|
*
|
||||||
|
* This file is part of wolfSSL.
|
||||||
|
*
|
||||||
|
* 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-1335, USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
static unsigned int cipherType(const WOLFSSL_EVP_CIPHER *cipher);
|
||||||
|
|
||||||
|
WOLFSSL_API int wolfSSL_EVP_EncryptInit(WOLFSSL_EVP_CIPHER_CTX* ctx,
|
||||||
|
const WOLFSSL_EVP_CIPHER* type,
|
||||||
|
unsigned char* key, unsigned char* iv)
|
||||||
|
{
|
||||||
|
return wolfSSL_EVP_CipherInit(ctx, type, key, iv, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
WOLFSSL_API int wolfSSL_EVP_EncryptInit_ex(WOLFSSL_EVP_CIPHER_CTX* ctx,
|
||||||
|
const WOLFSSL_EVP_CIPHER* type,
|
||||||
|
WOLFSSL_ENGINE *impl,
|
||||||
|
unsigned char* key, unsigned char* iv)
|
||||||
|
{
|
||||||
|
(void) impl;
|
||||||
|
return wolfSSL_EVP_CipherInit(ctx, type, key, iv, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
WOLFSSL_API int wolfSSL_EVP_DecryptInit(WOLFSSL_EVP_CIPHER_CTX* ctx,
|
||||||
|
const WOLFSSL_EVP_CIPHER* type,
|
||||||
|
unsigned char* key, unsigned char* iv)
|
||||||
|
{
|
||||||
|
WOLFSSL_ENTER("wolfSSL_EVP_CipherInit");
|
||||||
|
return wolfSSL_EVP_CipherInit(ctx, type, key, iv, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
WOLFSSL_API int wolfSSL_EVP_DecryptInit_ex(WOLFSSL_EVP_CIPHER_CTX* ctx,
|
||||||
|
const WOLFSSL_EVP_CIPHER* type,
|
||||||
|
WOLFSSL_ENGINE *impl,
|
||||||
|
unsigned char* key, unsigned char* iv)
|
||||||
|
{
|
||||||
|
(void) impl;
|
||||||
|
WOLFSSL_ENTER("wolfSSL_EVP_DecryptInit");
|
||||||
|
return wolfSSL_EVP_CipherInit(ctx, type, key, iv, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
WOLFSSL_API WOLFSSL_EVP_CIPHER_CTX *wolfSSL_EVP_CIPHER_CTX_new(void)
|
||||||
|
{
|
||||||
|
WOLFSSL_EVP_CIPHER_CTX *ctx = (WOLFSSL_EVP_CIPHER_CTX*)XMALLOC(sizeof *ctx,
|
||||||
|
NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
if (ctx){
|
||||||
|
WOLFSSL_ENTER("wolfSSL_EVP_CIPHER_CTX_new");
|
||||||
|
wolfSSL_EVP_CIPHER_CTX_init(ctx);
|
||||||
|
}
|
||||||
|
return ctx;
|
||||||
|
}
|
||||||
|
|
||||||
|
WOLFSSL_API void wolfSSL_EVP_CIPHER_CTX_free(WOLFSSL_EVP_CIPHER_CTX *ctx)
|
||||||
|
{
|
||||||
|
if (ctx) {
|
||||||
|
WOLFSSL_ENTER("wolfSSL_EVP_CIPHER_CTX_free");
|
||||||
|
wolfSSL_EVP_CIPHER_CTX_cleanup(ctx);
|
||||||
|
XFREE(ctx, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
WOLFSSL_API unsigned long wolfSSL_EVP_CIPHER_CTX_mode(const WOLFSSL_EVP_CIPHER_CTX *ctx)
|
||||||
|
{
|
||||||
|
if (ctx == NULL) return 0;
|
||||||
|
return ctx->flags & WOLFSSL_EVP_CIPH_MODE;
|
||||||
|
}
|
||||||
|
|
||||||
|
WOLFSSL_API int wolfSSL_EVP_EncryptFinal(WOLFSSL_EVP_CIPHER_CTX *ctx,
|
||||||
|
unsigned char *out, int *outl)
|
||||||
|
{
|
||||||
|
if (ctx && ctx->enc){
|
||||||
|
WOLFSSL_ENTER("wolfSSL_EVP_EncryptFinal");
|
||||||
|
return wolfSSL_EVP_CipherFinal(ctx, out, outl);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
WOLFSSL_API int wolfSSL_EVP_CipherInit_ex(WOLFSSL_EVP_CIPHER_CTX* ctx,
|
||||||
|
const WOLFSSL_EVP_CIPHER* type,
|
||||||
|
WOLFSSL_ENGINE *impl,
|
||||||
|
unsigned char* key, unsigned char* iv,
|
||||||
|
int enc)
|
||||||
|
{
|
||||||
|
(void)impl;
|
||||||
|
return wolfSSL_EVP_CipherInit(ctx, type, key, iv, enc);
|
||||||
|
}
|
||||||
|
|
||||||
|
WOLFSSL_API int wolfSSL_EVP_EncryptFinal_ex(WOLFSSL_EVP_CIPHER_CTX *ctx,
|
||||||
|
unsigned char *out, int *outl)
|
||||||
|
{
|
||||||
|
if (ctx && ctx->enc){
|
||||||
|
WOLFSSL_ENTER("wolfSSL_EVP_EncryptFinal_ex");
|
||||||
|
return wolfSSL_EVP_CipherFinal(ctx, out, outl);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
WOLFSSL_API int wolfSSL_EVP_DecryptFinal(WOLFSSL_EVP_CIPHER_CTX *ctx,
|
||||||
|
unsigned char *out, int *outl)
|
||||||
|
{
|
||||||
|
if (ctx && ctx->enc)
|
||||||
|
return 0;
|
||||||
|
else{
|
||||||
|
WOLFSSL_ENTER("wolfSSL_EVP_DecryptFinal");
|
||||||
|
return wolfSSL_EVP_CipherFinal(ctx, out, outl);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
WOLFSSL_API int wolfSSL_EVP_DecryptFinal_ex(WOLFSSL_EVP_CIPHER_CTX *ctx,
|
||||||
|
unsigned char *out, int *outl)
|
||||||
|
{
|
||||||
|
if (ctx && ctx->enc)
|
||||||
|
return 0;
|
||||||
|
else{
|
||||||
|
WOLFSSL_ENTER("wolfSSL_EVP_CipherFinal_ex");
|
||||||
|
return wolfSSL_EVP_CipherFinal(ctx, out, outl);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
WOLFSSL_API int wolfSSL_EVP_DigestInit_ex(WOLFSSL_EVP_MD_CTX* ctx,
|
||||||
|
const WOLFSSL_EVP_MD* type,
|
||||||
|
WOLFSSL_ENGINE *impl)
|
||||||
|
{
|
||||||
|
(void) impl;
|
||||||
|
WOLFSSL_ENTER("wolfSSL_EVP_DigestInit_ex");
|
||||||
|
return wolfSSL_EVP_DigestInit(ctx, type);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef DEBUG_WOLFSSL_EVP
|
||||||
|
#define PRINT_BUF(b, sz) { int i; for(i=0; i<(sz); i++){printf("%02x(%c),", (b)[i], (b)[i]); if((i+1)%8==0)printf("\n");}}
|
||||||
|
#else
|
||||||
|
#define PRINT_BUF(b, sz)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static int fillBuff(WOLFSSL_EVP_CIPHER_CTX *ctx, const unsigned char *in, int sz)
|
||||||
|
{
|
||||||
|
int fill;
|
||||||
|
|
||||||
|
if (sz > 0) {
|
||||||
|
if ((sz+ctx->bufUsed) > ctx->block_size) {
|
||||||
|
fill = ctx->block_size - ctx->bufUsed;
|
||||||
|
} else {
|
||||||
|
fill = sz;
|
||||||
|
}
|
||||||
|
XMEMCPY(&(ctx->buf[ctx->bufUsed]), in, fill);
|
||||||
|
ctx->bufUsed += fill;
|
||||||
|
return fill;
|
||||||
|
} else return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int evpCipherBlock(WOLFSSL_EVP_CIPHER_CTX *ctx,
|
||||||
|
unsigned char *out,
|
||||||
|
const unsigned char *in, int inl)
|
||||||
|
{
|
||||||
|
switch (ctx->cipherType) {
|
||||||
|
#if !defined(NO_AES) && defined(HAVE_AES_CBC)
|
||||||
|
case AES_128_CBC_TYPE:
|
||||||
|
case AES_192_CBC_TYPE:
|
||||||
|
case AES_256_CBC_TYPE:
|
||||||
|
if (ctx->enc)
|
||||||
|
wc_AesCbcEncrypt(&ctx->cipher.aes, out, in, inl);
|
||||||
|
else
|
||||||
|
wc_AesCbcDecrypt(&ctx->cipher.aes, out, in, inl);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
#if !defined(NO_AES) && defined(WOLFSSL_AES_COUNTER)
|
||||||
|
case AES_128_CTR_TYPE:
|
||||||
|
case AES_192_CTR_TYPE:
|
||||||
|
case AES_256_CTR_TYPE:
|
||||||
|
if (ctx->enc)
|
||||||
|
wc_AesCtrEncrypt(&ctx->cipher.aes, out, in, inl);
|
||||||
|
else
|
||||||
|
wc_AesCtrEncrypt(&ctx->cipher.aes, out, in, inl);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
#if !defined(NO_AES) && defined(HAVE_AES_ECB)
|
||||||
|
case AES_128_ECB_TYPE:
|
||||||
|
case AES_192_ECB_TYPE:
|
||||||
|
case AES_256_ECB_TYPE:
|
||||||
|
if (ctx->enc)
|
||||||
|
wc_AesEcbEncrypt(&ctx->cipher.aes, out, in, inl);
|
||||||
|
else
|
||||||
|
wc_AesEcbDecrypt(&ctx->cipher.aes, out, in, inl);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
#ifndef NO_DES3
|
||||||
|
case DES_CBC_TYPE:
|
||||||
|
if (ctx->enc)
|
||||||
|
wc_Des_CbcEncrypt(&ctx->cipher.des, out, in, inl);
|
||||||
|
else
|
||||||
|
wc_Des_CbcDecrypt(&ctx->cipher.des, out, in, inl);
|
||||||
|
break;
|
||||||
|
case DES_EDE3_CBC_TYPE:
|
||||||
|
if (ctx->enc)
|
||||||
|
wc_Des3_CbcEncrypt(&ctx->cipher.des3, out, in, inl);
|
||||||
|
else
|
||||||
|
wc_Des3_CbcDecrypt(&ctx->cipher.des3, out, in, inl);
|
||||||
|
break;
|
||||||
|
#if defined(WOLFSSL_DES_ECB)
|
||||||
|
case DES_ECB_TYPE:
|
||||||
|
wc_Des_EcbEncrypt(&ctx->cipher.des, out, in, inl);
|
||||||
|
break;
|
||||||
|
case DES_EDE3_ECB_TYPE:
|
||||||
|
if (ctx->enc)
|
||||||
|
wc_Des3_EcbEncrypt(&ctx->cipher.des3, out, in, inl);
|
||||||
|
else
|
||||||
|
wc_Des3_EcbEncrypt(&ctx->cipher.des3, out, in, inl);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
(void)in;
|
||||||
|
(void)inl;
|
||||||
|
(void)out;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
WOLFSSL_API int wolfSSL_EVP_CipherUpdate(WOLFSSL_EVP_CIPHER_CTX *ctx,
|
||||||
|
unsigned char *out, int *outl,
|
||||||
|
const unsigned char *in, int inl)
|
||||||
|
{
|
||||||
|
int blocks;
|
||||||
|
int fill;
|
||||||
|
|
||||||
|
if (ctx == NULL) return BAD_FUNC_ARG;
|
||||||
|
WOLFSSL_ENTER("wolfSSL_EVP_CipherUpdate");
|
||||||
|
*outl = 0;
|
||||||
|
if (ctx->bufUsed > 0) { /* concatinate them if there is anything */
|
||||||
|
fill = fillBuff(ctx, in, inl);
|
||||||
|
inl -= fill;
|
||||||
|
in += fill;
|
||||||
|
}
|
||||||
|
if((ctx->enc == 0)&& (ctx->lastUsed == 1)){
|
||||||
|
PRINT_BUF(ctx->lastBlock, ctx->block_size);
|
||||||
|
XMEMCPY(out, ctx->lastBlock, ctx->block_size);
|
||||||
|
*outl+= ctx->block_size;
|
||||||
|
out += ctx->block_size;
|
||||||
|
}
|
||||||
|
if ((ctx->bufUsed == ctx->block_size) || (ctx->flags & WOLFSSL_EVP_CIPH_NO_PADDING)){
|
||||||
|
/* the buff is full, flash out */
|
||||||
|
PRINT_BUF(ctx->buf, ctx->block_size);
|
||||||
|
if (evpCipherBlock(ctx, out, ctx->buf, ctx->block_size) == 0)
|
||||||
|
return 0;
|
||||||
|
PRINT_BUF(out, ctx->block_size);
|
||||||
|
if(ctx->enc == 0){
|
||||||
|
ctx->lastUsed = 1;
|
||||||
|
XMEMCPY(ctx->lastBlock, out, ctx->block_size);
|
||||||
|
} else {
|
||||||
|
*outl+= ctx->block_size;
|
||||||
|
out += ctx->block_size;
|
||||||
|
}
|
||||||
|
ctx->bufUsed = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
blocks = inl / ctx->block_size;
|
||||||
|
if (blocks > 0) {
|
||||||
|
/* process blocks */
|
||||||
|
if (evpCipherBlock(ctx, out, ctx->buf, blocks) == 0)
|
||||||
|
return 0;
|
||||||
|
PRINT_BUF(ctx->buf, ctx->block_size);
|
||||||
|
PRINT_BUF(out, ctx->block_size);
|
||||||
|
inl -= ctx->block_size * blocks;
|
||||||
|
in += ctx->block_size * blocks;
|
||||||
|
if(ctx->enc == 0){
|
||||||
|
ctx->lastUsed = 1;
|
||||||
|
XMEMCPY(ctx->lastBlock, &out[ctx->block_size * (blocks-1)], ctx->block_size);
|
||||||
|
*outl+= ctx->block_size * (blocks-1);
|
||||||
|
} else {
|
||||||
|
*outl+= ctx->block_size * blocks;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (inl > 0) {
|
||||||
|
/* put fraction into buff */
|
||||||
|
fillBuff(ctx, in, inl);
|
||||||
|
/* no increase of outl */
|
||||||
|
}
|
||||||
|
|
||||||
|
(void)out; /* silence warning in case not read */
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void padBlock(WOLFSSL_EVP_CIPHER_CTX *ctx)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for (i = ctx->bufUsed; i < ctx->block_size; i++)
|
||||||
|
ctx->buf[i] = (byte)(ctx->block_size - ctx->bufUsed);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int checkPad(WOLFSSL_EVP_CIPHER_CTX *ctx, unsigned char *buff)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
int n;
|
||||||
|
n = buff[ctx->block_size-1];
|
||||||
|
|
||||||
|
if (n > ctx->block_size) return FALSE;
|
||||||
|
for (i = 0; i < n; i++){
|
||||||
|
if (buff[ctx->block_size-i-1] != n)
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
return ctx->block_size - n;
|
||||||
|
}
|
||||||
|
|
||||||
|
WOLFSSL_API int wolfSSL_EVP_CipherFinal(WOLFSSL_EVP_CIPHER_CTX *ctx,
|
||||||
|
unsigned char *out, int *outl)
|
||||||
|
{
|
||||||
|
int fl ;
|
||||||
|
if (ctx == NULL) return BAD_FUNC_ARG;
|
||||||
|
WOLFSSL_ENTER("wolfSSL_EVP_CipherFinal");
|
||||||
|
if (ctx->flags & WOLFSSL_EVP_CIPH_NO_PADDING) {
|
||||||
|
*outl = 0;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if (ctx->enc) {
|
||||||
|
if (ctx->bufUsed > 0) {
|
||||||
|
padBlock(ctx);
|
||||||
|
PRINT_BUF(ctx->buf, ctx->block_size);
|
||||||
|
if (evpCipherBlock(ctx, out, ctx->buf, ctx->block_size) == 0)
|
||||||
|
return 0;
|
||||||
|
PRINT_BUF(out, ctx->block_size);
|
||||||
|
*outl = ctx->block_size;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (ctx->lastUsed){
|
||||||
|
PRINT_BUF(ctx->lastBlock, ctx->block_size);
|
||||||
|
if ((fl = checkPad(ctx, ctx->lastBlock)) >= 0) {
|
||||||
|
XMEMCPY(out, ctx->lastBlock, fl);
|
||||||
|
*outl = fl;
|
||||||
|
} else return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
WOLFSSL_API int wolfSSL_EVP_CIPHER_CTX_block_size(const WOLFSSL_EVP_CIPHER_CTX *ctx)
|
||||||
|
{
|
||||||
|
if (ctx == NULL) return BAD_FUNC_ARG;
|
||||||
|
switch (ctx->cipherType) {
|
||||||
|
|
||||||
|
#if !defined(NO_AES) && defined(HAVE_AES_CBC)
|
||||||
|
case AES_128_CBC_TYPE:
|
||||||
|
case AES_192_CBC_TYPE:
|
||||||
|
case AES_256_CBC_TYPE:
|
||||||
|
#endif
|
||||||
|
#if !defined(NO_AES) && defined(WOLFSSL_AES_COUNTER)
|
||||||
|
case AES_128_CTR_TYPE:
|
||||||
|
case AES_192_CTR_TYPE:
|
||||||
|
case AES_256_CTR_TYPE:
|
||||||
|
#endif
|
||||||
|
#if !defined(NO_AES)
|
||||||
|
case AES_128_ECB_TYPE:
|
||||||
|
case AES_192_ECB_TYPE:
|
||||||
|
case AES_256_ECB_TYPE:
|
||||||
|
#endif
|
||||||
|
#ifndef NO_DES3
|
||||||
|
case DES_CBC_TYPE:
|
||||||
|
case DES_ECB_TYPE:
|
||||||
|
case DES_EDE3_CBC_TYPE:
|
||||||
|
case DES_EDE3_ECB_TYPE:
|
||||||
|
#endif
|
||||||
|
return ctx->block_size;
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static unsigned int cipherType(const WOLFSSL_EVP_CIPHER *cipher)
|
||||||
|
{
|
||||||
|
if (cipher == NULL) return 0; /* dummy for #ifdef */
|
||||||
|
#ifndef NO_DES3
|
||||||
|
else if (XSTRNCMP(cipher, EVP_DES_CBC, EVP_DES_SIZE) == 0)
|
||||||
|
return DES_CBC_TYPE;
|
||||||
|
else if (XSTRNCMP(cipher, EVP_DES_EDE3_CBC, EVP_DES_EDE3_SIZE) == 0)
|
||||||
|
return DES_EDE3_CBC_TYPE;
|
||||||
|
#if !defined(NO_DES3)
|
||||||
|
else if (XSTRNCMP(cipher, EVP_DES_ECB, EVP_DES_SIZE) == 0)
|
||||||
|
return DES_ECB_TYPE;
|
||||||
|
else if (XSTRNCMP(cipher, EVP_DES_EDE3_ECB, EVP_DES_EDE3_SIZE) == 0)
|
||||||
|
return DES_EDE3_ECB_TYPE;
|
||||||
|
#endif /* NO_DES3 && HAVE_AES_ECB */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(NO_AES) && defined(HAVE_AES_CBC)
|
||||||
|
else if (XSTRNCMP(cipher, EVP_AES_128_CBC, EVP_AES_SIZE) == 0)
|
||||||
|
return AES_128_CBC_TYPE;
|
||||||
|
else if (XSTRNCMP(cipher, EVP_AES_192_CBC, EVP_AES_SIZE) == 0)
|
||||||
|
return AES_192_CBC_TYPE;
|
||||||
|
else if (XSTRNCMP(cipher, EVP_AES_256_CBC, EVP_AES_SIZE) == 0)
|
||||||
|
return AES_256_CBC_TYPE;
|
||||||
|
#endif /* !NO_AES && HAVE_AES_CBC */
|
||||||
|
#if !defined(NO_AES) && defined(WOLFSSL_AES_COUNTER)
|
||||||
|
else if (XSTRNCMP(cipher, EVP_AES_128_CTR, EVP_AES_SIZE) == 0)
|
||||||
|
return AES_128_CTR_TYPE;
|
||||||
|
else if (XSTRNCMP(cipher, EVP_AES_192_CTR, EVP_AES_SIZE) == 0)
|
||||||
|
return AES_192_CTR_TYPE;
|
||||||
|
else if (XSTRNCMP(cipher, EVP_AES_256_CTR, EVP_AES_SIZE) == 0)
|
||||||
|
return AES_256_CTR_TYPE;
|
||||||
|
#endif /* !NO_AES && HAVE_AES_CBC */
|
||||||
|
#if !defined(NO_AES) && defined(HAVE_AES_ECB)
|
||||||
|
else if (XSTRNCMP(cipher, EVP_AES_128_ECB, EVP_AES_SIZE) == 0)
|
||||||
|
return AES_128_ECB_TYPE;
|
||||||
|
else if (XSTRNCMP(cipher, EVP_AES_192_ECB, EVP_AES_SIZE) == 0)
|
||||||
|
return AES_192_ECB_TYPE;
|
||||||
|
else if (XSTRNCMP(cipher, EVP_AES_256_ECB, EVP_AES_SIZE) == 0)
|
||||||
|
return AES_256_ECB_TYPE;
|
||||||
|
#endif /* !NO_AES && HAVE_AES_CBC */
|
||||||
|
else return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
WOLFSSL_API int wolfSSL_EVP_CIPHER_block_size(const WOLFSSL_EVP_CIPHER *cipher)
|
||||||
|
{
|
||||||
|
if (cipher == NULL) return BAD_FUNC_ARG;
|
||||||
|
switch (cipherType(cipher)) {
|
||||||
|
#if !defined(NO_AES) && defined(HAVE_AES_CBC)
|
||||||
|
case AES_128_CBC_TYPE:
|
||||||
|
case AES_192_CBC_TYPE:
|
||||||
|
case AES_256_CBC_TYPE:
|
||||||
|
return AES_BLOCK_SIZE;
|
||||||
|
#endif
|
||||||
|
#if !defined(NO_AES) && defined(WOLFSSL_AES_COUNTER)
|
||||||
|
case AES_128_CTR_TYPE:
|
||||||
|
case AES_192_CTR_TYPE:
|
||||||
|
case AES_256_CTR_TYPE:
|
||||||
|
return AES_BLOCK_SIZE;
|
||||||
|
#endif
|
||||||
|
#if !defined(NO_AES) && defined(HAVE_AES_ECB)
|
||||||
|
case AES_128_ECB_TYPE:
|
||||||
|
case AES_192_ECB_TYPE:
|
||||||
|
case AES_256_ECB_TYPE:
|
||||||
|
return AES_BLOCK_SIZE;
|
||||||
|
#endif
|
||||||
|
#ifndef NO_DES3
|
||||||
|
case DES_CBC_TYPE: return 8;
|
||||||
|
case DES_EDE3_CBC_TYPE: return 8;
|
||||||
|
case DES_ECB_TYPE: return 8;
|
||||||
|
case DES_EDE3_ECB_TYPE: return 8;
|
||||||
|
#endif
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long WOLFSSL_CIPHER_mode(const WOLFSSL_EVP_CIPHER *cipher)
|
||||||
|
{
|
||||||
|
switch (cipherType(cipher)) {
|
||||||
|
#if !defined(NO_AES) && defined(HAVE_AES_CBC)
|
||||||
|
case AES_128_CBC_TYPE:
|
||||||
|
case AES_192_CBC_TYPE:
|
||||||
|
case AES_256_CBC_TYPE:
|
||||||
|
return WOLFSSL_EVP_CIPH_CBC_MODE ;
|
||||||
|
#endif
|
||||||
|
#if !defined(NO_AES) && defined(WOLFSSL_AES_COUNTER)
|
||||||
|
case AES_128_CTR_TYPE:
|
||||||
|
case AES_192_CTR_TYPE:
|
||||||
|
case AES_256_CTR_TYPE:
|
||||||
|
return WOLFSSL_EVP_CIPH_CTR_MODE ;
|
||||||
|
#endif
|
||||||
|
#if !defined(NO_AES)
|
||||||
|
case AES_128_ECB_TYPE:
|
||||||
|
case AES_192_ECB_TYPE:
|
||||||
|
case AES_256_ECB_TYPE:
|
||||||
|
return WOLFSSL_EVP_CIPH_ECB_MODE ;
|
||||||
|
#endif
|
||||||
|
#ifndef NO_DES3
|
||||||
|
case DES_CBC_TYPE:
|
||||||
|
case DES_EDE3_CBC_TYPE:
|
||||||
|
return WOLFSSL_EVP_CIPH_CBC_MODE ;
|
||||||
|
case DES_ECB_TYPE:
|
||||||
|
case DES_EDE3_ECB_TYPE:
|
||||||
|
return WOLFSSL_EVP_CIPH_ECB_MODE ;
|
||||||
|
#endif
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
WOLFSSL_API unsigned long WOLFSSL_EVP_CIPHER_mode(const WOLFSSL_EVP_CIPHER *cipher)
|
||||||
|
{
|
||||||
|
if (cipher == NULL) return 0;
|
||||||
|
return WOLFSSL_CIPHER_mode(cipher);
|
||||||
|
}
|
||||||
|
|
||||||
|
WOLFSSL_API void wolfSSL_EVP_CIPHER_CTX_set_flags(WOLFSSL_EVP_CIPHER_CTX *ctx, int flags)
|
||||||
|
{
|
||||||
|
if (ctx != NULL) {
|
||||||
|
ctx->flags = flags;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
WOLFSSL_API unsigned long wolfSSL_EVP_CIPHER_flags(const WOLFSSL_EVP_CIPHER *cipher)
|
||||||
|
{
|
||||||
|
if (cipher == NULL) return 0;
|
||||||
|
return WOLFSSL_CIPHER_mode(cipher);
|
||||||
|
}
|
||||||
|
|
||||||
|
WOLFSSL_API int wolfSSL_EVP_CIPHER_CTX_set_padding(WOLFSSL_EVP_CIPHER_CTX *ctx, int padding)
|
||||||
|
{
|
||||||
|
if (ctx == NULL) return BAD_FUNC_ARG;
|
||||||
|
if (padding) {
|
||||||
|
ctx->flags &= ~WOLFSSL_EVP_CIPH_NO_PADDING;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
ctx->flags |= WOLFSSL_EVP_CIPH_NO_PADDING;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
WOLFSSL_API int wolfSSL_EVP_add_digest(const WOLFSSL_EVP_MD *digest)
|
||||||
|
{
|
||||||
|
(void)digest;
|
||||||
|
/* nothing to do */
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
@@ -1,7 +1,9 @@
|
|||||||
# vim:ft=automake
|
# vim:ft=automake
|
||||||
# All paths should be given relative to the root
|
# All paths should be given relative to the root
|
||||||
|
|
||||||
|
EXTRA_DIST += src/bio.c
|
||||||
EXTRA_DIST += wolfcrypt/src/misc.c
|
EXTRA_DIST += wolfcrypt/src/misc.c
|
||||||
|
EXTRA_DIST += wolfcrypt/src/evp.c
|
||||||
EXTRA_DIST += wolfcrypt/src/asm.c
|
EXTRA_DIST += wolfcrypt/src/asm.c
|
||||||
EXTRA_DIST += wolfcrypt/src/aes_asm.asm
|
EXTRA_DIST += wolfcrypt/src/aes_asm.asm
|
||||||
|
|
||||||
|
|||||||
@@ -43,6 +43,11 @@
|
|||||||
|
|
||||||
|
|
||||||
#ifdef DEBUG_WOLFSSL
|
#ifdef DEBUG_WOLFSSL
|
||||||
|
#if defined(OPENSSL_EXTRA) || defined(DEBUG_WOLFSSL_VERBOSE)
|
||||||
|
volatile char wc_last_error_file[80];
|
||||||
|
volatile unsigned long wc_last_error_line;
|
||||||
|
volatile unsigned long wc_last_error;
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Set these to default values initially. */
|
/* Set these to default values initially. */
|
||||||
static wolfSSL_Logging_cb log_function = 0;
|
static wolfSSL_Logging_cb log_function = 0;
|
||||||
@@ -198,11 +203,35 @@ void WOLFSSL_LEAVE(const char* msg, int ret)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* When using OPENSSL_EXTRA or DEBUG_WOLFSSL_VERBOSE macro then WOLFSSL_ERROR is
|
||||||
|
* mapped to new funtion WOLFSSL_ERROR_LINE which gets the line # and function
|
||||||
|
* name where WOLFSSL_ERROR is called at.
|
||||||
|
*/
|
||||||
|
#if defined(OPENSSL_EXTRA) || defined(DEBUG_WOLFSSL_VERBOSE)
|
||||||
|
void WOLFSSL_ERROR_LINE(int error, const char* func, unsigned int line,
|
||||||
|
const char* file, void* usrCtx)
|
||||||
|
#else
|
||||||
void WOLFSSL_ERROR(int error)
|
void WOLFSSL_ERROR(int error)
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
if (loggingEnabled) {
|
if (loggingEnabled) {
|
||||||
char buffer[80];
|
char buffer[80];
|
||||||
sprintf(buffer, "wolfSSL error occurred, error = %d", error);
|
#if defined(OPENSSL_EXTRA) || defined(DEBUG_WOLFSSL_VERBOSE)
|
||||||
|
(void)usrCtx; /* a user ctx for future flexibility */
|
||||||
|
(void)func;
|
||||||
|
if (error < 0) error = error - (2*error); /* get absolute value */
|
||||||
|
wc_last_error = (unsigned long)error;
|
||||||
|
wc_last_error_line = (unsigned long)line;
|
||||||
|
XMEMSET((char*)wc_last_error_file, 0, sizeof(file));
|
||||||
|
if (XSTRLEN(file) < sizeof(file)) {
|
||||||
|
XSTRNCPY((char*)wc_last_error_file, file, XSTRLEN(file));
|
||||||
|
}
|
||||||
|
sprintf(buffer, "wolfSSL error occurred, error = %d line:%d file:%s",
|
||||||
|
error, line, file);
|
||||||
|
#else
|
||||||
|
sprintf(buffer, "wolfSSL error occurred, error = %d", error);
|
||||||
|
#endif
|
||||||
wolfssl_log(ERROR_LOG , buffer);
|
wolfssl_log(ERROR_LOG , buffer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,6 +43,10 @@
|
|||||||
#include <wolfssl/wolfcrypt/port/atmel/atmel.h>
|
#include <wolfssl/wolfcrypt/port/atmel/atmel.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(OPENSSL_EXTRA) || defined(HAVE_WEBSERVER)
|
||||||
|
#include <wolfssl/openssl/evp.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
/* 4996 warning to use MS extensions e.g., strcpy_s instead of strncpy */
|
/* 4996 warning to use MS extensions e.g., strcpy_s instead of strncpy */
|
||||||
#pragma warning(disable: 4996)
|
#pragma warning(disable: 4996)
|
||||||
@@ -89,6 +93,10 @@ int wolfCrypt_Init(void)
|
|||||||
WOLFSSL_MSG("Using ARM hardware acceleration");
|
WOLFSSL_MSG("Using ARM hardware acceleration");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(OPENSSL_EXTRA) || defined(HAVE_WEBSERVER)
|
||||||
|
wolfSSL_EVP_init();
|
||||||
|
#endif
|
||||||
|
|
||||||
initRefCount = 1;
|
initRefCount = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -111,6 +111,7 @@
|
|||||||
#include <wolfssl/openssl/evp.h>
|
#include <wolfssl/openssl/evp.h>
|
||||||
#include <wolfssl/openssl/rand.h>
|
#include <wolfssl/openssl/rand.h>
|
||||||
#include <wolfssl/openssl/hmac.h>
|
#include <wolfssl/openssl/hmac.h>
|
||||||
|
#include <wolfssl/openssl/aes.h>
|
||||||
#include <wolfssl/openssl/des.h>
|
#include <wolfssl/openssl/des.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -2081,7 +2082,7 @@ int hc128_test(void)
|
|||||||
(word32)test_hc128[i].outLen) != 0) {
|
(word32)test_hc128[i].outLen) != 0) {
|
||||||
return -110;
|
return -110;
|
||||||
}
|
}
|
||||||
if (wc_Hc128_Process(&dec, plain, cipher,
|
if (wc_Hc128_Process(&dec, plain, cipher,
|
||||||
(word32)test_hc128[i].outLen) != 0) {
|
(word32)test_hc128[i].outLen) != 0) {
|
||||||
return -115;
|
return -115;
|
||||||
}
|
}
|
||||||
@@ -4860,7 +4861,7 @@ int rsa_test(void)
|
|||||||
!defined(HAVE_FIPS)
|
!defined(HAVE_FIPS)
|
||||||
#ifndef NO_SHA
|
#ifndef NO_SHA
|
||||||
XMEMSET(plain, 0, sizeof(plain));
|
XMEMSET(plain, 0, sizeof(plain));
|
||||||
|
|
||||||
do {
|
do {
|
||||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||||
ret = wc_RsaAsyncWait(ret, &key);
|
ret = wc_RsaAsyncWait(ret, &key);
|
||||||
@@ -6879,7 +6880,7 @@ int openssl_test(void)
|
|||||||
|
|
||||||
#ifndef NO_AES
|
#ifndef NO_AES
|
||||||
|
|
||||||
{ /* evp_cipher test */
|
{ /* evp_cipher test: EVP_aes_128_cbc */
|
||||||
EVP_CIPHER_CTX ctx;
|
EVP_CIPHER_CTX ctx;
|
||||||
|
|
||||||
|
|
||||||
@@ -6922,13 +6923,437 @@ int openssl_test(void)
|
|||||||
return -86;
|
return -86;
|
||||||
|
|
||||||
|
|
||||||
|
} /* end evp_cipher test: EVP_aes_128_cbc*/
|
||||||
|
|
||||||
|
#ifdef HAVE_AES_ECB
|
||||||
|
{ /* evp_cipher test: EVP_aes_128_ecb*/
|
||||||
|
EVP_CIPHER_CTX ctx;
|
||||||
|
const byte msg[] =
|
||||||
|
{
|
||||||
|
0x6b,0xc1,0xbe,0xe2,0x2e,0x40,0x9f,0x96,
|
||||||
|
0xe9,0x3d,0x7e,0x11,0x73,0x93,0x17,0x2a
|
||||||
|
};
|
||||||
|
|
||||||
|
const byte verify[] =
|
||||||
|
{
|
||||||
|
0xf3,0xee,0xd1,0xbd,0xb5,0xd2,0xa0,0x3c,
|
||||||
|
0x06,0x4b,0x5a,0x7e,0x3d,0xb1,0x81,0xf8
|
||||||
|
};
|
||||||
|
|
||||||
|
const byte key[] =
|
||||||
|
{
|
||||||
|
0x60,0x3d,0xeb,0x10,0x15,0xca,0x71,0xbe,
|
||||||
|
0x2b,0x73,0xae,0xf0,0x85,0x7d,0x77,0x81,
|
||||||
|
0x1f,0x35,0x2c,0x07,0x3b,0x61,0x08,0xd7,
|
||||||
|
0x2d,0x98,0x10,0xa3,0x09,0x14,0xdf,0xf4
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
byte cipher[AES_BLOCK_SIZE * 4];
|
||||||
|
byte plain [AES_BLOCK_SIZE * 4];
|
||||||
|
|
||||||
|
EVP_CIPHER_CTX_init(&ctx);
|
||||||
|
if (EVP_CipherInit(&ctx, EVP_aes_256_ecb(), (unsigned char*)key, NULL, 1) == 0)
|
||||||
|
return -181;
|
||||||
|
|
||||||
|
if (EVP_Cipher(&ctx, cipher, (byte*)msg, 16) == 0)
|
||||||
|
return -182;
|
||||||
|
|
||||||
|
if (XMEMCMP(cipher, verify, AES_BLOCK_SIZE))
|
||||||
|
return -183;
|
||||||
|
|
||||||
|
EVP_CIPHER_CTX_init(&ctx);
|
||||||
|
if (EVP_CipherInit(&ctx, EVP_aes_256_ecb(), (unsigned char*)key, NULL, 0) == 0)
|
||||||
|
return -184;
|
||||||
|
|
||||||
|
if (EVP_Cipher(&ctx, plain, cipher, 16) == 0)
|
||||||
|
return -185;
|
||||||
|
|
||||||
|
if (XMEMCMP(plain, msg, AES_BLOCK_SIZE))
|
||||||
|
return -186;
|
||||||
|
|
||||||
} /* end evp_cipher test */
|
} /* end evp_cipher test */
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* NO_AES */
|
#endif /* NO_AES */
|
||||||
|
|
||||||
|
#define OPENSSL_TEST_ERROR (-10000)
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef NO_AES
|
||||||
|
#ifdef WOLFSSL_AES_DIRECT
|
||||||
|
/* enable HAVE_AES_DECRYPT for AES_encrypt/decrypt */
|
||||||
|
{
|
||||||
|
|
||||||
|
/* Test: AES_encrypt/decrypt/set Key */
|
||||||
|
AES_KEY enc;
|
||||||
|
#ifdef HAVE_AES_DECRYPT
|
||||||
|
AES_KEY dec;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
const byte msg[] =
|
||||||
|
{
|
||||||
|
0x6b,0xc1,0xbe,0xe2,0x2e,0x40,0x9f,0x96,
|
||||||
|
0xe9,0x3d,0x7e,0x11,0x73,0x93,0x17,0x2a
|
||||||
|
};
|
||||||
|
|
||||||
|
const byte verify[] =
|
||||||
|
{
|
||||||
|
0xf3,0xee,0xd1,0xbd,0xb5,0xd2,0xa0,0x3c,
|
||||||
|
0x06,0x4b,0x5a,0x7e,0x3d,0xb1,0x81,0xf8
|
||||||
|
};
|
||||||
|
|
||||||
|
const byte key[] =
|
||||||
|
{
|
||||||
|
0x60,0x3d,0xeb,0x10,0x15,0xca,0x71,0xbe,
|
||||||
|
0x2b,0x73,0xae,0xf0,0x85,0x7d,0x77,0x81,
|
||||||
|
0x1f,0x35,0x2c,0x07,0x3b,0x61,0x08,0xd7,
|
||||||
|
0x2d,0x98,0x10,0xa3,0x09,0x14,0xdf,0xf4
|
||||||
|
};
|
||||||
|
|
||||||
|
byte plain[sizeof(msg)];
|
||||||
|
byte cipher[sizeof(msg)];
|
||||||
|
|
||||||
|
printf("openSSL extra test\n") ;
|
||||||
|
|
||||||
|
|
||||||
|
AES_set_encrypt_key(key, sizeof(key)*8, &enc);
|
||||||
|
AES_set_decrypt_key(key, sizeof(key)*8, &dec);
|
||||||
|
|
||||||
|
AES_encrypt(msg, cipher, &enc);
|
||||||
|
|
||||||
|
#ifdef HAVE_AES_DECRYPT
|
||||||
|
AES_decrypt(cipher, plain, &dec);
|
||||||
|
if (XMEMCMP(plain, msg, AES_BLOCK_SIZE))
|
||||||
|
return OPENSSL_TEST_ERROR-60;
|
||||||
|
#endif /* HAVE_AES_DECRYPT */
|
||||||
|
|
||||||
|
if (XMEMCMP(cipher, verify, AES_BLOCK_SIZE))
|
||||||
|
return OPENSSL_TEST_ERROR-61;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* EVP_Cipher with EVP_aes_xxx_ctr() */
|
||||||
|
#ifdef WOLFSSL_AES_COUNTER
|
||||||
|
{
|
||||||
|
const byte ctrKey[] =
|
||||||
|
{
|
||||||
|
0x2b,0x7e,0x15,0x16,0x28,0xae,0xd2,0xa6,
|
||||||
|
0xab,0xf7,0x15,0x88,0x09,0xcf,0x4f,0x3c
|
||||||
|
};
|
||||||
|
|
||||||
|
const byte ctrIv[] =
|
||||||
|
{
|
||||||
|
0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,
|
||||||
|
0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
const byte ctrPlain[] =
|
||||||
|
{
|
||||||
|
0x6b,0xc1,0xbe,0xe2,0x2e,0x40,0x9f,0x96,
|
||||||
|
0xe9,0x3d,0x7e,0x11,0x73,0x93,0x17,0x2a,
|
||||||
|
0xae,0x2d,0x8a,0x57,0x1e,0x03,0xac,0x9c,
|
||||||
|
0x9e,0xb7,0x6f,0xac,0x45,0xaf,0x8e,0x51,
|
||||||
|
0x30,0xc8,0x1c,0x46,0xa3,0x5c,0xe4,0x11,
|
||||||
|
0xe5,0xfb,0xc1,0x19,0x1a,0x0a,0x52,0xef,
|
||||||
|
0xf6,0x9f,0x24,0x45,0xdf,0x4f,0x9b,0x17,
|
||||||
|
0xad,0x2b,0x41,0x7b,0xe6,0x6c,0x37,0x10
|
||||||
|
};
|
||||||
|
|
||||||
|
const byte ctrCipher[] =
|
||||||
|
{
|
||||||
|
0x87,0x4d,0x61,0x91,0xb6,0x20,0xe3,0x26,
|
||||||
|
0x1b,0xef,0x68,0x64,0x99,0x0d,0xb6,0xce,
|
||||||
|
0x98,0x06,0xf6,0x6b,0x79,0x70,0xfd,0xff,
|
||||||
|
0x86,0x17,0x18,0x7b,0xb9,0xff,0xfd,0xff,
|
||||||
|
0x5a,0xe4,0xdf,0x3e,0xdb,0xd5,0xd3,0x5e,
|
||||||
|
0x5b,0x4f,0x09,0x02,0x0d,0xb0,0x3e,0xab,
|
||||||
|
0x1e,0x03,0x1d,0xda,0x2f,0xbe,0x03,0xd1,
|
||||||
|
0x79,0x21,0x70,0xa0,0xf3,0x00,0x9c,0xee
|
||||||
|
};
|
||||||
|
|
||||||
|
byte plainBuff [64];
|
||||||
|
byte cipherBuff[64];
|
||||||
|
|
||||||
|
const byte oddCipher[] =
|
||||||
|
{
|
||||||
|
0xb9,0xd7,0xcb,0x08,0xb0,0xe1,0x7b,0xa0,
|
||||||
|
0xc2
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/* test vector from "Recommendation for Block Cipher Modes of Operation"
|
||||||
|
* NIST Special Publication 800-38A */
|
||||||
|
const byte ctr192Key[] =
|
||||||
|
{
|
||||||
|
0x8e,0x73,0xb0,0xf7,0xda,0x0e,0x64,0x52,
|
||||||
|
0xc8,0x10,0xf3,0x2b,0x80,0x90,0x79,0xe5,
|
||||||
|
0x62,0xf8,0xea,0xd2,0x52,0x2c,0x6b,0x7b
|
||||||
|
};
|
||||||
|
|
||||||
|
const byte ctr192Iv[] =
|
||||||
|
{
|
||||||
|
0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,
|
||||||
|
0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
const byte ctr192Plain[] =
|
||||||
|
{
|
||||||
|
0x6b,0xc1,0xbe,0xe2,0x2e,0x40,0x9f,0x96,
|
||||||
|
0xe9,0x3d,0x7e,0x11,0x73,0x93,0x17,0x2a
|
||||||
|
};
|
||||||
|
|
||||||
|
const byte ctr192Cipher[] =
|
||||||
|
{
|
||||||
|
0x1a,0xbc,0x93,0x24,0x17,0x52,0x1c,0xa2,
|
||||||
|
0x4f,0x2b,0x04,0x59,0xfe,0x7e,0x6e,0x0b
|
||||||
|
};
|
||||||
|
|
||||||
|
/* test vector from "Recommendation for Block Cipher Modes of Operation"
|
||||||
|
* NIST Special Publication 800-38A */
|
||||||
|
const byte ctr256Key[] =
|
||||||
|
{
|
||||||
|
0x60,0x3d,0xeb,0x10,0x15,0xca,0x71,0xbe,
|
||||||
|
0x2b,0x73,0xae,0xf0,0x85,0x7d,0x77,0x81,
|
||||||
|
0x1f,0x35,0x2c,0x07,0x3b,0x61,0x08,0xd7,
|
||||||
|
0x2d,0x98,0x10,0xa3,0x09,0x14,0xdf,0xf4
|
||||||
|
};
|
||||||
|
|
||||||
|
const byte ctr256Iv[] =
|
||||||
|
{
|
||||||
|
0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,
|
||||||
|
0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
const byte ctr256Plain[] =
|
||||||
|
{
|
||||||
|
0x6b,0xc1,0xbe,0xe2,0x2e,0x40,0x9f,0x96,
|
||||||
|
0xe9,0x3d,0x7e,0x11,0x73,0x93,0x17,0x2a
|
||||||
|
};
|
||||||
|
|
||||||
|
const byte ctr256Cipher[] =
|
||||||
|
{
|
||||||
|
0x60,0x1e,0xc3,0x13,0x77,0x57,0x89,0xa5,
|
||||||
|
0xb7,0xa7,0xf5,0x04,0xbb,0xf3,0xd2,0x28
|
||||||
|
};
|
||||||
|
|
||||||
|
EVP_CIPHER_CTX en;
|
||||||
|
EVP_CIPHER_CTX de;
|
||||||
|
EVP_CIPHER_CTX *p_en;
|
||||||
|
EVP_CIPHER_CTX *p_de;
|
||||||
|
|
||||||
|
EVP_CIPHER_CTX_init(&en);
|
||||||
|
if (EVP_CipherInit(&en, EVP_aes_128_ctr(),
|
||||||
|
(unsigned char*)ctrKey, (unsigned char*)ctrIv, 0) == 0)
|
||||||
|
return -3300;
|
||||||
|
if (EVP_Cipher(&en, (byte*)cipherBuff, (byte*)ctrPlain, AES_BLOCK_SIZE*4) == 0)
|
||||||
|
return -3301;
|
||||||
|
EVP_CIPHER_CTX_init(&de);
|
||||||
|
if (EVP_CipherInit(&de, EVP_aes_128_ctr(),
|
||||||
|
(unsigned char*)ctrKey, (unsigned char*)ctrIv, 0) == 0)
|
||||||
|
return -3302;
|
||||||
|
|
||||||
|
if (EVP_Cipher(&de, (byte*)plainBuff, (byte*)cipherBuff, AES_BLOCK_SIZE*4) == 0)
|
||||||
|
return -3303;
|
||||||
|
|
||||||
|
if (XMEMCMP(cipherBuff, ctrCipher, AES_BLOCK_SIZE*4))
|
||||||
|
return -3304;
|
||||||
|
if (XMEMCMP(plainBuff, ctrPlain, AES_BLOCK_SIZE*4))
|
||||||
|
return -3305;
|
||||||
|
|
||||||
|
p_en = wolfSSL_EVP_CIPHER_CTX_new();
|
||||||
|
if(p_en == NULL)return -3390;
|
||||||
|
p_de = wolfSSL_EVP_CIPHER_CTX_new();
|
||||||
|
if(p_de == NULL)return -3391;
|
||||||
|
|
||||||
|
if (EVP_CipherInit(p_en, EVP_aes_128_ctr(),
|
||||||
|
(unsigned char*)ctrKey, (unsigned char*)ctrIv, 0) == 0)
|
||||||
|
return -3392;
|
||||||
|
if (EVP_Cipher(p_en, (byte*)cipherBuff, (byte*)ctrPlain, AES_BLOCK_SIZE*4) == 0)
|
||||||
|
return -3393;
|
||||||
|
if (EVP_CipherInit(p_de, EVP_aes_128_ctr(),
|
||||||
|
(unsigned char*)ctrKey, (unsigned char*)ctrIv, 0) == 0)
|
||||||
|
return -3394;
|
||||||
|
|
||||||
|
if (EVP_Cipher(p_de, (byte*)plainBuff, (byte*)cipherBuff, AES_BLOCK_SIZE*4) == 0)
|
||||||
|
return -3395;
|
||||||
|
|
||||||
|
wolfSSL_EVP_CIPHER_CTX_free(p_en);
|
||||||
|
wolfSSL_EVP_CIPHER_CTX_free(p_de);
|
||||||
|
|
||||||
|
if (XMEMCMP(cipherBuff, ctrCipher, AES_BLOCK_SIZE*4))
|
||||||
|
return -3396;
|
||||||
|
if (XMEMCMP(plainBuff, ctrPlain, AES_BLOCK_SIZE*4))
|
||||||
|
return -3397;
|
||||||
|
|
||||||
|
EVP_CIPHER_CTX_init(&en);
|
||||||
|
if (EVP_CipherInit(&en, EVP_aes_128_ctr(),
|
||||||
|
(unsigned char*)ctrKey, (unsigned char*)ctrIv, 0) == 0)
|
||||||
|
return -3306;
|
||||||
|
if (EVP_Cipher(&en, (byte*)cipherBuff, (byte*)ctrPlain, 9) == 0)
|
||||||
|
return -3307;
|
||||||
|
|
||||||
|
EVP_CIPHER_CTX_init(&de);
|
||||||
|
if (EVP_CipherInit(&de, EVP_aes_128_ctr(),
|
||||||
|
(unsigned char*)ctrKey, (unsigned char*)ctrIv, 0) == 0)
|
||||||
|
return -3308;
|
||||||
|
|
||||||
|
if (EVP_Cipher(&de, (byte*)plainBuff, (byte*)cipherBuff, 9) == 0)
|
||||||
|
return -3309;
|
||||||
|
|
||||||
|
if (XMEMCMP(plainBuff, ctrPlain, 9))
|
||||||
|
return -3310;
|
||||||
|
if (XMEMCMP(cipherBuff, ctrCipher, 9))
|
||||||
|
return -3311;
|
||||||
|
|
||||||
|
if (EVP_Cipher(&en, (byte*)cipherBuff, (byte*)ctrPlain, 9) == 0)
|
||||||
|
return -3312;
|
||||||
|
if (EVP_Cipher(&de, (byte*)plainBuff, (byte*)cipherBuff, 9) == 0)
|
||||||
|
return -3313;
|
||||||
|
|
||||||
|
if (XMEMCMP(plainBuff, ctrPlain, 9))
|
||||||
|
return -3314;
|
||||||
|
if (XMEMCMP(cipherBuff, oddCipher, 9))
|
||||||
|
return -3315;
|
||||||
|
|
||||||
|
EVP_CIPHER_CTX_init(&en);
|
||||||
|
if (EVP_CipherInit(&en, EVP_aes_192_ctr(),
|
||||||
|
(unsigned char*)ctr192Key, (unsigned char*)ctr192Iv, 0) == 0)
|
||||||
|
return -3316;
|
||||||
|
if (EVP_Cipher(&en, (byte*)cipherBuff, (byte*)ctr192Plain, AES_BLOCK_SIZE) == 0)
|
||||||
|
return -3317;
|
||||||
|
EVP_CIPHER_CTX_init(&de);
|
||||||
|
if (EVP_CipherInit(&de, EVP_aes_192_ctr(),
|
||||||
|
(unsigned char*)ctr192Key, (unsigned char*)ctr192Iv, 0) == 0)
|
||||||
|
return -3318;
|
||||||
|
|
||||||
|
XMEMSET(plainBuff, 0, sizeof(plainBuff));
|
||||||
|
if (EVP_Cipher(&de, (byte*)plainBuff, (byte*)cipherBuff, AES_BLOCK_SIZE) == 0)
|
||||||
|
return -3319;
|
||||||
|
|
||||||
|
if (XMEMCMP(plainBuff, ctr192Plain, sizeof(ctr192Plain)))
|
||||||
|
return -3320;
|
||||||
|
if (XMEMCMP(ctr192Cipher, cipherBuff, sizeof(ctr192Cipher)))
|
||||||
|
return -3321;
|
||||||
|
|
||||||
|
EVP_CIPHER_CTX_init(&en);
|
||||||
|
if (EVP_CipherInit(&en, EVP_aes_256_ctr(),
|
||||||
|
(unsigned char*)ctr256Key, (unsigned char*)ctr256Iv, 0) == 0)
|
||||||
|
return -3322;
|
||||||
|
if (EVP_Cipher(&en, (byte*)cipherBuff, (byte*)ctr256Plain, AES_BLOCK_SIZE) == 0)
|
||||||
|
return -3323;
|
||||||
|
EVP_CIPHER_CTX_init(&de);
|
||||||
|
if (EVP_CipherInit(&de, EVP_aes_256_ctr(),
|
||||||
|
(unsigned char*)ctr256Key, (unsigned char*)ctr256Iv, 0) == 0)
|
||||||
|
return -3324;
|
||||||
|
|
||||||
|
XMEMSET(plainBuff, 0, sizeof(plainBuff));
|
||||||
|
if (EVP_Cipher(&de, (byte*)plainBuff, (byte*)cipherBuff, AES_BLOCK_SIZE) == 0)
|
||||||
|
return -3325;
|
||||||
|
|
||||||
|
if (XMEMCMP(plainBuff, ctr256Plain, sizeof(ctr256Plain)))
|
||||||
|
return -3326;
|
||||||
|
if (XMEMCMP(ctr256Cipher, cipherBuff, sizeof(ctr256Cipher)))
|
||||||
|
return -3327;
|
||||||
|
}
|
||||||
|
#endif /* HAVE_AES_COUNTER */
|
||||||
|
|
||||||
|
{
|
||||||
|
/* EVP_CipherUpdate test */
|
||||||
|
|
||||||
|
|
||||||
|
const byte cbcPlain[] =
|
||||||
|
{
|
||||||
|
0x6b,0xc1,0xbe,0xe2,0x2e,0x40,0x9f,0x96,
|
||||||
|
0xe9,0x3d,0x7e,0x11,0x73,0x93,0x17,0x2a,
|
||||||
|
0xae,0x2d,0x8a,0x57,0x1e,0x03,0xac,0x9c,
|
||||||
|
0x9e,0xb7,0x6f,0xac,0x45,0xaf,0x8e,0x51,
|
||||||
|
0x30,0xc8,0x1c,0x46,0xa3,0x5c,0xe4,0x11,
|
||||||
|
0xe5,0xfb,0xc1,0x19,0x1a,0x0a,0x52,0xef,
|
||||||
|
0xf6,0x9f,0x24,0x45,0xdf,0x4f,0x9b,0x17,
|
||||||
|
0xad,0x2b,0x41,0x7b,0xe6,0x6c,0x37,0x10
|
||||||
|
};
|
||||||
|
|
||||||
|
byte key[] = "0123456789abcdef "; /* align */
|
||||||
|
byte iv[] = "1234567890abcdef "; /* align */
|
||||||
|
|
||||||
|
byte cipher[AES_BLOCK_SIZE * 4];
|
||||||
|
byte plain [AES_BLOCK_SIZE * 4];
|
||||||
|
EVP_CIPHER_CTX en;
|
||||||
|
EVP_CIPHER_CTX de;
|
||||||
|
int outlen ;
|
||||||
|
int total = 0;
|
||||||
|
|
||||||
|
EVP_CIPHER_CTX_init(&en);
|
||||||
|
if (EVP_CipherInit(&en, EVP_aes_128_cbc(),
|
||||||
|
(unsigned char*)key, (unsigned char*)iv, 1) == 0)
|
||||||
|
return -3401;
|
||||||
|
if (EVP_CipherUpdate(&en, (byte*)cipher, &outlen, (byte*)cbcPlain, 9) == 0)
|
||||||
|
return -3402;
|
||||||
|
if(outlen != 0)
|
||||||
|
return -3403;
|
||||||
|
total += outlen;
|
||||||
|
|
||||||
|
if (EVP_CipherUpdate(&en, (byte*)&cipher[total], &outlen, (byte*)&cbcPlain[9] , 9) == 0)
|
||||||
|
return -3404;
|
||||||
|
if(outlen != 16)
|
||||||
|
return -3405;
|
||||||
|
total += outlen;
|
||||||
|
|
||||||
|
if (EVP_CipherFinal(&en, (byte*)&cipher[total], &outlen) == 0)
|
||||||
|
return -3406;
|
||||||
|
if(outlen != 16)
|
||||||
|
return -3407;
|
||||||
|
total += outlen;
|
||||||
|
if(total != 32)
|
||||||
|
return 3408;
|
||||||
|
|
||||||
|
total = 0;
|
||||||
|
EVP_CIPHER_CTX_init(&de);
|
||||||
|
if (EVP_CipherInit(&de, EVP_aes_128_cbc(),
|
||||||
|
(unsigned char*)key, (unsigned char*)iv, 0) == 0)
|
||||||
|
return -3420;
|
||||||
|
|
||||||
|
if (EVP_CipherUpdate(&de, (byte*)plain, &outlen, (byte*)cipher, 6) == 0)
|
||||||
|
return -3421;
|
||||||
|
if(outlen != 0)
|
||||||
|
return -3422;
|
||||||
|
total += outlen;
|
||||||
|
|
||||||
|
if (EVP_CipherUpdate(&de, (byte*)&plain[total], &outlen, (byte*)&cipher[6], 12) == 0)
|
||||||
|
return -3423;
|
||||||
|
if(outlen != 0)
|
||||||
|
total += outlen;
|
||||||
|
|
||||||
|
if (EVP_CipherUpdate(&de, (byte*)&plain[total], &outlen, (byte*)&cipher[6+12], 14) == 0)
|
||||||
|
return -3423;
|
||||||
|
if(outlen != 16)
|
||||||
|
return -3424;
|
||||||
|
total += outlen;
|
||||||
|
|
||||||
|
if (EVP_CipherFinal(&de, (byte*)&plain[total], &outlen) == 0)
|
||||||
|
return -3425;
|
||||||
|
if(outlen != 2)
|
||||||
|
return -3426;
|
||||||
|
total += outlen;
|
||||||
|
|
||||||
|
if(total != 18)
|
||||||
|
return 3427;
|
||||||
|
|
||||||
|
if (XMEMCMP(plain, cbcPlain, 18))
|
||||||
|
return -3428;
|
||||||
|
|
||||||
|
}
|
||||||
|
#endif /* ifndef NO_AES */
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#endif /* OPENSSL_EXTRA */
|
#endif /* OPENSSL_EXTRA */
|
||||||
|
|
||||||
|
|
||||||
@@ -7094,6 +7519,7 @@ int pbkdf2_test(void)
|
|||||||
return -102;
|
return -102;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -8838,7 +9264,7 @@ int ed25519_test(void)
|
|||||||
|
|
||||||
|
|
||||||
#if defined(WOLFSSL_CMAC) && !defined(NO_AES)
|
#if defined(WOLFSSL_CMAC) && !defined(NO_AES)
|
||||||
|
|
||||||
typedef struct CMAC_Test_Case {
|
typedef struct CMAC_Test_Case {
|
||||||
int type;
|
int type;
|
||||||
int partial;
|
int partial;
|
||||||
|
|||||||
@@ -1242,7 +1242,9 @@ enum BIO_TYPE {
|
|||||||
BIO_BUFFER = 1,
|
BIO_BUFFER = 1,
|
||||||
BIO_SOCKET = 2,
|
BIO_SOCKET = 2,
|
||||||
BIO_SSL = 3,
|
BIO_SSL = 3,
|
||||||
BIO_MEMORY = 4
|
BIO_MEMORY = 4,
|
||||||
|
BIO_BIO = 5,
|
||||||
|
BIO_FILE = 6
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -1254,15 +1256,24 @@ struct WOLFSSL_BIO_METHOD {
|
|||||||
|
|
||||||
/* wolfSSL BIO type */
|
/* wolfSSL BIO type */
|
||||||
struct WOLFSSL_BIO {
|
struct WOLFSSL_BIO {
|
||||||
byte type; /* method type */
|
|
||||||
byte close; /* close flag */
|
|
||||||
byte eof; /* eof flag */
|
|
||||||
WOLFSSL* ssl; /* possible associated ssl */
|
WOLFSSL* ssl; /* possible associated ssl */
|
||||||
byte* mem; /* memory buffer */
|
#ifndef NO_FILESYSTEM
|
||||||
int memLen; /* memory buffer length */
|
XFILE file;
|
||||||
int fd; /* possible file descriptor */
|
#endif
|
||||||
WOLFSSL_BIO* prev; /* previous in chain */
|
WOLFSSL_BIO* prev; /* previous in chain */
|
||||||
WOLFSSL_BIO* next; /* next in chain */
|
WOLFSSL_BIO* next; /* next in chain */
|
||||||
|
WOLFSSL_BIO* pair; /* BIO paired with */
|
||||||
|
void* heap; /* user heap hint */
|
||||||
|
byte* mem; /* memory buffer */
|
||||||
|
int wrSz; /* write buffer size (mem) */
|
||||||
|
int wrIdx; /* current index for write buffer */
|
||||||
|
int rdIdx; /* current read index */
|
||||||
|
int readRq; /* read request */
|
||||||
|
int memLen; /* memory buffer length */
|
||||||
|
int fd; /* possible file descriptor */
|
||||||
|
int eof; /* eof flag */
|
||||||
|
byte type; /* method type */
|
||||||
|
byte close; /* close flag */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -1994,6 +2005,9 @@ struct WOLFSSL_CTX {
|
|||||||
#if defined(OPENSSL_EXTRA) || defined(HAVE_WEBSERVER)
|
#if defined(OPENSSL_EXTRA) || defined(HAVE_WEBSERVER)
|
||||||
pem_password_cb passwd_cb;
|
pem_password_cb passwd_cb;
|
||||||
void* userdata;
|
void* userdata;
|
||||||
|
WOLFSSL_X509_STORE x509_store; /* points to ctx->cm */
|
||||||
|
byte readAhead;
|
||||||
|
void* userPRFArg; /* passed to prf callback */
|
||||||
#endif /* OPENSSL_EXTRA */
|
#endif /* OPENSSL_EXTRA */
|
||||||
#ifdef HAVE_STUNNEL
|
#ifdef HAVE_STUNNEL
|
||||||
void* ex_data[MAX_EX_DATA];
|
void* ex_data[MAX_EX_DATA];
|
||||||
@@ -2371,6 +2385,9 @@ typedef struct Options {
|
|||||||
wc_psk_server_callback server_psk_cb;
|
wc_psk_server_callback server_psk_cb;
|
||||||
word16 havePSK:1; /* psk key set by user */
|
word16 havePSK:1; /* psk key set by user */
|
||||||
#endif /* NO_PSK */
|
#endif /* NO_PSK */
|
||||||
|
#ifdef OPENSSL_EXTRA
|
||||||
|
unsigned long mask; /* store SSL_OP_ flags */
|
||||||
|
#endif
|
||||||
|
|
||||||
/* on/off or small bit flags, optimize layout */
|
/* on/off or small bit flags, optimize layout */
|
||||||
word16 sendVerify:2; /* false = 0, true = 1, sendBlank = 2 */
|
word16 sendVerify:2; /* false = 0, true = 1, sendBlank = 2 */
|
||||||
@@ -2495,6 +2512,7 @@ struct WOLFSSL_STACK {
|
|||||||
union {
|
union {
|
||||||
WOLFSSL_X509* x509;
|
WOLFSSL_X509* x509;
|
||||||
WOLFSSL_BIO* bio;
|
WOLFSSL_BIO* bio;
|
||||||
|
WOLFSSL_ASN1_OBJECT* obj;
|
||||||
} data;
|
} data;
|
||||||
WOLFSSL_STACK* next;
|
WOLFSSL_STACK* next;
|
||||||
};
|
};
|
||||||
@@ -2558,9 +2576,21 @@ struct WOLFSSL_X509 {
|
|||||||
void* heap; /* heap hint */
|
void* heap; /* heap hint */
|
||||||
byte dynamicMemory; /* dynamic memory flag */
|
byte dynamicMemory; /* dynamic memory flag */
|
||||||
byte isCa;
|
byte isCa;
|
||||||
|
#ifdef WOLFSSL_CERT_EXT
|
||||||
|
char certPolicies[MAX_CERTPOL_NB][MAX_CERTPOL_SZ];
|
||||||
|
int certPoliciesNb;
|
||||||
|
#endif /* WOLFSSL_CERT_EXT */
|
||||||
#ifdef OPENSSL_EXTRA
|
#ifdef OPENSSL_EXTRA
|
||||||
word32 pathLength;
|
word32 pathLength;
|
||||||
word16 keyUsage;
|
word16 keyUsage;
|
||||||
|
byte CRLdistSet;
|
||||||
|
byte CRLdistCrit;
|
||||||
|
byte* CRLInfo;
|
||||||
|
int CRLInfoSz;
|
||||||
|
byte authInfoSet;
|
||||||
|
byte authInfoCrit;
|
||||||
|
byte* authInfo;
|
||||||
|
int authInfoSz;
|
||||||
byte basicConstSet;
|
byte basicConstSet;
|
||||||
byte basicConstCrit;
|
byte basicConstCrit;
|
||||||
byte basicConstPlSet;
|
byte basicConstPlSet;
|
||||||
@@ -2576,6 +2606,10 @@ struct WOLFSSL_X509 {
|
|||||||
word32 subjKeyIdSz;
|
word32 subjKeyIdSz;
|
||||||
byte keyUsageSet;
|
byte keyUsageSet;
|
||||||
byte keyUsageCrit;
|
byte keyUsageCrit;
|
||||||
|
byte extKeyUsageCrit;
|
||||||
|
byte* extKeyUsageSrc;
|
||||||
|
word32 extKeyUsageSz;
|
||||||
|
word32 extKeyUsageCount;
|
||||||
#endif /* OPENSSL_EXTRA */
|
#endif /* OPENSSL_EXTRA */
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -2725,6 +2759,11 @@ struct WOLFSSL {
|
|||||||
#ifdef OPENSSL_EXTRA
|
#ifdef OPENSSL_EXTRA
|
||||||
WOLFSSL_BIO* biord; /* socket bio read to free/close */
|
WOLFSSL_BIO* biord; /* socket bio read to free/close */
|
||||||
WOLFSSL_BIO* biowr; /* socket bio write to free/close */
|
WOLFSSL_BIO* biowr; /* socket bio write to free/close */
|
||||||
|
unsigned long peerVerifyRet;
|
||||||
|
byte readAhead;
|
||||||
|
#ifdef HAVE_PK_CALLBACKS
|
||||||
|
void* loggingCtx; /* logging callback argument */
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#ifndef NO_RSA
|
#ifndef NO_RSA
|
||||||
RsaKey* peerRsaKey;
|
RsaKey* peerRsaKey;
|
||||||
|
|||||||
73
wolfssl/openssl/aes.h
Normal file
73
wolfssl/openssl/aes.h
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
/* aes.h
|
||||||
|
*
|
||||||
|
* Copyright (C) 2006-2016 wolfSSL Inc.
|
||||||
|
*
|
||||||
|
* This file is part of wolfSSL.
|
||||||
|
*
|
||||||
|
* 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-1335, USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* aes.h defines mini des openssl compatibility layer
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef WOLFSSL_AES_H_
|
||||||
|
#define WOLFSSL_AES_H_
|
||||||
|
|
||||||
|
#include <wolfssl/wolfcrypt/settings.h>
|
||||||
|
|
||||||
|
#ifndef NO_AES
|
||||||
|
#ifdef WOLFSSL_AES_DIRECT
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
typedef Aes AES_KEY;
|
||||||
|
|
||||||
|
WOLFSSL_API void wolfSSL_AES_set_encrypt_key
|
||||||
|
(const unsigned char *, const int bits, AES_KEY *);
|
||||||
|
WOLFSSL_API void wolfSSL_AES_set_decrypt_key
|
||||||
|
(const unsigned char *, const int bits, AES_KEY *);
|
||||||
|
WOLFSSL_API void wolfSSL_AES_encrypt
|
||||||
|
(const unsigned char* input, unsigned char* output, AES_KEY *);
|
||||||
|
WOLFSSL_API void wolfSSL_AES_decrypt
|
||||||
|
(const unsigned char* input, unsigned char* output, AES_KEY *);
|
||||||
|
|
||||||
|
#define AES_set_encrypt_key wolfSSL_AES_set_encrypt_key
|
||||||
|
#define AES_set_decrypt_key wolfSSL_AES_set_decrypt_key
|
||||||
|
#define AES_encrypt wolfSSL_AES_encrypt
|
||||||
|
#define AES_decrypt wolfSSL_AES_decrypt
|
||||||
|
|
||||||
|
#define wolfSSL_AES_set_encrypt_key(key, bits, aes) \
|
||||||
|
wc_AesSetKey(aes, key, ((bits)/8), NULL, AES_ENCRYPTION)
|
||||||
|
#define wolfSSL_AES_set_decrypt_key(key, bits, aes) \
|
||||||
|
wc_AesSetKey(aes, key, ((bits)/8), NULL, AES_DECRYPTION)
|
||||||
|
|
||||||
|
#define wolfSSL_AES_encrypt(in, out, aes) wc_AesEncryptDirect(aes, out, in)
|
||||||
|
#define wolfSSL_AES_decrypt(in, out, aes) wc_AesDecryptDirect(aes, out, in)
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* HAVE_AES_DIRECT */
|
||||||
|
#endif /* NO_AES */
|
||||||
|
|
||||||
|
#endif /* WOLFSSL_DES_H_ */
|
||||||
@@ -35,7 +35,8 @@ WOLFSSL_API int wolfSSL_BN_sub(WOLFSSL_BIGNUM*, const WOLFSSL_BIGNUM*,
|
|||||||
const WOLFSSL_BIGNUM*);
|
const WOLFSSL_BIGNUM*);
|
||||||
WOLFSSL_API int wolfSSL_BN_mod(WOLFSSL_BIGNUM*, const WOLFSSL_BIGNUM*,
|
WOLFSSL_API int wolfSSL_BN_mod(WOLFSSL_BIGNUM*, const WOLFSSL_BIGNUM*,
|
||||||
const WOLFSSL_BIGNUM*, const WOLFSSL_BN_CTX*);
|
const WOLFSSL_BIGNUM*, const WOLFSSL_BN_CTX*);
|
||||||
|
WOLFSSL_API int wolfSSL_BN_mod_exp(WOLFSSL_BIGNUM *r, const WOLFSSL_BIGNUM *a,
|
||||||
|
const WOLFSSL_BIGNUM *p, const WOLFSSL_BIGNUM *m, WOLFSSL_BN_CTX *ctx);
|
||||||
WOLFSSL_API const WOLFSSL_BIGNUM* wolfSSL_BN_value_one(void);
|
WOLFSSL_API const WOLFSSL_BIGNUM* wolfSSL_BN_value_one(void);
|
||||||
|
|
||||||
|
|
||||||
@@ -109,6 +110,7 @@ typedef WOLFSSL_BN_GENCB BN_GENCB;
|
|||||||
#define BN_bin2bn wolfSSL_BN_bin2bn
|
#define BN_bin2bn wolfSSL_BN_bin2bn
|
||||||
|
|
||||||
#define BN_mod wolfSSL_BN_mod
|
#define BN_mod wolfSSL_BN_mod
|
||||||
|
#define BN_mod_exp wolfSSL_BN_mod_exp
|
||||||
#define BN_sub wolfSSL_BN_sub
|
#define BN_sub wolfSSL_BN_sub
|
||||||
#define BN_value_one wolfSSL_BN_value_one
|
#define BN_value_one wolfSSL_BN_value_one
|
||||||
|
|
||||||
@@ -148,4 +150,3 @@ typedef WOLFSSL_BN_GENCB BN_GENCB;
|
|||||||
|
|
||||||
|
|
||||||
#endif /* WOLFSSL__H_ */
|
#endif /* WOLFSSL__H_ */
|
||||||
|
|
||||||
|
|||||||
@@ -53,9 +53,9 @@ enum {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
WOLFSSL_API void wolfSSL_DES_set_key(WOLFSSL_const_DES_cblock* myDes,
|
WOLFSSL_API int wolfSSL_DES_set_key(WOLFSSL_const_DES_cblock* myDes,
|
||||||
WOLFSSL_DES_key_schedule* key);
|
WOLFSSL_DES_key_schedule* key);
|
||||||
WOLFSSL_API void wolfSSL_DES_set_key_checked(WOLFSSL_const_DES_cblock* myDes,
|
WOLFSSL_API int wolfSSL_DES_set_key_checked(WOLFSSL_const_DES_cblock* myDes,
|
||||||
WOLFSSL_DES_key_schedule* key);
|
WOLFSSL_DES_key_schedule* key);
|
||||||
WOLFSSL_API void wolfSSL_DES_set_key_unchecked(WOLFSSL_const_DES_cblock*,
|
WOLFSSL_API void wolfSSL_DES_set_key_unchecked(WOLFSSL_const_DES_cblock*,
|
||||||
WOLFSSL_DES_key_schedule*);
|
WOLFSSL_DES_key_schedule*);
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* evp.h defines mini evp openssl compatibility layer
|
/* evp.h defines mini evp openssl compatibility layer
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -47,13 +47,14 @@
|
|||||||
#include <wolfssl/wolfcrypt/aes.h>
|
#include <wolfssl/wolfcrypt/aes.h>
|
||||||
#include <wolfssl/wolfcrypt/des3.h>
|
#include <wolfssl/wolfcrypt/des3.h>
|
||||||
#include <wolfssl/wolfcrypt/arc4.h>
|
#include <wolfssl/wolfcrypt/arc4.h>
|
||||||
|
#ifdef HAVE_IDEA
|
||||||
|
#include <wolfssl/wolfcrypt/idea.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef char WOLFSSL_EVP_MD;
|
|
||||||
typedef char WOLFSSL_EVP_CIPHER;
|
typedef char WOLFSSL_EVP_CIPHER;
|
||||||
|
|
||||||
#ifndef NO_MD5
|
#ifndef NO_MD5
|
||||||
@@ -66,12 +67,17 @@ WOLFSSL_API const WOLFSSL_EVP_MD* wolfSSL_EVP_sha384(void);
|
|||||||
WOLFSSL_API const WOLFSSL_EVP_MD* wolfSSL_EVP_sha512(void);
|
WOLFSSL_API const WOLFSSL_EVP_MD* wolfSSL_EVP_sha512(void);
|
||||||
WOLFSSL_API const WOLFSSL_EVP_MD* wolfSSL_EVP_ripemd160(void);
|
WOLFSSL_API const WOLFSSL_EVP_MD* wolfSSL_EVP_ripemd160(void);
|
||||||
|
|
||||||
|
WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_aes_128_ecb(void);
|
||||||
|
WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_aes_192_ecb(void);
|
||||||
|
WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_aes_256_ecb(void);
|
||||||
WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_aes_128_cbc(void);
|
WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_aes_128_cbc(void);
|
||||||
WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_aes_192_cbc(void);
|
WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_aes_192_cbc(void);
|
||||||
WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_aes_256_cbc(void);
|
WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_aes_256_cbc(void);
|
||||||
WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_aes_128_ctr(void);
|
WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_aes_128_ctr(void);
|
||||||
WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_aes_192_ctr(void);
|
WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_aes_192_ctr(void);
|
||||||
WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_aes_256_ctr(void);
|
WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_aes_256_ctr(void);
|
||||||
|
WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_des_ecb(void);
|
||||||
|
WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_des_ede3_ecb(void);
|
||||||
WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_des_cbc(void);
|
WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_des_cbc(void);
|
||||||
WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_des_ede3_cbc(void);
|
WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_des_ede3_cbc(void);
|
||||||
WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_rc4(void);
|
WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_rc4(void);
|
||||||
@@ -128,39 +134,65 @@ enum {
|
|||||||
AES_128_CTR_TYPE = 4,
|
AES_128_CTR_TYPE = 4,
|
||||||
AES_192_CTR_TYPE = 5,
|
AES_192_CTR_TYPE = 5,
|
||||||
AES_256_CTR_TYPE = 6,
|
AES_256_CTR_TYPE = 6,
|
||||||
DES_CBC_TYPE = 7,
|
AES_128_ECB_TYPE = 7,
|
||||||
DES_EDE3_CBC_TYPE = 8,
|
AES_192_ECB_TYPE = 8,
|
||||||
ARC4_TYPE = 9,
|
AES_256_ECB_TYPE = 9,
|
||||||
NULL_CIPHER_TYPE = 10,
|
DES_CBC_TYPE = 10,
|
||||||
EVP_PKEY_RSA = 11,
|
DES_ECB_TYPE = 11,
|
||||||
EVP_PKEY_DSA = 12,
|
DES_EDE3_CBC_TYPE = 12,
|
||||||
EVP_PKEY_EC = 13,
|
DES_EDE3_ECB_TYPE = 13,
|
||||||
IDEA_CBC_TYPE = 14,
|
ARC4_TYPE = 14,
|
||||||
|
NULL_CIPHER_TYPE = 15,
|
||||||
|
EVP_PKEY_RSA = 16,
|
||||||
|
EVP_PKEY_DSA = 17,
|
||||||
|
EVP_PKEY_EC = 18,
|
||||||
|
IDEA_CBC_TYPE = 19,
|
||||||
NID_sha1 = 64,
|
NID_sha1 = 64,
|
||||||
NID_md2 = 3,
|
NID_md2 = 3,
|
||||||
NID_md5 = 4
|
NID_md5 = 4
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define WOLFSSL_EVP_BUF_SIZE 16
|
||||||
typedef struct WOLFSSL_EVP_CIPHER_CTX {
|
typedef struct WOLFSSL_EVP_CIPHER_CTX {
|
||||||
int keyLen; /* user may set for variable */
|
int keyLen; /* user may set for variable */
|
||||||
|
int block_size;
|
||||||
|
unsigned long flags;
|
||||||
unsigned char enc; /* if encrypt side, then true */
|
unsigned char enc; /* if encrypt side, then true */
|
||||||
unsigned char cipherType;
|
unsigned char cipherType;
|
||||||
#ifndef NO_AES
|
#ifndef NO_AES
|
||||||
unsigned char iv[AES_BLOCK_SIZE]; /* working iv pointer into cipher */
|
/* working iv pointer into cipher */
|
||||||
|
ALIGN16 unsigned char iv[AES_BLOCK_SIZE];
|
||||||
#elif !defined(NO_DES3)
|
#elif !defined(NO_DES3)
|
||||||
unsigned char iv[DES_BLOCK_SIZE]; /* working iv pointer into cipher */
|
/* working iv pointer into cipher */
|
||||||
|
ALIGN16 unsigned char iv[DES_BLOCK_SIZE];
|
||||||
#endif
|
#endif
|
||||||
WOLFSSL_Cipher cipher;
|
WOLFSSL_Cipher cipher;
|
||||||
|
ALIGN16 byte buf[WOLFSSL_EVP_BUF_SIZE];
|
||||||
|
int bufUsed;
|
||||||
|
ALIGN16 byte lastBlock[WOLFSSL_EVP_BUF_SIZE];
|
||||||
|
int lastUsed;
|
||||||
} WOLFSSL_EVP_CIPHER_CTX;
|
} WOLFSSL_EVP_CIPHER_CTX;
|
||||||
|
|
||||||
|
typedef int WOLFSSL_ENGINE ;
|
||||||
|
typedef WOLFSSL_ENGINE ENGINE;
|
||||||
|
|
||||||
|
WOLFSSL_API void wolfSSL_EVP_init(void);
|
||||||
WOLFSSL_API int wolfSSL_EVP_MD_size(const WOLFSSL_EVP_MD* md);
|
WOLFSSL_API int wolfSSL_EVP_MD_size(const WOLFSSL_EVP_MD* md);
|
||||||
|
WOLFSSL_API int wolfSSL_EVP_MD_type(const WOLFSSL_EVP_MD *md);
|
||||||
|
|
||||||
|
WOLFSSL_API WOLFSSL_EVP_MD_CTX *wolfSSL_EVP_MD_CTX_new (void);
|
||||||
|
WOLFSSL_API void wolfSSL_EVP_MD_CTX_free(WOLFSSL_EVP_MD_CTX* ctx);
|
||||||
WOLFSSL_API void wolfSSL_EVP_MD_CTX_init(WOLFSSL_EVP_MD_CTX* ctx);
|
WOLFSSL_API void wolfSSL_EVP_MD_CTX_init(WOLFSSL_EVP_MD_CTX* ctx);
|
||||||
WOLFSSL_API int wolfSSL_EVP_MD_CTX_cleanup(WOLFSSL_EVP_MD_CTX* ctx);
|
WOLFSSL_API int wolfSSL_EVP_MD_CTX_cleanup(WOLFSSL_EVP_MD_CTX* ctx);
|
||||||
|
WOLFSSL_API const WOLFSSL_EVP_MD *wolfSSL_EVP_MD_CTX_md(const WOLFSSL_EVP_MD_CTX *ctx);
|
||||||
|
WOLFSSL_API const WOLFSSL_EVP_CIPHER *wolfSSL_EVP_get_cipherbyname(const char *name);
|
||||||
|
WOLFSSL_API const WOLFSSL_EVP_MD *wolfSSL_EVP_get_digestbyname(const char *name);
|
||||||
|
|
||||||
WOLFSSL_API int wolfSSL_EVP_DigestInit(WOLFSSL_EVP_MD_CTX* ctx,
|
WOLFSSL_API int wolfSSL_EVP_DigestInit(WOLFSSL_EVP_MD_CTX* ctx,
|
||||||
const WOLFSSL_EVP_MD* type);
|
const WOLFSSL_EVP_MD* type);
|
||||||
|
WOLFSSL_API int wolfSSL_EVP_DigestInit_ex(WOLFSSL_EVP_MD_CTX* ctx,
|
||||||
|
const WOLFSSL_EVP_MD* type,
|
||||||
|
WOLFSSL_ENGINE *impl);
|
||||||
WOLFSSL_API int wolfSSL_EVP_DigestUpdate(WOLFSSL_EVP_MD_CTX* ctx, const void* data,
|
WOLFSSL_API int wolfSSL_EVP_DigestUpdate(WOLFSSL_EVP_MD_CTX* ctx, const void* data,
|
||||||
unsigned long sz);
|
unsigned long sz);
|
||||||
WOLFSSL_API int wolfSSL_EVP_DigestFinal(WOLFSSL_EVP_MD_CTX* ctx, unsigned char* md,
|
WOLFSSL_API int wolfSSL_EVP_DigestFinal(WOLFSSL_EVP_MD_CTX* ctx, unsigned char* md,
|
||||||
@@ -184,6 +216,43 @@ WOLFSSL_API int wolfSSL_EVP_CipherInit(WOLFSSL_EVP_CIPHER_CTX* ctx,
|
|||||||
const WOLFSSL_EVP_CIPHER* type,
|
const WOLFSSL_EVP_CIPHER* type,
|
||||||
unsigned char* key, unsigned char* iv,
|
unsigned char* key, unsigned char* iv,
|
||||||
int enc);
|
int enc);
|
||||||
|
WOLFSSL_API int wolfSSL_EVP_CipherInit_ex(WOLFSSL_EVP_CIPHER_CTX* ctx,
|
||||||
|
const WOLFSSL_EVP_CIPHER* type,
|
||||||
|
WOLFSSL_ENGINE *impl,
|
||||||
|
unsigned char* key, unsigned char* iv,
|
||||||
|
int enc);
|
||||||
|
WOLFSSL_API int wolfSSL_EVP_EncryptInit(WOLFSSL_EVP_CIPHER_CTX* ctx,
|
||||||
|
const WOLFSSL_EVP_CIPHER* type,
|
||||||
|
unsigned char* key, unsigned char* iv);
|
||||||
|
WOLFSSL_API int wolfSSL_EVP_EncryptInit_ex(WOLFSSL_EVP_CIPHER_CTX* ctx,
|
||||||
|
const WOLFSSL_EVP_CIPHER* type,
|
||||||
|
WOLFSSL_ENGINE *impl,
|
||||||
|
unsigned char* key, unsigned char* iv);
|
||||||
|
WOLFSSL_API int wolfSSL_EVP_DecryptInit(WOLFSSL_EVP_CIPHER_CTX* ctx,
|
||||||
|
const WOLFSSL_EVP_CIPHER* type,
|
||||||
|
unsigned char* key, unsigned char* iv);
|
||||||
|
WOLFSSL_API int wolfSSL_EVP_DecryptInit_ex(WOLFSSL_EVP_CIPHER_CTX* ctx,
|
||||||
|
const WOLFSSL_EVP_CIPHER* type,
|
||||||
|
WOLFSSL_ENGINE *impl,
|
||||||
|
unsigned char* key, unsigned char* iv);
|
||||||
|
WOLFSSL_API int wolfSSL_EVP_CipherUpdate(WOLFSSL_EVP_CIPHER_CTX *ctx,
|
||||||
|
unsigned char *out, int *outl,
|
||||||
|
const unsigned char *in, int inl);
|
||||||
|
WOLFSSL_API int wolfSSL_EVP_CipherFinal(WOLFSSL_EVP_CIPHER_CTX *ctx,
|
||||||
|
unsigned char *out, int *outl);
|
||||||
|
WOLFSSL_API int wolfSSL_EVP_CipherFinal_ex(WOLFSSL_EVP_CIPHER_CTX *ctx,
|
||||||
|
unsigned char *out, int *outl, int enc);
|
||||||
|
WOLFSSL_API int wolfSSL_EVP_EncryptFinal(WOLFSSL_EVP_CIPHER_CTX *ctx,
|
||||||
|
unsigned char *out, int *outl);
|
||||||
|
WOLFSSL_API int wolfSSL_EVP_EncryptFinal_ex(WOLFSSL_EVP_CIPHER_CTX *ctx,
|
||||||
|
unsigned char *out, int *outl);
|
||||||
|
WOLFSSL_API int wolfSSL_EVP_DecryptFinal(WOLFSSL_EVP_CIPHER_CTX *ctx,
|
||||||
|
unsigned char *out, int *outl);
|
||||||
|
WOLFSSL_API int wolfSSL_EVP_DecryptFinal_ex(WOLFSSL_EVP_CIPHER_CTX *ctx,
|
||||||
|
unsigned char *out, int *outl);
|
||||||
|
|
||||||
|
WOLFSSL_API WOLFSSL_EVP_CIPHER_CTX *wolfSSL_EVP_CIPHER_CTX_new(void);
|
||||||
|
WOLFSSL_API void wolfSSL_EVP_CIPHER_CTX_free(WOLFSSL_EVP_CIPHER_CTX *ctx);
|
||||||
WOLFSSL_API int wolfSSL_EVP_CIPHER_CTX_key_length(WOLFSSL_EVP_CIPHER_CTX* ctx);
|
WOLFSSL_API int wolfSSL_EVP_CIPHER_CTX_key_length(WOLFSSL_EVP_CIPHER_CTX* ctx);
|
||||||
WOLFSSL_API int wolfSSL_EVP_CIPHER_CTX_set_key_length(WOLFSSL_EVP_CIPHER_CTX* ctx,
|
WOLFSSL_API int wolfSSL_EVP_CIPHER_CTX_set_key_length(WOLFSSL_EVP_CIPHER_CTX* ctx,
|
||||||
int keylen);
|
int keylen);
|
||||||
@@ -209,6 +278,35 @@ WOLFSSL_API void wolfSSL_aes_ctr_iv(WOLFSSL_EVP_CIPHER_CTX* ctx, int doset,
|
|||||||
WOLFSSL_API int wolfSSL_StoreExternalIV(WOLFSSL_EVP_CIPHER_CTX* ctx);
|
WOLFSSL_API int wolfSSL_StoreExternalIV(WOLFSSL_EVP_CIPHER_CTX* ctx);
|
||||||
WOLFSSL_API int wolfSSL_SetInternalIV(WOLFSSL_EVP_CIPHER_CTX* ctx);
|
WOLFSSL_API int wolfSSL_SetInternalIV(WOLFSSL_EVP_CIPHER_CTX* ctx);
|
||||||
|
|
||||||
|
WOLFSSL_API int wolfSSL_EVP_CIPHER_CTX_block_size(const WOLFSSL_EVP_CIPHER_CTX *ctx);
|
||||||
|
WOLFSSL_API int wolfSSL_EVP_CIPHER_block_size(const WOLFSSL_EVP_CIPHER *cipher);
|
||||||
|
WOLFSSL_API unsigned long WOLFSSL_EVP_CIPHER_mode(const WOLFSSL_EVP_CIPHER *cipher);
|
||||||
|
WOLFSSL_API unsigned long WOLFSSL_CIPHER_mode(const WOLFSSL_EVP_CIPHER *cipher);
|
||||||
|
WOLFSSL_API unsigned long wolfSSL_EVP_CIPHER_flags(const WOLFSSL_EVP_CIPHER *cipher);
|
||||||
|
WOLFSSL_API void wolfSSL_EVP_CIPHER_CTX_set_flags(WOLFSSL_EVP_CIPHER_CTX *ctx, int flags);
|
||||||
|
WOLFSSL_API unsigned long wolfSSL_EVP_CIPHER_CTX_mode(const WOLFSSL_EVP_CIPHER_CTX *ctx);
|
||||||
|
WOLFSSL_API int wolfSSL_EVP_CIPHER_CTX_set_padding(WOLFSSL_EVP_CIPHER_CTX *c, int pad);
|
||||||
|
WOLFSSL_API int wolfSSL_EVP_add_digest(const WOLFSSL_EVP_MD *digest);
|
||||||
|
|
||||||
|
#define EVP_CIPH_STREAM_CIPHER WOLFSSL_EVP_CIPH_STREAM_CIPHER
|
||||||
|
#define EVP_CIPH_ECB_MODE WOLFSSL_EVP_CIPH_ECB_MODE
|
||||||
|
#define EVP_CIPH_CBC_MODE WOLFSSL_EVP_CIPH_CBC_MODE
|
||||||
|
#define EVP_CIPH_CFB_MODE WOLFSSL_EVP_CIPH_CFB_MODE
|
||||||
|
#define EVP_CIPH_OFB_MODE WOLFSSL_EVP_CIPH_OFB_MODE
|
||||||
|
#define EVP_CIPH_CTR_MODE WOLFSSL_EVP_CIPH_CTR_MODE
|
||||||
|
#define EVP_CIPH_GCM_MODE WOLFSSL_EVP_CIPH_GCM_MODE
|
||||||
|
#define EVP_CIPH_CCM_MODE WOLFSSL_EVP_CIPH_CCM_MODE
|
||||||
|
|
||||||
|
#define WOLFSSL_EVP_CIPH_MODE 0x0007
|
||||||
|
#define WOLFSSL_EVP_CIPH_STREAM_CIPHER 0x0
|
||||||
|
#define WOLFSSL_EVP_CIPH_ECB_MODE 0x1
|
||||||
|
#define WOLFSSL_EVP_CIPH_CBC_MODE 0x2
|
||||||
|
#define WOLFSSL_EVP_CIPH_CFB_MODE 0x3
|
||||||
|
#define WOLFSSL_EVP_CIPH_OFB_MODE 0x4
|
||||||
|
#define WOLFSSL_EVP_CIPH_CTR_MODE 0x5
|
||||||
|
#define WOLFSSL_EVP_CIPH_GCM_MODE 0x6
|
||||||
|
#define WOLFSSL_EVP_CIPH_CCM_MODE 0x7
|
||||||
|
#define WOLFSSL_EVP_CIPH_NO_PADDING 0x100
|
||||||
|
|
||||||
/* end OpenSSH compat */
|
/* end OpenSSH compat */
|
||||||
|
|
||||||
@@ -230,38 +328,84 @@ typedef WOLFSSL_EVP_CIPHER_CTX EVP_CIPHER_CTX;
|
|||||||
#define EVP_aes_128_cbc wolfSSL_EVP_aes_128_cbc
|
#define EVP_aes_128_cbc wolfSSL_EVP_aes_128_cbc
|
||||||
#define EVP_aes_192_cbc wolfSSL_EVP_aes_192_cbc
|
#define EVP_aes_192_cbc wolfSSL_EVP_aes_192_cbc
|
||||||
#define EVP_aes_256_cbc wolfSSL_EVP_aes_256_cbc
|
#define EVP_aes_256_cbc wolfSSL_EVP_aes_256_cbc
|
||||||
|
#define EVP_aes_128_ecb wolfSSL_EVP_aes_128_ecb
|
||||||
|
#define EVP_aes_192_ecb wolfSSL_EVP_aes_192_ecb
|
||||||
|
#define EVP_aes_256_ecb wolfSSL_EVP_aes_256_ecb
|
||||||
#define EVP_aes_128_ctr wolfSSL_EVP_aes_128_ctr
|
#define EVP_aes_128_ctr wolfSSL_EVP_aes_128_ctr
|
||||||
#define EVP_aes_192_ctr wolfSSL_EVP_aes_192_ctr
|
#define EVP_aes_192_ctr wolfSSL_EVP_aes_192_ctr
|
||||||
#define EVP_aes_256_ctr wolfSSL_EVP_aes_256_ctr
|
#define EVP_aes_256_ctr wolfSSL_EVP_aes_256_ctr
|
||||||
#define EVP_des_cbc wolfSSL_EVP_des_cbc
|
#define EVP_des_cbc wolfSSL_EVP_des_cbc
|
||||||
|
#define EVP_des_ecb wolfSSL_EVP_des_ecb
|
||||||
#define EVP_des_ede3_cbc wolfSSL_EVP_des_ede3_cbc
|
#define EVP_des_ede3_cbc wolfSSL_EVP_des_ede3_cbc
|
||||||
|
#define EVP_des_ede3_ecb wolfSSL_EVP_des_ede3_ecb
|
||||||
#define EVP_rc4 wolfSSL_EVP_rc4
|
#define EVP_rc4 wolfSSL_EVP_rc4
|
||||||
#define EVP_idea_cbc wolfSSL_EVP_idea_cbc
|
#define EVP_idea_cbc wolfSSL_EVP_idea_cbc
|
||||||
#define EVP_enc_null wolfSSL_EVP_enc_null
|
#define EVP_enc_null wolfSSL_EVP_enc_null
|
||||||
|
|
||||||
#define EVP_MD_size wolfSSL_EVP_MD_size
|
#define EVP_MD_size wolfSSL_EVP_MD_size
|
||||||
|
#define EVP_MD_CTX_new wolfSSL_EVP_MD_CTX_new
|
||||||
|
#define EVP_MD_CTX_create wolfSSL_EVP_MD_CTX_new
|
||||||
|
#define EVP_MD_CTX_free wolfSSL_EVP_MD_CTX_free
|
||||||
|
#define EVP_MD_CTX_destroy wolfSSL_EVP_MD_CTX_free
|
||||||
#define EVP_MD_CTX_init wolfSSL_EVP_MD_CTX_init
|
#define EVP_MD_CTX_init wolfSSL_EVP_MD_CTX_init
|
||||||
#define EVP_MD_CTX_cleanup wolfSSL_EVP_MD_CTX_cleanup
|
#define EVP_MD_CTX_cleanup wolfSSL_EVP_MD_CTX_cleanup
|
||||||
|
#define EVP_MD_CTX_md wolfSSL_EVP_MD_CTX_md
|
||||||
|
#define EVP_MD_CTX_type wolfSSL_EVP_MD_type
|
||||||
|
#define EVP_MD_type wolfSSL_EVP_MD_type
|
||||||
|
|
||||||
#define EVP_DigestInit wolfSSL_EVP_DigestInit
|
#define EVP_DigestInit wolfSSL_EVP_DigestInit
|
||||||
|
#define EVP_DigestInit_ex wolfSSL_EVP_DigestInit_ex
|
||||||
#define EVP_DigestUpdate wolfSSL_EVP_DigestUpdate
|
#define EVP_DigestUpdate wolfSSL_EVP_DigestUpdate
|
||||||
#define EVP_DigestFinal wolfSSL_EVP_DigestFinal
|
#define EVP_DigestFinal wolfSSL_EVP_DigestFinal
|
||||||
#define EVP_DigestFinal_ex wolfSSL_EVP_DigestFinal_ex
|
#define EVP_DigestFinal_ex wolfSSL_EVP_DigestFinal_ex
|
||||||
#define EVP_BytesToKey wolfSSL_EVP_BytesToKey
|
#define EVP_BytesToKey wolfSSL_EVP_BytesToKey
|
||||||
|
|
||||||
|
#define EVP_get_cipherbyname wolfSSL_EVP_get_cipherbyname
|
||||||
|
#define EVP_get_digestbyname wolfSSL_EVP_get_digestbyname
|
||||||
|
|
||||||
#define EVP_CIPHER_CTX_init wolfSSL_EVP_CIPHER_CTX_init
|
#define EVP_CIPHER_CTX_init wolfSSL_EVP_CIPHER_CTX_init
|
||||||
#define EVP_CIPHER_CTX_cleanup wolfSSL_EVP_CIPHER_CTX_cleanup
|
#define EVP_CIPHER_CTX_cleanup wolfSSL_EVP_CIPHER_CTX_cleanup
|
||||||
#define EVP_CIPHER_CTX_iv_length wolfSSL_EVP_CIPHER_CTX_iv_length
|
#define EVP_CIPHER_CTX_iv_length wolfSSL_EVP_CIPHER_CTX_iv_length
|
||||||
#define EVP_CIPHER_CTX_key_length wolfSSL_EVP_CIPHER_CTX_key_length
|
#define EVP_CIPHER_CTX_key_length wolfSSL_EVP_CIPHER_CTX_key_length
|
||||||
#define EVP_CIPHER_CTX_set_key_length wolfSSL_EVP_CIPHER_CTX_set_key_length
|
#define EVP_CIPHER_CTX_set_key_length wolfSSL_EVP_CIPHER_CTX_set_key_length
|
||||||
|
#define EVP_CIPHER_CTX_mode wolfSSL_EVP_CIPHER_CTX_mode
|
||||||
|
|
||||||
#define EVP_CipherInit wolfSSL_EVP_CipherInit
|
#define EVP_CipherInit wolfSSL_EVP_CipherInit
|
||||||
|
#define EVP_CipherInit_ex wolfSSL_EVP_CipherInit_ex
|
||||||
|
#define EVP_EncryptInit wolfSSL_EVP_EncryptInit
|
||||||
|
#define EVP_EncryptInit_ex wolfSSL_EVP_EncryptInit_ex
|
||||||
|
#define EVP_DecryptInit wolfSSL_EVP_DecryptInit
|
||||||
|
#define EVP_DecryptInit_ex wolfSSL_EVP_DecryptInit_ex
|
||||||
|
|
||||||
#define EVP_Cipher wolfSSL_EVP_Cipher
|
#define EVP_Cipher wolfSSL_EVP_Cipher
|
||||||
|
#define EVP_CipherUpdate wolfSSL_EVP_CipherUpdate
|
||||||
|
#define EVP_EncryptUpdate wolfSSL_EVP_CipherUpdate
|
||||||
|
#define EVP_DecryptUpdate wolfSSL_EVP_CipherUpdate
|
||||||
|
#define EVP_CipherFinal wolfSSL_EVP_CipherFinal
|
||||||
|
#define EVP_CipherFinal_ex wolfSSL_EVP_CipherFinal
|
||||||
|
#define EVP_EncryptFinal wolfSSL_EVP_CipherFinal
|
||||||
|
#define EVP_EncryptFinal_ex wolfSSL_EVP_CipherFinal
|
||||||
|
#define EVP_DecryptFinal wolfSSL_EVP_CipherFinal
|
||||||
|
#define EVP_DecryptFinal_ex wolfSSL_EVP_CipherFinal
|
||||||
|
|
||||||
|
#define EVP_CIPHER_CTX_free wolfSSL_EVP_CIPHER_CTX_free
|
||||||
|
#define EVP_CIPHER_CTX_new wolfSSL_EVP_CIPHER_CTX_new
|
||||||
|
|
||||||
#define EVP_get_digestbynid wolfSSL_EVP_get_digestbynid
|
#define EVP_get_digestbynid wolfSSL_EVP_get_digestbynid
|
||||||
|
#define EVP_get_cipherbyname wolfSSL_EVP_get_cipherbyname
|
||||||
|
#define EVP_get_digestbyname wolfSSL_EVP_get_digestbyname
|
||||||
|
|
||||||
#define EVP_PKEY_get1_RSA wolfSSL_EVP_PKEY_get1_RSA
|
#define EVP_PKEY_get1_RSA wolfSSL_EVP_PKEY_get1_RSA
|
||||||
#define EVP_PKEY_get1_DSA wolfSSL_EVP_PKEY_get1_DSA
|
#define EVP_PKEY_get1_DSA wolfSSL_EVP_PKEY_get1_DSA
|
||||||
#define EVP_PKEY_get1_EC_KEY wolfSSL_EVP_PKEY_get1_EC_KEY
|
#define EVP_PKEY_get1_EC_KEY wolfSSL_EVP_PKEY_get1_EC_KEY
|
||||||
|
|
||||||
|
#define EVP_CIPHER_CTX_block_size wolfSSL_EVP_CIPHER_CTX_block_size
|
||||||
|
#define EVP_CIPHER_block_size wolfSSL_EVP_CIPHER_block_size
|
||||||
|
#define EVP_CIPHER_flags wolfSSL_EVP_CIPHER_flags
|
||||||
|
#define EVP_CIPHER_CTX_set_flags wolfSSL_EVP_CIPHER_CTX_set_flags
|
||||||
|
#define EVP_CIPHER_CTX_set_padding wolfSSL_EVP_CIPHER_CTX_set_padding
|
||||||
|
#define EVP_CIPHER_CTX_flags wolfSSL_EVP_CIPHER_CTX_flags
|
||||||
|
#define EVP_add_digest wolfSSL_EVP_add_digest
|
||||||
|
|
||||||
#ifndef EVP_MAX_MD_SIZE
|
#ifndef EVP_MAX_MD_SIZE
|
||||||
#define EVP_MAX_MD_SIZE 64 /* sha512 */
|
#define EVP_MAX_MD_SIZE 64 /* sha512 */
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
nobase_include_HEADERS+= \
|
nobase_include_HEADERS+= \
|
||||||
wolfssl/openssl/asn1.h \
|
wolfssl/openssl/asn1.h \
|
||||||
|
wolfssl/openssl/aes.h\
|
||||||
wolfssl/openssl/bio.h \
|
wolfssl/openssl/bio.h \
|
||||||
wolfssl/openssl/bn.h \
|
wolfssl/openssl/bn.h \
|
||||||
wolfssl/openssl/conf.h \
|
wolfssl/openssl/conf.h \
|
||||||
|
|||||||
@@ -32,11 +32,16 @@ typedef WOLFSSL_MD5_CTX MD5_CTX;
|
|||||||
#define MD5_Update wolfSSL_MD5_Update
|
#define MD5_Update wolfSSL_MD5_Update
|
||||||
#define MD5_Final wolfSSL_MD5_Final
|
#define MD5_Final wolfSSL_MD5_Final
|
||||||
|
|
||||||
|
#ifdef OPENSSL_EXTRA_BSD
|
||||||
|
#define MD5Init wolfSSL_MD5_Init
|
||||||
|
#define MD5Update wolfSSL_MD5_Update
|
||||||
|
#define MD5Final wolfSSL_MD5_Final
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} /* extern "C" */
|
} /* extern "C" */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* NO_MD5 */
|
#endif /* NO_MD5 */
|
||||||
|
|
||||||
#endif /* WOLFSSL_MD5_H_ */
|
#endif /* WOLFSSL_MD5_H_ */
|
||||||
|
|
||||||
|
|||||||
@@ -13,13 +13,14 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define PEM_write_bio_PrivateKey wolfSSL_PEM_write_bio_PrivateKey
|
||||||
|
|
||||||
/* RSA */
|
/* RSA */
|
||||||
WOLFSSL_API
|
WOLFSSL_API
|
||||||
int wolfSSL_PEM_write_bio_RSAPrivateKey(WOLFSSL_BIO* bio, WOLFSSL_RSA* rsa,
|
int wolfSSL_PEM_write_bio_RSAPrivateKey(WOLFSSL_BIO* bio, WOLFSSL_RSA* rsa,
|
||||||
const EVP_CIPHER* cipher,
|
const EVP_CIPHER* cipher,
|
||||||
unsigned char* passwd, int len,
|
unsigned char* passwd, int len,
|
||||||
pem_password_cb cb, void* arg);
|
pem_password_cb* cb, void* arg);
|
||||||
WOLFSSL_API
|
WOLFSSL_API
|
||||||
int wolfSSL_PEM_write_mem_RSAPrivateKey(RSA* rsa, const EVP_CIPHER* cipher,
|
int wolfSSL_PEM_write_mem_RSAPrivateKey(RSA* rsa, const EVP_CIPHER* cipher,
|
||||||
unsigned char* passwd, int len,
|
unsigned char* passwd, int len,
|
||||||
@@ -46,7 +47,7 @@ int wolfSSL_PEM_write_bio_DSAPrivateKey(WOLFSSL_BIO* bio,
|
|||||||
WOLFSSL_DSA* dsa,
|
WOLFSSL_DSA* dsa,
|
||||||
const EVP_CIPHER* cipher,
|
const EVP_CIPHER* cipher,
|
||||||
unsigned char* passwd, int len,
|
unsigned char* passwd, int len,
|
||||||
pem_password_cb cb, void* arg);
|
pem_password_cb* cb, void* arg);
|
||||||
WOLFSSL_API
|
WOLFSSL_API
|
||||||
int wolfSSL_PEM_write_mem_DSAPrivateKey(WOLFSSL_DSA* dsa,
|
int wolfSSL_PEM_write_mem_DSAPrivateKey(WOLFSSL_DSA* dsa,
|
||||||
const EVP_CIPHER* cipher,
|
const EVP_CIPHER* cipher,
|
||||||
@@ -67,7 +68,7 @@ WOLFSSL_API
|
|||||||
int wolfSSL_PEM_write_bio_ECPrivateKey(WOLFSSL_BIO* bio, WOLFSSL_EC_KEY* ec,
|
int wolfSSL_PEM_write_bio_ECPrivateKey(WOLFSSL_BIO* bio, WOLFSSL_EC_KEY* ec,
|
||||||
const EVP_CIPHER* cipher,
|
const EVP_CIPHER* cipher,
|
||||||
unsigned char* passwd, int len,
|
unsigned char* passwd, int len,
|
||||||
pem_password_cb cb, void* arg);
|
pem_password_cb* cb, void* arg);
|
||||||
WOLFSSL_API
|
WOLFSSL_API
|
||||||
int wolfSSL_PEM_write_mem_ECPrivateKey(WOLFSSL_EC_KEY* key,
|
int wolfSSL_PEM_write_mem_ECPrivateKey(WOLFSSL_EC_KEY* key,
|
||||||
const EVP_CIPHER* cipher,
|
const EVP_CIPHER* cipher,
|
||||||
@@ -87,9 +88,15 @@ int wolfSSL_PEM_write_EC_PUBKEY(FILE *fp, WOLFSSL_EC_KEY *key);
|
|||||||
WOLFSSL_API
|
WOLFSSL_API
|
||||||
WOLFSSL_EVP_PKEY* wolfSSL_PEM_read_bio_PrivateKey(WOLFSSL_BIO* bio,
|
WOLFSSL_EVP_PKEY* wolfSSL_PEM_read_bio_PrivateKey(WOLFSSL_BIO* bio,
|
||||||
WOLFSSL_EVP_PKEY**,
|
WOLFSSL_EVP_PKEY**,
|
||||||
pem_password_cb cb,
|
pem_password_cb* cb,
|
||||||
void* arg);
|
void* arg);
|
||||||
WOLFSSL_API
|
WOLFSSL_API
|
||||||
|
int wolfSSL_PEM_write_bio_PrivateKey(WOLFSSL_BIO* bio, WOLFSSL_EVP_PKEY* key,
|
||||||
|
const WOLFSSL_EVP_CIPHER* cipher,
|
||||||
|
unsigned char* passwd, int len,
|
||||||
|
pem_password_cb* cb, void* arg);
|
||||||
|
|
||||||
|
WOLFSSL_API
|
||||||
int wolfSSL_EVP_PKEY_type(int type);
|
int wolfSSL_EVP_PKEY_type(int type);
|
||||||
|
|
||||||
#if !defined(NO_FILESYSTEM)
|
#if !defined(NO_FILESYSTEM)
|
||||||
@@ -98,6 +105,7 @@ WOLFSSL_EVP_PKEY *wolfSSL_PEM_read_PUBKEY(FILE *fp, EVP_PKEY **x,
|
|||||||
pem_password_cb *cb, void *u);
|
pem_password_cb *cb, void *u);
|
||||||
#endif /* NO_FILESYSTEM */
|
#endif /* NO_FILESYSTEM */
|
||||||
|
|
||||||
|
#define PEM_write_bio_PrivateKey wolfSSL_PEM_write_bio_PrivateKey
|
||||||
/* RSA */
|
/* RSA */
|
||||||
#define PEM_write_bio_RSAPrivateKey wolfSSL_PEM_write_bio_RSAPrivateKey
|
#define PEM_write_bio_RSAPrivateKey wolfSSL_PEM_write_bio_RSAPrivateKey
|
||||||
#define PEM_write_RSAPrivateKey wolfSSL_PEM_write_RSAPrivateKey
|
#define PEM_write_RSAPrivateKey wolfSSL_PEM_write_RSAPrivateKey
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* ssl.h defines wolfssl_openssl compatibility layer
|
/* ssl.h defines wolfssl_openssl compatibility layer
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -80,6 +80,12 @@ typedef WOLFSSL_ASN1_INTEGER ASN1_INTEGER;
|
|||||||
typedef WOLFSSL_ASN1_OBJECT ASN1_OBJECT;
|
typedef WOLFSSL_ASN1_OBJECT ASN1_OBJECT;
|
||||||
typedef WOLFSSL_ASN1_STRING ASN1_STRING;
|
typedef WOLFSSL_ASN1_STRING ASN1_STRING;
|
||||||
typedef WOLFSSL_dynlock_value CRYPTO_dynlock_value;
|
typedef WOLFSSL_dynlock_value CRYPTO_dynlock_value;
|
||||||
|
typedef WOLFSSL_BUF_MEM BUF_MEM;
|
||||||
|
|
||||||
|
/* GENERAL_NAME and BASIC_CONSTRAINTS structs may need implemented as
|
||||||
|
* compatibility layer expands. For now treating them as an ASN1_OBJECT */
|
||||||
|
typedef WOLFSSL_ASN1_OBJECT GENERAL_NAME;
|
||||||
|
typedef WOLFSSL_ASN1_OBJECT BASIC_CONSTRAINTS;
|
||||||
|
|
||||||
#define ASN1_UTCTIME WOLFSSL_ASN1_TIME
|
#define ASN1_UTCTIME WOLFSSL_ASN1_TIME
|
||||||
|
|
||||||
@@ -101,16 +107,23 @@ typedef WOLFSSL_X509_STORE_CTX X509_STORE_CTX;
|
|||||||
strncpy(buf, "Not Implemented, SSLv2 only", len)
|
strncpy(buf, "Not Implemented, SSLv2 only", len)
|
||||||
|
|
||||||
/* @TODO */
|
/* @TODO */
|
||||||
#define ERR_print_errors_fp(file)
|
#define ERR_print_errors_fp(file) wolfSSL_ERR_print_errors_fp((file))
|
||||||
|
|
||||||
/* at the moment only returns ok */
|
/* at the moment only returns ok */
|
||||||
#define SSL_get_verify_result(ctx) X509_V_OK
|
#define SSL_get_verify_result wolfSSL_get_verify_result
|
||||||
#define SSL_get_verify_mode wolfSSL_SSL_get_mode
|
#define SSL_get_verify_mode wolfSSL_SSL_get_mode
|
||||||
#define SSL_get_verify_depth wolfSSL_get_verify_depth
|
#define SSL_get_verify_depth wolfSSL_get_verify_depth
|
||||||
#define SSL_CTX_get_verify_mode wolfSSL_CTX_get_verify_mode
|
#define SSL_CTX_get_verify_mode wolfSSL_CTX_get_verify_mode
|
||||||
#define SSL_CTX_get_verify_depth wolfSSL_CTX_get_verify_depth
|
#define SSL_CTX_get_verify_depth wolfSSL_CTX_get_verify_depth
|
||||||
#define SSL_get_certificate wolfSSL_get_certificate
|
#define SSL_get_certificate wolfSSL_get_certificate
|
||||||
|
#define SSL_use_certificate wolfSSL_use_certificate
|
||||||
|
#define SSL_use_certificate_ASN1 wolfSSL_use_certificate_ASN1
|
||||||
|
|
||||||
|
#define SSL_use_PrivateKey wolfSSL_use_PrivateKey
|
||||||
|
#define SSL_use_PrivateKey_ASN1 wolfSSL_use_PrivateKey_ASN1
|
||||||
|
#define SSL_use_RSAPrivateKey_ASN1 wolfSSL_use_RSAPrivateKey_ASN1
|
||||||
|
|
||||||
|
#define SSLv23_method wolfSSLv23_method
|
||||||
#define SSLv3_server_method wolfSSLv3_server_method
|
#define SSLv3_server_method wolfSSLv3_server_method
|
||||||
#define SSLv3_client_method wolfSSLv3_client_method
|
#define SSLv3_client_method wolfSSLv3_client_method
|
||||||
#define TLSv1_server_method wolfTLSv1_server_method
|
#define TLSv1_server_method wolfTLSv1_server_method
|
||||||
@@ -134,7 +147,7 @@ typedef WOLFSSL_X509_STORE_CTX X509_STORE_CTX;
|
|||||||
#define SSL_CTX_load_verify_locations wolfSSL_CTX_load_verify_locations
|
#define SSL_CTX_load_verify_locations wolfSSL_CTX_load_verify_locations
|
||||||
#define SSL_CTX_use_certificate_chain_file wolfSSL_CTX_use_certificate_chain_file
|
#define SSL_CTX_use_certificate_chain_file wolfSSL_CTX_use_certificate_chain_file
|
||||||
#define SSL_CTX_use_RSAPrivateKey_file wolfSSL_CTX_use_RSAPrivateKey_file
|
#define SSL_CTX_use_RSAPrivateKey_file wolfSSL_CTX_use_RSAPrivateKey_file
|
||||||
|
|
||||||
#define SSL_use_certificate_file wolfSSL_use_certificate_file
|
#define SSL_use_certificate_file wolfSSL_use_certificate_file
|
||||||
#define SSL_use_PrivateKey_file wolfSSL_use_PrivateKey_file
|
#define SSL_use_PrivateKey_file wolfSSL_use_PrivateKey_file
|
||||||
#define SSL_use_certificate_chain_file wolfSSL_use_certificate_chain_file
|
#define SSL_use_certificate_chain_file wolfSSL_use_certificate_chain_file
|
||||||
@@ -147,6 +160,7 @@ typedef WOLFSSL_X509_STORE_CTX X509_STORE_CTX;
|
|||||||
#define SSL_get_fd wolfSSL_get_fd
|
#define SSL_get_fd wolfSSL_get_fd
|
||||||
#define SSL_connect wolfSSL_connect
|
#define SSL_connect wolfSSL_connect
|
||||||
#define SSL_clear wolfSSL_clear
|
#define SSL_clear wolfSSL_clear
|
||||||
|
#define SSL_state wolfSSL_state
|
||||||
|
|
||||||
#define SSL_write wolfSSL_write
|
#define SSL_write wolfSSL_write
|
||||||
#define SSL_read wolfSSL_read
|
#define SSL_read wolfSSL_read
|
||||||
@@ -201,7 +215,12 @@ typedef WOLFSSL_X509_STORE_CTX X509_STORE_CTX;
|
|||||||
|
|
||||||
#define SSL_get_keyblock_size wolfSSL_get_keyblock_size
|
#define SSL_get_keyblock_size wolfSSL_get_keyblock_size
|
||||||
#define SSL_get_keys wolfSSL_get_keys
|
#define SSL_get_keys wolfSSL_get_keys
|
||||||
|
#define SSL_SESSION_get_master_key wolfSSL_SESSION_get_master_key
|
||||||
|
#define SSL_SESSION_get_master_key_length wolfSSL_SESSION_get_master_key_length
|
||||||
|
|
||||||
|
#define SSL_X509_NAME_get_text_by_NID wolfSSL_X509_NAME_get_text_by_NID
|
||||||
|
#define X509_get_ext_d2i wolfSSL_X509_get_ext_d2i
|
||||||
|
#define X509_digest wolfSSL_X509_digest
|
||||||
#define X509_free wolfSSL_X509_free
|
#define X509_free wolfSSL_X509_free
|
||||||
#define OPENSSL_free wolfSSL_OPENSSL_free
|
#define OPENSSL_free wolfSSL_OPENSSL_free
|
||||||
|
|
||||||
@@ -217,7 +236,11 @@ typedef WOLFSSL_X509_STORE_CTX X509_STORE_CTX;
|
|||||||
#define BIO_new wolfSSL_BIO_new
|
#define BIO_new wolfSSL_BIO_new
|
||||||
#define BIO_free wolfSSL_BIO_free
|
#define BIO_free wolfSSL_BIO_free
|
||||||
#define BIO_free_all wolfSSL_BIO_free_all
|
#define BIO_free_all wolfSSL_BIO_free_all
|
||||||
|
#define BIO_nread0 wolfSSL_BIO_nread0
|
||||||
|
#define BIO_nread wolfSSL_BIO_nread
|
||||||
#define BIO_read wolfSSL_BIO_read
|
#define BIO_read wolfSSL_BIO_read
|
||||||
|
#define BIO_nwrite0 wolfSSL_BIO_nwrite0
|
||||||
|
#define BIO_nwrite wolfSSL_BIO_nwrite
|
||||||
#define BIO_write wolfSSL_BIO_write
|
#define BIO_write wolfSSL_BIO_write
|
||||||
#define BIO_push wolfSSL_BIO_push
|
#define BIO_push wolfSSL_BIO_push
|
||||||
#define BIO_pop wolfSSL_BIO_pop
|
#define BIO_pop wolfSSL_BIO_pop
|
||||||
@@ -239,9 +262,10 @@ typedef WOLFSSL_X509_STORE_CTX X509_STORE_CTX;
|
|||||||
#define BIO_f_base64 wolfSSL_BIO_f_base64
|
#define BIO_f_base64 wolfSSL_BIO_f_base64
|
||||||
#define BIO_set_flags wolfSSL_BIO_set_flags
|
#define BIO_set_flags wolfSSL_BIO_set_flags
|
||||||
|
|
||||||
|
#define OpenSSL_add_all_digests()
|
||||||
#define OpenSSL_add_all_algorithms wolfSSL_add_all_algorithms
|
#define OpenSSL_add_all_algorithms wolfSSL_add_all_algorithms
|
||||||
#define SSLeay_add_ssl_algorithms wolfSSL_add_all_algorithms
|
#define SSLeay_add_ssl_algorithms wolfSSL_add_all_algorithms
|
||||||
#define SSLeay_add_all_algorithms wolfSSL_add_all_algorithms
|
#define SSLeay_add_all_algorithms wolfSSL_add_all_algorithms
|
||||||
|
|
||||||
#define RAND_screen wolfSSL_RAND_screen
|
#define RAND_screen wolfSSL_RAND_screen
|
||||||
#define RAND_file_name wolfSSL_RAND_file_name
|
#define RAND_file_name wolfSSL_RAND_file_name
|
||||||
@@ -271,6 +295,9 @@ typedef WOLFSSL_X509_STORE_CTX X509_STORE_CTX;
|
|||||||
# define CRYPTO_WRITE 8
|
# define CRYPTO_WRITE 8
|
||||||
|
|
||||||
#define X509_STORE_CTX_get_current_cert wolfSSL_X509_STORE_CTX_get_current_cert
|
#define X509_STORE_CTX_get_current_cert wolfSSL_X509_STORE_CTX_get_current_cert
|
||||||
|
#define X509_STORE_add_cert wolfSSL_X509_STORE_add_cert
|
||||||
|
#define X509_STORE_set_flags wolfSSL_X509_STORE_set_flags
|
||||||
|
#define X509_STORE_CTX_get_chain wolfSSL_X509_STORE_CTX_get_chain
|
||||||
#define X509_STORE_CTX_get_error wolfSSL_X509_STORE_CTX_get_error
|
#define X509_STORE_CTX_get_error wolfSSL_X509_STORE_CTX_get_error
|
||||||
#define X509_STORE_CTX_get_error_depth wolfSSL_X509_STORE_CTX_get_error_depth
|
#define X509_STORE_CTX_get_error_depth wolfSSL_X509_STORE_CTX_get_error_depth
|
||||||
|
|
||||||
@@ -297,6 +324,7 @@ typedef WOLFSSL_X509_STORE_CTX X509_STORE_CTX;
|
|||||||
#define X509_CRL_verify wolfSSL_X509_CRL_verify
|
#define X509_CRL_verify wolfSSL_X509_CRL_verify
|
||||||
#define X509_STORE_CTX_set_error wolfSSL_X509_STORE_CTX_set_error
|
#define X509_STORE_CTX_set_error wolfSSL_X509_STORE_CTX_set_error
|
||||||
#define X509_OBJECT_free_contents wolfSSL_X509_OBJECT_free_contents
|
#define X509_OBJECT_free_contents wolfSSL_X509_OBJECT_free_contents
|
||||||
|
#define EVP_PKEY_new wolfSSL_PKEY_new
|
||||||
#define EVP_PKEY_free wolfSSL_EVP_PKEY_free
|
#define EVP_PKEY_free wolfSSL_EVP_PKEY_free
|
||||||
#define X509_cmp_current_time wolfSSL_X509_cmp_current_time
|
#define X509_cmp_current_time wolfSSL_X509_cmp_current_time
|
||||||
#define sk_X509_REVOKED_num wolfSSL_sk_X509_REVOKED_num
|
#define sk_X509_REVOKED_num wolfSSL_sk_X509_REVOKED_num
|
||||||
@@ -312,10 +340,13 @@ typedef WOLFSSL_X509_STORE_CTX X509_STORE_CTX;
|
|||||||
|
|
||||||
#define ASN1_INTEGER_cmp wolfSSL_ASN1_INTEGER_cmp
|
#define ASN1_INTEGER_cmp wolfSSL_ASN1_INTEGER_cmp
|
||||||
#define ASN1_INTEGER_get wolfSSL_ASN1_INTEGER_get
|
#define ASN1_INTEGER_get wolfSSL_ASN1_INTEGER_get
|
||||||
|
#define ASN1_INTEGER_to_BN wolfSSL_ASN1_INTEGER_to_BN
|
||||||
|
|
||||||
#define SSL_load_client_CA_file wolfSSL_load_client_CA_file
|
#define SSL_load_client_CA_file wolfSSL_load_client_CA_file
|
||||||
|
|
||||||
#define SSL_CTX_set_client_CA_list wolfSSL_CTX_set_client_CA_list
|
#define SSL_CTX_set_client_CA_list wolfSSL_CTX_set_client_CA_list
|
||||||
|
#define SSL_CTX_set_cert_store wolfSSL_CTX_set_cert_store
|
||||||
|
#define SSL_CTX_get_cert_store wolfSSL_CTX_get_cert_store
|
||||||
#define X509_STORE_CTX_get_ex_data wolfSSL_X509_STORE_CTX_get_ex_data
|
#define X509_STORE_CTX_get_ex_data wolfSSL_X509_STORE_CTX_get_ex_data
|
||||||
#define SSL_get_ex_data_X509_STORE_CTX_idx wolfSSL_get_ex_data_X509_STORE_CTX_idx
|
#define SSL_get_ex_data_X509_STORE_CTX_idx wolfSSL_get_ex_data_X509_STORE_CTX_idx
|
||||||
#define SSL_get_ex_data wolfSSL_get_ex_data
|
#define SSL_get_ex_data wolfSSL_get_ex_data
|
||||||
@@ -327,6 +358,8 @@ typedef WOLFSSL_X509_STORE_CTX X509_STORE_CTX;
|
|||||||
#define SSL_CTX_set_info_callback wolfSSL_CTX_set_info_callback
|
#define SSL_CTX_set_info_callback wolfSSL_CTX_set_info_callback
|
||||||
|
|
||||||
#define ERR_peek_error wolfSSL_ERR_peek_error
|
#define ERR_peek_error wolfSSL_ERR_peek_error
|
||||||
|
#define ERR_peek_last_error_line wolfSSL_ERR_peek_last_error_line
|
||||||
|
#define ERR_peek_errors_fp wolfSSL_ERR_peek_errors_fp
|
||||||
#define ERR_GET_REASON wolfSSL_ERR_GET_REASON
|
#define ERR_GET_REASON wolfSSL_ERR_GET_REASON
|
||||||
|
|
||||||
#define SSL_alert_type_string wolfSSL_alert_type_string
|
#define SSL_alert_type_string wolfSSL_alert_type_string
|
||||||
@@ -377,7 +410,7 @@ typedef WOLFSSL_X509_STORE_CTX X509_STORE_CTX;
|
|||||||
#define RAND_status wolfSSL_RAND_status
|
#define RAND_status wolfSSL_RAND_status
|
||||||
#define RAND_bytes wolfSSL_RAND_bytes
|
#define RAND_bytes wolfSSL_RAND_bytes
|
||||||
#define SSLv23_server_method wolfSSLv23_server_method
|
#define SSLv23_server_method wolfSSLv23_server_method
|
||||||
#define SSL_CTX_set_options wolfSSL_CTX_set_options
|
#define SSL_CTX_set_options wolfSSL_CTX_set_options
|
||||||
#define SSL_CTX_check_private_key wolfSSL_CTX_check_private_key
|
#define SSL_CTX_check_private_key wolfSSL_CTX_check_private_key
|
||||||
|
|
||||||
#define ERR_free_strings wolfSSL_ERR_free_strings
|
#define ERR_free_strings wolfSSL_ERR_free_strings
|
||||||
@@ -405,6 +438,7 @@ typedef WOLFSSL_X509_STORE_CTX X509_STORE_CTX;
|
|||||||
#define sk_value wolfSSL_sk_value
|
#define sk_value wolfSSL_sk_value
|
||||||
#define sk_X509_pop wolfSSL_sk_X509_pop
|
#define sk_X509_pop wolfSSL_sk_X509_pop
|
||||||
#define sk_X509_free wolfSSL_sk_X509_free
|
#define sk_X509_free wolfSSL_sk_X509_free
|
||||||
|
#define d2i_X509_bio wolfSSL_d2i_X509_bio
|
||||||
|
|
||||||
#define SSL_CTX_get_ex_data wolfSSL_CTX_get_ex_data
|
#define SSL_CTX_get_ex_data wolfSSL_CTX_get_ex_data
|
||||||
#define SSL_CTX_set_ex_data wolfSSL_CTX_set_ex_data
|
#define SSL_CTX_set_ex_data wolfSSL_CTX_set_ex_data
|
||||||
@@ -418,6 +452,21 @@ typedef WOLFSSL_X509_STORE_CTX X509_STORE_CTX;
|
|||||||
#define SSL_SESSION_get_timeout wolfSSL_SESSION_get_timeout
|
#define SSL_SESSION_get_timeout wolfSSL_SESSION_get_timeout
|
||||||
#define SSL_SESSION_get_time wolfSSL_SESSION_get_time
|
#define SSL_SESSION_get_time wolfSSL_SESSION_get_time
|
||||||
#define SSL_CTX_get_ex_new_index wolfSSL_CTX_get_ex_new_index
|
#define SSL_CTX_get_ex_new_index wolfSSL_CTX_get_ex_new_index
|
||||||
|
#define PEM_read_bio_X509 wolfSSL_PEM_read_bio_X509
|
||||||
|
#define PEM_read_bio_X509_AUX wolfSSL_PEM_read_bio_X509_AUX
|
||||||
|
|
||||||
|
/*#if OPENSSL_API_COMPAT < 0x10100000L*/
|
||||||
|
#define CONF_modules_free()
|
||||||
|
#define ENGINE_cleanup()
|
||||||
|
#define HMAC_CTX_cleanup wolfSSL_HMAC_cleanup
|
||||||
|
#define SSL_CTX_need_tmp_RSA(ctx) 0
|
||||||
|
#define SSL_CTX_set_tmp_rsa(ctx,rsa) 1
|
||||||
|
#define SSL_need_tmp_RSA(ssl) 0
|
||||||
|
#define SSL_set_tmp_rsa(ssl,rsa) 1
|
||||||
|
/*#endif*/
|
||||||
|
#define CONF_modules_unload(a)
|
||||||
|
|
||||||
|
#define SSL_get_hit wolfSSL_session_reused
|
||||||
|
|
||||||
/* yassl had set the default to be 500 */
|
/* yassl had set the default to be 500 */
|
||||||
#define SSL_get_default_timeout(ctx) 500
|
#define SSL_get_default_timeout(ctx) 500
|
||||||
@@ -433,10 +482,9 @@ typedef WOLFSSL_X509_NAME_ENTRY X509_NAME_ENTRY;
|
|||||||
#define SSL_CTX_use_PrivateKey wolfSSL_CTX_use_PrivateKey
|
#define SSL_CTX_use_PrivateKey wolfSSL_CTX_use_PrivateKey
|
||||||
#define BIO_read_filename wolfSSL_BIO_read_filename
|
#define BIO_read_filename wolfSSL_BIO_read_filename
|
||||||
#define BIO_s_file wolfSSL_BIO_s_file
|
#define BIO_s_file wolfSSL_BIO_s_file
|
||||||
#define OBJ_nid2sn wolf_OBJ_nid2sn
|
#define OBJ_nid2sn wolfSSL_OBJ_nid2sn
|
||||||
#define OBJ_obj2nid wolf_OBJ_obj2nid
|
#define OBJ_obj2nid wolfSSL_OBJ_obj2nid
|
||||||
#define OBJ_sn2nid wolf_OBJ_sn2nid
|
#define OBJ_sn2nid wolfSSL_OBJ_sn2nid
|
||||||
#define PEM_read_bio_X509 PEM_read_bio_WOLFSSL_X509
|
|
||||||
#define SSL_CTX_set_verify_depth wolfSSL_CTX_set_verify_depth
|
#define SSL_CTX_set_verify_depth wolfSSL_CTX_set_verify_depth
|
||||||
#define SSL_get_app_data wolfSSL_get_app_data
|
#define SSL_get_app_data wolfSSL_get_app_data
|
||||||
#define SSL_set_app_data wolfSSL_set_app_data
|
#define SSL_set_app_data wolfSSL_set_app_data
|
||||||
@@ -458,21 +506,105 @@ typedef WOLFSSL_X509_NAME_ENTRY X509_NAME_ENTRY;
|
|||||||
#if defined(HAVE_STUNNEL) || defined(HAVE_LIGHTY) \
|
#if defined(HAVE_STUNNEL) || defined(HAVE_LIGHTY) \
|
||||||
|| defined(WOLFSSL_MYSQL_COMPATIBLE)
|
|| defined(WOLFSSL_MYSQL_COMPATIBLE)
|
||||||
|
|
||||||
#define OBJ_nid2ln wolf_OBJ_nid2ln
|
#define OBJ_nid2ln wolfSSL_OBJ_nid2ln
|
||||||
#define OBJ_txt2nid wolf_OBJ_txt2nid
|
#define OBJ_txt2nid wolfSSL_OBJ_txt2nid
|
||||||
#define PEM_read_bio_DHparams wolfSSL_PEM_read_bio_DHparams
|
#define PEM_read_bio_DHparams wolfSSL_PEM_read_bio_DHparams
|
||||||
|
#define PEM_read_bio_DSAparams wolfSSL_PEM_read_bio_DSAparams
|
||||||
#define PEM_write_bio_X509 PEM_write_bio_WOLFSSL_X509
|
#define PEM_write_bio_X509 PEM_write_bio_WOLFSSL_X509
|
||||||
#define SSL_CTX_set_tmp_dh wolfSSL_CTX_set_tmp_dh
|
|
||||||
#define BIO_new_file wolfSSL_BIO_new_file
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* HAVE_STUNNEL || HAVE_LIGHTY || WOLFSSL_MYSQL_COMPATIBLE */
|
#endif /* HAVE_STUNNEL || HAVE_LIGHTY || WOLFSSL_MYSQL_COMPATIBLE */
|
||||||
|
#define SSL_CTX_set_tmp_dh wolfSSL_CTX_set_tmp_dh
|
||||||
|
|
||||||
|
#define BIO_new_file wolfSSL_BIO_new_file
|
||||||
|
#define BIO_ctrl wolfSSL_BIO_ctrl
|
||||||
|
#define BIO_ctrl_pending wolfSSL_BIO_ctrl_pending
|
||||||
|
#define BIO_get_mem_ptr wolfSSL_BIO_get_mem_ptr
|
||||||
|
#define BIO_int_ctrl wolfSSL_BIO_int_ctrl
|
||||||
|
#define BIO_reset wolfSSL_BIO_reset
|
||||||
|
#define BIO_s_file wolfSSL_BIO_s_file
|
||||||
|
#define BIO_s_bio wolfSSL_BIO_s_bio
|
||||||
|
#define BIO_s_socket wolfSSL_BIO_s_socket
|
||||||
|
#define BIO_set_fd wolfSSL_BIO_set_fd
|
||||||
|
#define BIO_ctrl_reset_read_request wolfSSL_BIO_ctrl_reset_read_request
|
||||||
|
|
||||||
|
#define BIO_set_write_buf_size wolfSSL_BIO_set_write_buf_size
|
||||||
|
#define BIO_make_bio_pair wolfSSL_BIO_make_bio_pair
|
||||||
|
|
||||||
|
#define BIO_set_fp wolfSSL_BIO_set_fp
|
||||||
|
#define BIO_get_fp wolfSSL_BIO_get_fp
|
||||||
|
#define BIO_seek wolfSSL_BIO_seek
|
||||||
|
#define BIO_write_filename wolfSSL_BIO_write_filename
|
||||||
|
#define BIO_set_mem_eof_return wolfSSL_BIO_set_mem_eof_return
|
||||||
|
|
||||||
|
#define SSL_set_options wolfSSL_set_options
|
||||||
|
#define SSL_get_options wolfSSL_get_options
|
||||||
|
#define SSL_set_tmp_dh wolfSSL_set_tmp_dh
|
||||||
|
#define SSL_clear_num_renegotiations wolfSSL_clear_num_renegotiations
|
||||||
|
#define SSL_total_renegotiations wolfSSL_total_renegotiations
|
||||||
|
#define SSL_set_tlsext_debug_arg wolfSSL_set_tlsext_debug_arg
|
||||||
|
#define SSL_set_tlsext_status_type wolfSSL_set_tlsext_status_type
|
||||||
|
#define SSL_set_tlsext_status_exts wolfSSL_set_tlsext_status_exts
|
||||||
|
#define SSL_get_tlsext_status_ids wolfSSL_get_tlsext_status_ids
|
||||||
|
#define SSL_set_tlsext_status_ids wolfSSL_set_tlsext_status_ids
|
||||||
|
#define SSL_get_tlsext_status_ocsp_resp wolfSSL_get_tlsext_status_ocsp_resp
|
||||||
|
#define SSL_set_tlsext_status_ocsp_resp wolfSSL_set_tlsext_status_ocsp_resp
|
||||||
|
|
||||||
|
#define SSL_CTX_add_extra_chain_cert wolfSSL_CTX_add_extra_chain_cert
|
||||||
|
#define SSL_CTX_get_read_ahead wolfSSL_CTX_get_read_ahead
|
||||||
|
#define SSL_CTX_set_read_ahead wolfSSL_CTX_set_read_ahead
|
||||||
|
#define SSL_CTX_set_tlsext_status_arg wolfSSL_CTX_set_tlsext_status_arg
|
||||||
|
#define SSL_CTX_set_tlsext_opaque_prf_input_callback_arg \
|
||||||
|
wolfSSL_CTX_set_tlsext_opaque_prf_input_callback_arg
|
||||||
|
#define SSL_get_server_random wolfSSL_get_server_random
|
||||||
|
|
||||||
|
#define SSL_get_tlsext_status_exts wolfSSL_get_tlsext_status_exts
|
||||||
|
|
||||||
|
#define BIO_C_SET_FILE_PTR 106
|
||||||
|
#define BIO_C_GET_FILE_PTR 107
|
||||||
|
#define BIO_C_SET_FILENAME 108
|
||||||
|
#define BIO_C_FILE_SEEK 128
|
||||||
|
#define BIO_C_SET_BUF_MEM_EOF_RETURN 130
|
||||||
|
#define BIO_C_SET_WRITE_BUF_SIZE 136
|
||||||
|
#define BIO_C_MAKE_BIO_PAIR 138
|
||||||
|
|
||||||
|
#define BIO_CTRL_RESET 1
|
||||||
|
#define BIO_CTRL_INFO 3
|
||||||
|
#define BIO_CTRL_FLUSH 11
|
||||||
|
#define BIO_CLOSE 0x01
|
||||||
|
#define BIO_FP_WRITE 0x04
|
||||||
|
|
||||||
|
#define SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS 11
|
||||||
|
#define SSL_CTRL_GET_TOTAL_RENEGOTIATIONS 12
|
||||||
|
#define SSL_CTRL_SET_TMP_DH 3
|
||||||
|
#define SSL_CTRL_SET_TLSEXT_DEBUG_ARG 57
|
||||||
|
#define SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE 65
|
||||||
|
#define SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS 66
|
||||||
|
#define SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS 67
|
||||||
|
#define SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS 68
|
||||||
|
#define SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS 69
|
||||||
|
#define SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP 70
|
||||||
|
#define SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP 71
|
||||||
|
|
||||||
|
#define SSL_CTRL_SET_TMP_DH 3
|
||||||
|
#define SSL_CTRL_EXTRA_CHAIN_CERT 14
|
||||||
|
|
||||||
|
#define SSL_CTRL_SET_SESS_CACHE_SIZE 42
|
||||||
|
#define SSL_CTRL_GET_READ_AHEAD 40
|
||||||
|
#define SSL_CTRL_SET_READ_AHEAD 41
|
||||||
|
|
||||||
|
#define SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG 64
|
||||||
|
|
||||||
|
#define SSL_ctrl wolfSSL_ctrl
|
||||||
|
#define SSL_CTX_ctrl wolfSSL_CTX_ctrl
|
||||||
|
|
||||||
|
#define X509_V_FLAG_CRL_CHECK WOLFSSL_CRL_CHECK
|
||||||
|
#define X509_V_FLAG_CRL_CHECK_ALL WOLFSSL_CRL_CHECKALL
|
||||||
|
|
||||||
#ifdef HAVE_STUNNEL
|
#ifdef HAVE_STUNNEL
|
||||||
#include <wolfssl/openssl/asn1.h>
|
#include <wolfssl/openssl/asn1.h>
|
||||||
|
|
||||||
/* defined as: (SSL_ST_ACCEPT|SSL_CB_LOOP), which becomes 0x2001*/
|
/* defined as: (SSL_ST_ACCEPT|SSL_CB_LOOP), which becomes 0x2001*/
|
||||||
#define SSL_CB_ACCEPT_LOOP 0x2001
|
#define SSL_CB_ACCEPT_LOOP 0x2001
|
||||||
#define SSL2_VERSION 0x0002
|
#define SSL2_VERSION 0x0002
|
||||||
#define SSL3_VERSION 0x0300
|
#define SSL3_VERSION 0x0300
|
||||||
#define TLS1_VERSION 0x0301
|
#define TLS1_VERSION 0x0301
|
||||||
@@ -518,8 +650,8 @@ typedef WOLFSSL_ASN1_BIT_STRING ASN1_BIT_STRING;
|
|||||||
#define SSL_get_servername wolfSSL_get_servername
|
#define SSL_get_servername wolfSSL_get_servername
|
||||||
#define SSL_set_SSL_CTX wolfSSL_set_SSL_CTX
|
#define SSL_set_SSL_CTX wolfSSL_set_SSL_CTX
|
||||||
#define SSL_CTX_get_verify_callback wolfSSL_CTX_get_verify_callback
|
#define SSL_CTX_get_verify_callback wolfSSL_CTX_get_verify_callback
|
||||||
#define SSL_CTX_set_tlsext_servername_callback wolfSSL_CTX_set_servername_callback
|
#define SSL_CTX_set_tlsext_servername_callback wolfSSL_CTX_set_servername_callback
|
||||||
#define SSL_CTX_set_tlsext_servername_arg wolfSSL_CTX_set_servername_arg
|
#define SSL_CTX_set_tlsext_servername_arg wolfSSL_CTX_set_servername_arg
|
||||||
|
|
||||||
#define PSK_MAX_PSK_LEN 256
|
#define PSK_MAX_PSK_LEN 256
|
||||||
#define PSK_MAX_IDENTITY_LEN 128
|
#define PSK_MAX_IDENTITY_LEN 128
|
||||||
@@ -528,6 +660,26 @@ typedef WOLFSSL_ASN1_BIT_STRING ASN1_BIT_STRING;
|
|||||||
|
|
||||||
|
|
||||||
#endif /* HAVE_STUNNEL */
|
#endif /* HAVE_STUNNEL */
|
||||||
|
#define SSL_CTX_get_default_passwd_cb wolfSSL_CTX_get_default_passwd_cb
|
||||||
|
#define SSL_CTX_get_default_passwd_cb_userdata wolfSSL_CTX_get_default_passwd_cb_userdata
|
||||||
|
|
||||||
|
/* certificate extension NIDs */
|
||||||
|
#define NID_basic_constraints 133
|
||||||
|
#define NID_key_usage 129 /* 2.5.29.15 */
|
||||||
|
#define NID_ext_key_usage 151 /* 2.5.29.37 */
|
||||||
|
#define NID_subject_key_identifier 128
|
||||||
|
#define NID_authority_key_identifier 149
|
||||||
|
#define NID_private_key_usage_period 130 /* 2.5.29.16 */
|
||||||
|
#define NID_subject_alt_name 131
|
||||||
|
#define NID_issuer_alt_name 132
|
||||||
|
#define NID_info_access 69
|
||||||
|
#define NID_sinfo_access 79 /* id-pe 11 */
|
||||||
|
#define NID_name_constraints 144 /* 2.5.29.30 */
|
||||||
|
#define NID_certificate_policies 146
|
||||||
|
#define NID_policy_mappings 147
|
||||||
|
#define NID_policy_constraints 150
|
||||||
|
#define NID_inhibit_any_policy 168 /* 2.5.29.54 */
|
||||||
|
#define NID_tlsfeature 92 /* id-pe 24 */
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} /* extern "C" */
|
} /* extern "C" */
|
||||||
|
|||||||
249
wolfssl/ssl.h
249
wolfssl/ssl.h
@@ -59,7 +59,9 @@
|
|||||||
#undef OCSP_RESPONSE
|
#undef OCSP_RESPONSE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef OPENSSL_EXTRA
|
||||||
|
#include <wolfssl/openssl/bn.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
@@ -113,15 +115,24 @@ typedef struct WOLFSSL_ASN1_STRING WOLFSSL_ASN1_STRING;
|
|||||||
typedef struct WOLFSSL_dynlock_value WOLFSSL_dynlock_value;
|
typedef struct WOLFSSL_dynlock_value WOLFSSL_dynlock_value;
|
||||||
typedef struct WOLFSSL_DH WOLFSSL_DH;
|
typedef struct WOLFSSL_DH WOLFSSL_DH;
|
||||||
typedef struct WOLFSSL_ASN1_BIT_STRING WOLFSSL_ASN1_BIT_STRING;
|
typedef struct WOLFSSL_ASN1_BIT_STRING WOLFSSL_ASN1_BIT_STRING;
|
||||||
|
typedef unsigned char* WOLFSSL_BUF_MEM;
|
||||||
|
|
||||||
#define WOLFSSL_ASN1_UTCTIME WOLFSSL_ASN1_TIME
|
#define WOLFSSL_ASN1_UTCTIME WOLFSSL_ASN1_TIME
|
||||||
|
|
||||||
|
struct WOLFSSL_ASN1_INTEGER {
|
||||||
|
/* size can be increased set at 20 for tag, length then to hold at least 16
|
||||||
|
* byte type */
|
||||||
|
unsigned char data[20];
|
||||||
|
/* ASN_INTEGER | LENGTH | hex of number */
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef char WOLFSSL_EVP_MD;
|
||||||
typedef struct WOLFSSL_EVP_PKEY {
|
typedef struct WOLFSSL_EVP_PKEY {
|
||||||
int type; /* openssh dereference */
|
int type; /* openssh dereference */
|
||||||
int save_type; /* openssh dereference */
|
int save_type; /* openssh dereference */
|
||||||
int pkey_sz;
|
int pkey_sz;
|
||||||
union {
|
union {
|
||||||
char* ptr;
|
char* ptr; /* der format of key / or raw for NTRU */
|
||||||
} pkey;
|
} pkey;
|
||||||
#ifdef HAVE_ECC
|
#ifdef HAVE_ECC
|
||||||
int pkey_curve;
|
int pkey_curve;
|
||||||
@@ -174,6 +185,7 @@ typedef struct WOLFSSL_BUFFER_INFO {
|
|||||||
typedef struct WOLFSSL_X509_STORE_CTX {
|
typedef struct WOLFSSL_X509_STORE_CTX {
|
||||||
WOLFSSL_X509_STORE* store; /* Store full of a CA cert chain */
|
WOLFSSL_X509_STORE* store; /* Store full of a CA cert chain */
|
||||||
WOLFSSL_X509* current_cert; /* stunnel dereference */
|
WOLFSSL_X509* current_cert; /* stunnel dereference */
|
||||||
|
WOLFSSL_STACK* chain;
|
||||||
char* domain; /* subject CN domain name */
|
char* domain; /* subject CN domain name */
|
||||||
void* ex_data; /* external data, for fortress build */
|
void* ex_data; /* external data, for fortress build */
|
||||||
void* userCtx; /* user ctx */
|
void* userCtx; /* user ctx */
|
||||||
@@ -239,6 +251,7 @@ WOLFSSL_API WOLFSSL_METHOD *wolfSSLv23_client_method_ex(void* heap);
|
|||||||
WOLFSSL_API WOLFSSL_METHOD *wolfDTLSv1_2_client_method_ex(void* heap);
|
WOLFSSL_API WOLFSSL_METHOD *wolfDTLSv1_2_client_method_ex(void* heap);
|
||||||
WOLFSSL_API WOLFSSL_METHOD *wolfDTLSv1_2_server_method_ex(void* heap);
|
WOLFSSL_API WOLFSSL_METHOD *wolfDTLSv1_2_server_method_ex(void* heap);
|
||||||
#endif
|
#endif
|
||||||
|
WOLFSSL_API WOLFSSL_METHOD *wolfSSLv23_method(void);
|
||||||
WOLFSSL_API WOLFSSL_METHOD *wolfSSLv3_server_method(void);
|
WOLFSSL_API WOLFSSL_METHOD *wolfSSLv3_server_method(void);
|
||||||
WOLFSSL_API WOLFSSL_METHOD *wolfSSLv3_client_method(void);
|
WOLFSSL_API WOLFSSL_METHOD *wolfSSLv3_client_method(void);
|
||||||
WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_server_method(void);
|
WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_server_method(void);
|
||||||
@@ -438,6 +451,13 @@ WOLFSSL_API int wolfSSL_sk_X509_push(STACK_OF(WOLFSSL_X509_NAME)* sk,
|
|||||||
WOLFSSL_X509* x509);
|
WOLFSSL_X509* x509);
|
||||||
WOLFSSL_API WOLFSSL_X509* wolfSSL_sk_X509_pop(STACK_OF(WOLFSSL_X509_NAME)* sk);
|
WOLFSSL_API WOLFSSL_X509* wolfSSL_sk_X509_pop(STACK_OF(WOLFSSL_X509_NAME)* sk);
|
||||||
WOLFSSL_API void wolfSSL_sk_X509_free(STACK_OF(WOLFSSL_X509_NAME)* sk);
|
WOLFSSL_API void wolfSSL_sk_X509_free(STACK_OF(WOLFSSL_X509_NAME)* sk);
|
||||||
|
WOLFSSL_API WOLFSSL_ASN1_OBJECT* wolfSSL_ASN1_OBJECT_new(void);
|
||||||
|
WOLFSSL_API void wolfSSL_ASN1_OBJECT_free(WOLFSSL_ASN1_OBJECT* obj);
|
||||||
|
WOLFSSL_API int wolfSSL_sk_ASN1_OBJECT_push(STACK_OF(WOLFSSL_ASN1_OBJEXT)* sk,
|
||||||
|
WOLFSSL_ASN1_OBJECT* obj);
|
||||||
|
WOLFSSL_API WOLFSSL_ASN1_OBJECT* wolfSSL_sk_ASN1_OBJCET_pop(
|
||||||
|
STACK_OF(WOLFSSL_ASN1_OBJECT)* sk);
|
||||||
|
WOLFSSL_API void wolfSSL_sk_ASN1_OBJECT_free(STACK_OF(WOLFSSL_ASN1_OBJECT)* sk);
|
||||||
|
|
||||||
WOLFSSL_API int wolfSSL_set_ex_data(WOLFSSL*, int, void*);
|
WOLFSSL_API int wolfSSL_set_ex_data(WOLFSSL*, int, void*);
|
||||||
WOLFSSL_API int wolfSSL_get_shutdown(const WOLFSSL*);
|
WOLFSSL_API int wolfSSL_get_shutdown(const WOLFSSL*);
|
||||||
@@ -501,11 +521,34 @@ WOLFSSL_API int wolfSSL_BIO_get_mem_data(WOLFSSL_BIO* bio,const unsigned char**
|
|||||||
WOLFSSL_API WOLFSSL_BIO* wolfSSL_BIO_new_mem_buf(void* buf, int len);
|
WOLFSSL_API WOLFSSL_BIO* wolfSSL_BIO_new_mem_buf(void* buf, int len);
|
||||||
|
|
||||||
|
|
||||||
WOLFSSL_API long wolfSSL_BIO_set_ssl(WOLFSSL_BIO*, WOLFSSL*, int flag);
|
WOLFSSL_API long wolfSSL_BIO_set_ssl(WOLFSSL_BIO*, WOLFSSL*, int flag);
|
||||||
WOLFSSL_API void wolfSSL_set_bio(WOLFSSL*, WOLFSSL_BIO* rd, WOLFSSL_BIO* wr);
|
WOLFSSL_API long wolfSSL_BIO_set_fd(WOLFSSL_BIO* b, int fd, int flag);
|
||||||
|
WOLFSSL_API void wolfSSL_set_bio(WOLFSSL*, WOLFSSL_BIO* rd, WOLFSSL_BIO* wr);
|
||||||
WOLFSSL_API int wolfSSL_add_all_algorithms(void);
|
WOLFSSL_API int wolfSSL_add_all_algorithms(void);
|
||||||
|
|
||||||
|
#ifndef NO_FILESYSTEM
|
||||||
|
WOLFSSL_API WOLFSSL_BIO_METHOD *wolfSSL_BIO_s_file(void);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
WOLFSSL_API WOLFSSL_BIO_METHOD *wolfSSL_BIO_s_bio(void);
|
||||||
|
WOLFSSL_API WOLFSSL_BIO_METHOD *wolfSSL_BIO_s_socket(void);
|
||||||
|
|
||||||
|
WOLFSSL_API long wolfSSL_BIO_ctrl(WOLFSSL_BIO *bp, int cmd, long larg, void *parg);
|
||||||
|
WOLFSSL_API long wolfSSL_BIO_int_ctrl(WOLFSSL_BIO *bp, int cmd, long larg, int iarg);
|
||||||
|
|
||||||
|
WOLFSSL_API int wolfSSL_BIO_set_write_buf_size(WOLFSSL_BIO *b, long size);
|
||||||
|
WOLFSSL_API int wolfSSL_BIO_make_bio_pair(WOLFSSL_BIO *b1, WOLFSSL_BIO *b2);
|
||||||
|
WOLFSSL_API int wolfSSL_BIO_ctrl_reset_read_request(WOLFSSL_BIO *b);
|
||||||
|
WOLFSSL_API int wolfSSL_BIO_nread0(WOLFSSL_BIO *bio, char **buf);
|
||||||
|
WOLFSSL_API int wolfSSL_BIO_nread(WOLFSSL_BIO *bio, char **buf, int num);
|
||||||
|
WOLFSSL_API int wolfSSL_BIO_nwrite(WOLFSSL_BIO *bio, char **buf, int num);
|
||||||
|
WOLFSSL_API int wolfSSL_BIO_reset(WOLFSSL_BIO *bio);
|
||||||
|
|
||||||
|
WOLFSSL_API int wolfSSL_BIO_seek(WOLFSSL_BIO *bio, int ofs);
|
||||||
|
WOLFSSL_API int wolfSSL_BIO_write_filename(WOLFSSL_BIO *bio, char *name);
|
||||||
|
WOLFSSL_API long wolfSSL_BIO_set_mem_eof_return(WOLFSSL_BIO *bio, int v);
|
||||||
|
WOLFSSL_API long wolfSSL_BIO_get_mem_ptr(WOLFSSL_BIO *bio, WOLFSSL_BUF_MEM **m);
|
||||||
|
|
||||||
WOLFSSL_API void wolfSSL_RAND_screen(void);
|
WOLFSSL_API void wolfSSL_RAND_screen(void);
|
||||||
WOLFSSL_API const char* wolfSSL_RAND_file_name(char*, unsigned long);
|
WOLFSSL_API const char* wolfSSL_RAND_file_name(char*, unsigned long);
|
||||||
WOLFSSL_API int wolfSSL_RAND_write_file(const char*);
|
WOLFSSL_API int wolfSSL_RAND_write_file(const char*);
|
||||||
@@ -574,6 +617,10 @@ WOLFSSL_API WOLFSSL_X509_STORE* wolfSSL_X509_STORE_new(void);
|
|||||||
WOLFSSL_API void wolfSSL_X509_STORE_free(WOLFSSL_X509_STORE*);
|
WOLFSSL_API void wolfSSL_X509_STORE_free(WOLFSSL_X509_STORE*);
|
||||||
WOLFSSL_API int wolfSSL_X509_STORE_add_cert(
|
WOLFSSL_API int wolfSSL_X509_STORE_add_cert(
|
||||||
WOLFSSL_X509_STORE*, WOLFSSL_X509*);
|
WOLFSSL_X509_STORE*, WOLFSSL_X509*);
|
||||||
|
WOLFSSL_API WOLFSSL_STACK* wolfSSL_X509_STORE_CTX_get_chain(
|
||||||
|
WOLFSSL_X509_STORE_CTX* ctx);
|
||||||
|
WOLFSSL_API int wolfSSL_X509_STORE_set_flags(WOLFSSL_X509_STORE* store,
|
||||||
|
unsigned long flag);
|
||||||
WOLFSSL_API int wolfSSL_X509_STORE_set_default_paths(WOLFSSL_X509_STORE*);
|
WOLFSSL_API int wolfSSL_X509_STORE_set_default_paths(WOLFSSL_X509_STORE*);
|
||||||
WOLFSSL_API int wolfSSL_X509_STORE_get_by_subject(WOLFSSL_X509_STORE_CTX*,
|
WOLFSSL_API int wolfSSL_X509_STORE_get_by_subject(WOLFSSL_X509_STORE_CTX*,
|
||||||
int, WOLFSSL_X509_NAME*, WOLFSSL_X509_OBJECT*);
|
int, WOLFSSL_X509_NAME*, WOLFSSL_X509_OBJECT*);
|
||||||
@@ -591,6 +638,9 @@ WOLFSSL_API int wolfSSL_X509_CRL_verify(WOLFSSL_X509_CRL*, WOLFSSL_EVP_PKE
|
|||||||
WOLFSSL_API void wolfSSL_X509_STORE_CTX_set_error(WOLFSSL_X509_STORE_CTX*,
|
WOLFSSL_API void wolfSSL_X509_STORE_CTX_set_error(WOLFSSL_X509_STORE_CTX*,
|
||||||
int);
|
int);
|
||||||
WOLFSSL_API void wolfSSL_X509_OBJECT_free_contents(WOLFSSL_X509_OBJECT*);
|
WOLFSSL_API void wolfSSL_X509_OBJECT_free_contents(WOLFSSL_X509_OBJECT*);
|
||||||
|
WOLFSSL_API WOLFSSL_EVP_PKEY* wolfSSL_d2i_PrivateKey(int type,
|
||||||
|
WOLFSSL_EVP_PKEY** out, const unsigned char **in, long inSz);
|
||||||
|
WOLFSSL_API WOLFSSL_EVP_PKEY* wolfSSL_PKEY_new(void);
|
||||||
WOLFSSL_API void wolfSSL_EVP_PKEY_free(WOLFSSL_EVP_PKEY*);
|
WOLFSSL_API void wolfSSL_EVP_PKEY_free(WOLFSSL_EVP_PKEY*);
|
||||||
WOLFSSL_API int wolfSSL_X509_cmp_current_time(const WOLFSSL_ASN1_TIME*);
|
WOLFSSL_API int wolfSSL_X509_cmp_current_time(const WOLFSSL_ASN1_TIME*);
|
||||||
WOLFSSL_API int wolfSSL_sk_X509_REVOKED_num(WOLFSSL_X509_REVOKED*);
|
WOLFSSL_API int wolfSSL_sk_X509_REVOKED_num(WOLFSSL_X509_REVOKED*);
|
||||||
@@ -606,7 +656,11 @@ WOLFSSL_API int wolfSSL_ASN1_INTEGER_cmp(const WOLFSSL_ASN1_INTEGER*,
|
|||||||
const WOLFSSL_ASN1_INTEGER*);
|
const WOLFSSL_ASN1_INTEGER*);
|
||||||
WOLFSSL_API long wolfSSL_ASN1_INTEGER_get(const WOLFSSL_ASN1_INTEGER*);
|
WOLFSSL_API long wolfSSL_ASN1_INTEGER_get(const WOLFSSL_ASN1_INTEGER*);
|
||||||
|
|
||||||
|
#ifdef OPENSSL_EXTRA
|
||||||
|
WOLFSSL_API WOLFSSL_BIGNUM *wolfSSL_ASN1_INTEGER_to_BN(const WOLFSSL_ASN1_INTEGER *ai,
|
||||||
|
WOLFSSL_BIGNUM *bn);
|
||||||
WOLFSSL_API STACK_OF(WOLFSSL_X509_NAME)* wolfSSL_load_client_CA_file(const char*);
|
WOLFSSL_API STACK_OF(WOLFSSL_X509_NAME)* wolfSSL_load_client_CA_file(const char*);
|
||||||
|
#endif
|
||||||
|
|
||||||
WOLFSSL_API void wolfSSL_CTX_set_client_CA_list(WOLFSSL_CTX*,
|
WOLFSSL_API void wolfSSL_CTX_set_client_CA_list(WOLFSSL_CTX*,
|
||||||
STACK_OF(WOLFSSL_X509_NAME)*);
|
STACK_OF(WOLFSSL_X509_NAME)*);
|
||||||
@@ -648,11 +702,73 @@ WOLFSSL_API long wolfSSL_CTX_sess_cache_full(WOLFSSL_CTX*);
|
|||||||
WOLFSSL_API long wolfSSL_CTX_sess_misses(WOLFSSL_CTX*);
|
WOLFSSL_API long wolfSSL_CTX_sess_misses(WOLFSSL_CTX*);
|
||||||
WOLFSSL_API long wolfSSL_CTX_sess_timeouts(WOLFSSL_CTX*);
|
WOLFSSL_API long wolfSSL_CTX_sess_timeouts(WOLFSSL_CTX*);
|
||||||
WOLFSSL_API long wolfSSL_CTX_sess_number(WOLFSSL_CTX*);
|
WOLFSSL_API long wolfSSL_CTX_sess_number(WOLFSSL_CTX*);
|
||||||
|
|
||||||
|
WOLFSSL_API long wolfSSL_CTX_add_extra_chain_cert(WOLFSSL_CTX*, WOLFSSL_X509*);
|
||||||
|
WOLFSSL_API long wolfSSL_CTX_sess_set_cache_size(WOLFSSL_CTX*, long);
|
||||||
WOLFSSL_API long wolfSSL_CTX_sess_get_cache_size(WOLFSSL_CTX*);
|
WOLFSSL_API long wolfSSL_CTX_sess_get_cache_size(WOLFSSL_CTX*);
|
||||||
|
|
||||||
|
WOLFSSL_API long wolfSSL_CTX_get_session_cache_mode(WOLFSSL_CTX*);
|
||||||
|
WOLFSSL_API int wolfSSL_CTX_get_read_ahead(WOLFSSL_CTX*);
|
||||||
|
WOLFSSL_API int wolfSSL_CTX_set_read_ahead(WOLFSSL_CTX*, int v);
|
||||||
|
WOLFSSL_API long wolfSSL_CTX_set_tlsext_status_arg(WOLFSSL_CTX*, void* arg);
|
||||||
|
WOLFSSL_API long wolfSSL_CTX_set_tlsext_opaque_prf_input_callback_arg(
|
||||||
|
WOLFSSL_CTX*, void* arg);
|
||||||
|
|
||||||
|
WOLFSSL_API unsigned long wolfSSL_set_options(WOLFSSL *s, unsigned long op);
|
||||||
|
WOLFSSL_API unsigned long wolfSSL_get_options(const WOLFSSL *s);
|
||||||
|
WOLFSSL_API long wolfSSL_clear_num_renegotiations(WOLFSSL *s);
|
||||||
|
WOLFSSL_API long wolfSSL_total_renegotiations(WOLFSSL *s);
|
||||||
|
WOLFSSL_API long wolfSSL_set_tmp_dh(WOLFSSL *s, WOLFSSL_DH *dh);
|
||||||
|
WOLFSSL_API long wolfSSL_set_tlsext_debug_arg(WOLFSSL *s, void *arg);
|
||||||
|
WOLFSSL_API long wolfSSL_set_tlsext_status_type(WOLFSSL *s, int type);
|
||||||
|
WOLFSSL_API long wolfSSL_set_tlsext_status_exts(WOLFSSL *s, void *arg);
|
||||||
|
WOLFSSL_API long wolfSSL_get_tlsext_status_ids(WOLFSSL *s, void *arg);
|
||||||
|
WOLFSSL_API long wolfSSL_set_tlsext_status_ids(WOLFSSL *s, void *arg);
|
||||||
|
WOLFSSL_API long wolfSSL_get_tlsext_status_ocsp_resp(WOLFSSL *s, unsigned char **resp);
|
||||||
|
WOLFSSL_API long wolfSSL_set_tlsext_status_ocsp_resp(WOLFSSL *s, unsigned char *resp, int len);
|
||||||
|
|
||||||
|
WOLFSSL_API void wolfSSL_CONF_modules_unload(int all);
|
||||||
|
WOLFSSL_API long wolfSSL_get_tlsext_status_exts(WOLFSSL *s, void *arg);
|
||||||
|
WOLFSSL_API long wolfSSL_get_verify_result(const WOLFSSL *ssl);
|
||||||
|
|
||||||
#define WOLFSSL_DEFAULT_CIPHER_LIST "" /* default all */
|
#define WOLFSSL_DEFAULT_CIPHER_LIST "" /* default all */
|
||||||
#define WOLFSSL_RSA_F4 0x10001L
|
#define WOLFSSL_RSA_F4 0x10001L
|
||||||
|
|
||||||
|
/* seperated out from other enums because of size */
|
||||||
|
enum {
|
||||||
|
/* bit flags (ie 0001 vs 0010) : each is 2 times previous value */
|
||||||
|
SSL_OP_MICROSOFT_SESS_ID_BUG = 1,
|
||||||
|
SSL_OP_NETSCAPE_CHALLENGE_BUG = 2,
|
||||||
|
SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG = 4,
|
||||||
|
SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG = 8,
|
||||||
|
SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER = 16,
|
||||||
|
SSL_OP_MSIE_SSLV2_RSA_PADDING = 32,
|
||||||
|
SSL_OP_SSLEAY_080_CLIENT_DH_BUG = 64,
|
||||||
|
SSL_OP_TLS_D5_BUG = 128,
|
||||||
|
SSL_OP_TLS_BLOCK_PADDING_BUG = 256,
|
||||||
|
SSL_OP_TLS_ROLLBACK_BUG = 512,
|
||||||
|
SSL_OP_ALL = 1024,
|
||||||
|
SSL_OP_EPHEMERAL_RSA = 2048,
|
||||||
|
SSL_OP_NO_SSLv3 = 4096,
|
||||||
|
SSL_OP_NO_TLSv1 = 8192,
|
||||||
|
SSL_OP_PKCS1_CHECK_1 = 16384,
|
||||||
|
SSL_OP_PKCS1_CHECK_2 = 32768,
|
||||||
|
SSL_OP_NETSCAPE_CA_DN_BUG = 65536,
|
||||||
|
SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG = 131072,
|
||||||
|
SSL_OP_SINGLE_DH_USE = 262144,
|
||||||
|
SSL_OP_NO_TICKET = 524288,
|
||||||
|
SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS = 1048576,
|
||||||
|
SSL_OP_NO_QUERY_MTU = 2097152,
|
||||||
|
SSL_OP_COOKIE_EXCHANGE = 4194304,
|
||||||
|
SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION = 8388608,
|
||||||
|
SSL_OP_SINGLE_ECDH_USE = 16777216,
|
||||||
|
SSL_OP_CIPHER_SERVER_PREFERENCE = 33554432,
|
||||||
|
SSL_OP_NO_TLSv1_1 = 67108864,
|
||||||
|
SSL_OP_NO_TLSv1_2 = 134217728,
|
||||||
|
SSL_OP_NO_COMPRESSION = 268435456,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
OCSP_NOCERTS = 1,
|
OCSP_NOCERTS = 1,
|
||||||
OCSP_NOINTERN = 2,
|
OCSP_NOINTERN = 2,
|
||||||
@@ -677,36 +793,9 @@ enum {
|
|||||||
WOLFSSL_OCSP_CHECKALL = 4,
|
WOLFSSL_OCSP_CHECKALL = 4,
|
||||||
|
|
||||||
WOLFSSL_CRL_CHECKALL = 1,
|
WOLFSSL_CRL_CHECKALL = 1,
|
||||||
|
WOLFSSL_CRL_CHECK = 27,
|
||||||
|
|
||||||
ASN1_GENERALIZEDTIME = 4,
|
ASN1_GENERALIZEDTIME = 4,
|
||||||
|
|
||||||
SSL_OP_MICROSOFT_SESS_ID_BUG = 1,
|
|
||||||
SSL_OP_NETSCAPE_CHALLENGE_BUG = 2,
|
|
||||||
SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG = 3,
|
|
||||||
SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG = 4,
|
|
||||||
SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER = 5,
|
|
||||||
SSL_OP_MSIE_SSLV2_RSA_PADDING = 6,
|
|
||||||
SSL_OP_SSLEAY_080_CLIENT_DH_BUG = 7,
|
|
||||||
SSL_OP_TLS_D5_BUG = 8,
|
|
||||||
SSL_OP_TLS_BLOCK_PADDING_BUG = 9,
|
|
||||||
SSL_OP_TLS_ROLLBACK_BUG = 10,
|
|
||||||
SSL_OP_ALL = 11,
|
|
||||||
SSL_OP_EPHEMERAL_RSA = 12,
|
|
||||||
SSL_OP_NO_SSLv3 = 13,
|
|
||||||
SSL_OP_NO_TLSv1 = 14,
|
|
||||||
SSL_OP_PKCS1_CHECK_1 = 15,
|
|
||||||
SSL_OP_PKCS1_CHECK_2 = 16,
|
|
||||||
SSL_OP_NETSCAPE_CA_DN_BUG = 17,
|
|
||||||
SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG = 18,
|
|
||||||
SSL_OP_SINGLE_DH_USE = 19,
|
|
||||||
SSL_OP_NO_TICKET = 20,
|
|
||||||
SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS = 21,
|
|
||||||
SSL_OP_NO_QUERY_MTU = 22,
|
|
||||||
SSL_OP_COOKIE_EXCHANGE = 23,
|
|
||||||
SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION = 24,
|
|
||||||
SSL_OP_SINGLE_ECDH_USE = 25,
|
|
||||||
SSL_OP_CIPHER_SERVER_PREFERENCE = 26,
|
|
||||||
|
|
||||||
SSL_MAX_SSL_SESSION_ID_LENGTH = 32,
|
SSL_MAX_SSL_SESSION_ID_LENGTH = 32,
|
||||||
|
|
||||||
EVP_R_BAD_DECRYPT = 2,
|
EVP_R_BAD_DECRYPT = 2,
|
||||||
@@ -854,6 +943,14 @@ enum { /* ERR Constants */
|
|||||||
ERR_TXT_STRING = 1
|
ERR_TXT_STRING = 1
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* bio misc */
|
||||||
|
enum {
|
||||||
|
WOLFSSL_BIO_ERROR = -1,
|
||||||
|
WOLFSSL_BIO_UNSET = -2,
|
||||||
|
WOLFSSL_BIO_SIZE = 17000 /* default BIO write size if not set */
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
WOLFSSL_API unsigned long wolfSSL_ERR_get_error_line_data(const char**, int*,
|
WOLFSSL_API unsigned long wolfSSL_ERR_get_error_line_data(const char**, int*,
|
||||||
const char**, int *);
|
const char**, int *);
|
||||||
|
|
||||||
@@ -873,6 +970,7 @@ WOLFSSL_API void wolfSSL_ERR_free_strings(void);
|
|||||||
WOLFSSL_API void wolfSSL_ERR_remove_state(unsigned long);
|
WOLFSSL_API void wolfSSL_ERR_remove_state(unsigned long);
|
||||||
WOLFSSL_API void wolfSSL_EVP_cleanup(void);
|
WOLFSSL_API void wolfSSL_EVP_cleanup(void);
|
||||||
WOLFSSL_API int wolfSSL_clear(WOLFSSL* ssl);
|
WOLFSSL_API int wolfSSL_clear(WOLFSSL* ssl);
|
||||||
|
WOLFSSL_API int wolfSSL_state(WOLFSSL* ssl);
|
||||||
|
|
||||||
WOLFSSL_API void wolfSSL_cleanup_all_ex_data(void);
|
WOLFSSL_API void wolfSSL_cleanup_all_ex_data(void);
|
||||||
WOLFSSL_API long wolfSSL_CTX_set_mode(WOLFSSL_CTX* ctx, long mode);
|
WOLFSSL_API long wolfSSL_CTX_set_mode(WOLFSSL_CTX* ctx, long mode);
|
||||||
@@ -880,7 +978,6 @@ WOLFSSL_API long wolfSSL_CTX_get_mode(WOLFSSL_CTX* ctx);
|
|||||||
WOLFSSL_API void wolfSSL_CTX_set_default_read_ahead(WOLFSSL_CTX* ctx, int m);
|
WOLFSSL_API void wolfSSL_CTX_set_default_read_ahead(WOLFSSL_CTX* ctx, int m);
|
||||||
WOLFSSL_API long wolfSSL_SSL_get_mode(WOLFSSL* ssl);
|
WOLFSSL_API long wolfSSL_SSL_get_mode(WOLFSSL* ssl);
|
||||||
|
|
||||||
WOLFSSL_API long wolfSSL_CTX_sess_set_cache_size(WOLFSSL_CTX*, long);
|
|
||||||
|
|
||||||
WOLFSSL_API int wolfSSL_CTX_set_default_verify_paths(WOLFSSL_CTX*);
|
WOLFSSL_API int wolfSSL_CTX_set_default_verify_paths(WOLFSSL_CTX*);
|
||||||
WOLFSSL_API int wolfSSL_CTX_set_session_id_context(WOLFSSL_CTX*,
|
WOLFSSL_API int wolfSSL_CTX_set_session_id_context(WOLFSSL_CTX*,
|
||||||
@@ -1290,6 +1387,7 @@ WOLFSSL_API int wolfSSL_SetTlsHmacInner(WOLFSSL*, unsigned char
|
|||||||
enum {
|
enum {
|
||||||
WOLFSSL_SERVER_END = 0,
|
WOLFSSL_SERVER_END = 0,
|
||||||
WOLFSSL_CLIENT_END = 1,
|
WOLFSSL_CLIENT_END = 1,
|
||||||
|
WOLFSSL_NEITHER_END = 3,
|
||||||
WOLFSSL_BLOCK_TYPE = 2,
|
WOLFSSL_BLOCK_TYPE = 2,
|
||||||
WOLFSSL_STREAM_TYPE = 3,
|
WOLFSSL_STREAM_TYPE = 3,
|
||||||
WOLFSSL_AEAD_TYPE = 4,
|
WOLFSSL_AEAD_TYPE = 4,
|
||||||
@@ -1748,7 +1846,8 @@ WOLFSSL_API int wolfSSL_UseSupportedQSH(WOLFSSL* ssl, unsigned short name);
|
|||||||
then will not send keys in the hello extension */
|
then will not send keys in the hello extension */
|
||||||
WOLFSSL_API int wolfSSL_UseClientQSHKeys(WOLFSSL* ssl, unsigned char flag);
|
WOLFSSL_API int wolfSSL_UseClientQSHKeys(WOLFSSL* ssl, unsigned char flag);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
|
#endif /* QSH */
|
||||||
|
|
||||||
/* TLS Extended Master Secret Extension */
|
/* TLS Extended Master Secret Extension */
|
||||||
WOLFSSL_API int wolfSSL_DisableExtendedMasterSecret(WOLFSSL* ssl);
|
WOLFSSL_API int wolfSSL_DisableExtendedMasterSecret(WOLFSSL* ssl);
|
||||||
@@ -1821,9 +1920,55 @@ WOLFSSL_API char* wolfSSL_ASN1_TIME_to_string(WOLFSSL_ASN1_TIME* time,
|
|||||||
|
|
||||||
#ifdef OPENSSL_EXTRA
|
#ifdef OPENSSL_EXTRA
|
||||||
|
|
||||||
WOLFSSL_API int wolfSSL_get_client_random(WOLFSSL* ssl, unsigned char* out,
|
#ifndef NO_FILESYSTEM
|
||||||
int outSz);
|
WOLFSSL_API long wolfSSL_BIO_set_fp(WOLFSSL_BIO *bio, XFILE fp, int c);
|
||||||
|
WOLFSSL_API long wolfSSL_BIO_get_fp(WOLFSSL_BIO *bio, XFILE* fp);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
WOLFSSL_API unsigned long wolfSSL_ERR_peek_last_error_line(const char **file, int *line);
|
||||||
|
WOLFSSL_API long wolfSSL_ctrl(WOLFSSL* ssl, int cmd, long opt, void* pt);
|
||||||
|
WOLFSSL_API long wolfSSL_CTX_ctrl(WOLFSSL_CTX* ctx, int cmd, long opt,void* pt);
|
||||||
|
|
||||||
|
#ifndef NO_CERTS
|
||||||
|
WOLFSSL_API int wolfSSL_check_private_key(const WOLFSSL* ssl);
|
||||||
|
WOLFSSL_API void* wolfSSL_X509_get_ext_d2i(const WOLFSSL_X509* x509,
|
||||||
|
int nid, int* c, int* idx);
|
||||||
|
WOLFSSL_API int wolfSSL_X509_digest(const WOLFSSL_X509* x509,
|
||||||
|
const WOLFSSL_EVP_MD* digest, unsigned char* buf, unsigned int* len);
|
||||||
|
WOLFSSL_API int wolfSSL_use_certificate(WOLFSSL* ssl, WOLFSSL_X509* x509);
|
||||||
|
WOLFSSL_API int wolfSSL_use_certificate_ASN1(WOLFSSL* ssl, unsigned char* der,
|
||||||
|
int derSz);
|
||||||
|
WOLFSSL_API int wolfSSL_use_PrivateKey(WOLFSSL* ssl, WOLFSSL_EVP_PKEY* pkey);
|
||||||
|
WOLFSSL_API int wolfSSL_use_PrivateKey_ASN1(int pri, WOLFSSL* ssl,
|
||||||
|
unsigned char* der, long derSz);
|
||||||
|
#ifndef NO_RSA
|
||||||
|
WOLFSSL_API int wolfSSL_use_RSAPrivateKey_ASN1(WOLFSSL* ssl, unsigned char* der,
|
||||||
|
long derSz);
|
||||||
|
#endif
|
||||||
|
#endif /* NO_CERTS */
|
||||||
|
|
||||||
|
WOLFSSL_API WOLFSSL_DH *wolfSSL_DSA_dup_DH(const WOLFSSL_DSA *r);
|
||||||
|
|
||||||
|
WOLFSSL_API int wolfSSL_SESSION_get_master_key(const WOLFSSL_SESSION* ses,
|
||||||
|
unsigned char* out, int outSz);
|
||||||
|
WOLFSSL_API int wolfSSL_SESSION_get_master_key_length(const WOLFSSL_SESSION* ses);
|
||||||
|
|
||||||
|
WOLFSSL_API void wolfSSL_CTX_set_cert_store(WOLFSSL_CTX* ctx,
|
||||||
|
WOLFSSL_X509_STORE* str);
|
||||||
|
WOLFSSL_X509* wolfSSL_d2i_X509_bio(WOLFSSL_BIO* bio, WOLFSSL_X509** x509);
|
||||||
|
WOLFSSL_API WOLFSSL_X509_STORE* wolfSSL_CTX_get_cert_store(WOLFSSL_CTX* ctx);
|
||||||
|
|
||||||
|
WOLFSSL_API size_t wolfSSL_BIO_ctrl_pending(WOLFSSL_BIO *b);
|
||||||
|
WOLFSSL_API size_t wolfSSL_get_server_random(const WOLFSSL *ssl,
|
||||||
|
unsigned char *out, size_t outlen);
|
||||||
|
WOLFSSL_API size_t wolfSSL_get_client_random(const WOLFSSL* ssl,
|
||||||
|
unsigned char* out, size_t outSz);
|
||||||
|
WOLFSSL_API pem_password_cb* wolfSSL_CTX_get_default_passwd_cb(WOLFSSL_CTX *ctx);
|
||||||
|
WOLFSSL_API void *wolfSSL_CTX_get_default_passwd_cb_userdata(WOLFSSL_CTX *ctx);
|
||||||
|
WOLFSSL_API int wolfSSL_CTX_use_PrivateKey(WOLFSSL_CTX *ctx, WOLFSSL_EVP_PKEY *pkey);
|
||||||
|
WOLFSSL_API WOLFSSL_X509 *wolfSSL_PEM_read_bio_X509(WOLFSSL_BIO *bp, WOLFSSL_X509 **x, pem_password_cb *cb, void *u);
|
||||||
|
WOLFSSL_API WOLFSSL_X509 *wolfSSL_PEM_read_bio_X509_AUX
|
||||||
|
(WOLFSSL_BIO *bp, WOLFSSL_X509 **x, pem_password_cb *cb, void *u);
|
||||||
|
|
||||||
/*lighttp compatibility */
|
/*lighttp compatibility */
|
||||||
|
|
||||||
@@ -1839,14 +1984,11 @@ struct WOLFSSL_X509_NAME_ENTRY {
|
|||||||
#if defined(HAVE_LIGHTY) || defined(WOLFSSL_MYSQL_COMPATIBLE) || defined(HAVE_STUNNEL)
|
#if defined(HAVE_LIGHTY) || defined(WOLFSSL_MYSQL_COMPATIBLE) || defined(HAVE_STUNNEL)
|
||||||
WOLFSSL_API void wolfSSL_X509_NAME_free(WOLFSSL_X509_NAME *name);
|
WOLFSSL_API void wolfSSL_X509_NAME_free(WOLFSSL_X509_NAME *name);
|
||||||
WOLFSSL_API char wolfSSL_CTX_use_certificate(WOLFSSL_CTX *ctx, WOLFSSL_X509 *x);
|
WOLFSSL_API char wolfSSL_CTX_use_certificate(WOLFSSL_CTX *ctx, WOLFSSL_X509 *x);
|
||||||
WOLFSSL_API int wolfSSL_CTX_use_PrivateKey(WOLFSSL_CTX *ctx, WOLFSSL_EVP_PKEY *pkey);
|
|
||||||
WOLFSSL_API int wolfSSL_BIO_read_filename(WOLFSSL_BIO *b, const char *name);
|
WOLFSSL_API int wolfSSL_BIO_read_filename(WOLFSSL_BIO *b, const char *name);
|
||||||
WOLFSSL_API WOLFSSL_BIO_METHOD* wolfSSL_BIO_s_file(void);
|
|
||||||
/* These are to be merged shortly */
|
/* These are to be merged shortly */
|
||||||
WOLFSSL_API const char * wolf_OBJ_nid2sn(int n);
|
WOLFSSL_API const char * wolfSSL_OBJ_nid2sn(int n);
|
||||||
WOLFSSL_API int wolf_OBJ_obj2nid(const WOLFSSL_ASN1_OBJECT *o);
|
WOLFSSL_API int wolfSSL_OBJ_obj2nid(const WOLFSSL_ASN1_OBJECT *o);
|
||||||
WOLFSSL_API int wolf_OBJ_sn2nid(const char *sn);
|
WOLFSSL_API int wolfSSL_OBJ_sn2nid(const char *sn);
|
||||||
WOLFSSL_API WOLFSSL_X509 *PEM_read_bio_WOLFSSL_X509(WOLFSSL_BIO *bp, WOLFSSL_X509 **x, pem_password_cb *cb, void *u);
|
|
||||||
WOLFSSL_API void wolfSSL_CTX_set_verify_depth(WOLFSSL_CTX *ctx,int depth);
|
WOLFSSL_API void wolfSSL_CTX_set_verify_depth(WOLFSSL_CTX *ctx,int depth);
|
||||||
WOLFSSL_API void* wolfSSL_get_app_data( const WOLFSSL *ssl);
|
WOLFSSL_API void* wolfSSL_get_app_data( const WOLFSSL *ssl);
|
||||||
WOLFSSL_API void wolfSSL_set_app_data(WOLFSSL *ssl, void *arg);
|
WOLFSSL_API void wolfSSL_set_app_data(WOLFSSL *ssl, void *arg);
|
||||||
@@ -1857,20 +1999,25 @@ WOLFSSL_API unsigned char *wolfSSL_SHA1(const unsigned char *d, size_t n, unsign
|
|||||||
WOLFSSL_API int wolfSSL_X509_check_private_key(WOLFSSL_X509*, WOLFSSL_EVP_PKEY*);
|
WOLFSSL_API int wolfSSL_X509_check_private_key(WOLFSSL_X509*, WOLFSSL_EVP_PKEY*);
|
||||||
WOLFSSL_API STACK_OF(WOLFSSL_X509_NAME) *wolfSSL_dup_CA_list( STACK_OF(WOLFSSL_X509_NAME) *sk );
|
WOLFSSL_API STACK_OF(WOLFSSL_X509_NAME) *wolfSSL_dup_CA_list( STACK_OF(WOLFSSL_X509_NAME) *sk );
|
||||||
|
|
||||||
/* end lighttpd, mysql, have_stunnel*/
|
/* end lighttpd*/
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(HAVE_STUNNEL) || defined(HAVE_LIGHTY) \
|
#if defined(HAVE_STUNNEL) || defined(HAVE_LIGHTY) \
|
||||||
|| defined(WOLFSSL_MYSQL_COMPATIBLE)
|
|| defined(WOLFSSL_MYSQL_COMPATIBLE) \
|
||||||
|
|| defined(OPENSSL_EXTRA)
|
||||||
|
|
||||||
WOLFSSL_API char * wolf_OBJ_nid2ln(int n);
|
WOLFSSL_API char* wolfSSL_OBJ_nid2ln(int n);
|
||||||
WOLFSSL_API int wolf_OBJ_txt2nid(const char *sn);
|
WOLFSSL_API int wolfSSL_OBJ_txt2nid(const char *sn);
|
||||||
WOLFSSL_API WOLFSSL_BIO* wolfSSL_BIO_new_file(const char *filename, const char *mode);
|
WOLFSSL_API WOLFSSL_BIO* wolfSSL_BIO_new_file(const char *filename, const char *mode);
|
||||||
WOLFSSL_API long wolfSSL_CTX_set_tmp_dh(WOLFSSL_CTX*, WOLFSSL_DH*);
|
WOLFSSL_API long wolfSSL_CTX_set_tmp_dh(WOLFSSL_CTX*, WOLFSSL_DH*);
|
||||||
WOLFSSL_API WOLFSSL_DH *wolfSSL_PEM_read_bio_DHparams(WOLFSSL_BIO *bp,
|
WOLFSSL_API WOLFSSL_DH *wolfSSL_PEM_read_bio_DHparams(WOLFSSL_BIO *bp,
|
||||||
WOLFSSL_DH **x, pem_password_cb *cb, void *u);
|
WOLFSSL_DH **x, pem_password_cb *cb, void *u);
|
||||||
WOLFSSL_API int PEM_write_bio_WOLFSSL_X509(WOLFSSL_BIO *bp, WOLFSSL_X509 *x);
|
WOLFSSL_API WOLFSSL_DSA *wolfSSL_PEM_read_bio_DSAparams(WOLFSSL_BIO *bp,
|
||||||
|
WOLFSSL_DSA **x, pem_password_cb *cb, void *u);
|
||||||
|
WOLFSSL_API int wolfSSL_PEM_write_bio_X509(WOLFSSL_BIO *bp, WOLFSSL_X509 *x);
|
||||||
|
WOLFSSL_API long wolfSSL_CTX_get_options(WOLFSSL_CTX* ctx);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* HAVE_STUNNEL || HAVE_LIGHTY */
|
#endif /* HAVE_STUNNEL || HAVE_LIGHTY */
|
||||||
@@ -1928,8 +2075,6 @@ WOLFSSL_API void* wolfSSL_sk_X509_value(STACK_OF(WOLFSSL_X509)*, int);
|
|||||||
|
|
||||||
WOLFSSL_API STACK_OF(WOLFSSL_X509)* wolfSSL_get_peer_cert_chain(const WOLFSSL*);
|
WOLFSSL_API STACK_OF(WOLFSSL_X509)* wolfSSL_get_peer_cert_chain(const WOLFSSL*);
|
||||||
|
|
||||||
WOLFSSL_API long wolfSSL_CTX_get_options(WOLFSSL_CTX* ctx);
|
|
||||||
|
|
||||||
WOLFSSL_API void* wolfSSL_SESSION_get_ex_data(const WOLFSSL_SESSION*, int);
|
WOLFSSL_API void* wolfSSL_SESSION_get_ex_data(const WOLFSSL_SESSION*, int);
|
||||||
|
|
||||||
WOLFSSL_API int wolfSSL_SESSION_set_ex_data(WOLFSSL_SESSION*, int, void*);
|
WOLFSSL_API int wolfSSL_SESSION_set_ex_data(WOLFSSL_SESSION*, int, void*);
|
||||||
@@ -1958,6 +2103,10 @@ WOLFSSL_API void wolfSSL_CTX_set_servername_arg(WOLFSSL_CTX *, void*);
|
|||||||
|
|
||||||
WOLFSSL_API void WOLFSSL_ERR_remove_thread_state(void*);
|
WOLFSSL_API void WOLFSSL_ERR_remove_thread_state(void*);
|
||||||
|
|
||||||
|
#ifndef NO_FILESYSTEM
|
||||||
|
WOLFSSL_API void wolfSSL_print_all_errors_fp(XFILE *fp);
|
||||||
|
#endif
|
||||||
|
|
||||||
WOLFSSL_API long wolfSSL_CTX_clear_options(WOLFSSL_CTX*, long);
|
WOLFSSL_API long wolfSSL_CTX_clear_options(WOLFSSL_CTX*, long);
|
||||||
|
|
||||||
WOLFSSL_API void wolfSSL_THREADID_set_callback(void (*threadid_func)(void*));
|
WOLFSSL_API void wolfSSL_THREADID_set_callback(void (*threadid_func)(void*));
|
||||||
|
|||||||
@@ -524,6 +524,7 @@ static INLINE void showPeer(WOLFSSL* ssl)
|
|||||||
#endif
|
#endif
|
||||||
#if defined(SHOW_CERTS) && defined(OPENSSL_EXTRA) && defined(KEEP_OUR_CERT)
|
#if defined(SHOW_CERTS) && defined(OPENSSL_EXTRA) && defined(KEEP_OUR_CERT)
|
||||||
ShowX509(wolfSSL_get_certificate(ssl), "our cert info:");
|
ShowX509(wolfSSL_get_certificate(ssl), "our cert info:");
|
||||||
|
printf("Peer verify result = %lu\n", wolfSSL_get_verify_result(ssl));
|
||||||
#endif /* SHOW_CERTS */
|
#endif /* SHOW_CERTS */
|
||||||
printf("SSL version is %s\n", wolfSSL_get_version(ssl));
|
printf("SSL version is %s\n", wolfSSL_get_version(ssl));
|
||||||
|
|
||||||
|
|||||||
@@ -124,6 +124,13 @@ WOLFSSL_API int wc_AesCbcEncrypt(Aes* aes, byte* out,
|
|||||||
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);
|
||||||
|
|
||||||
|
#ifdef HAVE_AES_ECB
|
||||||
|
WOLFSSL_API int wc_AesEcbEncrypt(Aes* aes, byte* out,
|
||||||
|
const byte* in, word32 sz);
|
||||||
|
WOLFSSL_API int wc_AesEcbDecrypt(Aes* aes, byte* out,
|
||||||
|
const byte* in, word32 sz);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* AES-CTR */
|
/* AES-CTR */
|
||||||
#ifdef WOLFSSL_AES_COUNTER
|
#ifdef WOLFSSL_AES_COUNTER
|
||||||
WOLFSSL_API void wc_AesCtrEncrypt(Aes* aes, byte* out,
|
WOLFSSL_API void wc_AesCtrEncrypt(Aes* aes, byte* out,
|
||||||
@@ -192,4 +199,3 @@ WOLFSSL_API int wc_AesGetKeySize(Aes* aes, word32* keySize);
|
|||||||
|
|
||||||
#endif /* NO_AES */
|
#endif /* NO_AES */
|
||||||
#endif /* WOLF_CRYPT_AES_H */
|
#endif /* WOLF_CRYPT_AES_H */
|
||||||
|
|
||||||
|
|||||||
@@ -303,14 +303,20 @@ enum Extensions_Sum {
|
|||||||
BASIC_CA_OID = 133,
|
BASIC_CA_OID = 133,
|
||||||
ALT_NAMES_OID = 131,
|
ALT_NAMES_OID = 131,
|
||||||
CRL_DIST_OID = 145,
|
CRL_DIST_OID = 145,
|
||||||
AUTH_INFO_OID = 69,
|
AUTH_INFO_OID = 69, /* id-pe 1 */
|
||||||
AUTH_KEY_OID = 149,
|
AUTH_KEY_OID = 149,
|
||||||
SUBJ_KEY_OID = 128,
|
SUBJ_KEY_OID = 128,
|
||||||
CERT_POLICY_OID = 146,
|
CERT_POLICY_OID = 146,
|
||||||
KEY_USAGE_OID = 129, /* 2.5.29.15 */
|
KEY_USAGE_OID = 129, /* 2.5.29.15 */
|
||||||
INHIBIT_ANY_OID = 168, /* 2.5.29.54 */
|
INHIBIT_ANY_OID = 168, /* 2.5.29.54 */
|
||||||
EXT_KEY_USAGE_OID = 151, /* 2.5.29.37 */
|
EXT_KEY_USAGE_OID = 151, /* 2.5.29.37 */
|
||||||
NAME_CONS_OID = 144 /* 2.5.29.30 */
|
NAME_CONS_OID = 144, /* 2.5.29.30 */
|
||||||
|
PRIV_KEY_USAGE_PERIOD_OID = 130, /* 2.5.29.16 */
|
||||||
|
SUBJECT_INFO_ACCESS = 79, /* id-pe 11 */
|
||||||
|
POLICY_MAP_OID = 147,
|
||||||
|
POLICY_CONST_OID = 150,
|
||||||
|
ISSUE_ALT_NAMES_OID = 132,
|
||||||
|
TLS_FEATURE_OID = 92 /* id-pe 24 */
|
||||||
};
|
};
|
||||||
|
|
||||||
enum CertificatePolicy_Sum {
|
enum CertificatePolicy_Sum {
|
||||||
@@ -475,6 +481,10 @@ struct DecodedCert {
|
|||||||
byte extExtKeyUsageSet; /* Extended Key Usage */
|
byte extExtKeyUsageSet; /* Extended Key Usage */
|
||||||
byte extExtKeyUsage; /* Extended Key usage bitfield */
|
byte extExtKeyUsage; /* Extended Key usage bitfield */
|
||||||
#ifdef OPENSSL_EXTRA
|
#ifdef OPENSSL_EXTRA
|
||||||
|
byte extCRLdistSet;
|
||||||
|
byte extCRLdistCrit;
|
||||||
|
byte extAuthInfoSet;
|
||||||
|
byte extAuthInfoCrit;
|
||||||
byte extBasicConstSet;
|
byte extBasicConstSet;
|
||||||
byte extBasicConstCrit;
|
byte extBasicConstCrit;
|
||||||
byte extSubjAltNameSet;
|
byte extSubjAltNameSet;
|
||||||
@@ -554,10 +564,22 @@ struct DecodedCert {
|
|||||||
#endif /* WOLFSSL_CERT_EXT */
|
#endif /* WOLFSSL_CERT_EXT */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
struct WOLFSSL_ASN1_OBJECT {
|
||||||
|
void* heap;
|
||||||
|
byte* obj;
|
||||||
|
int type; /* oid */
|
||||||
|
word32 objSz;
|
||||||
|
byte dynamic; /* if 1 then obj was dynamiclly created, 0 otherwise */
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
extern const char* BEGIN_CERT;
|
extern const char* BEGIN_CERT;
|
||||||
extern const char* END_CERT;
|
extern const char* END_CERT;
|
||||||
extern const char* BEGIN_CERT_REQ;
|
extern const char* BEGIN_CERT_REQ;
|
||||||
extern const char* END_CERT_REQ;
|
extern const char* END_CERT_REQ;
|
||||||
|
extern const char* BEGIN_DSA_PARAM;
|
||||||
|
extern const char* END_DSA_PARAM;
|
||||||
extern const char* BEGIN_DH_PARAM;
|
extern const char* BEGIN_DH_PARAM;
|
||||||
extern const char* END_DH_PARAM;
|
extern const char* END_DH_PARAM;
|
||||||
extern const char* BEGIN_X509_CRL;
|
extern const char* BEGIN_X509_CRL;
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ enum CertType {
|
|||||||
CERT_TYPE = 0,
|
CERT_TYPE = 0,
|
||||||
PRIVATEKEY_TYPE,
|
PRIVATEKEY_TYPE,
|
||||||
DH_PARAM_TYPE,
|
DH_PARAM_TYPE,
|
||||||
|
DSA_PARAM_TYPE,
|
||||||
CRL_TYPE,
|
CRL_TYPE,
|
||||||
CA_TYPE,
|
CA_TYPE,
|
||||||
ECC_PRIVATEKEY_TYPE,
|
ECC_PRIVATEKEY_TYPE,
|
||||||
@@ -157,11 +158,6 @@ typedef struct Cert {
|
|||||||
#endif
|
#endif
|
||||||
void* heap; /* heap hint */
|
void* heap; /* heap hint */
|
||||||
} Cert;
|
} Cert;
|
||||||
#endif /* WOLFSSL_CERT_GEN */
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef WOLFSSL_CERT_GEN
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Initialize and Set Certificate defaults:
|
/* Initialize and Set Certificate defaults:
|
||||||
|
|||||||
@@ -94,6 +94,12 @@ 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_Des3_EcbEncrypt(Des3* des, byte* out,
|
||||||
|
const byte* in, word32 sz);
|
||||||
|
|
||||||
|
/* ECB decrypt same process as encrypt but with decrypt key */
|
||||||
|
#define wc_Des_EcbDecrypt wc_Des_EcbEncrypt
|
||||||
|
#define wc_Des3_EcbDecrypt wc_Des3_EcbEncrypt
|
||||||
|
|
||||||
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);
|
||||||
|
|||||||
@@ -55,7 +55,18 @@ WOLFSSL_API int wolfSSL_SetLoggingCb(wolfSSL_Logging_cb log_function);
|
|||||||
#define WOLFSSL_STUB(m) \
|
#define WOLFSSL_STUB(m) \
|
||||||
WOLFSSL_MSG(WOLFSSL_LOG_CAT(wolfSSL Stub, m, not implemented))
|
WOLFSSL_MSG(WOLFSSL_LOG_CAT(wolfSSL Stub, m, not implemented))
|
||||||
|
|
||||||
|
#if defined(OPENSSL_EXTRA) || defined(DEBUG_WOLFSSL_VERBOSE)
|
||||||
|
/* make these variables global and declare them in logging.c */
|
||||||
|
extern volatile char wc_last_error_file[80];
|
||||||
|
extern volatile unsigned long wc_last_error_line;
|
||||||
|
extern volatile unsigned long wc_last_error;
|
||||||
|
|
||||||
|
void WOLFSSL_ERROR_LINE(int err, const char* func, unsigned int line,
|
||||||
|
const char* file, void* ctx);
|
||||||
|
#define WOLFSSL_ERROR(x) WOLFSSL_ERROR_LINE((x), __func__, __LINE__, __FILE__,NULL)
|
||||||
|
#else
|
||||||
void WOLFSSL_ERROR(int);
|
void WOLFSSL_ERROR(int);
|
||||||
|
#endif
|
||||||
void WOLFSSL_MSG(const char* msg);
|
void WOLFSSL_MSG(const char* msg);
|
||||||
void WOLFSSL_BUFFER(byte* buffer, word32 length);
|
void WOLFSSL_BUFFER(byte* buffer, word32 length);
|
||||||
|
|
||||||
|
|||||||
@@ -339,7 +339,8 @@
|
|||||||
DYNAMIC_TYPE_SESSION_TICK = 57,
|
DYNAMIC_TYPE_SESSION_TICK = 57,
|
||||||
DYNAMIC_TYPE_PKCS = 58,
|
DYNAMIC_TYPE_PKCS = 58,
|
||||||
DYNAMIC_TYPE_MUTEX = 59,
|
DYNAMIC_TYPE_MUTEX = 59,
|
||||||
DYNAMIC_TYPE_PKCS7 = 60
|
DYNAMIC_TYPE_PKCS7 = 60,
|
||||||
|
DYNAMIC_TYPE_ASN1 = 61
|
||||||
};
|
};
|
||||||
|
|
||||||
/* max error buffer string size */
|
/* max error buffer string size */
|
||||||
|
|||||||
Reference in New Issue
Block a user