Storing multiple wifi credentials


Is it possible to get an imp to store multiple wifi credentials and then cycle through them to get a connection. A bit like how your computer remembers a list of wifi networks to join.

I could write something squirrel side but it wouldn’t be secure as I’d have to store the wifi passwords in plaintext.


Yes, I store a dict of ssid/pwd and scan wifi and connect to the first one who’s credentials are known. If you can’t store plain text pwds, maybe you could send them to the device via http, and store them in the NV table or memory?


Yes, very possible to do this and several customers do just that in squirrel; the credentials do, however, have to be stored somewhere.

Release 36 is scheduled to get local storage for squirrel (within the imp’s internal config pages), so when that arrives you can do that.


Is that a secure area to store these things then?


Yes, it’s either on-die (imp001/2/3/4) or encrypted with a per-device key and AES-GCM+AEAD protected off-die (imp005)


Has local storage of WiFi credentials been implemented yet? If so, can someone point me to some documentation? If not, what is the ETA?


As noted above, release 36 (which is on all developer devices now, and production devices that have opted in), has secure storage available to squirrel.

With this, you can securely hold multiple sets of credentials on a device (separate from the code) and use code to switch between them, scan networks & pick the best one, alternate settings based on time, etc.

However, this happening automatically is not part of the OS at this point. Different customers have different requirements for multi network support so we have not built this in. A simplistic multi-network setup has been on our roadmap for a while, but in the meantime it turned out that this wouldn’t really satisfy anything beyond the most simple use cases.

It’ll still happen at some point, but no fixed release schedule right now.