aesopt.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
#ifndef _AESOPT_H
00136
#define _AESOPT_H
00137
00138
#include <asterisk/aes.h>
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
#if defined( __OpenBSD__ )
00152
# include <machine/types.h>
00153
# include <sys/endian.h>
00154
#elif defined( __FreeBSD__ )
00155
# include <sys/types.h>
00156
# include <sys/endian.h>
00157
#elif defined( BSD ) && ( BSD >= 199103 ) || defined(__APPLE__)
00158
# include <machine/endian.h>
00159
#elif defined( __GNUC__ ) || defined( __GNU_LIBRARY__ )
00160
# include <endian.h>
00161
#if !defined(__APPLE__)
00162
# include <byteswap.h>
00163
#endif
00164
#elif defined( linux )
00165
# include <endian.h>
00166
#endif
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179 #define BRG_LITTLE_ENDIAN 1234
00180 #define BRG_BIG_ENDIAN 4321
00181
00182
#if defined( __alpha__ ) || defined( __alpha ) || defined( i386 ) || \
00183
defined( __i386__ ) || defined( _M_I86 ) || defined( _M_IX86 ) || \
00184
defined( __OS2__ ) || defined( sun386 ) || defined( __TURBOC__ ) || \
00185
defined( vax ) || defined( vms ) || defined( VMS ) || \
00186
defined( __VMS )
00187
00188
#define PLATFORM_BYTE_ORDER BRG_LITTLE_ENDIAN
00189
00190
#endif
00191
00192
#if defined( AMIGA ) || defined( applec ) || defined( __AS400__ ) || \
00193
defined( _CRAY ) || defined( __hppa ) || defined( __hp9000 ) || \
00194
defined( ibm370 ) || defined( mc68000 ) || defined( m68k ) || \
00195
defined( __MRC__ ) || defined( __MVS__ ) || defined( __MWERKS__ ) || \
00196
defined( sparc ) || defined( __sparc) || defined( SYMANTEC_C ) || \
00197
defined( __TANDEM ) || defined( THINK_C ) || defined( __VMCMS__ )
00198
00199
#define PLATFORM_BYTE_ORDER BRG_BIG_ENDIAN
00200
00201
#endif
00202
00203
00204
00205
00206
#if !defined(PLATFORM_BYTE_ORDER)
00207
00208
#if defined(LITTLE_ENDIAN) || defined(BIG_ENDIAN)
00209
# if defined(LITTLE_ENDIAN) && !defined(BIG_ENDIAN)
00210
# define PLATFORM_BYTE_ORDER BRG_LITTLE_ENDIAN
00211
# elif !defined(LITTLE_ENDIAN) && defined(BIG_ENDIAN)
00212
# define PLATFORM_BYTE_ORDER BRG_BIG_ENDIAN
00213
# elif defined(BYTE_ORDER) && (BYTE_ORDER == LITTLE_ENDIAN)
00214
# define PLATFORM_BYTE_ORDER BRG_LITTLE_ENDIAN
00215
# elif defined(BYTE_ORDER) && (BYTE_ORDER == BIG_ENDIAN)
00216
# define PLATFORM_BYTE_ORDER BRG_BIG_ENDIAN
00217
# endif
00218
00219
#elif defined(_LITTLE_ENDIAN) || defined(_BIG_ENDIAN)
00220
# if defined(_LITTLE_ENDIAN) && !defined(_BIG_ENDIAN)
00221
# define PLATFORM_BYTE_ORDER BRG_LITTLE_ENDIAN
00222
# elif !defined(_LITTLE_ENDIAN) && defined(_BIG_ENDIAN)
00223
# define PLATFORM_BYTE_ORDER BRG_BIG_ENDIAN
00224
# elif defined(_BYTE_ORDER) && (_BYTE_ORDER == _LITTLE_ENDIAN)
00225
# define PLATFORM_BYTE_ORDER BRG_LITTLE_ENDIAN
00226
# elif defined(_BYTE_ORDER) && (_BYTE_ORDER == _BIG_ENDIAN)
00227
# define PLATFORM_BYTE_ORDER BRG_BIG_ENDIAN
00228
# endif
00229
00230
#elif defined(__LITTLE_ENDIAN__) || defined(__BIG_ENDIAN__)
00231
# if defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__)
00232
# define PLATFORM_BYTE_ORDER BRG_LITTLE_ENDIAN
00233
# elif !defined(__LITTLE_ENDIAN__) && defined(__BIG_ENDIAN__)
00234
# define PLATFORM_BYTE_ORDER BRG_BIG_ENDIAN
00235
# elif defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __LITTLE_ENDIAN__)
00236
# define PLATFORM_BYTE_ORDER BRG_LITTLE_ENDIAN
00237
# elif defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __BIG_ENDIAN__)
00238
# define PLATFORM_BYTE_ORDER BRG_BIG_ENDIAN
00239
# endif
00240
00241
#elif 0
00242
#define PLATFORM_BYTE_ORDER BRG_LITTLE_ENDIAN
00243
00244
#elif 0
00245
#define PLATFORM_BYTE_ORDER BRG_BIG_ENDIAN
00246
00247
#else
00248
#error Please edit aesopt.h (line 235 or 238) to set the platform byte order
00249
#endif
00250
00251
#endif
00252
00253
00254
00255 #define NO_TABLES 0
00256 #define ONE_TABLE 1
00257 #define FOUR_TABLES 4
00258 #define NONE 0
00259 #define PARTIAL 1
00260 #define FULL 2
00261
00262
#if defined(bswap32)
00263
#define aes_sw32 bswap32
00264
#elif defined(bswap_32)
00265
#define aes_sw32 bswap_32
00266
#else
00267 #define brot(x,n) (((aes_32t)(x) << n) | ((aes_32t)(x) >> (32 - n)))
00268 #define aes_sw32(x) ((brot((x),8) & 0x00ff00ff) | (brot((x),24) & 0xff00ff00))
00269
#endif
00270
00271
00272
00273
00274
00275
00276
00277
00278
00279
#ifdef AES_ENCRYPT
00280
#define ENCRYPTION
00281
#define ENCRYPTION_KEY_SCHEDULE
00282
#endif
00283
00284
#ifdef AES_DECRYPT
00285
#define DECRYPTION
00286
#define DECRYPTION_KEY_SCHEDULE
00287
#endif
00288
00289
00290
00291
00292
00293
00294
00295
#if 0
00296
#define AES_ASM
00297
#endif
00298
00299
00300
00301
00302
00303
00304
00305
00306
00307
00308
00309
00310
00311
00312
00313
00314
00315
00316
00317
00318
00319
00320
00321
00322
00323
00324
00325
00326
00327
00328
#if 1 || defined(AES_ASM)
00329 #define ALGORITHM_BYTE_ORDER PLATFORM_BYTE_ORDER
00330
#elif 0
00331
#define ALGORITHM_BYTE_ORDER BRG_LITTLE_ENDIAN
00332
#elif 0
00333
#define ALGORITHM_BYTE_ORDER BRG_BIG_ENDIAN
00334
#else
00335
#error The algorithm byte order is not defined
00336
#endif
00337
00338
00339
00340
00341
00342
00343
00344
00345
00346
00347
00348
00349
00350
00351
00352
00353
00354
#if 1 && !defined(_MSC_VER)
00355 #define SAFE_IO
00356
#endif
00357
00358
00359
00360
00361
00362
00363
00364
00365
00366
00367
00368
00369
#if 1
00370 #define ENC_UNROLL FULL
00371
#elif 0
00372
#define ENC_UNROLL PARTIAL
00373
#else
00374
#define ENC_UNROLL NONE
00375
#endif
00376
00377
#if 1
00378 #define DEC_UNROLL FULL
00379
#elif 0
00380
#define DEC_UNROLL PARTIAL
00381
#else
00382
#define DEC_UNROLL NONE
00383
#endif
00384
00385
00386
00387
00388
00389
00390
#if 1
00391 #define FF_TABLES
00392
#endif
00393
00394
00395
00396
00397
00398
00399
00400
00401
#if 1
00402 #define ARRAYS
00403
#endif
00404
00405
00406
00407
00408
00409
00410
00411
00412
00413
00414
00415
00416
#if defined(ARRAYS)
00417 #define s(x,c) x[c]
00418
#else
00419
#define s(x,c) x##c
00420
#endif
00421
00422
00423
00424
00425
00426
00427
00428
#if 1
00429 #define FIXED_TABLES
00430
#endif
00431
00432
00433
00434
00435
00436
00437
00438
00439
00440
00441
#if 0 && defined(_MSC_VER) && (_MSC_VER >= 1300)
00442
#define TABLE_ALIGN 64
00443
#endif
00444
00445
00446
00447
00448
00449
00450
00451
00452
00453
00454
00455
00456
00457
00458
00459
00460
00461
00462
00463
00464
00465
#if 1
00466 #define ENC_ROUND FOUR_TABLES
00467
#elif 0
00468
#define ENC_ROUND ONE_TABLE
00469
#else
00470
#define ENC_ROUND NO_TABLES
00471
#endif
00472
00473
#if 1
00474 #define LAST_ENC_ROUND FOUR_TABLES
00475
#elif 0
00476
#define LAST_ENC_ROUND ONE_TABLE
00477
#else
00478
#define LAST_ENC_ROUND NO_TABLES
00479
#endif
00480
00481
#if 1
00482 #define DEC_ROUND FOUR_TABLES
00483
#elif 0
00484
#define DEC_ROUND ONE_TABLE
00485
#else
00486
#define DEC_ROUND NO_TABLES
00487
#endif
00488
00489
#if 1
00490 #define LAST_DEC_ROUND FOUR_TABLES
00491
#elif 0
00492
#define LAST_DEC_ROUND ONE_TABLE
00493
#else
00494
#define LAST_DEC_ROUND NO_TABLES
00495
#endif
00496
00497
00498
00499
00500
00501
#if 1
00502 #define KEY_SCHED FOUR_TABLES
00503
#elif 0
00504
#define KEY_SCHED ONE_TABLE
00505
#else
00506
#define KEY_SCHED NO_TABLES
00507
#endif
00508
00509
00510
00511 #define RC_LENGTH (5 * (AES_BLOCK_SIZE / 4 - 2))
00512
00513
00514
00515
#if ENC_ROUND == NO_TABLES && LAST_ENC_ROUND != NO_TABLES
00516
#undef LAST_ENC_ROUND
00517
#define LAST_ENC_ROUND NO_TABLES
00518
#elif ENC_ROUND == ONE_TABLE && LAST_ENC_ROUND == FOUR_TABLES
00519
#undef LAST_ENC_ROUND
00520
#define LAST_ENC_ROUND ONE_TABLE
00521
#endif
00522
00523
#if ENC_ROUND == NO_TABLES && ENC_UNROLL != NONE
00524
#undef ENC_UNROLL
00525
#define ENC_UNROLL NONE
00526
#endif
00527
00528
#if DEC_ROUND == NO_TABLES && LAST_DEC_ROUND != NO_TABLES
00529
#undef LAST_DEC_ROUND
00530
#define LAST_DEC_ROUND NO_TABLES
00531
#elif DEC_ROUND == ONE_TABLE && LAST_DEC_ROUND == FOUR_TABLES
00532
#undef LAST_DEC_ROUND
00533
#define LAST_DEC_ROUND ONE_TABLE
00534
#endif
00535
00536
#if DEC_ROUND == NO_TABLES && DEC_UNROLL != NONE
00537
#undef DEC_UNROLL
00538
#define DEC_UNROLL NONE
00539
#endif
00540
00541
00542
00543
00544
00545
00546
00547
00548
00549
00550
00551
00552
#if (ALGORITHM_BYTE_ORDER == BRG_LITTLE_ENDIAN)
00553
#define upr(x,n) (((aes_32t)(x) << (8 * (n))) | ((aes_32t)(x) >> (32 - 8 * (n))))
00554
#define ups(x,n) ((aes_32t) (x) << (8 * (n)))
00555
#define bval(x,n) ((aes_08t)((x) >> (8 * (n))))
00556
#define bytes2word(b0, b1, b2, b3) \
00557
(((aes_32t)(b3) << 24) | ((aes_32t)(b2) << 16) | ((aes_32t)(b1) << 8) | (b0))
00558
#endif
00559
00560
#if (ALGORITHM_BYTE_ORDER == BRG_BIG_ENDIAN)
00561
#define upr(x,n) (((aes_32t)(x) >> (8 * (n))) | ((aes_32t)(x) << (32 - 8 * (n))))
00562
#define ups(x,n) ((aes_32t) (x) >> (8 * (n))))
00563
#define bval(x,n) ((aes_08t)((x) >> (24 - 8 * (n))))
00564
#define bytes2word(b0, b1, b2, b3) \
00565
(((aes_32t)(b0) << 24) | ((aes_32t)(b1) << 16) | ((aes_32t)(b2) << 8) | (b3))
00566
#endif
00567
00568
#if defined(SAFE_IO)
00569
00570 #define word_in(x,c) bytes2word(((aes_08t*)(x)+4*c)[0], ((aes_08t*)(x)+4*c)[1], \
00571
((aes_08t*)(x)+4*c)[2], ((aes_08t*)(x)+4*c)[3])
00572 #define word_out(x,c,v) { ((aes_08t*)(x)+4*c)[0] = bval(v,0); ((aes_08t*)(x)+4*c)[1] = bval(v,1); \
00573
((aes_08t*)(x)+4*c)[2] = bval(v,2); ((aes_08t*)(x)+4*c)[3] = bval(v,3); }
00574
00575
#elif (ALGORITHM_BYTE_ORDER == PLATFORM_BYTE_ORDER)
00576
00577
#define word_in(x,c) (*((aes_32t*)(x)+(c)))
00578
#define word_out(x,c,v) (*((aes_32t*)(x)+(c)) = (v))
00579
00580
#else
00581
00582
#define word_in(x,c) aes_sw32(*((aes_32t*)(x)+(c)))
00583
#define word_out(x,c,v) (*((aes_32t*)(x)+(c)) = aes_sw32(v))
00584
00585
#endif
00586
00587
00588
00589 #define WPOLY 0x011b
00590 #define BPOLY 0x1b
00591
00592
00593
00594 #define m1 0x80808080
00595 #define m2 0x7f7f7f7f
00596 #define gf_mulx(x) ((((x) & m2) << 1) ^ ((((x) & m1) >> 7) * BPOLY))
00597
00598
00599
00600
00601
00602
00603
00604
00605
00606
00607
00608
00609
#ifdef AES_ASM
00610
#ifdef ENC_ROUND
00611
#undef ENC_ROUND
00612
#endif
00613
#define ENC_ROUND FOUR_TABLES
00614
#ifdef LAST_ENC_ROUND
00615
#undef LAST_ENC_ROUND
00616
#endif
00617
#define LAST_ENC_ROUND FOUR_TABLES
00618
#ifdef DEC_ROUND
00619
#undef DEC_ROUND
00620
#endif
00621
#define DEC_ROUND FOUR_TABLES
00622
#ifdef LAST_DEC_ROUND
00623
#undef LAST_DEC_ROUND
00624
#endif
00625
#define LAST_DEC_ROUND FOUR_TABLES
00626
#ifdef KEY_SCHED
00627
#undef KEY_SCHED
00628
#define KEY_SCHED FOUR_TABLES
00629
#endif
00630
#endif
00631
00632
#if defined(ENCRYPTION) || defined(AES_ASM)
00633
#if ENC_ROUND == ONE_TABLE
00634
#define FT1_SET
00635
#elif ENC_ROUND == FOUR_TABLES
00636
#define FT4_SET
00637
#else
00638
#define SBX_SET
00639
#endif
00640
#if LAST_ENC_ROUND == ONE_TABLE
00641
#define FL1_SET
00642
#elif LAST_ENC_ROUND == FOUR_TABLES
00643
#define FL4_SET
00644
#elif !defined(SBX_SET)
00645
#define SBX_SET
00646
#endif
00647
#endif
00648
00649
#if defined(DECRYPTION) || defined(AES_ASM)
00650
#if DEC_ROUND == ONE_TABLE
00651
#define IT1_SET
00652
#elif DEC_ROUND == FOUR_TABLES
00653
#define IT4_SET
00654
#else
00655
#define ISB_SET
00656
#endif
00657
#if LAST_DEC_ROUND == ONE_TABLE
00658
#define IL1_SET
00659
#elif LAST_DEC_ROUND == FOUR_TABLES
00660
#define IL4_SET
00661
#elif !defined(ISB_SET)
00662
#define ISB_SET
00663
#endif
00664
#endif
00665
00666
#if defined(ENCRYPTION_KEY_SCHEDULE) || defined(DECRYPTION_KEY_SCHEDULE)
00667
#if KEY_SCHED == ONE_TABLE
00668
#define LS1_SET
00669
#define IM1_SET
00670
#elif KEY_SCHED == FOUR_TABLES
00671
#define LS4_SET
00672
#define IM4_SET
00673
#elif !defined(SBX_SET)
00674
#define SBX_SET
00675
#endif
00676
#endif
00677
00678
00679
00680 #define no_table(x,box,vf,rf,c) bytes2word( \
00681
box[bval(vf(x,0,c),rf(0,c))], \
00682
box[bval(vf(x,1,c),rf(1,c))], \
00683
box[bval(vf(x,2,c),rf(2,c))], \
00684
box[bval(vf(x,3,c),rf(3,c))])
00685
00686 #define one_table(x,op,tab,vf,rf,c) \
00687
( tab[bval(vf(x,0,c),rf(0,c))] \
00688
^ op(tab[bval(vf(x,1,c),rf(1,c))],1) \
00689
^ op(tab[bval(vf(x,2,c),rf(2,c))],2) \
00690
^ op(tab[bval(vf(x,3,c),rf(3,c))],3))
00691
00692 #define four_tables(x,tab,vf,rf,c) \
00693
( tab[0][bval(vf(x,0,c),rf(0,c))] \
00694
^ tab[1][bval(vf(x,1,c),rf(1,c))] \
00695
^ tab[2][bval(vf(x,2,c),rf(2,c))] \
00696
^ tab[3][bval(vf(x,3,c),rf(3,c))])
00697
00698 #define vf1(x,r,c) (x)
00699 #define rf1(r,c) (r)
00700 #define rf2(r,c) ((8+r-c)&3)
00701
00702
00703
00704
00705
#if defined(FM4_SET)
00706
#define fwd_mcol(x) four_tables(x,t_use(f,m),vf1,rf1,0)
00707
#elif defined(FM1_SET)
00708
#define fwd_mcol(x) one_table(x,upr,t_use(f,m),vf1,rf1,0)
00709
#else
00710 #define dec_fmvars aes_32t g2
00711 #define fwd_mcol(x) (g2 = gf_mulx(x), g2 ^ upr((x) ^ g2, 3) ^ upr((x), 2) ^ upr((x), 1))
00712
#endif
00713
00714
#if defined(IM4_SET)
00715
#define inv_mcol(x) four_tables(x,t_use(i,m),vf1,rf1,0)
00716
#elif defined(IM1_SET)
00717
#define inv_mcol(x) one_table(x,upr,t_use(i,m),vf1,rf1,0)
00718
#else
00719 #define dec_imvars aes_32t g2, g4, g9
00720 #define inv_mcol(x) (g2 = gf_mulx(x), g4 = gf_mulx(g2), g9 = (x) ^ gf_mulx(g4), g4 ^= g9, \
00721
(x) ^ g2 ^ g4 ^ upr(g2 ^ g9, 3) ^ upr(g4, 2) ^ upr(g9, 1))
00722
#endif
00723
00724
#if defined(FL4_SET)
00725
#define ls_box(x,c) four_tables(x,t_use(f,l),vf1,rf2,c)
00726
#elif defined(LS4_SET)
00727
#define ls_box(x,c) four_tables(x,t_use(l,s),vf1,rf2,c)
00728
#elif defined(FL1_SET)
00729
#define ls_box(x,c) one_table(x,upr,t_use(f,l),vf1,rf2,c)
00730
#elif defined(LS1_SET)
00731
#define ls_box(x,c) one_table(x,upr,t_use(l,s),vf1,rf2,c)
00732
#else
00733 #define ls_box(x,c) no_table(x,t_use(s,box),vf1,rf2,c)
00734
#endif
00735
00736
#if defined(__cplusplus)
00737
extern "C"
00738 {
00739
#endif
00740
00741
00742
00743
00744
00745
00746
00747
00748
00749
00750
00751
00752
00753
00754
00755
00756
00757
00758
00759
00760
00761
00762
00763
00764
00765
00766
00767
00768
00769
00770
00771
00772
00773
00774
00775
00776
00777
00778
00779
00780
00781
00782 #define t_dec(m,n) t_##m##n
00783 #define t_set(m,n) t_##m##n
00784 #define t_use(m,n) t_##m##n
00785
00786
#if defined(DO_TABLES)
00787
00788
00789
00790
#if defined(FIXED_TABLES) || !defined(FF_TABLES)
00791
00792
#define f2(x) ((x<<1) ^ (((x>>7) & 1) * WPOLY))
00793
#define f4(x) ((x<<2) ^ (((x>>6) & 1) * WPOLY) ^ (((x>>6) & 2) * WPOLY))
00794
#define f8(x) ((x<<3) ^ (((x>>5) & 1) * WPOLY) ^ (((x>>5) & 2) * WPOLY) \
00795
^ (((x>>5) & 4) * WPOLY))
00796
#define f3(x) (f2(x) ^ x)
00797
#define f9(x) (f8(x) ^ x)
00798
#define fb(x) (f8(x) ^ f2(x) ^ x)
00799
#define fd(x) (f8(x) ^ f4(x) ^ x)
00800
#define fe(x) (f8(x) ^ f4(x) ^ f2(x))
00801
00802
#else
00803
00804
#define f2(x) ((x) ? pow[log[x] + 0x19] : 0)
00805
#define f3(x) ((x) ? pow[log[x] + 0x01] : 0)
00806
#define f9(x) ((x) ? pow[log[x] + 0xc7] : 0)
00807
#define fb(x) ((x) ? pow[log[x] + 0x68] : 0)
00808
#define fd(x) ((x) ? pow[log[x] + 0xee] : 0)
00809
#define fe(x) ((x) ? pow[log[x] + 0xdf] : 0)
00810
#define fi(x) ((x) ? pow[ 255 - log[x]] : 0)
00811
00812
#endif
00813
00814
#if defined(FIXED_TABLES)
00815
00816
#define sb_data(w) \
00817
w(0x63), w(0x7c), w(0x77), w(0x7b), w(0xf2), w(0x6b), w(0x6f), w(0xc5),\
00818
w(0x30), w(0x01), w(0x67), w(0x2b), w(0xfe), w(0xd7), w(0xab), w(0x76),\
00819
w(0xca), w(0x82), w(0xc9), w(0x7d), w(0xfa), w(0x59), w(0x47), w(0xf0),\
00820
w(0xad), w(0xd4), w(0xa2), w(0xaf), w(0x9c), w(0xa4), w(0x72), w(0xc0),\
00821
w(0xb7), w(0xfd), w(0x93), w(0x26), w(0x36), w(0x3f), w(0xf7), w(0xcc),\
00822
w(0x34), w(0xa5), w(0xe5), w(0xf1), w(0x71), w(0xd8), w(0x31), w(0x15),\
00823
w(0x04), w(0xc7), w(0x23), w(0xc3), w(0x18), w(0x96), w(0x05), w(0x9a),\
00824
w(0x07), w(0x12), w(0x80), w(0xe2), w(0xeb), w(0x27), w(0xb2), w(0x75),\
00825
w(0x09), w(0x83), w(0x2c), w(0x1a), w(0x1b), w(0x6e), w(0x5a), w(0xa0),\
00826
w(0x52), w(0x3b), w(0xd6), w(0xb3), w(0x29), w(0xe3), w(0x2f), w(0x84),\
00827
w(0x53), w(0xd1), w(0x00), w(0xed), w(0x20), w(0xfc), w(0xb1), w(0x5b),\
00828
w(0x6a), w(0xcb), w(0xbe), w(0x39), w(0x4a), w(0x4c), w(0x58), w(0xcf),\
00829
w(0xd0), w(0xef), w(0xaa), w(0xfb), w(0x43), w(0x4d), w(0x33), w(0x85),\
00830
w(0x45), w(0xf9), w(0x02), w(0x7f), w(0x50), w(0x3c), w(0x9f), w(0xa8),\
00831
w(0x51), w(0xa3), w(0x40), w(0x8f), w(0x92), w(0x9d), w(0x38), w(0xf5),\
00832
w(0xbc), w(0xb6), w(0xda), w(0x21), w(0x10), w(0xff), w(0xf3), w(0xd2),\
00833
w(0xcd), w(0x0c), w(0x13), w(0xec), w(0x5f), w(0x97), w(0x44), w(0x17),\
00834
w(0xc4), w(0xa7), w(0x7e), w(0x3d), w(0x64), w(0x5d), w(0x19), w(0x73),\
00835
w(0x60), w(0x81), w(0x4f), w(0xdc), w(0x22), w(0x2a), w(0x90), w(0x88),\
00836
w(0x46), w(0xee), w(0xb8), w(0x14), w(0xde), w(0x5e), w(0x0b), w(0xdb),\
00837
w(0xe0), w(0x32), w(0x3a), w(0x0a), w(0x49), w(0x06), w(0x24), w(0x5c),\
00838
w(0xc2), w(0xd3), w(0xac), w(0x62), w(0x91), w(0x95), w(0xe4), w(0x79),\
00839
w(0xe7), w(0xc8), w(0x37), w(0x6d), w(0x8d), w(0xd5), w(0x4e), w(0xa9),\
00840
w(0x6c), w(0x56), w(0xf4), w(0xea), w(0x65), w(0x7a), w(0xae), w(0x08),\
00841
w(0xba), w(0x78), w(0x25), w(0x2e), w(0x1c), w(0xa6), w(0xb4), w(0xc6),\
00842
w(0xe8), w(0xdd), w(0x74), w(0x1f), w(0x4b), w(0xbd), w(0x8b), w(0x8a),\
00843
w(0x70), w(0x3e), w(0xb5), w(0x66), w(0x48), w(0x03), w(0xf6), w(0x0e),\
00844
w(0x61), w(0x35), w(0x57), w(0xb9), w(0x86), w(0xc1), w(0x1d), w(0x9e),\
00845
w(0xe1), w(0xf8), w(0x98), w(0x11), w(0x69), w(0xd9), w(0x8e), w(0x94),\
00846
w(0x9b), w(0x1e), w(0x87), w(0xe9), w(0xce), w(0x55), w(0x28), w(0xdf),\
00847
w(0x8c), w(0xa1), w(0x89), w(0x0d), w(0xbf), w(0xe6), w(0x42), w(0x68),\
00848
w(0x41), w(0x99), w(0x2d), w(0x0f), w(0xb0), w(0x54), w(0xbb), w(0x16)
00849
00850
#define isb_data(w) \
00851
w(0x52), w(0x09), w(0x6a), w(0xd5), w(0x30), w(0x36), w(0xa5), w(0x38),\
00852
w(0xbf), w(0x40), w(0xa3), w(0x9e), w(0x81), w(0xf3), w(0xd7), w(0xfb),\
00853
w(0x7c), w(0xe3), w(0x39), w(0x82), w(0x9b), w(0x2f), w(0xff), w(0x87),\
00854
w(0x34), w(0x8e), w(0x43), w(0x44), w(0xc4), w(0xde), w(0xe9), w(0xcb),\
00855
w(0x54), w(0x7b), w(0x94), w(0x32), w(0xa6), w(0xc2), w(0x23), w(0x3d),\
00856
w(0xee), w(0x4c), w(0x95), w(0x0b), w(0x42), w(0xfa), w(0xc3), w(0x4e),\
00857
w(0x08), w(0x2e), w(0xa1), w(0x66), w(0x28), w(0xd9), w(0x24), w(0xb2),\
00858
w(0x76), w(0x5b), w(0xa2), w(0x49), w(0x6d), w(0x8b), w(0xd1), w(0x25),\
00859
w(0x72), w(0xf8), w(0xf6), w(0x64), w(0x86), w(0x68), w(0x98), w(0x16),\
00860
w(0xd4), w(0xa4), w(0x5c), w(0xcc), w(0x5d), w(0x65), w(0xb6), w(0x92),\
00861
w(0x6c), w(0x70), w(0x48), w(0x50), w(0xfd), w(0xed), w(0xb9), w(0xda),\
00862
w(0x5e), w(0x15), w(0x46), w(0x57), w(0xa7), w(0x8d), w(0x9d), w(0x84),\
00863
w(0x90), w(0xd8), w(0xab), w(0x00), w(0x8c), w(0xbc), w(0xd3), w(0x0a),\
00864
w(0xf7), w(0xe4), w(0x58), w(0x05), w(0xb8), w(0xb3), w(0x45), w(0x06),\
00865
w(0xd0), w(0x2c), w(0x1e), w(0x8f), w(0xca), w(0x3f), w(0x0f), w(0x02),\
00866
w(0xc1), w(0xaf), w(0xbd), w(0x03), w(0x01), w(0x13), w(0x8a), w(0x6b),\
00867
w(0x3a), w(0x91), w(0x11), w(0x41), w(0x4f), w(0x67), w(0xdc), w(0xea),\
00868
w(0x97), w(0xf2), w(0xcf), w(0xce), w(0xf0), w(0xb4), w(0xe6), w(0x73),\
00869
w(0x96), w(0xac), w(0x74), w(0x22), w(0xe7), w(0xad), w(0x35), w(0x85),\
00870
w(0xe2), w(0xf9), w(0x37), w(0xe8), w(0x1c), w(0x75), w(0xdf), w(0x6e),\
00871
w(0x47), w(0xf1), w(0x1a), w(0x71), w(0x1d), w(0x29), w(0xc5), w(0x89),\
00872
w(0x6f), w(0xb7), w(0x62), w(0x0e), w(0xaa), w(0x18), w(0xbe), w(0x1b),\
00873
w(0xfc), w(0x56), w(0x3e), w(0x4b), w(0xc6), w(0xd2), w(0x79), w(0x20),\
00874
w(0x9a), w(0xdb), w(0xc0), w(0xfe), w(0x78), w(0xcd), w(0x5a), w(0xf4),\
00875
w(0x1f), w(0xdd), w(0xa8), w(0x33), w(0x88), w(0x07), w(0xc7), w(0x31),\
00876
w(0xb1), w(0x12), w(0x10), w(0x59), w(0x27), w(0x80), w(0xec), w(0x5f),\
00877
w(0x60), w(0x51), w(0x7f), w(0xa9), w(0x19), w(0xb5), w(0x4a), w(0x0d),\
00878
w(0x2d), w(0xe5), w(0x7a), w(0x9f), w(0x93), w(0xc9), w(0x9c), w(0xef),\
00879
w(0xa0), w(0xe0), w(0x3b), w(0x4d), w(0xae), w(0x2a), w(0xf5), w(0xb0),\
00880
w(0xc8), w(0xeb), w(0xbb), w(0x3c), w(0x83), w(0x53), w(0x99), w(0x61),\
00881
w(0x17), w(0x2b), w(0x04), w(0x7e), w(0xba), w(0x77), w(0xd6), w(0x26),\
00882
w(0xe1), w(0x69), w(0x14), w(0x63), w(0x55), w(0x21), w(0x0c), w(0x7d),
00883
00884
#define mm_data(w) \
00885
w(0x00), w(0x01), w(0x02), w(0x03), w(0x04), w(0x05), w(0x06), w(0x07),\
00886
w(0x08), w(0x09), w(0x0a), w(0x0b), w(0x0c), w(0x0d), w(0x0e), w(0x0f),\
00887
w(0x10), w(0x11), w(0x12), w(0x13), w(0x14), w(0x15), w(0x16), w(0x17),\
00888
w(0x18), w(0x19), w(0x1a), w(0x1b), w(0x1c), w(0x1d), w(0x1e), w(0x1f),\
00889
w(0x20), w(0x21), w(0x22), w(0x23), w(0x24), w(0x25), w(0x26), w(0x27),\
00890
w(0x28), w(0x29), w(0x2a), w(0x2b), w(0x2c), w(0x2d), w(0x2e), w(0x2f),\
00891
w(0x30), w(0x31), w(0x32), w(0x33), w(0x34), w(0x35), w(0x36), w(0x37),\
00892
w(0x38), w(0x39), w(0x3a), w(0x3b), w(0x3c), w(0x3d), w(0x3e), w(0x3f),\
00893
w(0x40), w(0x41), w(0x42), w(0x43), w(0x44), w(0x45), w(0x46), w(0x47),\
00894
w(0x48), w(0x49), w(0x4a), w(0x4b), w(0x4c), w(0x4d), w(0x4e), w(0x4f),\
00895
w(0x50), w(0x51), w(0x52), w(0x53), w(0x54), w(0x55), w(0x56), w(0x57),\
00896
w(0x58), w(0x59), w(0x5a), w(0x5b), w(0x5c), w(0x5d), w(0x5e), w(0x5f),\
00897
w(0x60), w(0x61), w(0x62), w(0x63), w(0x64), w(0x65), w(0x66), w(0x67),\
00898
w(0x68), w(0x69), w(0x6a), w(0x6b), w(0x6c), w(0x6d), w(0x6e), w(0x6f),\
00899
w(0x70), w(0x71), w(0x72), w(0x73), w(0x74), w(0x75), w(0x76), w(0x77),\
00900
w(0x78), w(0x79), w(0x7a), w(0x7b), w(0x7c), w(0x7d), w(0x7e), w(0x7f),\
00901
w(0x80), w(0x81), w(0x82), w(0x83), w(0x84), w(0x85), w(0x86), w(0x87),\
00902
w(0x88), w(0x89), w(0x8a), w(0x8b), w(0x8c), w(0x8d), w(0x8e), w(0x8f),\
00903
w(0x90), w(0x91), w(0x92), w(0x93), w(0x94), w(0x95), w(0x96), w(0x97),\
00904
w(0x98), w(0x99), w(0x9a), w(0x9b), w(0x9c), w(0x9d), w(0x9e), w(0x9f),\
00905
w(0xa0), w(0xa1), w(0xa2), w(0xa3), w(0xa4), w(0xa5), w(0xa6), w(0xa7),\
00906
w(0xa8), w(0xa9), w(0xaa), w(0xab), w(0xac), w(0xad), w(0xae), w(0xaf),\
00907
w(0xb0), w(0xb1), w(0xb2), w(0xb3), w(0xb4), w(0xb5), w(0xb6), w(0xb7),\
00908
w(0xb8), w(0xb9), w(0xba), w(0xbb), w(0xbc), w(0xbd), w(0xbe), w(0xbf),\
00909
w(0xc0), w(0xc1), w(0xc2), w(0xc3), w(0xc4), w(0xc5), w(0xc6), w(0xc7),\
00910
w(0xc8), w(0xc9), w(0xca), w(0xcb), w(0xcc), w(0xcd), w(0xce), w(0xcf),\
00911
w(0xd0), w(0xd1), w(0xd2), w(0xd3), w(0xd4), w(0xd5), w(0xd6), w(0xd7),\
00912
w(0xd8), w(0xd9), w(0xda), w(0xdb), w(0xdc), w(0xdd), w(0xde), w(0xdf),\
00913
w(0xe0), w(0xe1), w(0xe2), w(0xe3), w(0xe4), w(0xe5), w(0xe6), w(0xe7),\
00914
w(0xe8), w(0xe9), w(0xea), w(0xeb), w(0xec), w(0xed), w(0xee), w(0xef),\
00915
w(0xf0), w(0xf1), w(0xf2), w(0xf3), w(0xf4), w(0xf5), w(0xf6), w(0xf7),\
00916
w(0xf8), w(0xf9), w(0xfa), w(0xfb), w(0xfc), w(0xfd), w(0xfe), w(0xff)
00917
00918
#define h0(x) (x)
00919
00920
00921
00922
00923
00924
#define w0(p) bytes2word(p, 0, 0, 0)
00925
#define w1(p) bytes2word(0, p, 0, 0)
00926
#define w2(p) bytes2word(0, 0, p, 0)
00927
#define w3(p) bytes2word(0, 0, 0, p)
00928
00929
#define u0(p) bytes2word(f2(p), p, p, f3(p))
00930
#define u1(p) bytes2word(f3(p), f2(p), p, p)
00931
#define u2(p) bytes2word(p, f3(p), f2(p), p)
00932
#define u3(p) bytes2word(p, p, f3(p), f2(p))
00933
00934
#define v0(p) bytes2word(fe(p), f9(p), fd(p), fb(p))
00935
#define v1(p) bytes2word(fb(p), fe(p), f9(p), fd(p))
00936
#define v2(p) bytes2word(fd(p), fb(p), fe(p), f9(p))
00937
#define v3(p) bytes2word(f9(p), fd(p), fb(p), fe(p))
00938
00939
const aes_32t
t_dec(r,c)[
RC_LENGTH] =
00940 {
00941 w0(0x01), w0(0x02), w0(0x04), w0(0x08), w0(0x10),
00942 w0(0x20), w0(0x40), w0(0x80), w0(0x1b), w0(0x36)
00943 };
00944
00945
#define d_1(t,n,b,v) const t n[256] = { b(v##0) }
00946
#define d_4(t,n,b,v) const t n[4][256] = { { b(v##0) }, { b(v##1) }, { b(v##2) }, { b(v##3) } }
00947
00948
#else
00949
00950 aes_32t
t_dec(r,c)[
RC_LENGTH];
00951
00952
#define d_1(t,n,b,v) t n[256]
00953
#define d_4(t,n,b,v) t n[4][256]
00954
00955
#endif
00956
00957
#else
00958
00959
#if defined(FIXED_TABLES)
00960
00961
extern const aes_32t
t_dec(r,c)[
RC_LENGTH];
00962
00963
#if defined(_MSC_VER) && defined(TABLE_ALIGN)
00964
#define d_1(t,n,b,v) extern __declspec(align(TABLE_ALIGN)) const t n[256]
00965
#define d_4(t,n,b,v) extern __declspec(align(TABLE_ALIGN)) const t n[4][256]
00966
#else
00967 #define d_1(t,n,b,v) extern const t n[256]
00968 #define d_4(t,n,b,v) extern const t n[4][256]
00969
#endif
00970
#else
00971
00972
extern aes_32t
t_dec(r,c)[
RC_LENGTH];
00973
00974
#if defined(_MSC_VER) && defined(TABLE_ALIGN)
00975
#define d_1(t,n,b,v) extern __declspec(align(TABLE_ALIGN)) t n[256]
00976
#define d_4(t,n,b,v) extern __declspec(align(TABLE_ALIGN)) t n[4][256]
00977
#else
00978
#define d_1(t,n,b,v) extern t n[256]
00979
#define d_4(t,n,b,v) extern t n[4][256]
00980
#endif
00981
#endif
00982
00983
#endif
00984
00985
#ifdef SBX_SET
00986
d_1(aes_08t,
t_dec(s,box), sb_data, h);
00987
#endif
00988
#ifdef ISB_SET
00989
d_1(aes_08t,
t_dec(i,box), isb_data, h);
00990
#endif
00991
00992
#ifdef FT1_SET
00993
d_1(aes_32t,
t_dec(f,n), sb_data, u);
00994
#endif
00995
#ifdef FT4_SET
00996
d_4(aes_32t,
t_dec(f,n), sb_data, u);
00997
#endif
00998
00999
#ifdef FL1_SET
01000
d_1(aes_32t,
t_dec(f,l), sb_data, w);
01001
#endif
01002
#ifdef FL4_SET
01003
d_4(aes_32t,
t_dec(f,l), sb_data, w);
01004
#endif
01005
01006
#ifdef IT1_SET
01007
d_1(aes_32t,
t_dec(i,n), isb_data, v);
01008
#endif
01009
#ifdef IT4_SET
01010
d_4(aes_32t,
t_dec(i,n), isb_data, v);
01011
#endif
01012
01013
#ifdef IL1_SET
01014
d_1(aes_32t,
t_dec(i,l), isb_data, w);
01015
#endif
01016
#ifdef IL4_SET
01017
d_4(aes_32t,
t_dec(i,l), isb_data, w);
01018
#endif
01019
01020
#ifdef LS1_SET
01021
#ifdef FL1_SET
01022
#undef LS1_SET
01023
#else
01024
d_1(aes_32t,
t_dec(l,s), sb_data, w);
01025
#endif
01026
#endif
01027
01028
#ifdef LS4_SET
01029
#ifdef FL4_SET
01030
#undef LS4_SET
01031
#else
01032
d_4(aes_32t,
t_dec(l,s), sb_data, w);
01033
#endif
01034
#endif
01035
01036
#ifdef IM1_SET
01037
d_1(aes_32t,
t_dec(i,m), mm_data, v);
01038
#endif
01039
#ifdef IM4_SET
01040
d_4(aes_32t,
t_dec(i,m), mm_data, v);
01041
#endif
01042
01043
#if defined(__cplusplus)
01044
}
01045
#endif
01046
01047
#endif
Generated on Sat Jun 12 16:40:57 2004 for Asterisk by
1.3.7