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 abPlain() As Byte Dim abAAD() As Byte Dim abIV() As Byte Dim abTag() As Byte Dim abCipher() As Byte Dim abCheck() As Byte Dim nKeyLen As Long Dim nDataLen As Long Dim nIvLen As Long Dim nAadLen As Long Dim nTagLen As Long Dim nRet As Long ' Test Case 4: ' Convert test vectors from hex to byte array format abKey = cnvBytesFromHexStr("feffe9928665731c6d6a8f9467308308") abPlain = cnvBytesFromHexStr("d9313225f88406e5a55909c5aff5269a" & _ "86a7a9531534f7da2e4c303d8a318a72" & _ "1c3c0c95956809532fcf0e2449a6b525" & _ "b16aedf5aa0de657ba637b39") abAAD = cnvBytesFromHexStr("feedfacedeadbeeffeedfacedeadbeef" & _ "abaddad2") abIV = cnvBytesFromHexStr("cafebabefacedbaddecaf888") ' and compute lengths nKeyLen = UBound(abKey) + 1 nDataLen = UBound(abPlain) + 1 nIvLen = UBound(abIV) + 1 nAadLen = UBound(abAAD) + 1 ' Dimension output arrays nTagLen = API_MAX_GMAC_BYTES ReDim abTag(nTagLen - 1) ReDim abCipher(nDataLen - 1) ' Do the business nRet = GCM_Encrypt(abCipher(0), nDataLen, abTag(0), nTagLen, _ abPlain(0), nDataLen, _ abKey(0), nKeyLen, abIV(0), nIvLen, abAAD(0), nAadLen, 0) Debug.Print "GCM_Encrypt returns " & nRet & " (expecting 0)" Debug.Print "CT =" & cnvHexStrFromBytes(abCipher) Debug.Print "TAG=" & cnvHexStrFromBytes(abTag) ' Check we can decrypt ReDim abCheck(nDataLen - 1) nRet = GCM_Decrypt(abCheck(0), nDataLen, abCipher(0), nDataLen, _ abKey(0), nKeyLen, abIV(0), nIvLen, abAAD(0), nAadLen, _ abTag(0), nTagLen, 0) Debug.Print "GCM_Decrypt returns " & nRet & " (expecting 0)" Debug.Print "PT'=" & cnvHexStrFromBytes(abCheck) Debug.Print "PT =" & cnvHexStrFromBytes(abPlain)
Output
Testing GCM_Encrypt ... GCM_Encrypt returns 0 (expecting 0) CT =42831EC2217774244B7221B784D0D49CE3AA212F2C02A4E035C17E2329ACA12E21D514B25466931C7D8F6A5AAC84AA051BA30B396A0AAC973D58E091 TAG=5BC94FBC3221A5DB94FAE95AE7121A47 GCM_Decrypt returns 0 (expecting 0) PT'=D9313225F88406E5A55909C5AFF5269A86A7A9531534F7DA2E4C303D8A318A721C3C0C95956809532FCF0E2449A6B525B16AEDF5AA0DE657BA637B39 PT =D9313225F88406E5A55909C5AFF5269A86A7A9531534F7DA2E4C303D8A318A721C3C0C95956809532FCF0E2449A6B525B16AEDF5AA0DE657BA637B39
VB.NET
Console.WriteLine("Testing GCM_Encrypt ...") Dim abKey() As Byte Dim abPlain() As Byte Dim abAAD() As Byte Dim abIV() As Byte Dim abTag() As Byte Dim abCipher() As Byte Dim abCheck() As Byte ''Dim nKeyLen As Integer ''Dim nDataLen As Integer ''Dim nIvLen As Integer ''Dim nAadLen As Integer ''Dim nTagLen As Integer ''Dim nRet As Integer ' Test Case 4: ' Convert test vectors from hex to byte array format abKey = Cnv.FromHex("feffe9928665731c6d6a8f9467308308") abPlain = Cnv.FromHex("d9313225f88406e5a55909c5aff5269a" & _ "86a7a9531534f7da2e4c303d8a318a72" & _ "1c3c0c95956809532fcf0e2449a6b525" & _ "b16aedf5aa0de657ba637b39") abAAD = Cnv.FromHex("feedfacedeadbeeffeedfacedeadbeef" & _ "abaddad2") abIV = Cnv.FromHex("cafebabefacedbaddecaf888") ' and compute lengths ''nKeyLen = UBound(abKey) + 1 ''nDataLen = UBound(abPlain) + 1 ''nIvLen = UBound(abIV) + 1 ''nAadLen = UBound(abAAD) + 1 ' Dimension output arrays ''nTagLen = API_MAX_GMAC_BYTES ''ReDim abTag(nTagLen - 1) ''ReDim abCipher(nDataLen - 1) abTag = New Byte(15) {} ' Do the business abCipher = Gcm.Encrypt(abTag, abPlain, abKey, abIV, abAAD) Console.WriteLine("GCM_Encrypt:") Console.WriteLine("CT =" & Cnv.ToHex(abCipher)) Console.WriteLine("TAG=" & Cnv.ToHex(abTag)) ' Check we can decrypt ''ReDim abCheck(nDataLen - 1) abCheck = Gcm.Decrypt(abCipher, abKey, abIV, abAAD, abTag) Console.WriteLine("GCM_Decrypt:") Console.WriteLine("PT'=" & Cnv.ToHex(abCheck)) Console.WriteLine("PT =" & Cnv.ToHex(abPlain))
[Contents]