00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef __CODEX_CIPHERS_TRANSLATIONCERTIFICATE_H__
00022 #define __CODEX_CIPHERS_TRANSLATIONCERTIFICATE_H__
00023
00024 #include "ElGamal.h"
00025 #include "HashFunction.h"
00026
00027 namespace CODEX_Ciphers
00028 {
00051 class TranslationCertificate : public CODEX_ASN1::Base
00052 {
00053 public :
00055 TranslationCertificate();
00056
00090 TranslationCertificate( const ElGamalPublicKey& pubKeyRecipient,
00091 const ElGamalPrivateKey& privKeyCreator,
00092 const CODEX_ASN1::BigNumber& h,
00093 const BIGNUM * k,
00094 const ElGamalCipherText& cipherTextCreator,
00095 const HashFunction& hashFunc );
00096
00098 TranslationCertificate( const CODEX_ASN1::BigNumber& z1bar,
00099 const CODEX_ASN1::BigNumber& z2bar,
00100 const CODEX_ASN1::BigNumber& G,
00101 const CODEX_ASN1::BigNumber& H,
00102 const CODEX_ASN1::BigNumber& delta,
00103 const CODEX_ASN1::BigNumber& F,
00104 const CODEX_ASN1::BigNumber& M,
00105 const CODEX_ASN1::BigNumber& d1,
00106 const CODEX_ASN1::BigNumber& d2 );
00107
00109 TranslationCertificate( const TranslationCertificate& aCert );
00110
00112 virtual ~TranslationCertificate() {}
00113
00115 void operator=( const TranslationCertificate& aCert );
00116
00118 const CODEX_ASN1::BigNumber& z1bar() const { return m_z1bar; }
00120 const CODEX_ASN1::BigNumber& z2bar() const { return m_z2bar; }
00122 const CODEX_ASN1::BigNumber& G() const { return m_G; }
00124 const CODEX_ASN1::BigNumber& H() const { return m_H; }
00126 const CODEX_ASN1::BigNumber& delta() const { return m_delta; }
00128 const CODEX_ASN1::BigNumber& F() const { return m_F; }
00130 const CODEX_ASN1::BigNumber& M() const { return m_M; }
00132 const CODEX_ASN1::BigNumber& d1() const { return m_d1; }
00134 const CODEX_ASN1::BigNumber& d2() const { return m_d2; }
00135
00162 bool verify( const CODEX_ASN1::BigNumber& yCreator,
00163 const ElGamalPublicKey& pubKeyRecipient,
00164 const ElGamalCipherText& cipherTextCreator,
00165 const ElGamalCipherText& cipherTextRecipient,
00166 const CODEX_ASN1::BigNumber& h,
00167 const HashFunction& hashFunc ) const;
00168
00170 int marshal( unsigned char ** pp ) const;
00171
00173 void* unmarshal( void* bogus, unsigned char ** pp, long length );
00174
00175 private :
00176 CODEX_ASN1::BigNumber m_z1bar;
00177 CODEX_ASN1::BigNumber m_z2bar;
00178 CODEX_ASN1::BigNumber m_G;
00179 CODEX_ASN1::BigNumber m_H;
00180 CODEX_ASN1::BigNumber m_delta;
00181 CODEX_ASN1::BigNumber m_F;
00182 CODEX_ASN1::BigNumber m_M;
00183 CODEX_ASN1::BigNumber m_d1;
00184 CODEX_ASN1::BigNumber m_d2;
00185 };
00186 }
00187
00188 #endif