update sasl for scram

This commit is contained in:
wzlsuccess
2021-06-22 05:19:04 +08:00
parent dbd1301640
commit 3ea97df047
4 changed files with 28 additions and 29 deletions
-4
View File
@@ -158,11 +158,7 @@ CommMessageOut *__ComplexKafkaTask::message_out()
{
KafkaConnectionInfo *conn_info = new KafkaConnectionInfo;
if (!conn_info->init(sasl_mechanisms))
{
this->state = WFT_STATE_TASK_ERROR;
this->error = WFT_ERR_KAFKA_SASL_DISALLOWED;
return NULL;
}
auto&& deleter = [] (void *ctx)
{
+15 -12
View File
@@ -3785,23 +3785,26 @@ int KafkaResponse::parse_saslauthenticate(void **buf, size_t *size)
int KafkaResponse::handle_sasl_continue()
{
struct iovec iovecs[64];
int ret;
std::vector<struct iovec> iovecs(2);
if (this->encode(iovecs.data(), 2) >= 0)
int cnt = this->encode(iovecs, 64);
if ((unsigned int)cnt > 64)
{
for (auto vec : iovecs)
if (cnt > 64)
errno = EOVERFLOW;
return -1;
}
for (int i = 0; i < cnt; i++)
{
ret = this->feedback(iovecs[i].iov_base, iovecs[i].iov_len);
if (ret != (int)iovecs[i].iov_len)
{
ret = this->feedback(vec.iov_base, vec.iov_len);
if (ret != (int)vec.iov_len)
{
if (ret > 0)
errno = EAGAIN;
return -1;
}
if (ret > 0)
errno = EAGAIN;
return -1;
}
}
else
return -1;
return 0;
}
+12 -9
View File
@@ -17,6 +17,8 @@
*/
#include <openssl/sha.h>
#include <openssl/hmac.h>
#include <openssl/evp.h>
#include <arpa/inet.h>
#include <string.h>
#include <stdlib.h>
@@ -947,11 +949,12 @@ static int scram_build_client_final_message(kafka_scram_t *scram, int itcnt,
char *server_sign_b64, *client_proof_b64 = NULL;
int i;
if (scram_hi(scram->evp, itcnt, &password_iov, salt, &salted_pwd_iov) == -1)
if (scram_hi((const EVP_MD *)scram->evp, itcnt, &password_iov, salt,
&salted_pwd_iov) == -1)
return -1;
if (scram_hmac(scram->evp, &salted_pwd_iov, &client_key_verbatim_iov,
&client_key_iov) == -1)
if (scram_hmac((const EVP_MD *)scram->evp, &salted_pwd_iov,
&client_key_verbatim_iov, &client_key_iov) == -1)
return -1;
scram_h(scram, &client_key_iov, &stored_key_iov);
@@ -973,15 +976,15 @@ static int scram_build_client_final_message(kafka_scram_t *scram, int itcnt,
(int)client_final_msg_wo_proof_iov.iov_len,
(char *)client_final_msg_wo_proof_iov.iov_base);
if (scram_hmac(scram->evp, &salted_pwd_iov, &server_key_verbatim_iov,
&server_key_iov) == 0 &&
scram_hmac(scram->evp, &server_key_iov, &auth_message_iov,
&server_sign_iov) == 0)
if (scram_hmac((const EVP_MD *)scram->evp, &salted_pwd_iov,
&server_key_verbatim_iov, &server_key_iov) == 0 &&
scram_hmac((const EVP_MD *)scram->evp, &server_key_iov,
&auth_message_iov, &server_sign_iov) == 0)
{
server_sign_b64 = scram_base64_encode(&server_sign_iov);
if (server_sign_b64 &&
scram_hmac(scram->evp, &stored_key_iov, &auth_message_iov,
&client_sign_iov) ==0 &&
scram_hmac((const EVP_MD *)scram->evp, &stored_key_iov,
&auth_message_iov, &client_sign_iov) ==0 &&
client_key_iov.iov_len == client_sign_iov.iov_len)
{
scram->server_signature_b64.iov_base = server_sign_b64;
+1 -4
View File
@@ -22,9 +22,6 @@
#include <arpa/inet.h>
#include <stddef.h>
#include <stdint.h>
#include <openssl/hmac.h>
#include <openssl/evp.h>
#include <openssl/sha.h>
#include "list.h"
enum
@@ -224,7 +221,7 @@ typedef struct __kafka_parser
typedef struct __kafka_scram
{
const EVP_MD *evp;
const void *evp;
unsigned char *(*scram_h)(const unsigned char *d, size_t n,
unsigned char *md);
size_t scram_h_size;