Vanetza
Loading...
Searching...
No Matches
hashed_id.cpp
1#include <vanetza/security/hashed_id.hpp>
2#include <boost/functional/hash.hpp>
3#include <algorithm>
4#include <cassert>
5#include <iomanip>
6#include <sstream>
7
8namespace vanetza
9{
10namespace security
11{
12
13HashedId3 truncate(const HashedId8& in)
14{
15 HashedId3 out;
16 assert(out.size() <= in.size());
17 std::copy_n(in.rbegin(), out.size(), out.rbegin());
18 return out;
19}
20
21HashedId8 create_hashed_id8(const Sha256Digest& digest)
22{
23 HashedId8 hashed;
24 std::copy(digest.end() - 8, digest.end(), hashed.data());
25 return hashed;
26}
27
28HashedId8 create_hashed_id8(const Sha384Digest& digest)
29{
30 HashedId8 hashed;
31 std::copy(digest.end() - 8, digest.end(), hashed.data());
32 return hashed;
33}
34
35std::string to_string(const vanetza::security::HashedId3& digest)
36{
37 std::stringstream ss;
38 ss << std::hex << std::setfill('0');
39 for (uint8_t octet : digest)
40 {
41 ss << std::setw(2) << static_cast<unsigned>(octet);
42 }
43 return ss.str();
44}
45
46std::string to_string(const vanetza::security::HashedId8& digest)
47{
48 std::stringstream ss;
49 ss << std::hex << std::setfill('0');
50 for (uint8_t octet : digest)
51 {
52 ss << std::setw(2) << static_cast<unsigned>(octet);
53 }
54 return ss.str();
55}
56
57} // namespace security
58} // namespace vanetza
59
60namespace std
61{
62
63size_t hash<vanetza::security::HashedId3>::operator()(const vanetza::security::HashedId3& hid3) const
64{
65 size_t seed = 0;
66 for (uint8_t octet : hid3) {
67 boost::hash_combine(seed, octet);
68 }
69 return seed;
70}
71
72size_t hash<vanetza::security::HashedId8>::operator()(const vanetza::security::HashedId8& hid8) const
73{
74 size_t seed = 0;
75 for (uint8_t octet : hid8) {
76 boost::hash_combine(seed, octet);
77 }
78 return seed;
79}
80
81} // namespace std
STL namespace.