/ninty-233

C99 library of ECC operations for the Nintendo Wii and iQue Player

Primary LanguageCGNU General Public License v3.0GPL-3.0

ninty-233

ninty-233 is a C99 library for ECC operations using sect233r1 / NIST B-233, the curve used in the iQue Player and Nintendo Wii.

It can be used for ECDH (used to create some encryption keys on the iQue Player) and ECDSA signing/verification (used to sign game saves on both consoles and to sign recrypt.sys on the iQue Player).

ninty-233 should NOT be expected to be secure; it is intended to be used as a tool for working with keys and/or data that are already known (made obvious by the fact that there is no function provided for generating keys). In its current state, I expect it to be vulnerable to various attacks (e.g. the GF(2^m) element and elliptic curve point arithmetic operations are not resistant to timing analysis). The generate_k() function in particular is not cryptographically secure, and is simply a trivial implementation that will allow, for example, signing homebrew apps.

ninty-233 currently requires an architecture with unsigned integer types of exactly 8 and 32 bits - that is, both uint8_t and uint32_t must be defined. This likely isn't a problem for literally anyone, but it's probably good to know before compiling for a calculator or something.

Arbitrary-precision arithmetic is done using the GNU MP library in the form of mini-gmp, a standalone subset of GMP.

The SHA1 implementation is a slightly modified version of the public domain WjCryptLib implementation from WaterJuice et al.

ninty-233 is licensed under the GPLv3 or (at your option) any later version (and I've opted to use GMP under the same license).