The ISAAC cipher: Difference between revisions

Content added Content deleted
(add picolisp)
Line 1,391: Line 1,391:
XOR dcr: a Top Secret secret
XOR dcr: a Top Secret secret
</pre>
</pre>

=={{header|PicoLisp}}==
<lang PicoLisp>(de add32 @
(mod32 (pass +)) )

(de mod32 (N)
(& N `(hex "FFFFFFFF")) )

(de isaac()
(let (Y 0 S (-13 6 -2 16 .))
(setq *CC (add32 *CC 1))
(setq *BB (add32 *BB *CC))
(for (I . X) *MM
(set (nth *MM I)
(setq Y
(add32
(get *MM (inc (% (>> 2 X) 256)))
(setq *AA
(add32
(x| *AA (>> (pop 'S) *AA))
(get *MM (inc (% (+ 127 I) 256))) ) )
*BB ) ) )
(set (nth *RR I)
(setq *BB
(add32
(get *MM (inc (% (>> 10 Y) 256)))
X ) ) ) ) ) )

(de mixA()
(let S (-11 2 -8 16 -10 4 -8 9 .)
(for I 8
(set (nth *A I)
(mod32
(x|
(get *A I)
(mod32
(>>
(pop 'S)
(get *A (inc (% I 8))) ) ) ) ) )
(set (nth *A (inc (% (+ 2 I) 8)))
(add32
(get *A (inc (% (+ 2 I) 8)))
(get *A I) ) )
(set (nth *A (inc (% I 8)))
(add32
(get *A (inc (% I 8)))
(get *A (inc (% (inc I) 8))) ) ) ) ) )

(de iseed ()
(do 4
(mixA) )
(for (I 1 (> 256 I) (inc 'I 8))
(for (J I (> (+ 8 I) J) (inc J))
(set (nth *A (inc (% (dec J) 8)))
(add32
(get *A (inc (% (dec J) 8)))
(get *RR J) ) ) )
(mixA)
(for (J I (> (+ 8 I) J) (inc J))
(set (nth *MM J)
(get *A (inc (% (dec J) 8))) ) ) )
(for (I 1 (> 256 I) (inc 'I 8))
(for (J I (> (+ 8 I) J) (inc J))
(set (nth *A (inc (% (dec J) 8)))
(add32
(get *A (inc (% (dec J) 8)))
(get *MM J) ) ) )
(mixA)
(for (J I (> (+ 8 I) J) (inc J))
(set (nth *MM J)
(get *A (inc (% (dec J) 8))) ) ) )
(isaac) )

(let
(*AA 0
*BB 0
*CC 0
*MM (need 256 0)
*RC 0
*RR (need
-256
(mapcar
char
(head 256 (chop "this is my secret key")) ) 0 )
*A (need 8 `(hex "9E3779B9")) )
(iseed)
(println
(pack
(mapcar
'((B) (pad 2 (hex B)))
(make
(for I (mapcar char (chop "a Top Secret secret"))
(link
(x|
I
(+
32
(%
(get
*RR
(if (>= 256 (inc '*RC))
*RC
(isaac)
(one *RC) ) )
95 ) ) ) ) ) ) ) ) ) )

(bye)</lang>


=={{header|Racket}}==
=={{header|Racket}}==