forked from wolfSSL/wolfssl
Sniffer Watch Mode
1. Split the function ssl_SetWatchKey() into ssl_SetWatchKey_file() which loads the key from a named file and ssl_SetWatchKey_buffer() which loads the key from a provided buffer. file() uses buffer().
This commit is contained in:
@@ -4148,10 +4148,39 @@ int ssl_SetWatchKeyCtx(void* ctx, char* error)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int ssl_SetWatchKey(void* vSniffer, const char* keyFile, int keyType,
|
int ssl_SetWatchKey_buffer(void* vSniffer, const byte* key, word32 keySz,
|
||||||
const char* password, char* error)
|
int keyType, char* error)
|
||||||
{
|
{
|
||||||
SnifferSession* sniffer;
|
SnifferSession* sniffer;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if (vSniffer == NULL) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if (key == NULL || keySz == 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
sniffer = (SnifferSession*)vSniffer;
|
||||||
|
/* Remap the keyType from what the user can use to
|
||||||
|
* what wolfSSL_use_PrivateKey_buffer expects. */
|
||||||
|
keyType = (keyType == FILETYPE_PEM) ? WOLFSSL_FILETYPE_PEM :
|
||||||
|
WOLFSSL_FILETYPE_ASN1;
|
||||||
|
|
||||||
|
ret = wolfSSL_use_PrivateKey_buffer(sniffer->sslServer,
|
||||||
|
key, keySz, keyType);
|
||||||
|
if (ret != WOLFSSL_SUCCESS) {
|
||||||
|
SetError(KEY_FILE_STR, error, sniffer, FATAL_ERROR_STATE);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int ssl_SetWatchKey_file(void* vSniffer, const char* keyFile, int keyType,
|
||||||
|
const char* password, char* error)
|
||||||
|
{
|
||||||
byte* keyBuf = NULL;
|
byte* keyBuf = NULL;
|
||||||
word32 keyBufSz = 0;
|
word32 keyBufSz = 0;
|
||||||
int ret;
|
int ret;
|
||||||
@@ -4163,7 +4192,6 @@ int ssl_SetWatchKey(void* vSniffer, const char* keyFile, int keyType,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
sniffer = (SnifferSession*)vSniffer;
|
|
||||||
/* Remap the keyType from what the user can use to
|
/* Remap the keyType from what the user can use to
|
||||||
* what LoadKeyFile expects. */
|
* what LoadKeyFile expects. */
|
||||||
keyType = (keyType == FILETYPE_PEM) ? WOLFSSL_FILETYPE_PEM :
|
keyType = (keyType == FILETYPE_PEM) ? WOLFSSL_FILETYPE_PEM :
|
||||||
@@ -4176,15 +4204,11 @@ int ssl_SetWatchKey(void* vSniffer, const char* keyFile, int keyType,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = wolfSSL_use_PrivateKey_buffer(sniffer->sslServer,
|
ret = ssl_SetWatchKey_buffer(vSniffer, keyBuf, keyBufSz, FILETYPE_DER,
|
||||||
keyBuf, keyBufSz, WOLFSSL_FILETYPE_ASN1);
|
error);
|
||||||
if (ret != WOLFSSL_SUCCESS) {
|
|
||||||
SetError(KEY_FILE_STR, error, sniffer, FATAL_ERROR_STATE);
|
|
||||||
free(keyBuf);
|
free(keyBuf);
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* WOLFSSL_SNIFFER_WATCH */
|
#endif /* WOLFSSL_SNIFFER_WATCH */
|
||||||
|
@@ -208,7 +208,7 @@ static int myWatchCb(void* vSniffer,
|
|||||||
if (certName == NULL)
|
if (certName == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
return ssl_SetWatchKey(vSniffer, certName, FILETYPE_PEM, NULL, error);
|
return ssl_SetWatchKey_file(vSniffer, certName, FILETYPE_PEM, NULL, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -179,7 +179,12 @@ WOLFSSL_API
|
|||||||
SSL_SNIFFER_API int ssl_SetWatchKeyCtx(void* ctx, char* error);
|
SSL_SNIFFER_API int ssl_SetWatchKeyCtx(void* ctx, char* error);
|
||||||
|
|
||||||
WOLFSSL_API
|
WOLFSSL_API
|
||||||
SSL_SNIFFER_API int ssl_SetWatchKey(void* vSniffer,
|
SSL_SNIFFER_API int ssl_SetWatchKey_buffer(void* vSniffer,
|
||||||
|
const unsigned char* key, unsigned int keySz,
|
||||||
|
int keyType, char* error);
|
||||||
|
|
||||||
|
WOLFSSL_API
|
||||||
|
SSL_SNIFFER_API int ssl_SetWatchKey_file(void* vSniffer,
|
||||||
const char* keyFile, int keyType,
|
const char* keyFile, int keyType,
|
||||||
const char* password, char* error);
|
const char* password, char* error);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user