00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00023 #ifndef _CLASS_SIGNATURE_H
00024 #define _CLASS_SIGNATURE_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/SignatureSpi.h"
00033 using beecrypt::security::SignatureSpi;
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 namespace beecrypt {
00040 namespace security {
00043 class BEECRYPTCXXAPI Signature : public beecrypt::lang::Object
00044 {
00045 protected:
00046 static const int UNINITIALIZED = 0;
00047 static const int VERIFY = 1;
00048 static const int SIGN = 2;
00049
00050 public:
00060 static Signature* getInstance(const String& algorithm) throw (NoSuchAlgorithmException);
00068 static Signature* getInstance(const String& algorithm, const String& provider) throw (NoSuchAlgorithmException, NoSuchProviderException);
00069 static Signature* getInstance(const String& algorithm, const Provider& provider) throw (NoSuchAlgorithmException);
00070
00071 protected:
00072 int state;
00073
00074 private:
00075 SignatureSpi* _sspi;
00076 const Provider* _prov;
00077 String _algo;
00078
00079 protected:
00080 Signature(SignatureSpi* spi, const Provider* provider, const String& algorithm);
00081
00082 public:
00083 virtual ~Signature();
00084
00085 AlgorithmParameters* getParameters() const;
00086 void setParameter(const AlgorithmParameterSpec&) throw (InvalidAlgorithmParameterException);
00087
00088 void initSign(const PrivateKey&) throw (InvalidKeyException);
00089 void initSign(const PrivateKey&, SecureRandom*) throw (InvalidKeyException);
00090
00091 void initVerify(const PublicKey&) throw (InvalidKeyException);
00092
00093 bytearray* sign() throw (IllegalStateException, SignatureException);
00094 size_t sign(byte*, size_t, size_t) throw (ShortBufferException, IllegalStateException, SignatureException);
00095 size_t sign(bytearray&) throw (IllegalStateException, SignatureException);
00096 bool verify(const bytearray&) throw (IllegalStateException, SignatureException);
00097 bool verify(const byte*, size_t, size_t) throw (IllegalStateException, SignatureException);
00098
00099 void update(byte) throw (IllegalStateException);
00100 void update(const byte*, size_t, size_t) throw (IllegalStateException);
00101 void update(const bytearray&) throw (IllegalStateException);
00102
00103 const String& getAlgorithm() const throw ();
00104 const Provider& getProvider() const throw ();
00105 };
00106 }
00107 }
00108
00109 #endif
00110
00111 #endif