During some experiments with ruby cryptography, I found some problems with
the existing Bignum classes. These problems were primarily focused around
certain lacking features required to do more complex operations as well as
some number theory ones. After examining the existing Bignum code, I found
it would be simpler and yield larger results to work on an alternative. I
had at the time been working with libtommath, a public domain math library
with all the functions I required and more. In addition, it's API made it
extremely easy to create a simple, thin, easy layer between ruby and the
library. And thus MBignum was born.

Early uses found it extremely easy to integrate as an alternative to Bignum.
My Crypt::RSA, Crypt::DSS, and Crypt::ElGamal implementations become simple,
elegant, and importantly, fast.

And thus I propose that we integrate MBignum into the ruby core as Bignum,
replacing the current implementation. This will give ruby more builtin
mathematical power and allow other core developers the ability to
concentrate on other issues. Licensing wise, there is no problem. Tom St.
Denis, the author of libtommath, has released libtommath as public domain. I
believe that we should of course give him credit if and when we integrate
his work.

And now, for the code:

Current MBignum release:
http://dark-ruby.org/release/ruby-mbignum-current.tar.gz
Current Crypt::RSA: http://dark-ruby.org/release/ruby-rsa-current.tar.gz

Crypt::DSS and Crypt::ElGamal are currently unreleased but should be out
this week.

As always, comments, concerns, and criticisms are welcome.

Enjoy the code.

Evan M. Webb // evan / fallingsnow.net