/[RFID]/guess-crc.pl
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /guess-crc.pl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 12 - (hide annotations)
Mon Sep 29 16:28:49 2008 UTC (15 years, 7 months ago) by dpavlin
File MIME type: text/plain
File size: 1731 byte(s)
cleanup code, better output
1 dpavlin 7 #!/usr/bin/perl -w
2    
3     # guess-crc.pl
4     #
5     # 09/28/08 21:54:24 CEST Dobrica Pavlinusic <dpavlin@rot13.org>
6    
7     use strict;
8    
9     use Digest::CRC qw(crc32 crc16 crcccitt crc crc8);
10     use Data::Dump qw/dump/;
11    
12 dpavlin 12 my $debug = 1 if @ARGV;
13    
14 dpavlin 7 sub hex2b {
15     my $hex = shift;
16     return map { hex($_) } split(/\s+/, $hex);
17     }
18    
19 dpavlin 12 my @check_polys = ( 0x0000 .. 0xffff );
20     @check_polys = ( 32833, 43271, 32833, 43271, 19299, 35925, 47123, 49319, 56971 );
21 dpavlin 7
22 dpavlin 12 my @check_offset = ( 0,1,2,3 );
23     @check_offset = ( 1 ); # skip first, second always zero
24    
25     my $found_polys;
26    
27     sub check_crc {
28     my ( $poly, $bytes, $wanted ) = @_;
29     my $ctx = Digest::CRC->new(
30     #width=>16, init=>0xffff, xorout=>0, refout=>1, poly=>0x1021, refin=>0 # ccitt
31     #width=>16, init=>0, xorout=>0, refout=>1, poly=>0x8005, refin=>1 # crc16
32     #0x8408,
33     #0xa001,
34     width=>16, init=>0, xorout=>0, refout=>1, poly=>$poly,refin=>1
35     #width=>16, init=>0xffff, xorout=>0, refout=>1, poly=>$poly, refin=>0 # ccitt
36     );
37     $ctx->add( $bytes );
38     my $try = $ctx->digest;
39     my $str = pack('n*', $try);
40     warn "## check_crc( $poly, ",dump($bytes)," ) = ",dump( $str, $wanted ) if $debug;
41     return $str eq $wanted;
42     }
43    
44 dpavlin 7 foreach (
45     'D5 00 05 04 00 11 8C 66',
46     'D6 00 05 FE 00 05 FA 40',
47     ) {
48     my $hex = $_;
49     $hex =~ s/\s+//g;
50    
51     my $bytes = pack('H*', substr($hex, 0, -4));
52    
53 dpavlin 12 warn "?? guess crc ",substr($hex,-4);
54 dpavlin 7 my $crc = pack('H4', substr($hex,-4));
55    
56     warn "input $_ => ",dump( $bytes, $crc );
57    
58 dpavlin 12 foreach my $o ( @check_offset ) {
59 dpavlin 7 my $b = substr( $bytes, $o );
60    
61 dpavlin 12 foreach my $poly ( @check_polys ) {
62 dpavlin 7
63     print "## poly $poly\n" if $poly % 1000 == 0;
64    
65 dpavlin 12 if ( check_crc( $poly, $b, $crc ) ) {
66     warn "HIT: $o poly: $poly\n";
67     $found_polys->{$poly}->{$o}++;
68 dpavlin 7 }
69     }
70     }
71     }
72    
73 dpavlin 12 print "FOUND polys = ", dump( $found_polys );

Properties

Name Value
svn:executable *

  ViewVC Help
Powered by ViewVC 1.1.26