18 #include <hicn/transport/auth/common.h>
19 #include <hicn/transport/auth/policies.h>
20 #include <hicn/transport/core/content_object.h>
21 #include <hicn/transport/errors/errors.h>
22 #include <hicn/transport/interfaces/callbacks.h>
25 #include <openssl/evp.h>
26 #include <openssl/hmac.h>
27 #include <openssl/pem.h>
28 #include <openssl/x509.h>
37 using SuffixMap = std::unordered_map<Suffix, CryptoHash>;
38 using PolicyMap = std::unordered_map<Suffix, VerificationPolicy>;
44 using VerificationFailedCallback = std::function<auth::VerificationPolicy(
49 static const std::vector<VerificationPolicy> DEFAULT_FAILED_POLICIES;
56 virtual bool verifyPacket(
PacketPtr packet);
57 virtual bool verifyBuffer(
const std::vector<uint8_t> &buffer,
58 const std::vector<uint8_t> &signature,
59 CryptoHashType hash_type) = 0;
61 const std::vector<uint8_t> &signature,
62 CryptoHashType hash_type) = 0;
66 virtual PolicyMap verifyPackets(
const std::vector<PacketPtr> &packets);
67 VerificationPolicy verifyPackets(
PacketPtr packet) {
68 return verifyPackets(std::vector<PacketPtr>{packet})
69 .at(packet->getName().getSuffix());
75 virtual PolicyMap verifyHashes(
const SuffixMap &packet_map,
76 const SuffixMap &suffix_map);
81 virtual PolicyMap verifyPackets(
const std::vector<PacketPtr> &packets,
82 const SuffixMap &suffix_map);
83 VerificationPolicy verifyPackets(
PacketPtr packet,
84 const SuffixMap &suffix_map) {
85 return verifyPackets(std::vector<PacketPtr>{packet}, suffix_map)
86 .at(packet->getName().getSuffix());
90 void setVerificationFailedCallback(
91 VerificationFailedCallback verification_failed_cb,
92 const std::vector<VerificationPolicy> &failed_policies =
93 DEFAULT_FAILED_POLICIES);
96 void getVerificationFailedCallback(
97 VerificationFailedCallback **verification_failed_cb);
100 VerificationFailedCallback verification_failed_cb_;
101 std::vector<VerificationPolicy> failed_policies_;
104 void callVerificationFailedCallback(
PacketPtr packet,
105 VerificationPolicy &policy);
112 bool verifyPacket(
PacketPtr packet)
override;
113 bool verifyBuffer(
const std::vector<uint8_t> &buffer,
114 const std::vector<uint8_t> &signature,
115 CryptoHashType hash_type)
override;
117 const std::vector<uint8_t> &signature,
118 CryptoHashType hash_type)
override;
120 PolicyMap verifyPackets(
const std::vector<PacketPtr> &packets)
override;
122 PolicyMap verifyPackets(
const std::vector<PacketPtr> &packets,
123 const SuffixMap &suffix_map)
override;
140 void setKey(std::shared_ptr<EVP_PKEY> key);
143 void useCertificate(
const std::string &cert_path);
144 void useCertificate(std::shared_ptr<X509> cert);
146 bool verifyBuffer(
const std::vector<uint8_t> &buffer,
147 const std::vector<uint8_t> &signature,
148 CryptoHashType hash_type)
override;
150 const std::vector<uint8_t> &signature,
151 CryptoHashType hash_type)
override;
154 std::shared_ptr<EVP_PKEY> key_;
167 void setPassphrase(
const std::string &passphrase);
169 bool verifyBuffer(
const std::vector<uint8_t> &buffer,
170 const std::vector<uint8_t> &signature,
171 CryptoHashType hash_type)
override;
173 const std::vector<uint8_t> &signature,
174 CryptoHashType hash_type)
override;
177 std::shared_ptr<EVP_PKEY> key_;