Skip to content

Commit eaf4af5

Browse files
committed
refactor to WOLFSSL_SET_CERT_TYPE
1 parent 5cb2103 commit eaf4af5

File tree

1 file changed

+37
-140
lines changed

1 file changed

+37
-140
lines changed

src/ssl.c

Lines changed: 37 additions & 140 deletions
Original file line numberDiff line numberDiff line change
@@ -8806,149 +8806,46 @@ 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)
8815-
{
8816-
int i;
8817-
8818-
if (ctx == NULL || bufLen > MAX_CLIENT_CERT_TYPE_CNT) {
8819-
return BAD_FUNC_ARG;
8820-
}
8821-
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];
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;
8855-
}
8856-
8857-
/* if buf is set to NULL or bufLen is set to zero, it defaults the setting*/
8858-
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;
8862-
return WOLFSSL_SUCCESS;
8863-
}
8864-
8865-
if (!isArrayUnique(buf, (size_t)bufLen))
8866-
return BAD_FUNC_ARG;
8867-
8868-
for (i = 0; i < bufLen; i++){
8869-
if (buf[i] != WOLFSSL_CERT_TYPE_RPK && buf[i] != WOLFSSL_CERT_TYPE_X509)
8870-
return BAD_FUNC_ARG;
8871-
8872-
ctx->rpkConfig.preferred_ServerCertTypes[i] = (byte)buf[i];
8873-
}
8874-
ctx->rpkConfig.preferred_ServerCertTypeCnt = bufLen;
8875-
8876-
return WOLFSSL_SUCCESS;
8877-
}
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)
8885-
{
8886-
int i;
8887-
8888-
if (ssl == NULL || bufLen > MAX_CLIENT_CERT_TYPE_CNT) {
8889-
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))
8903-
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;
8914-
}
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)
8922-
{
8923-
int i;
8924-
8925-
if (ssl == NULL || bufLen > MAX_SERVER_CERT_TYPE_CNT) {
8926-
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))
8940-
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;
8951-
}
8813+
#define WOLFSSL_SET_CERT_TYPE(CTX, str, clsv, ClSv, CLSV) \
8814+
int wolfSSL##CTX##_set_##clsv##_cert_type(WOLFSSL##CTX* x,\
8815+
const char* buf, int bufLen)\
8816+
{\
8817+
int i;\
8818+
\
8819+
if (x == NULL || bufLen > MAX_##CLSV##_CERT_TYPE_CNT) {\
8820+
return BAD_FUNC_ARG;\
8821+
}\
8822+
\
8823+
/* if buf is set to NULL or bufLen is zero, it defaults the setting*/\
8824+
if (buf == NULL || bufLen == 0) {\
8825+
(str).rpkConfig.preferred_##ClSv##CertTypeCnt = 1;\
8826+
(str).rpkConfig.preferred_##ClSv##CertTypes[0]= WOLFSSL_CERT_TYPE_X509;\
8827+
(str).rpkConfig.preferred_##ClSv##CertTypes[1]= WOLFSSL_CERT_TYPE_X509;\
8828+
return WOLFSSL_SUCCESS;\
8829+
}\
8830+
\
8831+
if (!isArrayUnique(buf, (size_t)bufLen))\
8832+
return BAD_FUNC_ARG;\
8833+
\
8834+
for (i = 0; i < bufLen; i++){\
8835+
if (buf[i] != WOLFSSL_CERT_TYPE_RPK && \
8836+
buf[i] != WOLFSSL_CERT_TYPE_X509)\
8837+
return BAD_FUNC_ARG;\
8838+
\
8839+
(str).rpkConfig.preferred_##ClSv##CertTypes[i] = (byte)buf[i];\
8840+
}\
8841+
(str).rpkConfig.preferred_##ClSv##CertTypeCnt = bufLen;\
8842+
\
8843+
return WOLFSSL_SUCCESS;\
8844+
}
8845+
WOLFSSL_SET_CERT_TYPE(_CTX, *x, client, Client, CLIENT)
8846+
WOLFSSL_SET_CERT_TYPE(_CTX, *x, server, Server, SERVER)
8847+
WOLFSSL_SET_CERT_TYPE(, x->options, client, Client, CLIENT)
8848+
WOLFSSL_SET_CERT_TYPE(, x->options, server, Server, SERVER)
89528849

89538850
/* get negotiated certificate type value and return it to the second parameter.
89548851
* cert type value:

0 commit comments

Comments
 (0)