1 |
2 |
kfleming |
#include "md6.h"
|
2 |
|
|
#include "MD6Engine.h"
|
3 |
|
|
#include "cLib.h"
|
4 |
|
|
|
5 |
|
|
#define MD6CommunicationConstant 0xC0000
|
6 |
|
|
|
7 |
|
|
inline int MD6Send(Command command, RegisterAddr reg, short payload) {
|
8 |
|
|
int command_bits =(int)(((command & 0x1) << 31) | ((reg & 0x3fff) << 16) | ((payload & 0xffff) << 0));
|
9 |
|
|
return putValue(command_bits);
|
10 |
|
|
}
|
11 |
|
|
|
12 |
|
|
inline int MD6Receive(short *payload) {
|
13 |
|
|
int resp;
|
14 |
|
|
int value = getResponse(&resp);
|
15 |
|
|
if(MD6CommunicationConstant ^ (resp & 0xFFFF0000)) {
|
16 |
|
|
xil_printf("Communication may be corrupt\r\n");
|
17 |
|
|
}
|
18 |
|
|
*payload = (short) resp;
|
19 |
|
|
return value;
|
20 |
|
|
}
|
21 |
|
|
|
22 |
|
|
inline int MD6Write(RegisterAddr reg, short payload) {
|
23 |
|
|
return MD6Send(Write, reg, payload);
|
24 |
|
|
}
|
25 |
|
|
|
26 |
|
|
inline int MD6Read(RegisterAddr reg, short *payload) {
|
27 |
|
|
if(MD6Send(Read, reg, 0) < 0) {
|
28 |
|
|
return -1;
|
29 |
|
|
}
|
30 |
|
|
return MD6Receive(payload);
|
31 |
|
|
}
|
32 |
|
|
|
33 |
|
|
/*typedef enum {RoundRegister = 0,
|
34 |
|
|
TreeHeightRegister = 1,
|
35 |
|
|
LastCompressionRegister = 2,
|
36 |
|
|
PaddingBitsRegister = 3,
|
37 |
|
|
KeyLengthRegister = 4,
|
38 |
|
|
DigestLengthRegister = 5,
|
39 |
|
|
CompressionFunctionStatus = 6,
|
40 |
|
|
KeyRegisterBase = 7,
|
41 |
|
|
IdentifierRegisterBase = KeyRegisterBase + md6_k*(md6_w/16),
|
42 |
|
|
SourceRegisterBase = IdentifierRegisterBase + md6_u*(md6_w/16),
|
43 |
|
|
DestinationRegisterBase = SourceRegisterBase + 2,
|
44 |
|
|
TotalRegisters = DestinationRegisterBase + 2 } RegisterAddr;*/
|
45 |
|
|
|
46 |
|
|
char *registerAddrToString(RegisterAddr reg) {
|
47 |
|
|
switch(reg) {
|
48 |
|
|
case RoundRegister: return "RoundRegister";
|
49 |
|
|
case TreeHeightRegister: return "TreeHeightRegister";
|
50 |
|
|
case PaddingBitsRegister: return "PaddingBitsRegister";
|
51 |
|
|
case KeyLengthRegister: return "KeyLengthRegister";
|
52 |
|
|
case DigestLengthRegister: return "DigestLengthRegister";
|
53 |
|
|
case KeyRegisterBase: return "KeyRegisterBase";
|
54 |
|
|
case IdentifierRegisterBase: return "IdentifierRegisterBase";
|
55 |
|
|
case IdentifierRegisterBase + 1: return "IdentifierRegisterBase+1";
|
56 |
|
|
case IdentifierRegisterBase + 2: return "IdentifierRegisterBase+2";
|
57 |
|
|
case IdentifierRegisterBase + 3: return "IdentifierRegisterBase+3";
|
58 |
|
|
case CompressionFunctionStatus: return "CompressionFunctionStatus";
|
59 |
|
|
case SourceRegisterBase: return "SourceRegisterBase";
|
60 |
|
|
case SourceRegisterBase + 1: return "SourceRegisterBase + 1";
|
61 |
|
|
case DestinationRegisterBase: return "DestinationRegisterBase";
|
62 |
|
|
case DestinationRegisterBase + 1: return "DestinationRegisterBase + 1";
|
63 |
|
|
default: return "Uknown Register";
|
64 |
|
|
}
|
65 |
|
|
}
|