初始提交
This commit is contained in:
31
lib/playfair/playfair.c
Normal file
31
lib/playfair/playfair.c
Normal file
@ -0,0 +1,31 @@
|
||||
#include <stdint.h>
|
||||
|
||||
#include "playfair.h"
|
||||
|
||||
void generate_key_schedule(unsigned char* key_material, uint32_t key_schedule[11][4]);
|
||||
void generate_session_key(unsigned char* oldSap, unsigned char* messageIn, unsigned char* sessionKey);
|
||||
void cycle(unsigned char* block, uint32_t key_schedule[11][4]);
|
||||
void z_xor(unsigned char* in, unsigned char* out, int blocks);
|
||||
void x_xor(unsigned char* in, unsigned char* out, int blocks);
|
||||
|
||||
extern unsigned char default_sap[];
|
||||
|
||||
void playfair_decrypt(unsigned char* message3, unsigned char* cipherText, unsigned char* keyOut)
|
||||
{
|
||||
unsigned char* chunk1 = &cipherText[16];
|
||||
unsigned char* chunk2 = &cipherText[56];
|
||||
int i;
|
||||
unsigned char blockIn[16];
|
||||
unsigned char sapKey[16];
|
||||
uint32_t key_schedule[11][4];
|
||||
generate_session_key(default_sap, message3, sapKey);
|
||||
generate_key_schedule(sapKey, key_schedule);
|
||||
z_xor(chunk2, blockIn, 1);
|
||||
cycle(blockIn, key_schedule);
|
||||
for (i = 0; i < 16; i++) {
|
||||
keyOut[i] = blockIn[i] ^ chunk1[i];
|
||||
}
|
||||
x_xor(keyOut, keyOut, 1);
|
||||
z_xor(keyOut, keyOut, 1);
|
||||
}
|
||||
|
Reference in New Issue
Block a user