Heyho,

I´m doing some math on Hex Numbers to implement a modification of the TEA
algorithm,
which has to match a C implementation.

Now I´m facing the problem that Flash allows negative hexadecimal values,
which is quite unusual and not supported in C.

I´ve posted my algorithm below, would be great if someone would have a
solution for me on
how to force Flash to handle over/underflows in the "normal" manner.

Thanks,

André


--------------------------
usage example

//
var inp = "12345678901234567890123456789012";
var key = "72538349254738294658203654839288";
//
var crypted = TeaEncrypt(inp,key);
//
var out = TeaDecrypt(crypted,key);
//
trace(inp);
trace(crypted);
trace(out);

//traces:
/*
12345678901234567890123456789012
-4e99fb3a-1f1d5f5d
-703ea3b373dc1b
*/


        public static function TeaEncrypt(cryptData:String,
cryptKey:String):String {
            var y:Number= parseInt(cryptData.substr(0, 8), 16);
            var z:Number= parseInt(cryptData.substr(8, 8), 16);
            var a:Number= parseInt(cryptKey.substr( 0, 8), 16);
            var b:Number= parseInt(cryptKey.substr( 8, 8), 16);
            var c:Number= parseInt(cryptKey.substr(16, 8), 16);
            var d:Number= parseInt(cryptKey.substr(24, 8), 16);
            var sum:Number=0x00;
            var dt:Number=0x9E3779B9;
            var n:Number=32;
        
        while( n-->0 ) {
                sum = (sum + dt) & 0xFFFFFFFF;
                y += ((z << 4)+a) ^ (z+sum) ^ ((z >>> 5)+b);
                z += ((y << 4)+c) ^ (y+sum) ^ ((y >>> 5)+d);
                }

                return y.toString(16) + z.toString(16);
        }


        public static function TeaDecrypt(cryptData:String,
cryptKey:String):String {
            var y:Number= parseInt(cryptData.substr(0, 8), 16);
            var z:Number= parseInt(cryptData.substr(8, 8), 16);
            var a:Number= parseInt(cryptKey.substr( 0, 8), 16);
            var b:Number= parseInt(cryptKey.substr( 8, 8), 16);
            var c:Number= parseInt(cryptKey.substr(16, 8), 16);
            var d:Number= parseInt(cryptKey.substr(24, 8), 16);
        var sum:Number=0xC6EF3720;
            var delta:Number=0x9E3779B9;
        var n:Number=32;

            while( n-->0 ) {
            z -= ((y << 4)+c) ^ (y+sum) ^ ((y >>> 5)+d);
                y -= ((z << 4)+a) ^ (z+sum) ^ ((z >>> 5)+b);
                sum = (sum - delta) & 0xFFFFFFFF;
        }
   
                return y.toString(16) + z.toString(16);
        }

_______________________________________________
Flashcoders@chattyfig.figleaf.com
To change your subscription options or search the archive:
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

Brought to you by Fig Leaf Software
Premier Authorized Adobe Consulting and Training
http://www.figleaf.com
http://training.figleaf.com

Reply via email to