1 #include "EXTERN.h" 2 #include "perl.h" 3 #include "XSUB.h" 4 5 MODULE = Crypt::Tea_JS PACKAGE = Crypt::Tea_JS 6 PROTOTYPES: ENABLE 7 8 void 9 tea_code(v0,v1,k0,k1,k2,k3) 10 unsigned long v0 11 unsigned long v1 12 unsigned long k0 13 unsigned long k1 14 unsigned long k2 15 unsigned long k3 16 CODE: 17 unsigned long sum=0, delta=0x9e3779b9, n=32; 18 unsigned long k[4]; k[0]=k0;k[1]=k1;k[2]=k2;k[3]=k3; 19 while (n-- > 0) { 20 v0 += (((v1<<4) ^ (v1>>5))+v1) ^ (sum+k[sum&3]); 21 #ifdef MY_64bit_FIX_NEEDED 22 v0 &= 0xffffffff; 23 #endif 24 sum += delta; 25 v1 += (((v0<<4) ^ (v0>>5))+v0) ^ (sum+k[sum>>11 & 3]); 26 #ifdef MY_64bit_FIX_NEEDED 27 v1 &= 0xffffffff; 28 #endif 29 } 30 ST(0) = sv_2mortal(newSViv(v0)); 31 ST(1) = sv_2mortal(newSViv(v1)); 32 XSRETURN(2); 33 34 void 35 tea_decode(v0,v1,k0,k1,k2,k3) 36 unsigned long v0 37 unsigned long v1 38 unsigned long k0 39 unsigned long k1 40 unsigned long k2 41 unsigned long k3 42 CODE: 43 unsigned long n=32, sum, delta=0x9e3779b9; 44 unsigned long k[4]; k[0]=k0;k[1]=k1;k[2]=k2;k[3]=k3; 45 sum=delta<<5 ; 46 while (n-- > 0) { 47 v1 -= (((v0<<4) ^ (v0>>5))+v0) ^ (sum+k[sum>>11 & 3]) ; 48 #ifdef MY_64bit_FIX_NEEDED 49 v1 &= 0xffffffff; 50 #endif 51 sum -= delta ; 52 v0 -= (((v1<<4) ^ (v1>>5))+v1) ^ (sum+k[sum&3]) ; 53 #ifdef MY_64bit_FIX_NEEDED 54 v0 &= 0xffffffff; 55 #endif 56 } 57 ST(0) = sv_2mortal(newSViv(v0)); 58 ST(1) = sv_2mortal(newSViv(v1)); 59 XSRETURN(2); 60 61 void 62 oldtea_code(v0,v1,k0,k1,k2,k3) 63 unsigned long v0 64 unsigned long v1 65 unsigned long k0 66 unsigned long k1 67 unsigned long k2 68 unsigned long k3 69 CODE: 70 unsigned long sum=0, delta=0x9e3779b9, n=32; 71 while (n-- > 0) { 72 sum += delta ; 73 v0 += ((v1<<4)+k0) ^ (v1+sum) ^ ((v1>>5)+k1) ; 74 #ifdef MY_64bit_FIX_NEEDED 75 v0 &= 0xffffffff; 76 #endif 77 v1 += ((v0<<4)+k2) ^ (v0+sum) ^ ((v0>>5)+k3) ; 78 #ifdef MY_64bit_FIX_NEEDED 79 v1 &= 0xffffffff; 80 #endif 81 } 82 ST(0) = sv_2mortal(newSViv(v0)); 83 ST(1) = sv_2mortal(newSViv(v1)); 84 XSRETURN(2); 85 86 void 87 oldtea_decode(v0,v1,k0,k1,k2,k3) 88 unsigned long v0 89 unsigned long v1 90 unsigned long k0 91 unsigned long k1 92 unsigned long k2 93 unsigned long k3 94 CODE: 95 unsigned long n=32, sum, delta=0x9e3779b9; 96 sum=delta<<5 ; 97 while (n-- > 0) { 98 v1 -= ((v0<<4)+k2) ^ (v0+sum) ^ ((v0>>5)+k3) ; 99 #ifdef MY_64bit_FIX_NEEDED 100 v1 &= 0xffffffff; 101 #endif 102 v0 -= ((v1<<4)+k0) ^ (v1+sum) ^ ((v1>>5)+k1) ; 103 #ifdef MY_64bit_FIX_NEEDED 104 v0 &= 0xffffffff; 105 #endif 106 sum -= delta ; 107 } 108 ST(0) = sv_2mortal(newSViv(v0)); 109 ST(1) = sv_2mortal(newSViv(v1)); 110 XSRETURN(2); 111 112