IBR-DTNSuite  0.8
daemon/src/security/SecurityKeyManager.h
Go to the documentation of this file.
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_ */