On Fri, 14 Dec 2012, Niels Möller wrote:
The first item is a personal one. From January 7, I'll start working for Southpole Consulting AB, a small Sockholm-based consulting company mainly doing embedded (GNU/)Linux development.
Congrats! You can say hi to Benjamin from me :-)
Second item is more directly related to Nettle. I will get funding from Internetfonden, for "Adapting GNU Nettle for embedded systems". This will mean two things: Support for elliptic curve signatures (and possibly some other ECC-related things), and optimizations for the ARM architecture. The funding is for 420 hours of work, most of which will be spent during the spring, and the project will be carried out under the umbrella of Southpole Consulting.
A question for the list: Which variants of the ARM family are most important for Nettle applications? I'm not yet very familiar with the ARM world, but the following are some alternatives for testing and benchmarking:
- The current most high-end processor, Cortex-A15, where an affordable
development system seems to be a recent "chromebook". Not sure exactly which model, but I guess it's this one: http://www.amazon.co.uk/Samsung-Chromebook-Wifi-Latest-Model/dp/B009RF0AQ8/r...
- The previous "most high-end" processor, Cortex-A9. An affordable
development system is the PandaBoard. http://www.omappedia.com/wiki/PandaBoard_FAQ
- The Raspberry Pi computer, featuring an older (obsolete?) ARM1176JFZ,
"ARMv6" architecture. http://www.raspberrypi.org/faqs
- The low-end Cortex-M0, competing with less than $1 microcontrollers.
Also "ARMv6" architecture. An affordable development system seems to be LPCXPRESSO board. http://www.embeddedartists.com/products/lpcxpresso/lpc11U14_xpr.php
And if anybody here has some interesting ARM hardware to donate to the project, this is the right time.
As far as I know, for use in smartphones and similar, most current ones run ARMv7, on Cortex-A8/A9. In general, if targeting say android, your baseline ABIs will be either ARMv5TE or ARMv7 (with optional NEON support), but finding a good ARMv5 development platform might not be all that easy. I'm not too experienced myself with writing ARM assembly, but in general I'd guess your target arch simply depends on at what level the necessary instructions are introduced - I guess some basic stuff might benefit from just being written in general ARM assembly for ARMv5, while other things can benefit more from new instructions in v6 or v7.
I'm not sure how well suited the NEON instruction set is for the crypto things - if it is, it'll be one important target. Since it's an optional part in ARMv7 in general (the iOS ARMv7 baseline includes NEON, since they can limit the number of chipsets they run on, while Android ARMv7 doesn't include it - in particular, nvidia tegra2 based devices lack it), ideally one would be able to enable or disable it using a runtime check.
This is the case for 3rd party app developers at least, for device manufacturers it's enough to be able to enable/disable it at build time.
// Martin