tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

TestNetworkLinkIdHashingDarwin.cpp (2709B)


      1 #include <arpa/inet.h>
      2 
      3 #include "gtest/gtest.h"
      4 #include "mozilla/SHA1.h"
      5 #include "nsString.h"
      6 #include "nsPrintfCString.h"
      7 #include "mozilla/Logging.h"
      8 #include "nsNetworkLinkService.h"
      9 
     10 using namespace mozilla;
     11 
     12 in6_addr StringToSockAddr(const std::string& str) {
     13  sockaddr_in6 ip;
     14  inet_pton(AF_INET6, str.c_str(), &(ip.sin6_addr));
     15  return ip.sin6_addr;
     16 }
     17 
     18 TEST(TestNetworkLinkIdHashingDarwin, Single)
     19 {
     20  // Setup
     21  SHA1Sum expected_sha1;
     22  SHA1Sum::Hash expected_digest;
     23 
     24  in6_addr a1 = StringToSockAddr("2001:db8:8714:3a91::1");
     25 
     26  // Prefix
     27  expected_sha1.update(&a1, sizeof(in6_addr));
     28  // Netmask
     29  expected_sha1.update(&a1, sizeof(in6_addr));
     30  expected_sha1.finish(expected_digest);
     31 
     32  std::vector<prefix_and_netmask> prefixNetmaskStore;
     33  prefixNetmaskStore.push_back(std::make_pair(a1, a1));
     34  SHA1Sum actual_sha1;
     35  // Run
     36  nsNetworkLinkService::HashSortedPrefixesAndNetmasks(prefixNetmaskStore,
     37                                                      &actual_sha1);
     38  SHA1Sum::Hash actual_digest;
     39  actual_sha1.finish(actual_digest);
     40 
     41  // Assert
     42  ASSERT_EQ(0, memcmp(&expected_digest, &actual_digest, sizeof(SHA1Sum::Hash)));
     43 }
     44 
     45 TEST(TestNetworkLinkIdHashingDarwin, Multiple)
     46 {
     47  // Setup
     48  SHA1Sum expected_sha1;
     49  SHA1Sum::Hash expected_digest;
     50 
     51  std::vector<in6_addr> addresses;
     52  addresses.push_back(StringToSockAddr("2001:db8:8714:3a91::1"));
     53  addresses.push_back(StringToSockAddr("2001:db8:8714:3a91::2"));
     54  addresses.push_back(StringToSockAddr("2001:db8:8714:3a91::3"));
     55  addresses.push_back(StringToSockAddr("2001:db8:8714:3a91::4"));
     56 
     57  for (const auto& address : addresses) {
     58    // Prefix
     59    expected_sha1.update(&address, sizeof(in6_addr));
     60    // Netmask
     61    expected_sha1.update(&address, sizeof(in6_addr));
     62  }
     63  expected_sha1.finish(expected_digest);
     64 
     65  // Ordered
     66  std::vector<prefix_and_netmask> ordered;
     67  for (const auto& address : addresses) {
     68    ordered.push_back(std::make_pair(address, address));
     69  }
     70  SHA1Sum ordered_sha1;
     71 
     72  // Unordered
     73  std::vector<prefix_and_netmask> reversed;
     74  for (auto it = addresses.rbegin(); it != addresses.rend(); ++it) {
     75    reversed.push_back(std::make_pair(*it, *it));
     76  }
     77  SHA1Sum reversed_sha1;
     78 
     79  // Run
     80  nsNetworkLinkService::HashSortedPrefixesAndNetmasks(ordered, &ordered_sha1);
     81  SHA1Sum::Hash ordered_digest;
     82  ordered_sha1.finish(ordered_digest);
     83 
     84  nsNetworkLinkService::HashSortedPrefixesAndNetmasks(reversed, &reversed_sha1);
     85  SHA1Sum::Hash reversed_digest;
     86  reversed_sha1.finish(reversed_digest);
     87 
     88  // Assert
     89  ASSERT_EQ(0,
     90            memcmp(&expected_digest, &ordered_digest, sizeof(SHA1Sum::Hash)));
     91  ASSERT_EQ(0,
     92            memcmp(&expected_digest, &reversed_digest, sizeof(SHA1Sum::Hash)));
     93 }