aboutsummaryrefslogtreecommitdiff
path: root/src/or
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2017-01-11 12:52:52 -0500
committerNick Mathewson <nickm@torproject.org>2017-01-11 12:52:52 -0500
commitac3b559e934b02d2fa690ea7dcd2e7e92553dc9e (patch)
treec47ffa1383441605ade9e0ef68150e505efaa2db /src/or
parentf31b3857febf793a12408dc60cd793fe85778637 (diff)
parent870b5e2227c4382aef1d98b1b5fc9d5f4d275c1c (diff)
downloadtor-ac3b559e934b02d2fa690ea7dcd2e7e92553dc9e.tar.gz
tor-ac3b559e934b02d2fa690ea7dcd2e7e92553dc9e.zip
Merge branch 'bug20569_030_02_squashed'
Diffstat (limited to 'src/or')
-rw-r--r--src/or/hs_descriptor.c14
-rw-r--r--src/or/hs_descriptor.h8
2 files changed, 15 insertions, 7 deletions
diff --git a/src/or/hs_descriptor.c b/src/or/hs_descriptor.c
index ad6b32606c..f16a2fdc14 100644
--- a/src/or/hs_descriptor.c
+++ b/src/or/hs_descriptor.c
@@ -541,8 +541,9 @@ build_encrypted(const uint8_t *key, const uint8_t *iv, const char *plaintext,
tor_assert(plaintext);
tor_assert(encrypted_out);
- /* This creates a cipher for AES128. It can't fail. */
- cipher = crypto_cipher_new_with_iv((const char *) key, (const char *) iv);
+ /* This creates a cipher for AES. It can't fail. */
+ cipher = crypto_cipher_new_with_iv_and_bits(key, iv,
+ HS_DESC_ENCRYPTED_BIT_SIZE);
/* This can't fail. */
encrypted_len = build_plaintext_padding(plaintext, plaintext_len,
&padded_plaintext);
@@ -573,7 +574,7 @@ encrypt_descriptor_data(const hs_descriptor_t *desc, const char *plaintext,
size_t encrypted_len, final_blob_len, offset = 0;
uint8_t *encrypted;
uint8_t salt[HS_DESC_ENCRYPTED_SALT_LEN];
- uint8_t secret_key[CIPHER_KEY_LEN], secret_iv[CIPHER_IV_LEN];
+ uint8_t secret_key[HS_DESC_ENCRYPTED_KEY_LEN], secret_iv[CIPHER_IV_LEN];
uint8_t mac_key[DIGEST256_LEN], mac[DIGEST256_LEN];
tor_assert(desc);
@@ -1059,7 +1060,7 @@ static size_t
desc_decrypt_data_v3(const hs_descriptor_t *desc, char **decrypted_out)
{
uint8_t *decrypted = NULL;
- uint8_t secret_key[CIPHER_KEY_LEN], secret_iv[CIPHER_IV_LEN];
+ uint8_t secret_key[HS_DESC_ENCRYPTED_KEY_LEN], secret_iv[CIPHER_IV_LEN];
uint8_t mac_key[DIGEST256_LEN], our_mac[DIGEST256_LEN];
const uint8_t *salt, *encrypted, *desc_mac;
size_t encrypted_len, result_len = 0;
@@ -1119,8 +1120,9 @@ desc_decrypt_data_v3(const hs_descriptor_t *desc, char **decrypted_out)
/* Decrypt. Here we are assured that the encrypted length is valid for
* decryption. */
crypto_cipher_t *cipher;
- cipher = crypto_cipher_new_with_iv((const char *) secret_key,
- (const char *) secret_iv);
+
+ cipher = crypto_cipher_new_with_iv_and_bits(secret_key, secret_iv,
+ HS_DESC_ENCRYPTED_BIT_SIZE);
/* Extra byte for the NUL terminated byte. */
decrypted = tor_malloc_zero(encrypted_len + 1);
crypto_cipher_decrypt(cipher, (char *) decrypted,
diff --git a/src/or/hs_descriptor.h b/src/or/hs_descriptor.h
index 6cc60c774c..b520d24471 100644
--- a/src/or/hs_descriptor.h
+++ b/src/or/hs_descriptor.h
@@ -40,7 +40,7 @@
/* Length of the KDF output value which is the length of the secret key,
* the secret IV and MAC key length which is the length of H() output. */
#define HS_DESC_ENCRYPTED_KDF_OUTPUT_LEN \
- CIPHER_KEY_LEN + CIPHER_IV_LEN + DIGEST256_LEN
+ CIPHER256_KEY_LEN + CIPHER_IV_LEN + DIGEST256_LEN
/* We need to pad the plaintext version of the encrypted data section before
* encryption and it has to be a multiple of this value. */
#define HS_DESC_PLAINTEXT_PADDING_MULTIPLE 128
@@ -60,6 +60,12 @@
* view of a descriptor, is 1 that is the version field. */
#define HS_DESC_PLAINTEXT_MIN_FIELDS 1
+/* Key length for the descriptor symmetric encryption. As specified in the
+ * protocol, we use AES-256 for the encrypted section of the descriptor. The
+ * following is the length in bytes and the bit size. */
+#define HS_DESC_ENCRYPTED_KEY_LEN CIPHER256_KEY_LEN
+#define HS_DESC_ENCRYPTED_BIT_SIZE (HS_DESC_ENCRYPTED_KEY_LEN * 8)
+
/* Type of authentication in the descriptor. */
typedef enum {
HS_DESC_AUTH_PASSWORD = 1,