diff --git a/basis/checksums/internet/authors.txt b/basis/checksums/internet/authors.txt new file mode 100644 index 0000000000..e091bb8164 --- /dev/null +++ b/basis/checksums/internet/authors.txt @@ -0,0 +1 @@ +John Benediktsson diff --git a/basis/checksums/internet/internet-tests.factor b/basis/checksums/internet/internet-tests.factor new file mode 100644 index 0000000000..b01ba28001 --- /dev/null +++ b/basis/checksums/internet/internet-tests.factor @@ -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 + diff --git a/basis/checksums/internet/internet.factor b/basis/checksums/internet/internet.factor new file mode 100644 index 0000000000..8c609674b1 --- /dev/null +++ b/basis/checksums/internet/internet.factor @@ -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 [ le> + ] each + [ -16 shift ] [ HEX: ffff bitand ] bi + + [ -16 shift ] keep + bitnot 2 >le ; + diff --git a/basis/checksums/internet/summary.txt b/basis/checksums/internet/summary.txt new file mode 100644 index 0000000000..46ed6e3d54 --- /dev/null +++ b/basis/checksums/internet/summary.txt @@ -0,0 +1 @@ +Internet (RFC 1071) checksum algorithm