User | Revision | Line number | New contents of line |
dancanada |
0:849cb182c518
|
1
|
#include "mbed.h"
|
dancanada |
0:849cb182c518
|
2
|
#include <string>
|
dancanada |
0:849cb182c518
|
3
|
|
dancanada |
0:849cb182c518
|
4
|
DigitalOut myled1(LED1);
|
dancanada |
0:849cb182c518
|
5
|
DigitalOut myled2(LED2);
|
dancanada |
0:849cb182c518
|
6
|
DigitalOut myled3(LED3);
|
dancanada |
0:849cb182c518
|
7
|
DigitalOut myled4(LED4);
|
dancanada |
0:849cb182c518
|
8
|
|
dancanada |
0:849cb182c518
|
9
|
LocalFileSystem local("local"); // Create the local filesystem under the name "local"
|
dancanada |
0:849cb182c518
|
10
|
|
dancanada |
0:849cb182c518
|
11
|
//function protypes
|
dancanada |
0:849cb182c518
|
12
|
char encrypt(char c);
|
dancanada |
0:849cb182c518
|
13
|
void flashLights();
|
dancanada |
0:849cb182c518
|
14
|
|
dancanada |
0:849cb182c518
|
15
|
int main() {
|
dancanada |
0:849cb182c518
|
16
|
flashLights();
|
dancanada |
0:849cb182c518
|
17
|
//print to a file saved on the mbed mass storage device
|
dancanada |
0:849cb182c518
|
18
|
FILE *fp = fopen("/local/out.txt", "w"); // Open "out.txt" on the local file system for writing
|
dancanada |
0:849cb182c518
|
19
|
fprintf(fp, "Hello text doc World!");
|
dancanada |
0:849cb182c518
|
20
|
fclose(fp);
|
dancanada |
0:849cb182c518
|
21
|
|
dancanada |
0:849cb182c518
|
22
|
//print some more
|
dancanada |
0:849cb182c518
|
23
|
fp = fopen("/local/out.txt", "a"); // Open "out.txt" on the local file system for writing, appending
|
dancanada |
0:849cb182c518
|
24
|
fprintf(fp, " log begins here: /n");
|
dancanada |
0:849cb182c518
|
25
|
fclose(fp);
|
dancanada |
0:849cb182c518
|
26
|
|
dancanada |
0:849cb182c518
|
27
|
//print to the serial port, that requres an extra driver for xp
|
dancanada |
0:849cb182c518
|
28
|
Serial pc(USBTX, USBRX); // tx, rx
|
dancanada |
0:849cb182c518
|
29
|
pc.printf("Hello serial comms World!\n");
|
dancanada |
0:849cb182c518
|
30
|
|
dancanada |
0:849cb182c518
|
31
|
bool commandIncoming=false; //using a singal char to then expect a command char
|
dancanada |
0:849cb182c518
|
32
|
bool echoOn=true; //echo will eventually be output to the other USB port, and will be renamed pass through
|
dancanada |
0:849cb182c518
|
33
|
bool loggingOn=true; //log all the chars pressed to a text file
|
dancanada |
0:849cb182c518
|
34
|
bool encrypting=false; //encrypting using the one time pad - exclude output chars * and others(todo: make a output map)
|
dancanada |
0:849cb182c518
|
35
|
char cOut; //the char being echod (or put out to the PC), is the cyphertext if encrypting is true
|
dancanada |
0:849cb182c518
|
36
|
char c; //the char coming in from the keyboard
|
dancanada |
0:849cb182c518
|
37
|
|
dancanada |
0:849cb182c518
|
38
|
while (1) {
|
dancanada |
0:849cb182c518
|
39
|
|
dancanada |
0:849cb182c518
|
40
|
//get a char from the keyboard (USB input)
|
dancanada |
0:849cb182c518
|
41
|
c = pc.getc();
|
dancanada |
0:849cb182c518
|
42
|
|
dancanada |
0:849cb182c518
|
43
|
if (loggingOn) {
|
dancanada |
0:849cb182c518
|
44
|
fp = fopen("/local/out.txt", "a"); // Open "out.txt" on the local file system for writing, appending
|
dancanada |
0:849cb182c518
|
45
|
//todo: find a nicer way of doing this
|
dancanada |
0:849cb182c518
|
46
|
string s;
|
dancanada |
0:849cb182c518
|
47
|
s = c;
|
dancanada |
0:849cb182c518
|
48
|
fprintf(fp,"%s",s);
|
dancanada |
0:849cb182c518
|
49
|
fclose(fp);
|
dancanada |
0:849cb182c518
|
50
|
}
|
dancanada |
0:849cb182c518
|
51
|
//responsible for the output (at the moment to the serial comms, but eventually to the PC (USB output))
|
dancanada |
0:849cb182c518
|
52
|
if (c!='*'&&!commandIncoming && echoOn) {
|
dancanada |
0:849cb182c518
|
53
|
if (encrypting) {
|
dancanada |
0:849cb182c518
|
54
|
cOut = encrypt(c);
|
dancanada |
0:849cb182c518
|
55
|
} else {
|
dancanada |
0:849cb182c518
|
56
|
cOut = c;
|
dancanada |
0:849cb182c518
|
57
|
}
|
dancanada |
0:849cb182c518
|
58
|
pc.putc(cOut);
|
dancanada |
0:849cb182c518
|
59
|
}
|
dancanada |
0:849cb182c518
|
60
|
if (commandIncoming) {
|
dancanada |
0:849cb182c518
|
61
|
commandIncoming = false;
|
dancanada |
0:849cb182c518
|
62
|
//password recall
|
dancanada |
0:849cb182c518
|
63
|
if (c=='p') {
|
dancanada |
0:849cb182c518
|
64
|
pc.puts("default password");
|
dancanada |
0:849cb182c518
|
65
|
}
|
dancanada |
0:849cb182c518
|
66
|
//username recall
|
dancanada |
0:849cb182c518
|
67
|
if (c=='u') {
|
dancanada |
0:849cb182c518
|
68
|
pc.puts("default username");
|
dancanada |
0:849cb182c518
|
69
|
}
|
dancanada |
0:849cb182c518
|
70
|
//echo on/ off - debug (should be on all the time)
|
dancanada |
0:849cb182c518
|
71
|
if (c=='e') {
|
dancanada |
0:849cb182c518
|
72
|
if (echoOn==true) {
|
dancanada |
0:849cb182c518
|
73
|
pc.puts("key echo off");
|
dancanada |
0:849cb182c518
|
74
|
echoOn=false;
|
dancanada |
0:849cb182c518
|
75
|
myled1 = 1;
|
dancanada |
0:849cb182c518
|
76
|
} else {
|
dancanada |
0:849cb182c518
|
77
|
//when passing through myled1 is dim
|
dancanada |
0:849cb182c518
|
78
|
pc.puts("key echo on");
|
dancanada |
0:849cb182c518
|
79
|
echoOn=true;
|
dancanada |
0:849cb182c518
|
80
|
myled1 = 0;
|
dancanada |
0:849cb182c518
|
81
|
}
|
dancanada |
0:849cb182c518
|
82
|
}
|
dancanada |
0:849cb182c518
|
83
|
//dump keylogged data (paste anywhere functionality)
|
dancanada |
0:849cb182c518
|
84
|
if (c=='d') {
|
dancanada |
0:849cb182c518
|
85
|
pc.puts("the data");
|
dancanada |
0:849cb182c518
|
86
|
//recall the last x keys pressed or pull data from the txt file
|
dancanada |
0:849cb182c518
|
87
|
}
|
dancanada |
0:849cb182c518
|
88
|
if (c=='l') {
|
dancanada |
0:849cb182c518
|
89
|
if (loggingOn==true) {
|
dancanada |
0:849cb182c518
|
90
|
pc.puts("key logging off");
|
dancanada |
0:849cb182c518
|
91
|
loggingOn=false;
|
dancanada |
0:849cb182c518
|
92
|
//when loggingOn myled1 is dim
|
dancanada |
0:849cb182c518
|
93
|
myled2 = 1;
|
dancanada |
0:849cb182c518
|
94
|
} else {
|
dancanada |
0:849cb182c518
|
95
|
pc.puts("key logging on");
|
dancanada |
0:849cb182c518
|
96
|
loggingOn=true;
|
dancanada |
0:849cb182c518
|
97
|
myled2 = 0;
|
dancanada |
0:849cb182c518
|
98
|
}
|
dancanada |
0:849cb182c518
|
99
|
}
|
dancanada |
0:849cb182c518
|
100
|
if (c=='c') {
|
dancanada |
0:849cb182c518
|
101
|
if (encrypting==true) {
|
dancanada |
0:849cb182c518
|
102
|
pc.puts("exiting the encryption mode");
|
dancanada |
0:849cb182c518
|
103
|
encrypting = false;
|
dancanada |
0:849cb182c518
|
104
|
//when encrypting myled3 is bright
|
dancanada |
0:849cb182c518
|
105
|
myled3 = 0;
|
dancanada |
0:849cb182c518
|
106
|
} else {
|
dancanada |
0:849cb182c518
|
107
|
pc.puts("entering the encryption mode - command keys are the same as before");
|
dancanada |
0:849cb182c518
|
108
|
encrypting = true;
|
dancanada |
0:849cb182c518
|
109
|
myled3 = 1;
|
dancanada |
0:849cb182c518
|
110
|
}
|
dancanada |
0:849cb182c518
|
111
|
}
|
dancanada |
0:849cb182c518
|
112
|
}
|
dancanada |
0:849cb182c518
|
113
|
//if the key is the start of a command, read the next key as a command (ie *p means output password)
|
dancanada |
0:849cb182c518
|
114
|
if (c== '*') {
|
dancanada |
0:849cb182c518
|
115
|
commandIncoming = true;
|
dancanada |
0:849cb182c518
|
116
|
}
|
dancanada |
0:849cb182c518
|
117
|
}
|
dancanada |
0:849cb182c518
|
118
|
}
|
dancanada |
0:849cb182c518
|
119
|
|
dancanada |
0:849cb182c518
|
120
|
//eventually have this a one time pad, drawing chars from another file,
|
dancanada |
0:849cb182c518
|
121
|
//deleting them as they go, and somehow having them not readable while in storage
|
dancanada |
0:849cb182c518
|
122
|
char encrypt(char c) {
|
dancanada |
0:849cb182c518
|
123
|
return (c+1);
|
dancanada |
0:849cb182c518
|
124
|
}
|
dancanada |
0:849cb182c518
|
125
|
|
dancanada |
0:849cb182c518
|
126
|
void flashLights() {
|
dancanada |
0:849cb182c518
|
127
|
//blink some lights
|
dancanada |
0:849cb182c518
|
128
|
myled1 = 1;
|
dancanada |
0:849cb182c518
|
129
|
wait(0.2);
|
dancanada |
0:849cb182c518
|
130
|
myled1 = 0;
|
dancanada |
0:849cb182c518
|
131
|
wait(0.2);
|
dancanada |
0:849cb182c518
|
132
|
|
dancanada |
0:849cb182c518
|
133
|
myled1 = 1;
|
dancanada |
0:849cb182c518
|
134
|
myled2 = 1;
|
dancanada |
0:849cb182c518
|
135
|
myled3 = 1;
|
dancanada |
0:849cb182c518
|
136
|
myled4 = 1;
|
dancanada |
0:849cb182c518
|
137
|
|
dancanada |
0:849cb182c518
|
138
|
wait(0.2);
|
dancanada |
0:849cb182c518
|
139
|
myled1 = 0;
|
dancanada |
0:849cb182c518
|
140
|
myled2 = 0;
|
dancanada |
0:849cb182c518
|
141
|
myled3 = 0;
|
dancanada |
0:849cb182c518
|
142
|
myled4 = 0;
|
dancanada |
0:849cb182c518
|
143
|
}
|