Re: CCryptProv Q
On Jan 23, 4:02 pm, "Brian Muth" <bm...@mvps.org> wrote:
0x80070003 = "The system cannot find the path specified."
I'm not sure what that means in the context of your code, however. I'm won=
dering if something is wrong with your certificate store.
Brian
"mike" <mikebi...@hotmail.com> wrote in messagenews:dbc91611-9ca7-4b45-919=
5-ea3983b33c48@e32g2000prn.googlegroups.com...
I have the following sample code that I'm trying to get to work on an
XPsp2 machine using VS2005:
HRESULT hr = E_FAIL;
CString errMsg;
CCryptProv prov;
hr = prov.Initialize(
PROV_RSA_AES
, _T( "aKey" )
, MS_ENH_RSA_AES_PROV
);
if (GetLastError() == NTE_BAD_KEYSET)
{
hr = prov.Initialize(
PROV_RSA_AES
, _T( "aKey" )
, MS_ENH_RSA_AES_PROV
, CRYPT_NEWKEYSET | CRYPT_SILENT
);
}
if( FAILED( hr ) )
{
errMsg.Append( _T( "CCryptProv Initialize failed " ) );
goto EncryptBuffer_Return;
}
On the second prov.Initialize, I receive an hr = 0x80070003. I can'=
t
seem to find what this is telling me. I'm new to the Encryption
classes in ATL and any help will be appreciated.
Thanks,
Mike- Hide quoted text -
- Show quoted text -
I managed to get past my issue by changing the second Initialize to:
hr = prov.Initialize(
PROV_RSA_AES
, _T( "x264EncoderKey" )
, NULL //MS_ENHANCED_PROV
, /*CRYPT_NEWKEYSET |*/ CRYPT_MACHINE_KEYSET
);
However, I now have another problem in that the Encrypt method only
seems to encrypt the first 8 bytes. This is my function; hoping a
fresh set of eyes can spot something obvious.
Thanks,
Mike
HRESULT CEncryptLib::EncryptBuffer( )
{
HRESULT hr = E_FAIL;
CString errMsg;
CCryptProv prov;
hr = prov.Initialize(
PROV_RSA_AES
, _T( "aKey" )
, NULL //MS_ENHANCED_PROV
);
if (GetLastError() == NTE_BAD_KEYSET)
{
hr = prov.Initialize(
PROV_RSA_AES
, _T( "aKey" )
, NULL //MS_ENHANCED_PROV
, CRYPT_DELETEKEYSET
);
hr = prov.Initialize(
PROV_RSA_AES
, _T( "aKey" )
, NULL //MS_ENHANCED_PROV
, /*CRYPT_NEWKEYSET |*/ CRYPT_MACHINE_KEYSET
);
}
if( FAILED( hr ) )
{
errMsg.Append( _T( "CCryptProv Initialize failed " ) );
goto EncryptBuffer_Return;
}
CCryptDerivedKey derKey;
CCryptMD5Hash md5;
hr = md5.Initialize( prov );
if( FAILED( hr ) )
{
errMsg.Append( _T( "CCryptSHAHash Initialize failed " ) );
goto EncryptBuffer_Return;
}
BYTE key[ 8 ] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 };
DWORD keyLen = 8;
md5.Sign(
key
, &keyLen
);
hr = derKey.Initialize(
prov
, md5
, CALG_3DES
);
if( FAILED( hr ) )
{
errMsg.Append( _T( "derKey.Initialize failed " ) );
goto EncryptBuffer_Return;
}
BYTE iv[ 8 ] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 };
hr = derKey.SetIV( iv );
if( FAILED( hr ) )
{
errMsg.Append( _T( "derKey.SetIV failed " ) );
goto EncryptBuffer_Return;
}
hr = derKey.SetMode( CRYPT_MODE_CBC );
if( FAILED( hr ) )
{
errMsg.Append( _T( "derKey.SetMode failed " ) );
goto EncryptBuffer_Return;
}
hr = derKey.SetPadding( PKCS5_PADDING );
if( FAILED( hr ) )
{
errMsg.Append( _T( "derKey.SetPadding failed " ) );
goto EncryptBuffer_Return;
}
hr = derKey.SetPermissions( CRYPT_ENCRYPT );
if( FAILED( hr ) )
{
errMsg.Append( _T( "derKey.SetPermissions failed " ) );
goto EncryptBuffer_Return;
}
DWORD encLength = 0;
hr = derKey.Encrypt(
TRUE
, m_pbInBuffer
, &encLength
, m_lOutBufferLength
, md5
);
EncryptBuffer_Return:
return hr;
}
encLength always return 8.