Subject: RE: iSCSI: 12-97 Bit Rule

From: "THALER,PAT (A-Roseville,ex1)" <[email-masked]>
Date: Thu, 13 Jun 2002 18:19:35 -0600

Bill,

One could say:
- Computing the CRC over any segment (data or header) extended to include
the CRC built using the generator 0x11edc6f41 will get always the value
0x1c2d19ed as the result before complementing. This value is given here in its polynomial form - i.e. not mapped as the digest word.

or 
- Computing the CRC over any segment (data or header) extended to include
the CRC built using the generator 0x11edc6f41 will get always the value
0xe3d23612 as its final CRC. This value is given here in its polynomial
form - i.e. not mapped as the digest word.

or 
- Performing the formation of the plynomial M(x) over any segment (data or header) extended to include the digest, complementing the most significant 32 bits, multiplying by x^32 then dividing by G(x) will always produce the remainder polynomial 0x1c2d19ed. This value is in its polynomial form - not complemented and not mapped into the digest word.

or
- Computing the CRC over any segment (data or header) extended to include
the CRC built using the generator 0x11edc6f41 will get always produce 
R(x) = 0x1c2d19ed. This value is in its polynomial form - not complemented and not mapped into the digest word.

I like the last one best because it uses the term that relates the result to where it will appear in the process above.

Pat

-----Original Message-----
From: Bill Studenmund [mailto:[email-masked]]
Sent: Thursday, June 13, 2002 2:36 PM
To: Julian Satran
Cc: [email-masked]; [email-masked]; [email-masked]
Subject: Re: iSCSI: 12-97 Bit Rule

On Thu, 13 Jun 2002, Julian Satran wrote:

One minor question.

> I took out completely the bit rule.
> I reformulated the CRC text as:
>
> The CRC MUST be calculated by a method that produces the same results as
> the following process:
>
>  - The PDU bits are considered as the coefficients of a polyno-mial M(x) of
> degree n-1; bit 7 of the lowest numbered byte is considered the most
> significant bit (x^n-1), followed by bit 6 of the lowest numbered byte and
> through bit 0 of the high-est numbered byte (x^0).
>
> - The most significant 32 bits are complemented.
>
> - The polynomial is multiplied by x^32 then divided by G(x). The generator
> polynomial produces a remainder R(x) of degree <= 31.
>
> - The coefficients of R(x) are considered a 32 bit sequence.
>
> - The bit sequence is complemented and the result is the CRC.

Call the above step 5.

> - the CRC bits are mapped into the digest word - the x^31 coef-ficient in
> bit 7 of the lowest numbered byte of the digest continuing to through the
> byte up to the x^24 coefficient in bit 0 of the lowest numbered byte,
> continuing with the x^23 coefficient in bit 7 of next byte through x^0 in
> bit 0 of the highest numbered byte.
>
> - Computing the CRC over any segment (data or header) extended to include
> the CRC built using the generator 0x11edc6f41 will get always the value
> 0x1c2d19ed as its final CRC. This value is given here in its polynomial
> form - i.e. not mapped as the digest word

About the use of "final CRC" with respect to 0x1c2d19ed. Step 5 says the
"CRC" is after the complementation, but my experiments indicate that
0x1c2d19ed is the uncomplimented result, and that the complimented result
would be 0xe3d2e612. Thus 0xe3d2e612 would be the "CRC."

> I hope you will find it less confusing

I'm not sure what to do. The thoughts which come to my mind take up space.
The simplest would be to mention what coefficents one uses in well-known
crc packages. A more complex one would be to include source code, as the
sctp crc draft did.

Take care,

Bill

---

From: Bill Studenmund <[email-masked]>
Date: Thu, 13 Jun 2002 18:21:04 -0700 (PDT)

> I like the last one best because it uses the term that relates the result to where it will appear in the process above.

Sounds good. That's what we used to have, but with R(x) now specific.

Take care,

Bill