00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00023 #ifndef _CLASS_SECURERANDOM_H
00024 #define _CLASS_SECURERANDOM_H
00025
00026 #include "beecrypt/beecrypt.h"
00027
00028 #ifdef __cplusplus
00029
00030 #include "beecrypt/c++/lang/Object.h"
00031 using beecrypt::lang::Object;
00032 #include "beecrypt/c++/security/SecureRandomSpi.h"
00033 using beecrypt::security::SecureRandomSpi;
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 namespace beecrypt {
00042 namespace security {
00045 class BEECRYPTCXXAPI SecureRandom : public beecrypt::lang::Object
00046 {
00047 public:
00048 static SecureRandom* getInstance(const String& type) throw (NoSuchAlgorithmException);
00049 static SecureRandom* getInstance(const String& type, const String& provider) throw (NoSuchAlgorithmException, NoSuchProviderException);
00050 static SecureRandom* getInstance(const String& type, const Provider& provider) throw (NoSuchAlgorithmException);
00051
00052 static void getSeed(byte*, size_t);
00053
00054 private:
00055 SecureRandomSpi* _rspi;
00056 const Provider* _prov;
00057 String _type;
00058
00059 protected:
00060 SecureRandom(SecureRandomSpi* spi, const Provider* provider, const String& type);
00061
00062 public:
00063 SecureRandom();
00064 virtual ~SecureRandom();
00065
00066 void generateSeed(byte*, size_t);
00067 void nextBytes(byte*, size_t);
00068 void setSeed(const byte*, size_t);
00069
00070 const String& getType() const throw ();
00071 const Provider& getProvider() const throw ();
00072 };
00073 }
00074 }
00075
00076 #endif
00077
00078 #endif