Skip to content

Commit ae76092

Browse files
authored
Merge pull request #9208 from effbiae/set-cert-type
refactor to WOLFSSL_SET_CERT_TYPE
2 parents 9cf91e1 + b20f3da commit ae76092

File tree

1 file changed

+38
-111
lines changed

1 file changed

+38
-111
lines changed

src/ssl.c

Lines changed: 38 additions & 111 deletions
Original file line numberDiff line numberDiff line change
@@ -8806,148 +8806,75 @@ 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+
byte* certTypeCnt;
8818+
byte* certTypes;
88178819

8818-
if (ctx == NULL || bufLen > MAX_CLIENT_CERT_TYPE_CNT) {
8820+
if (cfg == NULL || bufLen > (client ? MAX_CLIENT_CERT_TYPE_CNT :
8821+
MAX_SERVER_CERT_TYPE_CNT)) {
88198822
return BAD_FUNC_ARG;
88208823
}
88218824

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;
8825+
if (client) {
8826+
certTypeCnt = &cfg->preferred_ClientCertTypeCnt;
8827+
certTypes = cfg->preferred_ClientCertTypes;
88288828
}
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];
8838-
}
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;
8829+
else {
8830+
certTypeCnt = &cfg->preferred_ServerCertTypeCnt;
8831+
certTypes = cfg->preferred_ServerCertTypes;
88558832
}
8856-
8857-
/* if buf is set to NULL or bufLen is set to zero, it defaults the setting*/
8833+
/* if buf is set to NULL or bufLen is zero, it defaults the setting*/
88588834
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;
8835+
*certTypeCnt = 1;
8836+
for (i = 0; i < 2; i++)
8837+
certTypes[i] = WOLFSSL_CERT_TYPE_X509;
88628838
return WOLFSSL_SUCCESS;
88638839
}
88648840

88658841
if (!isArrayUnique(buf, (size_t)bufLen))
88668842
return BAD_FUNC_ARG;
88678843

8868-
for (i = 0; i < bufLen; i++){
8844+
for (i = 0; i < bufLen; i++) {
88698845
if (buf[i] != WOLFSSL_CERT_TYPE_RPK && buf[i] != WOLFSSL_CERT_TYPE_X509)
88708846
return BAD_FUNC_ARG;
8871-
8872-
ctx->rpkConfig.preferred_ServerCertTypes[i] = (byte)buf[i];
8847+
certTypes[i] = (byte)buf[i];
88738848
}
8874-
ctx->rpkConfig.preferred_ServerCertTypeCnt = bufLen;
8849+
*certTypeCnt = bufLen;
88758850

88768851
return WOLFSSL_SUCCESS;
88778852
}
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)
8853+
int wolfSSL_set_client_cert_type(WOLFSSL* ssl, const char* buf, int buflen)
88858854
{
8886-
int i;
8887-
8888-
if (ssl == NULL || bufLen > MAX_CLIENT_CERT_TYPE_CNT) {
8855+
if (ssl == NULL)
88898856
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))
8857+
return set_cert_type(&ssl->options.rpkConfig, 1, buf, buflen);
8858+
}
8859+
int wolfSSL_set_server_cert_type(WOLFSSL* ssl, const char* buf, int buflen)
8860+
{
8861+
if (ssl == NULL)
89038862
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;
8863+
return set_cert_type(&ssl->options.rpkConfig, 0, buf, buflen);
89148864
}
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)
8865+
int wolfSSL_CTX_set_client_cert_type(WOLFSSL_CTX* ctx,
8866+
const char* buf, int buflen)
89228867
{
8923-
int i;
8924-
8925-
if (ssl == NULL || bufLen > MAX_SERVER_CERT_TYPE_CNT) {
8868+
if (ctx == NULL)
89268869
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))
8870+
return set_cert_type(&ctx->rpkConfig, 1, buf, buflen);
8871+
}
8872+
int wolfSSL_CTX_set_server_cert_type(WOLFSSL_CTX* ctx,
8873+
const char* buf, int buflen)
8874+
{
8875+
if (ctx == NULL)
89408876
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;
8877+
return set_cert_type(&ctx->rpkConfig, 0, buf, buflen);
89518878
}
89528879

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

0 commit comments

Comments
 (0)