RE: Problem(s) verifying signed message with detached content
"Horvath, Tom \(US SSA\)" <[email protected]> Thu, 17 May 2007 11:23:46 -0400
| Newsgroups | gmane.ietf.sfl |
|---|---|
| Message-ID | <27E9F6EA4FD4B649A20AB9610B682E6682A2F0@GLDMS00011.goldlnk.rootlnka.net> |
This is a multi-part message in MIME format.
------_=_NextPart_001_01C79897.5CC0C3FF
Content-Type: text/plain;
charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
Jon,
=20
Your usage of the SFL looks appropriate you have just found one bug and
I am not sure yet about the second problem.
The first problem you reported "encapsulated content digest !=3D message
digest attribute" happens because the SHA-256 message digest reference
algorithm that we use does not return the digest in platform independent
endianness, so the digest comparison fails. The first problem was easy
to fix, simply add the following code at line 4674 of
smp/SMIME/alg_libs/sm_free3/sm_free3.cpp:
=20
} else if (oidDigest =3D=3D SNACC::id_SHA256 ||
oidDigest =3D=3D SNACC::id_ecdsa_with_SHA256)
{
bool bLastBlock =3D false; // set to true when this is the
last block
CryptoPP::SHA256 sha256;
=20
int bytesProcessed=3D0;
int loop =3D pData->Length() / sha256.DigestSize();
=20
SME(pData->Open(SM_FOPEN_READ));
while (!bLastBlock)
{
SME(pchData =3D pData->nRead(sha256.DigestSize(),
(SM_SIZE_T&)lBytesRead));
if ((lBytesRead !=3D sha256.DigestSize()) || (pchData =
=3D=3D
NULL))
bLastBlock =3D true;
sha256.Update((const unsigned char *)pchData,
lBytesRead);
}
=20
CryptoPP::SecByteBlock digest(sha256.DigestSize());
sha256.Final(digest);
=20
SME(pDigest->Open(SM_FOPEN_WRITE)); // open the digest
buffer
SME(pDigest->Write((char *)digest.data(), digest.m_size));=20
status =3D 0;
}
=20
If you do this then the SFL Free 3 CTIL will use crypto++ SHA-256
message digest algorithm which works correctly and returns the digest in
the correct endianness.
=20
I am still looking into the second problem and will get back to your
shortly. =20
=20
--Tom
=20
________________________________
From: [email protected] [mailto:[email protected]] On
Behalf Of Rupe, Jonathan C UTCFS
Sent: Wednesday, May 16, 2007 11:47 AM
To: [email protected]
Subject: Problem(s) verifying signed message with detached content
=20
I am having a problem (or two) verifying a signed message that has
detached content. I am getting the error "encapsulated content digest =
!=3D
message digest attribute". However, I have been able to successfully
verify the message with another API (that I cannot use). If I skip past
where this exception is thrown (in sm_msgsignerinfo.cpp) I also get the
following error: "RSA OID Unknown or Not Handled Yet!" The hashing
algorithm is SHA-256 and signature algorithm is RSA. Is this supported?
Below is my code and attached are the sample files.
I'm new with all this stuff so any help (especially sample code :)) will
be greatly appreciated!=20
Thanks!=20
Jon=20
=20
CSM_AppLogin appLogin;=20
appLogin.AddLogin(CTIL_FILE_NAME, NULL);=20
CSM_Buffer contentInfoBuf("./CHUIDSig.bin");=20
CSM_Buffer* pSignedDataBuf =3D NULL;=20
CSM_ContentInfoMsg contentInfoMsg(&contentInfoBuf);=20
if (contentInfoMsg.IsSignedData())=20
{=20
SM_RET_VAL retVal =3D 0;=20
CSM_MsgToVerify msgToVerify; //(&contentInfoMsg);=20
=20
pSignedDataBuf =3D new CSM_Buffer(
contentInfoMsg.AccessEncapContentClear()->m_content.Access(),=20
=20
contentInfoMsg.AccessEncapContentClear()->m_content.Length() );=20
=20
retVal =3D msgToVerify.PreProc(&appLogin, pSignedDataBuf);=20
if( retVal !=3D SM_NO_ERROR )=20
{=20
tcout <<_T("Failed to process verification message.")
<<endl;=20
return 1;=20
}=20
CSM_Buffer encapContent("./CHUIDData.bin");=20
CSM_Content content(&encapContent);=20
SNACC::AsnOid encapAsnOid =3D ID_PIV_CHUIDSECURITYOBJECT;=20
msgToVerify.SetEncapContentClear(content);=20
if( (retVal =3D msgToVerify.Verify(&appLogin)) =3D=3D =
SM_NO_ERROR )=20
{=20
tcout <<_T("Verification passed!") <<endl;=20
}=20
else=20
{=20
tcout <<_T("Failed signature verification.") <<endl;=20
}=20
}=20
else=20
{=20
tcout <<_T("Content doesn't contain SignedData") <<endl;=20
}=20
<<TestData.zip>>=20
------_=_NextPart_001_01C79897.5CC0C3FF
Content-Type: text/html;
charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
<html xmlns:v=3D"urn:schemas-microsoft-com:vml" =
xmlns:o=3D"urn:schemas-microsoft-com:office:office" =
xmlns:w=3D"urn:schemas-microsoft-com:office:word" =
xmlns=3D"http://www.w3.org/TR/REC-html40">
<head>
<META HTTP-EQUIV=3D"Content-Type" CONTENT=3D"text/html; =
charset=3Dus-ascii">
<meta name=3DGenerator content=3D"Microsoft Word 11 (filtered medium)">
<!--[if !mso]>
<style>
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style>
<![endif]-->
<title>Problem(s) verifying signed message with detached content</title>
<style>
<!--
/* Font Definitions */
@font-face
{font-family:Tahoma;
panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0in;
margin-bottom:.0001pt;
font-size:12.0pt;
font-family:"Times New Roman";}
a:link, span.MsoHyperlink
{color:blue;
text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
{color:purple;
text-decoration:underline;}
p
{mso-margin-top-alt:auto;
margin-right:0in;
mso-margin-bottom-alt:auto;
margin-left:0in;
font-size:12.0pt;
font-family:"Times New Roman";}
span.EmailStyle18
{mso-style-type:personal-reply;
font-family:Arial;
color:navy;}
@page Section1
{size:8.5in 11.0in;
margin:1.0in 1.25in 1.0in 1.25in;}
div.Section1
{page:Section1;}
-->
</style>
</head>
<body lang=3DEN-US link=3Dblue vlink=3Dpurple>
<div class=3DSection1>
<p class=3DMsoNormal><font size=3D2 color=3Dnavy face=3DArial><span =
style=3D'font-size:
10.0pt;font-family:Arial;color:navy'>Jon,<o:p></o:p></span></font></p>
<p class=3DMsoNormal><font size=3D2 color=3Dnavy face=3DArial><span =
style=3D'font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'>Your usage of the SFL looks appropriate you have just =
found one
bug and I am not sure yet about the second problem.<font =
color=3Dnavy><span
style=3D'color:navy'><o:p></o:p></span></font></span></font></p>
<p class=3DMsoNormal><font size=3D2 color=3Dnavy face=3DArial><span =
style=3D'font-size:
10.0pt;font-family:Arial;color:navy'>The first problem you reported =
</span></font><font
size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;font-family:Arial'>"encapsulated
content digest !=3D message digest attribute" happens because the =
SHA-256 message
digest reference algorithm that we use does not return the digest in =
platform
independent endianness, so the digest comparison fails. The first =
problem was
easy to fix, simply add the following code at line 4674 of =
smp/SMIME/alg_libs/sm_free3/sm_free3.cpp:<o:p></o:p></span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'><o:p> </o:p></span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'> } =
else if (oidDigest =3D=3D SNACC::id_SHA256
||<o:p></o:p></span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier =
New"'> &=
nbsp; oidDigest =3D=3D
SNACC::id_ecdsa_with_SHA256)<o:p></o:p></span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'> =
{<o:p></o:p></span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier =
New"'> =
bool bLastBlock =3D false; // set to true
when this is the last block<o:p></o:p></span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier =
New"'> =
CryptoPP::SHA256 sha256;<o:p></o:p></span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p> </o:p></span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier =
New"'> =
int bytesProcessed=3D0;<o:p></o:p></span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier =
New"'> =
int loop =3D pData->Length() /
sha256.DigestSize();<o:p></o:p></span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p> </o:p></span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'> =
=
SME(pData->Open(SM_FOPEN_READ));<o:p></o:p></span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'> =
while =
(!bLastBlock)<o:p></o:p></span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'> =
{<o:p></o:p></span></font></p>
<p class=3DMsoNormal style=3D'margin-left:1.5in'><font size=3D2 =
face=3D"Courier New"><span
style=3D'font-size:10.0pt;font-family:"Courier New"'>SME(pchData =3D
pData->nRead(sha256.DigestSize(), =
(SM_SIZE_T&)lBytesRead));<o:p></o:p></span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier =
New"'> =
if ((lBytesRead !=3D
sha256.DigestSize()) || (pchData =3D=3D =
NULL))<o:p></o:p></span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier =
New"'> =
=
bLastBlock =3D true;<o:p></o:p></span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier =
New"'> =
sha256.Update((const =
unsigned char
*)pchData, lBytesRead);<o:p></o:p></span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'> =
}<o:p></o:p></span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier =
New"'> =
<o:p></o:p></span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier =
New"'> =
CryptoPP::SecByteBlock
digest(sha256.DigestSize());<o:p></o:p></span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier =
New"'> =
sha256.Final(digest);<o:p></o:p></span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p> </o:p></span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier =
New"'> =
SME(pDigest->Open(SM_FOPEN_WRITE));
// open the digest buffer<o:p></o:p></span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier =
New"'> =
SME(pDigest->Write((char
*)digest.data(), digest.m_size)); <o:p></o:p></span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier =
New"'> =
status =3D 0;<o:p></o:p></span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'> =
}<o:p></o:p></span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p> </o:p></span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'>If you do this then the SFL Free 3 CTIL will use =
crypto++
SHA-256 message digest algorithm which works correctly and returns the =
digest
in the correct endianness.<o:p></o:p></span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'><o:p> </o:p></span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'>I am still looking into the second problem and will =
get back
to your shortly. <o:p></o:p></span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'><o:p> </o:p></span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'>--Tom<o:p></o:p></span></font></p>
<p class=3DMsoNormal><font size=3D2 color=3Dnavy face=3DArial><span =
style=3D'font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<div>
<div class=3DMsoNormal align=3Dcenter style=3D'text-align:center'><font =
size=3D3
face=3D"Times New Roman"><span style=3D'font-size:12.0pt'>
<hr size=3D2 width=3D"100%" align=3Dcenter tabindex=3D-1>
</span></font></div>
<p class=3DMsoNormal><b><font size=3D2 face=3DTahoma><span =
style=3D'font-size:10.0pt;
font-family:Tahoma;font-weight:bold'>From:</span></font></b><font =
size=3D2
face=3DTahoma><span style=3D'font-size:10.0pt;font-family:Tahoma'>
[email protected] [mailto:[email protected]] <b><span
style=3D'font-weight:bold'>On Behalf Of </span></b>Rupe, Jonathan C =
UTCFS<br>
<b><span style=3D'font-weight:bold'>Sent:</span></b> Wednesday, May 16, =
2007
11:47 AM<br>
<b><span style=3D'font-weight:bold'>To:</span></b> [email protected]<br>
<b><span style=3D'font-weight:bold'>Subject:</span></b> Problem(s) =
verifying
signed message with detached content</span></font><o:p></o:p></p>
</div>
<p class=3DMsoNormal><font size=3D3 face=3D"Times New Roman"><span =
style=3D'font-size:
12.0pt'><o:p> </o:p></span></font></p>
<p><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;font-family:Arial'>I
am having a problem (or two) verifying a signed message that has =
detached
content. I am getting the error "encapsulated content digest !=3D =
message
digest attribute". However, I have been able to successfully verify =
the
message with another API (that I cannot use). If I skip past where this
exception is thrown (in sm_msgsignerinfo.cpp) I also get the following =
error:
"RSA OID Unknown or Not Handled Yet!" The hashing algorithm is
SHA-256 and signature algorithm is RSA. Is this supported? Below =
is my
code and attached are the sample files.</span></font><o:p></o:p></p>
<p><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;font-family:Arial'>I'm
new with all this stuff so any help (especially sample code :)) will be =
greatly
appreciated!</span></font> <o:p></o:p></p>
<p><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;font-family:Arial'>Thanks!</span></font>
<br>
<font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;font-family:Arial'>Jon</span></font>
<o:p></o:p></p>
<p class=3DMsoNormal><font size=3D3 face=3D"Times New Roman"><span =
style=3D'font-size:
12.0pt'><o:p> </o:p></span></font></p>
<p><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;font-family:
"Courier New"'>CSM_AppLogin appLogin;</span></font> <br>
<font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;font-family:"Courier =
New"'>appLogin.AddLogin(CTIL_FILE_NAME,
NULL);</span></font> <o:p></o:p></p>
<p><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;font-family:
"Courier New"'>CSM_Buffer =
contentInfoBuf("./CHUIDSig.bin");</span></font>
<br>
<font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;font-family:"Courier New"'>CSM_Buffer*
pSignedDataBuf =3D NULL;</span></font> <o:p></o:p></p>
<p><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;font-family:
"Courier New"'>CSM_ContentInfoMsg =
contentInfoMsg(&contentInfoBuf);</span></font>
<br>
<font size=3D2 color=3Dblue face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New";color:blue'>if</span></font><font size=3D2
face=3D"Courier New"><span =
style=3D'font-size:10.0pt;font-family:"Courier New"'>
(contentInfoMsg.IsSignedData())</span></font> <br>
<font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;font-family:"Courier New"'>{</span></font>
<br>
<font size=3D2 =
face=3D"Courier New"><span
style=3D'font-size:10.0pt;font-family:"Courier New"'>SM_RET_VAL retVal =
=3D 0;</span></font>
<o:p></o:p></p>
<p><font size=3D3 face=3D"Times New Roman"><span =
style=3D'font-size:12.0pt'>
</span></font><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>CSM_MsgToVerify msgToVerify; <font =
color=3Dgreen><span
style=3D'color:green'>//(&contentInfoMsg);</span></font></span></font=
> <br>
<br>
<font size=3D2 =
face=3D"Courier New"><span
style=3D'font-size:10.0pt;font-family:"Courier New"'>pSignedDataBuf =3D =
<font
color=3Dblue><span style=3D'color:blue'>new</span></font>
CSM_Buffer(
contentInfoMsg.AccessEncapContentClear()->m_content.Access(),</span></=
font> <br>
=
<font size=3D2 =
face=3D"Courier New"><span
style=3D'font-size:10.0pt;font-family:"Courier =
New"'>contentInfoMsg.AccessEncapContentClear()->m_content.Length()
);</span></font> <br>
<br>
<font size=3D2 =
face=3D"Courier New"><span
style=3D'font-size:10.0pt;font-family:"Courier New"'>retVal =3D
msgToVerify.PreProc(&appLogin, pSignedDataBuf);</span></font> <br>
<font size=3D2 color=3Dblue
face=3D"Courier New"><span =
style=3D'font-size:10.0pt;font-family:"Courier New";
color:blue'>if</span></font><font size=3D2 face=3D"Courier New"><span
style=3D'font-size:10.0pt;font-family:"Courier New"'>( retVal !=3D =
SM_NO_ERROR )</span></font>
<br>
<font size=3D2 =
face=3D"Courier New"><span
style=3D'font-size:10.0pt;font-family:"Courier New"'>{</span></font> =
<br>
<font size=3D2 =
face=3D"Courier New"><span
style=3D'font-size:10.0pt;font-family:"Courier New"'>tcout
<<_T("Failed to process verification message.") =
<<endl;</span></font>
<br>
<font size=3D2 color=3Dblue
face=3D"Courier New"><span =
style=3D'font-size:10.0pt;font-family:"Courier New";
color:blue'>return</span></font><font size=3D2 face=3D"Courier =
New"><span
style=3D'font-size:10.0pt;font-family:"Courier New"'> 1;</span></font> =
<br>
<font size=3D2 =
face=3D"Courier New"><span
style=3D'font-size:10.0pt;font-family:"Courier New"'>}</span></font> =
<o:p></o:p></p>
<p><font size=3D3 face=3D"Times New Roman"><span =
style=3D'font-size:12.0pt'>
</span></font><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>CSM_Buffer
encapContent("./CHUIDData.bin");</span></font> <br>
<font size=3D2 =
face=3D"Courier New"><span
style=3D'font-size:10.0pt;font-family:"Courier New"'>CSM_Content
content(&encapContent);</span></font> <br>
<font size=3D2 =
face=3D"Courier New"><span
style=3D'font-size:10.0pt;font-family:"Courier New"'>SNACC::AsnOid =
encapAsnOid =3D
ID_PIV_CHUIDSECURITYOBJECT;</span></font> <br>
<font size=3D2 =
face=3D"Courier New"><span
style=3D'font-size:10.0pt;font-family:"Courier =
New"'>msgToVerify.SetEncapContentClear(content);</span></font>
<o:p></o:p></p>
<p><font size=3D3 face=3D"Times New Roman"><span =
style=3D'font-size:12.0pt'>
</span></font><font size=3D2 color=3Dblue face=3D"Courier New"><span
style=3D'font-size:10.0pt;font-family:"Courier =
New";color:blue'>if</span></font><font
size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;font-family:"Courier New"'>(
(retVal =3D msgToVerify.Verify(&appLogin)) =3D=3D SM_NO_ERROR =
)</span></font> <br>
<font size=3D2 =
face=3D"Courier New"><span
style=3D'font-size:10.0pt;font-family:"Courier New"'>{</span></font> =
<br>
<font size=3D2 =
face=3D"Courier New"><span
style=3D'font-size:10.0pt;font-family:"Courier New"'>tcout
<<_T("Verification passed!") <<endl;</span></font> =
<br>
<font size=3D2 =
face=3D"Courier New"><span
style=3D'font-size:10.0pt;font-family:"Courier New"'>}</span></font> =
<br>
<font size=3D2 color=3Dblue
face=3D"Courier New"><span =
style=3D'font-size:10.0pt;font-family:"Courier New";
color:blue'>else</span></font> <br>
<font size=3D2 =
face=3D"Courier New"><span
style=3D'font-size:10.0pt;font-family:"Courier New"'>{</span></font> =
<br>
<font size=3D2 =
face=3D"Courier New"><span
style=3D'font-size:10.0pt;font-family:"Courier New"'>tcout
<<_T("Failed signature verification.") =
<<endl;</span></font>
<br>
<font size=3D2 =
face=3D"Courier New"><span
style=3D'font-size:10.0pt;font-family:"Courier New"'>}</span></font> =
<br>
<font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;font-family:"Courier New"'>}</span></font>
<br>
<font size=3D2 color=3Dblue face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New";color:blue'>else</span></font> <br>
<font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;font-family:"Courier New"'>{</span></font>
<br>
<font size=3D2 =
face=3D"Courier New"><span
style=3D'font-size:10.0pt;font-family:"Courier New"'>tcout
<<_T("Content doesn't contain SignedData") =
<<endl;</span></font>
<br>
<font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;font-family:"Courier New"'>}</span></font>
<o:p></o:p></p>
<p><font size=3D2 color=3Dblack face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial;color:black'><<TestData.zip>> =
</span></font><o:p></o:p></p>
</div>
</body>
</html>
------_=_NextPart_001_01C79897.5CC0C3FF--