00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "Message.h"
00019
00020 using namespace CODEX_Client;
00021 using namespace CODEX_ASN1;
00022 using namespace CODEX_Ciphers;
00023
00024 KeyStoredMsg::KeyStoredMsg() :
00025 Message( false )
00026 {
00027 }
00028
00029 KeyStoredMsg::KeyStoredMsg( const OctetString& name,
00030 const RSASignature& requestSignature ) :
00031 Message( true ),
00032 m_name( name ),
00033 m_requestSignature( requestSignature )
00034 {
00035 }
00036
00037 KeyStoredMsg::KeyStoredMsg( const KeyStoredMsg& aKSM ) :
00038 Message( aKSM.m_initialized ),
00039 m_name( aKSM.m_name ),
00040 m_requestSignature( aKSM.m_requestSignature )
00041 {
00042 }
00043
00044 void
00045 KeyStoredMsg::operator=( const KeyStoredMsg& aKSM )
00046 {
00047 m_initialized = aKSM.m_initialized;
00048 m_name = aKSM.m_name;
00049 m_requestSignature = aKSM.m_requestSignature;
00050 }
00051
00052 int
00053 KeyStoredMsg::marshal( unsigned char ** pp ) const
00054 {
00055 int r=0;
00056 int ret=0;
00057 unsigned char * p;
00058
00059 ret += m_name.marshal(0);
00060 ret += m_requestSignature.marshal(0);
00061 M_ASN1_I2D_seq_total();
00062 m_name.marshal(&p);
00063 m_requestSignature.marshal(&p);
00064 M_ASN1_I2D_finish();
00065 }
00066
00067 void*
00068 KeyStoredMsg::unmarshal( void* bogus, unsigned char ** pp, long length )
00069 {
00070 if ( m_initialized )
00071 {
00072 return NULL;
00073 }
00074 if ( (NULL == pp) || (NULL == *pp) )
00075 {
00076 return NULL;
00077 }
00078 ASN1_CTX c;
00079 c.pp = pp;
00080 c.q = *pp;
00081 c.error = ERR_R_NESTED_ASN1_ERROR;
00082 int i;
00083
00084 M_ASN1_D2I_Init();
00085 M_ASN1_D2I_start_sequence();
00086 M_ASN1_D2I_get(i, m_name.unmarshal);
00087 M_ASN1_D2I_get(i, m_requestSignature.unmarshal);
00088 if ( !asn1_Finish(&c) )
00089 {
00090 return NULL;
00091 }
00092 *pp=c.p;
00093 m_initialized = true;
00094 return this;
00095 err:
00096 return NULL;
00097 }