title: Difficulty reverse engineering CRC 16
body: <p>I have captured 3 packets that I think all use the same 16 bit CRC, but I can't find a common match. They are:
  1. DB97BD7F85C7
  2. DCC45CDFBF47
  3. DB5BF51FA66F</p>
  
  <p>Running reveng on all 3 produces no match. But I get a match for just 1 and 2, 1 and 3, and 2 and 3. I also have the SRP16 matches below, with similar results. I assume the numerous partial matches from SRP16 makes a great example of why <a href="http://www.zlib.net/crc_v3.txt" rel="nofollow">Ross Williams</a> and others say to NEVER make up your own poly unless you know what you're doing. I will post more if I make any progress.</p>
  
  <p>What am I missing?</p>
  
  <p>Here is what I tried:</p>
  
  <p>1, 2 and 3</p>
  
  <pre><code>&gt;reveng -w 16 -s DB97BD7F85C7 DCC45CDFBF47 DB5BF51FA66F
  reveng: no models found
  </code></pre>
  
  <p>1 and 2</p>
  
  <pre><code>&gt;reveng -w 16 -s DB97BD7F85C7 DCC45CDFBF47
  width=16  poly=0x1c4d  init=0x0820  refin=false  refout=false xorout=0x0000  check=0xe5a3  name=(none)
  width=16  poly=0x5313  init=0x0541  refin=false  refout=false  xorout=0x0000  check=0x16ee  name=(none)
  </code></pre>
  
  <p>width=16  poly=0xd84d  init=0xcbb0  refin=false  refout=false  xorout=0x0000  check=0xd81f  name=(none)</p>
  
  <p>1 and 3</p>
  
  <pre><code>&gt;reveng -w 16 -s DB97BD7F85C7 DB5BF51FA66F
  width=16  poly=0xcfdb  init=0x2152  refin=false  refout=false  xorout=0x0000  check=0x7c5f  name=(none)
  </code></pre>
  
  <p>2 and 3</p>
  
  <pre><code>&gt;reveng -w 16 -s DCC45CDFBF47 DB5BF51FA66F
  width=16  poly=0x6319  init=0xce07  refin=false  refout=false  xorout=0x0000  check=0x358f  name=(none)
  </code></pre>
  
  <p>For what its worth, I also ran an exhaustive search with SRP16. As you can see, SRP16 found several matches for 1 and 3, and 2 and 3 (it only searches for Data 1, then checks the other 2). These are the results:</p>
  
  <pre><code>===== Result parameter sets =====
  CRC=$c791  Poly=$0a1f  init=$51a7  xorout=$ffff  refin=false  refout=true 
   *** Third  data set verified
  CRC=$c791  Poly=$0a1f  init=$560a  xorout=$0000  refin=false  refout=true 
   *** Third  data set verified
  CRC=$91c7  Poly=$24ab  init=$4b77  xorout=$ffff  refin=true   refout=false
   *** Third  data set verified
  CRC=$91c7  Poly=$24ab  init=$f978  xorout=$0000  refin=true   refout=false
   *** Third  data set verified
  CRC=$91c7  Poly=$32c1  init=$58d2  xorout=$0000  refin=true   refout=false
   *** Third  data set verified
  CRC=$91c7  Poly=$32c1  init=$e604  xorout=$ffff  refin=true   refout=false
   *** Third  data set verified
  CRC=$91c7  Poly=$4078  init=$19b0  xorout=$ffff  refin=false  refout=false
   *** Second data set verified
  CRC=$91c7  Poly=$4078  init=$31bf  xorout=$ffff  refin=false  refout=false
   *** Second data set verified
  CRC=$91c7  Poly=$4078  init=$49ae  xorout=$ffff  refin=false  refout=false
   *** Second data set verified
  CRC=$91c7  Poly=$4078  init=$61a1  xorout=$ffff  refin=false  refout=false
   *** Second data set verified
  CRC=$91c7  Poly=$4078  init=$9183  xorout=$ffff  refin=false  refout=false
   *** Second data set verified
  CRC=$91c7  Poly=$4078  init=$b98c  xorout=$ffff  refin=false  refout=false
   *** Second data set verified
  CRC=$91c7  Poly=$4078  init=$c19d  xorout=$ffff  refin=false  refout=false
   *** Second data set verified
  CRC=$91c7  Poly=$4078  init=$e992  xorout=$ffff  refin=false  refout=false
   *** Second data set verified
  CRC=$91c7  Poly=$45cf  init=$12de  xorout=$ffff  refin=false  refout=false
   *** Second data set verified
  CRC=$91c7  Poly=$45cf  init=$78e7  xorout=$0000  refin=false  refout=false
   *** Second data set verified
  CRC=$91c7  Poly=$4928  init=$0e97  xorout=$ffff  refin=true   refout=false
   *** Third  data set verified
  CRC=$91c7  Poly=$4928  init=$27b2  xorout=$ffff  refin=true   refout=false
   *** Third  data set verified
  CRC=$91c7  Poly=$4928  init=$5cdd  xorout=$ffff  refin=true   refout=false
   *** Third  data set verified
  CRC=$91c7  Poly=$4928  init=$75f8  xorout=$ffff  refin=true   refout=false
   *** Third  data set verified
  CRC=$91c7  Poly=$4928  init=$8326  xorout=$ffff  refin=true   refout=false
   *** Third  data set verified
  CRC=$91c7  Poly=$4928  init=$aa03  xorout=$ffff  refin=true   refout=false
   *** Third  data set verified
  CRC=$91c7  Poly=$4928  init=$d16c  xorout=$ffff  refin=true   refout=false
   *** Third  data set verified
  CRC=$91c7  Poly=$4928  init=$f849  xorout=$ffff  refin=true   refout=false
   *** Third  data set verified
  CRC=$91c7  Poly=$5b2b  init=$d6b6  xorout=$ffff  refin=false  refout=false
   *** Third  data set verified
  CRC=$91c7  Poly=$5b2b  init=$fa7d  xorout=$0000  refin=false  refout=false
   *** Third  data set verified
  CRC=$91c7  Poly=$5ff8  init=$0056  xorout=$ffff  refin=false  refout=false
   *** Third  data set verified
  CRC=$91c7  Poly=$5ff8  init=$2ba9  xorout=$ffff  refin=false  refout=false
   *** Third  data set verified
  CRC=$91c7  Poly=$5ff8  init=$57a8  xorout=$ffff  refin=false  refout=false
   *** Third  data set verified
  CRC=$91c7  Poly=$5ff8  init=$7c57  xorout=$ffff  refin=false  refout=false
   *** Third  data set verified
  CRC=$91c7  Poly=$5ff8  init=$8455  xorout=$ffff  refin=false  refout=false
   *** Third  data set verified
  CRC=$91c7  Poly=$5ff8  init=$afaa  xorout=$ffff  refin=false  refout=false
   *** Third  data set verified
  CRC=$91c7  Poly=$5ff8  init=$d3ab  xorout=$ffff  refin=false  refout=false
   *** Third  data set verified
  CRC=$91c7  Poly=$5ff8  init=$f854  xorout=$ffff  refin=false  refout=false
   *** Third  data set verified
  CRC=$c791  Poly=$701f  init=$c9e9  xorout=$0000  refin=false  refout=true 
   *** Second data set verified
  CRC=$c791  Poly=$701f  init=$fa7c  xorout=$ffff  refin=false  refout=true 
   *** Second data set verified
  CRC=$c791  Poly=$723b  init=$4239  xorout=$ffff  refin=false  refout=false
   *** Third  data set verified
  CRC=$c791  Poly=$723b  init=$da97  xorout=$0000  refin=false  refout=false
   *** Third  data set verified
  CRC=$91c7  Poly=$7296  init=$6f03  xorout=$ffff  refin=true   refout=false
   *** Third  data set verified
  CRC=$91c7  Poly=$7296  init=$d648  xorout=$ffff  refin=true   refout=false
   *** Third  data set verified
  CRC=$91c7  Poly=$7598  init=$1faf  xorout=$ffff  refin=false  refout=false
   *** Third  data set verified
  CRC=$91c7  Poly=$7598  init=$311c  xorout=$ffff  refin=false  refout=false
   *** Third  data set verified
  CRC=$91c7  Poly=$7598  init=$42c9  xorout=$ffff  refin=false  refout=false
   *** Third  data set verified
  CRC=$91c7  Poly=$7598  init=$6c7a  xorout=$ffff  refin=false  refout=false
   *** Third  data set verified
  CRC=$91c7  Poly=$7598  init=$8bd0  xorout=$ffff  refin=false  refout=false
   *** Third  data set verified
  CRC=$91c7  Poly=$7598  init=$a563  xorout=$ffff  refin=false  refout=false
   *** Third  data set verified
  CRC=$91c7  Poly=$7598  init=$d6b6  xorout=$ffff  refin=false  refout=false
   *** Third  data set verified
  CRC=$91c7  Poly=$7598  init=$f805  xorout=$ffff  refin=false  refout=false
   *** Third  data set verified
  CRC=$91c7  Poly=$868a  init=$12de  xorout=$ffff  refin=false  refout=false
   *** Second data set verified
  CRC=$91c7  Poly=$868a  init=$d19b  xorout=$ffff  refin=false  refout=false
   *** Second data set verified
  CRC=$91c7  Poly=$9232  init=$1faf  xorout=$ffff  refin=false  refout=false
   *** Third  data set verified
  CRC=$91c7  Poly=$9232  init=$d6b6  xorout=$ffff  refin=false  refout=false
   *** Third  data set verified
  CRC=$91c7  Poly=$a4df  init=$0bee  xorout=$ffff  refin=true   refout=false
   *** Third  data set verified
  CRC=$91c7  Poly=$a4df  init=$1a23  xorout=$0000  refin=true   refout=false
   *** Third  data set verified
  CRC=$c791  Poly=$aa75  init=$16df  xorout=$ffff  refin=true   refout=true 
   *** Second data set verified
  CRC=$c791  Poly=$aa75  init=$c58b  xorout=$0000  refin=true   refout=true 
   *** Second data set verified
  CRC=$91c7  Poly=$c732  init=$4b77  xorout=$ffff  refin=true   refout=false
   *** Third  data set verified
  CRC=$91c7  Poly=$c732  init=$a8ee  xorout=$ffff  refin=true   refout=false
   *** Third  data set verified
  CRC=$91c7  Poly=$cbdd  init=$6f03  xorout=$ffff  refin=true   refout=false
   *** Third  data set verified
  CRC=$91c7  Poly=$cbdd  init=$8ec3  xorout=$0000  refin=true   refout=false
   *** Third  data set verified
  CRC=$91c7  Poly=$cf54  init=$311c  xorout=$ffff  refin=false  refout=false
   *** Third  data set verified
  CRC=$91c7  Poly=$cf54  init=$42c9  xorout=$ffff  refin=false  refout=false
   *** Third  data set verified
  CRC=$91c7  Poly=$cf54  init=$a563  xorout=$ffff  refin=false  refout=false
   *** Third  data set verified
  CRC=$91c7  Poly=$cf54  init=$d6b6  xorout=$ffff  refin=false  refout=false
   *** Third  data set verified
  CRC=$c791  Poly=$d143  init=$2b44  xorout=$ffff  refin=true   refout=true 
   *** Second data set verified
  CRC=$c791  Poly=$d143  init=$754a  xorout=$0000  refin=true   refout=true 
   *** Second data set verified
  CRC=$91c7  Poly=$e044  init=$19b0  xorout=$ffff  refin=false  refout=false
   *** Second data set verified
  CRC=$91c7  Poly=$e044  init=$61a1  xorout=$ffff  refin=false  refout=false
   *** Second data set verified
  CRC=$91c7  Poly=$e044  init=$9183  xorout=$ffff  refin=false  refout=false
   *** Second data set verified
  CRC=$91c7  Poly=$e044  init=$e992  xorout=$ffff  refin=false  refout=false
   *** Second data set verified
  CRC=$91c7  Poly=$ea2e  init=$1ec6  xorout=$ffff  refin=false  refout=true 
   *** Second data set verified
  CRC=$91c7  Poly=$ea2e  init=$ebd1  xorout=$ffff  refin=false  refout=true 
   *** Second data set verified
  CRC=$91c7  Poly=$edbc  init=$27b2  xorout=$ffff  refin=true   refout=false
   *** Third  data set verified
  CRC=$91c7  Poly=$edbc  init=$5cdd  xorout=$ffff  refin=true   refout=false
   *** Third  data set verified
  CRC=$91c7  Poly=$edbc  init=$aa03  xorout=$ffff  refin=true   refout=false
   *** Third  data set verified
  CRC=$91c7  Poly=$edbc  init=$d16c  xorout=$ffff  refin=true   refout=false
   *** Third  data set verified
  ===== done =====
  </code></pre>