/[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 7 - (hide annotations)
Sun Sep 28 22:09:09 2008 UTC (15 years, 7 months ago) by dpavlin
File MIME type: text/plain
File size: 1344 byte(s)
code to guess crc
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     sub hex2b {
13     my $hex = shift;
14     return map { hex($_) } split(/\s+/, $hex);
15     }
16    
17     my @poly;
18     # ( 32833, 43271, 32833, 43271, 19299, 35925, 47123, 49319, 56971 );
19    
20     foreach (
21     'D5 00 05 04 00 11 8C 66',
22     'D6 00 05 FE 00 05 FA 40',
23     ) {
24     my $hex = $_;
25     $hex =~ s/\s+//g;
26    
27     my $bytes = pack('H*', substr($hex, 0, -4));
28    
29     warn "?? crc ",substr($hex,-4);
30     my $crc = pack('H4', substr($hex,-4));
31    
32     warn "input $_ => ",dump( $bytes, $crc );
33    
34     foreach my $o ( 0,1,2,3 ) {
35     my $b = substr( $bytes, $o );
36    
37     foreach my $poly ( 0x0000 .. 0xffff ) {
38    
39     print "## poly $poly\n" if $poly % 1000 == 0;
40    
41     my $ctx = Digest::CRC->new(
42     #width=>16, init=>0xffff, xorout=>0, refout=>1, poly=>0x1021, refin=>0 # ccitt
43     #width=>16, init=>0, xorout=>0, refout=>1, poly=>0x8005, refin=>1 # crc16
44     #0x8408,
45     #0xa001,
46     width=>16, init=>0, xorout=>0, refout=>1, poly=>$poly,refin=>1
47     );
48     $ctx->add( $b );
49     my $try = $ctx->digest;
50    
51     my $v = pack('v*', $try);
52     my $n = pack('n*', $try);
53    
54     if ( $v eq $crc or $n eq $crc ) {
55     warn "HIT: $o poly: $poly ",dump( $crc, $v, $n );
56     push @poly, $poly;
57     }
58     }
59     }
60     }
61    
62     print "FOUND poly = ", dump( @poly );

Properties

Name Value
svn:executable *

  ViewVC Help
Powered by ViewVC 1.1.26