50 lines
1.2 KiB
Factor
50 lines
1.2 KiB
Factor
USING: arrays combinators crypto.common crypto.md5 crypto.sha1
|
|
crypto.md5.private io io.binary io.files io.streams.string
|
|
kernel math math.vectors memoize sequences ;
|
|
IN: crypto.hmac
|
|
|
|
: sha1-hmac ( Ko Ki -- hmac )
|
|
initialize-sha1 process-sha1-block
|
|
(stream>sha1) get-sha1
|
|
initialize-sha1
|
|
>r process-sha1-block r>
|
|
process-sha1-block get-sha1 ;
|
|
|
|
: md5-hmac ( Ko Ki -- hmac )
|
|
initialize-md5 process-md5-block
|
|
(stream>md5) get-md5
|
|
initialize-md5
|
|
>r process-md5-block r>
|
|
process-md5-block get-md5 ;
|
|
|
|
: seq-bitxor ( seq seq -- seq )
|
|
[ bitxor ] 2map ;
|
|
|
|
MEMO: ipad ( -- seq ) 64 HEX: 36 <array> ;
|
|
MEMO: opad ( -- seq ) 64 HEX: 5c <array> ;
|
|
|
|
: init-hmac ( K -- o i )
|
|
64 0 pad-right
|
|
[ opad seq-bitxor ] keep
|
|
ipad seq-bitxor ;
|
|
|
|
: stream>sha1-hmac ( K stream -- hmac )
|
|
[ init-hmac sha1-hmac ] with-stream ;
|
|
|
|
: file>sha1-hmac ( K path -- hmac )
|
|
<file-reader> stream>sha1-hmac ;
|
|
|
|
: string>sha1-hmac ( K string -- hmac )
|
|
<string-reader> stream>sha1-hmac ;
|
|
|
|
|
|
: stream>md5-hmac ( K stream -- hmac )
|
|
[ init-hmac md5-hmac ] with-stream ;
|
|
|
|
: file>md5-hmac ( K path -- hmac )
|
|
<file-reader> stream>md5-hmac ;
|
|
|
|
: string>md5-hmac ( K string -- hmac )
|
|
<string-reader> stream>md5-hmac ;
|
|
|