I’ve cross posted this to the Adafruit forums as well, so sorry for duplicating. After mentioning before that I’d been looking into Smart Config in detail I’ve finally written it all up and I thought you guys (particularly @zachary, @BDub, @zach and @Dave) would be interested:
So how does the Smart Config technology used to communicate a network name and password to a CC3000 module work?
It seems a little magical (or at least mysterious) at first - a Smart Config setup application must communicate information (the name and password) from a secure wifi network to a CC3000 enabled device that is not yet able to decrypt the traffic on that network.
How this is done is both clever and surprisingly simple. I’ve written up a set of posts that describe what’s going on.
The most technically detailed one covers the heart of Smart Config - how it encodes the SSID and keyphrase and transmits them such that a CC3000 can pick them up:
Then I have a post that’s less technical, more an opinion piece about why you should always use an AES key with Smart Config:
There is a technical bit in the middle that does describe briefly how you’d configure a cipher in Java with the necessary AES transformation needed to work as the CC3000 expects.
And finally the proof of the pudding - I wrote an application to emulate the Smart Config related behavior of the CC3000, i.e. it can recover the SSID and keyphrase transmitted by any Smart Config application without needing to be able to decrypt the relevant network traffic. You can find where to download the source and all the details here:
This should enable one to test the behavior of any Smart Config application one writes, i.e. one can see what a CC3000 would be able to reconstruct from the data transmitted by the application.
Hope you find it interesting. Sorry I do have a rather TL;DR style so some of the posts are very long.
Any feed back is greatly appreciated,