Creates a message digest hash as a byte array from byte data. The hash algorithm to use is passed in the options parameter.
Public Declare Function HASH_Bytes Lib "diCrPKI.dll"
(ByRef lpDigest As Byte, ByVal nDigLen As Long, ByRef lpMessage As Byte,
ByVal nMsgLen As Long, ByVal nOptions As Long) As Long
nRet = HASH_Bytes(lpDigest(0), nDigLen, lpMessage(0), nMsgLen, nOptions) ' Note the "(0)" after the byte array parameters
long __stdcall HASH_Bytes(unsigned char *lpOutput, long nOutBytes, const void *lpMessage, long nMsgLen, long nOptions);
RIPEMD160(SHA256(m))
HASH(HASH(m))
If successful, the return value is the number of bytes in the hash digest array; otherwise it returns a negative error code.
Public Function hashBytes
(lpMessage() As Byte, nOptions As Long) As Byte()
Hash.BytesFromBytes Method
Hash.Double Method
static bvec_t dipki::Hash::Bytes (const bvec_t &data, Alg alg=Alg::Sha1)
static Hash.double(data, alg=Alg.SHA1)
static Hash.data(data, alg=Alg.SHA1)
static Hash.double(data, alg=Alg.SHA1)
Specify a zero nDigLen parameter to find out the required length of the output array.
The maximum possible length is PKI_MAX_HASH_BYTES
.
Hint: SHA-1 requires 20 bytes; MD5 and MD2 require 16 bytes; SHA-512 requires 64.
The final digest will be truncated to the specified length if less than the expected size.
Dim nRet As Long Dim abDigest() As Byte Dim abMessage() As Byte Dim nMsgLen As Long ' Set up message to be hashed abMessage = StrConv("abc", vbFromUnicode) nMsgLen = UBound(abMessage) + 1 ' Pre-dimension digest array (NB zero-based so subtract one) ReDim abDigest(PKI_MAX_HASH_BYTES - 1) ' Create default hash (SHA1) nRet = HASH_Bytes(abDigest(0), PKI_MAX_HASH_BYTES, abMessage(0), nMsgLen, 0) If nRet > 0 Then ReDim Preserve abDigest(nRet - 1) Debug.Print nRet, cnvHexStrFromBytes(abDigest) ' Repeat for MD5 ReDim abDigest(PKI_MAX_HASH_BYTES - 1) nRet = HASH_Bytes(abDigest(0), PKI_MAX_HASH_BYTES, abMessage(0), nMsgLen, PKI_HASH_MD5) If nRet > 0 Then ReDim Preserve abDigest(nRet - 1) Debug.Print nRet, cnvHexStrFromBytes(abDigest)
The above example should produce the following output:
20 A9993E364706816ABA3E25717850C26C9CD0D89D 16 900150983CD24FB0D6963F7D28E17F72
Dim strDigest As String Dim lpMessage() As Byte Dim lpDigest() As Byte ' Hex <-- Hex strDigest = hashHexFromHex("616263", PKI_HASH_SHA256) ' "abc" in hex Debug.Print strDigest lpMessage = StrConv("abc", vbFromUnicode) ' "abc" in a byte array ' Hex <-- Bytes strDigest = hashHexFromBytes(lpMessage, PKI_HASH_SHA256) Debug.Print strDigest ' Bytes <-- Bytes lpDigest = hashBytes(lpMessage, PKI_HASH_SHA256) Debug.Print cnvHexStrFromBytes(lpDigest) ' Hex <-- File strDigest = hashHexFromFile("abc.txt", PKI_HASH_SHA256) ' "abc" in a text file Debug.Print strDigest ' Bytes <-- File lpDigest = hashFile("abc.txt", PKI_HASH_SHA256) Debug.Print cnvHexStrFromBytes(lpDigest) Debug.Print "OK=" & "BA7816BF8F01CFEA414140DE5DAE2223B00361A396177A9CB410FF61F20015AD"
Dim strDigest As String Dim lpMessage() As Byte Dim lpDigest() As Byte lpDigest = hashBytes(lpMessage, PKI_HASH_SHA256) Debug.Print cnvHexStrFromBytes(lpDigest) lpDigest = hashBytes(lpMessage, PKI_HASH_SHA256) Debug.Print cnvHexStrFromBytes(lpDigest) strDigest = hashHexFromBytes(lpMessage, PKI_HASH_SHA256) Debug.Print strDigest strDigest = hashHexFromBytes(lpMessage, PKI_HASH_SHA512) Debug.Print strDigest strDigest = hashHexFromBytes(lpMessage, PKI_HASH_SHA512) Debug.Print strDigest