Loading apps/s_client.c +2 −2 Original line number Diff line number Diff line Loading @@ -2463,7 +2463,7 @@ static int authz_tlsext_generate_cb(SSL *s, unsigned short ext_type, return 1; } } //no auth extension to send /* no auth extension to send */ return -1; } Loading Loading @@ -2496,7 +2496,7 @@ static int auth_suppdata_generate_cb(SSL *s, unsigned short supp_data_type, return 1; } } //no supplemental data to send /* no supplemental data to send */ return -1; } Loading apps/s_server.c +2 −2 Original line number Diff line number Diff line Loading @@ -3598,7 +3598,7 @@ static int authz_tlsext_generate_cb(SSL *s, unsigned short ext_type, return 1; } } //no auth extension to send /* no auth extension to send */ return -1; } Loading Loading @@ -3631,7 +3631,7 @@ static int auth_suppdata_generate_cb(SSL *s, unsigned short supp_data_type, return 1; } } //no supplemental data to send /* no supplemental data to send */ return -1; } #endif Loading ssl/s3_clnt.c +10 −7 Original line number Diff line number Diff line Loading @@ -3645,7 +3645,7 @@ int tls1_send_client_supplemental_data(SSL *s, int *skip) SSLerr(SSL_F_TLS1_SEND_CLIENT_SUPPLEMENTAL_DATA,ERR_R_BUF_LIB); return 0; } //if first entry, write handshake message type /* if first entry, write handshake message type */ if (length == 0) { if (!BUF_MEM_grow_clean(s->init_buf, 4)) Loading @@ -3655,9 +3655,12 @@ int tls1_send_client_supplemental_data(SSL *s, int *skip) } p = (unsigned char *)s->init_buf->data; *(p++) = SSL3_MT_SUPPLEMENTAL_DATA; //update message length when all callbacks complete /* update message length when all * callbacks complete */ size_loc = p; //skip over handshake length field (3 bytes) and supp_data length field (3 bytes) /* skip over handshake length field (3 * bytes) and supp_data length field * (3 bytes) */ p += 3 + 3; length += 1 +3 +3; } Loading @@ -3674,9 +3677,9 @@ int tls1_send_client_supplemental_data(SSL *s, int *skip) } if (length > 0) { //write handshake length /* write handshake length */ l2n3(length - 4, size_loc); //supp_data length /* supp_data length */ l2n3(length - 7, size_loc); s->state = SSL3_ST_CW_SUPPLEMENTAL_DATA_B; s->init_num = length; Loading @@ -3685,7 +3688,7 @@ int tls1_send_client_supplemental_data(SSL *s, int *skip) } } //no supp data message sent /* no supp data message sent */ *skip = 1; s->init_num = 0; s->init_off = 0; Loading Loading @@ -3728,7 +3731,7 @@ int tls1_get_server_supplemental_data(SSL *s) { n2s(p, supp_data_entry_type); n2s(p, supp_data_entry_len); //if there is a callback for this supp data type, send it /* if there is a callback for this supp data type, send it */ for (i=0; i < s->ctx->cli_supp_data_records_count; i++) { if (s->ctx->cli_supp_data_records[i].supp_data_type == supp_data_entry_type && s->ctx->cli_supp_data_records[i].fn1) Loading ssl/s3_srvr.c +16 −12 Original line number Diff line number Diff line Loading @@ -3734,12 +3734,13 @@ int tls1_send_server_supplemental_data(SSL *s, int *skip) SSLerr(SSL_F_TLS1_SEND_SERVER_SUPPLEMENTAL_DATA,ERR_R_BUF_LIB); return 0; } //write supp data entry... //if first entry, write handshake message type //jump back to write length at end /* write supp data entry... * if first entry, write handshake message type * jump back to write length at end */ if (length == 0) { //1 byte message type + 3 bytes for message length /* 1 byte message type + 3 bytes for * message length */ if (!BUF_MEM_grow_clean(s->init_buf, 4)) { SSLerr(SSL_F_TLS1_SEND_SERVER_SUPPLEMENTAL_DATA,ERR_R_BUF_LIB); Loading @@ -3747,13 +3748,15 @@ int tls1_send_server_supplemental_data(SSL *s, int *skip) } p = (unsigned char *)s->init_buf->data; *(p++) = SSL3_MT_SUPPLEMENTAL_DATA; //hold on to length field to update later /* hold on to length field to update later */ size_loc = p; //skip over handshake length field (3 bytes) and supp_data length field (3 bytes) /* skip over handshake length field (3 * bytes) and supp_data length field * (3 bytes) */ p += 3 + 3; length += 1 +3 +3; } //2 byte supp data type + 2 byte length + outlen /* 2 byte supp data type + 2 byte length + outlen */ if (!BUF_MEM_grow(s->init_buf, outlen + 4)) { SSLerr(SSL_F_TLS1_SEND_SERVER_SUPPLEMENTAL_DATA,ERR_R_BUF_LIB); Loading @@ -3762,15 +3765,16 @@ int tls1_send_server_supplemental_data(SSL *s, int *skip) s2n(record->supp_data_type, p); s2n(outlen, p); memcpy(p, out, outlen); //update length to supp data type (2 bytes) + supp data length (2 bytes) + supp data /* update length to supp data type (2 bytes) + * supp data length (2 bytes) + supp data */ length += (outlen + 4); p += outlen; } if (length > 0) { //write handshake length /* write handshake length */ l2n3(length - 4, size_loc); //supp_data length /* supp_data length */ l2n3(length - 7, size_loc); s->state = SSL3_ST_SW_SUPPLEMENTAL_DATA_B; s->init_num = length; Loading @@ -3780,7 +3784,7 @@ int tls1_send_server_supplemental_data(SSL *s, int *skip) } } //no supp data message sent /* no supp data message sent */ *skip = 1; s->init_num = 0; s->init_off = 0; Loading Loading @@ -3824,7 +3828,7 @@ int tls1_get_client_supplemental_data(SSL *s) { n2s(p, supp_data_entry_type); n2s(p, supp_data_entry_len); //if there is a callback for this supp data type, send it /* if there is a callback for this supp data type, send it */ for (i=0; i < s->ctx->srv_supp_data_records_count; i++) { if (s->ctx->srv_supp_data_records[i].supp_data_type == supp_data_entry_type && s->ctx->srv_supp_data_records[i].fn2) Loading ssl/ssltest.c +31 −14 Original line number Diff line number Diff line Loading @@ -1766,20 +1766,37 @@ bad: if (suppdata) { //TEST CASES //client and server both send and receive, verify additional arg passed back SSL_CTX_set_srv_supp_data(s_ctx, CUSTOM_SUPP_DATA_TYPE_0, supp_data_0_srv_first_cb, supp_data_0_srv_second_cb, s_ssl); SSL_CTX_set_cli_supp_data(c_ctx, CUSTOM_SUPP_DATA_TYPE_0, supp_data_0_cli_first_cb, supp_data_0_cli_second_cb, c_ssl); //-1 response from sending server/client doesn't receive, -1 response from sending client/server doesn't receive SSL_CTX_set_srv_supp_data(s_ctx, CUSTOM_SUPP_DATA_TYPE_1, supp_data_1_srv_first_cb, supp_data_1_srv_second_cb, NULL); SSL_CTX_set_cli_supp_data(c_ctx, CUSTOM_SUPP_DATA_TYPE_1, supp_data_1_cli_first_cb, supp_data_1_cli_second_cb, NULL); //null sending server/client doesn't receive, null sending client/server doesn't receive SSL_CTX_set_srv_supp_data(s_ctx, CUSTOM_SUPP_DATA_TYPE_2, /*supp_data_2_srv_first_cb*/NULL, supp_data_2_srv_second_cb, NULL); SSL_CTX_set_cli_supp_data(c_ctx, CUSTOM_SUPP_DATA_TYPE_2, supp_data_2_cli_first_cb, /*supp_data_2_cli_second_cb*/NULL, NULL); //alerts set to non-zero and zero return values not tested /* TEST CASES */ /* client and server both send and receive, verify * additional arg passed back */ SSL_CTX_set_srv_supp_data(s_ctx, CUSTOM_SUPP_DATA_TYPE_0, supp_data_0_srv_first_cb, supp_data_0_srv_second_cb, s_ssl); SSL_CTX_set_cli_supp_data(c_ctx, CUSTOM_SUPP_DATA_TYPE_0, supp_data_0_cli_first_cb, supp_data_0_cli_second_cb, c_ssl); /* -1 response from sending server/client doesn't * receive, -1 response from sending client/server * doesn't receive */ SSL_CTX_set_srv_supp_data(s_ctx, CUSTOM_SUPP_DATA_TYPE_1, supp_data_1_srv_first_cb, supp_data_1_srv_second_cb, NULL); SSL_CTX_set_cli_supp_data(c_ctx, CUSTOM_SUPP_DATA_TYPE_1, supp_data_1_cli_first_cb, supp_data_1_cli_second_cb, NULL); /* null sending server/client doesn't receive, null sending client/server doesn't receive */ SSL_CTX_set_srv_supp_data(s_ctx, CUSTOM_SUPP_DATA_TYPE_2, /*supp_data_2_srv_first_cb*/NULL, supp_data_2_srv_second_cb, NULL); SSL_CTX_set_cli_supp_data(c_ctx, CUSTOM_SUPP_DATA_TYPE_2, supp_data_2_cli_first_cb, /*supp_data_2_cli_second_cb*/NULL, NULL); /* alerts set to non-zero and zero return values not tested */ } #ifndef OPENSSL_NO_KRB5 if (c_ssl && c_ssl->kssl_ctx) Loading Loading
apps/s_client.c +2 −2 Original line number Diff line number Diff line Loading @@ -2463,7 +2463,7 @@ static int authz_tlsext_generate_cb(SSL *s, unsigned short ext_type, return 1; } } //no auth extension to send /* no auth extension to send */ return -1; } Loading Loading @@ -2496,7 +2496,7 @@ static int auth_suppdata_generate_cb(SSL *s, unsigned short supp_data_type, return 1; } } //no supplemental data to send /* no supplemental data to send */ return -1; } Loading
apps/s_server.c +2 −2 Original line number Diff line number Diff line Loading @@ -3598,7 +3598,7 @@ static int authz_tlsext_generate_cb(SSL *s, unsigned short ext_type, return 1; } } //no auth extension to send /* no auth extension to send */ return -1; } Loading Loading @@ -3631,7 +3631,7 @@ static int auth_suppdata_generate_cb(SSL *s, unsigned short supp_data_type, return 1; } } //no supplemental data to send /* no supplemental data to send */ return -1; } #endif Loading
ssl/s3_clnt.c +10 −7 Original line number Diff line number Diff line Loading @@ -3645,7 +3645,7 @@ int tls1_send_client_supplemental_data(SSL *s, int *skip) SSLerr(SSL_F_TLS1_SEND_CLIENT_SUPPLEMENTAL_DATA,ERR_R_BUF_LIB); return 0; } //if first entry, write handshake message type /* if first entry, write handshake message type */ if (length == 0) { if (!BUF_MEM_grow_clean(s->init_buf, 4)) Loading @@ -3655,9 +3655,12 @@ int tls1_send_client_supplemental_data(SSL *s, int *skip) } p = (unsigned char *)s->init_buf->data; *(p++) = SSL3_MT_SUPPLEMENTAL_DATA; //update message length when all callbacks complete /* update message length when all * callbacks complete */ size_loc = p; //skip over handshake length field (3 bytes) and supp_data length field (3 bytes) /* skip over handshake length field (3 * bytes) and supp_data length field * (3 bytes) */ p += 3 + 3; length += 1 +3 +3; } Loading @@ -3674,9 +3677,9 @@ int tls1_send_client_supplemental_data(SSL *s, int *skip) } if (length > 0) { //write handshake length /* write handshake length */ l2n3(length - 4, size_loc); //supp_data length /* supp_data length */ l2n3(length - 7, size_loc); s->state = SSL3_ST_CW_SUPPLEMENTAL_DATA_B; s->init_num = length; Loading @@ -3685,7 +3688,7 @@ int tls1_send_client_supplemental_data(SSL *s, int *skip) } } //no supp data message sent /* no supp data message sent */ *skip = 1; s->init_num = 0; s->init_off = 0; Loading Loading @@ -3728,7 +3731,7 @@ int tls1_get_server_supplemental_data(SSL *s) { n2s(p, supp_data_entry_type); n2s(p, supp_data_entry_len); //if there is a callback for this supp data type, send it /* if there is a callback for this supp data type, send it */ for (i=0; i < s->ctx->cli_supp_data_records_count; i++) { if (s->ctx->cli_supp_data_records[i].supp_data_type == supp_data_entry_type && s->ctx->cli_supp_data_records[i].fn1) Loading
ssl/s3_srvr.c +16 −12 Original line number Diff line number Diff line Loading @@ -3734,12 +3734,13 @@ int tls1_send_server_supplemental_data(SSL *s, int *skip) SSLerr(SSL_F_TLS1_SEND_SERVER_SUPPLEMENTAL_DATA,ERR_R_BUF_LIB); return 0; } //write supp data entry... //if first entry, write handshake message type //jump back to write length at end /* write supp data entry... * if first entry, write handshake message type * jump back to write length at end */ if (length == 0) { //1 byte message type + 3 bytes for message length /* 1 byte message type + 3 bytes for * message length */ if (!BUF_MEM_grow_clean(s->init_buf, 4)) { SSLerr(SSL_F_TLS1_SEND_SERVER_SUPPLEMENTAL_DATA,ERR_R_BUF_LIB); Loading @@ -3747,13 +3748,15 @@ int tls1_send_server_supplemental_data(SSL *s, int *skip) } p = (unsigned char *)s->init_buf->data; *(p++) = SSL3_MT_SUPPLEMENTAL_DATA; //hold on to length field to update later /* hold on to length field to update later */ size_loc = p; //skip over handshake length field (3 bytes) and supp_data length field (3 bytes) /* skip over handshake length field (3 * bytes) and supp_data length field * (3 bytes) */ p += 3 + 3; length += 1 +3 +3; } //2 byte supp data type + 2 byte length + outlen /* 2 byte supp data type + 2 byte length + outlen */ if (!BUF_MEM_grow(s->init_buf, outlen + 4)) { SSLerr(SSL_F_TLS1_SEND_SERVER_SUPPLEMENTAL_DATA,ERR_R_BUF_LIB); Loading @@ -3762,15 +3765,16 @@ int tls1_send_server_supplemental_data(SSL *s, int *skip) s2n(record->supp_data_type, p); s2n(outlen, p); memcpy(p, out, outlen); //update length to supp data type (2 bytes) + supp data length (2 bytes) + supp data /* update length to supp data type (2 bytes) + * supp data length (2 bytes) + supp data */ length += (outlen + 4); p += outlen; } if (length > 0) { //write handshake length /* write handshake length */ l2n3(length - 4, size_loc); //supp_data length /* supp_data length */ l2n3(length - 7, size_loc); s->state = SSL3_ST_SW_SUPPLEMENTAL_DATA_B; s->init_num = length; Loading @@ -3780,7 +3784,7 @@ int tls1_send_server_supplemental_data(SSL *s, int *skip) } } //no supp data message sent /* no supp data message sent */ *skip = 1; s->init_num = 0; s->init_off = 0; Loading Loading @@ -3824,7 +3828,7 @@ int tls1_get_client_supplemental_data(SSL *s) { n2s(p, supp_data_entry_type); n2s(p, supp_data_entry_len); //if there is a callback for this supp data type, send it /* if there is a callback for this supp data type, send it */ for (i=0; i < s->ctx->srv_supp_data_records_count; i++) { if (s->ctx->srv_supp_data_records[i].supp_data_type == supp_data_entry_type && s->ctx->srv_supp_data_records[i].fn2) Loading
ssl/ssltest.c +31 −14 Original line number Diff line number Diff line Loading @@ -1766,20 +1766,37 @@ bad: if (suppdata) { //TEST CASES //client and server both send and receive, verify additional arg passed back SSL_CTX_set_srv_supp_data(s_ctx, CUSTOM_SUPP_DATA_TYPE_0, supp_data_0_srv_first_cb, supp_data_0_srv_second_cb, s_ssl); SSL_CTX_set_cli_supp_data(c_ctx, CUSTOM_SUPP_DATA_TYPE_0, supp_data_0_cli_first_cb, supp_data_0_cli_second_cb, c_ssl); //-1 response from sending server/client doesn't receive, -1 response from sending client/server doesn't receive SSL_CTX_set_srv_supp_data(s_ctx, CUSTOM_SUPP_DATA_TYPE_1, supp_data_1_srv_first_cb, supp_data_1_srv_second_cb, NULL); SSL_CTX_set_cli_supp_data(c_ctx, CUSTOM_SUPP_DATA_TYPE_1, supp_data_1_cli_first_cb, supp_data_1_cli_second_cb, NULL); //null sending server/client doesn't receive, null sending client/server doesn't receive SSL_CTX_set_srv_supp_data(s_ctx, CUSTOM_SUPP_DATA_TYPE_2, /*supp_data_2_srv_first_cb*/NULL, supp_data_2_srv_second_cb, NULL); SSL_CTX_set_cli_supp_data(c_ctx, CUSTOM_SUPP_DATA_TYPE_2, supp_data_2_cli_first_cb, /*supp_data_2_cli_second_cb*/NULL, NULL); //alerts set to non-zero and zero return values not tested /* TEST CASES */ /* client and server both send and receive, verify * additional arg passed back */ SSL_CTX_set_srv_supp_data(s_ctx, CUSTOM_SUPP_DATA_TYPE_0, supp_data_0_srv_first_cb, supp_data_0_srv_second_cb, s_ssl); SSL_CTX_set_cli_supp_data(c_ctx, CUSTOM_SUPP_DATA_TYPE_0, supp_data_0_cli_first_cb, supp_data_0_cli_second_cb, c_ssl); /* -1 response from sending server/client doesn't * receive, -1 response from sending client/server * doesn't receive */ SSL_CTX_set_srv_supp_data(s_ctx, CUSTOM_SUPP_DATA_TYPE_1, supp_data_1_srv_first_cb, supp_data_1_srv_second_cb, NULL); SSL_CTX_set_cli_supp_data(c_ctx, CUSTOM_SUPP_DATA_TYPE_1, supp_data_1_cli_first_cb, supp_data_1_cli_second_cb, NULL); /* null sending server/client doesn't receive, null sending client/server doesn't receive */ SSL_CTX_set_srv_supp_data(s_ctx, CUSTOM_SUPP_DATA_TYPE_2, /*supp_data_2_srv_first_cb*/NULL, supp_data_2_srv_second_cb, NULL); SSL_CTX_set_cli_supp_data(c_ctx, CUSTOM_SUPP_DATA_TYPE_2, supp_data_2_cli_first_cb, /*supp_data_2_cli_second_cb*/NULL, NULL); /* alerts set to non-zero and zero return values not tested */ } #ifndef OPENSSL_NO_KRB5 if (c_ssl && c_ssl->kssl_ctx) Loading