let /* RC5 algorithm "magic numbers" */ var P:= 0xb7e15163 /* base of ln - 2 */ var Q:= 0x9e3779b9 /* golden ratio - 1 */ var L0:=k0() /* Keys to be tested */ var L1:=k1() var P0:= 0x20656854 ^ 0xC93C8C23 /* plain text */ var P1:= 0x6e6b6e75 ^ 0x9e9ffdb0 var C0:= 0xD28688BF /* Cipher text */ var C1:= 0x1C8450A9 var S00:=P /* initialize constant array */ var S01:=S00+Q var S02:=S01+Q var S03:=S02+Q var S04:=S03+Q var S05:=S04+Q var S06:=S05+Q var S07:=S06+Q var S08:=S07+Q var S09:=S08+Q var S10:=S09+Q var S11:=S10+Q var S12:=S11+Q var S13:=S12+Q var S14:=S13+Q var S15:=S14+Q var S16:=S15+Q var S17:=S16+Q var S18:=S17+Q var S19:=S18+Q var S20:=S19+Q var S21:=S20+Q var S22:=S21+Q var S23:=S22+Q var S24:=S23+Q var S25:=S24+Q /* calculate key expansion */ var A:=0 var B:=0 in ( for i:=1 to 3 do ( S00 := (S00+(A+B)) <<< 3; A := S00; L0 := (L0 +(A+B)) <<< (A+B); B := L0 ; S01 := (S01+(A+B)) <<< 3; A := S01; L1 := (L1 +(A+B)) <<< (A+B); B := L1 ; /**/ S02 := (S02+(A+B)) <<< 3; A := S02; L0 := (L0 +(A+B)) <<< (A+B); B := L0 ; S03 := (S03+(A+B)) <<< 3; A := S03; L1 := (L1 +(A+B)) <<< (A+B); B := L1 ; /**/ S04 := (S04+(A+B)) <<< 3; A := S04; L0 := (L0 +(A+B)) <<< (A+B); B := L0 ; S05 := (S05+(A+B)) <<< 3; A := S05; L1 := (L1 +(A+B)) <<< (A+B); B := L1 ; /**/ S06 := (S06+(A+B)) <<< 3; A := S06; L0 := (L0 +(A+B)) <<< (A+B); B := L0 ; S07 := (S07+(A+B)) <<< 3; A := S07; L1 := (L1 +(A+B)) <<< (A+B); B := L1 ; /**/ S08 := (S08+(A+B)) <<< 3; A := S08; L0 := (L0 +(A+B)) <<< (A+B); B := L0 ; S09 := (S09+(A+B)) <<< 3; A := S09; L1 := (L1 +(A+B)) <<< (A+B); B := L1 ; /**/ S10 := (S10+(A+B)) <<< 3; A := S10; L0 := (L0 +(A+B)) <<< (A+B); B := L0 ; S11 := (S11+(A+B)) <<< 3; A := S11; L1 := (L1 +(A+B)) <<< (A+B); B := L1 ; /**/ S12 := (S12+(A+B)) <<< 3; A := S12; L0 := (L0 +(A+B)) <<< (A+B); B := L0 ; S13 := (S13+(A+B)) <<< 3; A := S13; L1 := (L1 +(A+B)) <<< (A+B); B := L1 ; /**/ S14 := (S14+(A+B)) <<< 3; A := S14; L0 := (L0 +(A+B)) <<< (A+B); B := L0 ; S15 := (S15+(A+B)) <<< 3; A := S15; L1 := (L1 +(A+B)) <<< (A+B); B := L1 ; /**/ S16 := (S16+(A+B)) <<< 3; A := S16; L0 := (L0 +(A+B)) <<< (A+B); B := L0 ; S17 := (S17+(A+B)) <<< 3; A := S17; L1 := (L1 +(A+B)) <<< (A+B); B := L1 ; /**/ S18 := (S18+(A+B)) <<< 3; A := S18; L0 := (L0 +(A+B)) <<< (A+B); B := L0 ; S19 := (S19+(A+B)) <<< 3; A := S19; L1 := (L1 +(A+B)) <<< (A+B); B := L1 ; /**/ S20 := (S20+(A+B)) <<< 3; A := S20; L0 := (L0 +(A+B)) <<< (A+B); B := L0 ; S21 := (S21+(A+B)) <<< 3; A := S21; L1 := (L1 +(A+B)) <<< (A+B); B := L1 ; /**/ S22 := (S22+(A+B)) <<< 3; A := S22; L0 := (L0 +(A+B)) <<< (A+B); B := L0 ; S23 := (S23+(A+B)) <<< 3; A := S23; L1 := (L1 +(A+B)) <<< (A+B); B := L1 ; /**/ S24 := (S24+(A+B)) <<< 3; A := S24; L0 := (L0 +(A+B)) <<< (A+B); B := L0 ; S25 := (S25+(A+B)) <<< 3; A := S25; L1 := (L1 +(A+B)) <<< (A+B); B := L1 ); B:=C1; A:=C0; /* now decrypt */ B:= ((B - S25) >>> A) ^ A; A:= ((A - S24) >>> B) ^ B; B:= ((B - S23) >>> A) ^ A; A:= ((A - S22) >>> B) ^ B; B:= ((B - S21) >>> A) ^ A; A:= ((A - S20) >>> B) ^ B; B:= ((B - S19) >>> A) ^ A; A:= ((A - S18) >>> B) ^ B; B:= ((B - S17) >>> A) ^ A; A:= ((A - S16) >>> B) ^ B; B:= ((B - S15) >>> A) ^ A; A:= ((A - S14) >>> B) ^ B; B:= ((B - S13) >>> A) ^ A; A:= ((A - S12) >>> B) ^ B; B:= ((B - S11) >>> A) ^ A; A:= ((A - S10) >>> B) ^ B; B:= ((B - S09) >>> A) ^ A; A:= ((A - S08) >>> B) ^ B; B:= ((B - S07) >>> A) ^ A; A:= ((A - S06) >>> B) ^ B; B:= ((B - S05) >>> A) ^ A; A:= ((A - S04) >>> B) ^ B; B:= ((B - S03) >>> A) ^ A; A:= ((A - S02) >>> B) ^ B; (P1 = B-S01) && (P0 = A-S00) /* test for result equality */ ) end