Solved

Need CryptCreateHash version of the HMACSHA1.ComputeHash .net function.

Posted on 2007-11-22
3
1,003 Views
Last Modified: 2010-04-21
Here is the VB.net sample I am working with:

   Public Function aws_GetSignature _
       (ByVal Operation As String, ByVal TimeStamp As _
       DateTime) As String
   
       Dim strSig_Raw As String
       Dim strSig_UTF8 As Byte()
       Dim strSignature As String
       Dim objUTF8Encoder As UTF8Encoding
       Dim objHMACSHA1 As HMACSHA1
   
       strSig_Raw = "AmazonS3" & Operation & _
          aws_GetISOTimestamp(TimeStamp)
   
       objUTF8Encoder = New UTF8Encoding()
       strSig_UTF8 = objUTF8Encoder.GetBytes(strSig_Raw)
   
       objHMACSHA1 = New HMACSHA1( _
          objUTF8Encoder.GetBytes(m_strSecretAccessKey))
       strSignature = Convert.ToBase64String _
          (objHMACSHA1.ComputeHash( _
          objUTF8Encoder.GetBytes( _
          strSig_Raw.ToCharArray())))
   
       Return strSignature
   
   End Function

I have the ISOTimestamp, UTF-8 encoding, and base 64 functions working but need help with the HMACSHA1.ComputeHash function. How can I implement the HMACSHA1 function in VB6 using the CryptCreateHash Windows SDK function?

Kevin
0
Comment
Question by:zorvek (Kevin Jones)
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
3 Comments
 
LVL 49

Accepted Solution

by:
DanRollins earned 500 total points
ID: 20337761
Here's how I do it in C++ (I do add a bit of error checking...)


HCRYPTPROV  m_hProv;
HCRYPTHASH  m_hHash;
HCRYPTKEY   m_hKey;
 
char* pszKey="someSecretKeyText";
m_fOK= CryptAcquireContext(&m_hProv, NULL, MS_DEF_PROV, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT );
m_fOK= CryptCreateHash(m_hProv, CALG_MD5, 0, 0, &m_hHash);
m_fOK= CryptHashData( m_hHash, (BYTE*)pszKey, strlen(pszKey), 0);
m_fOK= CryptDeriveKey( m_hProv, CALG_RC4, m_hHash, CRYPT_EXPORTABLE, &m_hKey);
 
... then later:
m_fOK= CryptEncrypt(m_hKey, 0, TRUE, 0, pData, dwDataLen, *dwDataLen);

Open in new window

0
 
LVL 81

Author Closing Comment

by:zorvek (Kevin Jones)
ID: 31410553
Dan, thanks for the response. It's a pretty tough problem with I never got working. But one of my coworkers found some code that appears to use the same API calls and successfully creates a hash. I just need to dissect it and figure out what they did that I did not do. Kevin
0

Featured Post

Announcing the Most Valuable Experts of 2016

MVEs are more concerned with the satisfaction of those they help than with the considerable points they can earn. They are the types of people you feel privileged to call colleagues. Join us in honoring this amazing group of Experts.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Envision that you are chipping away at another e-business site with a team of pundit developers and designers. Everything seems, by all accounts, to be going easily.
Many companies are looking to get out of the datacenter business and to services like Microsoft Azure to provide Infrastructure as a Service (IaaS) solutions for legacy client server workloads, rather than continuing to make capital investments in h…
Get people started with the process of using Access VBA to control Excel using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Excel. Using automation, an Access application can laun…
With Secure Portal Encryption, the recipient is sent a link to their email address directing them to the email laundry delivery page. From there, the recipient will be required to enter a user name and password to enter the page. Once the recipient …

705 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question