/**
* XTeaKeyTest
*
* A test class for XTeaKey
* Copyright (c) 2007 Henri Torgemane
*
* See LICENSE.txt for full license information.
*/
package com.hurlant.crypto.tests
{
import com.hurlant.crypto.prng.Random;
import com.hurlant.crypto.symmetric.ECBMode;
import com.hurlant.crypto.symmetric.XTeaKey;
import com.hurlant.util.Hex;
import flash.utils.ByteArray;
import flash.utils.getTimer;
public class XTeaKeyTest extends TestCase
{
public function XTeaKeyTest(h:ITestHarness) {
super(h, "XTeaKey Test");
runTest(testGetBlockSize, "XTea Block Size");
runTest(testVectors, "XTea Test Vectors");
h.endTestCase();
}
public function testGetBlockSize():void {
var tea:XTeaKey = new XTeaKey(Hex.toArray("deadbabecafebeefdeadbabecafebeef"));
assert("tea blocksize", tea.getBlockSize()==8);
}
public function testVectors():void {
// blah.
// can't find working test vectors.
// algorithms should not get published without vectors :(
var keys:Array=[
"00000000000000000000000000000000",
"2b02056806144976775d0e266c287843"];
var pts:Array=[
"0000000000000000",
"74657374206d652e"];
var cts:Array=[
"2dc7e8d3695b0538",
"7909582138198783"];
// self-fullfilling vectors.
// oh well, at least I can decrypt what I produce. :(
for (var i:uint=0;i<keys.length;i++) {
var key:ByteArray = Hex.toArray(keys[i]);
var pt:ByteArray = Hex.toArray(pts[i]);
var tea:XTeaKey = new XTeaKey(key);
tea.encrypt(pt);
var out:String = Hex.fromArray(pt);
assert("comparing "+cts[i]+" to "+out, cts[i]==out);
// now go back to plaintext.
pt.position=0;
tea.decrypt(pt);
out = Hex.fromArray(pt);
assert("comparing "+pts[i]+" to "+out, pts[i]==out);
}
}
}
}
|