?? serpent_bitslice.java
字號:
x2 = x2 ^ x3 ^ (x1 <<7); x0 = ((((x0))<<(5))| (((x0))>>>(32-(5)))) ; x2 = ((((x2))<<(22))| (((x2))>>>(32-(22)))) ; x0 ^= K[26*4+0]; x1 ^= K[26*4+1]; x2 ^= K[26*4+2]; x3 ^= K[26*4+3] ;/* S2: 8 6 7 9 3 12 10 15 13 1 14 4 0 11 5 2 *//* depth = 3,8,11,7, Total gates=16 */ t01 = x0 | x2 ; t02 = x0 ^ x1 ; t03 = x3 ^ t01; y0 = t02 ^ t03; t05 = x2 ^ y0 ; t06 = x1 ^ t05; t07 = x1 | t05; t08 = t01 & t06; t09 = t03 ^ t07; t10 = t02 | t09; y1 = t10 ^ t08; t12 = x0 | x3 ; t13 = t09 ^ y1 ; t14 = x1 ^ t13; y3 = ~ t09; y2 = t12 ^ t14; x0 = ((((y0))<<(13))| (((y0))>>>(32-(13)))) ; x2 = ((((y2))<<(3))| (((y2))>>>(32-(3)))) ; x1 = y1 ^ x0 ^ x2 ; x3 = y3 ^ x2 ^ (x0)<<3; x1 = ((((x1))<<(1))| (((x1))>>>(32-(1)))) ; x3 = ((((x3))<<(7))| (((x3))>>>(32-(7)))) ; x0 = x0 ^ x1 ^ x3 ; x2 = x2 ^ x3 ^ (x1 <<7); x0 = ((((x0))<<(5))| (((x0))>>>(32-(5)))) ; x2 = ((((x2))<<(22))| (((x2))>>>(32-(22)))) ; x0 ^= K[27*4+0]; x1 ^= K[27*4+1]; x2 ^= K[27*4+2]; x3 ^= K[27*4+3] ;/* S3: 0 15 11 8 12 9 6 3 13 1 2 4 10 7 5 14 *//* depth = 8,3,5,5, Total gates=18 */ t01 = x0 ^ x2 ; t02 = x0 | x3 ; t03 = x0 & x3 ; t04 = t01 & t02; t05 = x1 | t03; t06 = x0 & x1 ; t07 = x3 ^ t04; t08 = x2 | t06; t09 = x1 ^ t07; t10 = x3 & t05; t11 = t02 ^ t10; y3 = t08 ^ t09; t13 = x3 | y3 ; t14 = x0 | t07; t15 = x1 & t13; y2 = t08 ^ t11; y0 = t14 ^ t15; y1 = t05 ^ t04; x0 = ((((y0))<<(13))| (((y0))>>>(32-(13)))) ; x2 = ((((y2))<<(3))| (((y2))>>>(32-(3)))) ; x1 = y1 ^ x0 ^ x2 ; x3 = y3 ^ x2 ^ (x0)<<3; x1 = ((((x1))<<(1))| (((x1))>>>(32-(1)))) ; x3 = ((((x3))<<(7))| (((x3))>>>(32-(7)))) ; x0 = x0 ^ x1 ^ x3 ; x2 = x2 ^ x3 ^ (x1 <<7); x0 = ((((x0))<<(5))| (((x0))>>>(32-(5)))) ; x2 = ((((x2))<<(22))| (((x2))>>>(32-(22)))) ; x0 ^= K[28*4+0]; x1 ^= K[28*4+1]; x2 ^= K[28*4+2]; x3 ^= K[28*4+3] ;/* S4: 1 15 8 3 12 0 11 6 2 5 4 10 9 14 7 13 *//* depth = 6,7,5,3, Total gates=19 */ t01 = x0 | x1 ; t02 = x1 | x2 ; t03 = x0 ^ t02; t04 = x1 ^ x3 ; t05 = x3 | t03; t06 = x3 & t01; y3 = t03 ^ t06; t08 = y3 & t04; t09 = t04 & t05; t10 = x2 ^ t06; t11 = x1 & x2 ; t12 = t04 ^ t08; t13 = t11 | t03; t14 = t10 ^ t09; t15 = x0 & t05; t16 = t11 | t12; y2 = t13 ^ t08; y1 = t15 ^ t16; y0 = ~ t14; x0 = ((((y0))<<(13))| (((y0))>>>(32-(13)))) ; x2 = ((((y2))<<(3))| (((y2))>>>(32-(3)))) ; x1 = y1 ^ x0 ^ x2 ; x3 = y3 ^ x2 ^ (x0)<<3; x1 = ((((x1))<<(1))| (((x1))>>>(32-(1)))) ; x3 = ((((x3))<<(7))| (((x3))>>>(32-(7)))) ; x0 = x0 ^ x1 ^ x3 ; x2 = x2 ^ x3 ^ (x1 <<7); x0 = ((((x0))<<(5))| (((x0))>>>(32-(5)))) ; x2 = ((((x2))<<(22))| (((x2))>>>(32-(22)))) ; x0 ^= K[29*4+0]; x1 ^= K[29*4+1]; x2 ^= K[29*4+2]; x3 ^= K[29*4+3] ;/* S5: 15 5 2 11 4 10 9 12 0 3 14 8 13 6 7 1 *//* depth = 4,6,8,6, Total gates=17 */ t01 = x1 ^ x3 ; t02 = x1 | x3 ; t03 = x0 & t01; t04 = x2 ^ t02; t05 = t03 ^ t04; y0 = ~ t05; t07 = x0 ^ t01; t08 = x3 | y0 ; t09 = x1 | t05; t10 = x3 ^ t08; t11 = x1 | t07; t12 = t03 | y0 ; t13 = t07 | t10; t14 = t01 ^ t11; y2 = t09 ^ t13; y1 = t07 ^ t08; y3 = t12 ^ t14; x0 = ((((y0))<<(13))| (((y0))>>>(32-(13)))) ; x2 = ((((y2))<<(3))| (((y2))>>>(32-(3)))) ; x1 = y1 ^ x0 ^ x2 ; x3 = y3 ^ x2 ^ (x0)<<3; x1 = ((((x1))<<(1))| (((x1))>>>(32-(1)))) ; x3 = ((((x3))<<(7))| (((x3))>>>(32-(7)))) ; x0 = x0 ^ x1 ^ x3 ; x2 = x2 ^ x3 ^ (x1 <<7); x0 = ((((x0))<<(5))| (((x0))>>>(32-(5)))) ; x2 = ((((x2))<<(22))| (((x2))>>>(32-(22)))) ; x0 ^= K[30*4+0]; x1 ^= K[30*4+1]; x2 ^= K[30*4+2]; x3 ^= K[30*4+3] ;/* S6: 7 2 12 5 8 4 6 11 14 9 1 15 13 3 10 0 *//* depth = 8,3,6,3, Total gates=19 */ t01 = x0 & x3 ; t02 = x1 ^ x2 ; t03 = x0 ^ x3 ; t04 = t01 ^ t02; t05 = x1 | x2 ; y1 = ~ t04; t07 = t03 & t05; t08 = x1 & y1 ; t09 = x0 | x2 ; t10 = t07 ^ t08; t11 = x1 | x3 ; t12 = x2 ^ t11; t13 = t09 ^ t10; y2 = ~ t13; t15 = y1 & t03; y3 = t12 ^ t07; t17 = x0 ^ x1 ; t18 = y2 ^ t15; y0 = t17 ^ t18; x0 = ((((y0))<<(13))| (((y0))>>>(32-(13)))) ; x2 = ((((y2))<<(3))| (((y2))>>>(32-(3)))) ; x1 = y1 ^ x0 ^ x2 ; x3 = y3 ^ x2 ^ (x0)<<3; x1 = ((((x1))<<(1))| (((x1))>>>(32-(1)))) ; x3 = ((((x3))<<(7))| (((x3))>>>(32-(7)))) ; x0 = x0 ^ x1 ^ x3 ; x2 = x2 ^ x3 ^ (x1 <<7); x0 = ((((x0))<<(5))| (((x0))>>>(32-(5)))) ; x2 = ((((x2))<<(22))| (((x2))>>>(32-(22)))) ; x0 ^= K[31*4+0]; x1 ^= K[31*4+1]; x2 ^= K[31*4+2]; x3 ^= K[31*4+3] ;/* S7: 1 13 15 0 14 8 2 11 7 4 12 10 9 3 5 6 *//* depth = 10,7,10,4, Total gates=19 */ t01 = x0 & x2 ; t02 = ~ x3 ; t03 = x0 & t02; t04 = x1 | t01; t05 = x0 & x1 ; t06 = x2 ^ t04; y3 = t03 ^ t06; t08 = x2 | y3 ; t09 = x3 | t05; t10 = x0 ^ t08; t11 = t04 & y3 ; y1 = t09 ^ t10; t13 = x1 ^ y1 ; t14 = t01 ^ y1 ; t15 = x2 ^ t05; t16 = t11 | t13; t17 = t02 | t14; y0 = t15 ^ t17; y2 = x0 ^ t16; x0 = y0; x1 = y1; x2 = y2; x3 = y3; x0 ^= K[32*4+0]; x1 ^= K[32*4+1]; x2 ^= K[32*4+2]; x3 ^= K[32*4+3] ; byte[] result = new byte[] { (byte)(x0), (byte)(x0 >>> 8), (byte)(x0 >>> 16), (byte)(x0 >>> 24), (byte)(x1), (byte)(x1 >>> 8), (byte)(x1 >>> 16), (byte)(x1 >>> 24), (byte)(x2), (byte)(x2 >>> 8), (byte)(x2 >>> 16), (byte)(x2 >>> 24), (byte)(x3), (byte)(x3 >>> 8), (byte)(x3 >>> 16), (byte)(x3 >>> 24) };if (DEBUG && debuglevel > 6) {System.out.println("CT="+toString(result));System.out.println();}if (DEBUG) trace(OUT, "blockEncrypt()"); return result; } /** * Decrypt exactly one block of ciphertext. * * @param in The ciphertext. * @param inOffset Index of in from which to start considering data. * @param sessionKey The session key to use for decryption. * @return The plaintext generated from a ciphertext using the session key. */ public static byte[] blockDecrypt (byte[] in, int inOffset, Object sessionKey) {if (DEBUG) trace(IN, "blockDecrypt("+in+", "+inOffset+", "+sessionKey+")"); int[] K = (int[]) sessionKey; int x0 = (in[inOffset++] & 0xFF) | (in[inOffset++] & 0xFF) << 8 | (in[inOffset++] & 0xFF) << 16 | (in[inOffset++] & 0xFF) << 24; int x1 = (in[inOffset++] & 0xFF) | (in[inOffset++] & 0xFF) << 8 | (in[inOffset++] & 0xFF) << 16 | (in[inOffset++] & 0xFF) << 24; int x2 = (in[inOffset++] & 0xFF) | (in[inOffset++] & 0xFF) << 8 | (in[inOffset++] & 0xFF) << 16 | (in[inOffset++] & 0xFF) << 24; int x3 = (in[inOffset++] & 0xFF) | (in[inOffset++] & 0xFF) << 8 | (in[inOffset++] & 0xFF) << 16 | (in[inOffset++] & 0xFF) << 24; int z, y0, y1, y2, y3; int t00, t01, t02, t03, t04, t05, t06, t07, t08, t09, t10; int t11, t12, t13, t14, t15, t16, t17, t18, t19; x0 ^= K[32*4+0]; x1 ^= K[32*4+1]; x2 ^= K[32*4+2]; x3 ^= K[32*4+3] ;/* InvS7: 3 0 6 13 9 14 15 8 5 12 11 7 10 1 4 2 *//* depth = 9,7,3,3, Total gates=18 */ t01 = x0 & x1 ; t02 = x0 | x1 ; t03 = x2 | t01; t04 = x3 & t02; y3 = t03 ^ t04; t06 = x1 ^ t04; t07 = x3 ^ y3 ; t08 = ~ t07; t09 = t06 | t08; t10 = x1 ^ x3 ; t11 = x0 | x3 ; y1 = x0 ^ t09; t13 = x2 ^ t06; t14 = x2 & t11; t15 = x3 | y1 ; t16 = t01 | t10; y0 = t13 ^ t15; y2 = t14 ^ t16; y0 ^= K[31*4+0]; y1 ^= K[31*4+1]; y2 ^= K[31*4+2]; y3 ^= K[31*4+3] ; x2 = (((( y2 ))<<(32-( 22 )))| ((( y2 ))>>>( 22 ))) ; x0 = (((( y0 ))<<(32-( 5 )))| ((( y0 ))>>>( 5 ))) ; x2 = x2 ^ y3 ^ ( y1 <<7); x0 = x0 ^ y1 ^ y3 ; x3 = (((( y3 ))<<(32-( 7 )))| ((( y3 ))>>>( 7 ))) ; x1 = (((( y1 ))<<(32-( 1 )))| ((( y1 ))>>>( 1 ))) ; x3 = x3 ^ x2 ^ ( x0 )<<3; x1 = x1 ^ x0 ^ x2 ; x2 = (((( x2 ))<<(32-( 3 )))| ((( x2 ))>>>( 3 ))) ; x0 = (((( x0 ))<<(32-( 13 )))| ((( x0 ))>>>( 13 ))) ;/* InvS6: 15 10 1 13 5 3 6 0 4 9 14 7 2 12 8 11 *//* depth = 5,3,8,6, Total gates=19 */ t01 = x0 ^ x2 ; t02 = ~ x2 ; t03 = x1 & t01; t04 = x1 | t02; t05 = x3 | t03; t06 = x1 ^ x3 ; t07 = x0 & t04; t08 = x0 | t02; t09 = t07 ^ t05; y1 = t06 ^ t08; y0 = ~ t09; t12 = x1 & y0 ; t13 = t01 & t05; t14 = t01 ^ t12; t15 = t07 ^ t13; t16 = x3 | t02; t17 = x0 ^ y1 ; y3 = t17 ^ t15; y2 = t16 ^ t14; y0 ^= K[30*4+0]; y1 ^= K[30*4+1]; y2 ^= K[30*4+2]; y3 ^= K[30*4+3] ; x2 = (((( y2 ))<<(32-( 22 )))| ((( y2 ))>>>( 22 ))) ; x0 = (((( y0 ))<<(32-( 5 )))| ((( y0 ))>>>( 5 ))) ; x2 = x2 ^ y3 ^ ( y1 <<7); x0 = x0 ^ y1 ^ y3 ; x3 = (((( y3 ))<<(32-( 7 )))| ((( y3 ))>>>( 7 ))) ; x1 = (((( y1 ))<<(32-( 1 )))| ((( y1 ))>>>( 1 ))) ; x3 = x3 ^ x2 ^ ( x0 )<<3; x1 = x1 ^ x0 ^ x2 ; x2 = (((( x2 ))<<(32-( 3 )))| ((( x2 ))>>>( 3 ))) ; x0 = (((( x0 ))<<(32-( 13 )))| ((( x0 ))>>>( 13 ))) ;/* InvS5: 8 15 2 9 4 1 13 14 11 6 5 3 7 12 10 0 *//* depth = 4,6,9,7, Total gates=17 */ t01 = x0 & x3 ; t02 = x2 ^ t01; t03 = x0 ^ x3 ; t04 = x1 & t02; t05 = x0 & x2 ; y0 = t03 ^ t04; t07 = x0 & y0 ; t08 = t01 ^ y0 ; t09 = x1 | t05; t10 = ~ x1 ; y1 = t08 ^ t09; t12 = t10 | t07; t13 = y0 | y1 ; y3 = t02 ^ t12; t15 = t02 ^ t13; t16 = x1 ^ x3 ; y2 = t16 ^ t15; y0 ^= K[29*4+0]; y1 ^= K[29*4+1]; y2 ^= K[29*4+2]; y3 ^= K[29*4+3] ; x2 = (((( y2 ))<<(32-( 22 )))| ((( y2 ))>>>( 22 ))) ; x0 = (((( y0 ))<<(32-( 5 )))| ((( y0 ))>>>( 5 ))) ; x2 = x2 ^ y3 ^ ( y1 <<7); x0 = x0 ^ y1 ^ y3 ; x3 = (((( y3 ))<<(32-( 7 )))| ((( y3 ))>>>( 7 ))) ; x1 = (((( y1 ))<<(32-( 1 )))| ((( y1 ))>>>( 1 ))) ; x3 = x3 ^ x2 ^ ( x0 )<<3; x1 = x1 ^ x0 ^ x2 ; x2 = (((( x2 ))<<(32-( 3 )))| ((( x2 ))>>>( 3 ))) ; x0 = (((( x0 ))<<(32-( 13 )))| ((( x0 ))>>>( 13 ))) ;/* InvS4: 5 0 8 3 10 9 7 14 2 12 11 6 4 15 13 1 *//* depth = 6,4,7,3, Total gates=17 */ t01 = x1 | x3 ; t02 = x2 | x3 ; t03 = x0 & t01; t04 = x1 ^ t02; t05 = x2 ^ x3 ; t06 = ~ t03; t07 = x0 & t04; y1 = t05 ^ t07; t09 = y1 | t06; t10 = x0 ^ t07; t11 = t01 ^ t09; t12 = x3 ^ t04; t13 = x2 | t10; y3 = t03 ^ t12; t15 = x0 ^ t04; y2 = t11 ^ t13; y0 = t15 ^ t09; y0 ^= K[28*4+0]; y1 ^= K[28*4+1]; y2 ^= K[28*4+2]; y3 ^= K[28*4+3] ; x2 = (((( y2 ))<<(32-( 22 )))| ((( y2 ))>>>( 22 ))) ; x0 = (((( y0 ))<<(32-( 5 )))| ((( y0 ))>>>( 5 ))) ; x2 = x2 ^ y3 ^ ( y1 <<7); x0 = x0 ^ y1 ^ y3 ; x3 = (((( y3 ))<<(32-( 7 )))| ((( y3 ))>>>( 7 ))) ; x1 = (((( y1 ))<<(32-( 1 )))| ((( y1 ))>>>( 1 ))) ; x3 = x3 ^ x2 ^ ( x0 )<<3; x1 = x1 ^ x0 ^ x2 ; x2 = (((( x2 ))<<(32-( 3 )))| ((( x2 ))>>>( 3 ))) ; x0 = (((( x0 ))<<(32-( 13 )))| ((( x0 ))>>>( 13 ))) ;/* InvS3: 0 9 10 7 11 14 6 13 3 5 12 2 4 8 15 1 *//* depth = 3,6,4,4, Total gates=17 */ t01 = x2 | x3 ; t02 = x0 | x3 ; t03 = x2 ^ t02; t04 = x1 ^ t02; t05 = x0 ^ x3 ; t06 = t04 & t03; t07 = x1 & t01; y2 = t05 ^ t06; t09 = x0 ^ t03; y0 = t07 ^ t03; t11 = y0 | t05; t12 = t09 & t11; t13 = x0 & y2 ; t14 = t01 ^ t05; y1 = x1 ^ t12; t16 = x1 | t13; y3 = t14 ^ t16; y0 ^= K[27*4+0]; y1 ^= K[27*4+1]; y2 ^= K[27*4+2]; y3 ^= K[27*4+3] ; x2 = (((( y2 ))<<(32-( 22 )))| ((( y2 ))>>>( 22 ))) ; x0 = (((( y0 ))<<(32-( 5 )))| ((( y0 ))>>>( 5 ))) ; x2 = x2 ^ y3 ^ ( y1 <<7); x0 = x0 ^ y1 ^ y3 ; x3 = (((( y3 ))<<(32-( 7 )))| ((( y3 ))>>>( 7 ))) ; x1 = (((( y1 ))<<(32-( 1 )))| ((( y1 ))>>>( 1 ))) ; x3 = x3 ^ x2 ^ ( x0 )<<3; x1 = x1 ^ x0 ^ x2 ; x2 = (((( x2 ))<<(32-( 3 )))| ((( x2 ))>>>( 3 ))) ; x0 = (((( x0 ))<<(32-( 13 )))| ((( x0 ))>>>( 13 ))) ;/* InvS2: 12 9 15 4 11 14 1 2 0 3 6 13 5 8 10 7 *//* depth = 3,6,8,3, Total gates=18 */ t01 = x0 ^ x3 ; t02 = x2 ^ x3 ; t03 = x0 & x2 ; t04 = x1 | t02; y0 = t01 ^ t04; t06 = x0 | x2 ; t07 = x3 | y0 ; t08 = ~ x3 ; t09 = x1 & t06; t10 = t08 | t03; t11 = x1 & t07;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -