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