00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00023 #ifndef _CLASS_MESSAGEDIGEST_H
00024 #define _CLASS_MESSAGEDIGEST_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/MessageDigestSpi.h"
00033 using beecrypt::security::MessageDigestSpi;
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 MessageDigest : public beecrypt::lang::Object
00046 {
00047 public:
00048 static MessageDigest* getInstance(const String& algorithm) throw (NoSuchAlgorithmException);
00049 static MessageDigest* getInstance(const String& algorithm, const String& provider) throw (NoSuchAlgorithmException, NoSuchProviderException);
00050 static MessageDigest* getInstance(const String& algorithm, const Provider& provider) throw (NoSuchAlgorithmException);
00051
00052 private:
00053 MessageDigestSpi* _mspi;
00054 const Provider* _prov;
00055 String _algo;
00056
00057 protected:
00058 MessageDigest(MessageDigestSpi* spi, const Provider* provider, const String& algorithm);
00059
00060 public:
00061 virtual ~MessageDigest();
00062
00063 virtual MessageDigest* clone() const throw (CloneNotSupportedException);
00064
00065 const bytearray& digest();
00066 const bytearray& digest(const bytearray& b);
00067 size_t digest(byte* data, size_t offset, size_t length) throw (ShortBufferException);
00068 size_t getDigestLength();
00069 void reset();
00070 void update(byte b);
00071 void update(const byte* data, size_t offset, size_t length);
00072 void update(const bytearray& b);
00073
00074 const String& getAlgorithm() const throw ();
00075 const Provider& getProvider() const throw ();
00076 };
00077 }
00078 }
00079
00080 #endif
00081
00082 #endif