Lines 31-36
Link Here
|
31 |
|
31 |
|
32 |
#include <string.h> |
32 |
#include <string.h> |
33 |
#include <map> |
33 |
#include <map> |
|
|
34 |
#include <stdexcept> |
34 |
|
35 |
|
35 |
#include "dkim.h" |
36 |
#include "dkim.h" |
36 |
#include "dkimsign.h" |
37 |
#include "dkimsign.h" |
Lines 41-60
Link Here
|
41 |
m_EmptyLineCount = 0; |
42 |
m_EmptyLineCount = 0; |
42 |
m_pfnHdrCallback = NULL; |
43 |
m_pfnHdrCallback = NULL; |
43 |
|
44 |
|
44 |
EVP_SignInit( &m_allman_sha1ctx, EVP_sha1() ); |
45 |
m_allman_sha1ctx = EVP_MD_CTX_new(); |
45 |
EVP_SignInit( &m_Hdr_ietf_sha1ctx, EVP_sha1() ); |
46 |
if ( m_allman_sha1ctx == NULL ) |
46 |
EVP_SignInit( &m_Hdr_ietf_sha256ctx, EVP_sha256() ); |
47 |
throw std::runtime_error("out of memory"); |
47 |
EVP_DigestInit( &m_Bdy_ietf_sha1ctx, EVP_sha1() ); |
48 |
EVP_SignInit( m_allman_sha1ctx, EVP_sha1() ); |
48 |
EVP_DigestInit( &m_Bdy_ietf_sha256ctx, EVP_sha256() ); |
49 |
m_Hdr_ietf_sha1ctx = EVP_MD_CTX_new(); |
|
|
50 |
if ( m_Hdr_ietf_sha1ctx == NULL ) |
51 |
throw std::runtime_error("out of memory"); |
52 |
EVP_SignInit( m_Hdr_ietf_sha1ctx, EVP_sha1() ); |
53 |
m_Hdr_ietf_sha256ctx = EVP_MD_CTX_new(); |
54 |
if ( m_Hdr_ietf_sha256ctx == NULL ) |
55 |
throw std::runtime_error("out of memory"); |
56 |
EVP_SignInit( m_Hdr_ietf_sha256ctx, EVP_sha256() ); |
57 |
m_Bdy_ietf_sha1ctx = EVP_MD_CTX_new(); |
58 |
if ( m_Bdy_ietf_sha1ctx == NULL ) |
59 |
throw std::runtime_error("out of memory"); |
60 |
EVP_DigestInit( m_Bdy_ietf_sha1ctx, EVP_sha1() ); |
61 |
m_Bdy_ietf_sha256ctx = EVP_MD_CTX_new(); |
62 |
if ( m_Bdy_ietf_sha256ctx == NULL ) |
63 |
throw std::runtime_error("out of memory"); |
64 |
EVP_DigestInit( m_Bdy_ietf_sha256ctx, EVP_sha256() ); |
49 |
} |
65 |
} |
50 |
|
66 |
|
51 |
CDKIMSign::~CDKIMSign() |
67 |
CDKIMSign::~CDKIMSign() |
52 |
{ |
68 |
{ |
53 |
EVP_MD_CTX_cleanup( &m_allman_sha1ctx ); |
69 |
EVP_MD_CTX_free( m_allman_sha1ctx ); |
54 |
EVP_MD_CTX_cleanup( &m_Hdr_ietf_sha1ctx ); |
70 |
EVP_MD_CTX_free( m_Hdr_ietf_sha1ctx ); |
55 |
EVP_MD_CTX_cleanup( &m_Hdr_ietf_sha256ctx ); |
71 |
EVP_MD_CTX_free( m_Hdr_ietf_sha256ctx ); |
56 |
EVP_MD_CTX_cleanup( &m_Bdy_ietf_sha1ctx ); |
72 |
EVP_MD_CTX_free( m_Bdy_ietf_sha1ctx ); |
57 |
EVP_MD_CTX_cleanup( &m_Bdy_ietf_sha256ctx ); |
73 |
EVP_MD_CTX_free( m_Bdy_ietf_sha256ctx ); |
58 |
} |
74 |
} |
59 |
|
75 |
|
60 |
//////////////////////////////////////////////////////////////////////////////// |
76 |
//////////////////////////////////////////////////////////////////////////////// |
Lines 150-183
Link Here
|
150 |
{ |
166 |
{ |
151 |
if( m_nIncludeBodyHash & DKIM_BODYHASH_ALLMAN_1 ) |
167 |
if( m_nIncludeBodyHash & DKIM_BODYHASH_ALLMAN_1 ) |
152 |
{ |
168 |
{ |
153 |
EVP_SignUpdate( &m_allman_sha1ctx, szBuffer, nBufLength ); |
169 |
EVP_SignUpdate( m_allman_sha1ctx, szBuffer, nBufLength ); |
154 |
} |
170 |
} |
155 |
} |
171 |
} |
156 |
else |
172 |
else |
157 |
{ |
173 |
{ |
158 |
if( m_nIncludeBodyHash < DKIM_BODYHASH_IETF_1 ) |
174 |
if( m_nIncludeBodyHash < DKIM_BODYHASH_IETF_1 ) |
159 |
{ |
175 |
{ |
160 |
EVP_SignUpdate( &m_allman_sha1ctx, szBuffer, nBufLength ); |
176 |
EVP_SignUpdate( m_allman_sha1ctx, szBuffer, nBufLength ); |
161 |
} |
177 |
} |
162 |
else if( m_nIncludeBodyHash & DKIM_BODYHASH_IETF_1 ) |
178 |
else if( m_nIncludeBodyHash & DKIM_BODYHASH_IETF_1 ) |
163 |
{ |
179 |
{ |
164 |
if( m_nIncludeBodyHash & DKIM_BODYHASH_ALLMAN_1 ) |
180 |
if( m_nIncludeBodyHash & DKIM_BODYHASH_ALLMAN_1 ) |
165 |
{ |
181 |
{ |
166 |
EVP_SignUpdate( &m_allman_sha1ctx, szBuffer, nBufLength ); |
182 |
EVP_SignUpdate( m_allman_sha1ctx, szBuffer, nBufLength ); |
167 |
} |
183 |
} |
168 |
if( m_nHash & DKIM_HASH_SHA256 ) |
184 |
if( m_nHash & DKIM_HASH_SHA256 ) |
169 |
{ |
185 |
{ |
170 |
if( bHdr ) |
186 |
if( bHdr ) |
171 |
EVP_SignUpdate( &m_Hdr_ietf_sha256ctx, szBuffer, nBufLength ); |
187 |
EVP_SignUpdate( m_Hdr_ietf_sha256ctx, szBuffer, nBufLength ); |
172 |
else |
188 |
else |
173 |
EVP_DigestUpdate( &m_Bdy_ietf_sha256ctx, szBuffer, nBufLength ); |
189 |
EVP_DigestUpdate( m_Bdy_ietf_sha256ctx, szBuffer, nBufLength ); |
174 |
} |
190 |
} |
175 |
if( m_nHash != DKIM_HASH_SHA256 ) |
191 |
if( m_nHash != DKIM_HASH_SHA256 ) |
176 |
{ |
192 |
{ |
177 |
if( bHdr ) |
193 |
if( bHdr ) |
178 |
EVP_SignUpdate( &m_Hdr_ietf_sha1ctx, szBuffer, nBufLength ); |
194 |
EVP_SignUpdate( m_Hdr_ietf_sha1ctx, szBuffer, nBufLength ); |
179 |
else |
195 |
else |
180 |
EVP_DigestUpdate( &m_Bdy_ietf_sha1ctx, szBuffer, nBufLength ); |
196 |
EVP_DigestUpdate( m_Bdy_ietf_sha1ctx, szBuffer, nBufLength ); |
181 |
} |
197 |
} |
182 |
} |
198 |
} |
183 |
} |
199 |
} |
Lines 864-870
Link Here
|
864 |
unsigned char Hash[EVP_MAX_MD_SIZE]; |
880 |
unsigned char Hash[EVP_MAX_MD_SIZE]; |
865 |
unsigned int nHashLen = 0; |
881 |
unsigned int nHashLen = 0; |
866 |
|
882 |
|
867 |
EVP_DigestFinal( bUseSha256 ? &m_Bdy_ietf_sha256ctx : &m_Bdy_ietf_sha1ctx, Hash, &nHashLen ); |
883 |
EVP_DigestFinal( bUseSha256 ? m_Bdy_ietf_sha256ctx : m_Bdy_ietf_sha1ctx, Hash, &nHashLen ); |
868 |
|
884 |
|
869 |
bio = BIO_new(BIO_s_mem()); |
885 |
bio = BIO_new(BIO_s_mem()); |
870 |
if (!bio) { |
886 |
if (!bio) { |
Lines 935-945
Link Here
|
935 |
|
951 |
|
936 |
if( bUseIetfBodyHash ) |
952 |
if( bUseIetfBodyHash ) |
937 |
{ |
953 |
{ |
938 |
EVP_SignUpdate( bUseSha256 ? &m_Hdr_ietf_sha256ctx : &m_Hdr_ietf_sha1ctx, sTemp.c_str(), sTemp.size() ); |
954 |
EVP_SignUpdate( bUseSha256 ? m_Hdr_ietf_sha256ctx : m_Hdr_ietf_sha1ctx, sTemp.c_str(), sTemp.size() ); |
939 |
} |
955 |
} |
940 |
else |
956 |
else |
941 |
{ |
957 |
{ |
942 |
EVP_SignUpdate( &m_allman_sha1ctx, sTemp.c_str(), sTemp.size() ); |
958 |
EVP_SignUpdate( m_allman_sha1ctx, sTemp.c_str(), sTemp.size() ); |
943 |
} |
959 |
} |
944 |
|
960 |
|
945 |
bio = BIO_new_mem_buf(szPrivKey, -1); |
961 |
bio = BIO_new_mem_buf(szPrivKey, -1); |
Lines 966-976
Link Here
|
966 |
|
982 |
|
967 |
if( bUseIetfBodyHash ) |
983 |
if( bUseIetfBodyHash ) |
968 |
{ |
984 |
{ |
969 |
nSignRet = EVP_SignFinal( bUseSha256 ? &m_Hdr_ietf_sha256ctx : &m_Hdr_ietf_sha1ctx, sig, &siglen, pkey); |
985 |
nSignRet = EVP_SignFinal( bUseSha256 ? m_Hdr_ietf_sha256ctx : m_Hdr_ietf_sha1ctx, sig, &siglen, pkey); |
970 |
} |
986 |
} |
971 |
else |
987 |
else |
972 |
{ |
988 |
{ |
973 |
nSignRet = EVP_SignFinal( &m_allman_sha1ctx, sig, &siglen, pkey); |
989 |
nSignRet = EVP_SignFinal( m_allman_sha1ctx, sig, &siglen, pkey); |
974 |
} |
990 |
} |
975 |
|
991 |
|