00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef __CODEX_CIPHERS_TRANSLATIONCERTIFICATE_H__
00019 #define __CODEX_CIPHERS_TRANSLATIONCERTIFICATE_H__
00020
00021 #include "ElGamal.h"
00022 #include "HashFunction.h"
00023
00024 namespace CODEX_Ciphers
00025 {
00048 class TranslationCertificate : public CODEX_ASN1::Base
00049 {
00050 public :
00052 TranslationCertificate();
00053
00087 TranslationCertificate( const ElGamalPublicKey& pubKeyRecipient,
00088 const ElGamalPrivateKey& privKeyCreator,
00089 const CODEX_ASN1::BigNumber& h,
00090 const BIGNUM * k,
00091 const ElGamalCipherText& cipherTextCreator,
00092 const HashFunction& hashFunc );
00093
00095 TranslationCertificate( const CODEX_ASN1::BigNumber& z1bar,
00096 const CODEX_ASN1::BigNumber& z2bar,
00097 const CODEX_ASN1::BigNumber& G,
00098 const CODEX_ASN1::BigNumber& H,
00099 const CODEX_ASN1::BigNumber& delta,
00100 const CODEX_ASN1::BigNumber& F,
00101 const CODEX_ASN1::BigNumber& M,
00102 const CODEX_ASN1::BigNumber& d1,
00103 const CODEX_ASN1::BigNumber& d2 );
00104
00106 TranslationCertificate( const TranslationCertificate& aCert );
00107
00109 virtual ~TranslationCertificate() {}
00110
00112 void operator=( const TranslationCertificate& aCert );
00113
00115 const CODEX_ASN1::BigNumber& z1bar() const { return m_z1bar; }
00117 const CODEX_ASN1::BigNumber& z2bar() const { return m_z2bar; }
00119 const CODEX_ASN1::BigNumber& G() const { return m_G; }
00121 const CODEX_ASN1::BigNumber& H() const { return m_H; }
00123 const CODEX_ASN1::BigNumber& delta() const { return m_delta; }
00125 const CODEX_ASN1::BigNumber& F() const { return m_F; }
00127 const CODEX_ASN1::BigNumber& M() const { return m_M; }
00129 const CODEX_ASN1::BigNumber& d1() const { return m_d1; }
00131 const CODEX_ASN1::BigNumber& d2() const { return m_d2; }
00132
00159 bool verify( const CODEX_ASN1::BigNumber& yCreator,
00160 const ElGamalPublicKey& pubKeyRecipient,
00161 const ElGamalCipherText& cipherTextCreator,
00162 const ElGamalCipherText& cipherTextRecipient,
00163 const CODEX_ASN1::BigNumber& h,
00164 const HashFunction& hashFunc ) const;
00165
00167 int marshal( unsigned char ** pp ) const;
00168
00170 void* unmarshal( void* bogus, unsigned char ** pp, long length );
00171
00172 private :
00173 CODEX_ASN1::BigNumber m_z1bar;
00174 CODEX_ASN1::BigNumber m_z2bar;
00175 CODEX_ASN1::BigNumber m_G;
00176 CODEX_ASN1::BigNumber m_H;
00177 CODEX_ASN1::BigNumber m_delta;
00178 CODEX_ASN1::BigNumber m_F;
00179 CODEX_ASN1::BigNumber m_M;
00180 CODEX_ASN1::BigNumber m_d1;
00181 CODEX_ASN1::BigNumber m_d2;
00182 };
00183 }
00184
00185 #endif