crypt_aes.c.svn-base

来自「SumatraPDF是一款小型开源的pdf阅读工具。虽然玲珑小巧(只有800多K」· SVN-BASE 代码 · 共 937 行 · 第 1/3 页

SVN-BASE
937
字号
    0x4fe5d7fcUL, 0xc52acbd7UL, 0x26354480UL, 0xb562a38fUL,    0xdeb15a49UL, 0x25ba1b67UL, 0x45ea0e98UL, 0x5dfec0e1UL,    0xc32f7502UL, 0x814cf012UL, 0x8d4697a3UL, 0x6bd3f9c6UL,    0x038f5fe7UL, 0x15929c95UL, 0xbf6d7aebUL, 0x955259daUL,    0xd4be832dUL, 0x587421d3UL, 0x49e06929UL, 0x8ec9c844UL,    0x75c2896aUL, 0xf48e7978UL, 0x99583e6bUL, 0x27b971ddUL,    0xbee14fb6UL, 0xf088ad17UL, 0xc920ac66UL, 0x7dce3ab4UL,    0x63df4a18UL, 0xe51a3182UL, 0x97513360UL, 0x62537f45UL,    0xb16477e0UL, 0xbb6bae84UL, 0xfe81a01cUL, 0xf9082b94UL,    0x70486858UL, 0x8f45fd19UL, 0x94de6c87UL, 0x527bf8b7UL,    0xab73d323UL, 0x724b02e2UL, 0xe31f8f57UL, 0x6655ab2aUL,    0xb2eb2807UL, 0x2fb5c203UL, 0x86c57b9aUL, 0xd33708a5UL,    0x302887f2UL, 0x23bfa5b2UL, 0x02036abaUL, 0xed16825cUL,    0x8acf1c2bUL, 0xa779b492UL, 0xf307f2f0UL, 0x4e69e2a1UL,    0x65daf4cdUL, 0x0605bed5UL, 0xd134621fUL, 0xc4a6fe8aUL,    0x342e539dUL, 0xa2f355a0UL, 0x058ae132UL, 0xa4f6eb75UL,    0x0b83ec39UL, 0x4060efaaUL, 0x5e719f06UL, 0xbd6e1051UL,    0x3e218af9UL, 0x96dd063dUL, 0xdd3e05aeUL, 0x4de6bd46UL,    0x91548db5UL, 0x71c45d05UL, 0x0406d46fUL, 0x605015ffUL,    0x1998fb24UL, 0xd6bde997UL, 0x894043ccUL, 0x67d99e77UL,    0xb0e842bdUL, 0x07898b88UL, 0xe7195b38UL, 0x79c8eedbUL,    0xa17c0a47UL, 0x7c420fe9UL, 0xf8841ec9UL, 0x00000000UL,    0x09808683UL, 0x322bed48UL, 0x1e1170acUL, 0x6c5a724eUL,    0xfd0efffbUL, 0x0f853856UL, 0x3daed51eUL, 0x362d3927UL,    0x0a0fd964UL, 0x685ca621UL, 0x9b5b54d1UL, 0x24362e3aUL,    0x0c0a67b1UL, 0x9357e70fUL, 0xb4ee96d2UL, 0x1b9b919eUL,    0x80c0c54fUL, 0x61dc20a2UL, 0x5a774b69UL, 0x1c121a16UL,    0xe293ba0aUL, 0xc0a02ae5UL, 0x3c22e043UL, 0x121b171dUL,    0x0e090d0bUL, 0xf28bc7adUL, 0x2db6a8b9UL, 0x141ea9c8UL,    0x57f11985UL, 0xaf75074cUL, 0xee99ddbbUL, 0xa37f60fdUL,    0xf701269fUL, 0x5c72f5bcUL, 0x44663bc5UL, 0x5bfb7e34UL,    0x8b432976UL, 0xcb23c6dcUL, 0xb6edfc68UL, 0xb8e4f163UL,    0xd731dccaUL, 0x42638510UL, 0x13972240UL, 0x84c61120UL,    0x854a247dUL, 0xd2bb3df8UL, 0xaef93211UL, 0xc729a16dUL,    0x1d9e2f4bUL, 0xdcb230f3UL, 0x0d8652ecUL, 0x77c1e3d0UL,    0x2bb3166cUL, 0xa970b999UL, 0x119448faUL, 0x47e96422UL,    0xa8fc8cc4UL, 0xa0f03f1aUL, 0x567d2cd8UL, 0x223390efUL,    0x87494ec7UL, 0xd938d1c1UL, 0x8ccaa2feUL, 0x98d40b36UL,    0xa6f581cfUL, 0xa57ade28UL, 0xdab78e26UL, 0x3fadbfa4UL,    0x2c3a9de4UL, 0x5078920dUL, 0x6a5fcc9bUL, 0x547e4662UL,    0xf68d13c2UL, 0x90d8b8e8UL, 0x2e39f75eUL, 0x82c3aff5UL,    0x9f5d80beUL, 0x69d0937cUL, 0x6fd52da9UL, 0xcf2512b3UL,    0xc8ac993bUL, 0x10187da7UL, 0xe89c636eUL, 0xdb3bbb7bUL,    0xcd267809UL, 0x6e5918f4UL, 0xec9ab701UL, 0x834f9aa8UL,    0xe6956e65UL, 0xaaffe67eUL, 0x21bccf08UL, 0xef15e8e6UL,    0xbae79bd9UL, 0x4a6f36ceUL, 0xea9f09d4UL, 0x29b07cd6UL,    0x31a4b2afUL, 0x2a3f2331UL, 0xc6a59430UL, 0x35a266c0UL,    0x744ebc37UL, 0xfc82caa6UL, 0xe090d0b0UL, 0x33a7d815UL,    0xf104984aUL, 0x41ecdaf7UL, 0x7fcd500eUL, 0x1791f62fUL,    0x764dd68dUL, 0x43efb04dUL, 0xccaa4d54UL, 0xe49604dfUL,    0x9ed1b5e3UL, 0x4c6a881bUL, 0xc12c1fb8UL, 0x4665517fUL,    0x9d5eea04UL, 0x018c355dUL, 0xfa877473UL, 0xfb0b412eUL,    0xb3671d5aUL, 0x92dbd252UL, 0xe9105633UL, 0x6dd64713UL,    0x9ad7618cUL, 0x37a10c7aUL, 0x59f8148eUL, 0xeb133c89UL,    0xcea927eeUL, 0xb761c935UL, 0xe11ce5edUL, 0x7a47b13cUL,    0x9cd2df59UL, 0x55f2733fUL, 0x1814ce79UL, 0x73c737bfUL,    0x53f7cdeaUL, 0x5ffdaa5bUL, 0xdf3d6f14UL, 0x7844db86UL,    0xcaaff381UL, 0xb968c43eUL, 0x3824342cUL, 0xc2a3405fUL,    0x161dc372UL, 0xbce2250cUL, 0x283c498bUL, 0xff0d9541UL,    0x39a80171UL, 0x080cb3deUL, 0xd8b4e49cUL, 0x6456c190UL,    0x7bcb8461UL, 0xd532b670UL, 0x486c5c74UL, 0xd0b85742UL,};static const ulong32 Td4[256] = {    0x52525252UL, 0x09090909UL, 0x6a6a6a6aUL, 0xd5d5d5d5UL,    0x30303030UL, 0x36363636UL, 0xa5a5a5a5UL, 0x38383838UL,    0xbfbfbfbfUL, 0x40404040UL, 0xa3a3a3a3UL, 0x9e9e9e9eUL,    0x81818181UL, 0xf3f3f3f3UL, 0xd7d7d7d7UL, 0xfbfbfbfbUL,    0x7c7c7c7cUL, 0xe3e3e3e3UL, 0x39393939UL, 0x82828282UL,    0x9b9b9b9bUL, 0x2f2f2f2fUL, 0xffffffffUL, 0x87878787UL,    0x34343434UL, 0x8e8e8e8eUL, 0x43434343UL, 0x44444444UL,    0xc4c4c4c4UL, 0xdedededeUL, 0xe9e9e9e9UL, 0xcbcbcbcbUL,    0x54545454UL, 0x7b7b7b7bUL, 0x94949494UL, 0x32323232UL,    0xa6a6a6a6UL, 0xc2c2c2c2UL, 0x23232323UL, 0x3d3d3d3dUL,    0xeeeeeeeeUL, 0x4c4c4c4cUL, 0x95959595UL, 0x0b0b0b0bUL,    0x42424242UL, 0xfafafafaUL, 0xc3c3c3c3UL, 0x4e4e4e4eUL,    0x08080808UL, 0x2e2e2e2eUL, 0xa1a1a1a1UL, 0x66666666UL,    0x28282828UL, 0xd9d9d9d9UL, 0x24242424UL, 0xb2b2b2b2UL,    0x76767676UL, 0x5b5b5b5bUL, 0xa2a2a2a2UL, 0x49494949UL,    0x6d6d6d6dUL, 0x8b8b8b8bUL, 0xd1d1d1d1UL, 0x25252525UL,    0x72727272UL, 0xf8f8f8f8UL, 0xf6f6f6f6UL, 0x64646464UL,    0x86868686UL, 0x68686868UL, 0x98989898UL, 0x16161616UL,    0xd4d4d4d4UL, 0xa4a4a4a4UL, 0x5c5c5c5cUL, 0xccccccccUL,    0x5d5d5d5dUL, 0x65656565UL, 0xb6b6b6b6UL, 0x92929292UL,    0x6c6c6c6cUL, 0x70707070UL, 0x48484848UL, 0x50505050UL,    0xfdfdfdfdUL, 0xededededUL, 0xb9b9b9b9UL, 0xdadadadaUL,    0x5e5e5e5eUL, 0x15151515UL, 0x46464646UL, 0x57575757UL,    0xa7a7a7a7UL, 0x8d8d8d8dUL, 0x9d9d9d9dUL, 0x84848484UL,    0x90909090UL, 0xd8d8d8d8UL, 0xababababUL, 0x00000000UL,    0x8c8c8c8cUL, 0xbcbcbcbcUL, 0xd3d3d3d3UL, 0x0a0a0a0aUL,    0xf7f7f7f7UL, 0xe4e4e4e4UL, 0x58585858UL, 0x05050505UL,    0xb8b8b8b8UL, 0xb3b3b3b3UL, 0x45454545UL, 0x06060606UL,    0xd0d0d0d0UL, 0x2c2c2c2cUL, 0x1e1e1e1eUL, 0x8f8f8f8fUL,    0xcacacacaUL, 0x3f3f3f3fUL, 0x0f0f0f0fUL, 0x02020202UL,    0xc1c1c1c1UL, 0xafafafafUL, 0xbdbdbdbdUL, 0x03030303UL,    0x01010101UL, 0x13131313UL, 0x8a8a8a8aUL, 0x6b6b6b6bUL,    0x3a3a3a3aUL, 0x91919191UL, 0x11111111UL, 0x41414141UL,    0x4f4f4f4fUL, 0x67676767UL, 0xdcdcdcdcUL, 0xeaeaeaeaUL,    0x97979797UL, 0xf2f2f2f2UL, 0xcfcfcfcfUL, 0xcecececeUL,    0xf0f0f0f0UL, 0xb4b4b4b4UL, 0xe6e6e6e6UL, 0x73737373UL,    0x96969696UL, 0xacacacacUL, 0x74747474UL, 0x22222222UL,    0xe7e7e7e7UL, 0xadadadadUL, 0x35353535UL, 0x85858585UL,    0xe2e2e2e2UL, 0xf9f9f9f9UL, 0x37373737UL, 0xe8e8e8e8UL,    0x1c1c1c1cUL, 0x75757575UL, 0xdfdfdfdfUL, 0x6e6e6e6eUL,    0x47474747UL, 0xf1f1f1f1UL, 0x1a1a1a1aUL, 0x71717171UL,    0x1d1d1d1dUL, 0x29292929UL, 0xc5c5c5c5UL, 0x89898989UL,    0x6f6f6f6fUL, 0xb7b7b7b7UL, 0x62626262UL, 0x0e0e0e0eUL,    0xaaaaaaaaUL, 0x18181818UL, 0xbebebebeUL, 0x1b1b1b1bUL,    0xfcfcfcfcUL, 0x56565656UL, 0x3e3e3e3eUL, 0x4b4b4b4bUL,    0xc6c6c6c6UL, 0xd2d2d2d2UL, 0x79797979UL, 0x20202020UL,    0x9a9a9a9aUL, 0xdbdbdbdbUL, 0xc0c0c0c0UL, 0xfefefefeUL,    0x78787878UL, 0xcdcdcdcdUL, 0x5a5a5a5aUL, 0xf4f4f4f4UL,    0x1f1f1f1fUL, 0xddddddddUL, 0xa8a8a8a8UL, 0x33333333UL,    0x88888888UL, 0x07070707UL, 0xc7c7c7c7UL, 0x31313131UL,    0xb1b1b1b1UL, 0x12121212UL, 0x10101010UL, 0x59595959UL,    0x27272727UL, 0x80808080UL, 0xececececUL, 0x5f5f5f5fUL,    0x60606060UL, 0x51515151UL, 0x7f7f7f7fUL, 0xa9a9a9a9UL,    0x19191919UL, 0xb5b5b5b5UL, 0x4a4a4a4aUL, 0x0d0d0d0dUL,    0x2d2d2d2dUL, 0xe5e5e5e5UL, 0x7a7a7a7aUL, 0x9f9f9f9fUL,    0x93939393UL, 0xc9c9c9c9UL, 0x9c9c9c9cUL, 0xefefefefUL,    0xa0a0a0a0UL, 0xe0e0e0e0UL, 0x3b3b3b3bUL, 0x4d4d4d4dUL,    0xaeaeaeaeUL, 0x2a2a2a2aUL, 0xf5f5f5f5UL, 0xb0b0b0b0UL,    0xc8c8c8c8UL, 0xebebebebUL, 0xbbbbbbbbUL, 0x3c3c3c3cUL,    0x83838383UL, 0x53535353UL, 0x99999999UL, 0x61616161UL,    0x17171717UL, 0x2b2b2b2bUL, 0x04040404UL, 0x7e7e7e7eUL,    0xbabababaUL, 0x77777777UL, 0xd6d6d6d6UL, 0x26262626UL,    0xe1e1e1e1UL, 0x69696969UL, 0x14141414UL, 0x63636363UL,    0x55555555UL, 0x21212121UL, 0x0c0c0c0cUL, 0x7d7d7d7dUL,};#endif /* ENCRYPT_ONLY */#define Te0(x) TE0[x]#define Te1(x) RORc(TE0[x], 8)#define Te2(x) RORc(TE0[x], 16)#define Te3(x) RORc(TE0[x], 24)#define Td0(x) TD0[x]#define Td1(x) RORc(TD0[x], 8)#define Td2(x) RORc(TD0[x], 16)#define Td3(x) RORc(TD0[x], 24)#define Te4_0 0x000000FF & Te4#define Te4_1 0x0000FF00 & Te4#define Te4_2 0x00FF0000 & Te4#define Te4_3 0xFF000000 & Te4static const ulong32 rcon[] = {    0x01000000UL, 0x02000000UL, 0x04000000UL, 0x08000000UL,    0x10000000UL, 0x20000000UL, 0x40000000UL, 0x80000000UL,    0x1B000000UL, 0x36000000UL, /* for 128-bit blocks, Rijndael never uses more than 10 rcon values */};/* This part extracted from aes.c in libtomcrypt 1.17 */#ifndef ENCRYPT_ONLY #define SETUP    rijndael_setup#define ECB_ENC  rijndael_ecb_encrypt#define ECB_DEC  rijndael_ecb_decrypt#define ECB_DONE rijndael_done#define ECB_TEST rijndael_test#define ECB_KS   rijndael_keysizestatic ulong32 setup_mix(ulong32 temp){   return (Te4_3[byte(temp, 2)]) ^          (Te4_2[byte(temp, 1)]) ^          (Te4_1[byte(temp, 0)]) ^          (Te4_0[byte(temp, 3)]);}#endif#ifndef ENCRYPT_ONLYstatic ulong32 setup_mix2(ulong32 temp){   return Td0(255 & Te4[byte(temp, 3)]) ^          Td1(255 & Te4[byte(temp, 2)]) ^          Td2(255 & Te4[byte(temp, 1)]) ^          Td3(255 & Te4[byte(temp, 0)]);}#endif /**    Initialize the AES (Rijndael) block cipher    @param key The symmetric key you wish to pass    @param keylen The key length in bytes    @param num_rounds The number of rounds desired (0 for default)    @param skey The key in as scheduled by this function.    @return CRYPT_OK if successful */int SETUP(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey){    int i, j;    ulong32 temp, *rk;#ifndef ENCRYPT_ONLY    ulong32 *rrk;#endif        LTC_ARGCHK(key  != NULL);    LTC_ARGCHK(skey != NULL);    if (keylen != 16 && keylen != 24 && keylen != 32) {       return CRYPT_INVALID_KEYSIZE;    }    if (num_rounds != 0 && num_rounds != (10 + ((keylen/8)-2)*2)) {       return CRYPT_INVALID_ROUNDS;    }    skey->rijndael.Nr = 10 + ((keylen/8)-2)*2;    /* setup the forward key */    i                 = 0;    rk                = skey->rijndael.eK;    LOAD32H(rk[0], key     );    LOAD32H(rk[1], key +  4);    LOAD32H(rk[2], key +  8);    LOAD32H(rk[3], key + 12);    if (keylen == 16) {        j = 44;        for (;;) {            temp  = rk[3];            rk[4] = rk[0] ^ setup_mix(temp) ^ rcon[i];            rk[5] = rk[1] ^ rk[4];            rk[6] = rk[2] ^ rk[5];            rk[7] = rk[3] ^ rk[6];            if (++i == 10) {               break;            }            rk += 4;        }    } else if (keylen == 24) {        j = 52;           LOAD32H(rk[4], key + 16);        LOAD32H(rk[5], key + 20);        for (;;) {        #ifdef _MSC_VER            temp = skey->rijndael.eK[rk - skey->rijndael.eK + 5];         #else            temp = rk[5];        #endif            rk[ 6] = rk[ 0] ^ setup_mix(temp) ^ rcon[i];            rk[ 7] = rk[ 1] ^ rk[ 6];            rk[ 8] = rk[ 2] ^ rk[ 7];            rk[ 9] = rk[ 3] ^ rk[ 8];            if (++i == 8) {                break;            }            rk[10] = rk[ 4] ^ rk[ 9];            rk[11] = rk[ 5] ^ rk[10];            rk += 6;        }    } else if (keylen == 32) {        j = 60;        LOAD32H(rk[4], key + 16);        LOAD32H(rk[5], key + 20);        LOAD32H(rk[6], key + 24);        LOAD32H(rk[7], key + 28);        for (;;) {        #ifdef _MSC_VER            temp = skey->rijndael.eK[rk - skey->rijndael.eK + 7];         #else            temp = rk[7];        #endif            rk[ 8] = rk[ 0] ^ setup_mix(temp) ^ rcon[i];            rk[ 9] = rk[ 1] ^ rk[ 8];            rk[10] = rk[ 2] ^ rk[ 9];            rk[11] = rk[ 3] ^ rk[10];            if (++i == 7) {                break;            }            temp = rk[11];            rk[12] = rk[ 4] ^ setup_mix(RORc(temp, 8));            rk[13] = rk[ 5] ^ rk[12];            rk[14] = rk[ 6] ^ rk[13];            rk[15] = rk[ 7] ^ rk[14];            rk += 8;        }    } else {       /* this can't happen */       return CRYPT_ERROR;    }#ifndef ENCRYPT_ONLY        /* setup the inverse key now */    rk   = skey->rijndael.dK;    rrk  = skey->rijndael.eK + j - 4;     /* apply the inverse MixColumn transform to all round keys but the first and the last: */    /* copy first */    *rk++ = *rrk++;    *rk++ = *rrk++;    *rk++ = *rrk++;    *rk   = *rrk;    rk -= 3; rrk -= 3;    for (i = 1; i < skey->rijndael.Nr; i++) {        rrk -= 4;        rk  += 4;        temp = rrk[0];        rk[0] = setup_mix2(temp);        temp = rrk[1];        rk[1] = setup_mix2(temp);        temp = rrk[2];        rk[2] = setup_mix2(temp);        temp = rrk[3];        rk[3] = setup_mix2(temp);    }    /* copy last */    rrk -= 4;    rk  += 4;    *rk++ = *rrk++;    *rk++ = *rrk++;

⌨️ 快捷键说明

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