[crypticl-cvs] CVS crypticl/src
tskogan
tskogan at common-lisp.net
Sat Jan 6 12:58:08 UTC 2007
Update of /project/crypticl/cvsroot/crypticl/src
In directory clnet:/tmp/cvs-serv8087
Added Files:
sha256.lisp
Log Message:
Starting SHA-256.
--- /project/crypticl/cvsroot/crypticl/src/sha256.lisp 2007/01/06 12:58:08 NONE
+++ /project/crypticl/cvsroot/crypticl/src/sha256.lisp 2007/01/06 12:58:08 1.1
;;;;-*-lisp-*-
;;;; The Crypticl cryptographic library.
;;;;
;;;; Description: The SHA-256 hash algorithm
;;;; Author: Taale Skogan
;;;; Distribution: See the accompanying file LICENSE.
;;; Based on the reference [1]
;;;
;;; [1] FIPS 180-2 "Secure Hash Standard"
(in-package crypticl)
;;; SHA-256 Constants
;;; SHA-256 uses a sequence of sixty-four constant 32-bit words
(defvar *sha256-constants*
(make-array 64
:element-type '(unsigned-byte 32)
:initial-contents
'(#x428a2f98 #x71374491 #xb5c0fbcf #xe9b5dba5
#x3956c25b #x59f111f1 #x923f82a4 #xab1c5ed5
#xd807aa98 #x12835b01 #x243185be #x550c7dc3
#x72be5d74 #x80deb1fe #x9bdc06a7 #xc19bf174
#xe49b69c1 #xefbe4786 #x0fc19dc6 #x240ca1cc
#x2de92c6f #x4a7484aa #x5cb0a9dc #x76f988da
#x983e5152 #xa831c66d #xb00327c8 #xbf597fc7
#xc6e00bf3 #xd5a79147 #x06ca6351 #x14292967
#x27b70a85 #x2e1b2138 #x4d2c6dfc #x53380d13
#x650a7354 #x766a0abb #x81c2c92e #x92722c85
#xa2bfe8a1 #xa81a664b #xc24b8b70 #xc76c51a3
#xd192e819 #xd6990624 #xf40e3585 #x106aa070
#x19a4c116 #x1e376c08 #x2748774c #x34b0bcb5
#x391c0cb3 #x4ed8aa4a #x5b9cca4f #x682e6ff3
#x748f82ee #x78a5636f #x84c87814 #x8cc70208
#x90befffa #xa4506ceb #xbef9a3f7 #xc67178f2)))
(defmacro initial-sha256-hash-value (a b c d e f g h)
"Initializes the state of the hash algorithm"
`(setf ,a #x6a09e667
,b #xbb67ae85
,c #x3c6ef372
,d #xa54ff53a
,e #x510e527f
,f #x9b05688c
,g #x1f83d9ab
,h #x5be0cd19))
;;; SHA-256 uses six logical functions, where each function operates on 32-bit
;;; words, which are represented as x, y, and z. The result of each function
;;; is a new 32-bit word.
(defun sigma-0 (x)
"ROTR 7(x) xor ROTR 18(x) xor SHR 3(x)"
(logxor (right-rot-32 x 7)
(right-rot-32 x 18)
(ash x -3)))
(defun sigma-1 (x)
"ROTR 17(x) xor ROTR 19(x) xor SHR 10(x)"
(logxor (right-rot-32 x 17)
(right-rot-32 x 17)
(ash x -10)))
;;;(defun sha256-message-schedule (m)
;;; "Expand input array m with 512 bits = 16 32 bits words to array of 64
;;;32 bits words"
;;; (let ((w (make-array 64 :element-type '(unsigned-byte 32))))
;;; (dotimes (i 16 t)
;;; (setf (aref w i) (aref m i) ) )
;;; (dotimes (i 48 t)
;;; (setf (aref w (+ i 16))
;;; (left-rot-32 ( (aref w (- i 2)) (aref w (+ i 8))
;;; (aref w (+ i 2)) (aref w (+ i ))) 1) ))
;;; w))
More information about the Crypticl-cvs
mailing list