- #include <SoftwareSerial.h>
-
- #define RX 3 // *** D3, Pin 2
- #define TX 4 // *** D4, Pin 3
- SoftwareSerial Serial(RX, TX);
-
- void setup() {
- Serial.begin(9600);
- Serial.println(" ");
- Serial.println("Initializing...");
- randomSeed(analogRead(0)); // Seed the random number generator for more randomness
- delay(2000); // Delay for initialization
- }
-
- void loop() {
- // Generate one random number and assign it to both variables
- volatile int originalNumber = random(10, 100);
- volatile int num1 = originalNumber;
- volatile int num2 = originalNumber;
-
- // Perform reversible operations to increase glitch susceptibility but keep values comparable
- num1 = num1 ^ 0x55; // XOR num1 with 0x55
- num2 = num2 ^ 0x55; // XOR num2 with 0x55
-
- delayMicroseconds(5); // Critical timing for glitches
-
- num1 = num1 ^ 0x55; // XOR again to reverse
- num2 = num2 ^ 0x55; // XOR again to reverse
-
- delayMicroseconds(5); // Another critical timing for glitches
-
- // Extract the first and second digits
- volatile int num1FirstDigit = num1 / 10; // Get the first digit of num1
- volatile int num1SecondDigit = num1 % 10; // Get the second digit of num1
-
- delayMicroseconds(5); // More chances for glitches
-
- volatile int num2FirstDigit = num2 / 10; // Get the first digit of num2
- volatile int num2SecondDigit = num2 % 10; // Get the second digit of num2
-
- delayMicroseconds(5); // Increased vulnerability
-
- // Check if the numbers still match after the potential glitch
- int match = 0;
- if (num1FirstDigit == num2FirstDigit) {
- if (num1SecondDigit == num2SecondDigit) {
- match = 1;
- }
- }
-
- if (match == 1) {
- Serial.print("Numbers match: "); Serial.print(num1); Serial.print(" "); Serial.print(num2); Serial.print("\r");
- } else {
- Serial.print("Glitch detected! Numbers do not match: ");
- Serial.print(num1); Serial.print(" "); Serial.print(num2);
- Serial.print(" ("); Serial.print(num1FirstDigit); Serial.print(":"); Serial.print(num1SecondDigit); Serial.print(") ");
- Serial.print("("); Serial.print(num2FirstDigit); Serial.print(":"); Serial.print(num2SecondDigit); Serial.println(")");
- Serial.println(" ");
- }
-
- delay(100); // Shorter delay to increase glitch detection chances
- }