Exemplo n.º 1
0
def kdf_tor(shared_secret):
    t = shared_secret + bytes([0])
    computed_auth = sha1(t)
    key_material = b''
    for i in range(1, 5):
        t = shared_secret + bytes([i])
        tsh = sha1(t)
        key_material += tsh
    return computed_auth, key_material
Exemplo n.º 2
0
 def _decrypt_basic(self, descriptor_cookie):
     assert self._crypted_data[0] == AuthType.Basic
     block_count = self._crypted_data[1]
     entries_len = block_count * self.REND_BASIC_AUTH_CLIENT_MULTIPLE * self.REND_BASIC_AUTH_CLIENT_ENTRY_LEN
     assert len(self._crypted_data) > 2 + entries_len + self.CIPHER_IV_LEN, 'Size of crypted data too small'
     iv = self._crypted_data[2 + entries_len:2 + entries_len + self.CIPHER_IV_LEN]
     client_id = sha1(descriptor_cookie + iv)[:4]
     session_key = self._get_session_key(self._crypted_data[2:2 + entries_len], descriptor_cookie, client_id)
     d = aes_ctr_decryptor(session_key, iv)
     data = self._crypted_data[2 + entries_len + self.CIPHER_IV_LEN:]
     return d.update(data)
Exemplo n.º 3
0
    def _get_secret_id(self, replica):
        """
        Get secret_id by replica number.

        rend-spec.txt
        1.3.

        "time-period" changes periodically as a function of time and
        "permanent-id". The current value for "time-period" can be calculated
        using the following formula:

          time-period = (current-time + permanent-id-byte * 86400 / 256)
                          / 86400
        """
        # tor ref: get_secret_id_part_bytes
        permanent_byte = self.permanent_id[0]
        time_period = int((int(time.time()) + (permanent_byte * 86400 / 256)) / 86400)
        if self._descriptor_cookie and self._auth_type == AuthType.Stealth:
            buff = struct.pack('!I16sB', time_period, self._descriptor_cookie, replica)
        else:
            buff = struct.pack('!IB', time_period, replica)
        return sha1(buff)
Exemplo n.º 4
0
 def _serialize_payload(self):
     #  PK_ID  Identifier for Bob's PK      [20 octets]
     return struct.pack('!20s', sha1(
         self.introduction_point.service_key)) + self.handshake_encrypted
Exemplo n.º 5
0
 def get_descriptor_id(self, replica):
     # tor ref: rend_compute_v2_desc_id
     secret_id = self._get_secret_id(replica)
     buff = self.permanent_id + secret_id
     return sha1(buff)
Exemplo n.º 6
0
def tor_digest(msg):
    return sha1(msg)
Exemplo n.º 7
0
 def get_descriptor_id(self, replica):
     # tor ref: rend_compute_v2_desc_id
     # Calculate descriptor ID: H(permanent-id | secret-id-part)
     buff = self._permanent_id + self._get_secret_id(replica)
     return sha1(buff)