#include<AESLib.h>
#include<AES.h>
#include<AES_config.h>
#include<base64.h>
#include <WiFi.h>
#define ssid "Wokwi-GUEST"
#define password ""
WiFiServer server(80);
AES aes;
byte cipher[1000];
char b64[1000];
WiFiClient client = server.available();
void do_encrypt(String data, String key, String iv_str){
byte iv[16];
memcpy(iv,(byte *)iv_str.c_str(),16);
int blen=base64_encode(b64,(char *)data.c_str(),data.length());
aes.calc_size_n_pad(blen);
int len=aes.get_size();
byte plain_p[len];
for(int i=0; i<blen; ++i) plain_p[i]=b64[i];
for(int i=blen; i<len; ++i) plain_p[i]='\0';
int blocks =len/16;
aes.set_key((byte *)data.c_str(),16);
aes.cbc_encrypt(plain_p,cipher,blocks,iv);
base64_encode(b64,(char *)cipher,len);
Serial.println("Encrypted data: "+String((char *)b64));
client.println(String((char *)b64));
}
void setup(){
Serial.begin(9600);
Serial.println();
Serial.println();
WiFi.begin(ssid,password,6);
WiFi.mode(WIFI_STA);
while(WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("Connected");
Serial.println("IP: ");
Serial.print(WiFi.localIP());
}
void loop(){
unsigned long timeout = millis();
while(millis()-timeout >5000){
Serial.println("Timeout");
delay(500);
}
Serial.println("New client");
String data = "hello from server";
String key = "aaaaaaaaaaaaaaaa";
String iv_str = "aaaaaaaaaaaaaaaa";
do_encrypt(data,key,iv_str);
}