Advertisement
Guest User

knothash.lisp

a guest
Dec 14th, 2017
98
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. (load "~/quicklisp/setup.lisp")
  2. (ql:quickload "bit-smasher" :silent t)
  3. (defun reverseip (l len)
  4.   (if (not (= len 0))
  5.       (loop
  6.          for i from (1- len) downto 0
  7.          for j upto (1- len)
  8.          do (if (or (< i j)
  9.                     (= i j))
  10.                 (return)
  11.                 (rotatef (nth j l) (nth i l))))))
  12.  
  13. (defun hash (str)
  14.   (let* ((lens (append (map 'list #'char-code str)
  15.                       '(17 31 73 47 23)))
  16.          (list (loop for i upto 255 collect i))
  17.          (lh list)
  18.          (skp 0)
  19.          (denseh '()))
  20.  
  21.     (rplacd (last list) list)
  22.     (dotimes (i 64)
  23.       (dolist (len lens)
  24.         (reverseip list len)
  25.         (setf list (nthcdr (+ len skp) list))
  26.         (incf skp)))
  27.  
  28.     (dotimes (i 16)
  29.       (setf denseh
  30.             (nconc denseh
  31.                    (list
  32.                     (reduce #'bit-xor
  33.                             (mapcar #'bit-smasher:bits<-
  34.                                     (subseq lh (* 16 i) (+ (* 16 i) 16))))))))
  35.     (apply #'concatenate '(vector bit) denseh)))
Advertisement
Advertisement
Advertisement
RAW Paste Data Copied
Advertisement