|
@@ -15,8 +15,7 @@ void Words16ToBytes(u16 words[],u8 bytes[],int numwords)
|
|
|
|
|
|
void BytesToWords16(u8 bytes[],u16 words[],int numbytes)
|
|
void BytesToWords16(u8 bytes[],u16 words[],int numbytes)
|
|
{
|
|
{
|
|
- int i,j=0;
|
|
|
|
- for(i=0;i<numbytes/2;i++){
|
|
|
|
|
|
+ int i,j=0; for(i=0;i<numbytes/2;i++){
|
|
words[i]=(u16)bytes[j] | ((u16)bytes[j+1]<<8);
|
|
words[i]=(u16)bytes[j] | ((u16)bytes[j+1]<<8);
|
|
j+=2;
|
|
j+=2;
|
|
}
|
|
}
|
|
@@ -39,7 +38,10 @@ void Speck3264Encrypt(u16 Pt[],u16 Ct[],u16 rk[])
|
|
u16 i;
|
|
u16 i;
|
|
Ct[0]=Pt[0]; Ct[1]=Pt[1];
|
|
Ct[0]=Pt[0]; Ct[1]=Pt[1];
|
|
|
|
|
|
- for(i=0;i<22;) ER16(Ct[1],Ct[0],rk[i++]);
|
|
|
|
|
|
+ // full 22 rounds
|
|
|
|
+ // for(i=0;i<22;) ER16(Ct[1],Ct[0],rk[i++]);
|
|
|
|
+ //ER16(Ct[1],Ct[0],rk[0]);
|
|
|
|
+ ER16(Ct[1],Ct[0],0x65);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -52,8 +54,7 @@ void Speck3264Decrypt(u16 Pt[],u16 Ct[],u16 rk[])
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
-
|
|
|
|
-void EncryptBlock(u8 pt[], u8 k[], u8 ct[]) {
|
|
|
|
|
|
+void Speck3264_EncryptBlock(u8 pt[], u8 k[], u8 ct[]) {
|
|
|
|
|
|
u16 Pt[2] = {0};
|
|
u16 Pt[2] = {0};
|
|
u16 K[4] = {0};
|
|
u16 K[4] = {0};
|
|
@@ -65,22 +66,33 @@ void EncryptBlock(u8 pt[], u8 k[], u8 ct[]) {
|
|
|
|
|
|
Speck3264KeySchedule(K,rk);
|
|
Speck3264KeySchedule(K,rk);
|
|
|
|
|
|
|
|
+ // DEBUG Purposes
|
|
|
|
+
|
|
|
|
+ /*
|
|
for (int i=0; i < 16; i++)
|
|
for (int i=0; i < 16; i++)
|
|
{
|
|
{
|
|
printf("Key: 0x%x\n", rk[i]);
|
|
printf("Key: 0x%x\n", rk[i]);
|
|
}
|
|
}
|
|
|
|
+ */
|
|
Speck3264Encrypt(Pt,Ct,rk);
|
|
Speck3264Encrypt(Pt,Ct,rk);
|
|
Words16ToBytes(Ct,ct,2);
|
|
Words16ToBytes(Ct,ct,2);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+/*
|
|
|
|
|
|
int main() {
|
|
int main() {
|
|
|
|
|
|
- u8 key[8] = {0x1, 0x2,0x3,0x4,0x5,0x6,0x7,0x8};
|
|
|
|
- u8 pt[4] = {0xde, 0xad, 0xbe, 0xef};
|
|
|
|
|
|
+
|
|
|
|
+ // test are from https://github.com/inmcm/Simon_Speck_Ciphers
|
|
|
|
+ //u8 key[8] = {0x00, 0x01, 0x08, 0x09, 0x10, 0x11, 0x18, 0x19};
|
|
|
|
+ u8 pt[4] = {0x4c, 0x69, 0x74, 0x65};
|
|
|
|
+
|
|
|
|
+ u8 key[8] = {0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88};
|
|
|
|
+
|
|
|
|
+
|
|
u8 ct[4] = {0x0};
|
|
u8 ct[4] = {0x0};
|
|
|
|
|
|
- EncryptBlock(pt, key, ct);
|
|
|
|
|
|
+ Speck3264_EncryptBlock(pt, key, ct);
|
|
printf("[[ Speck 32/64 ]]\n");
|
|
printf("[[ Speck 32/64 ]]\n");
|
|
|
|
|
|
printf("The output: \n");
|
|
printf("The output: \n");
|
|
@@ -89,5 +101,4 @@ int main() {
|
|
}
|
|
}
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
-
|
|
|
|
-
|
|
|
|
|
|
+*/
|