IBR-DTNSuite
0.8
|
00001 /* 00002 * SecurityKeyManager.h 00003 * 00004 * Created on: 02.12.2010 00005 * Author: morgenro 00006 */ 00007 00008 #ifndef SECURITYKEYMANAGER_H_ 00009 #define SECURITYKEYMANAGER_H_ 00010 00011 #include <ibrdtn/security/SecurityKey.h> 00012 #include <ibrdtn/data/EID.h> 00013 #include <ibrdtn/data/DTNTime.h> 00014 #include <ibrdtn/data/BundleString.h> 00015 #include <ibrdtn/data/SDNV.h> 00016 #include <ibrcommon/data/File.h> 00017 #include <iostream> 00018 00019 #include <openssl/rsa.h> 00020 00021 namespace dtn 00022 { 00023 namespace security 00024 { 00025 class SecurityKeyManager 00026 { 00027 public: 00028 class KeyNotFoundException : public ibrcommon::Exception 00029 { 00030 public: 00031 KeyNotFoundException(std::string what = "Requested key not found.") : ibrcommon::Exception(what) 00032 {}; 00033 00034 virtual ~KeyNotFoundException() throw() {}; 00035 }; 00036 00037 static SecurityKeyManager& getInstance(); 00038 00039 virtual ~SecurityKeyManager(); 00040 void initialize(const ibrcommon::File &path, const ibrcommon::File &ca, const ibrcommon::File &key); 00041 00042 void prefetchKey(const dtn::data::EID &ref, const dtn::security::SecurityKey::KeyType type = dtn::security::SecurityKey::KEY_UNSPEC); 00043 00044 bool hasKey(const dtn::data::EID &ref, const dtn::security::SecurityKey::KeyType type = dtn::security::SecurityKey::KEY_UNSPEC) const; 00045 dtn::security::SecurityKey get(const dtn::data::EID &ref, const dtn::security::SecurityKey::KeyType type = dtn::security::SecurityKey::KEY_UNSPEC) const throw (SecurityKeyManager::KeyNotFoundException); 00046 void store(const dtn::data::EID &ref, const std::string &data, const dtn::security::SecurityKey::KeyType type = dtn::security::SecurityKey::KEY_UNSPEC); 00047 00048 private: 00049 SecurityKeyManager(); 00050 00058 static int read_private_key(const ibrcommon::File &file, RSA ** rsa); 00059 00067 static int read_public_key(const ibrcommon::File &file, RSA ** rsa); 00068 00069 00070 static const std::string hash(const dtn::data::EID &eid); 00071 00072 ibrcommon::File _path; 00073 ibrcommon::File _ca; 00074 ibrcommon::File _key; 00075 }; 00076 } 00077 } 00078 00079 #endif /* SECURITYKEYMANAGER_H_ */