00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00023 #ifndef _CLASS_KEYFACTORY_H
00024 #define _CLASS_KEYFACTORY_H
00025
00026 #include "beecrypt/api.h"
00027
00028 #ifdef __cplusplus
00029
00030 #include "beecrypt/c++/lang/Object.h"
00031 using beecrypt::lang::Object;
00032 #include "beecrypt/c++/security/KeyFactorySpi.h"
00033 using beecrypt::security::KeyFactorySpi;
00034 #include "beecrypt/c++/security/Provider.h"
00035 using beecrypt::security::Provider;
00036 #include "beecrypt/c++/security/NoSuchAlgorithmException.h"
00037 using beecrypt::security::NoSuchAlgorithmException;
00038 #include "beecrypt/c++/security/NoSuchProviderException.h"
00039 using beecrypt::security::NoSuchProviderException;
00040
00041 #include <typeinfo>
00042 using std::type_info;
00043
00044 namespace beecrypt {
00045 namespace security {
00048 class BEECRYPTCXXAPI KeyFactory : public beecrypt::lang::Object
00049 {
00050 public:
00051 static KeyFactory* getInstance(const String& algorithm) throw (NoSuchAlgorithmException);
00052 static KeyFactory* getInstance(const String& algorithm, const String& provider) throw (NoSuchAlgorithmException, NoSuchProviderException);
00053 static KeyFactory* getInstance(const String& algorithm, const Provider& provider) throw (NoSuchAlgorithmException);
00054
00055 private:
00056 KeyFactorySpi* _kspi;
00057 const Provider* _prov;
00058 String _algo;
00059
00060 protected:
00061 KeyFactory(KeyFactorySpi* spi, const Provider* provider, const String& algorithm);
00062
00063 public:
00064 virtual ~KeyFactory();
00065
00066 PrivateKey* generatePrivate(const KeySpec& spec) throw (InvalidKeySpecException);
00067 PublicKey* generatePublic(const KeySpec& spec) throw (InvalidKeySpecException);
00068
00069 KeySpec* getKeySpec(const Key& key, const type_info& info) throw (InvalidKeySpecException);
00070
00071 Key* translateKey(const Key& key) throw (InvalidKeyException);
00072
00073 const String& getAlgorithm() const throw ();
00074 const Provider& getProvider() const throw ();
00075 };
00076 }
00077 }
00078
00079 #endif
00080
00081 #endif