Skip to content
This repository was archived by the owner on Sep 2, 2019. It is now read-only.

Commit 57821f1

Browse files
committed
small fixes
1 parent f9c4967 commit 57821f1

25 files changed

+16377
-16124
lines changed

Core/classes/sources/newdes.h

+3-16
Original file line numberDiff line numberDiff line change
@@ -15,37 +15,24 @@
1515
#define _TEGGO_EXPORTABLE
1616
#endif
1717

18+
#include <libhash/NDES.h>
19+
1820
namespace teggo
1921
{
2022

2123
struct NEWDES_Cipher // trivial 'aka C' structure
2224
{
23-
enum { BLOCK_BYTES = 8 };
24-
enum { KEY_BYTES = 15 };
25-
enum { UNRAV_BYTES = 60 };
26-
enum { UNRAV_BYTES_1 = 68 };
27-
enum _CONFIGURE_FLAG { ENCRYPTION, DECRYPTION };
25+
NDES_CONTEXT ctx;
2826

2927
_TEGGO_EXPORTABLE void SetupEncipher(void const* key);
3028
_TEGGO_EXPORTABLE void SetupDecipher(void const* key);
3129
_TEGGO_EXPORTABLE void DoCipher(void* data, u32_t count_of_blocks);
3230
_TEGGO_EXPORTABLE void DoCipherCBCI(void* data, u32_t count_of_blocks, uint64_t IVc = 0);
3331
_TEGGO_EXPORTABLE void DoCipherCBCO(void* data, u32_t count_of_blocks, uint64_t IVc = 0);
3432
_TEGGO_EXPORTABLE void DoCipherBlock(void* b);
35-
_TEGGO_EXPORTABLE void Normalize_(byte_t const* kunrav);
36-
37-
union
38-
{
39-
unsigned _;
40-
unsigned char key_unrav[UNRAV_BYTES_1];
41-
};
4233
};
4334
}
4435

45-
//#if defined _X86_ASSEMBLER
46-
extern "C" void NEWDES_DoCipher_S(void const* key,void* b,int count);
47-
//#endif
48-
4936
#include "./newdes.inl"
5037

5138
#endif // ___6ea1d37e_eace_4986_b99a_fcd335057356___

Core/classes/sources/newdes.inl

+18-122
Original file line numberDiff line numberDiff line change
@@ -21,161 +21,57 @@ namespace teggo
2121
# define _TEGGO_NEWDES_FAKE_INLINE CXX_FAKE_INLINE
2222
#endif
2323

24-
CXX_FAKE_INLINE
25-
void NEWDES_Cipher::Normalize_(byte_t const* kunrav)
26-
{
27-
int i,j;
28-
memset(key_unrav,0,sizeof(key_unrav));
29-
for ( i = 0; i < 9; ++i )
30-
{
31-
for ( j = 0; j < 4; ++j )
32-
key_unrav[i*8+j] = kunrav[i*7+j];
33-
if ( i < 8 )
34-
{
35-
key_unrav[i*8+j] = kunrav[i*7+j]; ++j;
36-
key_unrav[i*8+j+1] = kunrav[i*7+j]; ++j;
37-
key_unrav[i*8+j+1] = kunrav[i*7+j]; ++j;
38-
}
39-
}
40-
}
41-
42-
4324
_TEGGO_NEWDES_FAKE_INLINE
4425
void NEWDES_Cipher::SetupEncipher(void const* key)
4526
{
46-
int i,j;
47-
#if defined _X86_ASSEMBLER
48-
byte_t kunrav[UNRAV_BYTES];
49-
#else
50-
byte_t* kunrav = key_unrav;
51-
#endif
52-
for ( j=0; j < UNRAV_BYTES; )
53-
for ( i=0; i < KEY_BYTES; ++i)
54-
kunrav[j++] = ((byte_t const*)key)[i];
55-
#if defined _X86_ASSEMBLER
56-
Normalize_(kunrav);
57-
#endif
27+
NDES_Init_Encipher(&ctx,key);
5828
}
5929

6030
_TEGGO_NEWDES_FAKE_INLINE
61-
void NEWDES_Cipher::SetupDecipher(void const* _key)
31+
void NEWDES_Cipher::SetupDecipher(void const* key)
6232
{
63-
#if defined _X86_ASSEMBLER
64-
byte_t kunrav[UNRAV_BYTES];
65-
#else
66-
byte_t* kunrav = key_unrav;
67-
#endif
68-
byte_t* k = kunrav;
69-
byte_t const* key = (byte_t const*)_key;
70-
int i = 11, j=0;
71-
while (1)
72-
{
73-
*(k++) = key[i];
74-
i = ((i+1) % KEY_BYTES );
75-
*(k++) = key[i];
76-
i = ((i+1) % KEY_BYTES );
77-
*(k++) = key[i];
78-
i = ((i+1) % KEY_BYTES );
79-
80-
*(k++) = key[i];
81-
i = (i+9) % 15;
82-
if (i == 12) break;
83-
84-
*(k++) = key[i++];
85-
*(k++) = key[i++];
86-
*(k++) = key[i];
87-
i = (i+9) % 15;
88-
}
89-
#if defined _X86_ASSEMBLER
90-
Normalize_(kunrav);
91-
#endif
33+
NDES_Init_Decipher(&ctx,key);
9234
}
9335

9436
_TEGGO_NEWDES_FAKE_INLINE
95-
void NEWDES_Cipher::DoCipherBlock(void* _b)
37+
void NEWDES_Cipher::DoCipherBlock(void* b)
9638
{
97-
#if defined _X86_ASSEMBLER
98-
NEWDES_DoCipher_S(key_unrav,_b,1);
99-
#else
100-
static byte_t rotor[] =
101-
{
102-
32,137,239,188,102,125,221, 72,212, 68, 81, 37, 86,237,147,149,
103-
70,229, 17,124,115,207, 33, 20,122,143, 25,215, 51,183,138,142,
104-
146,211,110,173, 1,228,189, 14,103, 78,162, 36,253,167,116,255,
105-
158, 45,185, 50, 98,168,250,235, 54,141,195,247,240, 63,148, 2,
106-
224,169,214,180, 62, 22,117,108, 19,172,161,159,160, 47, 43,171,
107-
194,175,178, 56,196,112, 23,220, 89, 21,164,130,157, 8, 85,251,
108-
216, 44, 94,179,226, 38, 90,119, 40,202, 34,206, 35, 69,231,246,
109-
29,109, 74, 71,176, 6, 60,145, 65, 13, 77,151, 12,127, 95,199,
110-
57,101, 5,232,150,210,129, 24,181, 10,121,187, 48,193,139,252,
111-
219, 64, 88,233, 96,128, 80, 53,191,144,218, 11,106,132,155,104,
112-
91,136, 31, 42,243, 66,126,135, 30, 26, 87,186,182,154,242,123,
113-
82,166,208, 39,152,190,113,205,114,105,225, 84, 73,163, 99,111,
114-
204, 61,200,217,170, 15,198, 28,192,254,134,234,222, 7,236,248,
115-
201, 41,177,156, 92,131, 67,249,245,184,203, 9,241, 0, 27, 46,
116-
133,174, 75, 18, 93,209,100,120, 76,213, 16, 83, 4,107,140, 52,
117-
58, 55, 3,244, 97,197,238,227,118, 49, 79,230,223,165,153, 59
118-
};
119-
120-
unsigned char* k = key_unrav;
121-
byte_t* b = (byte_t*)_b;
122-
for (int count=8; count--;)
123-
{
124-
b[4] = b[4] ^ rotor[b[0] ^ *(k++)];
125-
b[5] = b[5] ^ rotor[b[1] ^ *(k++)];
126-
b[6] = b[6] ^ rotor[b[2] ^ *(k++)];
127-
b[7] = b[7] ^ rotor[b[3] ^ *(k++)];
128-
129-
b[1] = b[1] ^ rotor[b[4] ^ *(k++)];
130-
b[2] = b[2] ^ rotor[b[4] ^ b[5]];
131-
b[3] = b[3] ^ rotor[b[6] ^ *(k++)];
132-
b[0] = b[0] ^ rotor[b[7] ^ *(k++)];
133-
}
134-
b[4] = b[4] ^ rotor[b[0] ^ *(k++)];
135-
b[5] = b[5] ^ rotor[b[1] ^ *(k++)];
136-
b[6] = b[6] ^ rotor[b[2] ^ *(k++)];
137-
b[7] = b[7] ^ rotor[b[3] ^ *(k++)];
138-
#endif
39+
NDES_Cipher_8(&ctx,b);
13940
}
14041

14142
_TEGGO_NEWDES_FAKE_INLINE
14243
void NEWDES_Cipher::DoCipher(void* data,u32_t count)
14344
{
144-
#if defined _X86_ASSEMBLER
145-
NEWDES_DoCipher_S(key_unrav,(byte_t*)data,count);
146-
#else
147-
for (u32_t i = 0; i < count; ++i)
148-
DoCipherBlock((byte_t*)data+BLOCK_BYTES*i);
149-
#endif
45+
NDES_Cipher(&ctx,data,count);
15046
}
15147

15248
_TEGGO_NEWDES_FAKE_INLINE
15349
void NEWDES_Cipher::DoCipherCBCI(void* data,u32_t count, uint64_t IVc)
15450
{
155-
byte_t q[BLOCK_BYTES] = {0};
51+
byte_t q[NDES_BLOCK_BYTES] = {0};
15652
if (IVc) memcpy(q,&IVc,8);
15753
for (u32_t i = 0; i < count; ++i)
15854
{
159-
for ( int j =0; j < BLOCK_BYTES; ++j )
160-
*((byte_t*)data+BLOCK_BYTES*i+j) ^= *(q+j);
161-
DoCipherBlock((byte_t*)data+BLOCK_BYTES*i);
162-
memcpy(q,(byte_t*)data+BLOCK_BYTES*i,BLOCK_BYTES);
55+
for ( int j =0; j < NDES_BLOCK_BYTES; ++j )
56+
*((byte_t*)data+NDES_BLOCK_BYTES*i+j) ^= *(q+j);
57+
DoCipherBlock((byte_t*)data+NDES_BLOCK_BYTES*i);
58+
memcpy(q,(byte_t*)data+NDES_BLOCK_BYTES*i,NDES_BLOCK_BYTES);
16359
}
16460
}
16561

16662
_TEGGO_NEWDES_FAKE_INLINE
16763
void NEWDES_Cipher::DoCipherCBCO(void* data,u32_t count, uint64_t IVc)
16864
{
169-
byte_t q[BLOCK_BYTES] = {0};
65+
byte_t q[NDES_BLOCK_BYTES] = {0};
17066
if (IVc) memcpy(q,&IVc,8);
17167
for (u32_t i = 0; i < count; ++i)
17268
{
173-
byte_t w[BLOCK_BYTES];
174-
memcpy(w,(byte_t*)data+BLOCK_BYTES*i,BLOCK_BYTES);
175-
DoCipherBlock((byte_t*)data+BLOCK_BYTES*i);
176-
for ( int j =0; j < BLOCK_BYTES; ++j )
177-
*((byte_t*)data+BLOCK_BYTES*i+j) ^= *(q+j);
178-
memcpy(q,w,BLOCK_BYTES);
69+
byte_t w[NDES_BLOCK_BYTES];
70+
memcpy(w,(byte_t*)data+NDES_BLOCK_BYTES*i,NDES_BLOCK_BYTES);
71+
DoCipherBlock((byte_t*)data+NDES_BLOCK_BYTES*i);
72+
for ( int j =0; j < NDES_BLOCK_BYTES; ++j )
73+
*((byte_t*)data+NDES_BLOCK_BYTES*i+j) ^= *(q+j);
74+
memcpy(q,w,NDES_BLOCK_BYTES);
17975
}
18076
}
18177

0 commit comments

Comments
 (0)