Skip to content

Commit 037ef7f

Browse files
committed
small refactor and bf-decrypt
1 parent 883881a commit 037ef7f

File tree

2 files changed

+26
-13
lines changed

2 files changed

+26
-13
lines changed

blowfish.el

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -304,14 +304,14 @@
304304
(make-blowfish :P P :S S))))
305305

306306

307-
(defmethod blowfish-encrypt ((bf blowfish) block)
307+
(defun blowfish-encrypt (bf block)
308308
"Encrypt 64bit block using 'bf'"
309309
(destructuring-bind (L R) (blowfish--32bit-blocks-of block)
310310
(apply #'concat
311311
(mapcar #'blowfish--pack-u32
312312
(blowfish--encrypt L R (blowfish-P bf) (blowfish-S bf))))))
313313

314-
(defmethod blowfish-decrypt ((bf blowfish) block)
314+
(defun blowfish-decrypt (bf block)
315315
"Decrypt 64bit block using 'bf'"
316316
(destructuring-bind (L R) (blowfish--32bit-blocks-of block)
317317
(apply #'concat

vimcrypt.el

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -64,30 +64,43 @@
6464
(make-vimcrypt-cfb
6565
:cypher (blowfish-init (derive-key key)) :iv iv
6666
:test (lambda (i) (and (>= i 64) (zerop (mod i 8))))
67-
:update (lambda (bf data i)
68-
(vimcrypt-swapped-encrypt (vimcrypt-cfb-cipher bf)
67+
:update (lambda (cfb data i)
68+
(vimcrypt-swapped-encrypt (vimcrypt-cfb-cipher cfb)
6969
(substring data (- i 64) (+ 8 (- i 64)))))))
7070

7171
(defun vimcrypt-fixed-cfb (key iv)
7272
(make-vimcrypt-cfb
7373
:cypher (blowfish-init (derive-key key)) :iv iv
7474
:test (lambda (i) (zerop (mod i 8)))
75-
:update (lambda (bf data i)
76-
(let ((xor (vimcrypt-swapped-encrypt (vimcrypt-cfb-cipher bf)
77-
(vimcrypt-cfb-iv bf))))
78-
(setf (vimcrypt-cfb-iv bf) (substring data i (+ i 8)))
75+
:update (lambda (cfb data i)
76+
(let ((xor (vimcrypt-swapped-encrypt (vimcrypt-cfb-cipher cfb)
77+
(vimcrypt-cfb-iv cfb))))
78+
(setf (vimcrypt-cfb-iv cfb) (substring data i (+ i 8)))
7979
xor))))
8080

81-
(defmethod vimcrypt-decrypt ((bf vimcrypt-cbf) data)
81+
(defun vimcrypt-cfb-decrypt (cfb data)
8282
(loop with plain = nil
83-
with xor = (vimcrypt-swapped-encrypt (vimcrypt-cfb-cipher bf)
84-
(vimcrypt-cbf-iv bf))
83+
with xor = (vimcrypt-swapped-encrypt (vimcrypt-cfb-cipher cfb)
84+
(vimcrypt-cbf-iv cfb))
8585
for i from 0 to (length data)
86-
if (funcall (vimcrypt-cfb-test bf))
87-
do (setf xor (funcall (vimcrypt-cfb-update bf data i)))
86+
if (funcall (vimcrypt-cfb-test cfb))
87+
do (setf xor (funcall (vimcrypt-cfb-update cfb data i)))
8888
collecting (logxor (aref xor (mod i 8)) (aref data i)) into plain
8989
finally (return (apply #'string plain))))
9090

91+
92+
(cl-defun vimcrypt-bf-decrypt (passwd data &key (version 'bf2))
93+
(let* ((salt (substring data 0 8))
94+
(iv (substring data 8 16))
95+
(ciphertext (substring data 16))
96+
(key (derive-key passwd salt))
97+
(cfb (case version
98+
((bf1) (vimcrypt-bad-cfb key iv))
99+
((bf2) (vimcrypt-fixed-cfb key iv))
100+
(t (error "Invalid BF version!")))))
101+
(vimcrypt-cfb-decrypt cfb ciphertext)))
102+
103+
91104
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
92105
;; TEST
93106

0 commit comments

Comments
 (0)