[tor-commits] [stem/master] Drop _get_padding_needed()
atagar at torproject.org
atagar at torproject.org
Sun Nov 17 23:40:39 UTC 2019
commit d313aca7ec142e7be1ba00517f4bd12b535cea5e
Author: Damian Johnson <atagar at torproject.org>
Date: Sun Nov 10 17:22:02 2019 -0800
Drop _get_padding_needed()
Maybe I'm missing something, but why not simply pad using the modulus?
---
stem/descriptor/hidden_service.py | 6 ++--
stem/descriptor/hsv3_crypto.py | 61 ---------------------------------------
2 files changed, 4 insertions(+), 63 deletions(-)
diff --git a/stem/descriptor/hidden_service.py b/stem/descriptor/hidden_service.py
index ab377728..141f54b0 100644
--- a/stem/descriptor/hidden_service.py
+++ b/stem/descriptor/hidden_service.py
@@ -931,8 +931,10 @@ def _get_superencrypted_blob(intro_points, descriptor_signing_privkey, revision_
middle_descriptor_layer = _get_middle_descriptor_layer_body(inner_ciphertext_b64)
- padding_bytes_needed = stem.descriptor.hsv3_crypto._get_padding_needed(len(middle_descriptor_layer))
- middle_descriptor_layer = middle_descriptor_layer + b'\x00' * padding_bytes_needed
+ # Spec mandated padding: "Before encryption the plaintext is padded with NUL
+ # bytes to the nearest multiple of 10k bytes."
+
+ middle_descriptor_layer = middle_descriptor_layer + b'\x00' * (len(middle_descriptor_layer) % 10000)
return b'\n' + _encrypt_layer(middle_descriptor_layer, b'hsdir-superencrypted-data', revision_counter, subcredential, blinded_key)
diff --git a/stem/descriptor/hsv3_crypto.py b/stem/descriptor/hsv3_crypto.py
index b762c5ee..0186ba90 100644
--- a/stem/descriptor/hsv3_crypto.py
+++ b/stem/descriptor/hsv3_crypto.py
@@ -64,64 +64,3 @@ class HSv3PrivateBlindedKey(object):
def sign(self, msg):
return signatureWithESK(msg, self.blinded_secret_key, self.blinded_pubkey)
-
-
-"""
-Basic descriptor logic:
-
- SALT = 16 bytes from H(random), changes each time we rebuld the
- descriptor even if the content of the descriptor hasn't changed.
- (So that we don't leak whether the intro point list etc. changed)
-
- secret_input = SECRET_DATA | subcredential | INT_8(revision_counter)
-
- keys = KDF(secret_input | salt | STRING_CONSTANT, S_KEY_LEN + S_IV_LEN + MAC_KEY_LEN)
-
- SECRET_KEY = first S_KEY_LEN bytes of keys
- SECRET_IV = next S_IV_LEN bytes of keys
- MAC_KEY = last MAC_KEY_LEN bytes of keys
-
-
-Layer data:
-
- 2.5.1.1. First layer encryption logic
- SECRET_DATA = blinded-public-key
- STRING_CONSTANT = "hsdir-superencrypted-data"
-
- 2.5.2.1. Second layer encryption keys
- SECRET_DATA = blinded-public-key | descriptor_cookie
- STRING_CONSTANT = "hsdir-encrypted-data"
-"""
-
-SALT_LEN = 16
-MAC_LEN = 32
-
-S_KEY_LEN = 32
-S_IV_LEN = 16
-MAC_KEY_LEN = 32
-
-"""
-Descriptor encryption
-"""
-
-
-def ceildiv(a, b):
- """
- Like // division but return the ceiling instead of the floor
- """
-
- return -(-a // b)
-
-
-def _get_padding_needed(plaintext_len):
- """
- Get descriptor padding needed for this descriptor layer.
- From the spec:
- Before encryption the plaintext is padded with NUL bytes to the nearest
- multiple of 10k bytes.
- """
-
- PAD_MULTIPLE_BYTES = 10000
-
- final_size = ceildiv(plaintext_len, PAD_MULTIPLE_BYTES) * PAD_MULTIPLE_BYTES
- return final_size - plaintext_len
More information about the tor-commits
mailing list