Logo Search packages:      
Sourcecode: libdkim version File versions  Download package

dkimsign.h

/*****************************************************************************
*  Copyright 2005 Alt-N Technologies, Ltd. 
*
*  Licensed under the Apache License, Version 2.0 (the "License"); 
*  you may not use this file except in compliance with the License. 
*  You may obtain a copy of the License at 
*
*      http://www.apache.org/licenses/LICENSE-2.0 
*
*  This code incorporates intellectual property owned by Yahoo! and licensed 
*  pursuant to the Yahoo! DomainKeys Patent License Agreement.
*
*  Unless required by applicable law or agreed to in writing, software 
*  distributed under the License is distributed on an "AS IS" BASIS, 
*  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
*  See the License for the specific language governing permissions and 
*  limitations under the License.
*
*****************************************************************************/

#ifndef DKIMSIGN_H
#define DKIMSIGN_H

#include "dkimbase.h"

class CDKIMSign : public CDKIMBase
{
public:

      CDKIMSign();
      ~CDKIMSign();

      int Init( DKIMSignOptions* pOptions );

      int GetSig( char* szPrivKey, char* szSignature, int nSigLength );
      int GetSig2( char* szPrivKey, char** pszSignature );

      virtual int ProcessHeaders(void);
      virtual int ProcessBody( char* szBuffer, int nBufLength, bool bEOF );

      enum CKDKIMConstants { OptimalHeaderLineLength = 65 };

protected:

      void Hash( const char* szBuffer, int nBufLength, bool bHdr, bool bAllmanOnly = false );

      bool SignThisTag( const string& sTag );
      void GetHeaderParams( const string& sHdr );
      void ProcessHeader( const string& sHdr );
      bool ParseFromAddress( void );

      void InitSig(void);
      void AddTagToSig( char* Tag, const string &sValue, char cbrk, bool bFold );
      void AddTagToSig( char* Tag, unsigned long nValue );
      void AddInterTagSpace( int nSizeOfNextTag );
      void AddFoldedValueToSig( const string &sValue, char cbrk );

      bool IsRequiredHeader( const string& sTag );
      int ConstructSignature( char* szPrivKey, bool bUseIetfBodyHash, bool bUseSha256 );

      int AssembleReturnedSig( char* szPrivKey );

      EVP_MD_CTX m_Hdr_ietf_sha1ctx;            /* the header hash for ietf sha1  */
      EVP_MD_CTX m_Hdr_ietf_sha256ctx;    /* the header hash for ietf sha256 */

      EVP_MD_CTX m_Bdy_ietf_sha1ctx;            /* the body hash for ietf sha1  */
      EVP_MD_CTX m_Bdy_ietf_sha256ctx;    /* the body hash for ietf sha256 */

      EVP_MD_CTX m_allman_sha1ctx;        /* the hash for allman sha1  */

      int m_Canon;                        // canonization method

      int m_EmptyLineCount;

      string hParam;
      string sFrom;
      string sSender;
      string sSelector;
      string sDomain;
      string sIdentity;                         // for i= tag, if empty tag will not be included in sig
      string sRequiredHeaders;

      bool m_IncludeBodyLengthTag;
      int m_nBodyLength;
      time_t m_ExpireTime;
      int m_nIncludeTimeStamp;                        // 0 = don't include t= tag, 1 = include t= tag
      int m_nIncludeQueryMethod;                      // 0 = don't include q= tag, 1 = include q= tag
      int m_nHash;                                          // use one of the DKIM_HASH_xx constants here
      int m_nIncludeCopiedHeaders;              // 0 = don't include z= tag, 1 = include z= tag
      int m_nIncludeBodyHash;                         // 0 = calculate sig using draft 0, 1 = include bh= tag and 
                                                                  // use new signature computation algorithm


      DKIMHEADERCALLBACK m_pfnHdrCallback;

      string m_sSig;
      int m_nSigPos;

      string m_sReturnedSig;
      bool m_bReturnedSigAssembled;

      string m_sCopiedHeaders;

};



#endif // DKIMSIGN_H

Generated by  Doxygen 1.6.0   Back to index