Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   Related Pages  

KeyStoredMsg.cc

00001 /*
00002  * Copyright 2003 Michael A. Marsh, Cornell University. All rights reserved.
00003  * This software is released under the modified BSD license.
00004  * See the file LICENSE in the top-level directory for details.
00005  */
00006 //
00007 // $Id: KeyStoredMsg.cc,v 1.3 2004/05/19 15:56:48 mmarsh Exp $
00008 //
00009 // $Log: KeyStoredMsg.cc,v $
00010 // Revision 1.3  2004/05/19 15:56:48  mmarsh
00011 // *** empty log message ***
00012 //
00013 // Revision 1.2  2003/11/04 22:31:48  mmarsh
00014 // *** empty log message ***
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: // needed by ASN.1 macros
00096    return NULL;
00097 }

Generated on Wed Jun 2 16:32:55 2004 for COrnell Data EXchange (CODEX) by doxygen1.2.18