Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
116
Task/SHA-1/PicoLisp/sha-1.l
Normal file
116
Task/SHA-1/PicoLisp/sha-1.l
Normal file
|
|
@ -0,0 +1,116 @@
|
|||
(de leftRotate (X C)
|
||||
(| (mod32 (>> (- C) X)) (>> (- 32 C) X)) )
|
||||
|
||||
(de mod32 (N)
|
||||
(& N `(hex "FFFFFFFF")) )
|
||||
|
||||
(de not32 (N)
|
||||
(x| N `(hex "FFFFFFFF")) )
|
||||
|
||||
(de add32 @
|
||||
(mod32 (pass +)) )
|
||||
|
||||
(de sha1 (Str)
|
||||
(let Len (length Str)
|
||||
(setq Str
|
||||
(conc
|
||||
(need
|
||||
(-
|
||||
8
|
||||
(* 64 (/ (+ Len 1 8 63) 64)) )
|
||||
(conc
|
||||
(mapcar char (chop Str))
|
||||
(cons `(hex "80")) )
|
||||
0 )
|
||||
(flip
|
||||
(make
|
||||
(setq Len (* 8 Len))
|
||||
(do 8
|
||||
(link (& Len 255))
|
||||
(setq Len (>> 8 Len )) ) ) ) ) ) )
|
||||
(let
|
||||
(H0 `(hex "67452301")
|
||||
H1 `(hex "EFCDAB89")
|
||||
H2 `(hex "98BADCFE")
|
||||
H3 `(hex "10325476")
|
||||
H4 `(hex "C3D2E1F0") )
|
||||
(while Str
|
||||
(let
|
||||
(A H0 B H1 C H2 D H3 E H4
|
||||
W (conc
|
||||
(make
|
||||
(do 16
|
||||
(link
|
||||
(apply
|
||||
|
|
||||
(mapcar >> (-24 -16 -8 0) (cut 4 'Str)) ) ) ) )
|
||||
(need 64 0) ) )
|
||||
(for (I 17 (>= 80 I) (inc I))
|
||||
(set (nth W I)
|
||||
(leftRotate
|
||||
(x|
|
||||
(get W (- I 3))
|
||||
(get W (- I 8))
|
||||
(get W (- I 14))
|
||||
(get W (- I 16)) )
|
||||
1 ) ) )
|
||||
(use (Tmp F K)
|
||||
(for I 80
|
||||
(cond
|
||||
((>= 20 I)
|
||||
(setq
|
||||
F (| (& B C) (& (not32 B) D))
|
||||
K `(hex "5A827999") ) )
|
||||
((>= 40 I)
|
||||
(setq
|
||||
F (x| B C D)
|
||||
K `(hex "6ED9EBA1") ) )
|
||||
((>= 60 I)
|
||||
(setq
|
||||
F (| (& B C) (& B D) (& C D))
|
||||
K `(hex "8F1BBCDC") ) )
|
||||
(T
|
||||
(setq
|
||||
F (x| B C D)
|
||||
K `(hex "CA62C1D6") ) ) )
|
||||
(setq
|
||||
Tmp (add32 (leftRotate A 5) F E K (get W I) )
|
||||
E D
|
||||
D C
|
||||
C (leftRotate B 30)
|
||||
B A
|
||||
A Tmp ) ) )
|
||||
(setq
|
||||
H0 (add32 H0 A)
|
||||
H1 (add32 H1 B)
|
||||
H2 (add32 H2 C)
|
||||
H3 (add32 H3 D)
|
||||
H4 (add32 H4 E) ) ) )
|
||||
(mapcan
|
||||
'((N)
|
||||
(flip
|
||||
(make
|
||||
(do 4
|
||||
(link (& 255 N))
|
||||
(setq N (>> 8 N)) ) ) ) )
|
||||
(list H0 H1 H2 H3 H4) ) ) )
|
||||
|
||||
(let Str "Rosetta Code"
|
||||
(println
|
||||
(pack
|
||||
(mapcar
|
||||
'((B) (pad 2 (hex B)))
|
||||
(sha1 Str) ) ) )
|
||||
(println
|
||||
(pack
|
||||
(mapcar
|
||||
'((B) (pad 2 (hex B)))
|
||||
(native
|
||||
"libcrypto.so"
|
||||
"SHA1"
|
||||
'(B . 20)
|
||||
Str
|
||||
(length Str)
|
||||
'(NIL (20)) ) ) ) ) )
|
||||
|
||||
(bye)
|
||||
Loading…
Add table
Add a link
Reference in a new issue