⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bch_hm.c

📁 M-System DOC(Disk on a Chip) Flash芯片的诊断工具, 可以从Flash芯片中获取特定的数据信息, 用于判断芯片当前的状态.
💻 C
📖 第 1 页 / 共 5 页
字号:
/***********************************************************************************/
/*                        M-Systems Confidential                                   */
/*           Copyright (C) M-Systems Flash Disk Pioneers Ltd. 1995-2003            */
/*                         All Rights Reserved                                     */
/***********************************************************************************/
/*                            NOTICE OF M-SYSTEMS OEM                              */
/*                           SOFTWARE LICENSE AGREEMENT                            */
/*                                                                                 */
/*      THE USE OF THIS SOFTWARE IS GOVERNED BY A SEPARATE LICENSE                 */
/*      AGREEMENT BETWEEN THE OEM AND M-SYSTEMS. REFER TO THAT AGREEMENT           */
/*      FOR THE SPECIFIC TERMS AND CONDITIONS OF USE,                              */
/*      OR CONTACT M-SYSTEMS FOR LICENSE ASSISTANCE:                               */
/*      E-MAIL = info@m-sys.com                                                    */
/***********************************************************************************/

/*
 * $Log:   V:/PVCSDB/DiskOnChip/archives/general storage/TrueFFS/src/mtd/bch_hm.c-arc  $
 * 
 *    Rev 1.4   Sep 01 2003 19:10:02   oris
 * - Added 'const' prefix to static tables.
 * 
 *    Rev 1.3   Jun 19 2003 13:26:56   OriS
 * Removed warnings
 * 
 *    Rev 1.2   Jun 12 2003 15:28:04   roneng
 * Add Hamming syndrom calculation routine
 * 
 *    Rev 1.1   May 18 2003 13:29:24   OriS
 * Added the static prefix to all static tables.
 * 
 *    Rev 1.0   Apr 09 2003 12:15:54   OriS
 * Initial revision.
 * 
 */

#include "bch_hm.h"

/*****************************************************************************/
/* ECC acceleration tables                                                   */ 
/*                                                                           */       
/* The following constant tables acclerate the perfomances of several        */
/* algoritms in the ECC software                                             */
/*                                                                           */
/* Algorithms and programming were written by :                              */
/*                                                                           */
/* Itai Dror                                                                 */
/*                                                                           */
/* Fortress Security Division, Omer                                          */
/* M - Systems, Flash Disk Pioneers                                          */
/* email: itaid@m-sys.com                                                    */
/*                                                                           */
/*      version 1.0, Feb. 2, 2002                                            */	
/*                                                                           */
/* version 1.02, Dec 10, 2002                                                */
/* (Disk On Chip naming convention compliance)                               */
/*                                                                           */
/* All finite field elements are stored and treated in big endian format     */
/*                                                                           */
/* For example:                                                              */
/*                                                                           */
/* 0x3088 represents: 1 + X + X ^ 6 + X ^ 10 + X ^ 14                        */
/*                                                                           */ 
/* Coefficient of X ^ 14 is an hidden bit                                    */
/*                                                                           */
/* ------------------------------------------------------------------------- */
/* 255 Multiplications of p(X), first minimal polynomial                     */
static const FLWord wFi1Table[256] = 
{
0x0000,0x0670,0x0CE0,0x0A90,0x19C0,0x1FB0,0x1520,0x1350,
0x3380,0x35F0,0x3F60,0x3910,0x2A40,0x2C30,0x26A0,0x20D0,
0x0611,0x0061,0x0AF1,0x0C81,0x1FD1,0x19A1,0x1331,0x1541,
0x3591,0x33E1,0x3971,0x3F01,0x2C51,0x2A21,0x20B1,0x26C1,
0x0C22,0x0A52,0x00C2,0x06B2,0x15E2,0x1392,0x1902,0x1F72,
0x3FA2,0x39D2,0x3342,0x3532,0x2662,0x2012,0x2A82,0x2CF2,
0x0A33,0x0C43,0x06D3,0x00A3,0x13F3,0x1583,0x1F13,0x1963,
0x39B3,0x3FC3,0x3553,0x3323,0x2073,0x2603,0x2C93,0x2AE3,
0x1844,0x1E34,0x14A4,0x12D4,0x0184,0x07F4,0x0D64,0x0B14,
0x2BC4,0x2DB4,0x2724,0x2154,0x3204,0x3474,0x3EE4,0x3894,
0x1E55,0x1825,0x12B5,0x14C5,0x0795,0x01E5,0x0B75,0x0D05,
0x2DD5,0x2BA5,0x2135,0x2745,0x3415,0x3265,0x38F5,0x3E85,
0x1466,0x1216,0x1886,0x1EF6,0x0DA6,0x0BD6,0x0146,0x0736,
0x27E6,0x2196,0x2B06,0x2D76,0x3E26,0x3856,0x32C6,0x34B6,
0x1277,0x1407,0x1E97,0x18E7,0x0BB7,0x0DC7,0x0757,0x0127,
0x21F7,0x2787,0x2D17,0x2B67,0x3837,0x3E47,0x34D7,0x32A7,
0x3088,0x36F8,0x3C68,0x3A18,0x2948,0x2F38,0x25A8,0x23D8,
0x0308,0x0578,0x0FE8,0x0998,0x1AC8,0x1CB8,0x1628,0x1058,
0x3699,0x30E9,0x3A79,0x3C09,0x2F59,0x2929,0x23B9,0x25C9,
0x0519,0x0369,0x09F9,0x0F89,0x1CD9,0x1AA9,0x1039,0x1649,
0x3CAA,0x3ADA,0x304A,0x363A,0x256A,0x231A,0x298A,0x2FFA,
0x0F2A,0x095A,0x03CA,0x05BA,0x16EA,0x109A,0x1A0A,0x1C7A,
0x3ABB,0x3CCB,0x365B,0x302B,0x237B,0x250B,0x2F9B,0x29EB,
0x093B,0x0F4B,0x05DB,0x03AB,0x10FB,0x168B,0x1C1B,0x1A6B,
0x28CC,0x2EBC,0x242C,0x225C,0x310C,0x377C,0x3DEC,0x3B9C,
0x1B4C,0x1D3C,0x17AC,0x11DC,0x028C,0x04FC,0x0E6C,0x081C,
0x2EDD,0x28AD,0x223D,0x244D,0x371D,0x316D,0x3BFD,0x3D8D,
0x1D5D,0x1B2D,0x11BD,0x17CD,0x049D,0x02ED,0x087D,0x0E0D,
0x24EE,0x229E,0x280E,0x2E7E,0x3D2E,0x3B5E,0x31CE,0x37BE,
0x176E,0x111E,0x1B8E,0x1DFE,0x0EAE,0x08DE,0x024E,0x043E,
0x22FF,0x248F,0x2E1F,0x286F,0x3B3F,0x3D4F,0x37DF,0x31AF,
0x117F,0x170F,0x1D9F,0x1BEF,0x08BF,0x0ECF,0x045F,0x022F
} ;
/* 255 Multiplications of third minimal polynomial */
static const FLWord wFi2Table[256] = {
0x0000,0x1CA3,0x3946,0x25E5,0x01CD,0x1D6E,0x388B,0x2428,
0x039A,0x1F39,0x3ADC,0x267F,0x0257,0x1EF4,0x3B11,0x27B2,
0x0734,0x1B97,0x3E72,0x22D1,0x06F9,0x1A5A,0x3FBF,0x231C,
0x04AE,0x180D,0x3DE8,0x214B,0x0563,0x19C0,0x3C25,0x2086,
0x0E68,0x12CB,0x372E,0x2B8D,0x0FA5,0x1306,0x36E3,0x2A40,
0x0DF2,0x1151,0x34B4,0x2817,0x0C3F,0x109C,0x3579,0x29DA,
0x095C,0x15FF,0x301A,0x2CB9,0x0891,0x1432,0x31D7,0x2D74,
0x0AC6,0x1665,0x3380,0x2F23,0x0B0B,0x17A8,0x324D,0x2EEE,
0x1CD0,0x0073,0x2596,0x3935,0x1D1D,0x01BE,0x245B,0x38F8,
0x1F4A,0x03E9,0x260C,0x3AAF,0x1E87,0x0224,0x27C1,0x3B62,
0x1BE4,0x0747,0x22A2,0x3E01,0x1A29,0x068A,0x236F,0x3FCC,
0x187E,0x04DD,0x2138,0x3D9B,0x19B3,0x0510,0x20F5,0x3C56,
0x12B8,0x0E1B,0x2BFE,0x375D,0x1375,0x0FD6,0x2A33,0x3690,
0x1122,0x0D81,0x2864,0x34C7,0x10EF,0x0C4C,0x29A9,0x350A,
0x158C,0x092F,0x2CCA,0x3069,0x1441,0x08E2,0x2D07,0x31A4,
0x1616,0x0AB5,0x2F50,0x33F3,0x17DB,0x0B78,0x2E9D,0x323E,
0x39A0,0x2503,0x00E6,0x1C45,0x386D,0x24CE,0x012B,0x1D88,
0x3A3A,0x2699,0x037C,0x1FDF,0x3BF7,0x2754,0x02B1,0x1E12,
0x3E94,0x2237,0x07D2,0x1B71,0x3F59,0x23FA,0x061F,0x1ABC,
0x3D0E,0x21AD,0x0448,0x18EB,0x3CC3,0x2060,0x0585,0x1926,
0x37C8,0x2B6B,0x0E8E,0x122D,0x3605,0x2AA6,0x0F43,0x13E0,
0x3452,0x28F1,0x0D14,0x11B7,0x359F,0x293C,0x0CD9,0x107A,
0x30FC,0x2C5F,0x09BA,0x1519,0x3131,0x2D92,0x0877,0x14D4,
0x3366,0x2FC5,0x0A20,0x1683,0x32AB,0x2E08,0x0BED,0x174E,
0x2570,0x39D3,0x1C36,0x0095,0x24BD,0x381E,0x1DFB,0x0158,
0x26EA,0x3A49,0x1FAC,0x030F,0x2727,0x3B84,0x1E61,0x02C2,
0x2244,0x3EE7,0x1B02,0x07A1,0x2389,0x3F2A,0x1ACF,0x066C,
0x21DE,0x3D7D,0x1898,0x043B,0x2013,0x3CB0,0x1955,0x05F6,
0x2B18,0x37BB,0x125E,0x0EFD,0x2AD5,0x3676,0x1393,0x0F30,
0x2882,0x3421,0x11C4,0x0D67,0x294F,0x35EC,0x1009,0x0CAA,
0x2C2C,0x308F,0x156A,0x09C9,0x2DE1,0x3142,0x14A7,0x0804,
0x2FB6,0x3315,0x16F0,0x0A53,0x2E7B,0x32D8,0x173D,0x0B9E
} ;
/* 255 Multiplications of 5'th minimal polynomial */
static const FLWord wFi3Table[256] = {
0x0000,0x3DD8,0x1601,0x2BD9,0x2C02,0x11DA,0x3A03,0x07DB,
0x35B5,0x086D,0x23B4,0x1E6C,0x19B7,0x246F,0x0FB6,0x326E,
0x06DB,0x3B03,0x10DA,0x2D02,0x2AD9,0x1701,0x3CD8,0x0100,
0x336E,0x0EB6,0x256F,0x18B7,0x1F6C,0x22B4,0x096D,0x34B5,
0x0DB6,0x306E,0x1BB7,0x266F,0x21B4,0x1C6C,0x37B5,0x0A6D,
0x3803,0x05DB,0x2E02,0x13DA,0x1401,0x29D9,0x0200,0x3FD8,
0x0B6D,0x36B5,0x1D6C,0x20B4,0x276F,0x1AB7,0x316E,0x0CB6,
0x3ED8,0x0300,0x28D9,0x1501,0x12DA,0x2F02,0x04DB,0x3903,
0x1B6C,0x26B4,0x0D6D,0x30B5,0x376E,0x0AB6,0x216F,0x1CB7,
0x2ED9,0x1301,0x38D8,0x0500,0x02DB,0x3F03,0x14DA,0x2902,
0x1DB7,0x206F,0x0BB6,0x366E,0x31B5,0x0C6D,0x27B4,0x1A6C,
0x2802,0x15DA,0x3E03,0x03DB,0x0400,0x39D8,0x1201,0x2FD9,
0x16DA,0x2B02,0x00DB,0x3D03,0x3AD8,0x0700,0x2CD9,0x1101,
0x236F,0x1EB7,0x356E,0x08B6,0x0F6D,0x32B5,0x196C,0x24B4,
0x1001,0x2DD9,0x0600,0x3BD8,0x3C03,0x01DB,0x2A02,0x17DA,
0x25B4,0x186C,0x33B5,0x0E6D,0x09B6,0x346E,0x1FB7,0x226F,
0x36D8,0x0B00,0x20D9,0x1D01,0x1ADA,0x2702,0x0CDB,0x3103,
0x036D,0x3EB5,0x156C,0x28B4,0x2F6F,0x12B7,0x396E,0x04B6,
0x3003,0x0DDB,0x2602,0x1BDA,0x1C01,0x21D9,0x0A00,0x37D8,
0x05B6,0x386E,0x13B7,0x2E6F,0x29B4,0x146C,0x3FB5,0x026D,
0x3B6E,0x06B6,0x2D6F,0x10B7,0x176C,0x2AB4,0x016D,0x3CB5,
0x0EDB,0x3303,0x18DA,0x2502,0x22D9,0x1F01,0x34D8,0x0900,
0x3DB5,0x006D,0x2BB4,0x166C,0x11B7,0x2C6F,0x07B6,0x3A6E,
0x0800,0x35D8,0x1E01,0x23D9,0x2402,0x19DA,0x3203,0x0FDB,
0x2DB4,0x106C,0x3BB5,0x066D,0x01B6,0x3C6E,0x17B7,0x2A6F,
0x1801,0x25D9,0x0E00,0x33D8,0x3403,0x09DB,0x2202,0x1FDA,
0x2B6F,0x16B7,0x3D6E,0x00B6,0x076D,0x3AB5,0x116C,0x2CB4,
0x1EDA,0x2302,0x08DB,0x3503,0x32D8,0x0F00,0x24D9,0x1901,
0x2002,0x1DDA,0x3603,0x0BDB,0x0C00,0x31D8,0x1A01,0x27D9,
0x15B7,0x286F,0x03B6,0x3E6E,0x39B5,0x046D,0x2FB4,0x126C,
0x26D9,0x1B01,0x30D8,0x0D00,0x0ADB,0x3703,0x1CDA,0x2102,
0x136C,0x2EB4,0x056D,0x38B5,0x3F6E,0x02B6,0x296F,0x14B7
} ;
/* 255 Multiplications of 7'th minimal polynomial */
static const FLWord wFi4Table[256] = {
0x0000,0x2E28,0x1BB5,0x359D,0x376A,0x1942,0x2CDF,0x02F7,
0x2931,0x0719,0x3284,0x1CAC,0x1E5B,0x3073,0x05EE,0x2BC6,
0x1587,0x3BAF,0x0E32,0x201A,0x22ED,0x0CC5,0x3958,0x1770,
0x3CB6,0x129E,0x2703,0x092B,0x0BDC,0x25F4,0x1069,0x3E41,
0x2B0E,0x0526,0x30BB,0x1E93,0x1C64,0x324C,0x07D1,0x29F9,
0x023F,0x2C17,0x198A,0x37A2,0x3555,0x1B7D,0x2EE0,0x00C8,
0x3E89,0x10A1,0x253C,0x0B14,0x09E3,0x27CB,0x1256,0x3C7E,
0x17B8,0x3990,0x0C0D,0x2225,0x20D2,0x0EFA,0x3B67,0x154F,
0x11F9,0x3FD1,0x0A4C,0x2464,0x2693,0x08BB,0x3D26,0x130E,
0x38C8,0x16E0,0x237D,0x0D55,0x0FA2,0x218A,0x1417,0x3A3F,
0x047E,0x2A56,0x1FCB,0x31E3,0x3314,0x1D3C,0x28A1,0x0689,
0x2D4F,0x0367,0x36FA,0x18D2,0x1A25,0x340D,0x0190,0x2FB8,
0x3AF7,0x14DF,0x2142,0x0F6A,0x0D9D,0x23B5,0x1628,0x3800,
0x13C6,0x3DEE,0x0873,0x265B,0x24AC,0x0A84,0x3F19,0x1131,
0x2F70,0x0158,0x34C5,0x1AED,0x181A,0x3632,0x03AF,0x2D87,
0x0641,0x2869,0x1DF4,0x33DC,0x312B,0x1F03,0x2A9E,0x04B6,
0x23F2,0x0DDA,0x3847,0x166F,0x1498,0x3AB0,0x0F2D,0x2105,
0x0AC3,0x24EB,0x1176,0x3F5E,0x3DA9,0x1381,0x261C,0x0834,
0x3675,0x185D,0x2DC0,0x03E8,0x011F,0x2F37,0x1AAA,0x3482,
0x1F44,0x316C,0x04F1,0x2AD9,0x282E,0x0606,0x339B,0x1DB3,
0x08FC,0x26D4,0x1349,0x3D61,0x3F96,0x11BE,0x2423,0x0A0B,
0x21CD,0x0FE5,0x3A78,0x1450,0x16A7,0x388F,0x0D12,0x233A,
0x1D7B,0x3353,0x06CE,0x28E6,0x2A11,0x0439,0x31A4,0x1F8C,
0x344A,0x1A62,0x2FFF,0x01D7,0x0320,0x2D08,0x1895,0x36BD,
0x320B,0x1C23,0x29BE,0x0796,0x0561,0x2B49,0x1ED4,0x30FC,
0x1B3A,0x3512,0x008F,0x2EA7,0x2C50,0x0278,0x37E5,0x19CD,
0x278C,0x09A4,0x3C39,0x1211,0x10E6,0x3ECE,0xB53,0x257B,
0x0EBD,0x2095,0x1508,0x3B20,0x39D7,0x17FF,0x2262,0x0C4A,
0x1905,0x372D,0x02B0,0x2C98,0x2E6F,0x0047,0x35DA,0x1BF2,
0x3034,0x1E1C,0x2B81,0x05A9,0x075E,0x2976,0x1CEB,0x32C3,
0x0C82,0x22AA,0x1737,0x391F,0x3BE8,0x15C0,0x205D,0x0E75,
0x25B3,0x0B9B,0x3E06,0x102E,0x12D9,0x3CF1,0x096C,0x2744
} ;
/* ------------------------------------------------------------------------- */
/* Powers of alfa^3, alfa^5, alfa^7 */
static const FLWord wAlfa3[13] = {
0x0400,0x0080,0x0010,0x0002,0x1844,0x3380,0x0670,0x00CE,
0x28D5,0x39B0,0x0736,0x282A,0x1D41 
} ;

static const FLWord wAlfa5[13] = {
0x0100,0x0008,0x1844,0x0CE0,0x0067,0x39B0,0x3145,
0x3E28,0x19B5,0x0FE7,0x39CC,0x15A8,0x18E9
} ;

static const FLWord wAlfa7[13] = {
0x0040,0x3088,0x0670,0x24E2,0x3145,0x0F8A,0x1FCE,0x1CE6,
0x02B5,0x2B03,0x1576,0xE84,0x339D
} ;
/* ------------------------------------------------------------------------- */
/* Baby Step Giant Step tables                                               */
/* First Baby Step, Giant Step table                                         */
/* Algorithm is described in :                                               */
/* Alfred Menezes, Elliptic Curve Public Key Cryptosystems, Chapter 4.       */
/* and also in many other books.                                             */

static const FLWord wPowerTable1[256] = {
0x0001,0x0002,0x0004,0x0008,0x0010,0x0020,0x0040,0x0067,
0x0080,0x00CD,0x00CE,0x0100,0x0109,0x0115,0x013F,0x019A,
0x019C,0x0200,0x0212,0x022A,0x027E,0x02A7,0x02B5,0x0334,
0x0338,0x039B,0x03A1,0x03A3,0x03D7,0x0400,0x0424,0x0454,
0x04FB,0x04FC,0x054E,0x056A,0x05FF,0x0611,0x062B,0x0668,
0x0670,0x0736,0x0742,0x0746,0x0791,0x07AE,0x07C5,0x07CD,
0x0800,0x0848,0x0883,0x08A8,0x08BB,0x0925,0x09E3,0x09F6,
0x09F8,0x0A09,0x0A9C,0x0AAD,0x0ABB,0x0AD4,0x0AE5,0x0AF3,
0x0B79,0x0BFE,0x0C03,0x0C22,0x0C56,0x0CD0,0x0CE0,0x0D4D,
0x0D63,0x0E6C,0x0E73,0x0E84,0x0E8C,0x0ED5,0x0F22,0x0F3F,
0x0F5C,0x0F8A,0x0F9A,0x0FE7,0x1000,0x1090,0x1106,0x1150,
0x1176,0x124A,0x125D,0x1271,0x1289,0x139B,0x13C6,0x13EC,
0x13F0,0x1412,0x1415,0x14A3,0x14F9,0x1531,0x1538,0x155A,
0x1571,0x1576,0x15A8,0x15CA,0x15E6,0x1615,0x16F2,0x17B9,
0x17FC,0x1801,0x1806,0x1844,0x1877,0x18AC,0x18E9,0x19A0,
0x19B5,0x19B7,0x19C0,0x1A0D,0x1A9A,0x1AC6,0x1AEF,0x1AFD,
0x1B17,0x1BF1,0x1CD3,0x1CD8,0x1CE6,0x1D08,0x1D18,0x1D41,
0x1DAA,0x1DC1,0x1E29,0x1E44,0x1E7E,0x1EB8,0x1EC7,0x1EFB,
0x1F14,0x1F34,0x1FCE,0x2000,0x2120,0x220C,0x22A0,0x22EC,
0x2351,0x2451,0x2494,0x24BA,0x24C9,0x24E2,0x2509,0x2512,
0x2736,0x278C,0x27B3,0x27D8,0x27E0,0x2824,0x282A,0x2839,
0x2865,0x2883,0x28D5,0x2946,0x29B3,0x29F2,0x2A62,0x2A70,
0x2AB4,0x2AE2,0x2AEC,0x2B03,0x2B35,0x2B50,0x2B94,0x2BCC,
0x2C2A,0x2DE4,0x2E09,0x2E77,0x2EA1,0x2ED1,0x2F72,0x2F7D,
0x2FF8,0x3002,0x300C,0x3017,0x3088,0x30BB,0x30EE,0x3145,
0x3158,0x3159,0x3163,0x31D2,0x31DB,0x3277,0x32F5,0x3340,
0x336A,0x336E,0x3380,0x339D,0x341A,0x3479,0x34C9,0x34D5,
0x3534,0x358C,0x35D5,0x35DE,0x35F1,0x35FA,0x362E,0x3639,
0x3689,0x3717,0x377B,0x37B1,0x37E2,0x3945,0x39A6,0x39B0,
0x39CC,0x3A10,0x3A30,0x3A82,0x3AD9,0x3AF4,0x3B54,0x3B82,
0x3C52,0x3C53,0x3C88,0x3CB3,0x3CFC,0x3D03,0x3D70,0x3D8E,
0x3DF6,0x3DFF,0x3E28,0x3E68,0x3EE1,0x3F9C,0x3FEB,0x3FF5,
} ;

/* Second Baby Step, Giant Step table */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -