move sha2 state to a tuple
parent
0dd2aa643a
commit
7a849022f4
|
@ -8,7 +8,7 @@ IN: checksums.sha2
|
||||||
|
|
||||||
<PRIVATE
|
<PRIVATE
|
||||||
|
|
||||||
SYMBOLS: H word-size block-size ;
|
SYMBOL: sha2
|
||||||
|
|
||||||
CONSTANT: a 0
|
CONSTANT: a 0
|
||||||
CONSTANT: b 1
|
CONSTANT: b 1
|
||||||
|
@ -89,7 +89,7 @@ CONSTANT: K-256
|
||||||
[ [ bitand ] [ bitor ] 2bi ] dip bitand bitor ;
|
[ [ bitand ] [ bitor ] 2bi ] dip bitand bitor ;
|
||||||
|
|
||||||
: prepare-message-schedule ( seq -- w-seq )
|
: prepare-message-schedule ( seq -- w-seq )
|
||||||
word-size get <sliced-groups> [ be> ] map block-size get 0 pad-tail
|
sha2 get word-size>> <sliced-groups> [ be> ] map sha2 get block-size>> 0 pad-tail
|
||||||
16 64 [a,b) over '[ _ process-M-256 ] each ;
|
16 64 [a,b) over '[ _ process-M-256 ] each ;
|
||||||
|
|
||||||
: slice3 ( n seq -- a b c )
|
: slice3 ( n seq -- a b c )
|
||||||
|
@ -98,7 +98,7 @@ CONSTANT: K-256
|
||||||
: T1 ( W n H -- T1 )
|
: T1 ( W n H -- T1 )
|
||||||
[
|
[
|
||||||
[ swap nth ] keep
|
[ swap nth ] keep
|
||||||
K-256 nth +
|
sha2 get K>> nth +
|
||||||
] dip
|
] dip
|
||||||
[ e swap slice3 ch w+ ]
|
[ e swap slice3 ch w+ ]
|
||||||
[ e swap nth S1-256 w+ ]
|
[ e swap nth S1-256 w+ ]
|
||||||
|
@ -126,7 +126,7 @@ CONSTANT: K-256
|
||||||
[ T2 ]
|
[ T2 ]
|
||||||
[ update-H ] tri
|
[ update-H ] tri
|
||||||
] with each
|
] with each
|
||||||
] keep H get [ w+ ] 2map H set ;
|
] keep sha2 get H>> [ w+ ] 2map sha2 get (>>H) ;
|
||||||
|
|
||||||
: pad-initial-bytes ( string -- padded-string )
|
: pad-initial-bytes ( string -- padded-string )
|
||||||
dup [
|
dup [
|
||||||
|
@ -141,12 +141,12 @@ CONSTANT: K-256
|
||||||
|
|
||||||
: byte-array>sha2 ( byte-array -- string )
|
: byte-array>sha2 ( byte-array -- string )
|
||||||
pad-initial-bytes
|
pad-initial-bytes
|
||||||
block-size get <sliced-groups>
|
sha2 get block-size>> <sliced-groups>
|
||||||
[
|
[
|
||||||
prepare-message-schedule
|
prepare-message-schedule
|
||||||
block-size get H get clone process-chunk
|
sha2 get [ block-size>> ] [ H>> clone ] bi process-chunk
|
||||||
] each
|
] each
|
||||||
H get 4 seq>byte-array ;
|
sha2 get H>> 4 seq>byte-array ;
|
||||||
|
|
||||||
PRIVATE>
|
PRIVATE>
|
||||||
|
|
||||||
|
@ -154,11 +154,19 @@ SINGLETON: sha-256
|
||||||
|
|
||||||
INSTANCE: sha-256 checksum
|
INSTANCE: sha-256 checksum
|
||||||
|
|
||||||
M: sha-256 checksum-bytes
|
TUPLE: sha2-state K H word-size block-size ;
|
||||||
drop [
|
|
||||||
initial-H-256 H set
|
|
||||||
4 word-size set
|
|
||||||
64 block-size set
|
|
||||||
byte-array>sha2
|
|
||||||
|
|
||||||
] with-scope ;
|
TUPLE: sha-256-state < sha2-state ;
|
||||||
|
|
||||||
|
: <sha-256-state> ( -- sha2-state )
|
||||||
|
sha-256-state new
|
||||||
|
K-256 >>K
|
||||||
|
initial-H-256 >>H
|
||||||
|
4 >>word-size
|
||||||
|
64 >>block-size ;
|
||||||
|
|
||||||
|
M: sha-256 checksum-bytes
|
||||||
|
drop
|
||||||
|
<sha-256-state> sha2 [
|
||||||
|
byte-array>sha2
|
||||||
|
] with-variable ;
|
||||||
|
|
Loading…
Reference in New Issue