ElsieBoy4 - Turn your Arduboy into an air-gapped LC4 appliance

elsieboy4.hex (38.5 KB)
elsieboy4_keyMod
ElsieBoy4 is an Elsiefour (LC4) appliance for Arduboy, bringing Alan Kaminsky’s strong by-hand encryption to your favorite platform.

If you aren’t familiar with LC4, read about this strong by-hand crypto here.

Features of ElsieBoy4 include:

  • Key entry/mod: Enter or view your key, and view the indexes.
  • Nonce entry/mod: Enter or view a six character nonce (you can manually do more chars).
  • Encode/Decode: Step through the encode/decode process. Reset state optional upon re-entry.
  • Status: View the current key state, step, marker position.
  • Safe: air-gapped, stateless, spy-approved.

Download via github: https://github.com/tfurrows/ElsieBoy4

1 Like

It runs great on my Arduboy hardware, but not so hot in the emulator. I may need to work on managing framerate. This is my first Arduboy project.

Added framerate, seems to have helped in the emulator, and not hurt anything on the physical hardware.

The emulator is… not perfect.

I think this idea for using Arduboy as a platform for cypto is interesting and one that is growing more. I thought it could be a cool bitcoin wallet if it just had some more crypto chip power.

By using delay instead of a proper loop and state machine you’re effectively bypassing the regular framerate management system.

The framerate system is supposed to work by measuring time between calls to arduboy.nextFrame(). The default framerate is 60 so each frame is expected to only take around 16 ms (⌊1000 / 60⌋ = 16).

Thanks for this hint. I need to learn how to replace all the delay() statements so that the timing is managed by the framerate.

I’ll certainly DDG the topic, but if you know of any resources that would be excellent!

Is this DuckDuckGo as opposed to Google the issue? If so, I have never seen that before :slight_smile:

chinese people baidu things

attempt at humor: actually they wechat their uncle

I don’t trust the G, the DDG at least pretends to care about privacy :dark_sunglasses:

2 Likes

I know what you mean!

I mean the abbreviation.

The typical pattern is along the lines of:

#include <Arduboy2.h>

enum class State
{
	A,
	B,
	C,
};

State state = State::A;

Arduboy2 arduboy;

void setup()
{
	arduboy.begin();
}

void loop()
{
	if(!arduboy.nextFrame())
		return;
		
	arduboy.pollButtons();
	
	arduboy.clear();
	
	switch(state)
	{
		case State::A:
			// Either put the code for state A here
			// or defer to a well-named function.
			break;
			
		case State::B:
			// Either put the code for state B here
			// or defer to a well-named function.
			break;
			
		case State::C:
			// Either put the code for state C here
			// or defer to a well-named function.
			break;
	}
	
	arduboy.display();
}

One day the world will learn to stop verbifying brand names.

Last decade ‘Skype’ was the verb for ‘video call’ (with the occasional ‘FaceTime’ here and there), this year it’s all ‘Zoom’.

I think the Brits pioneered that … Hoover for example.

Teams for us.

There’s plenty of examples that predate Hoover.
From the 19th century there’s Kerosene, Jell-O, Aspirin, Heroin.
The first is Canadian, the second is American (and is actually still a legal trademark) and the latter two are German (both made by the same company - Bayer).

Though the point at which something was trademarked isn’t the point at which it was genericised, so really it’s anyone’s guess as to what came first. :P

1 Like