Provides authenticated encryption using the Galois/Counter Mode (GCM) of operation with the AES algorithm (AES-GCM).
VB6/VBA
Debug.Print "Testing GCM_Encrypt ..." Dim abKey() As Byte Dim abAAD() As Byte Dim abIV() As Byte Dim abTag() As Byte Dim nKeyLen As Long Dim nAadLen As Long Dim nIvLen As Long Dim nTagLen As Long Dim nRet As Long ' Source: http://www.mail-archive.com/stds-p1619@listserv.ieee.org/msg00321.html ' KEY feffe9928665731c6d6a8f9467308308 ' IV cafebabefacedbaddecaf888 ' AAD feedfacedeadbeeffeedfacedeadbeef ' TAG 54df474f4e71a9ef8a09bf30da7b1a92 abKey = cnvBytesFromHexStr("feffe9928665731c6d6a8f9467308308") abIV = cnvBytesFromHexStr("cafebabefacedbaddecaf888") abAAD = cnvBytesFromHexStr("feedfacedeadbeeffeedfacedeadbeef") nKeyLen = UBound(abKey) + 1 nIvLen = UBound(abIV) + 1 nAadLen = UBound(abAAD) + 1 Debug.Print "KEY " & cnvHexStrFromBytes(abKey) Debug.Print "IV " & cnvHexStrFromBytes(abIV) Debug.Print "AAD " & cnvHexStrFromBytes(abAAD) ' Dimension output array nTagLen = API_MAX_GMAC_BYTES ReDim abTag(nTagLen - 1) ' GMAC := Encrypt with no CT output or PT input. GMAC value is in tag. nRet = GCM_Encrypt(0, 0, abTag(0), nTagLen, 0, 0, _ abKey(0), nKeyLen, abIV(0), nIvLen, abAAD(0), nAadLen, 0) Debug.Print "TAG " & cnvHexStrFromBytes(abTag) Debug.Print "OK " & "54df474f4e71a9ef8a09bf30da7b1a92"
Output
Testing GCM_Encrypt ... KEY FEFFE9928665731C6D6A8F9467308308 IV CAFEBABEFACEDBADDECAF888 AAD FEEDFACEDEADBEEFFEEDFACEDEADBEEF TAG 54DF474F4E71A9EF8A09BF30DA7B1A92 OK 54df474f4e71a9ef8a09bf30da7b1a92
VB.NET
Console.WriteLine("Testing GCM_Encrypt ...") Dim abKey() As Byte Dim abAAD() As Byte Dim abIV() As Byte Dim abTag() As Byte ''Dim nKeyLen As Integer ''Dim nAadLen As Integer ''Dim nIvLen As Integer ''Dim nTagLen As Integer ''Dim nRet As Integer ' Source: http://www.mail-archive.com/stds-p1619@listserv.ieee.org/msg00321.html ' KEY feffe9928665731c6d6a8f9467308308 ' IV cafebabefacedbaddecaf888 ' AAD feedfacedeadbeeffeedfacedeadbeef ' TAG 54df474f4e71a9ef8a09bf30da7b1a92 abKey = Cnv.FromHex("feffe9928665731c6d6a8f9467308308") abIV = Cnv.FromHex("cafebabefacedbaddecaf888") abAAD = Cnv.FromHex("feedfacedeadbeeffeedfacedeadbeef") ''nKeyLen = UBound(abKey) + 1 ''nIvLen = UBound(abIV) + 1 ''nAadLen = UBound(abAAD) + 1 Console.WriteLine("KEY " & Cnv.ToHex(abKey)) Console.WriteLine("IV " & Cnv.ToHex(abIV)) Console.WriteLine("AAD " & Cnv.ToHex(abAAD)) ' Dimension output array ''nTagLen = API_MAX_GMAC_BYTES ''ReDim abTag(nTagLen - 1) abTag = New Byte(15) {} ' GMAC := Encrypt with no CT output or PT input. GMAC value is in tag. abTag = Gcm.Gmac(abKey, abIV, abAAD) Console.WriteLine("TAG " & Cnv.ToHex(abTag)) Console.WriteLine("OK " & "54df474f4e71a9ef8a09bf30da7b1a92")
[Contents]