Dim m_nErrors
Sub TestError(sMsg)
Response.Write Chr(13) & Chr(10) & "***TEST FAILURE FOR " & sMsg & Chr(13) & Chr(10)
m_nErrors = m_nErrors + 1
End Sub
Dim oGen
Dim oConv
Dim oRng
Dim oAes
Dim oTdea
Dim oDes
Dim oBlf
Dim oPc1
Dim oMd5
Dim oSha
Dim oSha2
Dim oPbe
Dim oCrc
Dim sHexKey
Dim sHexIV
Dim sPlain
Dim sCipher
Dim sOutput
Dim sDigest
Dim sCorrect
Dim sHexData
Dim i
Dim bOK
Set oGen = Server.CreateObject("diCryptOCX.gen")
Set oConv = Server.CreateObject("diCryptOCX.conv")
Set oRng = Server.CreateObject("diCryptOCX.rng")
Set oAes = Server.CreateObject("diCryptOCX.aes128")
Set oTdea = Server.CreateObject("diCryptOCX.tdea")
Set oDes = Server.CreateObject("diCryptOCX.des")
Set oBlf = Server.CreateObject("diCryptOCX.blf")
Set oPc1 = Server.CreateObject("diCryptOCX.pc1")
Set oMd5 = Server.CreateObject("diCryptOCX.md5")
Set oSha = Server.CreateObject("diCryptOCX.sha1")
Set oSha2 = Server.CreateObject("diCryptOCX.sha256")
Set oPbe = Server.CreateObject("diCryptOCX.pbe")
Set oCrc = Server.CreateObject("diCryptOCX.crc32")
Response.Write "Time now: " & Now() & Chr(13) & Chr(10)
' ---------------------------------------------------------
Response.Write Chr(13)& Chr(10)
Response.Write "Testing General functions..." & Chr(13) & Chr(10)
Response.Write "Version=" & oGen.Version & Chr(13) & Chr(10)
Response.Write "ActiveX Version=" & oGen.ActivexVersion & Chr(13) & Chr(10)
Response.Write "Licence Type=" & oGen.LicenceType & Chr(13) & Chr(10)
Response.Write "Module Name=" & oGen.ModuleName & Chr(13) & Chr(10)
Response.Write "Compiled=" & oGen.CompileTime & Chr(13) & Chr(10)
' ---------------------------------------------------------
Response.Write Chr(13)& Chr(10)
Response.Write "Testing RNG (these should always be different)..." & Chr(13) & Chr(10)
Response.Write "5 random 192-bit keys..." & Chr(13) & Chr(10)
For i = 1 To 5
Response.Write oRng.KeyHex(24) & Chr(13) & Chr(10)
Next
Response.Write "5 random 16-byte nonces..." & Chr(13) & Chr(10)
For i = 1 To 5
Response.Write oRng.NonceHex(16) & Chr(13) & Chr(10)
Next
' ---------------------------------------------------------
Response.Write Chr(13)& Chr(10)
Response.Write "Testing AES128..." & Chr(13) & Chr(10)
'Source: FIPS-197
'C.1 AES-128 (Nk=4, Nr=10)
'PLAINTEXT: 00112233445566778899aabbccddeeff
'KEY: 000102030405060708090a0b0c0d0e0f
sHexKey = "000102030405060708090a0b0c0d0e0f"
sPlain = "00112233445566778899aabbccddeeff"
sCipher = "69c4e0d86a7b0430d8cdb78070b4c55a"
' Encrypt in ECB mode
sOutput = oAes.HexMode(sPlain, sHexKey, True, "ECB", "")
Response.Write "CT=" & sOutput & Chr(13) & Chr(10)
sCorrect = sCipher
Response.Write "OK=" & sCorrect & Chr(13) & Chr(10)
If StrComp(sCorrect, sOutput, 1) <> 0 Then Call TestError("AES128-ECB-Enc")
' Decrypt in ECB mode
sOutput = oAes.HexMode(sCipher, sHexKey, False, "ECB", "")
Response.Write "PT=" & sOutput & Chr(13) & Chr(10)
sCorrect = sPlain
Response.Write "OK=" & sCorrect & Chr(13) & Chr(10)
If StrComp(sCorrect, sOutput, 1) <> 0 Then Call TestError("AES128-ECB-Dec")
'Source: RFC 3602 The AES-CBC Cipher Algorithm and Its Use with IPsec
' Case #4: Encrypting 64 bytes (4 blocks) using AES-CBC with 128-bit key
' Key : 0x56e47a38c5598974bc46903dba290349
' IV : 0x8ce82eefbea0da3c44699ed7db51b7d9
' Plaintext : 0xa0a1a2a3a4a5a6a7a8a9aaabacadaeaf
' b0b1b2b3b4b5b6b7b8b9babbbcbdbebf
' c0c1c2c3c4c5c6c7c8c9cacbcccdcecf
' d0d1d2d3d4d5d6d7d8d9dadbdcdddedf
' Ciphertext: 0xc30e32ffedc0774e6aff6af0869f71aa
' 0f3af07a9a31a9c684db207eb0ef8e4e
' 35907aa632c3ffdf868bb7b29d3d46ad
' 83ce9f9a102ee99d49a53e87f4c3da55
sHexKey = "56e47a38c5598974bc46903dba290349"
sHexIV = "8ce82eefbea0da3c44699ed7db51b7d9"
sPlain = "a0a1a2a3a4a5a6a7a8a9aaabacadaeaf" _
& "b0b1b2b3b4b5b6b7b8b9babbbcbdbebf" _
& "c0c1c2c3c4c5c6c7c8c9cacbcccdcecf" _
& "d0d1d2d3d4d5d6d7d8d9dadbdcdddedf"
sCipher = "c30e32ffedc0774e6aff6af0869f71aa" _
& "0f3af07a9a31a9c684db207eb0ef8e4e" _
& "35907aa632c3ffdf868bb7b29d3d46ad" _
& "83ce9f9a102ee99d49a53e87f4c3da55"
' Encrypt in CBC mode
sOutput = oAes.HexMode(sPlain, sHexKey, True, "CBC", sHexIV)
Response.Write "CT=" & sOutput & Chr(13) & Chr(10)
sCorrect = sCipher
Response.Write "OK=" & sCorrect & Chr(13) & Chr(10)
If StrComp(sCorrect, sOutput, 1) <> 0 Then Call TestError("AES128-CBC-Enc")
' Decrypt in CBC mode
sOutput = oAes.HexMode(sCipher, sHexKey, False, "CBC", sHexIV)
Response.Write "PT=" & sOutput & Chr(13) & Chr(10)
sCorrect = sPlain
Response.Write "OK=" & sCorrect & Chr(13) & Chr(10)
If StrComp(sCorrect, sOutput, 1) <> 0 Then Call TestError("AES128-CBC-Dec")
' ---------------------------------------------------------
Response.Write Chr(13)& Chr(10)
Response.Write "Testing Triple DES..." & Chr(13) & Chr(10)
'Source: NIST Special Publication 800-67 Appendix B
'Key1 = 0123456789ABCDEF
'Key2 = 23456789ABCDEF01
'Key3 = 456789ABCDEF0123
'Plaintext:
'"The quic" 5468652071756663
'"k brown " 6B2062726F776E20
'"fox jump" 666F78206A756D70
'Ciphertext:
'A826FD8CE53B855F CCE21C8112256FE6 68D5C05DD9B6B900
sHexKey = "0123456789ABCDEF23456789ABCDEF01456789ABCDEF0123"
sPlain = "54686520717566636B2062726F776E20666F78206A756D70"
sCipher = "A826FD8CE53B855FCCE21C8112256FE668D5C05DD9B6B900"
' Encrypt in ECB mode
sOutput = oTdea.HexMode(sPlain, sHexKey, True, "ECB", "")
Response.Write "CT=" & sOutput & Chr(13) & Chr(10)
sCorrect = sCipher
Response.Write "OK=" & sCorrect & Chr(13) & Chr(10)
If StrComp(sCorrect, sOutput, 1) <> 0 Then Call TestError("TDEA-ECB-Enc")
' Decrypt in ECB mode
sOutput = oTdea.HexMode(sCipher, sHexKey, False, "ECB", "")
Response.Write "PT=" & sOutput & Chr(13) & Chr(10)
sCorrect = sPlain
Response.Write "OK=" & sCorrect & Chr(13) & Chr(10)
If StrComp(sCorrect, sOutput, 1) <> 0 Then Call TestError("TDEA-ECB-Dec")
'Source: Section 8.1 of smime-examples
sPlain = "5468697320736F6D652073616D706520636F6E74656E742E0808080808080808"
' T h i s _ s o m e _ s a m p e _ c o n t e n t . (padding 8 x 08)
sHexKey = "737C791F25EAD0E04629254352F7DC6291E5CB26917ADA32"
sHexIV = "B36B6BFB6231084E"
sCipher = "d76fd1178fbd02f84231f5c1d2a2f74a4159482964f675248254223daf9af8e4"
' Encrypt in CBC mode
sOutput = oTdea.HexMode(sPlain, sHexKey, True, "CBC", sHexIV)
Response.Write "CT=" & sOutput & Chr(13) & Chr(10)
sCorrect = sCipher
Response.Write "OK=" & sCorrect & Chr(13) & Chr(10)
If StrComp(sCorrect, sOutput, 1) <> 0 Then Call TestError("TDEA-CBC-Enc")
' Decrypt in CBC mode
sOutput = oTdea.HexMode(sCipher, sHexKey, False, "CBC", sHexIV)
Response.Write "PT=" & sOutput & Chr(13) & Chr(10)
sCorrect = sPlain
Response.Write "OK=" & sCorrect & Chr(13) & Chr(10)
If StrComp(sCorrect, sOutput, 1) <> 0 Then Call TestError("TDEA-CBC-Dec")
' ---------------------------------------------------------
Response.Write Chr(13)& Chr(10)
Response.Write "Testing single DES..." & Chr(13) & Chr(10)
'Source: FIPS-81 DES MODES OF OPERATION Table B1
'Cryptographic Key = 0123456789abcdef
'Plaintext = "Now is the time for all "
'= 4e6f772069732074 68652074696d6520 666f7220616c6c20
'Cipher text = 3fa40e8a984d4815 6a271787ab8883f9 893d51ec4b563b53
sHexKey = "0123456789abcdef"
sPlain = "4e6f77206973207468652074696d6520666f7220616c6c20"
sCipher = "3fa40e8a984d48156a271787ab8883f9893d51ec4b563b53"
' Encrypt in ECB mode
sOutput = oDes.HexMode(sPlain, sHexKey, True, "ECB", "")
Response.Write "CT=" & sOutput & Chr(13) & Chr(10)
sCorrect = sCipher
Response.Write "OK=" & sCorrect & Chr(13) & Chr(10)
If StrComp(sCorrect, sOutput, 1) <> 0 Then Call TestError("DES-ECB-Enc")
' Decrypt in ECB mode
sOutput = oDes.HexMode(sCipher, sHexKey, False, "ECB", "")
Response.Write "PT=" & sOutput & Chr(13) & Chr(10)
sCorrect = sPlain
Response.Write "OK=" & sCorrect & Chr(13) & Chr(10)
If StrComp(sCorrect, sOutput, 1) <> 0 Then Call TestError("DES-ECB-Dec")
'Source: FIPS-81 DES MODES OF OPERATION Table C1
'Cryptographic Key = 0123456789abcdef
'Initialization Vector = 1234567890abcdef
'Plaintext = "Now is the time for all "
'= 4e6f772069732074 68652074696d6520 666f7220616c6c20
'Cipher text = e5c7cdde872bf27c 43e934008c389c0f 683788499a7c05f6
sHexKey = "0123456789abcdef"
sHexIV = "1234567890abcdef"
sPlain = "4e6f77206973207468652074696d6520666f7220616c6c20"
sCipher = "e5c7cdde872bf27c43e934008c389c0f683788499a7c05f6"
' Encrypt in CBC mode
sOutput = oDes.HexMode(sPlain, sHexKey, True, "CBC", sHexIV)
Response.Write "CT=" & sOutput & Chr(13) & Chr(10)
sCorrect = sCipher
Response.Write "OK=" & sCorrect & Chr(13) & Chr(10)
If StrComp(sCorrect, sOutput, 1) <> 0 Then Call TestError("DES-CBC-Enc")
' Decrypt in CBC mode
sOutput = oDes.HexMode(sCipher, sHexKey, False, "CBC", sHexIV)
Response.Write "PT=" & sOutput & Chr(13) & Chr(10)
sCorrect = sPlain
Response.Write "OK=" & sCorrect & Chr(13) & Chr(10)
If StrComp(sCorrect, sOutput, 1) <> 0 Then Call TestError("DES-CBC-Dec")
' ---------------------------------------------------------
Response.Write Chr(13)& Chr(10)
Response.Write "Testing Blowfish..." & Chr(13) & Chr(10)
' Source: Blowfish test vectors by Eric Young
' Key = FEDCBA9876543210
' Plaintext = FFFFFFFFFFFFFFFF
' Ciphertext = 6B5C5A9C5D9E0A5A
sHexKey = "FEDCBA9876543210"
sPlain = "FFFFFFFFFFFFFFFF"
sCipher = "6B5C5A9C5D9E0A5A"
' Encrypt in ECB mode
sOutput = oBlf.HexMode(sPlain, sHexKey, True, "ECB", "")
Response.Write "CT=" & sOutput & Chr(13) & Chr(10)
sCorrect = sCipher
Response.Write "OK=" & sCorrect & Chr(13) & Chr(10)
If StrComp(sCorrect, sOutput, 1) <> 0 Then Call TestError("BLF-ECB-Enc")
' Decrypt in ECB mode
sOutput = oBlf.HexMode(sCipher, sHexKey, False, "ECB", "")
Response.Write "PT=" & sOutput & Chr(13) & Chr(10)
sCorrect = sPlain
Response.Write "OK=" & sCorrect & Chr(13) & Chr(10)
If StrComp(sCorrect, sOutput, 1) <> 0 Then Call TestError("BLF-ECB-Dec")
' Source: Blowfish test vectors by Eric Young
'key[16] = 0123456789ABCDEFF0E1D2C3B4A59687
'iv[8] = FEDCBA9876543210
'data[29] = "7654321 Now is the time for " (includes trailing '\0')
'data[29] = 37363534333231204E6F77206973207468652074696D6520666F722000
'cbc cipher text
'cipher[32]= 6B77B4D63006DEE605B156E27403979358DEB9E7154616D959F1652BD5FF92CC
sHexKey = "0123456789ABCDEFF0E1D2C3B4A59687"
sHexIV = "FEDCBA9876543210"
' NB Plaintext is padded with 3 x nulls for CBC test
sPlain = "37363534333231204E6F77206973207468652074696D6520666F722000000000"
sCipher = "6B77B4D63006DEE605B156E27403979358DEB9E7154616D959F1652BD5FF92CC"
' Encrypt in CBC mode
sOutput = oBlf.HexMode(sPlain, sHexKey, True, "CBC", sHexIV)
Response.Write "CT=" & sOutput & Chr(13) & Chr(10)
sCorrect = sCipher
Response.Write "OK=" & sCorrect & Chr(13) & Chr(10)
If StrComp(sCorrect, sOutput, 1) <> 0 Then Call TestError("BLF-CBC-Enc")
' Decrypt in CBC mode
sOutput = oBlf.HexMode(sCipher, sHexKey, False, "CBC", sHexIV)
Response.Write "PT=" & sOutput & Chr(13) & Chr(10)
sCorrect = sPlain
Response.Write "OK=" & sCorrect & Chr(13) & Chr(10)
If StrComp(sCorrect, sOutput, 1) <> 0 Then Call TestError("BLF-CBC-Dec")
' ---------------------------------------------------------
Response.Write Chr(13)& Chr(10)
Response.Write "Testing PC1 encryption..." & Chr(13) & Chr(10)
' Source: Eric Rescorla
'Test vector 0
'Key: 0x01 0x23 0x45 0x67 0x89 0xab 0xcd 0xef
'Input: 0x01 0x23 0x45 0x67 0x89 0xab 0xcd 0xef
'0 Output: 0x75 0xb7 0x87 0x80 0x99 0xe0 0xc5 0x96
sHexKey = "0123456789abcdef"
sPlain = "0123456789abcdef"
sCipher = "75b7878099e0c596"
Response.Write "KY=" & sHexKey & Chr(13) & Chr(10)
' Encrypt (there's no other way)
sOutput = oPc1.EncryptHex(sPlain, sHexKey)
Response.Write "CT=" & sOutput & Chr(13) & Chr(10)
sCorrect = sCipher
Response.Write "OK=" & sCorrect & Chr(13) & Chr(10)
If StrComp(sCorrect, sOutput, 1) <> 0 Then Call TestError("PC1-Enc")
' Decrypt (just encrypt again)
sOutput = oPc1.EncryptHex(sCipher, sHexKey)
Response.Write "PT=" & sOutput & Chr(13) & Chr(10)
sCorrect = sPlain
Response.Write "OK=" & sCorrect & Chr(13) & Chr(10)
If StrComp(sCorrect, sOutput, 1) <> 0 Then Call TestError("PC1-Dec")
'Test vector 3
'Key: 0xef 0x01 0x23 0x45
'Input: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
'0 Output: 0xd6 0xa1 0x41 0xa7 0xec 0x3c 0x38 0xdf 0xbd 0x61
sHexKey = "ef012345"
sPlain = "00000000000000000000"
sCipher = "d6a141a7ec3c38dfbd61"
Response.Write "KY=" & sHexKey & Chr(13) & Chr(10)
' Encrypt
sOutput = oPc1.EncryptHex(sPlain, sHexKey)
Response.Write "CT=" & sOutput & Chr(13) & Chr(10)
sCorrect = sCipher
Response.Write "OK=" & sCorrect & Chr(13) & Chr(10)
If StrComp(sCorrect, sOutput, 1) <> 0 Then Call TestError("PC1-Enc")
' Decrypt
sOutput = oPc1.EncryptHex(sCipher, sHexKey)
Response.Write "PT=" & sOutput & Chr(13) & Chr(10)
sCorrect = sPlain
Response.Write "OK=" & sCorrect & Chr(13) & Chr(10)
If StrComp(sCorrect, sOutput, 1) <> 0 Then Call TestError("PC1-Dec")
' ---------------------------------------------------------
Response.Write Chr(13)& Chr(10)
Response.Write "Testing Hash Functions..." & Chr(13) & Chr(10)
' Source: RFC 1321
sDigest = oMd5.StringHexHash("abc")
Response.Write "MD5('abc') =" & sDigest & Chr(13) & Chr(10)
sCorrect = "900150983cd24fb0d6963f7d28e17f72"
Response.Write "Correct =" & sCorrect & Chr(13) & Chr(10)
If StrComp(sCorrect, sDigest, 1) <> 0 Then Call TestError("MD5")
sDigest = oMd5.HexHexHash("616263")
Response.Write "MD5(0x616263) =" & sDigest & Chr(13) & Chr(10)
sCorrect = "900150983cd24fb0d6963f7d28e17f72"
Response.Write "Correct =" & sCorrect & Chr(13) & Chr(10)
If StrComp(sCorrect, sDigest, 1) <> 0 Then Call TestError("MD5")
' Source: FIPS PUB 180-2 Appendix A.1
sDigest = oSha.StringHexHash("abc")
Response.Write "SHA1('abc') =" & sDigest & Chr(13) & Chr(10)
sCorrect = "a9993e364706816aba3e25717850c26c9cd0d89d"
Response.Write "Correct =" & sCorrect & Chr(13) & Chr(10)
If StrComp(sCorrect, sDigest, 1) <> 0 Then Call TestError("SHA-1")
sDigest = oSha.HexHexHash("616263")
Response.Write "SHA1(0x616263) =" & sDigest & Chr(13) & Chr(10)
sCorrect = "a9993e364706816aba3e25717850c26c9cd0d89d"
Response.Write "Correct =" & sCorrect & Chr(13) & Chr(10)
If StrComp(sCorrect, sDigest, 1) <> 0 Then Call TestError("SHA-1")
' Source: FIPS PUB 180-2 Appendix B.1
sDigest = oSha2.StringHexHash("abc")
Response.Write "SHA256('abc') =" & sDigest & Chr(13) & Chr(10)
sCorrect = "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
Response.Write "Correct =" & sCorrect & Chr(13) & Chr(10)
If StrComp(sCorrect, sDigest, 1) <> 0 Then Call TestError("SHA-256")
sDigest = oSha2.HexHexHash("616263")
Response.Write "SHA256(0x616263)=" & sDigest & Chr(13) & Chr(10)
sCorrect = "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
Response.Write "Correct =" & sCorrect & Chr(13) & Chr(10)
If StrComp(sCorrect, sDigest, 1) <> 0 Then Call TestError("SHA-256")
' ---------------------------------------------------------
Response.Write Chr(13)& Chr(10)
Response.Write "Testing HMAC Functions..." & Chr(13) & Chr(10)
'Source: Test No 1. from RFC 2104
sHexData = oConv.HexFromString("Hi There")
sDigest = oMd5.HmacHex(sHexData, "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b")
Response.Write "HMAC-MD5 =" & sDigest & Chr(13) & Chr(10)
sCorrect = "9294727a3638bb1c13f48ef8158bfc9d"
Response.Write "Correct =" & sCorrect & Chr(13) & Chr(10)
If StrComp(sCorrect, sDigest, 1) <> 0 Then Call TestError("HMAC-MD5")
'Source: Wei Dai's Crypto++ test vectors
'fipstest.cpp - written and placed in the public domain by Wei Dai
'From http://trolocsis.com/crypto++/fipstest_8cpp-source.html
'MAC_KnownAnswerTest<HMAC<SHA> >(
sHexData = oConv.HexFromString("Sample #2")
sDigest = oSha.HmacHex(sHexData, "303132333435363738393a3b3c3d3e3f40414243")
Response.Write "HMAC-SHA1 =" & sDigest & Chr(13) & Chr(10)
sCorrect = "0922d3405faa3d194f82a45830737d5cc6c75d24"
Response.Write "Correct =" & sCorrect & Chr(13) & Chr(10)
If StrComp(sCorrect, sDigest, 1) <> 0 Then Call TestError("HMAC-SHA1")
'MAC_KnownAnswerTest<HMAC<SHA256> >(
sHexData = oConv.HexFromString("abc")
sDigest = oSha2.HmacHex(sHexData, "303132333435363738393a3b3c3d3e3f40414243")
Response.Write "HMAC-SHA256 =" & sDigest & Chr(13) & Chr(10)
sCorrect = "d28363f335b2dae468793a38680dea9f7fb8be1dceda197cdb3b1cb59a9f6422"
Response.Write "Correct =" & sCorrect & Chr(13) & Chr(10)
If StrComp(sCorrect, sDigest, 1) <> 0 Then Call TestError("HMAC-SHA256")
' ---------------------------------------------------------
Response.Write Chr(13)& Chr(10)
Response.Write "Testing PBEKDF Function..." & Chr(13) & Chr(10)
' Source: PKCS #5 v2.0 from test vectors provided by Dr. Stephen Henson
' Derives a 24-byte key from the password "password" with
' 8-byte salt = 78 57 8E 5A 5D 63 CB 06 and iteration count = 2048.
sOutput = oPbe.DKF2FromString(24, "password", "78578E5A5D63CB06", 2048)
Response.Write "PBE_KDF2=" & sOutput & Chr(13) & Chr(10)
sCorrect = "BFDE6BE94DF7E11DD409BCE20A0255EC327CB936FFE93643"
Response.Write "Correct =" & sCorrect & Chr(13) & Chr(10)
If StrComp(sCorrect, sOutput, 1) <> 0 Then Call TestError("PBE-KDF2")
' ---------------------------------------------------------
Response.Write Chr(13)& Chr(10)
Response.Write "Testing CRC32 Function..." & Chr(13) & Chr(10)
' Source: A PAINLESS GUIDE TO CRC ERROR DETECTION ALGORITHMS by Ross N. Williams
' ross@guest.adelaide.edu.au
sOutput = oCrc.StringHex("123456789")
Response.Write "CRC32('123456789')=" & sOutput & Chr(13) & Chr(10)
sCorrect = "cbf43926"
Response.Write "Correct =" & sCorrect & Chr(13) & Chr(10)
If StrComp(sCorrect, sOutput, 1) <> 0 Then Call TestError("CRC32-String")
' ---------------------------------------------------------
Response.Write Chr(13)& Chr(10)
Response.Write "Testing Bytes/Hex/base64 conversions..." & Chr(13) & Chr(10)
Dim abData
sHexData = "DEADBEEFCAFE"
abData = oConv.BytesFromHex(sHexData)
sOutput = oConv.HexFromBytes(abData)
Response.Write "Hex(0xdeadbeefcafe)=" & sOutput & Chr(13) & Chr(10)
If StrComp(sHexData, sOutput, 1) <> 0 Then Call TestError("Bytes-Hex")
sOutput = oConv.Base64FromBytes(abData)
Response.Write "Base64(0xdeadbeefcafe)=" & sOutput & Chr(13) & Chr(10)
If StrComp("3q2+78r+", sOutput, 1) <> 0 Then Call TestError("Bytes-Base64")
sHexData = oConv.HexFromBase64(sOutput)
Response.Write "Hex(" & sOutput & ")=" & sHexData & Chr(13) & Chr(10)
If StrComp(sHexData, "DEADBEEFCAFE", 1) <> 0 Then Call TestError("Hex-Base64")
' ---------------------------------------------------------
Response.Write Chr(13)& Chr(10)
If m_nErrors = 0 Then
Response.Write "Success. No errors occurred." & Chr(13) & Chr(10)
Else
Response.Write m_nErrors & " ERRORS OCCURRED!" & Chr(13) & Chr(10)
End If