diff options
| author | James Cook <james@lindenlab.com> | 2007-02-15 20:24:08 +0000 | 
|---|---|---|
| committer | James Cook <james@lindenlab.com> | 2007-02-15 20:24:08 +0000 | 
| commit | 12ac04231b8d358e70c830f7958f7efbc0f7c0d1 (patch) | |
| tree | 189b9bc4e3bfa63275cc41be8dc42a28b0f54ffe /indra/test | |
| parent | 4feabe4a9caec380cad405d5410bc762c862113d (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.bin | 1 | ||||
| -rw-r--r-- | indra/test/blowfish.2.bin | bin | 0 -> 40 bytes | |||
| -rw-r--r-- | indra/test/blowfish.digits.txt | 1 | ||||
| -rwxr-xr-x | indra/test/blowfish.pl | 74 | ||||
| -rw-r--r-- | indra/test/llblowfish_tut.cpp | 125 | 
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.binBinary files differ new file mode 100644 index 0000000000..ef72d96bbf --- /dev/null +++ b/indra/test/blowfish.2.bin 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)); +	} +} | 
