-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy patharduino.ino
159 lines (159 loc) · 3.84 KB
/
arduino.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
#include <SPI.h>
#include <RF24.h>
#include <SoftwareSerial.h>
RF24 radio(9,10);
const uint64_t pipe=0xE8E8F0F0E1LL;
SoftwareSerial mySerial(2,3);
String kunciTPP="";
String input="";
void setup(){
Serial.begin(57600);
mySerial.begin(57600);
radio.begin();
delay(100);
radio.setDataRate(RF24_250KBPS);
radio.setRetries(15,15);
radio.setPALevel(RF24_PA_MIN);
radio.openWritingPipe(pipe);
radio.openReadingPipe(1,pipe);
radio.startListening();
randomSeed(analogRead(0));
}
void loop(){
if(mySerial.available()){
char inputSerial=(char)mySerial.read();
input=input+inputSerial;
}
if(input.length()==8){
if(kunciTPP==""){
pengirimTPP();
}
KirimData(input);
input="";
}
if(radio.available()){
if(kunciTPP==""){
penerimaTPP();
}
TerimaData();
}
}
String vernamCipher(String biner1,String biner2){
String tampungXor="";
for(int i=0;i<8;i++){
int hasil=((int)biner1.charAt(i)^(int)biner2.charAt(i));
tampungXor.concat(hasil);
}
return tampungXor;
}
void KirimKunci(String inputKunci){
bool rslt;
radio.stopListening();
char tampungKirim[8];
for(int i=0;i<8;i++){
int hasil=inputKunci.charAt(i);
tampungKirim[i]=hasil;
}
rslt=radio.write(&tampungKirim, sizeof(tampungKirim));
radio.startListening();
delay(500);
if(!rslt){
KirimKunci(inputKunci);
}
}
String TerimaKunci(){
char terimaKunci[8];
if(radio.available()){
radio.read(&terimaKunci, sizeof(terimaKunci) );
}
String tampungTerimaKunci="";
for(int i=0;i<8;i++){
tampungTerimaKunci.concat(terimaKunci[i]);
}
if(tampungTerimaKunci.length()==8){
return tampungTerimaKunci;
}else{
TerimaKunci();
}
}
void pengirimTPP(){
for(int i=0;i<8;i++){
long randNumber=random(2);
kunciTPP.concat(randNumber);
}
String kunciRandom="";
for(int i=0;i<8;i++){
long randNumber=random(2);
kunciRandom.concat(randNumber);
}
String tampungStep1=vernamCipher(kunciTPP,kunciRandom);
KirimKunci(tampungStep1);
String tampungStep2=TerimaKunci();
String tampungStep3=vernamCipher(tampungStep2,kunciRandom);
KirimKunci(tampungStep3);
return;
}
void KirimData(String inputEsp01){
String ciphertext=vernamCipher(inputEsp01,kunciTPP);
String tampungKunciBaru="";
for(int i=0;i<8;i++){
long randNumber=random(2);
tampungKunciBaru.concat(randNumber);
}
String ciphertext_kunci=vernamCipher(tampungKunciBaru,kunciTPP);
char tampungCiphertext[16];
for(int i=0;i<16;i++){
if(i<8){
tampungCiphertext[i]=ciphertext.charAt(i);
}else{
tampungCiphertext[i]=ciphertext_kunci.charAt(i-8);
}
}
bool rslt;
radio.stopListening();
rslt=radio.write(&tampungCiphertext, sizeof(tampungCiphertext));
if(rslt){
mySerial.print("O");
kunciTPP=tampungKunciBaru;
}else{
mySerial.print("E");
}
radio.startListening();
}
void penerimaTPP(){
if(radio.available()){
String kunciRandom="";
for(int i=0;i<8;i++){
long randNumber=random(2);
kunciRandom.concat(randNumber);
}
String tampungStep1=TerimaKunci();
String tampungStep2=vernamCipher(tampungStep1,kunciRandom);
KirimKunci(tampungStep2);
String tampungStep3=TerimaKunci();
kunciTPP=vernamCipher(tampungStep3,kunciRandom);
}
return;
}
void TerimaData(){
if(radio.available()){
char dataReceived[16];
radio.read(&dataReceived, sizeof(dataReceived) );
String ciphertext="";
String kunciBaru="";
for(int i=0;i<16;i++){
if(i<8){
ciphertext.concat(dataReceived[i]);
}else{
kunciBaru.concat(dataReceived[i]);
}
}
if(ciphertext.length()==8 && kunciBaru.length()==8){
String binerPlaintext=vernamCipher(ciphertext,kunciTPP);
String tampungKunciBaru=vernamCipher(kunciBaru,kunciTPP);
kunciTPP=tampungKunciBaru;
tampungKunciBaru="";
mySerial.print(binerPlaintext);
}
}
}