Skip to content

Commit d8d13f1

Browse files
committed
refactor to set_cert_type
1 parent b90720c commit d8d13f1

File tree

1 file changed

+38
-112
lines changed

1 file changed

+38
-112
lines changed

src/ssl.c

Lines changed: 38 additions & 112 deletions
Original file line numberDiff line numberDiff line change
@@ -8806,148 +8806,74 @@ static int isArrayUnique(const char* buf, size_t len)
88068806
return 1;
88078807
}
88088808

8809-
/* Set user preference for the client_cert_type exetnsion.
8809+
/* Set user preference for the {client,server}_cert_type extension.
88108810
* Takes byte array containing cert types the caller can provide to its peer.
88118811
* Cert types are in preferred order in the array.
88128812
*/
8813-
int wolfSSL_CTX_set_client_cert_type(WOLFSSL_CTX* ctx,
8814-
const char* buf, int bufLen)
8813+
static int set_cert_type(RpkConfig* cfg,
8814+
int client, const char* buf, int bufLen)
88158815
{
88168816
int i;
8817-
8818-
if (ctx == NULL || bufLen > MAX_CLIENT_CERT_TYPE_CNT) {
8817+
if (cfg == NULL || bufLen > (client ? MAX_CLIENT_CERT_TYPE_CNT :
8818+
MAX_SERVER_CERT_TYPE_CNT)) {
88198819
return BAD_FUNC_ARG;
88208820
}
88218821

8822-
/* if buf is set to NULL or bufLen is set to zero, it defaults the setting*/
8823-
if (buf == NULL || bufLen == 0) {
8824-
ctx->rpkConfig.preferred_ClientCertTypeCnt = 1;
8825-
ctx->rpkConfig.preferred_ClientCertTypes[0]= WOLFSSL_CERT_TYPE_X509;
8826-
ctx->rpkConfig.preferred_ClientCertTypes[1]= WOLFSSL_CERT_TYPE_X509;
8827-
return WOLFSSL_SUCCESS;
8828-
}
8829-
8830-
if (!isArrayUnique(buf, (size_t)bufLen))
8831-
return BAD_FUNC_ARG;
8832-
8833-
for (i = 0; i < bufLen; i++){
8834-
if (buf[i] != WOLFSSL_CERT_TYPE_RPK && buf[i] != WOLFSSL_CERT_TYPE_X509)
8835-
return BAD_FUNC_ARG;
8836-
8837-
ctx->rpkConfig.preferred_ClientCertTypes[i] = (byte)buf[i];
8822+
byte* certTypeCnt;
8823+
byte* certTypes;
8824+
if (client) {
8825+
certTypeCnt = &cfg->preferred_ClientCertTypeCnt;
8826+
certTypes = cfg->preferred_ClientCertTypes;
88388827
}
8839-
ctx->rpkConfig.preferred_ClientCertTypeCnt = bufLen;
8840-
8841-
return WOLFSSL_SUCCESS;
8842-
}
8843-
8844-
/* Set user preference for the server_cert_type exetnsion.
8845-
* Takes byte array containing cert types the caller can provide to its peer.
8846-
* Cert types are in preferred order in the array.
8847-
*/
8848-
int wolfSSL_CTX_set_server_cert_type(WOLFSSL_CTX* ctx,
8849-
const char* buf, int bufLen)
8850-
{
8851-
int i;
8852-
8853-
if (ctx == NULL || bufLen > MAX_SERVER_CERT_TYPE_CNT) {
8854-
return BAD_FUNC_ARG;
8828+
else {
8829+
certTypeCnt = &cfg->preferred_ServerCertTypeCnt;
8830+
certTypes = cfg->preferred_ServerCertTypes;
88558831
}
8856-
8857-
/* if buf is set to NULL or bufLen is set to zero, it defaults the setting*/
8832+
/* if buf is set to NULL or bufLen is zero, it defaults the setting*/
88588833
if (buf == NULL || bufLen == 0) {
8859-
ctx->rpkConfig.preferred_ServerCertTypeCnt = 1;
8860-
ctx->rpkConfig.preferred_ServerCertTypes[0]= WOLFSSL_CERT_TYPE_X509;
8861-
ctx->rpkConfig.preferred_ServerCertTypes[1]= WOLFSSL_CERT_TYPE_X509;
8834+
*certTypeCnt = 1;
8835+
for (i = 0; i < 2; i++)
8836+
certTypes[i] = WOLFSSL_CERT_TYPE_X509;
88628837
return WOLFSSL_SUCCESS;
88638838
}
88648839

88658840
if (!isArrayUnique(buf, (size_t)bufLen))
88668841
return BAD_FUNC_ARG;
88678842

8868-
for (i = 0; i < bufLen; i++){
8843+
for (i = 0; i < bufLen; i++) {
88698844
if (buf[i] != WOLFSSL_CERT_TYPE_RPK && buf[i] != WOLFSSL_CERT_TYPE_X509)
88708845
return BAD_FUNC_ARG;
8871-
8872-
ctx->rpkConfig.preferred_ServerCertTypes[i] = (byte)buf[i];
8846+
certTypes[i] = (byte)buf[i];
88738847
}
8874-
ctx->rpkConfig.preferred_ServerCertTypeCnt = bufLen;
8848+
*certTypeCnt = bufLen;
88758849

88768850
return WOLFSSL_SUCCESS;
88778851
}
8878-
8879-
/* Set user preference for the client_cert_type exetnsion.
8880-
* Takes byte array containing cert types the caller can provide to its peer.
8881-
* Cert types are in preferred order in the array.
8882-
*/
8883-
int wolfSSL_set_client_cert_type(WOLFSSL* ssl,
8884-
const char* buf, int bufLen)
8852+
int wolfSSL_set_client_cert_type(WOLFSSL* ssl, const char* buf, int buflen)
88858853
{
8886-
int i;
8887-
8888-
if (ssl == NULL || bufLen > MAX_CLIENT_CERT_TYPE_CNT) {
8854+
if (ssl == NULL)
88898855
return BAD_FUNC_ARG;
8890-
}
8891-
8892-
/* if buf is set to NULL or bufLen is set to zero, it defaults the setting*/
8893-
if (buf == NULL || bufLen == 0) {
8894-
ssl->options.rpkConfig.preferred_ClientCertTypeCnt = 1;
8895-
ssl->options.rpkConfig.preferred_ClientCertTypes[0]
8896-
= WOLFSSL_CERT_TYPE_X509;
8897-
ssl->options.rpkConfig.preferred_ClientCertTypes[1]
8898-
= WOLFSSL_CERT_TYPE_X509;
8899-
return WOLFSSL_SUCCESS;
8900-
}
8901-
8902-
if (!isArrayUnique(buf, (size_t)bufLen))
8856+
return set_cert_type(&ssl->options.rpkConfig, 1, buf, buflen);
8857+
}
8858+
int wolfSSL_set_server_cert_type(WOLFSSL* ssl, const char* buf, int buflen)
8859+
{
8860+
if (ssl == NULL)
89038861
return BAD_FUNC_ARG;
8904-
8905-
for (i = 0; i < bufLen; i++){
8906-
if (buf[i] != WOLFSSL_CERT_TYPE_RPK && buf[i] != WOLFSSL_CERT_TYPE_X509)
8907-
return BAD_FUNC_ARG;
8908-
8909-
ssl->options.rpkConfig.preferred_ClientCertTypes[i] = (byte)buf[i];
8910-
}
8911-
ssl->options.rpkConfig.preferred_ClientCertTypeCnt = bufLen;
8912-
8913-
return WOLFSSL_SUCCESS;
8862+
return set_cert_type(&ssl->options.rpkConfig, 0, buf, buflen);
89148863
}
8915-
8916-
/* Set user preference for the server_cert_type exetnsion.
8917-
* Takes byte array containing cert types the caller can provide to its peer.
8918-
* Cert types are in preferred order in the array.
8919-
*/
8920-
int wolfSSL_set_server_cert_type(WOLFSSL* ssl,
8921-
const char* buf, int bufLen)
8864+
int wolfSSL_CTX_set_client_cert_type(WOLFSSL_CTX* ctx,
8865+
const char* buf, int buflen)
89228866
{
8923-
int i;
8924-
8925-
if (ssl == NULL || bufLen > MAX_SERVER_CERT_TYPE_CNT) {
8867+
if (ctx == NULL)
89268868
return BAD_FUNC_ARG;
8927-
}
8928-
8929-
/* if buf is set to NULL or bufLen is set to zero, it defaults the setting*/
8930-
if (buf == NULL || bufLen == 0) {
8931-
ssl->options.rpkConfig.preferred_ServerCertTypeCnt = 1;
8932-
ssl->options.rpkConfig.preferred_ServerCertTypes[0]
8933-
= WOLFSSL_CERT_TYPE_X509;
8934-
ssl->options.rpkConfig.preferred_ServerCertTypes[1]
8935-
= WOLFSSL_CERT_TYPE_X509;
8936-
return WOLFSSL_SUCCESS;
8937-
}
8938-
8939-
if (!isArrayUnique(buf, (size_t)bufLen))
8869+
return set_cert_type(&ctx->rpkConfig, 1, buf, buflen);
8870+
}
8871+
int wolfSSL_CTX_set_server_cert_type(WOLFSSL_CTX* ctx,
8872+
const char* buf, int buflen)
8873+
{
8874+
if (ctx == NULL)
89408875
return BAD_FUNC_ARG;
8941-
8942-
for (i = 0; i < bufLen; i++){
8943-
if (buf[i] != WOLFSSL_CERT_TYPE_RPK && buf[i] != WOLFSSL_CERT_TYPE_X509)
8944-
return BAD_FUNC_ARG;
8945-
8946-
ssl->options.rpkConfig.preferred_ServerCertTypes[i] = (byte)buf[i];
8947-
}
8948-
ssl->options.rpkConfig.preferred_ServerCertTypeCnt = bufLen;
8949-
8950-
return WOLFSSL_SUCCESS;
8876+
return set_cert_type(&ctx->rpkConfig, 0, buf, buflen);
89518877
}
89528878

89538879
/* get negotiated certificate type value and return it to the second parameter.

0 commit comments

Comments
 (0)