Vanetza
 
Loading...
Searching...
No Matches
backend_cryptopp.hpp
1#ifndef BACKEND_CRYPTOPP_HPP_JQWA9MLZ
2#define BACKEND_CRYPTOPP_HPP_JQWA9MLZ
3
4#include <vanetza/common/lru_cache.hpp>
5#include <vanetza/security/backend.hpp>
6#include <cryptopp/eccrypto.h>
7#include <cryptopp/osrng.h>
8#include <cryptopp/sha.h>
9
10namespace vanetza
11{
12namespace security
13{
14
16{
17public:
18 using Ecdsa256 = CryptoPP::ECDSA<CryptoPP::ECP, CryptoPP::SHA256>;
19 using Ecdsa384 = CryptoPP::ECDSA<CryptoPP::ECP, CryptoPP::SHA384>;
20
21 static constexpr auto backend_name = "CryptoPP";
22
24
25 /// \see Backend::sign_data
26 EcdsaSignature sign_data(const ecdsa256::PrivateKey& private_key, const ByteBuffer& data_buffer) override;
27
28 /// \see Backend::verify_data
29 bool verify_data(const ecdsa256::PublicKey& public_key, const ByteBuffer& data, const EcdsaSignature& sig) override;
30
31 /// \see Backend::verify_digest
32 bool verify_digest(const PublicKey&, const ByteBuffer& digest, const Signature&) override;
33
34 /// \see Backend::decompress_point
35 boost::optional<Uncompressed> decompress_point(const EccPoint& ecc_point) override;
36
37 /// \see Backend::calculate_hash
38 ByteBuffer calculate_hash(KeyType, const ByteBuffer&) override;
39
40 /**
41 * \brief generate a private key and the corresponding public key
42 * \return generated key pair
43 */
45
46private:
47 /// internal sign method using crypto++ private key
48 EcdsaSignature sign_data(const Ecdsa256::PrivateKey& key, const ByteBuffer& data);
49
50 /// internal verify method using crypto++ public key
51 bool verify_data(const Ecdsa256::PublicKey& key, const ByteBuffer& data, const ByteBuffer& sig);
52
53 /// create private key
54 Ecdsa256::PrivateKey generate_private_key();
55
56 /// derive public key from private key
57 Ecdsa256::PublicKey generate_public_key(const Ecdsa256::PrivateKey&);
58
59 /// adapt generic public key to internal structure
60 Ecdsa256::PublicKey internal_public_key(const ecdsa256::PublicKey&);
61
62 /// adapt generic private key to internal structure
63 Ecdsa256::PrivateKey internal_private_key(const ecdsa256::PrivateKey&);
64
65 CryptoPP::AutoSeededRandomPool m_prng;
68};
69
70} // namespace security
71} // namespace vanetza
72
73#endif /* BACKEND_CRYPTOPP_HPP_JQWA9MLZ */
Least-Recently-Used cache.
Definition: lru_cache.hpp:24
Ecdsa256::PrivateKey generate_private_key()
create private key
Ecdsa256::PublicKey internal_public_key(const ecdsa256::PublicKey &)
adapt generic public key to internal structure
boost::optional< Uncompressed > decompress_point(const EccPoint &ecc_point) override
ByteBuffer calculate_hash(KeyType, const ByteBuffer &) override
Ecdsa256::PublicKey generate_public_key(const Ecdsa256::PrivateKey &)
derive public key from private key
bool verify_data(const ecdsa256::PublicKey &public_key, const ByteBuffer &data, const EcdsaSignature &sig) override
EcdsaSignature sign_data(const ecdsa256::PrivateKey &private_key, const ByteBuffer &data_buffer) override
bool verify_digest(const PublicKey &, const ByteBuffer &digest, const Signature &) override
ecdsa256::KeyPair generate_key_pair()
generate a private key and the corresponding public key
Ecdsa256::PrivateKey internal_private_key(const ecdsa256::PrivateKey &)
adapt generic private key to internal structure
EcdsaSignature specified in TS 103 097 v1.2.1, section 4.2.9.
Definition: signature.hpp:17