Welcome to the Engineering Research home page!

Engineering Research performs contract services for a wide variety of disciplines including embedded systems hardware and software, cryptographic software including elliptic curve math for IEEE P1363, DSP hardware and software design, and high energy, high power pulsed RF and magnetics for particle beams. If you have a problem, Engineering Research can solve it.

Below you'll find sources for Elliptic Curve Crypto algorithms and mathematics. For full documentation see "Implementing Elliptic Curve Cryptography"

I became interested in random bit generators a long time ago and finally decided to build one. The following post-script document describes how you too can convert a radioactive smoke detector into /dev/random (ps) or (pdf) [which was supplied by Eric Braeden]. If anyone duplicates this, I'd be interested in your results. As far as I know, there are no other radioactive RNG's that work the way this one does. Thanks to Terry Ritter for a great bibliography, every one of his references (and few of the papers those things referenced) were very useful.

I've begun looking at the Bussard form of fusion reactor. Documentation and some open source software will appear here.

The following routines implement normal basis elliptic curve mathematics and protocols. Included is Dave Dahm's fast inversion algorithm and Jim Gillogly's SHA-1. All files should link with any ANSI compiler. Feel free to use for any purpose. All I ask is that bugs be reported so I can fix them.

The header bigint.h contains #defines and structures for the large integer routines.

field2n.h contains #defines and structures for normal basis routines.

eliptic.h contains structures for elliptic curve mathematics routines.

protocols.h contains structures for the IEEE P1363 standards routines.

The file bigint.c contains low level large integer routines. These are crude, check out freelip and MIRACL for better packages. The file int_functions.c contains the few high level large integer routines needed in the IEEE protocols.

onb.c contains the normal basis mathematics routines.

eliptic.c contains the elliptic curve mathematics routines.

The files protocols1.c and onb_integer.c contain all the protocols described in IEEE P1363, although not exactly to the standard. Also included are Koblitz descriptions of three protocols for elliptic curves including Diffie-Hellman, El Gamal, and Massey-Omura key exchange.

sha.c was written by Jim Gillogly, I include it complete although only two routines are actually used in the protocols files.

polynomial versions of elliptic curve math can be found here: field2n.h, poly.h, eliptic.h, polymain.c, eliptic_poly.c, poly_protocol.c, poly_func.c.

An implementation of J. Silverman's Ring Multiply method can be found in ring.c

There is a special file for polynomial coefficients of a polynomial here: poly_poly.c.

Check out the Big Float project. This begins the process of trying to compute the number of points on an arbitary elliptic curve. In principle it should work for any basis, but my initial target is GF(2^m).

My attempt to implement Schoof's algorithm, can be found here. It's not bad for an amatuer, but compared to using bigfloat to computing curve orders via CM, it seems pointless. If anyone want's to make it work, I'll be glad to help, but it's time for me to give up on it.


For fun I have worked on a very difficult puzzle. Find out more here: Japanese ball puzzle

For more information, send e-mail to Dr. mike.

My resume and publications are in ascii format for easy transport.