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