|
|
@ -164,8 +164,9 @@ public class KISA_SEED_CBC { |
|
|
|
// R0, R1 : right input values at each round
|
|
|
|
// R0, R1 : right input values at each round
|
|
|
|
// K : round keys at each round
|
|
|
|
// K : round keys at each round
|
|
|
|
private static final void SeedRound(int[] T, int LR[], int L0, int L1, int R0, int R1, int[] K, int K_offset) { |
|
|
|
private static final void SeedRound(int[] T, int LR[], int L0, int L1, int R0, int R1, int[] K, int K_offset) { |
|
|
|
T[0] = LR[R0] ^ K[K_offset+0]; |
|
|
|
int offset = K_offset + 1; |
|
|
|
T[1] = LR[R1] ^ K[K_offset+1]; |
|
|
|
T[0] = LR[R0] ^ K[K_offset]; |
|
|
|
|
|
|
|
T[1] = LR[R1] ^ K[offset]; |
|
|
|
T[1] ^= T[0]; |
|
|
|
T[1] ^= T[0]; |
|
|
|
T[1] = SS0[GetB0(T[1])&0x0ff] ^ SS1[GetB1(T[1])&0x0ff] ^ |
|
|
|
T[1] = SS0[GetB0(T[1])&0x0ff] ^ SS1[GetB1(T[1])&0x0ff] ^ |
|
|
|
SS2[GetB2(T[1])&0x0ff] ^ SS3[GetB3(T[1])&0x0ff]; |
|
|
|
SS2[GetB2(T[1])&0x0ff] ^ SS3[GetB3(T[1])&0x0ff]; |
|
|
@ -870,10 +871,13 @@ public class KISA_SEED_CBC { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public static void byte_to_int(int[] dst, int dst_offset, byte[] src, int src_offset, int ENDIAN) { |
|
|
|
public static void byte_to_int(int[] dst, int dst_offset, byte[] src, int src_offset, int ENDIAN) { |
|
|
|
|
|
|
|
int offset1 = src_offset + 1; |
|
|
|
|
|
|
|
int offset2 = src_offset + 2; |
|
|
|
|
|
|
|
int offset3 = src_offset + 3; |
|
|
|
if(ENDIAN == BIG_ENDIAN) { |
|
|
|
if(ENDIAN == BIG_ENDIAN) { |
|
|
|
dst[dst_offset] = ((0x0ff&src[src_offset]) << 24) | ((0x0ff&src[src_offset+1]) << 16) | ((0x0ff&src[src_offset+2]) << 8) | ((0x0ff&src[src_offset+3])); |
|
|
|
dst[dst_offset] = ((0x0ff&src[src_offset]) << 24) | ((0x0ff&src[offset1]) << 16) | ((0x0ff&src[offset2]) << 8) | ((0x0ff&src[offset3])); |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
dst[dst_offset] = ((0x0ff&src[src_offset])) | ((0x0ff&src[src_offset+1]) << 8) | ((0x0ff&src[src_offset+2]) << 16) | ((0x0ff&src[src_offset+3]) << 24); |
|
|
|
dst[dst_offset] = ((0x0ff&src[src_offset])) | ((0x0ff&src[offset1]) << 8) | ((0x0ff&src[offset2]) << 16) | ((0x0ff&src[offset3]) << 24); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -921,7 +925,8 @@ public class KISA_SEED_CBC { |
|
|
|
if(n >= 32) |
|
|
|
if(n >= 32) |
|
|
|
return 0; |
|
|
|
return 0; |
|
|
|
int v = x >> n; |
|
|
|
int v = x >> n; |
|
|
|
int v_mask = ~(0x80000000 >> (n-1)); |
|
|
|
int shift = n - 1; |
|
|
|
|
|
|
|
int v_mask = ~(0x80000000 >> shift); |
|
|
|
return v & v_mask; |
|
|
|
return v & v_mask; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|