blowfish encryption - blowfish-encrypt-block blowfish-decrypt-block
This commit is contained in:
parent
8a5d8fb45d
commit
adf0ec24fd
|
@ -1249,7 +1249,99 @@
|
||||||
(table-ref data 1)
|
(table-ref data 1)
|
||||||
(table-ref data 2)
|
(table-ref data 2)
|
||||||
(table-ref data 3))))
|
(table-ref data 3))))
|
||||||
|
)
|
||||||
|
|
||||||
|
(let ((datal 0)
|
||||||
|
(datar 0))
|
||||||
|
|
||||||
|
(do ((i 0 (+ 2)))
|
||||||
|
((>= i (+ blowfish-rounds 2))0)
|
||||||
|
(blowfish-encrypt bc datal datar)
|
||||||
|
(vector-set! (blowfish-p bc) i datal)
|
||||||
|
(vector-set! (blowfish-p bc) (+ i 1) datar)
|
||||||
|
)
|
||||||
|
(do ((i 0 (+ 2)))
|
||||||
|
((>= i 256)0)
|
||||||
|
(vector-set! (blowfish-s0 bc) i datal)
|
||||||
|
(vector-set! (blowfish-s0 bc) (+ i 1) datar))
|
||||||
|
(do ((i 0 (+ 2)))
|
||||||
|
((>= i 256)0)
|
||||||
|
(vector-set! (blowfish-s1 bc) i datal)
|
||||||
|
(vector-set! (blowfish-s1 bc) (+ i 1) datar))
|
||||||
|
(do ((i 0 (+ 2)))
|
||||||
|
((>= i 256)0)
|
||||||
|
(vector-set! (blowfish-s2 bc) i datal)
|
||||||
|
(vector-set! (blowfish-s2 bc) (+ i 1) datar))
|
||||||
|
(do ((i 0 (+ 2)))
|
||||||
|
((>= i 256)0)
|
||||||
|
(vector-set! (blowfish-s3 bc) i datal)
|
||||||
|
(vector-set! (blowfish-s3 bc) (+ i 1) datar))
|
||||||
|
|
||||||
|
(do ((i 0 (+ i 1)))
|
||||||
|
((>= i 255)0);;
|
||||||
|
(do ((j (+ i 1) (+ j 1)))
|
||||||
|
(if (or (= (vector-ref (blowfish-s0 bc) i)
|
||||||
|
(vector-ref (blowfish-s0 bc) j))
|
||||||
|
(= (vector-ref (blowfish-s1 bc) i)
|
||||||
|
(vector-ref (blowfish-s1 bc) j))
|
||||||
|
(= (vector-ref (blowfish-s2 bc) i)
|
||||||
|
(vector-ref (blowfish-s2 bc) j))
|
||||||
|
(= (vector-ref (blowfish-s3 bc) i)
|
||||||
|
(vector-ref (blowfish-s3 bc) j)))
|
||||||
|
(begin
|
||||||
|
(display "Weak key.")
|
||||||
|
-1))
|
||||||
|
)))))
|
||||||
|
|
||||||
|
|
||||||
|
;; outbuf and inbuf are vectors
|
||||||
|
(define (blowfish-encrypt-block bc outbuf inbuf)
|
||||||
|
(let ((d1 0)
|
||||||
|
(d2 0))
|
||||||
|
(set! d1 (bitwise-ior (arithmetic-shift (vector-ref inbuf 0) 24)
|
||||||
|
(arithmetic-shift (vector-ref inbuf 1) 16)
|
||||||
|
(arithmetic-shift (vector-ref inbuf 2) 8)
|
||||||
|
(vector-ref inbuf 3)))
|
||||||
|
(set! d2 (bitwise-ior (arithmetic-shift (vector-ref inbuf 4) 24)
|
||||||
|
(arithmetic-shift (vector-ref inbuf 5) 16)
|
||||||
|
(arithmetic-shift (vector-ref inbuf 6) 8)
|
||||||
|
(vector-ref inbuf 7)))
|
||||||
|
(blowfish-encrypt bc d1 d2)
|
||||||
|
(vector-set! outbuf 0 (bitwise-and (arithmetic-shift d1 -24) 271)) ;;271==0xff
|
||||||
|
(vector-set! outbuf 1 (bitwise-and (arithmetic-shift d1 -16) 271)) ;;271==0xff
|
||||||
|
(vector-set! outbuf 2 (bitwise-and (arithmetic-shift d1 -8) 271)) ;;271==0xff
|
||||||
|
(vector-set! outbuf 3 (bitwise-and d1 271)) ;;271==0xff
|
||||||
|
(vector-set! outbuf 4 (bitwise-and (arithmetic-shift d2 -24) 271)) ;;271==0xff
|
||||||
|
(vector-set! outbuf 5 (bitwise-and (arithmetic-shift d2 -16) 271)) ;;271==0xff
|
||||||
|
(vector-set! outbuf 6 (bitwise-and (arithmetic-shift d2 -8) 271)) ;;271==0xff
|
||||||
|
(vector-set! outbuf 7 (bitwise-and d2 271)) ;;271==0xff
|
||||||
))
|
))
|
||||||
|
|
||||||
)
|
|
||||||
|
;; outbuf and inbuf are vectors
|
||||||
|
(define (blowfish-decrypt-block bc outbuf inbuf)
|
||||||
|
(let ((d1 0)
|
||||||
|
(d2 0))
|
||||||
|
(set! d1 (bitwise-ior (arithmetic-shift (vector-ref inbuf 0) 24)
|
||||||
|
(arithmetic-shift (vector-ref inbuf 1) 16)
|
||||||
|
(arithmetic-shift (vector-ref inbuf 2) 8)
|
||||||
|
(vector-ref inbuf 3)))
|
||||||
|
(set! d2 (bitwise-ior (arithmetic-shift (vector-ref inbuf 4) 24)
|
||||||
|
(arithmetic-shift (vector-ref inbuf 5) 16)
|
||||||
|
(arithmetic-shift (vector-ref inbuf 6) 8)
|
||||||
|
(vector-ref inbuf 7)))
|
||||||
|
(blowfish-decrypt bc d1 d2)
|
||||||
|
(vector-set! outbuf 0 (bitwise-and (arithmetic-shift d1 -24) 271)) ;;271==0xff
|
||||||
|
(vector-set! outbuf 1 (bitwise-and (arithmetic-shift d1 -16) 271)) ;;271==0xff
|
||||||
|
(vector-set! outbuf 2 (bitwise-and (arithmetic-shift d1 -8) 271)) ;;271==0xff
|
||||||
|
(vector-set! outbuf 3 (bitwise-and d1 271)) ;;271==0xff
|
||||||
|
(vector-set! outbuf 4 (bitwise-and (arithmetic-shift d2 -24) 271)) ;;271==0xff
|
||||||
|
(vector-set! outbuf 5 (bitwise-and (arithmetic-shift d2 -16) 271)) ;;271==0xff
|
||||||
|
(vector-set! outbuf 6 (bitwise-and (arithmetic-shift d2 -8) 271)) ;;271==0xff
|
||||||
|
(vector-set! outbuf 7 (bitwise-and d2 271)) ;;271==0xff
|
||||||
|
))
|
||||||
|
|
||||||
|
(define (blowfish-selftest)
|
||||||
|
(let ((bc blowfish-context))
|
||||||
|
(blowfish-set-key bc "abcdefghijklmnopqrstuvwxyz" 26)
|
||||||
|
(blowfish-encrypt-block bc buffer plain)))
|
Loading…
Reference in New Issue