# Large-Integer Arithmetic

The computational demands of modern cipher systems center around ordinary arithmetic of large integers. These days, that means several hundred decimal digits. In order to try out some of these cryptographic algorithms, we will need a facility that can do these computations.

There is a lot of software out available that offers these facilities. At the minimum, the package should include

• Addition, subtraction and multiplication of integers;

• Quotient and remainder when one integer is divided by another (ie., integer division and `mod');

• Integer exponentiation and multiplicative inverses modulo an integer (ie., a^b mod c, where a,b,c are integers)

In the above, "integer" means an arbitrarily large integer. Let me stress that it will not be sufficient to use the built-in arithmetic in a typical C compiler to do the assignments in a typical cryptography course. Of course, it would be nice if the platform you choose offers additional facilities like the ability to format output and write little programs. But you can probably get by without those.

I urge you, especially if you are taking the course by distance education, to investigate one of these systems as soon as possible. I'll try to think up a few "exercises" you can use to test your system out. What follows is a brief discussion of some of the packages that are out there. Much of this commentary was written in December 1999, so it may be a bit out of date. If you don't already know how to use one of these packages, I'd recommend that you try Pari. It is free, fairly easy to use, and available precompiled for most systems.

## Pari-GP

The platform that I will use to demonstrate in class (although I don't do a lot of demonstrations) is called Pari-GP. Pari is a library of functions (written in C, I think). GP is a simple character-based interactive front-end for Pari that runs in a terminal window. There is a Pari home page with more information. Pari-GP has way more facilities than we will ever use.

Pari-GP is available for UNIX, XP and the Macintosh. It can be downloaded from the above URL. The download will come with a tutorial and a user's guide. I recommend that you browse sections 1,2,4 of the tutorial, and chapters 1 and 2 of the user's guide. While reading, keep in mind that this system is primarily aimed at researchers in number theory, so a lot of stuff that you won't understand creeps in to the commentary.

## Other Packages

Here are some other packages that I am aware of. I certainly don't discourage you from trying one of these. If you find them superior to Pari, by all means, tell me about it. Of course, if you already know how to use one of these, it makes sense to use it instead of learning pari.

### "Big" Packages

Maple
Big, fancy symbolic algebra package. Has everything you could possibly want, including extensive documentation. No longer available at ISU. Expensive to buy.
Mathematica
Similar to maple. If you already know it, it will do everything you want. ISU has a site license. Available in the Math Department lab (449 Carver). Even more expensive than maple.
GAP4
Similar in flavor to Pari. But designed for group theory instead of number theory. Better documentation, but bigger. Free. Available for download from this site
SAGE
Sage is a free open-source mathematics software system licensed under the GPL. It combines the power of many existing open-source packages into a common Python-based interface. Available from http://www.sagemath.org/

Matlab
Matlab is a commercial programming environment specializing in the manipulation of matrices. It has a full-fledged C-like language and a particularly nice programmer's interface. However, in order to do large-integer arithmetic, you need the Symbolic Math toolbox. The Iowa State student license does not include the toolbox. It is possible that the Engineering College offers the Symbolic Math toolbox, I'm not sure.

### "Little" Packages

Gnu dc
This is the classical UNIX command-line desk calculator with some large-integer enhancements. Nothing fancy, but I think it will do the job. It came installed with my recent version of RedHat Linux. Free. Available from any gnu mirror site. There is also gnu bc. I'm not sure of the relationship to dc.
Aribas
Claims to be a desk calculator with arbitrary precision. Documentation in German. Available from ftp://ftp.mathematik.uni-muenchen.de/pub/forster/aribas.
Calc
Another desk calculator. Looks promising, but I haven't tried it. Let me know if it works. Available for all platforms from http://www.numbertheory.org/calc/krm_calc.html.

### For programmers

gnu gmp
This is a C-language library for doing arbitrary-precision arithmetic. Very extensive. The syntax is a pain. Installed on PV. Free. Available from any gnu mirror site. A copy came installed with my RedHat Linux. It seems to compile nicely on any UNIX platform with gcc. It seems to be possible to compile under Win9x, but there are pitfalls. Many of my students have decided that ntl is easier to use.
ntl
A C++ language library for arbitrary-precision arithmetic. More humane syntax than gmp. Installed on PV. Free. Available from Victor Shoup's personal page. I believe he supplies a library pre-compiled for Win 9x.
python, java.
Both of these languages have large-number arithmetic built-in. If you know one of them, it should be fine. If not, I think it is overkill to learn it just for this course. I don't know how efficient they are. (By the way: someone tried using perl last year for the course, but it turned out to be hopelessly slow for this.) Let me know if one of these works for you. They are both free. I don't know much about availability. (But python, at least, came with RedHat LInux.)

Finally, I include the software sources for number theorists, which has a huge list of possible options.