CryptoSys API examples VB6 to VB.NET

GCM_Encrypt

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]

[HOME]   [NEXT: GCM_Encrypt (2)...]

Copyright © 2009-20 D.I. Management Services Pty Ltd. All rights reserved.