[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

MsgToDecrypt usage (how-to...)




Some informations concerning this little code snap-shot:

- pBufToDecrypt points to a CSM_Buffer constructed with a file that contain the
(binary (base64 decoded)) CMS part of an S/MIME E-Mail (the resulting binary
file was first successfully dumped using dumpasn utility and it's a
pkcs-7-envelopedData (1 2 840 113549 1 7 3).
- m_EngineLogin.GetCSMIME() returns a CSMIME* that was previously initialized
with SM_Free3D login using a X.509 Public Certificate, a PKCS#8
Encrypted-PrivateKey and the password (this login works and the corresponding
CSM_CSInst has been maked as USE-THIS and APPLICABLE.
- The CSMIME* mentionned above was initialised with the E-Mail recipient's
Key-Pair (so we have in hand the right private key to decrypt the CMS part).

Since we have everything in hand to decrypt the pkcs-7-envelopedData I wanted to
know WHY it don't works and what do I have to do in order to make this work.

[ BEGIN CODE ]
CSM_Buffer* pBufToDecrypt = new
CSM_Buffer(const_cast<char*>(sContentFilename.c_str()));

CSM_ContentInfoMsg* pContentToDecrypt = new CSM_ContentInfoMsg(pBufToDecrypt);

CSM_MsgToDecrypt msgToDecrypt(pContentToDecrypt);

msgToDecrypt.PreProc(m_EngineLogin.GetCSMIME());

msgToDecrypt.Decrypt(m_EngineLogin.GetCSMIME());
[ END CODE ]

PROBLEM DESCRIPTION:

it crash within the CSM_MsgToDecrypt::PreProc() method (I did trace the code to
figure out that you are trying to access memory that was not initialized (NULL
pointer):

if ((m_SnaccEnvelopedData.encryptedContentInfo == NULL) ||
          (m_SnaccEnvelopedData.encryptedContentInfo->
            contentEncryptionAlgorithm == NULL))

In fact, m_SnaccEnvelopedData is NULL.  But looking at msgToDecrypt class the
CSM_CommonData::m_pEncodedBlob part of it contain the right data to process...
What do I have to do to "inform" msgToEncrypt that it's data is there.  In other
words, what do I have to do to transform this m_pEncodedBlob to
m_SnaccEnvelopedData?????

What kind of preprocessing do I have to do before calling
MsgToDecrypt::PreProc()?

What's wrong with my logic?  Do I miss something?

Thanks a lot (a quick (and complete) answer will be truelly welcomed)

|=========================================
| Simon Blanchet
| Software Designer
|
| Email: sblanche@xxxxxxxxxx
|=========================================