Adding the "internet checksum" (RFC 1071).
parent
6c4ba923ae
commit
c3045005ef
|
@ -0,0 +1 @@
|
|||
John Benediktsson
|
|
@ -0,0 +1,22 @@
|
|||
! Copyright (C) 2010 John Benediktsson
|
||||
! See http://factorcode.org/license.txt for BSD license
|
||||
|
||||
USING: checksums checksums.internet tools.test ;
|
||||
|
||||
IN: checksums
|
||||
|
||||
[ B{ 255 255 } ] [ { } internet checksum-bytes ] unit-test
|
||||
[ B{ 254 255 } ] [ { 1 } internet checksum-bytes ] unit-test
|
||||
[ B{ 254 253 } ] [ { 1 2 } internet checksum-bytes ] unit-test
|
||||
[ B{ 251 253 } ] [ { 1 2 3 } internet checksum-bytes ] unit-test
|
||||
|
||||
: test-data ( -- bytes )
|
||||
B{
|
||||
HEX: 00 HEX: 01
|
||||
HEX: f2 HEX: 03
|
||||
HEX: f4 HEX: f5
|
||||
HEX: f6 HEX: f7
|
||||
} ;
|
||||
|
||||
[ B{ 34 13 } ] [ test-data internet checksum-bytes ] unit-test
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
! Copyright (C) 2010 John Benediktsson
|
||||
! See http://factorcode.org/license.txt for BSD license
|
||||
|
||||
USING: checksums grouping io.binary kernel math sequences ;
|
||||
|
||||
IN: checksums.internet
|
||||
|
||||
SINGLETON: internet ! RFC 1071
|
||||
|
||||
INSTANCE: internet checksum
|
||||
|
||||
M: internet checksum-bytes
|
||||
drop 0 swap 2 <sliced-groups> [ le> + ] each
|
||||
[ -16 shift ] [ HEX: ffff bitand ] bi +
|
||||
[ -16 shift ] keep + bitnot 2 >le ;
|
||||
|
|
@ -0,0 +1 @@
|
|||
Internet (RFC 1071) checksum algorithm
|
Loading…
Reference in New Issue