Attention is currently required from: plaisthos.
Hello plaisthos,
I'd like you to do a code review.
Please visit
http://gerrit.openvpn.net/c/openvpn/+/1508?usp=email
to review the following change.
Change subject: crypto: Change cipher_kt_*_size to return size_t instead of int
......................................................................
crypto: Change cipher_kt_*_size to return size_t instead of int
OpenSSL uses int but never returns negative values.
mbedTLS < 4 uses size_t and mbedTLS >= 4 doesn't have
its own implementation, so we can choose.
So choose size_t as a type that can take all these values.
Making this unsigned makes it easier in most cases to write
code that doesn't have sign-compare issues.
Also change cipher_ctx_iv_length and cipher_ctx_block_size
to return an unsigned value for similar reasons. In that
case I did go for unsigned int since no implementation
acutally requires size_t.
Change-Id: I1bc576c4c7ffacbb9300608d98b06b22f2475fd9
Signed-off-by: Frank Lichtenheld <[email protected]>
---
M src/openvpn/crypto.c
M src/openvpn/crypto.h
M src/openvpn/crypto_backend.h
M src/openvpn/crypto_epoch.c
M src/openvpn/crypto_epoch.h
M src/openvpn/crypto_mbedtls.c
M src/openvpn/crypto_mbedtls.h
M src/openvpn/crypto_mbedtls_legacy.c
M src/openvpn/crypto_openssl.c
M src/openvpn/dco_linux.c
M src/openvpn/options.c
11 files changed, 87 insertions(+), 110 deletions(-)
git pull ssh://gerrit.openvpn.net:29418/openvpn refs/changes/08/1508/1
diff --git a/src/openvpn/crypto.c b/src/openvpn/crypto.c
index 49f2b91..6ba2aa0 100644
--- a/src/openvpn/crypto.c
+++ b/src/openvpn/crypto.c
@@ -39,11 +39,6 @@
#include "memdbg.h"
-#if defined(__GNUC__) || defined(__clang__)
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wsign-compare"
-#endif
-
/*
* Encryption and Compression Routines.
*
@@ -93,7 +88,7 @@
{
struct buffer iv_buffer;
uint8_t iv[OPENVPN_MAX_IV_LENGTH] = { 0 };
- const int iv_len = cipher_ctx_iv_length(ctx->cipher);
+ const unsigned int iv_len = cipher_ctx_iv_length(ctx->cipher);
ASSERT(iv_len >= OPENVPN_AEAD_MIN_IV_LEN && iv_len <=
OPENVPN_MAX_IV_LENGTH);
@@ -128,7 +123,7 @@
/* This generates the IV by XORing the implicit part of the IV
* with the packet id already written to the iv buffer */
- for (int i = 0; i < iv_len; i++)
+ for (unsigned int i = 0; i < iv_len; i++)
{
iv[i] = iv[i] ^ ctx->implicit_iv[i];
}
@@ -214,8 +209,7 @@
if (ctx->cipher)
{
uint8_t iv_buf[OPENVPN_MAX_IV_LENGTH] = { 0 };
- const int iv_size = cipher_ctx_iv_length(ctx->cipher);
- int outlen;
+ const unsigned int iv_size = cipher_ctx_iv_length(ctx->cipher);
/* Reserve space for HMAC */
if (ctx->hmac)
@@ -274,6 +268,7 @@
}
/* Encrypt packet ID, payload */
+ int outlen;
ASSERT(cipher_ctx_update(ctx->cipher, BEND(&work), &outlen,
BPTR(buf), BLEN(buf)));
ASSERT(buf_inc_len(&work, outlen));
@@ -282,7 +277,7 @@
ASSERT(buf_inc_len(&work, outlen));
/* For all CBC mode ciphers, check the last block is complete */
- ASSERT(cipher_ctx_mode(ctx->cipher) != OPENVPN_MODE_CBC || outlen
== iv_size);
+ ASSERT(cipher_ctx_mode(ctx->cipher) != OPENVPN_MODE_CBC || outlen
== (int)iv_size);
}
else /* No Encryption */
{
@@ -486,7 +481,7 @@
/* Combine IV from explicit part from packet and implicit part from
context */
{
uint8_t iv[OPENVPN_MAX_IV_LENGTH] = { 0 };
- const int iv_len = cipher_ctx_iv_length(ctx->cipher);
+ const unsigned int iv_len = cipher_ctx_iv_length(ctx->cipher);
/* Read packet id. For epoch data format also lookup the epoch key
* to be able to use the implicit IV of the correct decryption key */
@@ -526,7 +521,7 @@
/* This generates the IV by XORing the implicit part of the IV
* with the packet id already written to the iv buffer */
- for (int i = 0; i < iv_len; i++)
+ for (unsigned int i = 0; i < iv_len; i++)
{
iv[i] = iv[i] ^ ctx->implicit_iv[i];
}
@@ -666,7 +661,7 @@
if (ctx->cipher)
{
- const int iv_size = cipher_ctx_iv_length(ctx->cipher);
+ const unsigned int iv_size = cipher_ctx_iv_length(ctx->cipher);
uint8_t iv_buf[OPENVPN_MAX_IV_LENGTH] = { 0 };
int outlen;
@@ -674,7 +669,7 @@
ASSERT(buf_init(&work, frame->buf.headroom));
/* read the IV from the packet */
- if (buf->len < iv_size)
+ if (buf->len < (int)iv_size)
{
CRYPT_ERROR("missing IV info");
}
@@ -804,10 +799,10 @@
return ret;
}
-unsigned int
+size_t
calculate_crypto_overhead(const struct key_type *kt, unsigned int pkt_id_size,
bool occ)
{
- unsigned int crypto_overhead = 0;
+ size_t crypto_overhead = 0;
if (!cipher_kt_mode_cbc(kt->cipher))
{
@@ -865,7 +860,7 @@
{
msg(M_WARN,
"WARNING: INSECURE cipher (%s) with block size less than 128"
- " bit (%d bit). This allows attacks like SWEET32. Mitigate by "
+ " bit (%zu bit). This allows attacks like SWEET32. Mitigate by "
"using a --cipher with a larger block size (e.g. AES-256-CBC). "
"Support for these insecure ciphers will be removed in "
"OpenVPN 2.7.",
@@ -1010,12 +1005,12 @@
cipher_ctx_init(ctx->cipher, key->cipher, kt->cipher, enc);
const char *ciphername = cipher_kt_name(kt->cipher);
- msg(D_CIPHER_INIT, "%s: Cipher '%s' initialized with %d bit key",
prefix, ciphername,
+ msg(D_CIPHER_INIT, "%s: Cipher '%s' initialized with %zu bit key",
prefix, ciphername,
cipher_kt_key_size(kt->cipher) * 8);
dmsg(D_SHOW_KEYS, "%s: CIPHER KEY: %s", prefix,
format_hex(key->cipher, cipher_kt_key_size(kt->cipher), 0, &gc));
- dmsg(D_CRYPTO_DEBUG, "%s: CIPHER block_size=%d iv_size=%d", prefix,
+ dmsg(D_CRYPTO_DEBUG, "%s: CIPHER block_size=%zu iv_size=%zu", prefix,
cipher_kt_block_size(kt->cipher), cipher_kt_iv_size(kt->cipher));
warn_insecure_key_type(ciphername);
}
@@ -1112,8 +1107,8 @@
static bool
key_is_zero(struct key *key, const struct key_type *kt)
{
- int cipher_length = cipher_kt_key_size(kt->cipher);
- for (int i = 0; i < cipher_length; ++i)
+ size_t cipher_length = cipher_kt_key_size(kt->cipher);
+ for (size_t i = 0; i < cipher_length; ++i)
{
if (key->cipher[i])
{
@@ -1171,7 +1166,7 @@
key_print(const struct key *key, const struct key_type *kt, const char *prefix)
{
struct gc_arena gc = gc_new();
- dmsg(D_SHOW_KEY_SOURCE, "%s (cipher, %s, %d bits): %s", prefix,
cipher_kt_name(kt->cipher),
+ dmsg(D_SHOW_KEY_SOURCE, "%s (cipher, %s, %zu bits): %s", prefix,
cipher_kt_name(kt->cipher),
cipher_kt_key_size(kt->cipher) * 8,
format_hex(key->cipher, cipher_kt_key_size(kt->cipher), 0, &gc));
dmsg(D_SHOW_KEY_SOURCE, "%s (hmac, %s, %d bits): %s", prefix,
md_kt_name(kt->digest),
@@ -1280,10 +1275,6 @@
gc_free(&gc);
}
-#if defined(__GNUC__) || defined(__clang__)
-#pragma GCC diagnostic pop
-#endif
-
const char *
print_key_filename(const char *str, bool is_inline)
{
@@ -1756,7 +1747,7 @@
void
print_cipher(const char *ciphername)
{
- printf("%s (%d bit key, ", cipher_kt_name(ciphername),
cipher_kt_key_size(ciphername) * 8);
+ printf("%s (%zu bit key, ", cipher_kt_name(ciphername),
cipher_kt_key_size(ciphername) * 8);
if (cipher_kt_block_size(ciphername) == 1)
{
@@ -1764,7 +1755,7 @@
}
else
{
- printf("%d bit block", cipher_kt_block_size(ciphername) * 8);
+ printf("%zu bit block", cipher_kt_block_size(ciphername) * 8);
}
if (!cipher_kt_mode_cbc(ciphername))
diff --git a/src/openvpn/crypto.h b/src/openvpn/crypto.h
index 1744653..cb7450f 100644
--- a/src/openvpn/crypto.h
+++ b/src/openvpn/crypto.h
@@ -165,13 +165,13 @@
uint8_t cipher[MAX_CIPHER_KEY_LENGTH];
/** Number of bytes set in the cipher key material */
- int cipher_size;
+ size_t cipher_size;
/** %Key material for HMAC operations. */
uint8_t hmac[MAX_HMAC_KEY_LENGTH];
/** Number of bytes set in the HMac key material */
- int hmac_size;
+ size_t hmac_size;
/** the epoch of the key. Only defined/non zero if key parameters
* represent a data channel epoch key parameters.
@@ -549,8 +549,8 @@
* incorrect way as all previous OpenVPN versions did, to
* end up with identical numbers for OCC compatibility
*/
-unsigned int calculate_crypto_overhead(const struct key_type *kt, unsigned int
pkt_id_size,
- bool occ);
+size_t calculate_crypto_overhead(const struct key_type *kt, unsigned int
pkt_id_size,
+ bool occ);
/** Return the worst-case OpenVPN crypto overhead (in bytes) */
unsigned int crypto_max_overhead(void);
diff --git a/src/openvpn/crypto_backend.h b/src/openvpn/crypto_backend.h
index 5248614..81ff9e7 100644
--- a/src/openvpn/crypto_backend.h
+++ b/src/openvpn/crypto_backend.h
@@ -251,7 +251,7 @@
*
* @return (Default) size of keys used by the cipher, in bytes.
*/
-int cipher_kt_key_size(const char *ciphername);
+size_t cipher_kt_key_size(const char *ciphername);
/**
* Returns the size of the IV used by the cipher, in bytes, or 0 if no IV is
@@ -262,7 +262,7 @@
* @return Size of the IV, in bytes, or 0 if the cipher does not
* use an IV.
*/
-int cipher_kt_iv_size(const char *ciphername);
+size_t cipher_kt_iv_size(const char *ciphername);
/**
* Returns the block size of the cipher, in bytes.
@@ -271,7 +271,7 @@
*
* @return Block size, in bytes.
*/
-int cipher_kt_block_size(const char *ciphername);
+size_t cipher_kt_block_size(const char *ciphername);
/**
* Returns the MAC tag size of the cipher, in bytes.
@@ -281,7 +281,7 @@
* @return Tag size in bytes, or 0 if the tag size could not be
* determined.
*/
-int cipher_kt_tag_size(const char *ciphername);
+size_t cipher_kt_tag_size(const char *ciphername);
/**
* Returns true if we consider this cipher to be insecure.
@@ -358,7 +358,7 @@
* @return Size of the IV, in bytes, or \c 0 if the cipher does
not
* use an IV.
*/
-int cipher_ctx_iv_length(const cipher_ctx_t *ctx);
+unsigned int cipher_ctx_iv_length(const cipher_ctx_t *ctx);
/**
* Gets the computed message authenticated code (MAC) tag for this cipher.
@@ -376,7 +376,7 @@
*
* @return Block size, in bytes, or 0 if ctx was NULL.
*/
-int cipher_ctx_block_size(const cipher_ctx_t *ctx);
+unsigned int cipher_ctx_block_size(const cipher_ctx_t *ctx);
/**
* Returns the mode that the cipher runs in.
diff --git a/src/openvpn/crypto_epoch.c b/src/openvpn/crypto_epoch.c
index f04ba4b4..54225bf 100644
--- a/src/openvpn/crypto_epoch.c
+++ b/src/openvpn/crypto_epoch.c
@@ -39,17 +39,18 @@
#include "integer.h"
void
-ovpn_hkdf_expand(const uint8_t *secret, const uint8_t *info, int info_len,
uint8_t *out,
- int out_len)
+ovpn_hkdf_expand(const uint8_t *secret, const uint8_t *info, size_t info_len,
+ uint8_t *out, size_t out_len)
{
hmac_ctx_t *hmac_ctx = hmac_ctx_new();
hmac_ctx_init(hmac_ctx, secret, "SHA256");
- const int digest_size = SHA256_DIGEST_LENGTH;
+ ASSERT(info_len <= INT_MAX);
+ const unsigned int digest_size = SHA256_DIGEST_LENGTH;
/* T(0) = empty string */
uint8_t t_prev[SHA256_DIGEST_LENGTH];
- int t_prev_len = 0;
+ unsigned int t_prev_len = 0;
for (uint8_t block = 1; (block - 1) * digest_size < out_len; block++)
{
@@ -57,14 +58,14 @@
/* calculate T(block) */
hmac_ctx_update(hmac_ctx, t_prev, t_prev_len);
- hmac_ctx_update(hmac_ctx, info, info_len);
+ hmac_ctx_update(hmac_ctx, info, (int)info_len);
hmac_ctx_update(hmac_ctx, &block, 1);
hmac_ctx_final(hmac_ctx, t_prev);
t_prev_len = digest_size;
/* Copy a full hmac output or remaining bytes */
- int out_offset = (block - 1) * digest_size;
- int copylen = min_int(digest_size, out_len - out_offset);
+ size_t out_offset = (block - 1) * digest_size;
+ size_t copylen = min_size(digest_size, out_len - out_offset);
memcpy(out + out_offset, t_prev, copylen);
}
@@ -72,14 +73,9 @@
hmac_ctx_free(hmac_ctx);
}
-#if defined(__GNUC__) || defined(__clang__)
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wsign-compare"
-#endif
-
bool
ovpn_expand_label(const uint8_t *secret, size_t secret_len, const uint8_t
*label, size_t label_len,
- const uint8_t *context, size_t context_len, uint8_t *out,
int out_len)
+ const uint8_t *context, size_t context_len, uint8_t *out,
size_t out_len)
{
if (secret_len != 32 || label_len > 250 || context_len > 255 || label_len
< 1)
{
@@ -89,7 +85,7 @@
* need need to be in range */
return false;
}
- ASSERT(out_len >= 0 && out_len <= UINT16_MAX);
+ ASSERT(out_len <= UINT16_MAX);
struct gc_arena gc = gc_new();
/* 2 byte for the outlen encoded as uint16, 5 bytes for "ovpn ",
@@ -111,18 +107,14 @@
buf_write(&hkdf_label, context, context_len);
}
- ASSERT(buf_len(&hkdf_label) == hkdf_label_len);
+ ASSERT(buf_len(&hkdf_label) == (int)hkdf_label_len);
- ovpn_hkdf_expand(secret, buf_bptr(&hkdf_label), buf_len(&hkdf_label), out,
out_len);
+ ovpn_hkdf_expand(secret, buf_bptr(&hkdf_label), hkdf_label_len, out,
out_len);
gc_free(&gc);
return true;
}
-#if defined(__GNUC__) || defined(__clang__)
-#pragma GCC diagnostic pop
-#endif
-
/**
* Iterates the epoch key to make it E_n+1, ie increase the epoch by one
* and derive the new key material accordingly
diff --git a/src/openvpn/crypto_epoch.h b/src/openvpn/crypto_epoch.h
index 2b3d345..0fb76d5 100644
--- a/src/openvpn/crypto_epoch.h
+++ b/src/openvpn/crypto_epoch.h
@@ -38,8 +38,8 @@
* @param out output keying material
* @param out_len length of output keying material
*/
-void ovpn_hkdf_expand(const uint8_t *secret, const uint8_t *info, int
info_len, uint8_t *out,
- int out_len);
+void ovpn_hkdf_expand(const uint8_t *secret, const uint8_t *info, size_t
info_len,
+ uint8_t *out, size_t out_len);
/**
* Variant of the RFC 8446 TLS 1.3 HKDF-Expand-Label function with the
@@ -59,8 +59,8 @@
* @return
*/
bool ovpn_expand_label(const uint8_t *secret, size_t secret_len, const uint8_t
*label,
- size_t label_len, const uint8_t *context, size_t
context_len, uint8_t *out,
- int out_len);
+ size_t label_len, const uint8_t *context, size_t
context_len,
+ uint8_t *out, size_t out_len);
/**
* Generate a data channel key pair from the epoch key
diff --git a/src/openvpn/crypto_mbedtls.c b/src/openvpn/crypto_mbedtls.c
index 5418df9..a81b190 100644
--- a/src/openvpn/crypto_mbedtls.c
+++ b/src/openvpn/crypto_mbedtls.c
@@ -160,7 +160,7 @@
if (cipher_info->key_bytes > MAX_CIPHER_KEY_LENGTH)
{
msg(D_LOW,
- "Cipher algorithm '%s' uses a default key size (%d bytes) "
+ "Cipher algorithm '%s' uses a default key size (%u bytes) "
"which is larger than " PACKAGE_NAME "'s current maximum key size "
"(%d bytes)",
ciphername, cipher_info->key_bytes, MAX_CIPHER_KEY_LENGTH);
@@ -183,7 +183,7 @@
return cipher_info->name;
}
-int
+size_t
cipher_kt_key_size(const char *ciphername)
{
const cipher_info_t *cipher_info = cipher_get(ciphername);
@@ -194,7 +194,7 @@
return cipher_info->key_bytes;
}
-int
+size_t
cipher_kt_iv_size(const char *ciphername)
{
const cipher_info_t *cipher_info = cipher_get(ciphername);
@@ -206,7 +206,7 @@
return cipher_info->iv_bytes;
}
-int
+size_t
cipher_kt_block_size(const char *ciphername)
{
const cipher_info_t *cipher_info = cipher_get(ciphername);
@@ -217,7 +217,7 @@
return cipher_info->block_size;
}
-int
+size_t
cipher_kt_tag_size(const char *ciphername)
{
if (cipher_kt_mode_aead(ciphername))
@@ -310,20 +310,20 @@
psa_set_key_type(&ctx->key_attributes, ctx->cipher_info->psa_key_type);
psa_set_key_algorithm(&ctx->key_attributes, ctx->cipher_info->psa_alg);
- psa_set_key_bits(&ctx->key_attributes, (size_t)ctx->cipher_info->key_bytes
* 8);
+ psa_set_key_bits(&ctx->key_attributes, ctx->cipher_info->key_bytes * 8);
psa_set_key_usage_flags(&ctx->key_attributes,
enc == OPENVPN_OP_ENCRYPT ? PSA_KEY_USAGE_ENCRYPT
: PSA_KEY_USAGE_DECRYPT);
- if (psa_import_key(&ctx->key_attributes, key,
(size_t)ctx->cipher_info->key_bytes, &ctx->key) != PSA_SUCCESS)
+ if (psa_import_key(&ctx->key_attributes, key, ctx->cipher_info->key_bytes,
&ctx->key) != PSA_SUCCESS)
{
msg(M_FATAL, "psa_import_key failed");
}
/* make sure we used a big enough key */
- ASSERT(psa_get_key_bits(&ctx->key_attributes) == (size_t)(8 *
ctx->cipher_info->key_bytes));
+ ASSERT(psa_get_key_bits(&ctx->key_attributes) == (8 *
ctx->cipher_info->key_bytes));
}
-int
+unsigned int
cipher_ctx_iv_length(const cipher_ctx_t *ctx)
{
return ctx->cipher_info->iv_bytes;
@@ -341,7 +341,7 @@
return 1;
}
-int
+unsigned int
cipher_ctx_block_size(const cipher_ctx_t *ctx)
{
return ctx->cipher_info->block_size;
diff --git a/src/openvpn/crypto_mbedtls.h b/src/openvpn/crypto_mbedtls.h
index 16d41e4..04346a9 100644
--- a/src/openvpn/crypto_mbedtls.h
+++ b/src/openvpn/crypto_mbedtls.h
@@ -70,9 +70,9 @@
const char *name;
psa_key_type_t psa_key_type;
psa_algorithm_t psa_alg;
- int key_bytes;
- int iv_bytes;
- int block_size;
+ unsigned int key_bytes;
+ unsigned int iv_bytes;
+ unsigned int block_size;
} cipher_info_t;
typedef union psa_cipher_or_aead_operation
diff --git a/src/openvpn/crypto_mbedtls_legacy.c
b/src/openvpn/crypto_mbedtls_legacy.c
index f9b7ae6..e099fa4 100644
--- a/src/openvpn/crypto_mbedtls_legacy.c
+++ b/src/openvpn/crypto_mbedtls_legacy.c
@@ -236,7 +236,6 @@
#if defined(__GNUC__) || defined(__clang__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
-#pragma GCC diagnostic ignored "-Wsign-compare"
#endif
bool
@@ -456,7 +455,7 @@
return
translate_cipher_name_to_openvpn(mbedtls_cipher_info_get_name(cipher_kt));
}
-int
+size_t
cipher_kt_key_size(const char *ciphername)
{
const mbedtls_cipher_info_t *cipher_kt = cipher_get(ciphername);
@@ -466,10 +465,10 @@
return 0;
}
- return (int)mbedtls_cipher_info_get_key_bitlen(cipher_kt) / 8;
+ return mbedtls_cipher_info_get_key_bitlen(cipher_kt) / 8;
}
-int
+size_t
cipher_kt_iv_size(const char *ciphername)
{
const mbedtls_cipher_info_t *cipher_kt = cipher_get(ciphername);
@@ -478,10 +477,10 @@
{
return 0;
}
- return (int)mbedtls_cipher_info_get_iv_size(cipher_kt);
+ return mbedtls_cipher_info_get_iv_size(cipher_kt);
}
-int
+size_t
cipher_kt_block_size(const char *ciphername)
{
const mbedtls_cipher_info_t *cipher_kt = cipher_get(ciphername);
@@ -489,10 +488,10 @@
{
return 0;
}
- return (int)mbedtls_cipher_info_get_block_size(cipher_kt);
+ return mbedtls_cipher_info_get_block_size(cipher_kt);
}
-int
+size_t
cipher_kt_tag_size(const char *ciphername)
{
if (cipher_kt_mode_aead(ciphername))
@@ -605,10 +604,10 @@
}
/* make sure we used a big enough key */
- ASSERT(mbedtls_cipher_get_key_bitlen(ctx) <= key_bitlen);
+ ASSERT((size_t)mbedtls_cipher_get_key_bitlen(ctx) <= key_bitlen);
}
-int
+unsigned int
cipher_ctx_iv_length(const mbedtls_cipher_context_t *ctx)
{
return mbedtls_cipher_get_iv_size(ctx);
@@ -617,7 +616,7 @@
int
cipher_ctx_get_tag(cipher_ctx_t *ctx, uint8_t *tag, int tag_len)
{
- if (tag_len > SIZE_MAX)
+ if (tag_len < 0)
{
return 0;
}
@@ -630,10 +629,10 @@
return 1;
}
-int
+unsigned int
cipher_ctx_block_size(const mbedtls_cipher_context_t *ctx)
{
- return (int)mbedtls_cipher_get_block_size(ctx);
+ return mbedtls_cipher_get_block_size(ctx);
}
int
@@ -689,7 +688,7 @@
int
cipher_ctx_update_ad(cipher_ctx_t *ctx, const uint8_t *src, int src_len)
{
- if (src_len > SIZE_MAX)
+ if (src_len < 0)
{
return 0;
}
diff --git a/src/openvpn/crypto_openssl.c b/src/openvpn/crypto_openssl.c
index 9576cb2..abb6cbf 100644
--- a/src/openvpn/crypto_openssl.c
+++ b/src/openvpn/crypto_openssl.c
@@ -669,25 +669,27 @@
return translate_cipher_name_to_openvpn(name);
}
-int
+size_t
cipher_kt_key_size(const char *ciphername)
{
evp_cipher_type *cipher = cipher_get(ciphername);
int size = EVP_CIPHER_key_length(cipher);
+ ASSERT(size >= 0);
EVP_CIPHER_free(cipher);
return size;
}
-int
+size_t
cipher_kt_iv_size(const char *ciphername)
{
evp_cipher_type *cipher = cipher_get(ciphername);
int ivsize = EVP_CIPHER_iv_length(cipher);
+ ASSERT(ivsize >= 0);
EVP_CIPHER_free(cipher);
return ivsize;
}
-int
+size_t
cipher_kt_block_size(const char *ciphername)
{
/*
@@ -733,10 +735,11 @@
EVP_CIPHER_free(cbc_cipher);
EVP_CIPHER_free(cipher);
free(name);
+ ASSERT(block_size >= 0);
return block_size;
}
-int
+size_t
cipher_kt_tag_size(const char *ciphername)
{
if (cipher_kt_mode_aead(ciphername))
@@ -872,7 +875,7 @@
EVP_CIPHER_free(kt);
}
-int
+unsigned int
cipher_ctx_iv_length(const EVP_CIPHER_CTX *ctx)
{
return EVP_CIPHER_CTX_iv_length(ctx);
@@ -884,7 +887,7 @@
return EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_GET_TAG, tag_size, tag_buf);
}
-int
+unsigned int
cipher_ctx_block_size(const EVP_CIPHER_CTX *ctx)
{
return EVP_CIPHER_CTX_block_size(ctx);
@@ -1190,11 +1193,6 @@
HMAC_CTX_free(ctx);
}
-#if defined(__GNUC__) || defined(__clang__)
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wsign-compare"
-#endif
-
void
hmac_ctx_init(HMAC_CTX *ctx, const uint8_t *key, const char *mdname)
{
@@ -1209,13 +1207,9 @@
}
/* make sure we used a big enough key */
- ASSERT(HMAC_size(ctx) <= key_len);
+ ASSERT((ssize_t)HMAC_size(ctx) <= key_len);
}
-#if defined(__GNUC__) || defined(__clang__)
-#pragma GCC diagnostic pop
-#endif
-
void
hmac_ctx_cleanup(HMAC_CTX *ctx)
{
diff --git a/src/openvpn/dco_linux.c b/src/openvpn/dco_linux.c
index b92fa43..b878428 100644
--- a/src/openvpn/dco_linux.c
+++ b/src/openvpn/dco_linux.c
@@ -612,7 +612,8 @@
msg(D_DCO_DEBUG, "%s: slot %d, key-id %d, peer-id %d, cipher %s, epoch
%d", __func__, slot, keyid, peerid,
ciphername, epoch);
- const int key_len = cipher_kt_key_size(ciphername);
+ const size_t key_len = cipher_kt_key_size(ciphername);
+ ASSERT(key_len <= INT_MAX);
const int nonce_tail_len = 8;
struct nl_msg *nl_msg = ovpn_dco_nlmsg_create(dco, OVPN_CMD_KEY_NEW);
@@ -634,7 +635,7 @@
struct nlattr *key_enc = nla_nest_start(nl_msg,
OVPN_A_KEYCONF_ENCRYPT_DIR);
if (dco_cipher != OVPN_CIPHER_ALG_NONE)
{
- NLA_PUT(nl_msg, OVPN_A_KEYDIR_CIPHER_KEY, key_len, encrypt_key);
+ NLA_PUT(nl_msg, OVPN_A_KEYDIR_CIPHER_KEY, (int)key_len, encrypt_key);
NLA_PUT(nl_msg, OVPN_A_KEYDIR_NONCE_TAIL, nonce_tail_len, encrypt_iv);
}
nla_nest_end(nl_msg, key_enc);
@@ -642,7 +643,7 @@
struct nlattr *key_dec = nla_nest_start(nl_msg,
OVPN_A_KEYCONF_DECRYPT_DIR);
if (dco_cipher != OVPN_CIPHER_ALG_NONE)
{
- NLA_PUT(nl_msg, OVPN_A_KEYDIR_CIPHER_KEY, key_len, decrypt_key);
+ NLA_PUT(nl_msg, OVPN_A_KEYDIR_CIPHER_KEY, (int)key_len, decrypt_key);
NLA_PUT(nl_msg, OVPN_A_KEYDIR_NONCE_TAIL, nonce_tail_len, decrypt_iv);
}
nla_nest_end(nl_msg, key_dec);
diff --git a/src/openvpn/options.c b/src/openvpn/options.c
index 334ea64..278ca2f 100644
--- a/src/openvpn/options.c
+++ b/src/openvpn/options.c
@@ -4448,7 +4448,7 @@
/* Skip resolving BF-CBC to allow SSL libraries without BF-CBC
* to work here in the default configuration */
const char *ciphername = o->ciphername;
- int keysize = 0;
+ size_t keysize = 0;
if (strcmp(o->ciphername, "BF-CBC") == 0)
{
@@ -4471,7 +4471,7 @@
buf_printf(&out, ",cipher %s", ciphername);
}
buf_printf(&out, ",auth %s", md_kt_name(kt.digest));
- buf_printf(&out, ",keysize %d", keysize);
+ buf_printf(&out, ",keysize %zu", keysize);
if (o->shared_secret_file)
{
buf_printf(&out, ",secret");
--
To view, visit http://gerrit.openvpn.net/c/openvpn/+/1508?usp=email
To unsubscribe, or for help writing mail filters, visit
http://gerrit.openvpn.net/settings?usp=email
Gerrit-MessageType: newchange
Gerrit-Project: openvpn
Gerrit-Branch: master
Gerrit-Change-Id: I1bc576c4c7ffacbb9300608d98b06b22f2475fd9
Gerrit-Change-Number: 1508
Gerrit-PatchSet: 1
Gerrit-Owner: flichtenheld <[email protected]>
Gerrit-Reviewer: plaisthos <[email protected]>
Gerrit-CC: openvpn-devel <[email protected]>
Gerrit-Attention: plaisthos <[email protected]>
_______________________________________________
Openvpn-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openvpn-devel