Vanetza
 
Loading...
Searching...
No Matches
sha.cpp
1#include <vanetza/security/sha.hpp>
2#ifdef VANETZA_WITH_CRYPTOPP
3#include <cryptopp/sha.h>
4#endif
5#ifdef VANETZA_WITH_OPENSSL
6#include <openssl/sha.h>
7#endif
8
9namespace vanetza
10{
11namespace security
12{
13
14Sha256Digest calculate_sha256_digest(const uint8_t* data, std::size_t len)
15{
16 Sha256Digest digest;
17#if defined VANETZA_WITH_OPENSSL
18 static_assert(SHA256_DIGEST_LENGTH == digest.size(), "size of OpenSSL SHA256_DIGEST_LENGTH does not match");
19 SHA256_CTX ctx;
20 SHA256_Init(&ctx);
21 SHA256_Update(&ctx, data, len);
22 SHA256_Final(digest.data(), &ctx);
23#elif defined VANETZA_WITH_CRYPTOPP
24 static_assert(CryptoPP::SHA256::DIGESTSIZE == digest.size(), "size of CryptoPP::SHA256 does not match digest");
25 CryptoPP::SHA256 hash;
26 hash.CalculateDigest(digest.data(), data, len);
27#else
28# error "no SHA256 implementation available"
29#endif
30 return digest;
31}
32
33Sha384Digest calculate_sha384_digest(const uint8_t* data, std::size_t len)
34{
35 Sha384Digest digest;
36#if defined VANETZA_WITH_OPENSSL
37 SHA384(data, len, digest.data());
38#elif defined VANETZA_WITH_CRYPTOPP
39 static_assert(CryptoPP::SHA384::DIGESTSIZE == digest.size(), "size of CryptoPP::SHA384 does not match digest");
40 CryptoPP::SHA384 hash;
41 hash.CalculateDigest(digest.data(), data, len);
42#else
43# error "no SHA384 implementation available"
44#endif
45 return digest;
46}
47
48} // namespace security
49} // namespace vanetza