#ifndef __ECC_H #define __ECC_H namespace ECC { enum KEY_TYPE { ECC_54, ECC_73, ECC_79, ECC_91, ECC_97, ECC_100, ECC_120, ECC_131, ECC_141, ECC_161, ECC }; class KeyImpl; class Key { public: Key(); Key(const void * keyData, int keyLen, KEY_TYPE keyType = ECC); Key(const char * base64Key, KEY_TYPE keyType = ECC); ~Key(); void Load(const void * keyData, int keyLen, KEY_TYPE keyType = ECC); bool Store(void * buf, int * bufLen) const; const char * ToString(); KEY_TYPE GetKeyType(); const Key & operator = (const Key & key); public: KeyImpl & m_Impl; }; typedef unsigned (*HashFunction)(const void *, int, void *, unsigned *); class SignerImpl; class Signer { public: Signer(); ~Signer(); void SetPrivateKey(const Key * privKey); void SetHashSize(int hashBits); void Sign(const void * msg, int msgLen, void * sigBuf, int * sigLen, int *sigLenInBits = (int *)0); private: SignerImpl & m_Impl; }; class VerifierImpl; class Verifier { public: Verifier(); ~Verifier(); void SetPublicKey(const Key * pubKey); void SetHashSize(int hashBits); bool Verify(const void * msg, int msgLen, const void * sig, int sigLen, int sigLenInBits = 0); private: VerifierImpl & m_Impl; }; void GenerateKeyPair(KEY_TYPE keyType, Key **privKey, Key **pubKey); }; #endif