SORT BY:

LIST ORDER
THREAD
AUTHOR
SUBJECT


SEARCH

IPS HOME


    [Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

    announcing paper on iSCSI CRC



    
    I would like to direct those who are interested in learning more details
    about the iSCSI CRC process to a paper Luben Tuikov and I wrote and which
    Julian was kind enough to post on his site at
    http://www.haifa.il.ibm.com/satran/ips/Vince-Luben-crc32c.pdf.  We intended
    the paper to be an informational Internet Draft but got lazy when confronted
    with the daunting task of formatting the equations using only ASCII as
    required by author guidelines.  I summarize some results from the paper
    below.
    
    Notation
    --------
    
    The D algorithm divides the message polynomial by the generator polynomial
    G(x) (33 bits). It performs the classical long division algorithm.  The
    message polynomial must be multiplied by x^32 prior to application of the D
    algorithm. 
    
    The SMD algorithm performs simultaneous multiplication by x^32 and division
    by G(x); so the message polynomial need not be multiplied by x^32 prior to
    application of the SMD algorithm. That is, the SMD algorithm works on
    unmodified data to produce results identical to the D algorithm.
    See point 5 below.
    
    The paper derives SMD from D, such that one could implement SMD and get
    results identical to D, without any data manipulation.
    
    The SMD algorithm is also shown in pseudo-programming language.
    See point 5 below.
    
    The origin of the magic constant 0x1c2d19ed is also shown.
    
    Results
    -------
    
    The following are equivalent:
    
    Using the D algorithm:
    
    1. Initializing CRC register to zeroes. Prefixing the data by 0x2a26f826,
    multiplying the data polynomial by x^32 and then applying the D algorithm.
    
    2. Initializing CRC register to zeroes. XOR-ing the 32 most significant data
    bits with 0xFFFFFFFF and multiplying the data polynomial by x^32 and then
    applying the D algorithm.
    
    3. Initializing CRC register to 0x2a26f826. Multiplying the data polynomial
    by x^32 and then applying the D algorithm.
    
    Using the SMD algorithm:
    
    4. Initializing CRC register to zeroes. Prefixing the data with 0x2a26f826
    and applying the SMD algorithm.
    
    5. Initializing CRC register to 0xFFFFFFFF and applying the SMD algorithm.
    
    6. Initializing CRC register to zeroes. XOR-ing the 32 most significant data
    bits with 0xFFFFFFFF and applying the SMD algorithm.
    
    1, 2 and 5 are directly shown in the paper, as 5 was derived
    from 2, and 1 from 2. The equivalence of 3, 4 and 6 is implicitly shown, but
    clearly follows from the definitions used in the paper.
    
    Initialization of the CRC register in 1, 2 and 5 is implicit (the D
    algorithm initializes the register to zero and the SMD algorithm initializes
    the register to 0xFFFFFFFF).
    
    Initialization of the CRC register in 3, 4 and 6 is explicit (an extra
    step).
    
    Vince Cavanna
    Agilent Technologies
    
    
    


Home

Last updated: Sun Feb 24 13:18:12 2002
8873 messages in chronological order