00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef _DECAF_SECURITY_MESSAGEDIGESTSPI_H_
00019 #define _DECAF_SECURITY_MESSAGEDIGESTSPI_H_
00020
00021 #include <decaf/util/Config.h>
00022
00023 #include <decaf/nio/ByteBuffer.h>
00024 #include <decaf/security/SecuritySpi.h>
00025
00026 #include <vector>
00027
00028 namespace decaf {
00029 namespace security {
00030
00031 class MessageDigest;
00032
00047 class DECAF_API MessageDigestSpi : public SecuritySpi {
00048 public:
00049
00050 MessageDigestSpi();
00051
00052 virtual ~MessageDigestSpi();
00053
00060 virtual bool isCloneable() const;
00061
00070 virtual MessageDigestSpi* clone();
00071
00072 protected:
00073
00079 virtual int engineGetDigestLength() = 0;
00080
00087 virtual void engineUpdate(unsigned char input) = 0;
00088
00103 virtual void engineUpdate(const unsigned char* input, int size, int offset, int length) = 0;
00104
00108 virtual void engineReset() = 0;
00109
00116 virtual void engineUpdate(const std::vector<unsigned char>& input) = 0;
00117
00126 virtual void engineUpdate(decaf::nio::ByteBuffer& input) = 0;
00127
00135 virtual std::vector<unsigned char> engineDigest() = 0;
00136
00162 virtual int engineDigest(unsigned char* buffer, int size, int offset, int length) = 0;
00163
00164 private:
00165
00166 friend class MessageDigest;
00167
00168 };
00169
00170 }}
00171
00172 #endif