factor/contrib/crypto/crc32.factor

22 lines
539 B
Factor
Raw Normal View History

2006-02-27 20:37:36 -05:00
USING: kernel math sequences namespaces ;
IN: crypto-internals
: crc32-polynomial HEX: edb88320 ; inline
: crc32-init ( -- table )
256 [
8 [
dup 1 bitand 0 >
[ -1 shift crc32-polynomial bitxor ] [ -1 shift ] if
] times
] map ;
SYMBOL: crc32-table crc32-init global [ crc32-table set ] bind
: calc-crc32 ( crc ch -- crc )
over bitxor HEX: ff bitand crc32-table get nth swap -8 shift bitxor ;
IN: crypto
: >crc32 ( seq -- n ) HEX: ffffffff [ swap [ calc-crc32 ] each ] keep bitxor ;