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