blob: fc487cbe5d83a976434ef2644786caef587f20b2 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
(defun hmac-impl (key message
digest-fn begin-fn update-fn end-fn
block-size)
(if (stringp key)
(upd key buf-str))
(if (stringp message)
(upd message buf-str))
(if (> (len key) block-size)
(upd key digest-fn))
(buf-set-length key block-size)
(for ((i 0) (okey (copy-buf key)) (ikey (copy-buf key))
(ctx0 [begin-fn]) (ctx1 [begin-fn]))
((< i block-size)
[update-fn ctx0 ikey]
[update-fn ctx0 message]
[update-fn ctx1 okey]
[update-fn ctx1 [end-fn ctx0]]
[end-fn ctx1])
((inc i))
(upd [okey i] (logxor #x5c))
(upd [ikey i] (logxor #x36))))
(defun hmac-sha1 (key message)
[hmac-impl key message sha1 sha1-begin sha1-hash sha1-end 64])
(defun hmac-sha256 (key message)
[hmac-impl key message sha256 sha256-begin sha256-hash sha256-end 64])
(defun hmac-md5 (key message)
[hmac-impl key message md5 md5-begin md5-hash md5-end 64])
|