mirror of
https://github.com/shadowsocks/shadowsocks-libev.git
synced 2026-10-25 10:13:44 +00:00
fix #391
This commit is contained in:
+37
-36
@@ -140,7 +140,6 @@ static const char * supported_ciphers_polarssl[CIPHER_NUM] =
|
||||
#endif
|
||||
|
||||
#ifdef USE_CRYPTO_MBEDTLS
|
||||
// FIXME: check it
|
||||
static const char * supported_ciphers_mbedtls[CIPHER_NUM] =
|
||||
{
|
||||
"table",
|
||||
@@ -347,7 +346,6 @@ int cipher_iv_size(const cipher_kt_t *cipher)
|
||||
#if defined(USE_CRYPTO_OPENSSL)
|
||||
return EVP_CIPHER_iv_length(cipher);
|
||||
#elif defined(USE_CRYPTO_POLARSSL) || defined(USE_CRYPTO_MBEDTLS)
|
||||
//FIXME: check data structure of cipher
|
||||
if (cipher == NULL) {
|
||||
return 0;
|
||||
}
|
||||
@@ -370,11 +368,10 @@ int cipher_key_size(const cipher_kt_t *cipher)
|
||||
}
|
||||
return cipher->key_length / 8;
|
||||
#elif defined(USE_CRYPTO_MBEDTLS)
|
||||
// FIXME: ditto, cipher data structure
|
||||
/*
|
||||
* Semi-API changes (technically public, morally private)
|
||||
* Renamed a few headers to include _internal in the name. Those headers are
|
||||
not supposed to be included by users.
|
||||
* not supposed to be included by users.
|
||||
* Changed md_info_t into an opaque structure (use md_get_xxx() accessors).
|
||||
* Changed pk_info_t into an opaque structure.
|
||||
* Changed cipher_base_t into an opaque structure.
|
||||
@@ -488,7 +485,7 @@ int bytes_to_key(const cipher_kt_t *cipher, const digest_type_t *md,
|
||||
*
|
||||
* Generic message digest context.
|
||||
|
||||
typedef struct {
|
||||
typedef struct {
|
||||
Information about the associated message digest
|
||||
const mbedtls_md_info_t *md_info;
|
||||
|
||||
@@ -497,15 +494,15 @@ typedef struct {
|
||||
|
||||
HMAC part of the context
|
||||
void *hmac_ctx;
|
||||
} mbedtls_md_context_t; // mbedtls 2.0.0
|
||||
} mbedtls_md_context_t; // mbedtls 2.0.0
|
||||
|
||||
typedef struct {
|
||||
typedef struct {
|
||||
Information about the associated message digest
|
||||
const md_info_t *md_info;
|
||||
|
||||
Digest-specific context
|
||||
void *md_ctx;
|
||||
} md_context_t; //polarssl 1.3
|
||||
} md_context_t; //polarssl 1.3
|
||||
|
||||
*/
|
||||
// NOTE: different struct body, initialize new param hmac 0 to disable HMAC
|
||||
@@ -526,7 +523,7 @@ typedef struct {
|
||||
}
|
||||
|
||||
memset(&c, 0, sizeof(mbedtls_md_context_t));
|
||||
//FIXME: md_init_ctx superseded by mbedtls_md_setup() in 2.0.0
|
||||
// XXX: md_init_ctx superseded by mbedtls_md_setup() in 2.0.0
|
||||
// new param hmac 0 to save some memory if HMAC will not be used,
|
||||
// non-zero is HMAC is going to be used with this context.
|
||||
if (mbedtls_md_setup(&c, md, 0)) {
|
||||
@@ -668,7 +665,7 @@ int rand_bytes(uint8_t *output, int len)
|
||||
return 1;
|
||||
#elif defined(USE_CRYPTO_MBEDTLS)
|
||||
static mbedtls_entropy_context ec = {};
|
||||
// FIXME: ctr_drbg_context changed, [if defined(MBEDTLS_THREADING_C) mbedtls_threading_mutex_t mutex;]
|
||||
// XXX: ctr_drbg_context changed, [if defined(MBEDTLS_THREADING_C) mbedtls_threading_mutex_t mutex;]
|
||||
static mbedtls_ctr_drbg_context cd_ctx = {};
|
||||
static unsigned char rand_initialised = 0;
|
||||
const size_t blen = min(len, MBEDTLS_CTR_DRBG_MAX_REQUEST);
|
||||
@@ -709,10 +706,10 @@ int rand_bytes(uint8_t *output, int len)
|
||||
}
|
||||
#endif
|
||||
mbedtls_entropy_init(&ec);
|
||||
// FIXME: ctr_drbg_init changed, seems we should initialize it before calling mbedtls_ctr_drbg_seed()
|
||||
// XXX: ctr_drbg_init changed, seems we should initialize it before calling mbedtls_ctr_drbg_seed()
|
||||
mbedtls_ctr_drbg_init(&cd_ctx);
|
||||
if (mbedtls_ctr_drbg_seed(&cd_ctx, mbedtls_entropy_func, &ec,
|
||||
(const unsigned char *)rand_buffer.buffer, 8) != 0) {
|
||||
(const unsigned char *)rand_buffer.buffer, 8) != 0) {
|
||||
mbedtls_entropy_free(&ec);
|
||||
FATAL("mbed TLS: Failed to initialize random generator");
|
||||
}
|
||||
@@ -843,7 +840,7 @@ void cipher_context_init(cipher_ctx_t *ctx, int method, int enc)
|
||||
FATAL("Cannot initialize PolarSSL cipher context");
|
||||
}
|
||||
#elif defined(USE_CRYPTO_MBEDTLS)
|
||||
// FIXME: mbedtls_cipher_setup future change
|
||||
// XXX: mbedtls_cipher_setup future change
|
||||
// NOTE: Currently also clears structure. In future versions you will be required to call
|
||||
// mbedtls_cipher_init() on the structure first.
|
||||
// void mbedtls_cipher_init( mbedtls_cipher_context_t *ctx );
|
||||
@@ -931,7 +928,7 @@ void cipher_context_set_iv(cipher_ctx_t *ctx, uint8_t *iv, size_t iv_len,
|
||||
FATAL("Cannot set key and IV");
|
||||
}
|
||||
#elif defined(USE_CRYPTO_POLARSSL)
|
||||
// FIXME: PolarSSL 1.3.11: cipher_free_ctx deprecated, Use cipher_free() instead.
|
||||
// XXX: PolarSSL 1.3.11: cipher_free_ctx deprecated, Use cipher_free() instead.
|
||||
if (cipher_setkey(evp, true_key, enc_key_len * 8, enc) != 0) {
|
||||
cipher_free_ctx(evp);
|
||||
FATAL("Cannot set PolarSSL cipher key");
|
||||
@@ -952,7 +949,6 @@ void cipher_context_set_iv(cipher_ctx_t *ctx, uint8_t *iv, size_t iv_len,
|
||||
}
|
||||
#endif
|
||||
#elif defined(USE_CRYPTO_MBEDTLS)
|
||||
// FIXME: cipher_free_ctx deprecated, Use cipher_free() instead in PolarSSL 1.3.11
|
||||
if (mbedtls_cipher_setkey(evp, true_key, enc_key_len * 8, enc) != 0) {
|
||||
mbedtls_cipher_free(evp);
|
||||
FATAL("Cannot set mbed TLS cipher key");
|
||||
@@ -1002,36 +998,41 @@ void cipher_context_release(cipher_ctx_t *ctx)
|
||||
#endif
|
||||
}
|
||||
|
||||
static int cipher_context_update(cipher_ctx_t *ctx, uint8_t *output, int *olen,
|
||||
const uint8_t *input, int ilen)
|
||||
static int cipher_context_update(cipher_ctx_t *ctx, uint8_t *output, size_t *olen,
|
||||
const uint8_t *input, size_t ilen)
|
||||
{
|
||||
#ifdef USE_CRYPTO_APPLECC
|
||||
cipher_cc_t *cc = &ctx->cc;
|
||||
if (cc->valid == kCCContextValid) {
|
||||
CCCryptorStatus ret;
|
||||
ret = CCCryptorUpdate(cc->cryptor, input, ilen, output,
|
||||
ilen, (size_t *)olen);
|
||||
ilen, olen);
|
||||
return (ret == kCCSuccess) ? 1 : 0;
|
||||
}
|
||||
#endif
|
||||
cipher_evp_t *evp = &ctx->evp;
|
||||
#if defined(USE_CRYPTO_OPENSSL)
|
||||
return EVP_CipherUpdate(evp, (uint8_t *)output, olen,
|
||||
(const uint8_t *)input, (size_t)ilen);
|
||||
int err = 0, tlen = *olen;
|
||||
err = EVP_CipherUpdate(evp, (uint8_t *)output, &tlen,
|
||||
(const uint8_t *)input, ilen);
|
||||
*olen = tlen;
|
||||
return err;
|
||||
#elif defined(USE_CRYPTO_POLARSSL)
|
||||
return !cipher_update(evp, (const uint8_t *)input, (size_t)ilen,
|
||||
(uint8_t *)output, (size_t *)olen);
|
||||
return !cipher_update(evp, (const uint8_t *)input, ilen,
|
||||
(uint8_t *)output, olen);
|
||||
#elif defined(USE_CRYPTO_MBEDTLS)
|
||||
return !mbedtls_cipher_update(evp, (const uint8_t *)input, (size_t)ilen,
|
||||
(uint8_t *)output, (size_t *)olen);
|
||||
return !mbedtls_cipher_update(evp, (const uint8_t *)input, ilen,
|
||||
(uint8_t *)output, olen);
|
||||
#endif
|
||||
}
|
||||
|
||||
int ss_onetimeauth(char *auth, char *msg, int msg_len) {
|
||||
int ss_onetimeauth(char *auth, char *msg, int msg_len)
|
||||
{
|
||||
return crypto_onetimeauth((uint8_t *)auth, (uint8_t *)msg, msg_len, auth_key);
|
||||
}
|
||||
|
||||
int ss_onetimeauth_verify(char *auth, char *msg, int msg_len) {
|
||||
int ss_onetimeauth_verify(char *auth, char *msg, int msg_len)
|
||||
{
|
||||
return crypto_onetimeauth_verify((uint8_t *)auth, (uint8_t *)msg, msg_len, auth_key);
|
||||
}
|
||||
|
||||
@@ -1041,8 +1042,8 @@ char * ss_encrypt_all(int buf_size, char *plaintext, ssize_t *len, int method)
|
||||
cipher_ctx_t evp;
|
||||
cipher_context_init(&evp, method, 1);
|
||||
|
||||
int p_len = *len, c_len = *len;
|
||||
int iv_len = enc_iv_len;
|
||||
size_t p_len = *len, c_len = *len;
|
||||
size_t iv_len = enc_iv_len;
|
||||
int err = 1;
|
||||
|
||||
static int tmp_len = 0;
|
||||
@@ -1107,8 +1108,8 @@ char * ss_encrypt(int buf_size, char *plaintext, ssize_t *len,
|
||||
static char *tmp_buf = NULL;
|
||||
|
||||
int err = 1;
|
||||
int iv_len = 0;
|
||||
int p_len = *len, c_len = *len;
|
||||
size_t iv_len = 0;
|
||||
size_t p_len = *len, c_len = *len;
|
||||
if (!ctx->init) {
|
||||
iv_len = enc_iv_len;
|
||||
}
|
||||
@@ -1191,8 +1192,8 @@ char * ss_decrypt_all(int buf_size, char *ciphertext, ssize_t *len, int method)
|
||||
if (method > TABLE) {
|
||||
cipher_ctx_t evp;
|
||||
cipher_context_init(&evp, method, 0);
|
||||
int iv_len = enc_iv_len;
|
||||
int c_len = *len, p_len = *len - iv_len;
|
||||
size_t iv_len = enc_iv_len;
|
||||
size_t c_len = *len, p_len = *len - iv_len;
|
||||
int err = 1;
|
||||
|
||||
static int tmp_len = 0;
|
||||
@@ -1256,8 +1257,8 @@ char * ss_decrypt(int buf_size, char *ciphertext, ssize_t *len,
|
||||
static int tmp_len = 0;
|
||||
static char *tmp_buf = NULL;
|
||||
|
||||
int c_len = *len, p_len = *len;
|
||||
int iv_len = 0;
|
||||
size_t c_len = *len, p_len = *len;
|
||||
size_t iv_len = 0;
|
||||
int err = 1;
|
||||
int buf_len = max(p_len, buf_size);
|
||||
|
||||
@@ -1385,7 +1386,7 @@ void enc_key_init(int method, const char *pass)
|
||||
cipher->iv_size = supported_ciphers_iv_size[method];
|
||||
#endif
|
||||
#if defined(USE_CRYPTO_MBEDTLS)
|
||||
// FIXME: key_length changed to key_bitlen in mbed TLS 2.0.0
|
||||
// XXX: key_length changed to key_bitlen in mbed TLS 2.0.0
|
||||
cipher->base = NULL;
|
||||
cipher->key_bitlen = supported_ciphers_key_size[method] * 8;
|
||||
cipher->iv_size = supported_ciphers_iv_size[method];
|
||||
@@ -1406,7 +1407,7 @@ void enc_key_init(int method, const char *pass)
|
||||
}
|
||||
#endif
|
||||
#if defined(USE_CRYPTO_MBEDTLS) && defined(USE_CRYPTO_APPLECC)
|
||||
// FIXME: key_length changed to key_bitlen in mbed TLS 2.0.0
|
||||
// XXX: key_length changed to key_bitlen in mbed TLS 2.0.0
|
||||
if (supported_ciphers_applecc[method] != kCCAlgorithmInvalid) {
|
||||
cipher_info.base = NULL;
|
||||
cipher_info.key_bitlen = supported_ciphers_key_size[method] * 8;
|
||||
|
||||
Reference in New Issue
Block a user