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