@@ -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