summaryrefslogtreecommitdiff
path: root/indra/test
diff options
context:
space:
mode:
authorJames Cook <james@lindenlab.com>2007-02-15 20:24:08 +0000
committerJames Cook <james@lindenlab.com>2007-02-15 20:24:08 +0000
commit12ac04231b8d358e70c830f7958f7efbc0f7c0d1 (patch)
tree189b9bc4e3bfa63275cc41be8dc42a28b0f54ffe /indra/test
parent4feabe4a9caec380cad405d5410bc762c862113d (diff)
merge -r 57761:57967 im-email-session-3, removes database load from IM to email session tracking, introduces new format for email return addresses
Diffstat (limited to 'indra/test')
-rw-r--r--indra/test/blowfish.1.bin1
-rw-r--r--indra/test/blowfish.2.binbin0 -> 40 bytes
-rw-r--r--indra/test/blowfish.digits.txt1
-rwxr-xr-xindra/test/blowfish.pl74
-rw-r--r--indra/test/llblowfish_tut.cpp125
5 files changed, 201 insertions, 0 deletions
diff --git a/indra/test/blowfish.1.bin b/indra/test/blowfish.1.bin
new file mode 100644
index 0000000000..61286e45e3
--- /dev/null
+++ b/indra/test/blowfish.1.bin
@@ -0,0 +1 @@
+.A„Ä3ŒLÜE ``òøÝKÛ@¼ûÇ;M[ÚBë·ø„>ËÊC—' \ No newline at end of file
diff --git a/indra/test/blowfish.2.bin b/indra/test/blowfish.2.bin
new file mode 100644
index 0000000000..ef72d96bbf
--- /dev/null
+++ b/indra/test/blowfish.2.bin
Binary files differ
diff --git a/indra/test/blowfish.digits.txt b/indra/test/blowfish.digits.txt
new file mode 100644
index 0000000000..fce1fed943
--- /dev/null
+++ b/indra/test/blowfish.digits.txt
@@ -0,0 +1 @@
+01234567890123456789012345678901234
diff --git a/indra/test/blowfish.pl b/indra/test/blowfish.pl
new file mode 100755
index 0000000000..7940d87aa6
--- /dev/null
+++ b/indra/test/blowfish.pl
@@ -0,0 +1,74 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+
+# *TODO: specify test count here
+use Test::More qw(no_plan);
+
+use Crypt::CBC;
+use MIME::Base64;
+
+my $init_vector = "\x00" x 8;
+# my $key = pack("H*", "ef5a8376eb0c99fe0dafa487d15bec19cae63d1e25fe31d8d92f7ab0398246d70ee733108e47360e16359654571cf5bab6c3375b42cee4fa");
+# my $key = "d263eb8a78034e40";
+ #"8d082918aa369174";
+my $key = "\x00" x 16;
+
+my $cipher = Crypt::CBC->new( { cipher => 'Blowfish',
+ regenerate_key => 0,
+ key => $key,
+ iv => $init_vector,
+ header => 'none',
+ prepend_iv => 0,
+ keysize => 16 } );
+
+#my $blocks = $cipher->blocksize();
+#print "blocksize $blocks\n";
+
+my $len;
+my $input = "01234567890123456789012345678901234\n";
+#my $input = "a whale of a tale I tell you lad, a whale of a tale for me, a whale of a tale and the fiddlers three";
+$len = length($input);
+is ($len, 36, "input length");
+
+$len = length($key);
+is ($len, 16, "key length");
+
+
+my $encrypted = $cipher->encrypt($input);
+is (length($encrypted), 40, "encrypted length");
+
+open(FH, "blowfish.1.bin");
+my $bin = scalar <FH>;
+is ($encrypted, $bin, "matches openssl");
+close(FH);
+
+my $base64 = encode_base64($encrypted);
+is ($base64, "LkGExDOMTNxFIGBg8gP43UvbQLz7xztNWwYF2kLrtwT4hD7LykOXJw==\n",
+ "base64 output");
+
+my $unbase64 = decode_base64($base64);
+is( $encrypted, $unbase64, "reverse base64" );
+
+my $output = $cipher->decrypt($unbase64);
+is ($input, $output, "reverse encrypt");
+
+$key = pack("H[32]", "526a1e07a19dbaed84c4ff08a488d15e");
+$cipher = Crypt::CBC->new( { cipher => 'Blowfish',
+ regenerate_key => 0,
+ key => $key,
+ iv => $init_vector,
+ header => 'none',
+ prepend_iv => 0,
+ keysize => 16 } );
+$encrypted = $cipher->encrypt($input);
+is (length($encrypted), 40, "uuid encrypted length");
+$output = $cipher->decrypt($encrypted);
+is ($input, $output, "uuid reverse encrypt");
+
+open(FH, "blowfish.2.bin");
+$bin = scalar <FH>;
+close(FH);
+is( $encrypted, $bin, "uuid matches openssl" );
+
+print encode_base64($encrypted);
diff --git a/indra/test/llblowfish_tut.cpp b/indra/test/llblowfish_tut.cpp
new file mode 100644
index 0000000000..8f0912d98d
--- /dev/null
+++ b/indra/test/llblowfish_tut.cpp
@@ -0,0 +1,125 @@
+/**
+ * @file llblowfish_tut.cpp
+ * @author James Cook, james@lindenlab.com
+ * @date 2007-02-04
+ *
+ * Data files generated with:
+ * openssl enc -bf-cbc -in blowfish.digits.txt -out blowfish.1.bin -K 00000000000000000000000000000000 -iv 0000000000000000 -p
+ * openssl enc -bf-cbc -in blowfish.digits.txt -out blowfish.2.bin -K 526a1e07a19dbaed84c4ff08a488d15e -iv 0000000000000000 -p
+ *
+ * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc.
+ * $License$
+ */
+
+#include "linden_common.h"
+#include "lltut.h"
+
+#include "llblowfishcipher.h"
+
+#include <string>
+#include <stdio.h>
+#include "lluuid.h"
+
+namespace tut
+{
+ class LLData
+ {
+ public:
+ unsigned char* mInput;
+ int mInputSize;
+
+ LLData()
+ {
+ // \n to make it easier to create text files
+ // for testing with command line openssl
+ mInput = (unsigned char*)"01234567890123456789012345678901234\n";
+ mInputSize = 36;
+ }
+
+ bool matchFile(const char* filename,
+ const std::string& data)
+ {
+ FILE* fp = fopen(filename, "rb");
+ if (!fp)
+ {
+ // sometimes test is run inside the indra directory
+ std::string path = "test/";
+ path += filename;
+ fp = fopen(path.c_str(), "rb");
+ }
+ if (!fp)
+ {
+ llwarns << "unabled to open " << filename << llendl;
+ return false;
+ }
+
+ std::string good;
+ good.resize(256);
+ size_t got = fread(&good[0], 1, 256, fp);
+ lldebugs << "matchFile read " << got << llendl;
+ fclose(fp);
+ good.resize(got);
+
+ return (good == data);
+ }
+ };
+ typedef test_group<LLData> blowfish_test;
+ typedef blowfish_test::object blowfish_object;
+ // Create test with name that can be selected on
+ // command line of test app.
+ tut::blowfish_test blowfish("blowfish");
+
+ template<> template<>
+ void blowfish_object::test<1>()
+ {
+ LLUUID blank;
+ LLBlowfishCipher cipher(&blank.mData[0], UUID_BYTES);
+
+ U32 dst_len = cipher.requiredEncryptionSpace(36);
+ ensure("encryption space 36",
+ (dst_len == 40) );
+
+ // Blowfish adds an additional 8-byte block if your
+ // input is an exact multiple of 8
+ dst_len = cipher.requiredEncryptionSpace(8);
+ ensure("encryption space 8",
+ (dst_len == 16) );
+ }
+
+ template<> template<>
+ void blowfish_object::test<2>()
+ {
+ LLUUID blank;
+ LLBlowfishCipher cipher(&blank.mData[0], UUID_BYTES);
+
+ std::string result;
+ result.resize(256);
+ U32 count = cipher.encrypt(mInput, mInputSize,
+ (U8*) &result[0], 256);
+
+ ensure("encrypt output count",
+ (count == 40) );
+ result.resize(count);
+
+ ensure("encrypt null key", matchFile("blowfish.1.bin", result));
+ }
+
+ template<> template<>
+ void blowfish_object::test<3>()
+ {
+ // same as base64 test id
+ LLUUID id("526a1e07-a19d-baed-84c4-ff08a488d15e");
+ LLBlowfishCipher cipher(&id.mData[0], UUID_BYTES);
+
+ std::string result;
+ result.resize(256);
+ U32 count = cipher.encrypt(mInput, mInputSize,
+ (U8*) &result[0], 256);
+
+ ensure("encrypt output count",
+ (count == 40) );
+ result.resize(count);
+
+ ensure("encrypt real key", matchFile("blowfish.2.bin", result));
+ }
+}