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