Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

ElGamalSignature.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: ElGamalSignature.cc,v 1.3 2004/05/19 15:56:47 mmarsh Exp $
00008 //
00009 // $Log: ElGamalSignature.cc,v $
00010 // Revision 1.3  2004/05/19 15:56:47  mmarsh
00011 // *** empty log message ***
00012 //
00013 // Revision 1.2  2003/11/04 22:31:47  mmarsh
00014 // *** empty log message ***
00015 //
00016 //
00017 
00018 #include "ElGamal.h"
00019 
00020 using namespace CODEX_Ciphers;
00021 
00022 ElGamalSignature::ElGamalSignature() :
00023    CODEX_ASN1::Base( false )
00024 {
00025 }
00026 
00027 ElGamalSignature::ElGamalSignature( BIGNUM * r, BIGNUM * s ) :
00028    CODEX_ASN1::Base( true ),
00029    m_r( r ),
00030    m_s( s )
00031 {
00032 }
00033 
00034 ElGamalSignature::ElGamalSignature( const CODEX_ASN1::BigNumber& r,
00035                                     const CODEX_ASN1::BigNumber& s ) :
00036    CODEX_ASN1::Base( true ),
00037    m_r( r ),
00038    m_s( s )
00039 {
00040 }
00041 
00042 ElGamalSignature::ElGamalSignature( const ElGamalSignature& aSig ) :
00043    CODEX_ASN1::Base( aSig.m_initialized ),
00044    m_r( aSig.m_r ),
00045    m_s( aSig.m_s )
00046 {
00047 }
00048 
00049 ElGamalSignature::~ElGamalSignature()
00050 {
00051 }
00052 
00053 void
00054 ElGamalSignature::operator=( const ElGamalSignature& aSig )
00055 {
00056    m_initialized = aSig.m_initialized;
00057    m_r           = aSig.m_r;
00058    m_s           = aSig.m_s;
00059 }
00060 
00061 int
00062 ElGamalSignature::marshal( unsigned char ** pp ) const
00063 {
00064    int r=0;
00065    int ret=0;
00066    unsigned char * p;
00067 
00068    ret += m_r.marshal(0);
00069    ret += m_s.marshal(0);
00070    M_ASN1_I2D_seq_total();
00071    m_r.marshal(&p);
00072    m_s.marshal(&p);
00073    M_ASN1_I2D_finish();
00074 }
00075 
00076 void*
00077 ElGamalSignature::unmarshal( void* bogus, unsigned char ** pp, long length )
00078 {
00079    if ( m_initialized )
00080    {
00081       return NULL;
00082    }
00083    if ( (NULL == pp) || (NULL == *pp) )
00084    {
00085       return NULL;
00086    }
00087    ASN1_CTX c;
00088    c.pp = pp;
00089    c.q = *pp;
00090    c.error = ERR_R_NESTED_ASN1_ERROR;
00091    int i;
00092 
00093    M_ASN1_D2I_Init();
00094    M_ASN1_D2I_start_sequence();
00095    M_ASN1_D2I_get(i, m_r.unmarshal);
00096    M_ASN1_D2I_get(i, m_s.unmarshal);
00097    if ( !asn1_Finish(&c) )
00098    {
00099       return NULL;
00100    }
00101    *pp=c.p;
00102    m_initialized = true;
00103    return this;
00104   err: // needed by ASN.1 macros
00105    return NULL;
00106 }

Generated on Fri May 6 17:39:12 2005 for COrnell Data EXchange (CODEX) by  doxygen 1.4.1