1\documentclass[synpaper]{book}
2\usepackage{geometry}
3\usepackage{hyperref}
4\usepackage{makeidx}
5\usepackage{amssymb}
6\usepackage{color}
7\usepackage{alltt}
8\usepackage{graphicx}
9\usepackage{layout}
10\usepackage{fancyhdr}
11\usepackage{float}
12\def\union{\cup}
13\def\intersect{\cap}
14\def\getsrandom{\stackrel{\rm R}{\gets}}
15\def\cross{\times}
16\def\cat{\hspace{0.5em} \| \hspace{0.5em}}
17\def\catn{$\|$}
18\def\divides{\hspace{0.3em} | \hspace{0.3em}}
19\def\nequiv{\not\equiv}
20\def\approx{\raisebox{0.2ex}{\mbox{\small $\sim$}}}
21\def\lcm{{\rm lcm}}
22\def\gcd{{\rm gcd}}
23\def\log{{\rm log}}
24\def\ord{{\rm ord}}
25\def\abs{{\mathit abs}}
26\def\rep{{\mathit rep}}
27\def\mod{{\mathit\ mod\ }}
28\renewcommand{\pmod}[1]{\ ({\rm mod\ }{#1})}
29\newcommand{\floor}[1]{\left\lfloor{#1}\right\rfloor}
30\newcommand{\ceil}[1]{\left\lceil{#1}\right\rceil}
31\def\Or{{\rm\ or\ }}
32\def\And{{\rm\ and\ }}
33\def\iff{\hspace{1em}\Longleftrightarrow\hspace{1em}}
34\def\implies{\Rightarrow}
35\def\Proof{\vspace{1ex}\noindent {\bf Proof:}\hspace{1em}}
36\let\oldphi\phi
37\def\phi{\varphi}
38\def\Pr{{\rm Pr}}
39\newcommand{\str}[1]{{\mathbf{#1}}}
40\def\F{{\mathbb F}}
41\def\N{{\mathbb N}}
42\def\Z{{\mathbb Z}}
43\def\R{{\mathbb R}}
44\def\C{{\mathbb C}}
45\def\Q{{\mathbb Q}}
46\definecolor{DGray}{gray}{0.5}
47\newcommand{\emailaddr}[1]{\mbox{$<${#1}$>$}}
48\def\twiddle{\raisebox{0.3ex}{\mbox{\tiny $\sim$}}}
49\def\gap{\vspace{0.5ex}}
50\makeindex
51\newcommand{\mysection}[1]    % Re-define the chaptering command to use
52	{                   % THESE headers.
53	\section{#1}
54   \markboth{\textsf{www.libtom.net}}{\thesection ~ {#1}}
55	}
56
57\newcommand{\mystarsection}[1]    % Re-define the chaptering command to use
58	{                   % THESE headers.
59	\section*{#1}
60   \markboth{\textsf{www.libtom.net}}{{#1}}
61	}
62\pagestyle{empty}
63\begin{document}
64\frontmatter
65\pagestyle{empty}
66
67~
68
69\vspace{2in}
70
71~
72
73\begin{center}
74\begin{Huge}LibTomCrypt\end{Huge}
75
76~
77
78\begin{large}Developer Manual\end{large}
79
80~
81
82\vspace{15mm}
83
84
85\begin{tabular}{c}
86LibTom Projects
87\end{tabular}
88\end{center}
89\vfil
90\newpage
91This document is part of the LibTomCrypt package and is hereby released into the public domain.
92
93~
94
95Open Source.  Open Academia.  Open Minds.
96
97~
98
99\begin{flushright}
100LibTom Projects
101~
102
103\& originally
104~
105
106Tom St Denis
107~
108
109Ottawa, Ontario
110~
111
112Canada
113~
114\vfil
115\end{flushright}
116\newpage
117
118\tableofcontents
119\listoffigures
120\pagestyle{myheadings}
121\mainmatter
122\chapter{Introduction}
123\mysection{What is the LibTomCrypt?}
124LibTomCrypt is a portable ISO C cryptographic library meant to be a tool set for cryptographers who are
125designing cryptosystems.  It supports symmetric ciphers, one-way hashes, pseudo-random number generators,
126public key cryptography (via PKCS \#1 RSA, DH or ECCDH), and a plethora of support routines.
127
128The library was designed such that new ciphers/hashes/PRNGs can be added at run-time and the existing API
129(and helper API functions) are able to use the new designs automatically.  There exists self-check functions for each
130block cipher and hash function to ensure that they compile and execute to the published design specifications.  The library
131also performs extensive parameter error checking to prevent any number of run-time exploits or errors.
132
133\mysection{Why did I write it?}
134You may be wondering, \textit{Tom, why did you write a crypto library.  I already have one.}  Well the reason falls into
135two categories:
136\begin{enumerate}
137    \item I am too lazy to figure out someone else's API.  I'd rather invent my own simpler API and use that.
138    \item It was (still is) good coding practice.
139\end{enumerate}
140
141The idea is that I am not striving to replace OpenSSL or Crypto++ or Cryptlib or etc.  I'm trying to write my
142{\bf own} crypto library and hopefully along the way others will appreciate the work.
143
144With this library all core functions (ciphers, hashes, prngs, and bignum) have the same prototype definition.  They all load
145and store data in a format independent of the platform.  This means if you encrypt with Blowfish on a PPC it should decrypt
146on an x86 with zero problems.  The consistent API also means that if you learn how to use Blowfish with the library you
147know how to use Safer+, RC6, or Serpent as well.  With all of the core functions there are central descriptor tables
148that can be used to make a program automatically pick between ciphers, hashes and PRNGs at run-time.  That means your
149application can support all ciphers/hashes/prngs/bignum without changing the source code.
150
151Not only did I strive to make a consistent and simple API to work with but I also attempted to make the library
152configurable in terms of its build options.  Out of the box the library will build with any modern version of GCC
153without having to use configure scripts.  This means that the library will work with platforms where development
154tools may be limited (e.g. no autoconf).
155
156On top of making the build simple and the API approachable I've also attempted for a reasonably high level of
157robustness and efficiency.  LibTomCrypt traps and returns a series of errors ranging from invalid
158arguments to buffer overflows/overruns.  It is mostly thread safe and has been clocked on various platforms
159with \textit{cycles per byte} timings that are comparable (and often favourable) to other libraries such as OpenSSL and
160Crypto++.
161
162\subsection{Modular}
163The LibTomCrypt package has also been written to be very modular.  The block ciphers, one--way hashes,
164pseudo--random number generators (PRNG), and bignum math routines are all used within the API through \textit{descriptor} tables which
165are essentially structures with pointers to functions.  While you can still call particular functions
166directly (\textit{e.g. sha256\_process()}) this descriptor interface allows the developer to customize their
167usage of the library.
168
169For example, consider a hardware platform with a specialized RNG device.  Obviously one would like to tap
170that for the PRNG needs within the library (\textit{e.g. making a RSA key}).  All the developer has to do
171is write a descriptor and the few support routines required for the device.  After that the rest of the
172API can make use of it without change.  Similarly imagine a few years down the road when AES2
173(\textit{or whatever they call it}) has been invented.  It can be added to the library and used within applications
174with zero modifications to the end applications provided they are written properly.
175
176This flexibility within the library means it can be used with any combination of primitive algorithms and
177unlike libraries like OpenSSL is not tied to direct routines.  For instance, in OpenSSL there are CBC block
178mode routines for every single cipher.  That means every time you add or remove a cipher from the library
179you have to update the associated support code as well.  In LibTomCrypt the associated code (\textit{chaining modes in this case})
180are not directly tied to the ciphers.  That is a new cipher can be added to the library by simply providing
181the key setup, ECB decrypt and encrypt and test vector routines.  After that all five chaining mode routines
182can make use of the cipher right away.
183
184\mysection{License}
185
186The project is hereby released as public domain.
187
188\mysection{Patent Disclosure}
189
190The author (Tom St Denis) is not a patent lawyer so this section is not to be treated as legal advice.  To the best
191of the author's knowledge the only patent related issues within the library are the RC5 and RC6 symmetric block ciphers.
192They can be removed from a build by simply commenting out the two appropriate lines in \textit{tomcrypt\_custom.h}.  The rest
193of the ciphers and hashes are patent free or under patents that have since expired.
194
195The RC2 and RC4 symmetric ciphers are not under patents but are under trademark regulations.  This means you can use
196the ciphers you just can't advertise that you are doing so.
197
198\mysection{Thanks}
199I would like to give thanks to the following people (in no particular order) for helping me develop this project from
200early on:
201\begin{enumerate}
202   \item Richard van de Laarschot
203   \item Richard Heathfield
204   \item Ajay K. Agrawal
205   \item Brian Gladman
206   \item Svante Seleborg
207   \item Clay Culver
208   \item Jason Klapste
209   \item Dobes Vandermeer
210   \item Daniel Richards
211   \item Wayne Scott
212   \item Andrew Tyler
213   \item Sky Schulz
214   \item Christopher Imes
215\end{enumerate}
216
217There have been quite a few other people as well.  Please check the change log to see who else has contributed from
218time to time.
219
220\chapter{The Application Programming Interface (API)}
221\mysection{Introduction}
222\index{CRYPT\_ERROR} \index{CRYPT\_OK}
223
224In general the API is very simple to memorize and use.  Most of the functions return either {\bf void} or {\bf int}.  Functions
225that return {\bf int} will return {\bf CRYPT\_OK} if the function was successful, or one of the many error codes
226if it failed.  Certain functions that return int will return $-1$ to indicate an error.  These functions will be explicitly
227commented upon.  When a function does return a CRYPT error code it can be translated into a string with
228
229\index{error\_to\_string()}
230\begin{verbatim}
231const char *error_to_string(int err);
232\end{verbatim}
233
234An example of handling an error is:
235\begin{small}
236\begin{verbatim}
237void somefunc(void)
238{
239   int err;
240
241   /* call a cryptographic function */
242   if ((err = some_crypto_function(...)) != CRYPT_OK) {
243      printf("A crypto error occurred, %s\n", error_to_string(err));
244      /* perform error handling */
245   }
246   /* continue on if no error occurred */
247}
248\end{verbatim}
249\end{small}
250
251There is no initialization routine for the library and for the most part the code is thread safe.  The only thread
252related issue is if you use the same symmetric cipher, hash or public key state data in multiple threads.  Normally
253that is not an issue.
254
255To include the prototypes for \textit{LibTomCrypt.a} into your own program simply include \textit{tomcrypt.h} like so:
256\begin{small}
257\begin{verbatim}
258#include <tomcrypt.h>
259int main(void) {
260    return 0;
261}
262\end{verbatim}
263\end{small}
264
265The header file \textit{tomcrypt.h} also includes \textit{stdio.h}, \textit{string.h}, \textit{stdlib.h}, \textit{time.h} and \textit{ctype.h}.
266
267\mysection{Macros}
268
269There are a few helper macros to make the coding process a bit easier.  The first set are related to loading and storing
27032/64-bit words in little/big endian format.  The macros are:
271
272\index{STORE32L} \index{STORE64L} \index{LOAD32L} \index{LOAD64L} \index{STORE32H} \index{STORE64H} \index{LOAD32H} \index{LOAD64H} \index{BSWAP}
273\newpage
274\begin{figure}[hpbt]
275\begin{small}
276\begin{center}
277\begin{tabular}{|c|c|c|}
278     \hline STORE32L(x, y) & {\bf ulong32} x, {\bf unsigned char} *y & $x \to y[0 \ldots 3]$ \\
279     \hline STORE64L(x, y) & {\bf ulong64} x, {\bf unsigned char} *y & $x \to y[0 \ldots 7]$ \\
280     \hline LOAD32L(x, y) & {\bf ulong32} x, {\bf unsigned char} *y & $y[0 \ldots 3] \to x$ \\
281     \hline LOAD64L(x, y) & {\bf ulong64} x, {\bf unsigned char} *y & $y[0 \ldots 7] \to x$ \\
282     \hline STORE32H(x, y) & {\bf ulong32} x, {\bf unsigned char} *y & $x \to y[3 \ldots 0]$ \\
283     \hline STORE64H(x, y) & {\bf ulong64} x, {\bf unsigned char} *y & $x \to y[7 \ldots 0]$ \\
284     \hline LOAD32H(x, y) & {\bf ulong32} x, {\bf unsigned char} *y & $y[3 \ldots 0] \to x$ \\
285     \hline LOAD64H(x, y) & {\bf ulong64} x, {\bf unsigned char} *y & $y[7 \ldots 0] \to x$ \\
286     \hline BSWAP(x) & {\bf ulong32} x & Swap bytes \\
287     \hline
288\end{tabular}
289\caption{Load And Store Macros}
290\end{center}
291\end{small}
292\end{figure}
293
294There are 32 and 64-bit cyclic rotations as well:
295\index{ROL} \index{ROR} \index{ROL64} \index{ROR64} \index{ROLc} \index{RORc} \index{ROL64c} \index{ROR64c}
296\begin{figure}[hpbt]
297\begin{small}
298\begin{center}
299\begin{tabular}{|c|c|c|}
300     \hline ROL(x, y) & {\bf ulong32} x, {\bf ulong32} y & $x << y, 0 \le y \le 31$ \\
301     \hline ROLc(x, y) & {\bf ulong32} x, {\bf const ulong32} y & $x << y, 0 \le y \le 31$ \\
302     \hline ROR(x, y) & {\bf ulong32} x, {\bf ulong32} y & $x >> y, 0 \le y \le 31$ \\
303     \hline RORc(x, y) & {\bf ulong32} x, {\bf const ulong32} y & $x >> y, 0 \le y \le 31$ \\
304     \hline && \\
305     \hline ROL64(x, y) & {\bf ulong64} x, {\bf ulong64} y & $x << y, 0 \le y \le 63$ \\
306     \hline ROL64c(x, y) & {\bf ulong64} x, {\bf const ulong64} y & $x << y, 0 \le y \le 63$ \\
307     \hline ROR64(x, y) & {\bf ulong64} x, {\bf ulong64} y & $x >> y, 0 \le y \le 63$ \\
308     \hline ROR64c(x, y) & {\bf ulong64} x, {\bf const ulong64} y & $x >> y, 0 \le y \le 63$ \\
309     \hline
310\end{tabular}
311\caption{Rotate Macros}
312\end{center}
313\end{small}
314\end{figure}
315
316\mysection{Functions with Variable Length Output}
317Certain functions such as (for example) \textit{rsa\_export()} give an output that is variable length.  To prevent buffer overflows you
318must pass it the length of the buffer where the output will be stored.  For example:
319\index{rsa\_export()} \index{error\_to\_string()} \index{variable length output}
320\begin{small}
321\begin{verbatim}
322#include <tomcrypt.h>
323int main(void) {
324    rsa_key key;
325    unsigned char buffer[1024];
326    unsigned long x;
327    int err;
328
329    /* ... Make up the RSA key somehow ... */
330
331    /* lets export the key, set x to the size of the
332     * output buffer */
333    x = sizeof(buffer);
334    if ((err = rsa_export(buffer, &x, PK_PUBLIC, &key)) != CRYPT_OK) {
335       printf("Export error: %s\n", error_to_string(err));
336       return -1;
337    }
338
339    /* if rsa_export() was successful then x will have
340     * the size of the output */
341    printf("RSA exported key takes %d bytes\n", x);
342
343    /* ... do something with the buffer */
344
345    return 0;
346}
347\end{verbatim}
348\end{small}
349In the above example if the size of the RSA public key was more than 1024 bytes this function would return an error code
350indicating a buffer overflow would have occurred.  If the function succeeds, it stores the length of the output back into
351\textit{x} so that the calling application will know how many bytes were used.
352
353As of v1.13, most functions will update your length on failure to indicate the size required by the function.  Not all functions
354support this so please check the source before you rely on it doing that.
355
356\mysection{Functions that need a PRNG}
357\index{Pseudo Random Number Generator} \index{PRNG}
358Certain functions such as \textit{rsa\_make\_key()} require a Pseudo Random Number Generator (PRNG).  These functions do not setup
359the PRNG themselves so it is the responsibility of the calling function to initialize the PRNG before calling them.
360
361Certain PRNG algorithms do not require a \textit{prng\_state} argument (sprng for example).  The \textit{prng\_state} argument
362may be passed as \textbf{NULL} in such situations.
363
364\index{register\_prng()} \index{rsa\_make\_key()}
365\begin{small}
366\begin{verbatim}
367#include <tomcrypt.h>
368int main(void) {
369    rsa_key key;
370    int     err;
371
372    /* register the system RNG */
373    register_prng(&sprng_desc)
374
375    /* make a 1024-bit RSA key with the system RNG */
376    if ((err = rsa_make_key(NULL, find_prng("sprng"), 1024/8, 65537, &key))
377        != CRYPT_OK) {
378       printf("make_key error: %s\n", error_to_string(err));
379       return -1;
380    }
381
382    /* use the key ... */
383
384    return 0;
385}
386\end{verbatim}
387\end{small}
388
389\mysection{Functions that use Arrays of Octets}
390Most functions require inputs that are arrays of the data type \textit{unsigned char}.  Whether it is a symmetric key, IV
391for a chaining mode or public key packet it is assumed that regardless of the actual size of \textit{unsigned char} only the
392lower eight bits contain data.  For example, if you want to pass a 256 bit key to a symmetric ciphers setup routine, you
393must pass in (a pointer to) an array of 32 \textit{unsigned char} variables.  Certain routines (such as SAFER+) take
394special care to work properly on platforms where an \textit{unsigned char} is not eight bits.
395
396For the purposes of this library, the term \textit{byte} will refer to an octet or eight bit word.  Typically an array of
397type \textit{byte} will be synonymous with an array of type \textit{unsigned char.}
398
399\chapter{Symmetric Block Ciphers}
400\mysection{Core Functions}
401LibTomCrypt provides several block ciphers with an ECB block mode interface.  It is important to first note that you
402should never use the ECB modes directly to encrypt data.  Instead you should use the ECB functions to make a chaining mode,
403or use one of the provided chaining modes.  All of the ciphers are written as ECB interfaces since it allows the rest of
404the API to grow in a modular fashion.
405
406\subsection{Key Scheduling}
407All ciphers store their scheduled keys in a single data type called \textit{symmetric\_key}.  This allows all ciphers to
408have the same prototype and store their keys as naturally as possible.  This also removes the need for dynamic memory
409allocation, and allows you to allocate a fixed sized buffer for storing scheduled keys.  All ciphers must provide six visible
410functions which are (given that XXX is the name of the cipher) the following:
411\index{Cipher Setup}
412\begin{verbatim}
413int XXX_setup(const unsigned char *key,
414                              int  keylen,
415                              int  rounds,
416                    symmetric_key *skey);
417\end{verbatim}
418
419The XXX\_setup() routine will setup the cipher to be used with a given number of rounds and a given key length (in bytes).
420The number of rounds can be set to zero to use the default, which is generally a good idea.
421
422If the function returns successfully the variable \textit{skey} will have a scheduled key stored in it.  It's important to note
423that you should only used this scheduled key with the intended cipher.  For example, if you call \textit{blowfish\_setup()} do not
424pass the scheduled key onto \textit{rc5\_ecb\_encrypt()}.  All built--in setup functions do not allocate memory off the heap so
425when you are done with a key you can simply discard it (e.g. they can be on the stack).  However, to maintain proper coding
426practices you should always call the respective XXX\_done() function.  This allows for quicker porting to applications with
427externally supplied plugins.
428
429\subsection{ECB Encryption and Decryption}
430To encrypt or decrypt a block in ECB mode there are these two functions per cipher:
431\index{Cipher Encrypt} \index{Cipher Decrypt}
432\begin{verbatim}
433int XXX_ecb_encrypt(const unsigned char *pt,
434                          unsigned char *ct,
435                          symmetric_key *skey);
436
437int XXX_ecb_decrypt(const unsigned char *ct,
438                          unsigned char *pt,
439                          symmetric_key *skey);
440\end{verbatim}
441These two functions will encrypt or decrypt (respectively) a single block of text\footnote{The size of which depends on
442which cipher you are using.}, storing the result in the \textit{ct} buffer (\textit{pt} resp.).  It is possible that the input and output buffer are
443the same buffer.  For the encrypt function \textit{pt}\footnote{pt stands for plaintext.} is the input and
444\textit{ct}\footnote{ct stands for ciphertext.} is the output.  For the decryption function it's the opposite.  They both
445return \textbf{CRYPT\_OK} on success.  To test a particular cipher against test vectors\footnote{As published in their design papers.}
446call the following self-test function.
447
448\subsection{Self--Testing}
449\index{Cipher Testing}
450\begin{verbatim}
451int XXX_test(void);
452\end{verbatim}
453This function will return {\bf CRYPT\_OK} if the cipher matches the test vectors from the design publication it is
454based upon.
455
456\subsection{Key Sizing}
457For each cipher there is a function which will help find a desired key size.  It is specified as follows:
458\index{Key Sizing}
459\begin{verbatim}
460int XXX_keysize(int *keysize);
461\end{verbatim}
462Essentially, it will round the input keysize in \textit{keysize} down to the next appropriate key size.  This function
463will return {\bf CRYPT\_OK} if the key size specified is acceptable.  For example:
464\begin{small}
465\begin{verbatim}
466#include <tomcrypt.h>
467int main(void)
468{
469   int keysize, err;
470
471   /* now given a 20 byte key what keysize does Twofish want to use? */
472   keysize = 20;
473   if ((err = twofish_keysize(&keysize)) != CRYPT_OK) {
474      printf("Error getting key size: %s\n", error_to_string(err));
475      return -1;
476   }
477   printf("Twofish suggested a key size of %d\n", keysize);
478   return 0;
479}
480\end{verbatim}
481\end{small}
482This should indicate a keysize of sixteen bytes is suggested by storing 16 in \textit{keysize.}
483
484\subsection{Cipher Termination}
485When you are finished with a cipher you can de--initialize it with the done function.
486\begin{verbatim}
487void XXX_done(symmetric_key *skey);
488\end{verbatim}
489For the software based ciphers within LibTomCrypt, these functions will not do anything.  However, user supplied
490cipher descriptors may require to be called for resource management purposes.  To be compliant, all functions which call a cipher
491setup function must also call the respective cipher done function when finished.
492
493\subsection{Simple Encryption Demonstration}
494An example snippet that encodes a block with Blowfish in ECB mode.
495
496\index{blowfish\_setup()} \index{blowfish\_ecb\_encrypt()} \index{blowfish\_ecb\_decrypt()} \index{blowfish\_done()}
497\begin{small}
498\begin{verbatim}
499#include <tomcrypt.h>
500int main(void)
501{
502   unsigned char pt[8], ct[8], key[8];
503   symmetric_key skey;
504   int err;
505
506   /* ... key is loaded appropriately in key ... */
507   /* ... load a block of plaintext in pt ... */
508
509   /* schedule the key */
510   if ((err = blowfish_setup(key, /* the key we will use */
511                               8, /* key is 8 bytes (64-bits) long */
512                               0, /* 0 == use default # of rounds */
513                           &skey) /* where to put the scheduled key */
514       ) != CRYPT_OK) {
515      printf("Setup error: %s\n", error_to_string(err));
516      return -1;
517   }
518
519   /* encrypt the block */
520   blowfish_ecb_encrypt(pt,       /* encrypt this 8-byte array */
521                        ct,       /* store encrypted data here */
522                        &skey);   /* our previously scheduled key */
523
524   /* now ct holds the encrypted version of pt */
525
526   /* decrypt the block */
527   blowfish_ecb_decrypt(ct,       /* decrypt this 8-byte array */
528                        pt,       /* store decrypted data here */
529                        &skey);   /* our previously scheduled key */
530
531   /* now we have decrypted ct to the original plaintext in pt */
532
533   /* Terminate the cipher context */
534   blowfish_done(&skey);
535
536   return 0;
537}
538\end{verbatim}
539\end{small}
540
541\mysection{Key Sizes and Number of Rounds}
542\index{Symmetric Keys}
543As a general rule of thumb, do not use symmetric keys under 80 bits if you can help it.  Only a few of the ciphers support smaller
544keys (mainly for test vectors anyways).  Ideally, your application should be making at least 256 bit keys.  This is not
545because you are to be paranoid.  It is because if your PRNG has a bias of any sort the more bits the better.  For
546example, if you have $\mbox{Pr}\left[X = 1\right] = {1 \over 2} \pm \gamma$ where $\vert \gamma \vert > 0$ then the
547total amount of entropy in N bits is $N \cdot -log_2\left ({1 \over 2} + \vert \gamma \vert \right)$.  So if $\gamma$
548were $0.25$ (a severe bias) a 256-bit string would have about 106 bits of entropy whereas a 128-bit string would have
549only 53 bits of entropy.
550
551The number of rounds of most ciphers is not an option you can change.  Only RC5 allows you to change the number of
552rounds.  By passing zero as the number of rounds all ciphers will use their default number of rounds.  Generally the
553ciphers are configured such that the default number of rounds provide adequate security for the given block and key
554size.
555
556\mysection{The Cipher Descriptors}
557\index{Cipher Descriptor}
558To facilitate automatic routines an array of cipher descriptors is provided in the array \textit{cipher\_descriptor}.  An element
559of this array has the following (partial) format (See Section \ref{sec:cipherdesc}):
560
561\begin{small}
562\begin{verbatim}
563struct _cipher_descriptor {
564   /** name of cipher */
565   char *name;
566
567   /** internal ID */
568   unsigned char ID;
569
570   /** min keysize (octets) */
571   int  min_key_length,
572
573   /** max keysize (octets) */
574        max_key_length,
575
576   /** block size (octets) */
577        block_length,
578
579   /** default number of rounds */
580        default_rounds;
581...<snip>...
582};
583\end{verbatim}
584\end{small}
585
586Where \textit{name} is the lower case ASCII version of the name.  The fields \textit{min\_key\_length} and \textit{max\_key\_length}
587are the minimum and maximum key sizes in bytes.  The \textit{block\_length} member is the block size of the cipher
588in bytes.  As a good rule of thumb it is assumed that the cipher supports
589the min and max key lengths but not always everything in between.  The \textit{default\_rounds} field is the default number
590of rounds that will be used.
591
592For a plugin to be compliant it must provide at least each function listed before the accelerators begin.  Accelerators are optional,
593and if missing will be emulated in software.
594
595The remaining fields are all pointers to the core functions for each cipher.  The end of the cipher\_descriptor array is
596marked when \textit{name} equals {\bf NULL}.
597
598As of this release the current cipher\_descriptors elements are the following:
599\vfil
600\index{Cipher descriptor table}
601\index{blowfish\_desc} \index{xtea\_desc} \index{rc2\_desc} \index{rc5\_desc} \index{rc6\_desc} \index{saferp\_desc} \index{aes\_desc} \index{twofish\_desc}
602\index{des\_desc} \index{des3\_desc} \index{noekeon\_desc} \index{skipjack\_desc} \index{anubis\_desc} \index{khazad\_desc} \index{kseed\_desc} \index{kasumi\_desc} \index{camellia\_desc} \index{aes\_enc\_desc}
603\begin{figure}[hpbt]
604\begin{small}
605\begin{center}
606\begin{tabular}{|c|c|c|c|c|c|}
607     \hline \textbf{Name} & \textbf{Descriptor Name} & \textbf{Block Size} & \textbf{Key Range} & \textbf{Rounds} \\
608     \hline Blowfish & blowfish\_desc & 8 & 8 $\ldots$ 56 & 16 \\
609     \hline X-Tea & xtea\_desc & 8 & 16 & 32 \\
610     \hline RC2 & rc2\_desc & 8 & 5 $\ldots$ 128 & 16 \\
611     \hline RC5-32/12/b & rc5\_desc & 8 & 8 $\ldots$ 128 & 12 $\ldots$ 24 \\
612     \hline RC6-32/20/b & rc6\_desc & 16 & 8 $\ldots$ 128 & 20 \\
613     \hline SAFER+ & saferp\_desc &16 & 16, 24, 32 & 8, 12, 16 \\
614     \hline AES & aes\_desc & 16 & 16, 24, 32 & 10, 12, 14 \\
615                & aes\_enc\_desc & 16 & 16, 24, 32 & 10, 12, 14 \\
616     \hline Twofish & twofish\_desc & 16 & 16, 24, 32 & 16 \\
617     \hline DES & des\_desc & 8 & 8 & 16 \\
618     \hline 3DES (EDE mode) & des3\_desc & 8 & 16, 24 & 16 \\
619     \hline CAST5 (CAST-128) & cast5\_desc & 8 & 5 $\ldots$ 16 & 12, 16 \\
620     \hline Noekeon & noekeon\_desc & 16 & 16 & 16 \\
621     \hline Skipjack & skipjack\_desc & 8 & 10 & 32 \\
622     \hline Anubis & anubis\_desc & 16 & 16 $\ldots$ 40 & 12 $\ldots$ 18 \\
623     \hline Khazad & khazad\_desc & 8 & 16 & 8 \\
624     \hline SEED   & kseed\_desc & 16 & 16 & 16 \\
625     \hline KASUMI & kasumi\_desc & 8 & 16 & 8 \\
626     \hline Camellia & camellia\_desc & 16 & 16, 24, 32 & 18, 24 \\
627     \hline
628\end{tabular}
629\end{center}
630\end{small}
631\caption{Built--In Software Ciphers}
632\end{figure}
633
634\subsection{Notes}
635\begin{small}
636\begin{enumerate}
637\item
638For AES, (also known as Rijndael) there are four descriptors which complicate issues a little.  The descriptors
639rijndael\_desc and rijndael\_enc\_desc provide the cipher named \textit{rijndael}.  The descriptors aes\_desc and
640aes\_enc\_desc provide the cipher name \textit{aes}.  Functionally both \textit{rijndael} and \textit{aes} are the same cipher.  The
641only difference is when you call find\_cipher() you have to pass the correct name.  The cipher descriptors with \textit{enc}
642in the middle (e.g. rijndael\_enc\_desc) are related to an implementation of Rijndael with only the encryption routine
643and tables.  The decryption and self--test function pointers of both \textit{encrypt only} descriptors are set to \textbf{NULL} and
644should not be called.
645
646The \textit{encrypt only} descriptors are useful for applications that only use the encryption function of the cipher.  Algorithms such
647as EAX, PMAC and OMAC only require the encryption function.  So far this \textit{encrypt only} functionality has only been implemented for
648Rijndael as it makes the most sense for this cipher.
649
650\item
651Note that for \textit{DES} and \textit{3DES} they use 8 and 24 byte keys but only 7 and 21 [respectively] bytes of the keys are in
652fact used for the purposes of encryption.  My suggestion is just to use random 8/24 byte keys instead of trying to make a 8/24
653byte string from the real 7/21 byte key.
654
655For \textit{3DES} exists a two-key mode, that can be initialized by calling the setup function with a \textit{keylen} of 16. This results in the re-usage of key \textit{K1} as key \textit{K3}. This mode has been specified as \textit{Keying Option 2} in FIPS 46-3.
656
657\item
658Note that \textit{Twofish} has additional configuration options (Figure \ref{fig:twofishopts}) that take place at build time.  These options are found in
659the file \textit{tomcrypt\_cfg.h}.  The first option is \textit{TWOFISH\_SMALL} which when defined will force the Twofish code
660to not pre-compute the Twofish \textit{$g(X)$} function as a set of four $8 \times 32$ s-boxes.  This means that a scheduled
661key will require less ram but the resulting cipher will be slower.  The second option is \textit{TWOFISH\_TABLES} which when
662defined will force the Twofish code to use pre-computed tables for the two s-boxes $q_0, q_1$ as well as the multiplication
663by the polynomials 5B and EF used in the MDS multiplication.  As a result the code is faster and slightly larger.  The
664speed increase is useful when \textit{TWOFISH\_SMALL} is defined since the s-boxes and MDS multiply form the heart of the
665Twofish round function.
666
667\begin{figure}[hpbt]
668\index{Twofish build options} \index{TWOFISH\_SMALL} \index{TWOFISH\_TABLES}
669\begin{small}
670\begin{center}
671\begin{tabular}{|l|l|l|}
672\hline \textbf{TWOFISH\_SMALL} & \textbf{TWOFISH\_TABLES} & \textbf{Speed and Memory (per key)} \\
673\hline undefined & undefined & Very fast, 4.2KB of ram. \\
674\hline undefined & defined & Faster key setup, larger code. \\
675\hline defined & undefined & Very slow, 0.2KB of ram. \\
676\hline defined & defined & Faster, 0.2KB of ram, larger code. \\
677\hline
678\end{tabular}
679\end{center}
680\end{small}
681\caption{Twofish Build Options}
682\label{fig:twofishopts}
683\end{figure}
684
685\item
686As of v1.18.0 of the library RC2 got an extended setup function (which didn't fit in the regular API):
687
688\index{rc2\_setup\_ex()}
689\begin{verbatim}
690int rc2_setup_ex(const unsigned char *key,
691                                 int keylen,
692                                 int bits,
693                                 int num_rounds,
694                       symmetric_key *skey);
695\end{verbatim}
696
697This setup function also allows to configure the effective key length in bits of the RC2 cipher as in its original specification.
698
699\end{enumerate}
700\end{small}
701
702
703To work with the cipher\_descriptor array there is a function:
704\index{find\_cipher()}
705\begin{verbatim}
706int find_cipher(char *name)
707\end{verbatim}
708Which will search for a given name in the array.  It returns $-1$ if the cipher is not found, otherwise it returns
709the location in the array where the cipher was found.  For example, to indirectly setup Blowfish you can also use:
710\begin{small}
711\index{register\_cipher()} \index{find\_cipher()} \index{error\_to\_string()}
712\begin{verbatim}
713#include <tomcrypt.h>
714int main(void)
715{
716   unsigned char key[8];
717   symmetric_key skey;
718   int err;
719
720   /* you must register a cipher before you use it */
721   if (register_cipher(&blowfish_desc)) == -1) {
722      printf("Unable to register Blowfish cipher.");
723      return -1;
724   }
725
726   /* generic call to function (assuming the key
727    * in key[] was already setup) */
728   if ((err =
729        cipher_descriptor[find_cipher("blowfish")].
730          setup(key, 8, 0, &skey)) != CRYPT_OK) {
731      printf("Error setting up Blowfish: %s\n", error_to_string(err));
732      return -1;
733   }
734
735   /* ... use cipher ... */
736}
737\end{verbatim}
738\end{small}
739
740A good safety would be to check the return value of \textit{find\_cipher()} before accessing the desired function.  In order
741to use a cipher with the descriptor table you must register it first using:
742\index{register\_cipher()}
743\begin{verbatim}
744int register_cipher(const struct _cipher_descriptor *cipher);
745\end{verbatim}
746Which accepts a pointer to a descriptor and returns the index into the global descriptor table.  If an error occurs such
747as there is no more room (it can have 32 ciphers at most) it will return {\bf{-1}}.  If you try to add the same cipher more
748than once it will just return the index of the first copy.  To remove a cipher call:
749\index{unregister\_cipher()}
750\begin{verbatim}
751int unregister_cipher(const struct _cipher_descriptor *cipher);
752\end{verbatim}
753Which returns {\bf CRYPT\_OK} if it removes the cipher, otherwise it returns {\bf CRYPT\_ERROR}.
754\begin{small}
755\begin{verbatim}
756#include <tomcrypt.h>
757int main(void)
758{
759   int err;
760
761   /* register the cipher */
762   if (register_cipher(&rijndael_desc) == -1) {
763      printf("Error registering Rijndael\n");
764      return -1;
765   }
766
767   /* use Rijndael */
768
769   /* remove it */
770   if ((err = unregister_cipher(&rijndael_desc)) != CRYPT_OK) {
771      printf("Error removing Rijndael: %s\n", error_to_string(err));
772      return -1;
773   }
774
775   return 0;
776}
777\end{verbatim}
778\end{small}
779This snippet is a small program that registers Rijndael.
780
781\mysection{Symmetric Modes of Operations}
782\subsection{Background}
783A typical symmetric block cipher can be used in chaining modes to effectively encrypt messages larger than the block
784size of the cipher.  Given a key $k$, a plaintext $P$ and a cipher $E$ we shall denote the encryption of the block
785$P$ under the key $k$ as $E_k(P)$.  In some modes there exists an initialization vector denoted as $C_{-1}$.
786
787\subsubsection{ECB Mode}
788\index{ECB mode}
789ECB or Electronic Codebook Mode is the simplest method to use.  It is given as:
790\begin{equation}
791C_i = E_k(P_i)
792\end{equation}
793This mode is very weak since it allows people to swap blocks and perform replay attacks if the same key is used more
794than once.
795
796\subsubsection{CBC Mode}
797\index{CBC mode}
798CBC or Cipher Block Chaining mode is a simple mode designed to prevent trivial forms of replay and swap attacks on ciphers.
799It is given as:
800\begin{equation}
801C_i = E_k(P_i \oplus C_{i - 1})
802\end{equation}
803It is important that the initialization vector be unique and preferably random for each message encrypted under the same key.
804
805\subsubsection{CTR Mode}
806\index{CTR mode}
807CTR or Counter Mode is a mode which only uses the encryption function of the cipher.  Given a initialization vector which is
808treated as a large binary counter the CTR mode is given as:
809\begin{eqnarray}
810C_{-1} = C_{-1} + 1\mbox{ }(\mbox{mod }2^W) \nonumber \\
811C_i = P_i \oplus E_k(C_{-1})
812\end{eqnarray}
813Where $W$ is the size of a block in bits (e.g. 64 for Blowfish).  As long as the initialization vector is random for each message
814encrypted under the same key replay and swap attacks are infeasible.  CTR mode may look simple but it is as secure
815as the block cipher is under a chosen plaintext attack (provided the initialization vector is unique).
816
817\subsubsection{CFB Mode}
818\index{CFB mode}
819CFB or Ciphertext Feedback Mode is a mode akin to CBC.  It is given as:
820\begin{eqnarray}
821C_i = P_i \oplus C_{-1} \nonumber \\
822C_{-1} = E_k(C_i)
823\end{eqnarray}
824Note that in this library the output feedback width is equal to the size of the block cipher.  That is this mode is used
825to encrypt whole blocks at a time.  However, the library will buffer data allowing the user to encrypt or decrypt partial
826blocks without a delay.  When this mode is first setup it will initially encrypt the initialization vector as required.
827
828\subsubsection{OFB Mode}
829\index{OFB mode}
830OFB or Output Feedback Mode is a mode akin to CBC as well.  It is given as:
831\begin{eqnarray}
832C_{-1} = E_k(C_{-1}) \nonumber \\
833C_i = P_i \oplus C_{-1}
834\end{eqnarray}
835Like the CFB mode the output width in CFB mode is the same as the width of the block cipher.  OFB mode will also
836buffer the output which will allow you to encrypt or decrypt partial blocks without delay.
837
838\subsection{Choice of Mode}
839My personal preference is for the CTR mode since it has several key benefits:
840\begin{enumerate}
841   \item No short cycles which is possible in the OFB and CFB modes.
842   \item Provably as secure as the block cipher being used under a chosen plaintext attack.
843   \item Technically does not require the decryption routine of the cipher.
844   \item Allows random access to the plaintext.
845   \item Allows the encryption of block sizes that are not equal to the size of the block cipher.
846\end{enumerate}
847The CTR, CFB and OFB routines provided allow you to encrypt block sizes that differ from the ciphers block size.  They
848accomplish this by buffering the data required to complete a block.  This allows you to encrypt or decrypt any size
849block of memory with either of the three modes.
850
851The ECB and CBC modes process blocks of the same size as the cipher at a time.  Therefore, they are less flexible than the
852other modes.
853
854\subsection{Ciphertext Stealing}
855\index{Ciphertext stealing}
856Ciphertext stealing is a method of dealing with messages in CBC mode which are not a multiple of the block length.  This is accomplished
857by encrypting the last ciphertext block in ECB mode, and XOR'ing the output against the last partial block of plaintext.  LibTomCrypt does not
858support this mode directly but it is fairly easy to emulate with a call to the cipher's ecb\_encrypt() callback function.
859
860The more sane way to deal with partial blocks is to pad them with zeroes, and then use CBC normally.
861
862\subsection{Initialization}
863\index{CBC Mode} \index{CTR Mode}
864\index{OFB Mode} \index{CFB Mode}
865The library provides simple support routines for handling CBC, CTR, CFB, OFB and ECB encoded messages.  Assuming the mode
866you want is XXX there is a structure called \textit{symmetric\_XXX} that will contain the information required to
867use that mode.  They have identical setup routines (except CTR and ECB mode):
868\index{ecb\_start()} \index{cfb\_start()} \index{cbc\_start()} \index{ofb\_start()} \index{ctr\_start()}
869\begin{verbatim}
870int XXX_start(                int  cipher,
871              const unsigned char *IV,
872              const unsigned char *key,
873                              int  keylen,
874                              int  num_rounds,
875                    symmetric_XXX *XXX);
876
877int ctr_start(                int  cipher,
878              const unsigned char *IV,
879              const unsigned char *key,
880                              int  keylen,
881                              int  num_rounds,
882                              int  ctr_mode,
883                    symmetric_CTR *ctr);
884
885int ecb_start(                int  cipher,
886              const unsigned char *key,
887                              int  keylen,
888                              int  num_rounds,
889                    symmetric_ECB *ecb);
890\end{verbatim}
891
892In each case, \textit{cipher} is the index into the cipher\_descriptor array of the cipher you want to use.  The \textit{IV} value is
893the initialization vector to be used with the cipher.  You must fill the IV yourself and it is assumed they are the same
894length as the block size\footnote{In other words the size of a block of plaintext for the cipher, e.g. 8 for DES, 16 for AES, etc.}
895of the cipher you choose.  It is important that the IV  be random for each unique message you want to encrypt.  The
896parameters \textit{key}, \textit{keylen} and \textit{num\_rounds} are the same as in the XXX\_setup() function call.  The final parameter
897is a pointer to the structure you want to hold the information for the mode of operation.
898
899The routines return {\bf CRYPT\_OK} if the cipher initialized correctly, otherwise, they return an error code.
900
901\subsubsection{CTR Mode}
902In the case of CTR mode there is an additional parameter \textit{ctr\_mode} which specifies the mode that the counter is to be used in.
903If \textbf{CTR\_COUNTER\_ LITTLE\_ENDIAN} was specified then the counter will be treated as a little endian value.  Otherwise, if
904\textbf{CTR\_COUNTER\_BIG\_ENDIAN} was specified the counter will be treated as a big endian value.  As of v1.15 the RFC 3686 style of
905increment then encrypt is also supported.  By OR'ing \textbf{LTC\_CTR\_RFC3686} with the CTR \textit{mode} value, ctr\_start() will increment
906the counter before encrypting it for the first time.
907
908As of V1.17, the library supports variable length counters for CTR mode.  The (optional) counter length is specified by OR'ing the octet
909length of the counter against the \textit{ctr\_mode} parameter.  The default, zero, indicates that a full block length counter will be used.  This also
910ensures backwards compatibility with software that uses older versions of the library.
911
912\begin{small}
913\begin{verbatim}
914symmetric_CTR ctr;
915int           err;
916unsigned char IV[16], key[16];
917
918/* use a 32-bit little endian counter */
919if ((err = ctr_start(find_cipher("aes"),
920                     IV, key, 16, 0,
921                     CTR_COUNTER_LITTLE_ENDIAN | 4,
922                     &ctr)) != CRYPT_OK) {
923   handle_error(err);
924}
925\end{verbatim}
926\end{small}
927
928Changing the counter size has little (really no) effect on the performance of the CTR chaining mode.  It is provided for compatibility
929with other software (and hardware) which have smaller fixed sized counters.
930
931\subsection{Encryption and Decryption}
932To actually encrypt or decrypt the following routines are provided:
933\index{ecb\_encrypt()} \index{ecb\_decrypt()} \index{cfb\_encrypt()} \index{cfb\_decrypt()}
934\index{cbc\_encrypt()} \index{cbc\_decrypt()} \index{ofb\_encrypt()} \index{ofb\_decrypt()} \index{ctr\_encrypt()} \index{ctr\_decrypt()}
935\begin{verbatim}
936int XXX_encrypt(const unsigned char *pt,
937                      unsigned char *ct,
938                      unsigned long  len,
939                      symmetric_YYY *YYY);
940
941int XXX_decrypt(const unsigned char *ct,
942                      unsigned char *pt,
943                      unsigned long  len,
944                      symmetric_YYY *YYY);
945\end{verbatim}
946Where \textit{XXX} is one of $\lbrace ecb, cbc, ctr, cfb, ofb \rbrace$.
947
948In all cases, \textit{len} is the size of the buffer (as number of octets) to encrypt or decrypt.  The CTR, OFB and CFB modes are order sensitive but not
949chunk sensitive.  That is you can encrypt \textit{ABCDEF} in three calls like \textit{AB}, \textit{CD}, \textit{EF} or two like \textit{ABCDE} and \textit{F}
950and end up with the same ciphertext.  However, encrypting \textit{ABC} and \textit{DABC} will result in different ciphertexts.  All
951five of the modes will return {\bf CRYPT\_OK} on success from the encrypt or decrypt functions.
952
953In the ECB and CBC cases, \textit{len} must be a multiple of the ciphers block size.  In the CBC case, you must manually pad the end of your message (either with
954zeroes or with whatever your protocol requires).
955
956To decrypt in either mode, perform the setup like before (recall you have to fetch the IV value you used), and use the decrypt routine on all of the blocks.
957
958\subsection{IV Manipulation}
959To change or read the IV of a previously initialized chaining mode use the following two functions.
960\index{cbc\_setiv()} \index{cbc\_getiv()} \index{ofb\_setiv()} \index{ofb\_getiv()} \index{cfb\_setiv()} \index{cfb\_getiv()}
961\index{ctr\_setiv()} \index{ctr\_getiv()}
962\begin{verbatim}
963int XXX_getiv(unsigned char *IV,
964              unsigned long *len,
965              symmetric_XXX *XXX);
966
967int XXX_setiv(const unsigned char *IV,
968                    unsigned long  len,
969                    symmetric_XXX *XXX);
970\end{verbatim}
971
972The XXX\_getiv() functions will read the IV out of the chaining mode and store it into \textit{IV} along with the length of the IV
973stored in \textit{len}.  The XXX\_setiv will initialize the chaining mode state as if the original IV were the new IV specified.  The length
974of the IV passed in must be the size of the ciphers block size.
975
976The XXX\_setiv() functions are handy if you wish to change the IV without re--keying the cipher.
977
978What the \textit{setiv} function will do depends on the mode being changed.  In CBC mode, the new IV replaces the existing IV as if it
979were the last ciphertext block.  In CFB mode, the IV is encrypted as if it were the prior encrypted pad.  In CTR mode, the IV is encrypted without
980first incrementing it (regardless of the LTC\_RFC\_3686 flag presence).  In F8 mode, the IV is encrypted and becomes the new pad.  It does not change
981the salted IV, and is only meant to allow seeking within a session.  In LRW, it changes the tweak, forcing a computation of the tweak pad, allowing for
982seeking within the session.  In OFB mode, the IV is encrypted and becomes the new pad.
983
984\subsection{Stream Termination}
985To terminate an open stream call the done function.
986
987\index{ecb\_done()} \index{cbc\_done()}\index{cfb\_done()}\index{ofb\_done()} \index{ctr\_done()}
988\begin{verbatim}
989int XXX_done(symmetric_XXX *XXX);
990\end{verbatim}
991
992This will terminate the stream (by terminating the cipher) and return \textbf{CRYPT\_OK} if successful.
993
994\newpage
995\subsection{Examples}
996\begin{small}
997\begin{verbatim}
998#include <tomcrypt.h>
999int main(void)
1000{
1001   unsigned char key[16], IV[16], buffer[512];
1002   symmetric_CTR ctr;
1003   int x, err;
1004
1005   /* register twofish first */
1006   if (register_cipher(&twofish_desc) == -1) {
1007      printf("Error registering cipher.\n");
1008      return -1;
1009   }
1010
1011   /* somehow fill out key and IV */
1012
1013   /* start up CTR mode */
1014   if ((err = ctr_start(
1015        find_cipher("twofish"), /* index of desired cipher */
1016                            IV, /* the initialization vector */
1017                           key, /* the secret key */
1018                            16, /* length of secret key (16 bytes) */
1019                             0, /* 0 == default # of rounds */
1020     CTR_COUNTER_LITTLE_ENDIAN, /* Little endian counter */
1021                         &ctr)  /* where to store the CTR state */
1022      ) != CRYPT_OK) {
1023      printf("ctr_start error: %s\n", error_to_string(err));
1024      return -1;
1025   }
1026
1027   /* somehow fill buffer than encrypt it */
1028   if ((err = ctr_encrypt(        buffer, /* plaintext */
1029                                  buffer, /* ciphertext */
1030                          sizeof(buffer), /* length of plaintext pt */
1031                                   &ctr)  /* CTR state */
1032      ) != CRYPT_OK) {
1033      printf("ctr_encrypt error: %s\n", error_to_string(err));
1034      return -1;
1035   }
1036
1037   /* make use of ciphertext... */
1038
1039   /* now we want to decrypt so let's use ctr_setiv */
1040   if ((err = ctr_setiv(  IV, /* the initial IV we gave to ctr_start */
1041                          16, /* the IV is 16 bytes long */
1042                        &ctr) /* the ctr state we wish to modify */
1043       ) != CRYPT_OK) {
1044      printf("ctr_setiv error: %s\n", error_to_string(err));
1045      return -1;
1046   }
1047
1048   if ((err = ctr_decrypt(        buffer, /* ciphertext */
1049                                  buffer, /* plaintext */
1050                          sizeof(buffer), /* length of plaintext */
1051                                   &ctr)  /* CTR state */
1052      ) != CRYPT_OK) {
1053      printf("ctr_decrypt error: %s\n", error_to_string(err));
1054      return -1;
1055   }
1056
1057   /* terminate the stream */
1058   if ((err = ctr_done(&ctr)) != CRYPT_OK) {
1059      printf("ctr_done error: %s\n", error_to_string(err));
1060      return -1;
1061   }
1062
1063   /* clear up and return */
1064   zeromem(key, sizeof(key));
1065   zeromem(&ctr, sizeof(ctr));
1066
1067   return 0;
1068}
1069\end{verbatim}
1070\end{small}
1071
1072\subsection{LRW Mode}
1073LRW mode is a cipher mode which is meant for indexed encryption like used to handle storage media.  It is meant to have efficient seeking and overcome the
1074security problems of ECB mode while not increasing the storage requirements.  It is used much like any other chaining mode except with two key differences.
1075
1076The key is specified as two strings the first key $K_1$ is the (normally AES) key and can be any length (typically 16, 24 or 32 octets long).  The second key
1077$K_2$ is the \textit{tweak} key and is always 16 octets long.  The tweak value is \textbf{NOT} a nonce or IV value it must be random and secret.
1078
1079To initialize LRW mode use:
1080
1081\index{lrw\_start()}
1082\begin{verbatim}
1083int lrw_start(                int  cipher,
1084              const unsigned char *IV,
1085              const unsigned char *key,
1086                              int  keylen,
1087              const unsigned char *tweak,
1088                              int  num_rounds,
1089                    symmetric_LRW *lrw);
1090\end{verbatim}
1091
1092This will initialize the LRW context with the given (16 octet) \textit{IV}, cipher $K_1$ \textit{key} of length \textit{keylen} octets and the (16 octet) $K_2$ \textit{tweak}.
1093While LRW was specified to be used only with AES, LibTomCrypt will allow any 128--bit block cipher to be specified as indexed by \textit{cipher}.  The
1094number of rounds for the block cipher \textit{num\_rounds} can be 0 to use the default number of rounds for the given cipher.
1095
1096To process data use the following functions:
1097
1098\index{lrw\_encrypt()} \index{lrw\_decrypt()}
1099\begin{verbatim}
1100int lrw_encrypt(const unsigned char *pt,
1101                      unsigned char *ct,
1102                      unsigned long  len,
1103                      symmetric_LRW *lrw);
1104
1105int lrw_decrypt(const unsigned char *ct,
1106                      unsigned char *pt,
1107                      unsigned long  len,
1108                      symmetric_LRW *lrw);
1109\end{verbatim}
1110
1111These will encrypt (or decrypt) the plaintext to the ciphertext buffer (or vice versa).  The length is specified by \textit{len} in octets but must be a multiple
1112of 16.  The LRW code uses a fast tweak update such that consecutive blocks are encrypted faster than if random seeking where used.
1113
1114To manipulate the IV use the following functions:
1115
1116\index{lrw\_getiv()} \index{lrw\_setiv()}
1117\begin{verbatim}
1118int lrw_getiv(unsigned char *IV,
1119              unsigned long *len,
1120              symmetric_LRW *lrw);
1121
1122int lrw_setiv(const unsigned char *IV,
1123                    unsigned long  len,
1124                    symmetric_LRW *lrw);
1125\end{verbatim}
1126These will get or set the 16--octet IV.  Note that setting the IV is the same as \textit{seeking} and unlike other modes is not a free operation.  It requires
1127updating the entire tweak which is slower than sequential use.  Avoid seeking excessively in performance constrained code.
1128
1129To terminate the LRW state use the following:
1130
1131\index{lrw\_done()}
1132\begin{verbatim}
1133int lrw_done(symmetric_LRW *lrw);
1134\end{verbatim}
1135
1136\subsection{XTS Mode}
1137As of v1.17, LibTomCrypt supports XTS mode with code donated by Elliptic Semiconductor Inc.\footnote{www.ellipticsemi.com}.
1138XTS is a chaining mode for 128--bit block ciphers, recommended by IEEE (P1619)
1139for disk encryption.  It is meant to be an encryption mode with random access to the message data without compromising privacy.  It requires two private keys (of equal
1140length) to perform the encryption process.  Each encryption invocation includes a sector number or unique identifier specified as a 128--bit string.
1141
1142To initialize XTS mode use the following function call:
1143
1144\index{xts\_start()}
1145\begin{verbatim}
1146int xts_start(                int  cipher,
1147              const unsigned char *key1,
1148              const unsigned char *key2,
1149                    unsigned long  keylen,
1150                              int  num_rounds,
1151                    symmetric_xts *xts)
1152\end{verbatim}
1153This will start the XTS mode with the two keys pointed to by \textit{key1} and \textit{key2} of length \textit{keylen} octets each.
1154
1155To encrypt or decrypt a sector use the following calls:
1156
1157\index{xts\_encrypt()} \index{xts\_decrypt()}
1158\begin{verbatim}
1159int xts_encrypt(
1160   const unsigned char *pt, unsigned long ptlen,
1161         unsigned char *ct,
1162   const unsigned char *tweak,
1163         symmetric_xts *xts);
1164
1165int xts_decrypt(
1166   const unsigned char *ct, unsigned long ptlen,
1167         unsigned char *pt,
1168   const unsigned char *tweak,
1169         symmetric_xts *xts);
1170\end{verbatim}
1171The first will encrypt the plaintext pointed to by \textit{pt} of length \textit{ptlen} octets, and store the ciphertext in the array pointed to by
1172\textit{ct}.  It uses the 128--bit tweak pointed to by \textit{tweak} to encrypt the block.  The decrypt function performs the opposite operation.  Both
1173functions support ciphertext stealing (blocks that are not multiples of 16 bytes).
1174
1175The P1619 specification states the tweak for sector number shall be represented as a 128--bit little endian string.
1176
1177To terminate the XTS state call the following function:
1178
1179\index{xts\_done()}
1180\begin{verbatim}
1181void xts_done(symmetric_xts *xts);
1182\end{verbatim}
1183
1184
1185\subsection{F8 Mode}
1186\index{F8 Mode}
1187The F8 Chaining mode (see RFC 3711 for instance) is yet another chaining mode for block ciphers.  It behaves much like CTR mode in that it XORs a keystream
1188against the plaintext to encrypt.  F8 mode comes with the additional twist that the counter value is secret, encrypted by a \textit{salt key}.  We
1189initialize F8 mode with the following function call:
1190
1191\index{f8\_start()}
1192\begin{verbatim}
1193int f8_start(                int  cipher,
1194             const unsigned char *IV,
1195             const unsigned char *key,
1196                             int  keylen,
1197             const unsigned char *salt_key,
1198                             int  skeylen,
1199                             int  num_rounds,
1200                    symmetric_F8 *f8);
1201\end{verbatim}
1202This will start the F8 mode state using \textit{key} as the secret key, \textit{IV} as the counter.  It uses the \textit{salt\_key} as IV encryption key
1203(\textit{m} in the RFC 3711).  The salt\_key can be shorter than the secret key but it should not be longer.
1204
1205To encrypt or decrypt data we use the following two functions:
1206
1207\index{f8\_encrypt()} \index{f8\_decrypt()}
1208\begin{verbatim}
1209int f8_encrypt(const unsigned char *pt,
1210                     unsigned char *ct,
1211                     unsigned long  len,
1212                      symmetric_F8 *f8);
1213
1214int f8_decrypt(const unsigned char *ct,
1215                     unsigned char *pt,
1216                     unsigned long  len,
1217                      symmetric_F8 *f8);
1218\end{verbatim}
1219These will encrypt or decrypt a variable length array of bytes using the F8 mode state specified.  The length is specified in bytes and does not have to be a multiple
1220of the ciphers block size.
1221
1222To change or retrieve the current counter IV value use the following functions:
1223\index{f8\_getiv()} \index{f8\_setiv()}
1224\begin{verbatim}
1225int f8_getiv(unsigned char *IV,
1226             unsigned long *len,
1227              symmetric_F8 *f8);
1228
1229int f8_setiv(const unsigned char *IV,
1230                   unsigned long  len,
1231                    symmetric_F8 *f8);
1232\end{verbatim}
1233These work with the current IV value only and not the encrypted IV value specified during the call to f8\_start().  The purpose of these two functions is to be
1234able to seek within a current session only.  If you want to change the session IV you will have to call f8\_done() and then start a new state with
1235f8\_start().
1236
1237To terminate an F8 state call the following function:
1238
1239\index{f8\_done()}
1240\begin{verbatim}
1241int f8_done(symmetric_F8 *f8);
1242\end{verbatim}
1243
1244\chapter{Stream Ciphers}
1245
1246Stream ciphers are symmetric key ciphers which operate on a stream of bytes (in theory on a stream of bits
1247however LibTomCrypt's implementation works with bytes).
1248
1249The API for all stream ciphers operates in mode: \textit{setup} -- \textit{crypt} -- \textit{crypt} -- ... -- \textit{done}.
1250Please note that both encryption and decryption are implemented via \textit{crypt}.
1251
1252Another useful feature of the stream ciphers API is generation of a random stream of bytes which works like:
1253\textit{setup} -- \textit{keystream} -- \textit{keystream} -- ... -- \textit{done}. The random stream generation is
1254implemented like encryption of a stream of \textit{0x00} bytes.
1255
1256Note: You shouldn't use the keystream interface as a PRNG, as it doesn't allow to re-seed the internal state.
1257
1258\mysection{ChaCha}
1259
1260\textit{ChaCha} is currently the most modern stream cipher included in LibTomCrypt, so use this one unless you
1261have a reason for using some of the older algorithms.
1262
1263For more information about ChaCha see \url{https://en.wikipedia.org/wiki/ChaCha_(cipher)}.
1264
1265Supported key size: 16 or 32 bytes (128 or 256 bits).
1266
1267You can initialize ChaCha with 96bit \textit{nonce} + 32bit \textit{counter}:
1268\begin{verbatim}
1269chacha_state st;
1270err = chacha_setup(&st, key, key_len, rounds);
1271err = chacha_ivctr32(&st, nonce, 12, initial_32bit_ctr);
1272\end{verbatim}
1273
1274Or with 64bit \textit{nonce} + 64bit \textit{counter}:
1275\begin{verbatim}
1276chacha_state st;
1277err = chacha_setup(&st, key, key_len, rounds);
1278err = chacha_ivctr64(&st, nonce, 8, initial_64bit_ctr);
1279\end{verbatim}
1280
1281The \textit{chacha\_setup} takes the number of rounds as a parameter -- choose 20 if you are not sure.
1282As always never ever use the same key + nonce pair more than once.
1283
1284For the actual encryption or decryption you have to call:
1285\begin{verbatim}
1286err = chacha_crypt(&st, in_buffer, in_len, out_buffer);
1287\end{verbatim}
1288
1289If you just want a random stream of bytes initialize the cipher with a truly random \textit{key} (32 bytes),
1290a truly random \textit{nonce} (8 bytes) and zero initial counter. After that you can get a stream of pseudo--random
1291bytes via:
1292\begin{verbatim}
1293err = chacha_keystream(&st, out_buffer, out_len);
1294\end{verbatim}
1295
1296At the end you have to terminate the state:
1297\begin{verbatim}
1298err = chacha_done(&st);
1299\end{verbatim}
1300
1301\mysection{RC4}
1302
1303For more information about RC4 see \url{https://en.wikipedia.org/wiki/RC4}.
1304
1305Supported key size: 5--256 bytes
1306
1307You need to initialize RC4 only with a \textit{key}.
1308\begin{verbatim}
1309rc4_state st;
1310err = rc4_stream_setup(&st, key, key_len);
1311\end{verbatim}
1312
1313For the actual encryption or decryption you have to call:
1314\begin{verbatim}
1315err = rc4_stream_crypt(&st, in_buffer, in_len, out_buffer);
1316\end{verbatim}
1317
1318
1319If you just want a random stream of bytes initialize the cipher with truly random \textit{key}.
1320After that you can get a stream of pseudo--random bytes via:
1321\begin{verbatim}
1322err = rc4_stream_keystream(&st, out_buffer, out_len);
1323\end{verbatim}
1324
1325At the end you have to terminate the state:
1326\begin{verbatim}
1327err = rc4_stream_done(&st);
1328\end{verbatim}
1329
1330\mysection{Sober128}
1331
1332Supported key size: must be multiple of 4 bytes
1333
1334You need to initialize Sober128 with a \textit{key} and a \textit{nonce} (must be multiple of 4 bytes).
1335\begin{verbatim}
1336sober128_state st;
1337err = sober128_stream_setup(&st, key, 16);
1338err = sober128_stream_setiv(&st, nonce, 12);
1339\end{verbatim}
1340
1341For the actual encryption or decryption you to call:
1342\begin{verbatim}
1343err = sober128_stream_crypt(&st, in_buffer, in_len, out_buffer);
1344\end{verbatim}
1345
1346If you just want a random stream of bytes initialize the cipher with a truly random \textit{key}
1347and a truly random \textit{nonce}. After that you can get a stream of pseudo--random bytes via:
1348\begin{verbatim}
1349err = sober128_stream_keystream(&st, out_buffer, out_len);
1350\end{verbatim}
1351
1352At the end you have to terminate the state:
1353\begin{verbatim}
1354err = sober128_stream_done(&st);
1355\end{verbatim}
1356
1357\chapter{Authenticated Encryption}
1358
1359Authenticated Encryption - sometimes also called Authenticated Encryption with Associated Data (AEAD) - is a variant of encryption
1360that provides not only confidentiality (as other symmetric or stream ciphers) but also integrity.
1361
1362The inputs of Authenticated Encryption are: \textit{key}, \textit{nonce} (sometimes called initialization vector), \textit{plaintext},
1363optional \textit{header} (sometimes called additional authenticated data - AAD). The outputs are: \textit{ciphertext} and \textit{tag}.
1364
1365\mysection{EAX Mode}
1366LibTomCrypt provides support for a mode called EAX\footnote{See
1367M. Bellare, P. Rogaway, D. Wagner, A Conventional Authenticated-Encryption Mode.} in a manner similar to the way it was intended to be used
1368by the designers.  First, a short description of what EAX mode is before we explain how to use it.  EAX is a mode that requires a cipher,
1369CTR and OMAC support and provides encryption and
1370authentication\footnote{Note that since EAX only requires OMAC and CTR you may use \textit{encrypt only} cipher descriptors with this mode.}.
1371It is initialized with a random \textit{nonce} that can be shared publicly, a \textit{header} which can be fixed and public, and a random secret symmetric key.
1372
1373The \textit{header} data is meant to be meta--data associated with a stream that isn't private (e.g., protocol messages).  It can
1374be added at anytime during an EAX stream, and is part of the authentication tag.  That is, changes in the meta-data can be detected by changes in the output tag.
1375
1376The mode can then process plaintext producing ciphertext as well as compute a partial checksum.  The actual checksum
1377called a \textit{tag} is only emitted when the message is finished.  In the interim, the user can process any arbitrary
1378sized message block to send to the recipient as ciphertext.  This makes the EAX mode especially suited for streaming modes
1379of operation.
1380
1381The mode is initialized with the following function.
1382\index{eax\_init()}
1383\begin{verbatim}
1384int eax_init(          eax_state *eax,
1385                             int  cipher,
1386             const unsigned char *key,
1387                   unsigned long  keylen,
1388             const unsigned char *nonce,
1389                   unsigned long  noncelen,
1390             const unsigned char *header,
1391                   unsigned long  headerlen);
1392\end{verbatim}
1393
1394Where \textit{eax} is the EAX state.  The \textit{cipher} parameter is the index of the desired cipher in the descriptor table.
1395The \textit{key} parameter is the shared secret symmetric key of length \textit{keylen} octets.  The \textit{nonce} parameter is the
1396random public string of length \textit{noncelen} octets.  The \textit{header} parameter is the random (or fixed or \textbf{NULL}) header for the
1397message of length \textit{headerlen} octets.
1398
1399When this function completes, the \textit{eax} state will be initialized such that you can now either have data decrypted or
1400encrypted in EAX mode.  Note: if \textit{headerlen} is zero you may pass \textit{header} as \textbf{NULL} to indicate there is no initial header data.
1401
1402To encrypt or decrypt data in a streaming mode use the following.
1403\index{eax\_encrypt()} \index{eax\_decrypt()}
1404\begin{verbatim}
1405int eax_encrypt(          eax_state *eax,
1406                const unsigned char *pt,
1407                      unsigned char *ct,
1408                      unsigned long  length);
1409
1410int eax_decrypt(          eax_state *eax,
1411                const unsigned char *ct,
1412                      unsigned char *pt,
1413                      unsigned long  length);
1414\end{verbatim}
1415The function \textit{eax\_encrypt} will encrypt the bytes in \textit{pt} of \textit{length} octets, and store the ciphertext in
1416\textit{ct}.  Note: \textit{ct} and \textit{pt} may be the same region in memory.   This function will also send the ciphertext
1417through the OMAC function.  The function \textit{eax\_decrypt} decrypts \textit{ct}, and stores it in \textit{pt}.  This also allows
1418\textit{pt} and \textit{ct} to be the same region in memory.
1419
1420You cannot both encrypt or decrypt with the same \textit{eax} context.  For bi--directional communication you will need to initialize
1421two EAX contexts (preferably with different headers and nonces).
1422
1423Note: both of these functions allow you to send the data in any granularity but the order is important.  While
1424the eax\_init() function allows you to add initial header data to the stream you can also add header data during the
1425EAX stream with the following.
1426
1427\index{eax\_addheader()}
1428\begin{verbatim}
1429int eax_addheader(          eax_state *eax,
1430                  const unsigned char *header,
1431                        unsigned long  length);
1432\end{verbatim}
1433This will add the \textit{length} octet from \textit{header} to the given \textit{eax} header.  Once the message is finished, the
1434\textit{tag} (checksum) may be computed with the following function:
1435
1436\index{eax\_done()}
1437\begin{verbatim}
1438int eax_done(    eax_state *eax,
1439             unsigned char *tag,
1440             unsigned long *taglen);
1441\end{verbatim}
1442This will terminate the EAX state \textit{eax}, and store up to \textit{taglen} bytes of the message tag in \textit{tag}.  The function
1443then stores how many bytes of the tag were written out back in to \textit{taglen}.
1444
1445The EAX mode code can be tested to ensure it matches the test vectors by calling the following function:
1446\index{eax\_test()}
1447\begin{verbatim}
1448int eax_test(void);
1449\end{verbatim}
1450This requires that the AES (or Rijndael) block cipher be registered with the cipher\_descriptor table first.
1451
1452\begin{verbatim}
1453#include <tomcrypt.h>
1454int main(void)
1455{
1456   int           err;
1457   eax_state     eax;
1458   unsigned char pt[64], ct[64], nonce[16], key[16], tag[16];
1459   unsigned long taglen;
1460
1461   if (register_cipher(&rijndael_desc) == -1) {
1462      printf("Error registering Rijndael");
1463      return EXIT_FAILURE;
1464   }
1465
1466   /* ... make up random nonce and key ... */
1467
1468   /* initialize context */
1469   if ((err = eax_init(            &eax,  /* context */
1470                find_cipher("rijndael"),  /* cipher id */
1471                                  nonce,  /* the nonce */
1472                                     16,  /* nonce is 16 bytes */
1473                              "TestApp",  /* example header */
1474                                      7)  /* header length */
1475       ) != CRYPT_OK) {
1476      printf("Error eax_init: %s", error_to_string(err));
1477      return EXIT_FAILURE;
1478   }
1479
1480   /* now encrypt data, say in a loop or whatever */
1481   if ((err = eax_encrypt(     &eax, /* eax context */
1482                                 pt, /* plaintext  (source) */
1483                                 ct, /* ciphertext (destination) */
1484                          sizeof(pt) /* size of plaintext */
1485      ) != CRYPT_OK) {
1486      printf("Error eax_encrypt: %s", error_to_string(err));
1487      return EXIT_FAILURE;
1488   }
1489
1490   /* finish message and get authentication tag */
1491   taglen = sizeof(tag);
1492   if ((err = eax_done(   &eax,      /* eax context */
1493                           tag,      /* where to put tag */
1494                       &taglen       /* length of tag space */
1495      ) != CRYPT_OK) {
1496      printf("Error eax_done: %s", error_to_string(err));
1497      return EXIT_FAILURE;
1498   }
1499
1500   /* now we have the authentication tag in "tag" and
1501    * it's taglen bytes long */
1502}
1503\end{verbatim}
1504
1505You can also perform an entire EAX state on a block of memory in a single function call with the
1506following functions.
1507
1508
1509\index{eax\_encrypt\_authenticate\_memory} \index{eax\_decrypt\_verify\_memory}
1510\begin{verbatim}
1511int eax_encrypt_authenticate_memory(
1512                    int  cipher,
1513    const unsigned char *key,    unsigned long keylen,
1514    const unsigned char *nonce,  unsigned long noncelen,
1515    const unsigned char *header, unsigned long headerlen,
1516    const unsigned char *pt,     unsigned long ptlen,
1517          unsigned char *ct,
1518          unsigned char *tag,    unsigned long *taglen);
1519
1520int eax_decrypt_verify_memory(
1521                    int  cipher,
1522    const unsigned char *key,    unsigned long keylen,
1523    const unsigned char *nonce,  unsigned long noncelen,
1524    const unsigned char *header, unsigned long headerlen,
1525    const unsigned char *ct,     unsigned long ctlen,
1526          unsigned char *pt,
1527          unsigned char *tag,    unsigned long taglen,
1528          int           *res);
1529\end{verbatim}
1530
1531Both essentially just call eax\_init() followed by eax\_encrypt() (or eax\_decrypt() respectively) and eax\_done().  The parameters
1532have the same meaning as with those respective functions.
1533
1534The only difference is eax\_decrypt\_verify\_memory() does not emit a tag.  Instead you pass it a tag as input and it compares it against
1535the tag it computed while decrypting the message.  If the tags match then it stores a $1$ in \textit{res}, otherwise it stores a $0$.
1536
1537\mysection{OCB Modes}
1538\subsection{Preface}
1539
1540LibTomCrypt provides support for a mode called OCB in version 1 ''OCB''\footnote{See
1541P. Rogaway, M. Bellare, J. Black, T. Krovetz, \textit{OCB: A Block Cipher Mode of Operation for Efficient Authenticated Encryption}.}
1542and version 3 ''OCB3''\footnote{See RFC7253, T. Krovetz, P. Rogaway, \textit{The OCB Authenticated-Encryption Algorithm}.}.
1543OCB is an encryption protocol that simultaneously provides authentication.  It is slightly faster to use than EAX mode
1544but is less flexible.
1545
1546Please be aware that all versions of OCB are patented and there are several licensing models provided by P. Rogaway, the patent holder
1547-- see \url{http://web.cs.ucdavis.edu/~rogaway/ocb/license.htm}.
1548
1549\subsection{OCB}
1550\subsubsection{Initialization and processing}
1551
1552Let's review how to initialize an OCB context.
1553
1554\index{ocb\_init()}
1555\begin{verbatim}
1556int ocb_init(          ocb_state *ocb,
1557                             int  cipher,
1558             const unsigned char *key,
1559                   unsigned long  keylen,
1560             const unsigned char *nonce);
1561\end{verbatim}
1562
1563This will initialize the \textit{ocb} context using cipher descriptor \textit{cipher}.  It will use a \textit{key} of length \textit{keylen}
1564and the random \textit{nonce}.  Note that \textit{nonce} must be a random (public) string the same length as the block ciphers
1565block size (e.g. 16 bytes for AES).
1566
1567This mode has no \textit{Associated Data} like EAX mode does which means you cannot authenticate metadata along with the stream.
1568To encrypt or decrypt data use the following.
1569
1570\index{ocb\_encrypt()} \index{ocb\_decrypt()}
1571\begin{verbatim}
1572int ocb_encrypt(          ocb_state *ocb,
1573                const unsigned char *pt,
1574                      unsigned char *ct);
1575
1576int ocb_decrypt(          ocb_state *ocb,
1577                const unsigned char *ct,
1578                      unsigned char *pt);
1579\end{verbatim}
1580
1581This will encrypt (or decrypt for the latter) a fixed length of data from \textit{pt} to \textit{ct} (vice versa for the latter).
1582They assume that \textit{pt} and \textit{ct} are the same size as the block cipher's block size.  Note that you cannot call
1583both functions given a single \textit{ocb} state.  For bi-directional communication you will have to initialize two \textit{ocb}
1584states (with different nonces).  Also \textit{pt} and \textit{ct} may point to the same location in memory.
1585
1586\subsubsection{State Termination}
1587
1588When you are finished encrypting the message you call the following function to compute the tag.
1589
1590\index{ocb\_done\_encrypt()}
1591\begin{verbatim}
1592int ocb_done_encrypt(          ocb_state *ocb,
1593                     const unsigned char *pt,
1594                           unsigned long  ptlen,
1595                           unsigned char *ct,
1596                           unsigned char *tag,
1597                           unsigned long *taglen);
1598\end{verbatim}
1599
1600This will terminate an encrypt stream \textit{ocb}.  If you have trailing bytes of plaintext that will not complete a block
1601you can pass them here.  This will also encrypt the \textit{ptlen} bytes in \textit{pt} and store them in \textit{ct}.  It will also
1602store up to \textit{taglen} bytes of the tag into \textit{tag}.
1603
1604Note that \textit{ptlen} must be less than or equal to the block size of block cipher chosen.  Also note that if you have
1605an input message equal to the length of the block size then you pass the data here (not to ocb\_encrypt()) only.
1606
1607To terminate a decrypt stream and compared the tag you call the following.
1608
1609\index{ocb\_done\_decrypt()}
1610\begin{verbatim}
1611int ocb_done_decrypt(          ocb_state *ocb,
1612                     const unsigned char *ct,
1613                           unsigned long  ctlen,
1614                           unsigned char *pt,
1615                     const unsigned char *tag,
1616                           unsigned long  taglen,
1617                                     int *res);
1618\end{verbatim}
1619Similarly to the previous function you can pass trailing message bytes into this function.  This will compute the
1620tag of the message (internally) and then compare it against the \textit{taglen} bytes of \textit{tag} provided.  By default
1621\textit{res} is set to zero.  If all \textit{taglen} bytes of \textit{tag} can be verified then \textit{res} is set to one (authenticated
1622message).
1623
1624\subsubsection{Packet Functions}
1625To make life simpler the following two functions are provided for memory bound OCB.
1626
1627%\index{ocb\_encrypt\_authenticate\_memory()}
1628\begin{verbatim}
1629int ocb_encrypt_authenticate_memory(
1630                    int  cipher,
1631    const unsigned char *key,    unsigned long keylen,
1632    const unsigned char *nonce,
1633    const unsigned char *pt,     unsigned long ptlen,
1634          unsigned char *ct,
1635          unsigned char *tag,    unsigned long *taglen);
1636\end{verbatim}
1637
1638This will OCB encrypt the message \textit{pt} of length \textit{ptlen}, and store the ciphertext in \textit{ct}.  The length \textit{ptlen}
1639can be any arbitrary length.
1640
1641\index{ocb\_decrypt\_verify\_memory()}
1642\begin{verbatim}
1643int ocb_decrypt_verify_memory(
1644                    int  cipher,
1645    const unsigned char *key,    unsigned long keylen,
1646    const unsigned char *nonce,
1647    const unsigned char *ct,     unsigned long ctlen,
1648          unsigned char *pt,
1649    const unsigned char *tag,    unsigned long taglen,
1650          int           *res);
1651\end{verbatim}
1652
1653Similarly, this will OCB decrypt, and compare the internally computed tag against the tag provided. \textit{res} is set
1654appropriately to \textit{1} if the tag matches or to \textit{0} if it doesn't match.
1655
1656\subsection{OCB3}
1657\subsubsection{Initialization and processing}
1658
1659\index{ocb3\_init()}
1660\begin{verbatim}
1661int ocb3_init(ocb3_state *ocb, int cipher,
1662             const unsigned char *key, unsigned long keylen,
1663             const unsigned char *nonce, unsigned long noncelen,
1664             unsigned long taglen);
1665\end{verbatim}
1666
1667This will initialize the \textit{ocb} context using cipher descriptor \textit{cipher}.  It will use a \textit{key} of length \textit{keylen}
1668and the random \textit{nonce} of length \textit{noncelen}.  The \textit{nonce} must be a random (public) string of an arbitrary length
1669between 1 and 15 octets.  The desired length of the TAG that should be created when terminating the state has to be passed in \textit{taglen}
1670and has to be between 0 and 16 octets.
1671
1672Note that you can only use ciphers with a block length of 16.
1673
1674\subsubsection{Additional Authenticated Data}
1675
1676OCB3 has, in contrary to OCB, the possibility to add "Additional Authenticated Data" (AAD) when performing cryptographic operations.
1677
1678\index{ocb3\_add\_aad()}
1679\begin{verbatim}
1680int ocb3_add_aad(ocb3_state *ocb, const unsigned char *aad, unsigned long aadlen);
1681\end{verbatim}
1682
1683This will add the AAD at \textit{aad} of the arbitrary length \textit{aadlen} to be authenticated within the context \textit{ocb}.
1684
1685\index{ocb3\_encrypt()} \index{ocb3\_decrypt()}
1686\begin{verbatim}
1687int ocb3_encrypt(         ocb3_state *ocb,
1688                 const unsigned char *pt,
1689                       unsigned long ptlen,
1690                       unsigned char *ct);
1691
1692int ocb3_decrypt(         ocb3_state *ocb,
1693                 const unsigned char *ct,
1694                       unsigned long ctlen,
1695                       unsigned char *pt);
1696\end{verbatim}
1697
1698This will encrypt (or decrypt for the latter) a fixed length of data from \textit{pt} to \textit{ct} (vice versa for the latter).
1699They assume that \textit{pt} and \textit{ct} are the same size as the block cipher's block size.  Note that you cannot call
1700both functions given a single \textit{ocb} state.  For bi-directional communication you will have to initialize two \textit{ocb}
1701states (with different nonces).  Also \textit{pt} and \textit{ct} may point to the same location in memory.
1702
1703\subsubsection{State Termination}
1704
1705\index{ocb3\_encrypt\_last()} \index{ocb3\_decrypt\_last()}
1706\begin{verbatim}
1707int ocb3_encrypt_last(         ocb3_state *ocb,
1708                      const unsigned char *pt,
1709                            unsigned long ptlen,
1710                            unsigned char *ct);
1711
1712int ocb3_decrypt_last(         ocb3_state *ocb,
1713                      const unsigned char *ct,
1714                            unsigned long ctlen,
1715                            unsigned char *pt);
1716\end{verbatim}
1717
1718This has to be called for the last encrypt (or decrypt) operation. Note that if you have to invoke only a single operation you can
1719directly use these functions instead of \textit{ocb3\_encrypt()} or \textit{ocb3\_decrypt()}.
1720
1721When you are finished encrypting the message you call the following function to compute the tag.
1722
1723\index{ocb3\_done()}
1724\begin{verbatim}
1725int ocb3_done(ocb3_state *ocb, unsigned char *tag, unsigned long *taglen);
1726\end{verbatim}
1727
1728This stores the tag of the \textit{ocb} state in \textit{tag}.
1729The \textit{taglen} parameter defines on input the length of the tag to output and will be set to the actual length written, which
1730is at most 16 octets.
1731
1732\subsubsection{Packet Functions}
1733To make life simpler the following two functions are provided for memory bound OCB3.
1734
1735\index{ocb3\_encrypt\_authenticate\_memory()}
1736\begin{verbatim}
1737int ocb3_encrypt_authenticate_memory(int cipher,
1738    const unsigned char *key,    unsigned long keylen,
1739    const unsigned char *nonce,  unsigned long noncelen,
1740    const unsigned char *adata,  unsigned long adatalen,
1741    const unsigned char *pt,     unsigned long ptlen,
1742          unsigned char *ct,
1743          unsigned char *tag,    unsigned long *taglen);
1744\end{verbatim}
1745
1746This will OCB3 encrypt the message \textit{pt} of length \textit{ptlen}, and store the ciphertext in \textit{ct}.  The length \textit{ptlen}
1747can be any arbitrary length.  The additional authenticated data \textit{adata} of length \textit{adatalen} is optional and can be left out
1748by passing \textit{NULL} as \textit{adata}. The length of the authentication TAG will be stored in \textit{tag}, which is also optional.
1749The length of the TAG passed in \textit{taglen} has to be between 0 and 16.
1750
1751\index{ocb3\_decrypt\_verify\_memory()}
1752\begin{verbatim}
1753int ocb3_decrypt_verify_memory(int cipher,
1754    const unsigned char *key,    unsigned long keylen,
1755    const unsigned char *nonce,  unsigned long noncelen,
1756    const unsigned char *adata,  unsigned long adatalen,
1757    const unsigned char *ct,     unsigned long ctlen,
1758          unsigned char *pt,
1759    const unsigned char *tag,    unsigned long taglen,
1760          int           *stat);
1761\end{verbatim}
1762
1763Similarly, this will OCB3 decrypt, and compare the internally computed tag against the tag provided. \textit{res} is set
1764appropriately to \textit{1} if the tag matches or to \textit{0} if it doesn't match.
1765
1766\mysection{CCM Mode}
1767CCM is a NIST proposal for encrypt + authenticate that is centered around using AES (or any 16--byte cipher) as a primitive.
1768
1769\subsection{Initialization}
1770To initialize the CCM context with a secret key call the following function.
1771
1772\index{ccm\_init()}
1773\begin{verbatim}
1774int ccm_init(      ccm_state *ccm,
1775                   int cipher,
1776             const unsigned char *key,
1777                   int keylen,
1778                   int ptlen,
1779                   int taglen,
1780                   int aadlen);
1781\end{verbatim}
1782This initializes the CCM state \textit{ccm} for the given cipher indexed by \textit{cipher}, with a secret key \textit{key} of length \textit{keylen} octets. The cipher
1783chosen must have a 16--byte block size (e.g., AES).
1784Unlike EAX and OCB mode, CCM is only meant for \textit{packet} mode where the length of the input is known in advance. This is why the length of the stream
1785to authenticate is given as \textit{ptlen}.
1786With CCM, a header is meta--data you want to send with the message but not have encrypted. The header len is given in the init
1787as \textit{aadlen}.
1788
1789\subsection{Nonce Vector}
1790After the state has been initialized (or reset) the next step is to add the session (or packet) initialization vector.  It should be unique per packet encrypted.
1791
1792\index{ccm\_add\_nonce()}
1793\begin{verbatim}
1794int ccm_add_nonce(      ccm_state *ccm,
1795                  const unsigned char *nonce,
1796                        unsigned long noncelen);
1797\end{verbatim}
1798
1799This adds the nonce (a.k.a. salt) \textit{nonce} of length \textit{noncelen} octets to the CCM state \textit{ccm}. Note that this function must be called
1800once and only once.
1801
1802\subsection{Additional Authentication Data}
1803The header is meta--data you want to send with the message but not have encrypted, it must be stored in \textit{adata} of length \textit{adatalen} octets.
1804
1805\index{ccm\_add\_aad()}
1806\begin{verbatim}
1807int ccm_add_aad(      ccm_state *ccm,
1808                const unsigned char *adata,
1809                      unsigned long adatalen);
1810\end{verbatim}
1811This adds the additional authentication data \textit{adata} of length \textit{adatalen} to the CCM state \textit{ccm}.
1812
1813\subsection{Plaintext Processing}
1814After the AAD has been processed, the plaintext (or ciphertext depending on the direction) can be processed.
1815
1816\index{ccm\_process()}
1817\begin{verbatim}
1818int ccm_process(ccm_state *ccm,
1819                unsigned char *pt,
1820                unsigned long  ptlen,
1821                unsigned char *ct,
1822                int  direction);
1823\end{verbatim}
1824This processes message data where \textit{pt} is the plaintext and \textit{ct} is the ciphertext.  The length of both are equal and stored in \textit{ptlen}.  Depending on
1825the mode \textit{pt} is the input and \textit{ct} is the output (or vice versa).  When \textit{direction} equals \textbf{CCM\_ENCRYPT} the plaintext is read,
1826encrypted and stored in the ciphertext buffer.  When \textit{direction} equals \textbf{CCM\_DECRYPT} the opposite occurs.
1827
1828\subsection{State Termination}
1829To terminate a CCM state and retrieve the message authentication tag call the following function.
1830
1831\index{ccm\_done()}
1832\begin{verbatim}
1833int ccm_done(    ccm_state *ccm,
1834             unsigned char *tag,
1835             unsigned long *taglen);
1836\end{verbatim}
1837This terminates the CCM state \textit{ccm} and stores the tag in \textit{tag} of length \textit{taglen} octets.
1838
1839\subsection{State Reset}
1840The call to ccm\_init() will perform considerable pre--computation and if you're going to be dealing with a lot of packets
1841it is very costly to have to call it repeatedly.  To aid in this endeavour, the reset function is provided.
1842
1843\index{ccm\_reset()}
1844\begin{verbatim}
1845int ccm_reset(ccm_state *ccm);
1846\end{verbatim}
1847
1848This will reset the CCM state \textit{ccm} to the state that ccm\_init() left it.  The user would then call ccm\_add\_nonce(), ccm\_add\_aad(), etc.
1849
1850\subsection{One--Shot Packet}
1851To process a single packet under any given key the following helper function can be used.
1852
1853\index{ccm\_memory()}
1854\begin{verbatim}
1855int ccm_memory(
1856                    int  cipher,
1857    const unsigned char *key,    unsigned long keylen,
1858    symmetric_key       *uskey,
1859    const unsigned char *nonce,  unsigned long noncelen,
1860    const unsigned char *header, unsigned long headerlen,
1861          unsigned char *pt,     unsigned long ptlen,
1862          unsigned char *ct,
1863          unsigned char *tag,    unsigned long *taglen,
1864                    int  direction);
1865\end{verbatim}
1866
1867This will initialize the CCM state with the given key, nonce and AAD value then proceed to encrypt or decrypt the message text and store the final
1868message tag.  The definition of the variables is the same as it is for all the manual functions.
1869
1870If you are processing many packets under the same key you shouldn't use this function as it invokes the pre--computation with each call.
1871
1872\subsection{Example Usage}
1873The following is an example usage of how to use CCM over multiple packets with a shared secret key.
1874
1875\begin{small}
1876\begin{verbatim}
1877#include <tomcrypt.h>
1878
1879int send_packet(const unsigned char *pt,     unsigned long ptlen,
1880                const unsigned char *nonce,  unsigned long noncelen,
1881                const unsigned char *aad,    unsigned long aadlen,
1882                      ccm_state     *ccm)
1883{
1884   int           err;
1885   unsigned long taglen;
1886   unsigned char tag[16];
1887
1888   /* reset the state */
1889   if ((err = ccm_reset(ccm)) != CRYPT_OK) {
1890      return err;
1891   }
1892
1893   /* Add the nonce */
1894   if ((err = ccm_add_nonce(ccm, nonce, noncelen)) != CRYPT_OK) {
1895      return err;
1896   }
1897
1898   /* Add the AAD (note: aad can be NULL if aadlen == 0) */
1899   if ((err = ccm_add_aad(ccm, aad, aadlen)) != CRYPT_OK) {
1900      return err;
1901   }
1902
1903   /* process the plaintext */
1904   if ((err =
1905        ccm_process(ccm, pt, ptlen, pt, CCM_ENCRYPT)) != CRYPT_OK) {
1906      return err;
1907   }
1908
1909   /* Finish up and get the MAC tag */
1910   taglen = sizeof(tag);
1911   if ((err = ccm_done(ccm, tag, &taglen)) != CRYPT_OK) {
1912      return err;
1913   }
1914
1915   /* ... send a header describing the lengths ... */
1916
1917   /* depending on the protocol and how nonce is
1918    * generated you may have to send it too... */
1919   send(socket, nonce, noncelen, 0);
1920
1921   /* send the aad */
1922   send(socket, aad, aadlen, 0);
1923
1924   /* send the ciphertext */
1925   send(socket, pt, ptlen, 0);
1926
1927   /* send the tag */
1928   send(socket, tag, taglen, 0);
1929
1930   return CRYPT_OK;
1931}
1932
1933int main(void)
1934{
1935   ccm_state     ccm;
1936   unsigned char key[16], NONCE[12], pt[PACKET_SIZE];
1937   int           err, x;
1938   unsigned long ptlen;
1939
1940   /* somehow fill key/NONCE with random values */
1941
1942   /* register AES */
1943   register_cipher(&aes_desc);
1944
1945   /* init the CCM state */
1946   if ((err =
1947        ccm_init(&ccm, find_cipher("aes"), key, 16, PACKET_SIZE, 16, size(NONCE))) != CRYPT_OK) {
1948      whine_and_pout(err);
1949   }
1950
1951   /* handle us some packets */
1952   for (;;) {
1953       ptlen = make_packet_we_want_to_send(pt);
1954
1955       /* use NONCE as counter (12 byte counter) */
1956       for (x = 11; x >= 0; x--) {
1957           if (++NONCE[x]) {
1958              break;
1959           }
1960       }
1961
1962       if ((err = send_packet(pt, ptlen, NONCE, 12, NULL, 0, &ccm))
1963           != CRYPT_OK) {
1964           whine_and_pout(err);
1965       }
1966   }
1967   return EXIT_SUCCESS;
1968}
1969\end{verbatim}
1970\end{small}
1971
1972\mysection{GCM Mode}
1973Galois counter mode is an IEEE proposal for authenticated encryption (also it is a planned NIST standard).  Like EAX and OCB mode, it can be used in a streaming capacity
1974however, unlike EAX it cannot accept \textit{additional authentication data} (meta--data) after plaintext has been processed.  This mode also only works with
1975block ciphers with a 16--byte block.
1976
1977A GCM stream is meant to be processed in three modes, one after another.  First, the initialization vector (per session) data is processed.  This should be
1978unique to every session.  Next, the the optional additional authentication data is processed, and finally the plaintext (or ciphertext depending on the direction).
1979
1980\subsection{Initialization}
1981To initialize the GCM context with a secret key call the following function.
1982
1983\index{gcm\_init()}
1984\begin{verbatim}
1985int gcm_init(          gcm_state *gcm,
1986                             int  cipher,
1987             const unsigned char *key,
1988                             int  keylen);
1989\end{verbatim}
1990This initializes the GCM state \textit{gcm} for the given cipher indexed by \textit{cipher}, with a secret key \textit{key} of length \textit{keylen} octets.  The cipher
1991chosen must have a 16--byte block size (e.g., AES).
1992
1993\subsection{Initialization Vector}
1994After the state has been initialized (or reset) the next step is to add the session (or packet) initialization vector.  It should be unique per packet encrypted.
1995
1996\index{gcm\_add\_iv()}
1997\begin{verbatim}
1998int gcm_add_iv(          gcm_state *gcm,
1999               const unsigned char *IV,
2000                     unsigned long  IVlen);
2001\end{verbatim}
2002This adds the initialization vector octets from \textit{IV} of length \textit{IVlen} to the GCM state \textit{gcm}.  You can call this function as many times as required
2003to process the entire IV.
2004
2005Note: the GCM protocols provides a \textit{shortcut} for 12--byte IVs where no pre-processing is to be done.  If you want to minimize per packet latency it is ideal
2006to only use 12--byte IVs.  You can just increment it like a counter for each packet.
2007
2008\subsection{Additional Authentication Data}
2009After the entire IV has been processed, the additional authentication data can be processed.  Unlike the IV, a packet/session does not require additional
2010authentication data (AAD) for security.  The AAD is meant to be used as side--channel data you want to be authenticated with the packet.  Note:  once
2011you begin adding AAD to the GCM state you cannot return to adding IV data until the state has been reset.
2012
2013\index{gcm\_add\_aad()}
2014\begin{verbatim}
2015int gcm_add_aad(          gcm_state *gcm,
2016                const unsigned char *adata,
2017                      unsigned long  adatalen);
2018\end{verbatim}
2019This adds the additional authentication data \textit{adata} of length \textit{adatalen} to the GCM state \textit{gcm}.
2020
2021\subsection{Plaintext Processing}
2022After the AAD has been processed, the plaintext (or ciphertext depending on the direction) can be processed.
2023
2024\index{gcm\_process()}
2025\begin{verbatim}
2026int gcm_process(    gcm_state *gcm,
2027                unsigned char *pt,
2028                unsigned long  ptlen,
2029                unsigned char *ct,
2030                          int  direction);
2031\end{verbatim}
2032This processes message data where \textit{pt} is the plaintext and \textit{ct} is the ciphertext.  The length of both are equal and stored in \textit{ptlen}.  Depending on
2033the mode \textit{pt} is the input and \textit{ct} is the output (or vice versa).  When \textit{direction} equals \textbf{GCM\_ENCRYPT} the plaintext is read,
2034encrypted and stored in the ciphertext buffer.  When \textit{direction} equals \textbf{GCM\_DECRYPT} the opposite occurs.
2035
2036\subsection{State Termination}
2037To terminate a GCM state and retrieve the message authentication tag call the following function.
2038
2039\index{gcm\_done()}
2040\begin{verbatim}
2041int gcm_done(    gcm_state *gcm,
2042             unsigned char *tag,
2043             unsigned long *taglen);
2044\end{verbatim}
2045This terminates the GCM state \textit{gcm} and stores the tag in \textit{tag} of length \textit{taglen} octets.
2046
2047\subsection{State Reset}
2048The call to gcm\_init() will perform considerable pre--computation (when \textbf{GCM\_TABLES} is defined) and if you're going to be dealing with a lot of packets
2049it is very costly to have to call it repeatedly.  To aid in this endeavour, the reset function has been provided.
2050
2051\index{gcm\_reset()}
2052\begin{verbatim}
2053int gcm_reset(gcm_state *gcm);
2054\end{verbatim}
2055
2056This will reset the GCM state \textit{gcm} to the state that gcm\_init() left it.  The user would then call gcm\_add\_iv(), gcm\_add\_aad(), etc.
2057
2058\subsection{One--Shot Packet}
2059To process a single packet under any given key the following helper function can be used.
2060
2061\index{gcm\_memory()}
2062\begin{verbatim}
2063int gcm_memory(
2064                    int  cipher,
2065    const unsigned char *key,
2066          unsigned long keylen,
2067    const unsigned char *IV,    unsigned long IVlen,
2068    const unsigned char *adata, unsigned long adatalen,
2069          unsigned char *pt,    unsigned long ptlen,
2070          unsigned char *ct,
2071          unsigned char *tag,   unsigned long *taglen,
2072                    int  direction);
2073\end{verbatim}
2074
2075This will initialize the GCM state with the given key, IV and AAD value then proceed to encrypt or decrypt the message text and store the final
2076message tag.  The definition of the variables is the same as it is for all the manual functions.
2077
2078If you are processing many packets under the same key you shouldn't use this function as it invokes the pre--computation with each call.
2079
2080\subsection{Example Usage}
2081The following is an example usage of how to use GCM over multiple packets with a shared secret key.
2082
2083\begin{small}
2084\begin{verbatim}
2085#include <tomcrypt.h>
2086
2087int send_packet(const unsigned char *pt,  unsigned long ptlen,
2088                const unsigned char *iv,  unsigned long ivlen,
2089                const unsigned char *aad, unsigned long aadlen,
2090                      gcm_state     *gcm)
2091{
2092   int           err;
2093   unsigned long taglen;
2094   unsigned char tag[16];
2095
2096   /* reset the state */
2097   if ((err = gcm_reset(gcm)) != CRYPT_OK) {
2098      return err;
2099   }
2100
2101   /* Add the IV */
2102   if ((err = gcm_add_iv(gcm, iv, ivlen)) != CRYPT_OK) {
2103      return err;
2104   }
2105
2106   /* Add the AAD (note: aad can be NULL if aadlen == 0) */
2107   if ((err = gcm_add_aad(gcm, aad, aadlen)) != CRYPT_OK) {
2108      return err;
2109   }
2110
2111   /* process the plaintext */
2112   if ((err =
2113        gcm_process(gcm, pt, ptlen, pt, GCM_ENCRYPT)) != CRYPT_OK) {
2114      return err;
2115   }
2116
2117   /* Finish up and get the MAC tag */
2118   taglen = sizeof(tag);
2119   if ((err = gcm_done(gcm, tag, &taglen)) != CRYPT_OK) {
2120      return err;
2121   }
2122
2123   /* ... send a header describing the lengths ... */
2124
2125   /* depending on the protocol and how IV is
2126    * generated you may have to send it too... */
2127   send(socket, iv, ivlen, 0);
2128
2129   /* send the aad */
2130   send(socket, aad, aadlen, 0);
2131
2132   /* send the ciphertext */
2133   send(socket, pt, ptlen, 0);
2134
2135   /* send the tag */
2136   send(socket, tag, taglen, 0);
2137
2138   return CRYPT_OK;
2139}
2140
2141int main(void)
2142{
2143   gcm_state     gcm;
2144   unsigned char key[16], IV[12], pt[PACKET_SIZE];
2145   int           err, x;
2146   unsigned long ptlen;
2147
2148   /* somehow fill key/IV with random values */
2149
2150   /* register AES */
2151   register_cipher(&aes_desc);
2152
2153   /* init the GCM state */
2154   if ((err =
2155        gcm_init(&gcm, find_cipher("aes"), key, 16)) != CRYPT_OK) {
2156      whine_and_pout(err);
2157   }
2158
2159   /* handle us some packets */
2160   for (;;) {
2161       ptlen = make_packet_we_want_to_send(pt);
2162
2163       /* use IV as counter (12 byte counter) */
2164       for (x = 11; x >= 0; x--) {
2165           if (++IV[x]) {
2166              break;
2167           }
2168       }
2169
2170       if ((err = send_packet(pt, ptlen, iv, 12, NULL, 0, &gcm))
2171           != CRYPT_OK) {
2172           whine_and_pout(err);
2173       }
2174   }
2175   return EXIT_SUCCESS;
2176}
2177\end{verbatim}
2178\end{small}
2179
2180\mysection{ChaCha20--Poly1305}
2181
2182This authenticated encryption is based on ChaCha20 stream cipher and Poly1305 authenticator.
2183It is defined by \url{https://tools.ietf.org/html/rfc7539}.
2184
2185\subsection{Initialization}
2186To initialize the ChaCha20--Poly1305 context with a secret key call the following function.
2187
2188\index{chacha20poly1305\_init()}
2189\begin{verbatim}
2190int chacha20poly1305_init(chacha20poly1305_state *st,
2191                             const unsigned char *key,
2192                                   unsigned long  keylen);
2193\end{verbatim}
2194This initializes the ChaCha20--Poly1305 state \textit{st} with a secret key \textit{key} of length \textit{keylen}
2195octets (valid lengths: 32 or 16).
2196
2197\subsection{Initialization Vector}
2198After the state has been initialized the next step is to add the initialization vector.
2199
2200\index{chacha20poly1305\_setiv()}
2201\begin{verbatim}
2202int chacha20poly1305_setiv(chacha20poly1305_state *st,
2203                              const unsigned char *iv,
2204                                    unsigned long  ivlen);
2205\end{verbatim}
2206This adds the initialization vector from \textit{iv} of length \textit{ivlen} octects (valid lengths: 8 or 12) to
2207the ChaCha20--Poly1305 state \textit{st}.
2208
2209\index{chacha20poly1305\_setiv\_rfc7905()}
2210\begin{verbatim}
2211int chacha20poly1305_setiv_rfc7905(chacha20poly1305_state *st,
2212                                      const unsigned char *iv,
2213                                            unsigned long  ivlen,
2214                                                  ulong64  sequence_number);
2215\end{verbatim}
2216This also adds the initialization vector from \textit{iv} of length \textit{ivlen} octects (valid lengths: 8 or 12) to
2217the state \textit{st} but it also incorporates 64bit \textit{sequence\_number} into IV as described in RFC7905.
2218
2219You can call only one of \textit{chacha20poly1305\_setiv} or \textit{chacha20poly1305\_setiv\_rfc7905}.
2220
2221\subsection{Additional Authentication Data}
2222After the IV has been set, the additional authentication data can be processed.
2223
2224\index{chacha20poly1305\_add\_aad()}
2225\begin{verbatim}
2226int chacha20poly1305_add_aad(chacha20poly1305_state *st,
2227                                const unsigned char *adata,
2228                                      unsigned long  adatalen);
2229
2230\end{verbatim}
2231This adds the additional authentication data \textit{adata} of length \textit{adatalen} to the ChaCha20--Poly1305 state \textit{st}.
2232
2233\subsection{Encryption / Decryption}
2234After the AAD has been processed, the plaintext (or ciphertext depending on the direction) can be processed.
2235
2236\index{chacha20poly1305\_encrypt()}
2237\begin{verbatim}
2238int chacha20poly1305_encrypt(chacha20poly1305_state *st,
2239                                const unsigned char *in,
2240                                      unsigned long  inlen,
2241                                      unsigned char *out);
2242\end{verbatim}
2243This encrypts the data where \textit{in} is the plaintext and \textit{out} is the ciphertext. The length of both are equal and stored in \textit{inlen}.
2244
2245\index{chacha20poly1305\_decrypt()}
2246\begin{verbatim}
2247int chacha20poly1305_decrypt(chacha20poly1305_state *st,
2248                                const unsigned char *in,
2249                                      unsigned long  inlen,
2250                                      unsigned char *out);
2251\end{verbatim}
2252This decrypts the data where \textit{in} is the ciphertext and \textit{out} is the plaintext. The length of both are equal and stored in \textit{inlen}.
2253
2254\subsection{State Termination}
2255To terminate a ChaCha20--Poly1305 state and retrieve the message authentication tag call the following function.
2256
2257\index{chacha20poly1305\_done()}
2258\begin{verbatim}
2259int chacha20poly1305_done(chacha20poly1305_state *st,
2260                                   unsigned char *tag,
2261                                   unsigned long *taglen);
2262\end{verbatim}
2263This terminates the ChaCha20--Poly1305 state \textit{st} and stores the tag in \textit{tag} of length \textit{taglen} octets (always 16).
2264
2265\subsection{One--Shot Packet}
2266To process a single packet under any given key the following helper function can be used.
2267
2268\index{chacha20poly1305\_memory()}
2269\begin{verbatim}
2270int chacha20poly1305_memory(const unsigned char *key,
2271                                  unsigned long  keylen,
2272                            const unsigned char *iv,
2273                                  unsigned long  ivlen,
2274                            const unsigned char *aad,
2275                                  unsigned long  aadlen,
2276                            const unsigned char *in,
2277                                  unsigned long  inlen,
2278                                  unsigned char *out,
2279                                  unsigned char *tag,
2280                                  unsigned long *taglen,
2281                                            int  direction);
2282\end{verbatim}
2283This will initialize the ChaCha20--Poly1305 state with the given key, IV and AAD value then proceed to
2284encrypt (\textit{direction} equals \textbf{CHACHA20POLY1305\_ENCRYPT}) or decrypt (\textit{direction} equals
2285\textbf{CHACHA20POLY1305\_DECRYPT}) the message text and store the final message tag. The definition of the
2286variables is the same as it is for all the manual functions.
2287
2288\chapter{One-Way Cryptographic Hash Functions}
2289\mysection{Core Functions}
2290Like the ciphers, there are hash core functions and a universal data type to hold the hash state called \textit{hash\_state}.  To initialize hash
2291XXX (where XXX is the name) call:
2292\index{Hash Functions}
2293\begin{verbatim}
2294void XXX_init(hash_state *md);
2295\end{verbatim}
2296
2297This simply sets up the hash to the default state governed by the specifications of the hash.  To add data to the message being hashed call:
2298\begin{verbatim}
2299int XXX_process(         hash_state *md,
2300                const unsigned char *in,
2301                      unsigned long  inlen);
2302\end{verbatim}
2303Essentially all hash messages are virtually infinitely\footnote{Most hashes are limited to $2^{64}$ bits or 2,305,843,009,213,693,952 bytes.} long message which
2304are buffered.  In the case where this limit is reached the \textit{XXX\_process()} function returns \textit{CRYPT\_HASH\_OVERFLOW}.
2305\index{CRYPT\_HASH\_OVERFLOW}
2306The data can be passed in any sized chunks as long as the order of the bytes are the same, the message digest (hash output) will be the same.  For example, this means that:
2307\begin{verbatim}
2308md5_process(&md, "hello ", 6);
2309md5_process(&md, "world", 5);
2310\end{verbatim}
2311Will produce the same message digest as the single call:
2312\index{Message Digest}
2313\begin{verbatim}
2314md5_process(&md, "hello world", 11);
2315\end{verbatim}
2316
2317To finally get the message digest (the hash) call:
2318\begin{verbatim}
2319int XXX_done(   hash_state *md,
2320             unsigned char *out);
2321\end{verbatim}
2322
2323This function will finish up the hash and store the result in the \textit{out} array.  You must ensure that \textit{out} is long
2324enough for the hash in question.  Often hashes are used to get keys for symmetric ciphers so the \textit{XXX\_done()} functions
2325will wipe the \textit{md} variable before returning automatically.
2326
2327To test a hash function call:
2328\begin{verbatim}
2329int XXX_test(void);
2330\end{verbatim}
2331
2332This will return {\bf CRYPT\_OK} if the hash matches the test vectors, otherwise it returns an error code.  An
2333example snippet that hashes a message with md5 is given below.
2334\begin{small}
2335\begin{verbatim}
2336#include <tomcrypt.h>
2337int main(void)
2338{
2339    hash_state md;
2340    unsigned char *in = "hello world", out[16];
2341
2342    /* setup the hash */
2343    md5_init(&md);
2344
2345    /* add the message */
2346    md5_process(&md, in, strlen(in));
2347
2348    /* get the hash in out[0..15] */
2349    md5_done(&md, out);
2350
2351    return 0;
2352}
2353\end{verbatim}
2354\end{small}
2355
2356\mysection{Hash Descriptors}
2357Like the set of ciphers, the set of hashes have descriptors as well.  They are stored in an array called \textit{hash\_descriptor} and
2358are defined by:
2359\begin{verbatim}
2360struct _hash_descriptor {
2361    char *name;
2362
2363    unsigned long hashsize;    /* digest output size in bytes  */
2364    unsigned long blocksize;   /* the block size the hash uses */
2365
2366    void (*init)   (hash_state *hash);
2367
2368    int  (*process)(         hash_state *hash,
2369                    const unsigned char *in,
2370                          unsigned long  inlen);
2371
2372    int  (*done)   (hash_state *hash, unsigned char *out);
2373
2374    int  (*test)   (void);
2375};
2376\end{verbatim}
2377
2378\index{find\_hash()}
2379The \textit{name} member is the name of the hash function (all lowercase).  The \textit{hashsize} member is the size of the digest output
2380in bytes, while \textit{blocksize} is the size of blocks the hash expects to the compression function.  Technically, this detail is not important
2381for high level developers but is useful to know for performance reasons.
2382
2383The \textit{init} member initializes the hash, \textit{process} passes data through the hash, \textit{done} terminates the hash and retrieves the
2384digest.  The \textit{test} member tests the hash against the specified test vectors.
2385
2386There is a function to search the array as well called \textit{int find\_hash(char *name)}.  It returns -1 if the hash is not found, otherwise, the
2387position in the descriptor table of the hash.
2388
2389In addition, there is also find\_hash\_oid() which finds a hash by the ASN.1 OBJECT IDENTIFIER string.
2390\index{find\_hash\_oid()}
2391\begin{verbatim}
2392int find_hash_oid(const unsigned long *ID, unsigned long IDlen);
2393\end{verbatim}
2394
2395You can use the table to indirectly call a hash function that is chosen at run-time.  For example:
2396\begin{small}
2397\begin{verbatim}
2398#include <tomcrypt.h>
2399int main(void)
2400{
2401   unsigned char buffer[100], hash[MAXBLOCKSIZE];
2402   int idx, x;
2403   hash_state md;
2404
2405   /* register hashes .... */
2406   if (register_hash(&md5_desc) == -1) {
2407      printf("Error registering MD5.\n");
2408      return -1;
2409   }
2410
2411   /* register other hashes ... */
2412
2413   /* prompt for name and strip newline */
2414   printf("Enter hash name: \n");
2415   fgets(buffer, sizeof(buffer), stdin);
2416   buffer[strlen(buffer) - 1] = 0;
2417
2418   /* get hash index */
2419   idx = find_hash(buffer);
2420   if (idx == -1) {
2421      printf("Invalid hash name!\n");
2422      return -1;
2423   }
2424
2425   /* hash input until blank line */
2426   hash_descriptor[idx].init(&md);
2427   while (fgets(buffer, sizeof(buffer), stdin) != NULL)
2428         hash_descriptor[idx].process(&md, buffer, strlen(buffer));
2429   hash_descriptor[idx].done(&md, hash);
2430
2431   /* dump to screen */
2432   for (x = 0; x < hash_descriptor[idx].hashsize; x++)
2433       printf("%02x ", hash[x]);
2434   printf("\n");
2435   return 0;
2436}
2437\end{verbatim}
2438\end{small}
2439
2440Note the usage of \textbf{MAXBLOCKSIZE}.  In LibTomCrypt, no symmetric block, key or hash digest is larger than \textbf{MAXBLOCKSIZE} in
2441length.  This provides a simple size you can set your automatic arrays to that will not get overrun.
2442
2443There are three helper functions to make working with hashes easier.  The first is a function to hash a buffer, and produce the digest in a single
2444function call.
2445
2446\index{hash\_memory()}
2447\begin{verbatim}
2448int hash_memory(                int  hash,
2449                const unsigned char *in,
2450                      unsigned long  inlen,
2451                      unsigned char *out,
2452                      unsigned long *outlen);
2453\end{verbatim}
2454
2455This will hash the data pointed to by \textit{in} of length \textit{inlen}.  The hash used is indexed by the \textit{hash} parameter.  The message
2456digest is stored in \textit{out}, and the \textit{outlen} parameter is updated to hold the message digest size.
2457
2458The next helper function allows for the hashing of a file based on a file name.
2459\index{hash\_file()}
2460\begin{verbatim}
2461int hash_file(          int  hash,
2462                 const char *fname,
2463              unsigned char *out,
2464              unsigned long *outlen);
2465\end{verbatim}
2466
2467This will hash the file named by \textit{fname} using the hash indexed by \textit{hash}.  The file named in this function call must be readable by the
2468user owning the process performing the request.  This function can be omitted by the \textbf{LTC\_NO\_FILE} define, which forces it to return \textbf{CRYPT\_NOP}
2469when it is called.  The message digest is stored in \textit{out}, and the \textit{outlen} parameter is updated to hold the message digest size.
2470
2471\index{hash\_filehandle()}
2472\begin{verbatim}
2473int hash_filehandle(          int  hash,
2474                             FILE *in,
2475                    unsigned char *out,
2476                    unsigned long *outlen);
2477\end{verbatim}
2478
2479This will hash the file identified by the handle \textit{in} using the hash indexed by \textit{hash}.  This will begin hashing from the current file pointer position, and
2480will not rewind the file pointer when finished.  This function can be omitted by the \textbf{LTC\_NO\_FILE} define, which forces it to return \textbf{CRYPT\_NOP}
2481when it is called.  The message digest is stored in \textit{out}, and the \textit{outlen} parameter is updated to hold the message digest size.
2482
2483To perform the above hash with md5 the following code could be used:
2484\begin{small}
2485\begin{verbatim}
2486#include <tomcrypt.h>
2487int main(void)
2488{
2489   int idx, err;
2490   unsigned long len;
2491   unsigned char out[MAXBLOCKSIZE];
2492
2493   /* register the hash */
2494   if (register_hash(&md5_desc) == -1) {
2495      printf("Error registering MD5.\n");
2496      return -1;
2497   }
2498
2499   /* get the index of the hash  */
2500   idx = find_hash("md5");
2501
2502   /* call the hash */
2503   len = sizeof(out);
2504   if ((err =
2505       hash_memory(idx, "hello world", 11, out, &len)) != CRYPT_OK) {
2506      printf("Error hashing data: %s\n", error_to_string(err));
2507      return -1;
2508   }
2509   return 0;
2510}
2511\end{verbatim}
2512\end{small}
2513
2514\subsection{Hash Registration}
2515Similar to the cipher descriptor table you must register your hash algorithms before you can use them.  These functions
2516work exactly like those of the cipher registration code.  The functions are:
2517\index{register\_hash()} \index{unregister\_hash()}
2518\begin{verbatim}
2519int register_hash(const struct _hash_descriptor *hash);
2520
2521int unregister_hash(const struct _hash_descriptor *hash);
2522\end{verbatim}
2523
2524The following hashes are provided as of this release within the LibTomCrypt library:
2525\index{Hash descriptor table}
2526
2527\begin{figure}[H]
2528\begin{center}
2529\begin{tabular}{|c|c|c|}
2530      \hline \textbf{Name} & \textbf{Descriptor Name} & \textbf{Size of Message Digest (bytes)} \\
2531      \hline WHIRLPOOL & whirlpool\_desc & 64 \\
2532      \hline SHA3-512 & sha3\_512\_desc & 64 \\
2533      \hline SHA-512 & sha512\_desc & 64 \\
2534      \hline BLAKE2B-512 & blake2b\_512\_desc & 64 \\
2535      \hline SHA3-384 & sha3\_384\_desc & 48 \\
2536      \hline SHA-384 & sha384\_desc & 48 \\
2537      \hline RIPEMD-320 & rmd160\_desc & 40 \\
2538      \hline SHA-512/256 & sha512\_256\_desc & 32 \\
2539      \hline SHA3-256 & sha3\_256\_desc & 32 \\
2540      \hline SHA-256 & sha256\_desc & 32 \\
2541      \hline RIPEMD-256 & rmd160\_desc & 32 \\
2542      \hline BLAKE2S-256 & blake2s\_256\_desc & 32 \\
2543      \hline BLAKE2B-256 & blake2b\_256\_desc & 32 \\
2544      \hline SHA-512/224 & sha512\_224\_desc & 28 \\
2545      \hline SHA3-224 & sha3\_224\_desc & 28 \\
2546      \hline SHA-224 & sha224\_desc & 28 \\
2547      \hline BLAKE2S-224 & blake2s\_224\_desc & 28 \\
2548      \hline BLAKE2B-384 & blake2b\_384\_desc & 48 \\
2549      \hline TIGER-192 & tiger\_desc & 24 \\
2550      \hline SHA-1 & sha1\_desc & 20 \\
2551      \hline RIPEMD-160 & rmd160\_desc & 20 \\
2552      \hline BLAKE2S-160 & blake2s\_160\_desc & 20 \\
2553      \hline BLAKE2B-160 & blake2b\_160\_desc & 20 \\
2554      \hline RIPEMD-128 & rmd128\_desc & 16 \\
2555      \hline MD5 & md5\_desc & 16 \\
2556      \hline MD4 & md4\_desc & 16 \\
2557      \hline MD2 & md2\_desc & 16 \\
2558      \hline BLAKE2S-128 & blake2s\_128\_desc & 16 \\
2559      \hline
2560\end{tabular}
2561\end{center}
2562\caption{Built--In Software Hashes}
2563\end{figure}
2564\vfil
2565
2566\mysection{Cipher Hash Construction}
2567\index{Cipher Hash Construction}
2568An addition to the suite of hash functions is the \textit{Cipher Hash Construction} or \textit{CHC} mode.  In this mode
2569applicable block ciphers (such as AES) can be turned into hash functions that other LTC functions can use.  In
2570particular this allows a cryptosystem to be designed using very few moving parts.
2571
2572In order to use the CHC system the developer will have to take a few extra steps.  First the \textit{chc\_desc} hash
2573descriptor must be registered with register\_hash().  At this point the CHC hash cannot be used to hash
2574data.  While it is in the hash system you still have to tell the CHC code which cipher to use.  This is accomplished
2575via the chc\_register() function.
2576
2577\index{chc\_register()}
2578\begin{verbatim}
2579int chc_register(int cipher);
2580\end{verbatim}
2581
2582A cipher has to be registered with CHC (and also in the cipher descriptor tables with
2583register\_cipher()).  The chc\_register() function will bind a cipher to the CHC system.  Only one cipher can
2584be bound to the CHC hash at a time.  There are additional requirements for the system to work.
2585
2586\begin{enumerate}
2587   \item The cipher must have a block size greater than 64--bits.
2588   \item The cipher must allow an input key the size of the block size.
2589\end{enumerate}
2590
2591Example of using CHC with the AES block cipher.
2592
2593\begin{verbatim}
2594#include <tomcrypt.h>
2595int main(void)
2596{
2597   int err;
2598
2599   /* register cipher and hash */
2600   if (register_cipher(&aes_enc_desc) == -1) {
2601      printf("Could not register cipher\n");
2602      return EXIT_FAILURE;
2603   }
2604   if (register_hash(&chc_desc) == -1) {
2605      printf("Could not register hash\n");
2606      return EXIT_FAILURE;
2607   }
2608
2609   /* start chc with AES */
2610   if ((err = chc_register(find_cipher("aes"))) != CRYPT_OK) {
2611      printf("Error binding AES to CHC: %s\n",
2612             error_to_string(err));
2613   }
2614
2615   /* now you can use chc_hash in any LTC function
2616    * [aside from pkcs...] */
2617}
2618\end{verbatim}
2619
2620\mysection{SHA3 SHAKE}
2621The SHA3 class of algorithms provides a special XOF (Extendable Output Functions) mode, called SHAKE.
2622SHAKE operates in 2 security configurations, 128bit or 256bit, and allows to generate message digests of an arbitrary length.
2623
2624For further information see \url{https://en.wikipedia.org/wiki/SHA-3}
2625
2626Example of using SHAKE256 with an arbitrary length output.
2627
2628\begin{verbatim}
2629#include <tomcrypt.h>
2630int main(void)
2631{
2632   int err;
2633   hash_state state;
2634   const void* msg = "The quick brown fox jumps over the lazy dog";
2635   unsigned char output[345];
2636
2637   if ((err = sha3_shake_init(&state, 256)) != CRYPT_OK) {
2638      printf("Could not init SHAKE256 (%s)\n", error_to_string(err));
2639      return EXIT_FAILURE;
2640   }
2641   if ((err = sha3_shake_process(&state, msg, strlen(msg))) != CRYPT_OK) {
2642      printf("Could not process SHAKE256 (%s)\n", error_to_string(err));
2643      return EXIT_FAILURE;
2644   }
2645   if ((err = sha3_shake_done(&state, output, sizeof(output))) != CRYPT_OK) {
2646      printf("Could not finish SHAKE256 (%s)\n", error_to_string(err));
2647      return EXIT_FAILURE;
2648   }
2649   return EXIT_SUCCESS;
2650}
2651\end{verbatim}
2652
2653\mysection{Notice}
2654It is highly recommended that you \textbf{not} use the MD2, MD4, MD5, or SHA-1 hashes for the purposes of digital signatures or authentication codes.
2655These hashes are provided for completeness and they still can be used for the purposes of password hashing or one-way accumulators
2656(e.g. Yarrow).
2657
2658The other hashes such as the SHA-2 (that includes SHA-512, SHA-512/384, SHA-384, SHA-512/256, SHA-256 and SHA-224) and TIGER-192 are still considered secure
2659for all purposes you would normally use a hash for.
2660
2661\chapter{Checksum Functions}
2662
2663\mysection{Preface}
2664
2665The API for all checksum functions operate in mode: \textit{init} -- \textit{update} -- \textit{update} -- ... -- \textit{finish}.
2666
2667The \textit{finish} functions allow to output a partial result if necessary.
2668
2669\mysection{CRC-32 -- Cyclic redundancy check}
2670
2671A Cyclic Redundancy Check is an error-detecting code, where LibTomCrypt implements CRC-32 with the polynomial \textit{0x04C11DB7}.
2672
2673For further information see \url{https://en.wikipedia.org/wiki/Cyclic_redundancy_check}
2674
2675\begin{verbatim}
2676void crc32_init(crc32_state *ctx);
2677void crc32_update(crc32_state *ctx, const unsigned char *input, unsigned long length);
2678void crc32_finish(crc32_state *ctx, void *hash, unsigned long size);
2679\end{verbatim}
2680
2681\mysection{Adler-32}
2682
2683Adler-32 is a checksum algorithm.
2684
2685For further information see \url{https://en.wikipedia.org/wiki/Adler-32}.
2686
2687\begin{verbatim}
2688void adler32_init(adler32_state *ctx);
2689void adler32_update(adler32_state *ctx, const unsigned char *input, unsigned long length);
2690void adler32_finish(adler32_state *ctx, void *hash, unsigned long size);
2691\end{verbatim}
2692
2693\chapter{Message Authentication Codes}
2694\mysection{HMAC Protocol}
2695Thanks to Dobes Vandermeer, the library now includes support for hash based message authentication codes, or HMAC for short.  An HMAC
2696of a message is a keyed authentication code that only the owner of a private symmetric key will be able to verify.  The purpose is
2697to allow an owner of a private symmetric key to produce an HMAC on a message then later verify if it is correct.  Any impostor or
2698eavesdropper will not be able to verify the authenticity of a message.
2699
2700The HMAC support works much like the normal hash functions except that the initialization routine requires you to pass a key
2701and its length.  The key is much like a key you would pass to a cipher.  That is, it is simply an array of octets stored in
2702unsigned characters.  The initialization routine is:
2703\index{hmac\_init()}
2704\begin{verbatim}
2705int hmac_init(         hmac_state *hmac,
2706                              int  hash,
2707              const unsigned char *key,
2708                    unsigned long  keylen);
2709\end{verbatim}
2710The \textit{hmac} parameter is the state for the HMAC code.  The \textit{hash} parameter is the index into the descriptor table of the hash you want
2711to use to authenticate the message.  The \textit{key} parameter is the pointer to the array of chars that make up the key.  The \textit{keylen} parameter is the
2712length (in octets) of the key you want to use to authenticate the message.  To send octets of a message through the HMAC system you must use the following function:
2713\index{hmac\_process()}
2714\begin{verbatim}
2715int hmac_process(         hmac_state *hmac,
2716                 const unsigned char *in,
2717                       unsigned long  inlen);
2718\end{verbatim}
2719\textit{hmac} is the HMAC state you are working with. \textit{in} is the array of octets to send into the HMAC process.  \textit{inlen} is the
2720number of octets to process.  Like the hash process routines, you can send the data in arbitrarily sized chunks. When you
2721are finished with the HMAC process you must call the following function to get the HMAC code:
2722\index{hmac\_done()}
2723\begin{verbatim}
2724int hmac_done(   hmac_state *hmac,
2725              unsigned char *out,
2726              unsigned long *outlen);
2727\end{verbatim}
2728The \textit{hmac} parameter is the HMAC state you are working with.  The \textit{out} parameter is the array of octets where the HMAC code should be stored.
2729You must set \textit{outlen} to the size of the destination buffer before calling this function.  It is updated with the length of the HMAC code
2730produced (depending on which hash was picked).  If \textit{outlen} is less than the size of the message digest (and ultimately
2731the HMAC code) then the HMAC code is truncated as per FIPS-198 specifications (e.g. take the first \textit{outlen} bytes).
2732
2733There are two utility functions provided to make using HMACs easier to do.  They accept the key and information about the
2734message (file pointer, address in memory), and produce the HMAC result in one shot.  These are useful if you want to avoid
2735calling the three step process yourself.
2736
2737\index{hmac\_memory()}
2738\begin{verbatim}
2739int hmac_memory(
2740                   int  hash,
2741   const unsigned char *key, unsigned long  keylen,
2742   const unsigned char *in,  unsigned long  inlen,
2743         unsigned char *out, unsigned long *outlen);
2744\end{verbatim}
2745This will produce an HMAC code for the array of octets in \textit{in} of length \textit{inlen}.  The index into the hash descriptor
2746table must be provided in \textit{hash}.  It uses the key from \textit{key} with a key length of \textit{keylen}.
2747The result is stored in the array of octets \textit{out} and the length in \textit{outlen}.  The value of \textit{outlen} must be set
2748to the size of the destination buffer before calling this function.  Similarly for files there is the  following function:
2749\index{hmac\_file()}
2750\begin{verbatim}
2751int hmac_file(
2752                   int  hash,
2753            const char *fname,
2754   const unsigned char *key, unsigned long  keylen,
2755         unsigned char *out, unsigned long *outlen);
2756\end{verbatim}
2757\textit{hash} is the index into the hash descriptor table of the hash you want to use.  \textit{fname} is the filename to process.
2758\textit{key} is the array of octets to use as the key of length \textit{keylen}.  \textit{out} is the array of octets where the
2759result should be stored.
2760
2761To test if the HMAC code is working there is the following function:
2762\index{hmac\_test()}
2763\begin{verbatim}
2764int hmac_test(void);
2765\end{verbatim}
2766Which returns {\bf CRYPT\_OK} if the code passes otherwise it returns an error code.  Some example code for using the
2767HMAC system is given below.
2768
2769\begin{small}
2770\begin{verbatim}
2771#include <tomcrypt.h>
2772int main(void)
2773{
2774   int idx, err;
2775   hmac_state hmac;
2776   unsigned char key[16], dst[MAXBLOCKSIZE];
2777   unsigned long dstlen;
2778
2779   /* register SHA-1 */
2780   if (register_hash(&sha1_desc) == -1) {
2781      printf("Error registering SHA1\n");
2782      return -1;
2783   }
2784
2785   /* get index of SHA1 in hash descriptor table */
2786   idx = find_hash("sha1");
2787
2788   /* we would make up our symmetric key in "key[]" here */
2789
2790   /* start the HMAC */
2791   if ((err = hmac_init(&hmac, idx, key, 16)) != CRYPT_OK) {
2792      printf("Error setting up hmac: %s\n", error_to_string(err));
2793      return -1;
2794   }
2795
2796   /* process a few octets */
2797   if((err = hmac_process(&hmac, "hello", 5) != CRYPT_OK) {
2798      printf("Error processing hmac: %s\n", error_to_string(err));
2799      return -1;
2800   }
2801
2802   /* get result (presumably to use it somehow...) */
2803   dstlen = sizeof(dst);
2804   if ((err = hmac_done(&hmac, dst, &dstlen)) != CRYPT_OK) {
2805      printf("Error finishing hmac: %s\n", error_to_string(err));
2806      return -1;
2807   }
2808   printf("The hmac is %lu bytes long\n", dstlen);
2809
2810   /* return */
2811   return 0;
2812}
2813\end{verbatim}
2814\end{small}
2815
2816\mysection{OMAC Support}
2817\index{OMAC} \index{CMAC}
2818OMAC\footnote{\url{http://crypt.cis.ibaraki.ac.jp/omac/omac.html}}, which stands for \textit{One-Key CBC MAC} is an
2819algorithm which produces a Message Authentication Code (MAC) using only a block cipher such as AES.  Note:  OMAC has been standardized as
2820CMAC within NIST, for the purposes of this library OMAC and CMAC are synonymous.  From an API standpoint, the OMAC routines work much like the
2821HMAC routines.  Instead, in this case a cipher is used instead of a hash.
2822
2823To start an OMAC state you call
2824\index{omac\_init()}
2825\begin{verbatim}
2826int omac_init(         omac_state *omac,
2827                              int  cipher,
2828              const unsigned char *key,
2829                    unsigned long  keylen);
2830\end{verbatim}
2831The \textit{omac} parameter is the state for the OMAC algorithm.  The \textit{cipher} parameter is the index into the cipher\_descriptor table
2832of the cipher\footnote{The cipher must have a 64 or 128 bit block size.  Such as CAST5, Blowfish, DES, AES, Twofish, etc.} you
2833wish to use.  The \textit{key} and \textit{keylen} parameters are the keys used to authenticate the data.
2834
2835To send data through the algorithm call
2836\index{omac\_process()}
2837\begin{verbatim}
2838int omac_process(         omac_state *state,
2839                 const unsigned char *in,
2840                       unsigned long  inlen);
2841\end{verbatim}
2842This will send \textit{inlen} bytes from \textit{in} through the active OMAC state \textit{state}.  Returns \textbf{CRYPT\_OK} if the
2843function succeeds.  The function is not sensitive to the granularity of the data.  For example,
2844
2845\begin{verbatim}
2846omac_process(&mystate, "hello",  5);
2847omac_process(&mystate, " world", 6);
2848\end{verbatim}
2849
2850Would produce the same result as,
2851
2852\begin{verbatim}
2853omac_process(&mystate, "hello world",  11);
2854\end{verbatim}
2855
2856When you are done processing the message you can call the following to compute the message tag.
2857
2858\index{omac\_done()}
2859\begin{verbatim}
2860int omac_done(   omac_state *state,
2861              unsigned char *out,
2862              unsigned long *outlen);
2863\end{verbatim}
2864Which will terminate the OMAC and output the \textit{tag} (MAC) to \textit{out}.  Note that unlike the HMAC and other code
2865\textit{outlen} can be smaller than the default MAC size (for instance AES would make a 16-byte tag).  Part of the OMAC
2866specification states that the output may be truncated.  So if you pass in $outlen = 5$ and use AES as your cipher than
2867the output MAC code will only be five bytes long.  If \textit{outlen} is larger than the default size it is set to the default
2868size to show how many bytes were actually used.
2869
2870Similar to the HMAC code the file and memory functions are also provided.  To OMAC a buffer of memory in one shot use the
2871following function.
2872
2873\index{omac\_memory()}
2874\begin{verbatim}
2875int omac_memory(
2876                    int  cipher,
2877    const unsigned char *key, unsigned long keylen,
2878    const unsigned char *in,  unsigned long inlen,
2879          unsigned char *out, unsigned long *outlen);
2880\end{verbatim}
2881This will compute the OMAC of \textit{inlen} bytes of \textit{in} using the key \textit{key} of length \textit{keylen} bytes and the cipher
2882specified by the \textit{cipher}'th entry in the cipher\_descriptor table.  It will store the MAC in \textit{out} with the same
2883rules as omac\_done.
2884
2885To OMAC a file use
2886\index{omac\_file()}
2887\begin{verbatim}
2888int omac_file(
2889                    int  cipher,
2890    const unsigned char *key,      unsigned long keylen,
2891             const char *filename,
2892          unsigned char *out,      unsigned long *outlen);
2893\end{verbatim}
2894
2895Which will OMAC the entire contents of the file specified by \textit{filename} using the key \textit{key} of length \textit{keylen} bytes
2896and the cipher specified by the \textit{cipher}'th entry in the cipher\_descriptor table.  It will store the MAC in \textit{out} with
2897the same rules as omac\_done.
2898
2899To test if the OMAC code is working there is the following function:
2900\index{omac\_test()}
2901\begin{verbatim}
2902int omac_test(void);
2903\end{verbatim}
2904Which returns {\bf CRYPT\_OK} if the code passes otherwise it returns an error code.  Some example code for using the
2905OMAC system is given below.
2906
2907\begin{small}
2908\begin{verbatim}
2909#include <tomcrypt.h>
2910int main(void)
2911{
2912   int idx, err;
2913   omac_state omac;
2914   unsigned char key[16], dst[MAXBLOCKSIZE];
2915   unsigned long dstlen;
2916
2917   /* register Rijndael */
2918   if (register_cipher(&rijndael_desc) == -1) {
2919      printf("Error registering Rijndael\n");
2920      return -1;
2921   }
2922
2923   /* get index of Rijndael in cipher descriptor table */
2924   idx = find_cipher("rijndael");
2925
2926   /* we would make up our symmetric key in "key[]" here */
2927
2928   /* start the OMAC */
2929   if ((err = omac_init(&omac, idx, key, 16)) != CRYPT_OK) {
2930      printf("Error setting up omac: %s\n", error_to_string(err));
2931      return -1;
2932   }
2933
2934   /* process a few octets */
2935   if((err = omac_process(&omac, "hello", 5) != CRYPT_OK) {
2936      printf("Error processing omac: %s\n", error_to_string(err));
2937      return -1;
2938   }
2939
2940   /* get result (presumably to use it somehow...) */
2941   dstlen = sizeof(dst);
2942   if ((err = omac_done(&omac, dst, &dstlen)) != CRYPT_OK) {
2943      printf("Error finishing omac: %s\n", error_to_string(err));
2944      return -1;
2945   }
2946   printf("The omac is %lu bytes long\n", dstlen);
2947
2948   /* return */
2949   return 0;
2950}
2951\end{verbatim}
2952\end{small}
2953
2954\mysection{PMAC Support}
2955The PMAC\footnote{J.Black, P.Rogaway, \textit{A Block--Cipher Mode of Operation for Parallelizable Message Authentication}}
2956protocol is another MAC algorithm that relies solely on a symmetric-key block cipher.  It uses essentially the same
2957API as the provided OMAC code.
2958
2959A PMAC state is initialized with the following.
2960
2961\index{pmac\_init()}
2962\begin{verbatim}
2963int pmac_init(         pmac_state *pmac,
2964                              int  cipher,
2965              const unsigned char *key,
2966                    unsigned long  keylen);
2967\end{verbatim}
2968Which initializes the \textit{pmac} state with the given \textit{cipher} and \textit{key} of length \textit{keylen} bytes.  The chosen cipher
2969must have a 64 or 128 bit block size (e.x. AES).
2970
2971To MAC data simply send it through the process function.
2972
2973\index{pmac\_process()}
2974\begin{verbatim}
2975int pmac_process(         pmac_state *state,
2976                 const unsigned char *in,
2977                       unsigned long  inlen);
2978\end{verbatim}
2979This will process \textit{inlen} bytes of \textit{in} in the given \textit{state}.  The function is not sensitive to the granularity of the
2980data.  For example,
2981
2982\begin{verbatim}
2983pmac_process(&mystate, "hello",  5);
2984pmac_process(&mystate, " world", 6);
2985\end{verbatim}
2986
2987Would produce the same result as,
2988
2989\begin{verbatim}
2990pmac_process(&mystate, "hello world",  11);
2991\end{verbatim}
2992
2993When a complete message has been processed the following function can be called to compute the message tag.
2994
2995\index{pmac\_done()}
2996\begin{verbatim}
2997int pmac_done(   pmac_state *state,
2998              unsigned char *out,
2999              unsigned long *outlen);
3000\end{verbatim}
3001This will store up to \textit{outlen} bytes of the tag for the given \textit{state} into \textit{out}.  Note that if \textit{outlen} is larger
3002than the size of the tag it is set to the amount of bytes stored in \textit{out}.
3003
3004Similar to the OMAC code the file and memory functions are also provided.  To PMAC a buffer of memory in one shot use the
3005following function.
3006
3007\index{pmac\_memory()}
3008\begin{verbatim}
3009int pmac_memory(
3010                    int  cipher,
3011    const unsigned char *key, unsigned long  keylen,
3012    const unsigned char *in,  unsigned long  inlen,
3013          unsigned char *out, unsigned long *outlen);
3014\end{verbatim}
3015This will compute the PMAC of \textit{msglen} bytes of \textit{msg} using the key \textit{key} of length \textit{keylen} bytes, and the cipher
3016specified by the \textit{cipher}'th entry in the cipher\_descriptor table.  It will store the MAC in \textit{out} with the same
3017rules as pmac\_done().
3018
3019To PMAC a file use
3020\index{pmac\_file()}
3021\begin{verbatim}
3022int pmac_file(
3023                    int  cipher,
3024    const unsigned char *key,      unsigned long keylen,
3025             const char *filename,
3026          unsigned char *out,      unsigned long *outlen);
3027\end{verbatim}
3028
3029Which will PMAC the entire contents of the file specified by \textit{filename} using the key \textit{key} of length \textit{keylen} bytes,
3030and the cipher specified by the \textit{cipher}'th entry in the cipher\_descriptor table.  It will store the MAC in \textit{out} with
3031the same rules as pmac\_done().
3032
3033To test if the PMAC code is working there is the following function:
3034\index{pmac\_test()}
3035\begin{verbatim}
3036int pmac_test(void);
3037\end{verbatim}
3038Which returns {\bf CRYPT\_OK} if the code passes otherwise it returns an error code.
3039
3040\mysection{Pelican MAC}
3041Pelican MAC is a new (experimental) MAC by the AES team that uses four rounds of AES as a \textit{mixing function}.  It achieves a very high
3042rate of processing and is potentially very secure.  It requires AES to be enabled to function.  You do not have to register\_cipher() AES first though
3043as it calls AES directly.
3044
3045\index{pelican\_init()}
3046\begin{verbatim}
3047int pelican_init(      pelican_state *pelmac,
3048                 const unsigned char *key,
3049                       unsigned long  keylen);
3050\end{verbatim}
3051This will initialize the Pelican state with the given AES key.  Once this has been done you can begin processing data.
3052
3053\index{pelican\_process()}
3054\begin{verbatim}
3055int pelican_process(      pelican_state *pelmac,
3056                    const unsigned char *in,
3057                          unsigned long  inlen);
3058\end{verbatim}
3059This will process \textit{inlen} bytes of \textit{in} through the Pelican MAC.  It's best that you pass in multiples of 16 bytes as it makes the
3060routine more efficient but you may pass in any length of text.  You can call this function as many times as required to process
3061an entire message.
3062
3063\index{pelican\_done()}
3064\begin{verbatim}
3065int pelican_done(pelican_state *pelmac, unsigned char *out);
3066\end{verbatim}
3067This terminates a Pelican MAC and writes the 16--octet tag to \textit{out}.
3068
3069\subsection{Example}
3070
3071\begin{verbatim}
3072#include <tomcrypt.h>
3073int main(void)
3074{
3075   pelican_state pelstate;
3076   unsigned char key[32], tag[16];
3077   int           err;
3078
3079   /* somehow initialize a key */
3080
3081   /* initialize pelican mac */
3082   if ((err = pelican_init(&pelstate, /* the state */
3083                           key,       /* user key */
3084                           32         /* key length in octets */
3085                          )) != CRYPT_OK) {
3086      printf("Error initializing Pelican: %s",
3087              error_to_string(err));
3088      return EXIT_FAILURE;
3089   }
3090
3091   /* MAC some data */
3092   if ((err = pelican_process(&pelstate,       /* the state */
3093                              "hello world",   /* data to mac */
3094                              11               /* length of data */
3095                              )) != CRYPT_OK) {
3096      printf("Error processing Pelican: %s",
3097             error_to_string(err));
3098      return EXIT_FAILURE;
3099   }
3100
3101   /* Terminate the MAC */
3102   if ((err = pelican_done(&pelstate,/* the state */
3103                           tag       /* where to store the tag */
3104                           )) != CRYPT_OK) {
3105      printf("Error terminating Pelican: %s",
3106             error_to_string(err));
3107      return EXIT_FAILURE;
3108   }
3109
3110   /* tag[0..15] has the MAC output now */
3111
3112   return EXIT_SUCCESS;
3113}
3114\end{verbatim}
3115
3116\mysection{XCBC-MAC}
3117As of LibTomCrypt v1.15, XCBC-MAC (RFC 3566) has been provided to support TLS encryption suites.  Like OMAC, it computes a message authentication code
3118by using a cipher in CBC mode.  It also uses a single key which it expands into the requisite three keys for the MAC function.  A XCBC--MAC state is
3119initialized with the following function:
3120
3121\index{xcbc\_init()}
3122\begin{verbatim}
3123int xcbc_init(         xcbc_state *xcbc,
3124                              int  cipher,
3125              const unsigned char *key,
3126                    unsigned long  keylen);
3127\end{verbatim}
3128
3129This will initialize the XCBC--MAC state \textit{xcbc}, with the key specified in \textit{key} of length \textit{keylen} octets.  The cipher indicated
3130by the \textit{cipher} index can be either a 64 or 128--bit block cipher.  This will return \textbf{CRYPT\_OK} on success.
3131
3132\index{LTC\_XCBC\_PURE}
3133It is possible to use XCBC in a three key mode by OR'ing the value \textbf{LTC\_XCBC\_PURE} against the \textit{keylen} parameter.  In this mode, the key is
3134interpretted as three keys.  If the cipher has a block size of $n$ octets, the first key is then $keylen - 2n$ octets and is the encryption key.  The next
3135$2n$ octets are the $K_1$ and $K_2$ padding keys (used on the last block).  For example, to use AES--192 \textit{keylen} should be $24 + 2 \cdot 16 = 56$ octets.
3136The three keys are interpretted as if they were concatenated in the \textit{key} buffer.
3137
3138
3139To process data through XCBC--MAC use the following function:
3140
3141\index{xcbc\_process()}
3142\begin{verbatim}
3143int xcbc_process(         xcbc_state *state,
3144                 const unsigned char *in,
3145                       unsigned long  inlen);
3146\end{verbatim}
3147
3148This will add the message octets pointed to by \textit{in} of length \textit{inlen} to the XCBC--MAC state pointed to by \textit{state}.  Like the other MAC functions,
3149the granularity of the input is not important but the order is.  This will return \textbf{CRYPT\_OK} on success.
3150
3151To compute the MAC tag value use the following function:
3152
3153\index{xcbc\_done()}
3154\begin{verbatim}
3155int xcbc_done(   xcbc_state *state,
3156              unsigned char *out,
3157              unsigned long *outlen);
3158\end{verbatim}
3159
3160This will retrieve the XCBC--MAC tag from the state pointed to by \textit{state}, and store it in the array pointed to by \textit{out}.  The \textit{outlen} parameter
3161specifies the maximum size of the destination buffer, and is updated to hold the final size of the tag when the function returns.  This will return \textbf{CRYPT\_OK} on success.
3162
3163Helper functions are provided to make parsing memory buffers and files easier.  The following functions are provided:
3164
3165\index{xcbc\_memory()}
3166\begin{verbatim}
3167int xcbc_memory(
3168                    int  cipher,
3169    const unsigned char *key, unsigned long  keylen,
3170    const unsigned char *in,  unsigned long  inlen,
3171          unsigned char *out, unsigned long *outlen);
3172\end{verbatim}
3173This will compute the XCBC--MAC of \textit{msglen} bytes of \textit{msg}, using the key \textit{key} of length \textit{keylen} bytes, and the cipher
3174specified by the \textit{cipher}'th entry in the cipher\_descriptor table.  It will store the MAC in \textit{out} with the same rules as xcbc\_done().
3175
3176To xcbc a file use
3177\index{xcbc\_file()}
3178\begin{verbatim}
3179int xcbc_file(
3180                    int  cipher,
3181    const unsigned char *key,      unsigned long keylen,
3182             const char *filename,
3183          unsigned char *out,      unsigned long *outlen);
3184\end{verbatim}
3185
3186Which will XCBC--MAC the entire contents of the file specified by \textit{filename} using the key \textit{key} of length \textit{keylen} bytes, and the cipher
3187specified by the \textit{cipher}'th entry in the cipher\_descriptor table.  It will store the MAC in \textit{out} with the same rules as xcbc\_done().
3188
3189
3190To test XCBC--MAC for RFC 3566 compliance use the following function:
3191
3192\index{xcbc\_test()}
3193\begin{verbatim}
3194int xcbc_test(void);
3195\end{verbatim}
3196
3197This will return \textbf{CRYPT\_OK} on success.  This requires the AES or Rijndael descriptor be previously registered, otherwise, it will return
3198\textbf{CRYPT\_NOP}.
3199
3200\mysection{F9--MAC}
3201The F9--MAC is yet another CBC--MAC variant proposed for the 3GPP standard.  Originally specified to be used with the KASUMI block cipher, it can also be used
3202with other ciphers.  For LibTomCrypt, the F9--MAC code can use any cipher.
3203
3204\subsection{Usage Notice}
3205F9--MAC differs slightly from the other MAC functions in that it requires the caller to perform the final message padding.  The padding quite simply is a direction
3206bit followed by a 1 bit and enough zeros to make the message a multiple of the cipher block size.  If the message is byte aligned, the padding takes on the form of
3207a single 0x40 or 0xC0 byte followed by enough 0x00 bytes to make the message proper multiple.
3208
3209If the user simply wants a MAC function (hint: use OMAC) padding with a single 0x40 byte should be sufficient for security purposes and still be reasonably compatible
3210with F9--MAC.
3211
3212\subsection{F9--MAC Functions}
3213A F9--MAC state is initialized with the following function:
3214\index{f9\_init()}
3215\begin{verbatim}
3216int f9_init(           f9_state *f9,
3217                            int  cipher,
3218            const unsigned char *key,
3219                  unsigned long  keylen);
3220\end{verbatim}
3221
3222This will initialize the F9--MAC state \textit{f9}, with the key specified in \textit{key} of length \textit{keylen} octets.  The cipher indicated
3223by the \textit{cipher} index can be either a 64 or 128--bit block cipher.  This will return \textbf{CRYPT\_OK} on success.
3224
3225To process data through F9--MAC use the following function:
3226\index{f9\_process()}
3227\begin{verbatim}
3228int f9_process(           f9_state *state,
3229               const unsigned char *in,
3230                     unsigned long  inlen);
3231\end{verbatim}
3232
3233This will add the message octets pointed to by \textit{in} of length \textit{inlen} to the F9--MAC state pointed to by \textit{state}.  Like the other MAC functions,
3234the granularity of the input is not important but the order is.  This will return \textbf{CRYPT\_OK} on success.
3235
3236To compute the MAC tag value use the following function:
3237
3238\index{f9\_done()}
3239\begin{verbatim}
3240int f9_done(     f9_state *state,
3241            unsigned char *out,
3242            unsigned long *outlen);
3243\end{verbatim}
3244
3245This will retrieve the F9--MAC tag from the state pointed to by \textit{state}, and store it in the array pointed to by \textit{out}.  The \textit{outlen} parameter
3246specifies the maximum size of the destination buffer, and is updated to hold the final size of the tag when the function returns.  This will return
3247\textbf{CRYPT\_OK} on success.
3248
3249Helper functions are provided to make parsing memory buffers and files easier.  The following functions are provided:
3250
3251\index{f9\_memory()}
3252\begin{verbatim}
3253int f9_memory(
3254                    int  cipher,
3255    const unsigned char *key, unsigned long  keylen,
3256    const unsigned char *in,  unsigned long  inlen,
3257          unsigned char *out, unsigned long *outlen);
3258\end{verbatim}
3259This will compute the F9--MAC of \textit{msglen} bytes of \textit{msg}, using the key \textit{key} of length \textit{keylen} bytes, and the cipher
3260specified by the \textit{cipher}'th entry in the cipher\_descriptor table.  It will store the MAC in \textit{out} with the same rules as f9\_done().
3261
3262To F9--MAC a file use
3263\index{f9\_file()}
3264\begin{verbatim}
3265int f9_file(
3266                    int  cipher,
3267    const unsigned char *key,      unsigned long keylen,
3268             const char *filename,
3269          unsigned char *out,      unsigned long *outlen);
3270\end{verbatim}
3271
3272Which will F9--MAC the entire contents of the file specified by \textit{filename} using the key \textit{key} of length \textit{keylen} bytes, and the cipher
3273specified by the \textit{cipher}'th entry in the cipher\_descriptor table.  It will store the MAC in \textit{out} with the same rules as f9\_done().
3274
3275
3276To test f9--MAC for RFC 3566 compliance use the following function:
3277
3278\index{f9\_test()}
3279\begin{verbatim}
3280int f9_test(void);
3281\end{verbatim}
3282
3283This will return \textbf{CRYPT\_OK} on success.  This requires the AES or Rijndael descriptor be previously registered, otherwise, it will return
3284\textbf{CRYPT\_NOP}.
3285
3286\mysection{Poly1305--MAC}
3287
3288The Poly1305--MAC is a cryptographic message authentication code created by Daniel J. Bernstein.
3289More info at \url{https://en.wikipedia.org/wiki/Poly1305}.
3290
3291A Poly1305--MAC state is initialized with the following function:
3292\index{poly1305\_init()}
3293\begin{verbatim}
3294int poly1305_init(     poly1305_state *st,
3295                  const unsigned char *key,
3296                        unsigned long  keylen);
3297\end{verbatim}
3298This will initialize the Poly1305--MAC state \textit{st}, with the key specified in \textit{key} of length \textit{keylen} octets (always 32).
3299
3300To process data through Poly1305--MAC use the following function:
3301\index{poly1305\_process()}
3302\begin{verbatim}
3303int poly1305_process(     poly1305_state *st,
3304                     const unsigned char *in,
3305                           unsigned long  inlen);
3306\end{verbatim}
3307
3308This will add the message octets pointed to by \textit{in} of length \textit{inlen} to the Poly1305--MAC state pointed to by \textit{st}.
3309
3310To compute the MAC tag value use the following function:
3311\index{poly1305\_done()}
3312\begin{verbatim}
3313int poly1305_done(poly1305_state *st,
3314                   unsigned char *mac,
3315                   unsigned long *maclen);
3316\end{verbatim}
3317
3318This will retrieve the Poly1305--MAC tag from the state pointed to by \textit{st}, and store it in the array pointed to by \textit{mac}.
3319The \textit{maclen} parameter specifies the maximum size of the destination buffer, and is updated to hold the final size of the tag when
3320the function returns.
3321
3322Helper functions are provided to make parsing memory buffers and files easier. The following functions are provided:
3323\index{poly1305\_memory()}
3324\begin{verbatim}
3325int poly1305_memory(const unsigned char *key,
3326                          unsigned long  keylen,
3327                    const unsigned char *in,
3328                          unsigned long  inlen,
3329                          unsigned char *mac,
3330                          unsigned long *maclen);
3331\end{verbatim}
3332This will compute the Poly1305--MAC of \textit{inlen} bytes of \textit{in}, using the key \textit{key} of length \textit{keylen} bytes.
3333It will store the MAC in \textit{mac} with the same rules as poly1305\_done().
3334
3335To Poly1305--MAC a file use
3336\index{poly1305\_file()}
3337\begin{verbatim}
3338int poly1305_file(         const char *fname,
3339                  const unsigned char *key,
3340                        unsigned long  keylen,
3341                        unsigned char *mac,
3342                        unsigned long *maclen);
3343\end{verbatim}
3344
3345Which will Poly1305--MAC the entire contents of the file specified by \textit{fname} using the key \textit{key} of
3346length \textit{keylen} bytes. It will store the MAC in \textit{mac} with the same rules as poly1305\_done().
3347
3348\mysection{BLAKE2s + BLAKE2b MAC}
3349
3350The BLAKE2s and BLAKE2b are cryptographic message authentication code designed by Jean--Philippe Aumasson,
3351Samuel Neves, Zooko Wilcox-O'Hearn, and Christian Winnerlein. More info at \url{https://tools.ietf.org/html/rfc7693}.
3352
3353A BLAKE2s/b--MAC state is initialized with the following function:
3354\index{blake2smac\_init()}
3355\begin{verbatim}
3356int blake2smac_init(blake2smac_state *st,
3357                       unsigned long  outlen,
3358                 const unsigned char *key,
3359                       unsigned long  keylen);
3360\end{verbatim}
3361\index{blake2bmac\_init()}
3362\begin{verbatim}
3363int blake2bmac_init(blake2smac_state *st,
3364                       unsigned long  outlen,
3365                 const unsigned char *key,
3366                       unsigned long  keylen);
3367\end{verbatim}
3368This will initialize the BLAKE2s/b--MAC state \textit{st}, with the key specified in \textit{key} of length \textit{keylen} octets (up to 64).
3369The \textit{outlen} specifies the size of the final tag (up to 64 octets).
3370
3371To process data through BLAKE2s/b--MAC use the following function:
3372\index{blake2smac\_process()}
3373\begin{verbatim}
3374int blake2smac_process(   blake2smac_state *st,
3375                       const unsigned char *in,
3376                             unsigned long  inlen);
3377\end{verbatim}
3378\index{blake2bmac\_process()}
3379\begin{verbatim}
3380int blake2bmac_process(   blake2bmac_state *st,
3381                       const unsigned char *in,
3382                             unsigned long  inlen);
3383\end{verbatim}
3384
3385This will add the message octets pointed to by \textit{in} of length \textit{inlen} to the BLAKE2s/b--MAC state pointed to by \textit{st}.
3386
3387To compute the MAC tag value use the following function:
3388\index{blake2smac\_done()}
3389\begin{verbatim}
3390int blake2smac_done(blake2smac_state *st,
3391                       unsigned char *mac,
3392                       unsigned long *maclen);
3393\end{verbatim}
3394\index{blake2bmac\_done()}
3395\begin{verbatim}
3396int blake2bmac_done(blake2bmac_state *st,
3397                       unsigned char *mac,
3398                       unsigned long *maclen);
3399\end{verbatim}
3400
3401This will retrieve the BLAKE2s/b--MAC tag from the state pointed to by \textit{st}, and store it in the array pointed to by \textit{mac}.
3402The \textit{maclen} parameter specifies the maximum size of the destination buffer, and is updated to hold the final size of the tag when
3403the function returns.
3404
3405Helper functions are provided to make parsing memory buffers and files easier. The following functions are provided:
3406\index{blake2smac\_memory()}
3407\begin{verbatim}
3408int blake2smac_memory(const unsigned char *key,
3409                            unsigned long  keylen,
3410                      const unsigned char *in,
3411                            unsigned long  inlen,
3412                            unsigned char *mac,
3413                            unsigned long *maclen);
3414\end{verbatim}
3415\index{blake2bmac\_memory()}
3416\begin{verbatim}
3417int blake2bmac_memory(const unsigned char *key,
3418                            unsigned long  keylen,
3419                      const unsigned char *in,
3420                            unsigned long  inlen,
3421                            unsigned char *mac,
3422                            unsigned long *maclen);
3423\end{verbatim}
3424This will compute the BLAKE2s/b--MAC of \textit{inlen} bytes of \textit{in}, using the key \textit{key} of length \textit{keylen} bytes.
3425It will store the MAC in \textit{mac} with the same rules as blake2smac\_done().
3426
3427To BLAKE2s/b--MAC a file use
3428\index{blake2smac\_file()}
3429\begin{verbatim}
3430int blake2smac_file(         const char *fname,
3431                    const unsigned char *key,
3432                          unsigned long  keylen,
3433                          unsigned char *mac,
3434                          unsigned long *maclen);
3435\end{verbatim}
3436\index{blake2bmac\_file()}
3437\begin{verbatim}
3438int blake2bmac_file(         const char *fname,
3439                    const unsigned char *key,
3440                          unsigned long  keylen,
3441                          unsigned char *mac,
3442                          unsigned long *maclen);
3443\end{verbatim}
3444
3445Which will BLAKE2s/b--MAC the entire contents of the file specified by \textit{fname} using the key \textit{key} of
3446length \textit{keylen} bytes. It will store the MAC in \textit{mac} with the same rules as blake2smac\_done().
3447
3448\chapter{Pseudo-Random Number Generators}
3449\mysection{Core Functions}
3450The library provides an array of core functions for Pseudo-Random Number Generators (PRNGs) as well.  A cryptographic PRNG is
3451used to expand a shorter bit string into a longer bit string.  PRNGs are used wherever random data is required such as Public Key (PK)
3452key generation.  There is a universal structure called \textit{prng\_state}.  To initialize a PRNG call:
3453\index{PRNG start}
3454\begin{verbatim}
3455int XXX_start(prng_state *prng);
3456\end{verbatim}
3457
3458This will setup the PRNG for future use and not seed it.  In order for the PRNG to be cryptographically useful you must give it
3459entropy.  Ideally you'd have some OS level source to tap like in UNIX.  To add entropy to the PRNG call:
3460\index{PRNG add\_entropy}
3461\begin{verbatim}
3462int XXX_add_entropy(const unsigned char *in,
3463                          unsigned long  inlen,
3464                             prng_state *prng);
3465\end{verbatim}
3466Which returns {\bf CRYPT\_OK} if the entropy was accepted.  Once you think you have enough entropy you call another
3467function to put the entropy into action.
3468\index{PRNG ready}
3469\begin{verbatim}
3470int XXX_ready(prng_state *prng);
3471\end{verbatim}
3472
3473Which returns {\bf CRYPT\_OK} if it is ready.  Finally to actually read bytes call:
3474\index{PRNG read}
3475\begin{verbatim}
3476unsigned long XXX_read(unsigned char *out,
3477                       unsigned long  outlen,
3478                          prng_state *prng);
3479\end{verbatim}
3480
3481Which returns the number of bytes read from the PRNG.  When you are finished with a PRNG state you call
3482the following.
3483
3484\index{PRNG done}
3485\begin{verbatim}
3486void XXX_done(prng_state *prng);
3487\end{verbatim}
3488
3489This will terminate a PRNG state and free any memory (if any) allocated.  To export a PRNG state
3490so that you can later resume the PRNG call the following.
3491
3492\index{PRNG export}
3493\begin{verbatim}
3494int XXX_export(unsigned char *out,
3495               unsigned long *outlen,
3496                  prng_state *prng);
3497\end{verbatim}
3498
3499This will write a \textit{PRNG state} to the buffer \textit{out} of length \textit{outlen} bytes.  The idea of
3500the export is meant to be used as a \textit{seed file}.  That is, when the program starts up there will not likely
3501be that much entropy available.   To import a state to seed a PRNG call the following function.
3502
3503\index{PRNG import}
3504\begin{verbatim}
3505int XXX_import(const unsigned char *in,
3506                     unsigned long  inlen,
3507                        prng_state *prng);
3508\end{verbatim}
3509
3510This will call the start and add\_entropy functions of the given PRNG.  It will use the state in
3511\textit{in} of length \textit{inlen} as the initial seed.  You must pass the same seed length as was exported
3512by the corresponding export function.
3513
3514Note that importing a state will not \textit{resume} the PRNG from where it left off.  That is, if you export
3515a state, emit (say) 8 bytes and then import the previously exported state the next 8 bytes will not
3516specifically equal the 8 bytes you generated previously.
3517
3518When a program is first executed the normal course of operation is:
3519
3520\begin{enumerate}
3521   \item Gather entropy from your sources for a given period of time or number of events.
3522   \item Start, use your entropy via add\_entropy and ready the PRNG yourself.
3523\end{enumerate}
3524
3525When your program is finished you simply call the export function and save the state to a medium (disk,
3526flash memory, etc).  The next time your application starts up you can detect the state, feed it to the
3527import function and go on your way.  It is ideal that (as soon as possible) after start up you export a
3528fresh state.  This helps in the case that the program aborts or the machine is powered down without
3529being given a chance to exit properly.
3530
3531Note that even if you have a state to import it is important to add new entropy to the state.  However,
3532there is less pressure to do so.
3533
3534To test a PRNG for operational conformity call the following functions.
3535
3536\index{PRNG test}
3537\begin{verbatim}
3538int XXX_test(void);
3539\end{verbatim}
3540
3541This will return \textbf{CRYPT\_OK} if PRNG is operating properly.
3542
3543\subsection{Remarks}
3544
3545It is possible to be adding entropy and reading from a PRNG at the same time.  For example, if you first seed the PRNG
3546and call ready() you can now read from it.  You can also keep adding new entropy to it.  The new entropy will not be used
3547in the PRNG until ready() is called again.  This allows the PRNG to be used and re-seeded at the same time.  No real error
3548checking is guaranteed to see if the entropy is sufficient, or if the PRNG is even in a ready state before reading.
3549
3550\subsection{Example}
3551Below is a simple snippet to read 10 bytes from Yarrow.  It is important to note that this snippet is {\bf NOT} secure since
3552the entropy added is not random.
3553
3554\begin{verbatim}
3555#include <tomcrypt.h>
3556int main(void)
3557{
3558   prng_state prng;
3559   unsigned char buf[10];
3560   int err;
3561
3562   /* start it */
3563   if ((err = yarrow_start(&prng)) != CRYPT_OK) {
3564      printf("Start error: %s\n", error_to_string(err));
3565   }
3566   /* add entropy */
3567   if ((err = yarrow_add_entropy("hello world", 11, &prng))
3568       != CRYPT_OK) {
3569      printf("Add_entropy error: %s\n", error_to_string(err));
3570   }
3571   /* ready and read */
3572   if ((err = yarrow_ready(&prng)) != CRYPT_OK) {
3573      printf("Ready error: %s\n", error_to_string(err));
3574   }
3575   printf("Read %lu bytes from yarrow\n",
3576          yarrow_read(buf, sizeof(buf), &prng));
3577   return 0;
3578}
3579\end{verbatim}
3580
3581\mysection{PRNG Descriptors}
3582\index{PRNG Descriptor}
3583PRNGs have descriptors that allow plugin driven functions to be created using PRNGs. The plugin descriptors are stored in the structure \textit{prng\_descriptor}.  The
3584format of an element is:
3585\begin{verbatim}
3586struct _prng_descriptor {
3587    char *name;
3588    int  export_size;    /* size in bytes of exported state */
3589
3590    int (*start)      (prng_state *);
3591
3592    int (*add_entropy)(const unsigned char *, unsigned long,
3593                       prng_state *);
3594
3595    int (*ready)      (prng_state *);
3596
3597    unsigned long (*read)(unsigned char *, unsigned long len,
3598                          prng_state *);
3599
3600    void (*done)(prng_state *);
3601
3602    int (*pexport)(unsigned char *, unsigned long *, prng_state *);
3603
3604    int (*pimport)(const unsigned char *, unsigned long, prng_state *);
3605
3606    int (*test)(void);
3607};
3608\end{verbatim}
3609
3610To find a PRNG in the descriptor table the following function can be used:
3611\index{find\_prng()}
3612\begin{verbatim}
3613int find_prng(const char *name);
3614\end{verbatim}
3615This will search the PRNG descriptor table for the PRNG named \textit{name}.  It will return -1 if the PRNG is not found, otherwise, it returns
3616the index into the descriptor table.
3617
3618Just like the ciphers and hashes, you must register your prng before you can use it.  The two functions provided work exactly as those for the cipher registry functions.
3619They are the following:
3620\index{register\_prng()} \index{unregister\_prng()}
3621\begin{verbatim}
3622int register_prng(const struct _prng_descriptor *prng);
3623int unregister_prng(const struct _prng_descriptor *prng);
3624\end{verbatim}
3625
3626The register function will register the PRNG, and return the index into the table where it was placed (or -1 for error).  It will avoid registering the same
3627descriptor twice, and will return the index of the current placement in the table if the caller attempts to register it more than once.  The unregister function
3628will return \textbf{CRYPT\_OK} if the PRNG was found and removed.  Otherwise, it returns \textbf{CRYPT\_ERROR}.
3629
3630\subsection{PRNGs Provided}
3631\begin{figure}[H]
3632\begin{center}
3633\begin{small}
3634\begin{tabular}{|c|c|l|}
3635\hline \textbf{Name} & \textbf{Descriptor} & \textbf{Usage} \\
3636\hline ChaCha20 & chacha20\_prng\_desc & Stream Cipher PRNG (recommended, fast) \\
3637\hline Fortuna & fortuna\_desc & Fast long-term PRNG (recommended, secure) \\
3638\hline RC4 & rc4\_desc & Stream Cipher PRNG \\
3639\hline SOBER-128 & sober128\_desc & Stream Cipher PRNG \\
3640\hline sprng & sprng\_desc & Secure PRNG using the System RNG \\
3641\hline Yarrow & yarrow\_desc & Fast short-term PRNG \\
3642\hline
3643\end{tabular}
3644\end{small}
3645\end{center}
3646\caption{List of Provided PRNGs}
3647\end{figure}
3648
3649\subsubsection{Yarrow}
3650Yarrow is fast PRNG meant to collect an unspecified amount of entropy from sources
3651(keyboard, mouse, interrupts, etc), and produce an unbounded string of random bytes.
3652
3653\textit{Note:} This PRNG is still secure for most tasks but is no longer recommended.  Users
3654should use Fortuna or ChaCha20 instead.
3655
3656\subsubsection{Fortuna}
3657
3658Fortuna is a fast attack tolerant and more thoroughly designed PRNG suitable for long term
3659usage.  It is faster than the default implementation of Yarrow\footnote{Yarrow has been implemented
3660to work with most cipher and hash combos based on which you have chosen to build into the library.} while
3661providing more security.
3662
3663Fortuna is slightly less flexible than Yarrow in the sense that it only works with the AES block cipher
3664and SHA--256 hash function.  Technically, Fortuna will work with any block cipher that accepts a 256--bit
3665key, and any hash that produces at least a 256--bit output.  However, to make the implementation simpler
3666it has been fixed to those choices.
3667
3668Fortuna is more secure than Yarrow in the sense that attackers who learn parts of the entropy being
3669added to the PRNG learn far less about the state than that of Yarrow.  Without getting into too many
3670details Fortuna has the ability to recover from state determination attacks where the attacker starts
3671to learn information from the PRNGs output about the internal state.  Yarrow on the other hand, cannot
3672recover from that problem until new entropy is added to the pool and put to use through the ready() function.
3673
3674For detailed information on how the algorithm works and what you have to do to maintain the secure state
3675get a copy of the book\footnote{Niels Ferguson and Bruce Schneier, Practical Cryptography. ISBN 0-471-22357-3.} or
3676read the paper online\footnote{\url{https://www.schneier.com/academic/paperfiles/fortuna.pdf} [Accessed on 7th Dec. 2017]}.
3677
3678\subsubsection{RC4}
3679
3680RC4 is an old stream cipher that can also double duty as a PRNG in a pinch.  You key RC4 by
3681calling add\_entropy(), and setup the key by calling ready().
3682
3683You really should not use RC4 for cryptographical purposes, it's broken.
3684
3685\subsubsection{SOBER-128}
3686
3687SOBER--128 is a stream cipher designed by the QUALCOMM Australia team.  Like RC4, you key it by
3688calling add\_entropy().  There is no need to call ready() for this PRNG as it does not do anything.
3689
3690Note: this cipher has several oddities about how it operates.  The first call to add\_entropy() sets the cipher's key.
3691Every other time call to the add\_entropy() function sets the cipher's IV variable.  The IV mechanism allows you to
3692encrypt several messages with the same key, and not re--use the same key material.
3693
3694Unlike Yarrow and Fortuna, all of the entropy (and hence security) of this algorithm rests in the data
3695you pass it on the \textbf{first} call to add\_entropy().  All buffers sent to add\_entropy() must have a length
3696that is a multiple of four bytes.
3697
3698Like RC4, the output of SOBER--128 is XOR'ed against the buffer you provide it.  In this manner, you can use
3699sober128\_read() as an encrypt (and decrypt) function.
3700
3701Since SOBER--128 has a fixed keying scheme, and is very fast (faster than RC4) the ideal usage of SOBER-128 is to
3702key it from the output of Fortuna (or Yarrow), and use it to encrypt messages.  It is also ideal for
3703simulations which need a high quality (and fast) stream of bytes.
3704
3705\subsubsection{ChaCha20}
3706
3707ChaCha20 is a fast stream cipher built on a pseudorandom function designed by Daniel J. Bernstein.
3708It can also double duty as a PRNG.
3709
3710It is recommended to use 40 bytes of truly random bytes for initialization.
3711
3712The implementation supports adding entropy via the add\_entropy() function while already being operational.
3713
3714\subsubsection{Example Usage}
3715\begin{small}
3716\begin{verbatim}
3717#include <tomcrypt.h>
3718int main(void)
3719{
3720   prng_state prng;
3721   unsigned char buf[32];
3722   int err;
3723
3724   if ((err = rc4_start(&prng)) != CRYPT_OK) {
3725      printf("RC4 init error: %s\n", error_to_string(err));
3726      exit(-1);
3727   }
3728
3729   /* use "key" as the key */
3730   if ((err = rc4_add_entropy("key", 3, &prng)) != CRYPT_OK) {
3731      printf("RC4 add entropy error: %s\n", error_to_string(err));
3732      exit(-1);
3733   }
3734
3735   /* setup RC4 for use */
3736   if ((err = rc4_ready(&prng)) != CRYPT_OK) {
3737      printf("RC4 ready error: %s\n", error_to_string(err));
3738      exit(-1);
3739   }
3740
3741   /* encrypt buffer */
3742   strcpy(buf,"hello world");
3743   if (rc4_read(buf, 11, &prng) != 11) {
3744      printf("RC4 read error\n");
3745      exit(-1);
3746   }
3747   return 0;
3748}
3749\end{verbatim}
3750\end{small}
3751To decrypt you have to do the exact same steps.
3752
3753\mysection{The Secure RNG}
3754\index{Secure RNG}
3755An RNG is related to a PRNG in many ways, except that it does not expand a smaller seed to get the data.  They generate their random bits
3756by performing some computation on fresh input bits.  Possibly the hardest thing to get correctly in a cryptosystem is the
3757PRNG.  Computers are deterministic that try hard not to stray from pre--determined paths.  This makes gathering entropy needed to seed a PRNG
3758a hard task.
3759
3760There is one small function that may help on certain platforms:
3761\index{rng\_get\_bytes()}
3762\begin{verbatim}
3763unsigned long rng_get_bytes(
3764    unsigned char *buf,
3765    unsigned long  len,
3766    void         (*callback)(void));
3767\end{verbatim}
3768
3769Which will try one of three methods of getting random data.  The first is to open the popular \textit{/dev/random} device which
3770on most *NIX platforms provides cryptographic random bits\footnote{This device is available in Windows through the Cygwin compiler suite.  It emulates \textit{/dev/random} via the Microsoft CSP.}.
3771The second method is to try the Microsoft Cryptographic Service Provider, and read the RNG.  The third method is an ANSI C
3772clock drift method that is also somewhat popular but gives bits of lower entropy.  The \textit{callback} parameter is a pointer to a function that returns void.  It is
3773used when the slower ANSI C RNG must be used so the calling application can still work.  This is useful since the ANSI C RNG has a throughput of roughly three
3774bytes a second.  The callback pointer may be set to {\bf NULL} to avoid using it if you do not want to.  The function returns the number of bytes actually read from
3775any RNG source.  There is a function to help setup a PRNG as well:
3776\index{rng\_make\_prng()}
3777\begin{verbatim}
3778int rng_make_prng(       int  bits,
3779                         int  wprng,
3780                  prng_state *prng,
3781                       void (*callback)(void));
3782\end{verbatim}
3783This will try to initialize the prng with a state of at least \textit{bits} of entropy.  The \textit{callback} parameter works much like
3784the callback in \textit{rng\_get\_bytes()}.  It is highly recommended that you use this function to setup your PRNGs unless you have a
3785platform where the RNG does not work well.  Example usage of this function is given below:
3786
3787\begin{small}
3788\begin{verbatim}
3789#include <tomcrypt.h>
3790int main(void)
3791{
3792   ecc_key mykey;
3793   prng_state prng;
3794   int err;
3795
3796   /* register yarrow */
3797   if (register_prng(&yarrow_desc) == -1) {
3798      printf("Error registering Yarrow\n");
3799      return -1;
3800   }
3801
3802   /* setup the PRNG */
3803   if ((err = rng_make_prng(128, find_prng("yarrow"), &prng, NULL))
3804       != CRYPT_OK) {
3805      printf("Error setting up PRNG, %s\n", error_to_string(err));
3806      return -1;
3807   }
3808
3809   /* make a 192-bit ECC key */
3810   if ((err = ecc_make_key(&prng, find_prng("yarrow"), 24, &mykey))
3811       != CRYPT_OK) {
3812      printf("Error making key: %s\n", error_to_string(err));
3813      return -1;
3814   }
3815   return 0;
3816}
3817\end{verbatim}
3818\end{small}
3819
3820\subsection{The Secure PRNG Interface}
3821\index{sprng\_desc}
3822It is possible to access the secure RNG through the PRNG interface, and in turn use it within dependent functions such
3823as the PK API.  This simplifies the cryptosystem on platforms where the secure RNG is fast.  The secure PRNG never
3824requires to be started, that is you need not call the start, add\_entropy, or ready functions.  For example, consider
3825the previous example using this PRNG.
3826
3827\begin{small}
3828\begin{verbatim}
3829#include <tomcrypt.h>
3830int main(void)
3831{
3832   ecc_key mykey;
3833   int err;
3834
3835   /* register SPRNG */
3836   if (register_prng(&sprng_desc) == -1) {
3837      printf("Error registering SPRNG\n");
3838      return -1;
3839   }
3840
3841   /* make a 192-bit ECC key */
3842   if ((err = ecc_make_key(NULL, find_prng("sprng"), 24, &mykey))
3843       != CRYPT_OK) {
3844      printf("Error making key: %s\n", error_to_string(err));
3845      return -1;
3846   }
3847   return 0;
3848}
3849\end{verbatim}
3850\end{small}
3851
3852\chapter{RSA Public Key Cryptography}
3853
3854\mysection{Introduction}
3855RSA wrote the PKCS \#1 specifications which detail RSA Public Key Cryptography.  In the specifications are
3856padding algorithms for encryption and signatures.  The standard includes the \textit{v1.5} and \textit{v2.1} algorithms.
3857To simplify matters a little the v2.1 encryption and signature padding algorithms are called OAEP and PSS respectively.
3858
3859\mysection{PKCS \#1 Padding}
3860PKCS \#1 v1.5 padding is so simple that both signature and encryption padding are performed by the same function.  Note: the
3861signature padding does \textbf{not} include the ASN.1 padding required.  That is performed by the rsa\_sign\_hash\_ex() function
3862documented later on in this chapter.
3863
3864\subsection{PKCS \#1 v1.5 Encoding}
3865The following function performs PKCS \#1 v1.5 padding:
3866\index{pkcs\_1\_v1\_5\_encode()}
3867\begin{verbatim}
3868int pkcs_1_v1_5_encode(
3869    const unsigned char *msg,
3870          unsigned long  msglen,
3871                    int  block_type,
3872          unsigned long  modulus_bitlen,
3873             prng_state *prng,
3874                    int  prng_idx,
3875          unsigned char *out,
3876          unsigned long *outlen);
3877\end{verbatim}
3878
3879This will encode the message pointed to by \textit{msg} of length \textit{msglen} octets.  The \textit{block\_type} parameter must be set to
3880\textbf{LTC\_PKCS\_1\_EME} to perform encryption padding.  It must be set to \textbf{LTC\_PKCS\_1\_EMSA} to perform signature padding.  The \textit{modulus\_bitlen}
3881parameter indicates the length of the modulus in bits.  The padded data is stored in \textit{out} with a length of \textit{outlen} octets.  The output will not be
3882longer than the modulus which helps allocate the correct output buffer size.
3883
3884Only encryption padding requires a PRNG.  When performing signature padding the \textit{prng\_idx} parameter may be left to zero as it is not checked for validity.
3885
3886\subsection{PKCS \#1 v1.5 Decoding}
3887The following function performs PKCS \#1 v1.5 de--padding:
3888\index{pkcs\_1\_v1\_5\_decode()}
3889\begin{verbatim}
3890int pkcs_1_v1_5_decode(
3891    const unsigned char *msg,
3892          unsigned long  msglen,
3893                    int  block_type,
3894          unsigned long  modulus_bitlen,
3895          unsigned char *out,
3896          unsigned long *outlen,
3897                    int *is_valid);
3898\end{verbatim}
3899\index{LTC\_PKCS\_1\_EME} \index{LTC\_PKCS\_1\_EMSA}
3900This will remove the PKCS padding data pointed to by \textit{msg} of length \textit{msglen}.  The decoded data is stored in \textit{out} of length
3901\textit{outlen}.  If the padding is valid, a 1 is stored in \textit{is\_valid}, otherwise, a 0 is stored.  The \textit{block\_type} parameter must be set to either
3902\textbf{LTC\_PKCS\_1\_EME} or \textbf{LTC\_PKCS\_1\_EMSA} depending on whether encryption or signature padding is being removed.
3903
3904\mysection{PKCS \#1 v2.1 Encryption}
3905PKCS \#1 RSA Encryption amounts to OAEP padding of the input message followed by the modular exponentiation.  As far as this portion of
3906the library is concerned we are only dealing with th OAEP padding of the message.
3907
3908\subsection{OAEP Encoding}
3909
3910The following function performs PKCS \#1 v2.1 encryption padding:
3911
3912\index{pkcs\_1\_oaep\_encode()}
3913\begin{alltt}
3914int pkcs_1_oaep_encode(
3915    const unsigned char *msg,
3916          unsigned long  msglen,
3917    const unsigned char *lparam,
3918          unsigned long  lparamlen,
3919          unsigned long  modulus_bitlen,
3920             prng_state *prng,
3921                    int  prng_idx,
3922                    int  hash_idx,
3923          unsigned char *out,
3924          unsigned long *outlen);
3925\end{alltt}
3926
3927This accepts \textit{msg} as input of length \textit{msglen} which will be OAEP padded.  The \textit{lparam} variable is an additional system specific
3928tag that can be applied to the encoding.  This is useful to identify which system encoded the message.  If no variance is desired then
3929\textit{lparam} can be set to \textbf{NULL}.
3930
3931OAEP encoding requires the length of the modulus in bits in order to calculate the size of the output.  This is passed as the parameter
3932\textit{modulus\_bitlen}.  \textit{hash\_idx} is the index into the hash descriptor table of the hash desired.  PKCS \#1 allows any hash to be
3933used but both the encoder and decoder must use the same hash in order for this to succeed.  The size of hash output affects the maximum
3934 sized input message.  \textit{prng\_idx} and \textit{prng} are the random number generator arguments required to randomize the padding process.
3935The padded message is stored in \textit{out} along with the length in \textit{outlen}.
3936
3937If $h$ is the length of the hash and $m$ the length of the modulus (both in octets) then the maximum payload for \textit{msg} is
3938$m - 2h - 2$.  For example, with a $1024$--bit RSA key and SHA--1 as the hash the maximum payload is $86$ bytes.
3939
3940Note that when the message is padded it still has not been RSA encrypted.  You must pass the output of this function to
3941rsa\_exptmod() to encrypt it.
3942
3943\subsection{OAEP Decoding}
3944
3945\index{pkcs\_1\_oaep\_decode()}
3946\begin{alltt}
3947int pkcs_1_oaep_decode(
3948    const unsigned char *msg,
3949          unsigned long  msglen,
3950    const unsigned char *lparam,
3951          unsigned long  lparamlen,
3952          unsigned long  modulus_bitlen,
3953                    int  hash_idx,
3954          unsigned char *out,
3955          unsigned long *outlen,
3956                    int *res);
3957\end{alltt}
3958
3959This function decodes an OAEP encoded message and outputs the original message that was passed to the OAEP encoder.  \textit{msg} is the
3960output of pkcs\_1\_oaep\_encode() of length \textit{msglen}.  \textit{lparam} is the same system variable passed to the OAEP encoder.  If it does not
3961match what was used during encoding this function will not decode the packet.  \textit{modulus\_bitlen} is the size of the RSA modulus in bits
3962and must match what was used during encoding.  Similarly the \textit{hash\_idx} index into the hash descriptor table must match what was used
3963during encoding.
3964
3965If the function succeeds it decodes the OAEP encoded message into \textit{out} of length \textit{outlen} and stores a
3966$1$ in \textit{res}.  If the packet is invalid it stores $0$ in \textit{res} and if the function fails for another reason
3967it returns an error code.
3968
3969\mysection{PKCS \#1 Digital Signatures}
3970
3971\subsection{PSS Encoding}
3972PSS encoding is the second half of the PKCS \#1 standard which is padding to be applied to messages that are signed.
3973
3974\index{pkcs\_1\_pss\_encode()}
3975\begin{alltt}
3976int pkcs_1_pss_encode(
3977    const unsigned char *msghash,
3978          unsigned long  msghashlen,
3979          unsigned long  saltlen,
3980             prng_state *prng,
3981                    int  prng_idx,
3982                    int  hash_idx,
3983          unsigned long  modulus_bitlen,
3984          unsigned char *out,
3985          unsigned long *outlen);
3986\end{alltt}
3987
3988This function assumes the message to be PSS encoded has previously been hashed.  The input hash \textit{msghash} is of length
3989\textit{msghashlen}.  PSS allows a variable length random salt (it can be zero length) to be introduced in the signature process.
3990\textit{hash\_idx} is the index into the hash descriptor table of the hash to use.  \textit{prng\_idx} and \textit{prng} are the random
3991number generator information required for the salt.
3992
3993Similar to OAEP encoding \textit{modulus\_bitlen} is the size of the RSA modulus (in bits).  It limits the size of the salt.  If $m$ is the length
3994of the modulus $h$ the length of the hash output (in octets) then there can be $m - h - 2$ bytes of salt.
3995
3996This function does not actually sign the data it merely pads the hash of a message so that it can be processed by rsa\_exptmod().
3997
3998\subsection{PSS Decoding}
3999
4000To decode a PSS encoded signature block you have to use the following.
4001
4002\index{pkcs\_1\_pss\_decode()}
4003\begin{alltt}
4004int pkcs_1_pss_decode(
4005    const unsigned char *msghash,
4006          unsigned long  msghashlen,
4007    const unsigned char *sig,
4008          unsigned long  siglen,
4009          unsigned long  saltlen,
4010                    int  hash_idx,
4011          unsigned long  modulus_bitlen,
4012                    int *res);
4013\end{alltt}
4014This will decode the PSS encoded message in \textit{sig} of length \textit{siglen} and compare it to values in \textit{msghash} of length
4015\textit{msghashlen}.  If the block is a valid PSS block and the decoded hash equals the hash supplied \textit{res} is set to non--zero.  Otherwise,
4016it is set to zero.  The rest of the parameters are as in the PSS encode call.
4017
4018It's important to use the same \textit{saltlen} and hash for both encoding and decoding as otherwise the procedure will not work.
4019
4020\mysection{RSA Key Operations}
4021\subsection{Background}
4022
4023RSA is a public key algorithm that is based on the inability to find the \textit{e-th} root modulo a composite of unknown
4024factorization.  Normally the difficulty of breaking RSA is associated with the integer factoring problem but they are
4025not strictly equivalent.
4026
4027The system begins with with two primes $p$ and $q$ and their product $N = pq$.  The order or \textit{Euler totient} of the
4028multiplicative sub-group formed modulo $N$ is given as $\phi(N) = (p - 1)(q - 1)$ which can be reduced to
4029$\mbox{lcm}(p - 1, q - 1)$.  The public key consists of the composite $N$ and some integer $e$ such that
4030$\mbox{gcd}(e, \phi(N)) = 1$.  The private key consists of the composite $N$ and the inverse of $e$ modulo $\phi(N)$
4031often simply denoted as $de \equiv 1\mbox{ }(\mbox{mod }\phi(N))$.
4032
4033A person who wants to encrypt with your public key simply forms an integer (the plaintext) $M$ such that
4034$1 < M < N-2$ and computes the ciphertext $C = M^e\mbox{ }(\mbox{mod }N)$.  Since finding the inverse exponent $d$
4035given only $N$ and $e$ appears to be intractable only the owner of the private key can decrypt the ciphertext and compute
4036$C^d \equiv \left (M^e \right)^d \equiv M^1 \equiv M\mbox{ }(\mbox{mod }N)$.  Similarly the owner of the private key
4037can sign a message by \textit{decrypting} it.  Others can verify it by \textit{encrypting} it.
4038
4039Currently RSA is a difficult system to cryptanalyze provided that both primes are large and not close to each other.
4040Ideally $e$ should be larger than $100$ to prevent direct analysis.  For example, if $e$ is three and you do not pad
4041the plaintext to be encrypted than it is possible that $M^3 < N$ in which case finding the cube-root would be trivial.
4042The most often suggested value for $e$ is $65537$ since it is large enough to make such attacks impossible and also well
4043designed for fast exponentiation (requires 16 squarings and one multiplication).
4044
4045It is important to pad the input to RSA since it has particular mathematical structure.  For instance
4046$M_1^dM_2^d = (M_1M_2)^d$ which can be used to forge a signature.  Suppose $M_3 = M_1M_2$ is a message you want
4047to have a forged signature for.  Simply get the signatures for $M_1$ and $M_2$ on their own and multiply the result
4048together.  Similar tricks can be used to deduce plaintexts from ciphertexts.  It is important not only to sign
4049the hash of documents only but also to pad the inputs with data to remove such structure.
4050
4051\subsection{RSA Key Generation}
4052
4053For RSA routines a single \textit{rsa\_key} structure is used.  To make a new RSA key call:
4054\index{rsa\_make\_key()}
4055\begin{verbatim}
4056int rsa_make_key(prng_state *prng,
4057                        int  wprng,
4058                        int  size,
4059                       long  e,
4060                    rsa_key *key);
4061\end{verbatim}
4062
4063Where \textit{wprng} is the index into the PRNG descriptor array.  The \textit{size} parameter is the size in bytes of the RSA modulus desired.
4064The \textit{e} parameter is the encryption exponent desired, typical values are 3, 17, 257 and 65537.  Stick with 65537 since it is big enough to prevent
4065trivial math attacks, and not super slow.  The \textit{key} parameter is where the constructed key is placed.  All keys must be at
4066least 128 bytes, and no more than 512 bytes in size (\textit{that is from 1024 to 4096 bits}).
4067
4068\index{rsa\_free()}
4069Note: the \textit{rsa\_make\_key()} function allocates memory at run--time when you make the key.  Make sure to call
4070\textit{rsa\_free()} (see below) when you are finished with the key.  If \textit{rsa\_make\_key()} fails it will automatically
4071free the memory allocated.
4072
4073\index{PK\_PRIVATE} \index{PK\_PUBLIC}
4074There are two types of RSA keys.  The types are {\bf PK\_PRIVATE} and {\bf PK\_PUBLIC}.  The first type is a private
4075RSA key which includes the CRT parameters\footnote{As of v0.99 the PK\_PRIVATE\_OPTIMIZED type has been deprecated, and has been replaced by the
4076PK\_PRIVATE type.} in the form of a RSAPrivateKey (PKCS \#1 compliant).  The second type, is a public RSA key which only includes the modulus and public exponent.
4077It takes the form of a RSAPublicKey (PKCS \#1 compliant).
4078
4079\subsection{RSA Exponentiation}
4080To do raw work with the RSA function, that is without padding, use the following function:
4081\index{rsa\_exptmod()}
4082\begin{verbatim}
4083int rsa_exptmod(const unsigned char *in,
4084                      unsigned long  inlen,
4085                      unsigned char *out,
4086                      unsigned long *outlen,
4087                                int  which,
4088                            rsa_key *key);
4089\end{verbatim}
4090This will load the bignum from \textit{in} as a big endian integer in the format PKCS \#1 specifies, raises it to either \textit{e} or \textit{d} and stores the result
4091in \textit{out} and the size of the result in \textit{outlen}. \textit{which} is set to {\bf PK\_PUBLIC} to use \textit{e}
4092(i.e. for encryption/verifying) and set to {\bf PK\_PRIVATE} to use \textit{d} as the exponent (i.e. for decrypting/signing).
4093
4094Note: the output of this function is zero--padded as per PKCS \#1 specification.  This allows this routine to work with PKCS \#1 padding functions properly.
4095
4096\subsection{RSA Key Size}
4097To fetch the key size of an RSA key, use the following function:
4098\index{rsa\_get\_size()}
4099\begin{verbatim}
4100int rsa_get_size(rsa_key *key);
4101\end{verbatim}
4102This can be used to determine the modulus size of an RSA key.
4103
4104\mysection{RSA Key Encryption}
4105Normally RSA is used to encrypt short symmetric keys which are then used in block ciphers to encrypt a message.
4106To facilitate encrypting short keys the following functions have been provided.
4107
4108\index{rsa\_encrypt\_key()}
4109\begin{verbatim}
4110int rsa_encrypt_key(
4111    const unsigned char *in,
4112          unsigned long  inlen,
4113          unsigned char *out,
4114          unsigned long *outlen,
4115    const unsigned char *lparam,
4116          unsigned long  lparamlen,
4117             prng_state *prng,
4118                    int  prng_idx,
4119                    int  hash_idx,
4120                rsa_key *key);
4121\end{verbatim}
4122This function will OAEP pad \textit{in} of length \textit{inlen} bytes, RSA encrypt it, and store the ciphertext
4123in \textit{out} of length \textit{outlen} octets.  The \textit{lparam} and \textit{lparamlen} are the same parameters you would pass
4124to \index{pkcs\_1\_oaep\_encode()} pkcs\_1\_oaep\_encode().
4125
4126\subsection{Extended Encryption}
4127As of v1.15, the library supports both v1.5 and v2.1 PKCS \#1 style paddings in these higher level functions.  The following is the extended
4128encryption function:
4129
4130\index{rsa\_encrypt\_key\_ex()}
4131\begin{verbatim}
4132int rsa_encrypt_key_ex(
4133    const unsigned char *in,
4134          unsigned long  inlen,
4135          unsigned char *out,
4136          unsigned long *outlen,
4137    const unsigned char *lparam,
4138          unsigned long  lparamlen,
4139             prng_state *prng,
4140                    int  prng_idx,
4141                    int  hash_idx,
4142                    int  padding,
4143                rsa_key *key);
4144\end{verbatim}
4145
4146\index{LTC\_PKCS\_1\_OAEP} \index{LTC\_PKCS\_1\_V1\_5}
4147The parameters are all the same as for rsa\_encrypt\_key() except for the addition of the \textit{padding} parameter.  It must be set to
4148\textbf{LTC\_PKCS\_1\_V1\_5} to perform v1.5 encryption, or set to \textbf{LTC\_PKCS\_1\_OAEP} to perform v2.1 encryption.
4149
4150When performing v1.5 encryption, the hash and lparam parameters are totally ignored and can be set to \textbf{NULL} or zero (respectively).
4151
4152\mysection{RSA Key Decryption}
4153\index{rsa\_decrypt\_key()}
4154\begin{verbatim}
4155int rsa_decrypt_key(
4156    const unsigned char *in,
4157          unsigned long  inlen,
4158          unsigned char *out,
4159          unsigned long *outlen,
4160    const unsigned char *lparam,
4161          unsigned long  lparamlen,
4162                    int  hash_idx,
4163                    int *stat,
4164                rsa_key *key);
4165\end{verbatim}
4166This function will RSA decrypt \textit{in} of length \textit{inlen} then OAEP de-pad the resulting data and store it in
4167\textit{out} of length \textit{outlen}.  The \textit{lparam} and \textit{lparamlen} are the same parameters you would pass
4168to pkcs\_1\_oaep\_decode().
4169
4170If the RSA decrypted data is not a valid OAEP packet then \textit{stat} is set to $0$.  Otherwise, it is set to $1$.
4171
4172\subsection{Extended Decryption}
4173As of v1.15, the library supports both v1.5 and v2.1 PKCS \#1 style paddings in these higher level functions.  The following is the extended
4174decryption function:
4175
4176\index{rsa\_decrypt\_key\_ex()}
4177\begin{verbatim}
4178int rsa_decrypt_key_ex(
4179    const unsigned char *in,
4180          unsigned long  inlen,
4181          unsigned char *out,
4182          unsigned long *outlen,
4183    const unsigned char *lparam,
4184          unsigned long  lparamlen,
4185                    int  hash_idx,
4186                    int  padding,
4187                    int *stat,
4188                rsa_key *key);
4189\end{verbatim}
4190
4191Similar to the extended encryption, the new parameter \textit{padding} indicates which version of the PKCS \#1 standard to use.
4192It must be set to \textbf{LTC\_PKCS\_1\_V1\_5} to perform v1.5 decryption, or set to \textbf{LTC\_PKCS\_1\_OAEP} to perform v2.1 decryption.
4193
4194When performing v1.5 decryption, the hash and lparam parameters are totally ignored and can be set to \textbf{NULL} or zero (respectively).
4195
4196
4197\mysection{RSA Signature Generation}
4198Similar to RSA key encryption RSA is also used to \textit{digitally sign} message digests (hashes).  To facilitate this
4199process the following functions have been provided.
4200
4201\index{rsa\_sign\_hash()}
4202\begin{verbatim}
4203int rsa_sign_hash(const unsigned char *in,
4204                        unsigned long  inlen,
4205                        unsigned char *out,
4206                        unsigned long *outlen,
4207                           prng_state *prng,
4208                                  int  prng_idx,
4209                                  int  hash_idx,
4210                        unsigned long  saltlen,
4211                              rsa_key *key);
4212\end{verbatim}
4213
4214This will PSS encode the message digest pointed to by \textit{in} of length \textit{inlen} octets.  Next, the PSS encoded hash will be RSA
4215\textit{signed} and the output stored in the buffer pointed to by \textit{out} of length \textit{outlen} octets.
4216
4217The \textit{hash\_idx} parameter indicates which hash will be used to create the PSS encoding.  It should be the same as the hash used to
4218hash the message being signed.  The \textit{saltlen} parameter indicates the length of the desired salt, and should typically be small.  A good
4219default value is between 8 and 16 octets.  Strictly, it must be small than $modulus\_len - hLen - 2$ where \textit{modulus\_len} is the size of
4220the RSA modulus (in octets), and \textit{hLen} is the length of the message digest produced by the chosen hash.
4221
4222\subsection{Extended Signatures}
4223
4224As of v1.15, the library supports both v1.5 and v2.1 signatures.  The extended signature generation function has the following prototype:
4225
4226\index{rsa\_sign\_hash\_ex()}
4227\begin{verbatim}
4228int rsa_sign_hash_ex(
4229    const unsigned char *in,
4230          unsigned long  inlen,
4231          unsigned char *out,
4232          unsigned long *outlen,
4233                    int  padding,
4234          prng_state    *prng,
4235                    int  prng_idx,
4236                    int  hash_idx,
4237          unsigned long  saltlen,
4238                rsa_key *key);
4239\end{verbatim}
4240
4241This will PKCS encode the message digest pointed to by \textit{in} of length \textit{inlen} octets.  Next, the PKCS encoded hash will be RSA
4242\textit{signed} and the output stored in the buffer pointed to by \textit{out} of length \textit{outlen} octets.  The \textit{padding} parameter
4243must be set to \textbf{LTC\_PKCS\_1\_V1\_5} to produce a v1.5 signature, otherwise, it must be set to \textbf{LTC\_PKCS\_1\_PSS} to produce a
4244v2.1 signature.
4245
4246\index{LTC\_PKCS\_1\_V1\_5\_NA1}
4247As of v1.18.0, the library also supports v1.5 signature generation without ASN.1 encoding the signature which can be indicated by passing
4248\textbf{LTC\_PKCS\_1\_V1\_5\_NA1} as \textit{padding} parameter. This option has been introduced to provide compatibilty to SSL3.0 implementations
4249which implemented this.
4250
4251When generating a standard v1.5 signature the \textit{prng}, and \textit{prng\_idx} parameters are ignored.
4252When generating a v1.5 signature without ASN.1 decoding additionally the textit{hash\_idx} parameter is ignored.
4253
4254\mysection{RSA Signature Verification}
4255\index{rsa\_verify\_hash()}
4256\begin{verbatim}
4257int rsa_verify_hash(const unsigned char *sig,
4258                          unsigned long  siglen,
4259                    const unsigned char *msghash,
4260                          unsigned long  msghashlen,
4261                                    int  hash_idx,
4262                          unsigned long  saltlen,
4263                                    int *stat,
4264                                rsa_key *key);
4265\end{verbatim}
4266
4267This will RSA \textit{verify} the signature pointed to by \textit{sig} of length \textit{siglen} octets.  Next, the RSA decoded data is PSS decoded
4268and the extracted hash is compared against the message digest pointed to by \textit{msghash} of length \textit{msghashlen} octets.
4269
4270If the RSA decoded data is not a valid PSS message, or if the PSS decoded hash does not match the \textit{msghash}
4271value, \textit{res} is set to $0$.  Otherwise, if the function succeeds, and signature is valid \textit{res} is set to $1$.
4272
4273\subsection{RSA Signature Salt Length}
4274
4275The v2.1 signature algorithm requires a salt length to be able to properly
4276encode resp. decode. To fetch the maximum possible salt length this function
4277is provided:
4278
4279\index{rsa\_sign\_saltlen\_get\_max()}
4280\begin{verbatim}
4281int rsa_sign_saltlen_get_max(int hash_idx, rsa_key *key);
4282\end{verbatim}
4283
4284As stated in the PKCS\#1 RFC3447 "Typical salt lengths in octets are hLen
4285(the length of the output of the hash function Hash) and 0".
4286This function is provided to be able to use other lengths as well and to make
4287sure at runtime that the RSA key can handle the desired salt length.
4288
4289\subsection{Extended Verification}
4290
4291As of v1.15, the library supports both v1.5 and v2.1 signature verification.  The extended signature verification function has the following prototype:
4292
4293\index{rsa\_verify\_hash\_ex()}
4294\begin{verbatim}
4295int rsa_verify_hash_ex(
4296    const unsigned char *sig,
4297          unsigned long  siglen,
4298    const unsigned char *hash,
4299          unsigned long  hashlen,
4300                    int  padding,
4301                    int  hash_idx,
4302          unsigned long  saltlen,
4303                    int *stat,
4304                rsa_key *key);
4305\end{verbatim}
4306
4307This will RSA \textit{verify} the signature pointed to by \textit{sig} of length \textit{siglen} octets.  Next, the RSA decoded data is PKCS decoded
4308and the extracted hash is compared against the message digest pointed to by \textit{msghash} of length \textit{msghashlen} octets.
4309
4310If the RSA decoded data is not a valid PSS message, or if the PKCS decoded hash does not match the \textit{msghash}
4311value, \textit{res} is set to $0$.  Otherwise, if the function succeeds, and signature is valid \textit{res} is set to $1$.
4312
4313The \textit{padding} parameter must be set to \textbf{LTC\_PKCS\_1\_V1\_5} to perform a v1.5 verification.  Otherwise, it must be set to
4314\textbf{LTC\_PKCS\_1\_PSS} to perform a v2.1 verification.
4315
4316As of v1.18.0, the library also supports v1.5 signature verification without ASN.1 decoding the signature which can be indicated by passing
4317\textbf{LTC\_PKCS\_1\_V1\_5\_NA1} as \textit{padding} parameter.
4318
4319When performing a standard v1.5 verification the \textit{saltlen} parameter is ignored.
4320When performing a v1.5 verification without ASN.1 decoding additionally the \textit{hash\_idx} parameter is ignored.
4321
4322
4323\mysection{RSA Encryption Example}
4324\begin{small}
4325\begin{verbatim}
4326#include <tomcrypt.h>
4327int main(void)
4328{
4329   int           err, hash_idx, prng_idx, res;
4330   unsigned long l1, l2;
4331   unsigned char pt[16], pt2[16], out[1024];
4332   rsa_key       key;
4333
4334   /* register prng/hash */
4335   if (register_prng(&sprng_desc) == -1) {
4336      printf("Error registering sprng");
4337      return EXIT_FAILURE;
4338   }
4339
4340   /* register a math library (in this case TomsFastMath)
4341   ltc_mp = tfm_desc;
4342
4343   if (register_hash(&sha1_desc) == -1) {
4344      printf("Error registering sha1");
4345      return EXIT_FAILURE;
4346   }
4347   hash_idx = find_hash("sha1");
4348   prng_idx = find_prng("sprng");
4349
4350   /* make an RSA-1024 key */
4351   if ((err = rsa_make_key(NULL,     /* PRNG state */
4352                           prng_idx, /* PRNG idx */
4353                           1024/8,   /* 1024-bit key */
4354                           65537,    /* we like e=65537 */
4355                           &key)     /* where to store the key */
4356       ) != CRYPT_OK) {
4357       printf("rsa_make_key %s", error_to_string(err));
4358       return EXIT_FAILURE;
4359   }
4360
4361   /* fill in pt[] with a key we want to send ... */
4362   l1 = sizeof(out);
4363   if ((err = rsa_encrypt_key(pt, /* data we wish to encrypt */
4364                              16, /* data is 16 bytes long */
4365                             out, /* where to store ciphertext */
4366                             &l1, /* length of ciphertext */
4367                       "TestApp", /* our lparam for this program */
4368                               7, /* lparam is 7 bytes long */
4369                            NULL, /* PRNG state */
4370                        prng_idx, /* prng idx */
4371                        hash_idx, /* hash idx */
4372                            &key) /* our RSA key */
4373       ) != CRYPT_OK) {
4374       printf("rsa_encrypt_key %s", error_to_string(err));
4375       return EXIT_FAILURE;
4376   }
4377
4378   /* now let's decrypt the encrypted key */
4379   l2 = sizeof(pt2);
4380   if ((err = rsa_decrypt_key(out, /* encrypted data */
4381                               l1, /* length of ciphertext */
4382                              pt2, /* where to put plaintext */
4383                              &l2, /* plaintext length */
4384                        "TestApp", /* lparam for this program */
4385                                7, /* lparam is 7 bytes long */
4386                         hash_idx, /* hash idx */
4387                             &res, /* validity of data */
4388                             &key) /* our RSA key */
4389        ) != CRYPT_OK) {
4390       printf("rsa_decrypt_key %s", error_to_string(err));
4391       return EXIT_FAILURE;
4392   }
4393   /* if all went well pt == pt2, l2 == 16, res == 1 */
4394}
4395\end{verbatim}
4396\end{small}
4397
4398\mysection{RSA Key Format}
4399
4400The RSA key format adopted for exporting and importing keys is the PKCS \#1 format defined by the ASN.1 constructs known as
4401RSAPublicKey and RSAPrivateKey.  Additionally, the OpenSSL key format is supported as well.
4402
4403\subsection{RSA Key Export}
4404To export a RSA key use the following function.
4405
4406\index{rsa\_export()}
4407\begin{verbatim}
4408int rsa_export(unsigned char *out,
4409               unsigned long *outlen,
4410                         int  type,
4411                     rsa_key *key);
4412\end{verbatim}
4413
4414This will export the RSA key depending on the value of \textit{type}.
4415
4416The RSAPublicKey (PKCS \#1 type) format will be used for the public key,
4417indicated by \textbf{PK\_PUBLIC}.
4418The RSAPrivateKey (PKCS \#1 type) format will be used for the private key,
4419indicated by \textbf{PK\_PRIVATE}.
4420
4421As of v1.18.0 this function can also export OpenSSL-compatible formatted public RSA keys.
4422By OR'ing \textbf{PK\_STD} and \textbf{PK\_PUBLIC} the public key will be exported
4423in the SubjectPublicKeyInfo (X.509 type) format.
4424
4425\subsection{RSA Key Import}
4426To import a RSA key use one of the following function.
4427
4428\subsubsection{Import from standard formats}
4429
4430This will import the key stored in \textit{in} of length inlen and import it to \textit{key}.
4431
4432These formats are normally distributed in the PEM format, consisting of a label defining the content and base64 encoded DER-serialized data.
4433
4434All the import functions expect binary DER data.
4435
4436\index{rsa\_import()}
4437\begin{verbatim}
4438int rsa_import(const unsigned char *in,
4439                     unsigned long  inlen,
4440                           rsa_key *key);
4441\end{verbatim}
4442
4443This function can import both RSAPublicKey and RSAPrivateKey formats.
4444
4445As of v1.06 this function can also import OpenSSL DER formatted public RSA keys.  They are essentially encapsulated RSAPublicKeys.  LibTomCrypt will
4446import the key, strip off the additional data and fill in the \textit{rsa\_key} structure.
4447
4448\index{rsa\_import\_pkcs8()}
4449\begin{verbatim}
4450int rsa_import_pkcs8(const unsigned char *in,
4451                           unsigned long inlen,
4452                              const void *passwd,
4453                           unsigned long passwdlen,
4454                                rsa_key *key);
4455\end{verbatim}
4456
4457This function can import RSA private keys serialized in PKCS\#8 format.
4458
4459It provides a \textit{password} parameter for the encrypted PKCS\#8 format, but this functionality is currently NOT implemented.
4460
4461\index{rsa\_import\_x509()}
4462\begin{verbatim}
4463int rsa_import_x509(const unsigned char *in,
4464                          unsigned long inlen,
4465                                rsa_key *key);
4466\end{verbatim}
4467
4468This function can import the RSA public key from a X.509 certificate.
4469
4470\subsubsection{Import from plain big numbers}
4471
4472\index{rsa\_set\_key()}
4473\begin{verbatim}
4474int rsa_set_key(const unsigned char *N,
4475                      unsigned long Nlen,
4476                const unsigned char *e,
4477                      unsigned long elen,
4478                const unsigned char *d,
4479                      unsigned long dlen,
4480                rsa_key *key);
4481\end{verbatim}
4482
4483This function can import the plain RSA key parameters \textit{N}, \textit{e} and \textit{d}.
4484The parameter \textit{d} is optional and only required when importing a private key.
4485
4486\index{rsa\_set\_factors()}
4487\begin{verbatim}
4488int rsa_set_factors(const unsigned char *p,
4489                          unsigned long plen,
4490                    const unsigned char *q,
4491                          unsigned long qlen,
4492                    rsa_key *key);
4493\end{verbatim}
4494
4495This function can import the plain RSA key factors \textit{p} and \textit{q}.
4496
4497\index{rsa\_set\_crt\_params()}
4498\begin{verbatim}
4499int rsa_set_crt_params(const unsigned char *dP,
4500                             unsigned long dPlen,
4501                       const unsigned char *dQ,
4502                             unsigned long dQlen,
4503                       const unsigned char *qP,
4504                             unsigned long qPlen,
4505                       rsa_key *key);
4506\end{verbatim}
4507
4508This function can import the plain RSA CRT (chinese remainder theorem) parameters \textit{dP}, \textit{dQ} and \textit{qP}.
4509
4510After importing \textit{p}, \textit{q}, \textit{dP}, \textit{dQ} and \textit{qP}
4511the library can perfrom the optimized CRT calculations on private key operations.
4512
4513\chapter{Diffie-Hellman Key Exchange}
4514
4515\mysection{Background}
4516
4517Diffie-Hellman was the original public key system proposed.  The system is based upon the group structure
4518of finite fields.  For Diffie-Hellman a prime $p$ is chosen and a ``base'' $b$ such that $b^x\mbox{ }(\mbox{mod }p)$
4519generates a large sub-group of prime order (for unique values of $x$).
4520
4521A secret key is an exponent $x$ and a public key is the value of $y \equiv g^x\mbox{ }(\mbox{mod }p)$.  The term
4522``discrete logarithm'' denotes the action of finding $x$ given only $y$, $g$ and $p$.  The key exchange part of
4523Diffie-Hellman arises from the fact that two users A and B with keys $(A_x, A_y)$ and $(B_x, B_y)$ can exchange
4524a shared key $K \equiv B_y^{A_x} \equiv A_y^{B_x} \equiv g^{A_xB_x}\mbox{ }(\mbox{mod }p)$.
4525
4526From this public encryption and signatures can be developed.  The trivial way to encrypt (for example) using a public key
4527$y$ is to perform the key exchange offline.  The sender invents a key $k$ and its public copy
4528$k' \equiv g^k\mbox{ }(\mbox{mod }p)$ and uses $K \equiv k'^{A_x}\mbox{ }(\mbox{mod }p)$ as a key to encrypt
4529the message with.  Typically $K$ would be sent to a one-way hash and the message digested used as a key in a
4530symmetric cipher.
4531
4532It is important that the order of the sub-group that $g$ generates not only be large but also prime.  There are
4533discrete logarithm algorithms that take $\sqrt r$ time given the order $r$.  The discrete logarithm can be computed
4534modulo each prime factor of $r$ and the results combined using the Chinese Remainder Theorem.  In the cases where
4535$r$ is ``B-Smooth'' (e.g. all small factors or powers of small prime factors) the solution is trivial to find.
4536
4537To thwart such attacks the primes and bases in the library have been designed and fixed.  Given a prime $p$ the order of
4538 the sub-group generated is a large prime namely ${p - 1} \over 2$.  Such primes are known as ``strong primes'' and the
4539smaller prime (e.g. the order of the base) are known as Sophie-Germaine primes.
4540
4541\mysection{Core Functions}
4542
4543This library also provides core Diffie-Hellman functions so you can negotiate keys over insecure mediums.  The routines
4544provided are relatively easy to use and only take two function calls to negotiate a shared key.  There is a structure
4545called ``dh\_key'' which stores the Diffie-Hellman key in a format these routines can use.  The first set of routines
4546are to make a Diffie-Hellman private key pair:
4547\index{dh\_make\_key()}
4548\begin{verbatim}
4549int dh_set_pg_groupsize(int groupsize, dh_key *key);
4550int dh_generate_key(prng_state *prng, int wprng, dh_key *key);
4551\end{verbatim}
4552The ``groupsize'' is the size of the modulus you want in bytes.  Currently support sizes are 96 to 1024 bytes which correspond
4553to key sizes of 768 to 8192 bits. The smaller the key the faster it is to use however it will be less secure.  When
4554specifying a size not explicitly supported by the library it will round {\em up} to the next key size.  If the size is
4555above 512 it will return an error.  So if you pass ``groupsize == 32'' it will use a 768 bit key but if you pass
4556``groupsize == 20000'' it will return an error.  The primes and generators used are built-into the library and were designed
4557to meet very specific goals.  The primes are strong primes which means that if $p$ is the prime then
4558$p-1$ is equal to $2r$ where $r$ is a large prime.  The bases are chosen to generate a group of order $r$ to prevent
4559leaking a bit of the key.  This means the bases generate a very large prime order group which is good to make cryptanalysis
4560hard.
4561
4562The next two routines are for exporting/importing Diffie-Hellman keys in/from DER encoded ASN.1.  This is useful for transport
4563over communication mediums.
4564
4565\index{dh\_export()} \index{dh\_import()}
4566\begin{verbatim}
4567int dh_export(unsigned char *out, unsigned long *outlen,
4568              int type, dh_key *key);
4569
4570int dh_import(const unsigned char *in, unsigned long inlen, dh_key *key);
4571\end{verbatim}
4572
4573The ASN.1 sequence used to represent a DH key is as following:
4574
4575\begin{verbatim}
4576DiffieHellmanKey ::= SEQUENCE {
4577      version Version,
4578      flags   Flags,
4579      p       INTEGER, -- prime
4580      g       INTEGER, -- base/group
4581      n       INTEGER  -- either x when private key or y when public key }
4582
4583Version  ::=  INTEGER  {  v1(0)  }
4584
4585Flags    ::=  BIT STRING {
4586      privateKey      (0) -- this BIT is '1' if it's a private key
4587                          --          or '0' if it's a public key
4588}
4589\end{verbatim}
4590
4591These two functions work just like the ``rsa\_export()'' and ``rsa\_import()'' functions except these work with
4592Diffie-Hellman keys. Its important to note you do not have to free the ram for a ``dh\_key'' if an import fails.
4593
4594You can free a ``dh\_key'' using:
4595\begin{verbatim}
4596void dh_free(dh_key *key);
4597\end{verbatim}
4598After you have exported a copy of your public key (using {\bf PK\_PUBLIC} as ``type'') you can now create a shared secret
4599with the other user using:
4600\index{dh\_shared\_secret()}
4601\begin{verbatim}
4602int dh_shared_secret(dh_key *private_key,
4603                     dh_key *public_key,
4604                     unsigned char *out, unsigned long *outlen);
4605\end{verbatim}
4606
4607Where ``private\_key'' is the key you made and ``public\_key'' is the copy of the public key the other user sent you.  The result goes
4608into ``out'' and the length into ``outlen''.  If all went correctly the data in ``out'' should be identical for both parties.  It is important to
4609note that the two keys have to be the same size in order for this to work.  There is a function to get the size of a
4610key:
4611\index{dh\_get\_groupsize()}
4612\begin{verbatim}
4613int dh_get_groupsize(dh_key *key);
4614\end{verbatim}
4615This returns the size in bytes of the modulus chosen for that key.
4616
4617\mysection{Other Diffie-Hellman Functions}
4618
4619To be able to import Diffie-Hellman keys LibTomCrypt provides several API functions.
4620\\
4621
4622To import the prime and group from binary format:
4623\index{dh\_set\_pg()}
4624\begin{verbatim}
4625int dh_set_pg(const unsigned char *p, unsigned long plen,
4626              const unsigned char *g, unsigned long glen,
4627              dh_key *key);
4628\end{verbatim}
4629This sets the prime \textit{p} of length \textit{plen} and the generator/base \textit{g} of length \textit{glen} in the DH key \textit{key}.
4630\\
4631
4632To import the prime and group from an ASN.1 encoded DHparam Sequence:
4633\index{dh\_set\_pg\_dhparam()}
4634\begin{verbatim}
4635int dh_set_pg_dhparam(const unsigned char *dhparam, unsigned long dhparamlen, dh_key *key);
4636\end{verbatim}
4637This sets the parameters in \textit{dhparam} of \textit{dhparamlen} in the DH key \textit{key}.
4638\\
4639
4640To import a private or public key from binary data:
4641\index{dh\_set\_key()}
4642\begin{verbatim}
4643int dh_set_key(const unsigned char *in, unsigned long inlen, int type, dh_key *key);
4644\end{verbatim}
4645This will import, depending on \textit{type} which can be either \textit{PK\_PRIVATE} or \textit{PK\_PUBLIC},
4646the according part of the DH key \textit{key} from \textit{in} of length \textit{inlen}.
4647After import the key will be verified and in case of an error it will be free'd.
4648
4649\mysection{Remarks on Usage}
4650Its important that you hash the shared key before trying to use it as a key for a symmetric cipher or something.  An
4651example program that communicates over sockets, using MD5 and 1024-bit DH keys is\footnote{This function is a small example.  It is suggested that proper packaging be used.  For example, if the public key sent is truncated these routines will not detect that.}:
4652\newpage
4653\begin{small}
4654\begin{verbatim}
4655int establish_secure_socket(int sock, int mode, unsigned char *key,
4656                            prng_state *prng, int wprng)
4657{
4658   unsigned char buf[4096], buf2[4096];
4659   unsigned long x, len;
4660   int res, err, inlen;
4661   dh_key mykey, theirkey;
4662
4663   /* make up our private key */
4664   if ((err = dh_set_pg_groupsize(128, &mykey)) != CRYPT_OK)  {
4665      return err;
4666   }
4667   if ((err = dh_generate_key(prng, wprng, &mykey)) != CRYPT_OK)  {
4668      return err;
4669   }
4670
4671   /* export our key as public */
4672   x = sizeof(buf);
4673   if ((err = dh_export(buf, &x, PK_PUBLIC, &mykey)) != CRYPT_OK) {
4674      res = err;
4675      goto done2;
4676   }
4677
4678   if (mode == 0) {
4679      /* mode 0 so we send first */
4680      if (send(sock, buf, x, 0) != x) {
4681         res = CRYPT_ERROR;
4682         goto done2;
4683      }
4684
4685      /* get their key */
4686      if ((inlen = recv(sock, buf2, sizeof(buf2), 0)) <= 0) {
4687         res = CRYPT_ERROR;
4688         goto done2;
4689      }
4690   } else {
4691      /* mode >0 so we send second */
4692      if ((inlen = recv(sock, buf2, sizeof(buf2), 0)) <= 0) {
4693         res = CRYPT_ERROR;
4694         goto done2;
4695      }
4696
4697      if (send(sock, buf, x, 0) != x) {
4698         res = CRYPT_ERROR;
4699         goto done2;
4700      }
4701   }
4702
4703   if ((err = dh_import(buf2, inlen, &theirkey)) != CRYPT_OK) {
4704      res = err;
4705      goto done2;
4706   }
4707
4708   /* make shared secret */
4709   x = sizeof(buf);
4710   if ((err = dh_shared_secret(&mykey, &theirkey, buf, &x)) != CRYPT_OK) {
4711      res = err;
4712      goto done;
4713   }
4714
4715   /* hash it */
4716   len = 16;        /* default is MD5 so "key" must be at least 16 bytes long */
4717   if ((err = hash_memory(find_hash("md5"), buf, x, key, &len)) != CRYPT_OK) {
4718      res = err;
4719      goto done;
4720   }
4721
4722   /* clean up and return */
4723   res = CRYPT_OK;
4724done:
4725   dh_free(&theirkey);
4726done2:
4727   dh_free(&mykey);
4728   zeromem(buf,  sizeof(buf));
4729   zeromem(buf2, sizeof(buf2));
4730   return res;
4731}
4732\end{verbatim}
4733\end{small}
4734\subsection{Remarks on The Snippet}
4735When the above code snippet is done (assuming all went well) there will be a shared 128-bit key in the ``key'' array
4736passed to ``establish\_secure\_socket()''.
4737
4738\chapter{Elliptic Curve Cryptography}
4739
4740\mysection{Background}
4741The library provides a set of core ECC functions as well that are designed to be the Elliptic Curve analogy of all of the
4742Diffie-Hellman routines in the previous chapter.  Elliptic curves (of certain forms) have the benefit that they are harder
4743to attack (no sub-exponential attacks exist unlike normal DH crypto) in fact the fastest attack requires the square root
4744of the order of the base point in time.  That means if you use a base point of order $2^{192}$ (which would represent a
4745192-bit key) then the work factor is $2^{96}$ in order to find the secret key.
4746
4747The curves in this library are taken from the following website:
4748\begin{verbatim}
4749http://csrc.nist.gov/cryptval/dss.htm
4750\end{verbatim}
4751
4752As of v1.15 three new curves from the SECG standards are also included they are the secp112r1, secp128r1, and secp160r1 curves.  These curves were added to
4753support smaller devices which do not need as large keys for security.
4754
4755They are all curves over the integers modulo a prime.  The curves have the basic equation that is:
4756\begin{equation}
4757y^2 = x^3 - 3x + b\mbox{ }(\mbox{mod }p)
4758\end{equation}
4759
4760The variable $b$ is chosen such that the number of points is nearly maximal.  In fact the order of the base points $\beta$
4761provided are very close to $p$ that is $\vert \vert \phi(\beta) \vert \vert \approx \vert \vert p \vert \vert$.  The curves
4762range in order from $\approx 2^{112}$ points to $\approx 2^{521}$.  According to the source document any key size greater
4763than or equal to 256-bits is sufficient for long term security.
4764
4765\mysection{Fixed Point Optimizations}
4766\index{Fixed Point ECC}
4767\index{MECC\_FP}
4768As of v1.12 of LibTomCrypt, support for Fixed Point ECC point multiplication has been added.  It is a generic optimization that is
4769supported by any conforming math plugin.  It is enabled by defining \textbf{MECC\_FP} during the build, such as
4770
4771\begin{verbatim}
4772CFLAGS="-DTFM_DESC -DMECC_FP" make
4773\end{verbatim}
4774
4775which will build LTC using the TFM math library and enabling this new feature.  The feature is not enabled by default as it is \textbf{NOT} thread
4776safe (by default).  It supports the LTC locking macros (such as by enabling LTC\_PTHREAD), but by default is not locked.
4777
4778\index{FP\_ENTRIES}
4779The optimization works by using a Fixed Point multiplier on any base point you use twice or more in a short period of time.  It has a limited size
4780cache (of FP\_ENTRIES entries) which it uses to hold recent bases passed to ltc\_ecc\_mulmod().  Any base detected to be used twice is sent through the
4781pre--computation phase, and then the fixed point algorithm can be used.  For example, if you use a NIST base point twice in a row, the 2$^{nd}$ and
4782all subsequent point multiplications with that point will use the faster algorithm.
4783
4784\index{FP\_LUT}
4785The optimization uses a window on the multiplicand of FP\_LUT bits (default: 8, min: 2, max: 12), and this controls the memory/time trade-off. The larger the
4786value the faster the algorithm will be but the more memory it will take.  The memory usage is $3 \cdot 2^{FP\_LUT}$ integers which by default
4787with TFM amounts to about 400kB of memory.  Tuning TFM (by changing FP\_SIZE) can decrease the usage by a fair amount.  Memory is only used by a cache entry
4788if it is active.  Both FP\_ENTRIES and FP\_LUT are definable on the command line if you wish to override them. For instance,
4789
4790\begin{verbatim}
4791CFLAGS="-DTFM_DESC -DMECC_FP -DFP_ENTRIES=8 -DFP_LUT=6" make
4792\end{verbatim}
4793
4794\begin{flushleft}
4795\index{FP\_SIZE} \index{TFM} \index{tfm.h}
4796would define a window of 6 bits and limit the cache to 8 entries.  Generally, it is better to first tune TFM by adjusting FP\_SIZE (from tfm.h).  It defaults
4797to 4096 bits (512 bytes) which is way more than what is required by ECC.  At most, you need 1152 bits to accommodate ECC--521.  If you're only using (say)
4798ECC--256 you will only need 576 bits, which would reduce the memory usage by 700\%.
4799\end{flushleft}
4800
4801\mysection{Key Format}
4802LibTomCrypt uses a unique format for ECC public and private keys.  While ANSI X9.63 partially specifies key formats, it does it in a less than ideally simple manner.  \
4803In the case of LibTomCrypt, it is meant \textbf{solely} for NIST and SECG $GF(p)$ curves.  The format of the keys is as follows:
4804
4805\index{ECC Key Format}
4806\begin{small}
4807\begin{verbatim}
4808ECCPublicKey ::= SEQUENCE {
4809    flags       BIT STRING(0), -- public/private flag (always zero),
4810    keySize     INTEGER,       -- Curve size (in bits) divided by eight
4811                               -- and rounded down, e.g. 521 => 65
4812    pubkey.x    INTEGER,       -- The X co-ordinate of the public key point
4813    pubkey.y    INTEGER,       -- The Y co-ordinate of the public key point
4814}
4815
4816ECCPrivateKey ::= SEQUENCE {
4817    flags       BIT STRING(1), -- public/private flag (always one),
4818    keySize     INTEGER,       -- Curve size (in bits) divided by eight
4819                               -- and rounded down, e.g. 521 => 65
4820    pubkey.x    INTEGER,       -- The X co-ordinate of the public key point
4821    pubkey.y    INTEGER,       -- The Y co-ordinate of the public key point
4822    secret.k    INTEGER,       -- The secret key scalar
4823}
4824\end{verbatim}
4825\end{small}
4826
4827The first flags bit denotes whether the key is public (zero) or private (one).
4828
4829\vfil
4830
4831\mysection{ECC Curve Parameters}
4832The library uses the following structure to describe an elliptic curve.  This is used internally, as well as by the new
4833extended ECC functions which allow the user to specify their own curves.
4834
4835\index{ltc\_ecc\_set\_type}
4836\begin{verbatim}
4837/** Structure defines a NIST GF(p) curve */
4838typedef struct {
4839   /** The size of the curve in octets */
4840   int size;
4841
4842   /** name of curve */
4843   char *name;
4844
4845   /** The prime that defines the field (encoded in hex) */
4846   char *prime;
4847
4848   /** The fields B param (hex) */
4849   char *B;
4850
4851   /** The order of the curve (hex) */
4852   char *order;
4853
4854   /** The x co-ordinate of the base point on the curve (hex) */
4855   char *Gx;
4856
4857   /** The y co-ordinate of the base point on the curve (hex) */
4858   char *Gy;
4859} ltc_ecc_set_type;
4860\end{verbatim}
4861
4862The curve must be of the form $y^2 = x^3 - 3x + b$, and all of the integer parameters are encoded in hexadecimal format.
4863
4864\mysection{Core Functions}
4865\subsection{ECC Key Generation}
4866There is a key structure called \textit{ecc\_key} used by the ECC functions.  There is a function to make a key:
4867\index{ecc\_make\_key()}
4868\begin{verbatim}
4869int ecc_make_key(prng_state *prng,
4870                        int  wprng,
4871                        int  keysize,
4872                    ecc_key *key);
4873\end{verbatim}
4874
4875The \textit{keysize} is the size of the modulus in bytes desired.  Currently directly supported values are 12, 16, 20, 24, 28, 32, 48, and 65 bytes which
4876correspond to key sizes of 112, 128, 160, 192, 224, 256, 384, and 521 bits respectively.  If you pass a key size that is between any key size it will round
4877the keysize up to the next available one.
4878
4879The function will free any internally allocated resources if there is an error.
4880
4881\subsection{Extended Key Generation}
4882As of v1.16, the library supports an extended key generation routine which allows the user to specify their own curve.  It is specified as follows:
4883
4884\index{ecc\_make\_key\_ex()}
4885\begin{verbatim}
4886int  ecc_make_key_ex(
4887                 prng_state *prng,
4888                        int  wprng,
4889                    ecc_key *key,
4890     const ltc_ecc_set_type *dp);
4891\end{verbatim}
4892
4893This function generates a random ECC key over the curve specified by the parameters by \textit{dp}.  The rest of the parameters are equivalent to
4894those from the original key generation function.
4895
4896\subsection{ECC Key Free}
4897To free the memory allocated by a ecc\_make\_key(), ecc\_make\_key\_ex(), ecc\_import(), or ecc\_import\_ex() call use the following function:
4898\index{ecc\_free()}
4899\begin{verbatim}
4900void ecc_free(ecc_key *key);
4901\end{verbatim}
4902
4903\subsection{ECC Key Export}
4904To export an ECC key using the LibTomCrypt format call the following function:
4905\index{ecc\_export()}
4906\begin{verbatim}
4907int ecc_export(unsigned char *out,
4908               unsigned long *outlen,
4909                         int  type,
4910                     ecc_key *key);
4911\end{verbatim}
4912This will export the key with the given \textit{type} (\textbf{PK\_PUBLIC} or \textbf{PK\_PRIVATE}), and store it to \textit{out}.
4913
4914\subsection{ECC Key Import}
4915The following function imports a LibTomCrypt format ECC key:
4916\index{ecc\_import()}
4917\begin{verbatim}
4918int ecc_import(const unsigned char *in,
4919                     unsigned long  inlen,
4920                           ecc_key *key);
4921\end{verbatim}
4922This will import the ECC key from \textit{in}, and store it in the ecc\_key structure pointed to by \textit{key}.  If the operation fails it will free
4923any allocated memory automatically.
4924
4925\subsection{Extended Key Import}
4926
4927The following function imports a LibTomCrypt format ECC key using a specified set of curve parameters:
4928\index{ecc\_import\_ex()}
4929\begin{verbatim}
4930int  ecc_import_ex(const unsigned char *in,
4931                         unsigned long  inlen,
4932                               ecc_key *key,
4933                const ltc_ecc_set_type *dp);
4934\end{verbatim}
4935This will import the key from the array pointed to by \textit{in} of length \textit{inlen} octets.  The key is stored in
4936the ECC structure pointed to by \textit{key}.  The curve is specified by the parameters pointed to by \textit{dp}.  The function will free
4937all internally allocated memory upon error.
4938
4939\subsection{ANSI X9.63 Export}
4940The following function exports an ECC public key in the ANSI X9.63 format:
4941
4942\index{ecc\_ansi\_x963\_export()}
4943\begin{verbatim}
4944int ecc_ansi_x963_export(      ecc_key *key,
4945                         unsigned char *out,
4946                         unsigned long *outlen);
4947\end{verbatim}
4948The ECC key pointed to by \textit{key} is exported in public fashion to the array pointed to by \textit{out}.  The ANSI X9.63 format used is from
4949section 4.3.6 of the standard.  It does not allow for the export of private keys.
4950
4951\subsection{ANSI X9.63 Import}
4952The following function imports an ANSI X9.63 section 4.3.6 format public ECC key:
4953
4954\index{ecc\_ansi\_x963\_import()}
4955\begin{verbatim}
4956int ecc_ansi_x963_import(const unsigned char *in,
4957                               unsigned long  inlen,
4958                                     ecc_key *key);
4959\end{verbatim}
4960This will import the key stored in the array pointed to by \textit{in} of length \textit{inlen} octets.  The imported key is stored in the ECC key pointed to by
4961\textit{key}.  The function will free any allocated memory upon error.
4962
4963\subsection{Extended ANSI X9.63 Import}
4964The following function allows the importing of an ANSI x9.63 section 4.3.6 format public ECC key using user specified domain parameters:
4965
4966\index{ecc\_ansi\_x963\_import\_ex()}
4967\begin{verbatim}
4968int ecc_ansi_x963_import_ex(const unsigned char *in,
4969                                  unsigned long  inlen,
4970                                        ecc_key *key,
4971                               ltc_ecc_set_type *dp);
4972\end{verbatim}
4973This will import the key stored in the array pointed to by \textit{in} of length \textit{inlen} octets using the domain parameters pointed to by \textit{dp}.
4974The imported key is stored in the ECC key pointed to by \textit{key}.  The function will free any allocated memory upon error.
4975
4976\subsection{ECC Shared Secret}
4977To construct a Diffie-Hellman shared secret with a private and public ECC key, use the following function:
4978\index{ecc\_shared\_secret()}
4979\begin{verbatim}
4980int ecc_shared_secret(      ecc_key *private_key,
4981                            ecc_key *public_key,
4982                      unsigned char *out,
4983                      unsigned long *outlen);
4984\end{verbatim}
4985The \textit{private\_key} is typically the local private key, and \textit{public\_key} is the key the remote party has shared.
4986Note: this function stores only the $x$ co-ordinate of the shared elliptic point as described in ANSI X9.63 ECC--DH.
4987
4988\mysection{ECC Diffie-Hellman Encryption}
4989ECC--DH Encryption is performed by producing a random key, hashing it, and XOR'ing the digest against the plaintext.  It is not strictly ANSI X9.63 compliant
4990but it is very similar.  It has been extended by using an ASN.1 sequence and hash object identifiers to allow portable usage.  The following function
4991encrypts a short string (no longer than the message digest) using this technique:
4992
4993\subsection{ECC-DH Encryption}
4994\index{ecc\_encrypt\_key()}
4995\begin{verbatim}
4996int ecc_encrypt_key(const unsigned char *in,
4997                          unsigned long  inlen,
4998                          unsigned char *out,
4999                          unsigned long *outlen,
5000                             prng_state *prng,
5001                                    int  wprng,
5002                                    int  hash,
5003                                ecc_key *key);
5004\end{verbatim}
5005
5006As the name implies this function encrypts a (symmetric) key, and is not intended for encrypting long messages directly.  It will encrypt the
5007plaintext in the array pointed to by \textit{in} of length \textit{inlen} octets.  It uses the public ECC key pointed to by \textit{key}, and
5008hash algorithm indexed by \textit{hash} to construct a shared secret which may be XOR'ed against the plaintext.  The ciphertext is stored in
5009the output buffer pointed to by \textit{out} of length \textit{outlen} octets.
5010
5011The data is encrypted to the public ECC \textit{key} such that only the holder of the private key can decrypt the payload.  To have multiple
5012recipients multiple call to this function for each public ECC key is required.
5013
5014\subsection{ECC-DH Decryption}
5015\index{ecc\_decrypt\_key()}
5016\begin{verbatim}
5017int ecc_decrypt_key(const unsigned char *in,
5018                          unsigned long  inlen,
5019                          unsigned char *out,
5020                          unsigned long *outlen,
5021                                ecc_key *key);
5022\end{verbatim}
5023
5024This function will decrypt an encrypted payload.  The \textit{key} provided must be the private key corresponding to the public key
5025used during encryption.  If the wrong key is provided the function will not specifically return an error code.  It is important
5026to use some form of challenge response in that case (e.g. compute a MAC of a known string).
5027
5028\subsection{ECC Encryption Format}
5029The packet format for the encrypted keys is the following ASN.1 SEQUENCE:
5030
5031\begin{verbatim}
5032ECCEncrypt ::= SEQUENCE {
5033   hashID        OBJECT IDENTIFIER, -- OID of hash used
5034   pubkey        OCTET STRING     , -- Encapsulated ECCPublicKey
5035   skey          OCTET STRING       -- xor of plaintext and
5036                                    --"hash of shared secret"
5037}
5038\end{verbatim}
5039
5040\mysection{EC DSA Signatures}
5041
5042There are also functions to sign and verify messages.  They use the ANSI X9.62 EC-DSA algorithm to generate and verify signatures in the
5043ANSI X9.62 format.
5044
5045\subsection{EC-DSA Signature Generation}
5046To sign a message digest (hash) use the following function:
5047
5048\index{ecc\_sign\_hash()}
5049\begin{verbatim}
5050int ecc_sign_hash(const unsigned char *in,
5051                        unsigned long  inlen,
5052                        unsigned char *out,
5053                        unsigned long *outlen,
5054                           prng_state *prng,
5055                                  int  wprng,
5056                              ecc_key *key);
5057\end{verbatim}
5058
5059This function will EC--DSA sign the message digest stored in the array pointed to by \textit{in} of length \textit{inlen} octets.  The signature
5060will be stored in the array pointed to by \textit{out} of length \textit{outlen} octets.  The function requires a properly seeded PRNG, and
5061the ECC \textit{key} provided must be a private key.
5062
5063\index{ecc\_sign\_hash\_rfc7518()}
5064\begin{verbatim}
5065int ecc_sign_hash_rfc7518(const unsigned char *in,
5066                                unsigned long  inlen,
5067                                unsigned char *out,
5068                                unsigned long *outlen,
5069                                   prng_state *prng,
5070                                          int  wprng,
5071                                      ecc_key *key);
5072\end{verbatim}
5073
5074This function creates the same EC--DSA signature as \textit{ecc\_sign\_hash} only the output format is different.
5075The format follows \url{https://tools.ietf.org/html/rfc7518#section-3.4}, sometimes it is also called plain signature.
5076
5077\subsection{EC-DSA Signature Verification}
5078\index{ecc\_verify\_hash()}
5079\begin{verbatim}
5080int ecc_verify_hash(const unsigned char *sig,
5081                          unsigned long  siglen,
5082                    const unsigned char *hash,
5083                          unsigned long  hashlen,
5084                                    int *stat,
5085                                ecc_key *key);
5086\end{verbatim}
5087
5088This function will verify the EC-DSA signature in the array pointed to by \textit{sig} of length \textit{siglen} octets, against the message digest
5089pointed to by the array \textit{hash} of length \textit{hashlen}.  It will store a non--zero value in \textit{stat} if the signature is valid.  Note:
5090the function will not return an error if the signature is invalid.  It will return an error, if the actual signature payload is an invalid format.
5091The ECC \textit{key} must be the public (or private) ECC key corresponding to the key that performed the signature.
5092The function \textit{ecc\_verify\_hash} implements signature format according to X9.62 EC--DSA, and the output is compliant for GF(p) curves.
5093
5094\index{ecc\_verify\_hash\_rfc7518()}
5095\begin{verbatim}
5096int ecc_verify_hash_rfc7518(const unsigned char *sig,
5097                                  unsigned long  siglen,
5098                            const unsigned char *hash,
5099                                  unsigned long  hashlen,
5100                                            int *stat,
5101                                        ecc_key *key);
5102\end{verbatim}
5103
5104This function validate the EC--DSA signature as \textit{ecc\_verify\_hash} only the signature input format
5105follows \url{https://tools.ietf.org/html/rfc7518#section-3.4}.
5106
5107\mysection{ECC Keysizes}
5108With ECC if you try to sign a hash that is bigger than your ECC key you can run into problems.  The math will still work, and in effect the signature will still
5109work.  With ECC keys the strength of the signature is limited by the size of the hash, or the size of they key, whichever is smaller.  For example, if you sign with
5110SHA256 and an ECC-192 key, you in effect have 96--bits of security.
5111
5112The library will not warn you if you make this mistake, so it is important to check yourself before using the signatures.
5113
5114\chapter{Digital Signature Algorithm}
5115\mysection{Introduction}
5116The Digital Signature Algorithm (or DSA) is a variant of the ElGamal Signature scheme which has been modified to
5117reduce the bandwidth of the signatures.  For example, to have \textit{80-bits of security} with ElGamal, you need a group with an order of at least 1024--bits.
5118With DSA, you need a group of order at least 160--bits.  By comparison, the ElGamal signature would require at least 256 bytes of storage, whereas the DSA signature
5119would require only at least 40 bytes.
5120
5121\mysection{Key Format}
5122Since no useful public standard for DSA key storage was presented to me during the course of this development I made my own ASN.1 SEQUENCE which I document
5123now so that others can interoperate with this library.
5124
5125\begin{verbatim}
5126DSAPublicKey ::= SEQUENCE {
5127    publicFlags    BIT STRING(0), -- must be 0
5128    g              INTEGER      , -- base generator
5129                                  -- check that g^q mod p == 1
5130                                  -- and that 1 < g < p - 1
5131    p              INTEGER      , -- prime modulus
5132    q              INTEGER      , -- order of sub-group
5133                                  -- (must be prime)
5134    y              INTEGER      , -- public key, specifically,
5135                                  -- g^x mod p,
5136                                  -- check that y^q mod p == 1
5137                                  -- and that 1 < y < p - 1
5138}
5139
5140DSAPrivateKey ::= SEQUENCE {
5141    publicFlags    BIT STRING(1), -- must be 1
5142    g              INTEGER      , -- base generator
5143                                  -- check that g^q mod p == 1
5144                                  -- and that 1 < g < p - 1
5145    p              INTEGER      , -- prime modulus
5146    q              INTEGER      , -- order of sub-group
5147                                  -- (must be prime)
5148    y              INTEGER      , -- public key, specifically,
5149                                  -- g^x mod p,
5150                                  -- check that y^q mod p == 1
5151                                  -- and that 1 < y < p - 1
5152    x              INTEGER        -- private key
5153}
5154\end{verbatim}
5155
5156The leading BIT STRING has a single bit in it which is zero for public keys and one for private keys.  This makes the structure uniquely decodable,
5157and easy to work with.
5158
5159\mysection{Key Generation}
5160To make a DSA key you must call the following function
5161\begin{verbatim}
5162int dsa_make_key(prng_state *prng,
5163                        int  wprng,
5164                        int  group_size,
5165                        int  modulus_size,
5166                    dsa_key *key);
5167\end{verbatim}
5168The variable \textit{prng} is an active PRNG state and \textit{wprng} the index to the descriptor.  \textit{group\_size} and
5169\textit{modulus\_size} control the difficulty of forging a signature.  Both parameters are in bytes.  The larger the
5170\textit{group\_size} the more difficult a forgery becomes upto a limit.  The value of $group\_size$ is limited by
5171$15 < group\_size < 1024$ and $modulus\_size - group\_size < 512$.  Suggested values for the pairs are as follows.
5172
5173\begin{figure}[H]
5174\begin{center}
5175\begin{tabular}{|c|c|c|}
5176\hline \textbf{Bits of Security} & \textbf{group\_size} & \textbf{modulus\_size} \\
5177\hline 80  & 20 & 128 \\
5178\hline 120 & 30 & 256 \\
5179\hline 140 & 35 & 384 \\
5180\hline 160 & 40 & 512 \\
5181\hline
5182\end{tabular}
5183\end{center}
5184\caption{DSA Key Sizes}
5185\end{figure}
5186
5187When you are finished with a DSA key you can call the following function to free the memory used.
5188\index{dsa\_free()}
5189\begin{verbatim}
5190void dsa_free(dsa_key *key);
5191\end{verbatim}
5192
5193\mysection{Key Verification}
5194Each DSA key is composed of the following variables.
5195
5196\begin{enumerate}
5197  \item $q$ a small prime of magnitude $256^{group\_size}$.
5198  \item $p = qr + 1$ a large prime of magnitude $256^{modulus\_size}$ where $r$ is a random even integer.
5199  \item $g = h^r \mbox{ (mod }p\mbox{)}$ a generator of order $q$ modulo $p$.  $h$ can be any non-trivial random
5200        value.  For this library they start at $h = 2$ and step until $g$ is not $1$.
5201  \item $x$ a random secret (the secret key) in the range $1 < x < q$
5202  \item $y = g^x \mbox{ (mod }p\mbox{)}$ the public key.
5203\end{enumerate}
5204
5205A DSA key is considered valid if it passes all of the following tests.
5206
5207\begin{enumerate}
5208   \item $q$ must be prime.
5209   \item $p$ must be prime.
5210   \item $g$ cannot be one of $\lbrace -1, 0, 1 \rbrace$ (modulo $p$).
5211   \item $g$ must be less than $p$.
5212   \item $(p-1) \equiv 0 \mbox{ (mod }q\mbox{)}$.
5213   \item $g^q \equiv 1 \mbox{ (mod }p\mbox{)}$.
5214   \item $1 < y < p - 1$
5215   \item $y^q \equiv 1 \mbox{ (mod }p\mbox{)}$.
5216\end{enumerate}
5217
5218Tests one and two ensure that the values will at least form a field which is required for the signatures to
5219function.  Tests three and four ensure that the generator $g$ is not set to a trivial value which would make signature
5220forgery easier.  Test five ensures that $q$ divides the order of multiplicative sub-group of $\Z/p\Z$. Test six
5221ensures that the generator actually generates a prime order group.  Tests seven and eight ensure that the public key
5222is within range and belongs to a group of prime order.  Note that test eight does not prove that $g$ generated $y$ only
5223that $y$ belongs to a multiplicative sub-group of order $q$.
5224
5225The following function will perform these tests.
5226
5227\index{dsa\_verify\_key()}
5228\begin{verbatim}
5229int dsa_verify_key(dsa_key *key, int *stat);
5230\end{verbatim}
5231
5232This will test \textit{key} and store the result in \textit{stat}.  If the result is $stat = 0$ the DSA key failed one of the tests
5233and should not be used at all.  If the result is $stat = 1$ the DSA key is valid (as far as valid mathematics are concerned).
5234
5235\mysection{Signatures}
5236\subsection{Signature Generation}
5237To generate a DSA signature call the following function:
5238
5239\index{dsa\_sign\_hash()}
5240\begin{verbatim}
5241int dsa_sign_hash(const unsigned char *in,
5242                        unsigned long  inlen,
5243                        unsigned char *out,
5244                        unsigned long *outlen,
5245                           prng_state *prng,
5246                                  int  wprng,
5247                              dsa_key *key);
5248\end{verbatim}
5249
5250Which will sign the data in \textit{in} of length \textit{inlen} bytes.  The signature is stored in \textit{out} and the size
5251of the signature in \textit{outlen}.  If the signature is longer than the size you initially specify in \textit{outlen} nothing
5252is stored and the function returns an error code.  The DSA \textit{key} must be of the \textbf{PK\_PRIVATE} persuasion.
5253
5254\subsection{Signature Verification}
5255To verify a hash created with that function use the following function:
5256
5257\index{dsa\_verify\_hash()}
5258\begin{verbatim}
5259int dsa_verify_hash(const unsigned char *sig,
5260                          unsigned long  siglen,
5261                    const unsigned char *hash,
5262                          unsigned long  inlen,
5263                                    int *stat,
5264                                dsa_key *key);
5265\end{verbatim}
5266Which will verify the data in \textit{hash} of length \textit{inlen} against the signature stored in \textit{sig} of length \textit{siglen}.
5267It will set \textit{stat} to $1$ if the signature is valid, otherwise it sets \textit{stat} to $0$.
5268
5269\mysection{DSA Encrypt and Decrypt}
5270As of version 1.07, the DSA keys can be used to encrypt and decrypt small payloads.  It works similar to the ECC encryption where
5271a shared key is computed, and the hash of the shared key XOR'ed against the plaintext forms the ciphertext.  The format used is functional port of
5272the ECC encryption format to the DSA algorithm.
5273
5274\subsection{DSA Encryption}
5275This function will encrypt a small payload with a recipients public DSA key.
5276
5277\index{dsa\_encrypt\_key()}
5278\begin{verbatim}
5279int dsa_encrypt_key(const unsigned char *in,
5280                          unsigned long  inlen,
5281                          unsigned char *out,
5282                          unsigned long *outlen,
5283                             prng_state *prng,
5284                                    int  wprng,
5285                                    int  hash,
5286                                dsa_key *key);
5287\end{verbatim}
5288
5289This will encrypt the payload in \textit{in} of length \textit{inlen} and store the ciphertext in the output buffer \textit{out}.  The
5290length of the ciphertext \textit{outlen} must be originally set to the length of the output buffer.  The DSA \textit{key} can be
5291a public key.
5292
5293\subsection{DSA Decryption}
5294
5295\index{dsa\_decrypt\_key()}
5296\begin{verbatim}
5297int dsa_decrypt_key(const unsigned char *in,
5298                          unsigned long  inlen,
5299                          unsigned char *out,
5300                          unsigned long *outlen,
5301                                dsa_key *key);
5302\end{verbatim}
5303This will decrypt the ciphertext \textit{in} of length \textit{inlen}, and store the original payload in \textit{out} of length \textit{outlen}.
5304The DSA \textit{key} must be a private key.
5305
5306\mysection{DSA Key Import and Export}
5307
5308\subsection{DSA Key Export}
5309To export a DSA key so that it can be transported use the following function:
5310\index{dsa\_export()}
5311\begin{verbatim}
5312int dsa_export(unsigned char *out,
5313               unsigned long *outlen,
5314                         int  type,
5315                     dsa_key *key);
5316\end{verbatim}
5317This will export the DSA \textit{key} to the buffer \textit{out} and set the length in \textit{outlen} (which must have been previously
5318initialized to the maximum buffer size).  The \textit{type} variable may be either \textbf{PK\_PRIVATE} or \textbf{PK\_PUBLIC}
5319depending on whether you want to export a private or public copy of the DSA key.
5320
5321\subsection{DSA Key Import}
5322To import an exported DSA key use the following function
5323:
5324\index{dsa\_import()}
5325\begin{verbatim}
5326int dsa_import(const unsigned char *in,
5327                     unsigned long  inlen,
5328                           dsa_key *key);
5329\end{verbatim}
5330
5331This will import the DSA key from the buffer \textit{in} of length \textit{inlen} to the \textit{key}.  If the process fails the function
5332will automatically free all of the heap allocated in the process (you don't have to call dsa\_free()).
5333
5334\mysection{Other DSA Functions}
5335
5336The following functions allow to create a DSA key in 2 steps:
5337
5338\begin{enumerate}
5339    \item Load or generate \textit{p}, \textit{q}, \textit{g} part of the key via \textit{dsa\_set\_pqg()}, \textit{dsa\_set\_pqg\_dsaparam()} or \textit{dsa\_generate\_pqg()}.
5340    \item Load or generate the actual DSA key -- private (\textit{x} and \textit{y} values) or public (\textit{y} value).
5341\end{enumerate}
5342
5343\index{dsa\_set\_pqg()}
5344\begin{verbatim}
5345int dsa_set_pqg(const unsigned char *p,  unsigned long plen,
5346                const unsigned char *q,  unsigned long qlen,
5347                const unsigned char *g,  unsigned long glen,
5348                dsa_key *key);
5349\end{verbatim}
5350
5351This will initialise the \textit{p}, \textit{q} and \textit{g} part of \textit{key} structure by directly loading binary
5352representation of \textit{p} (with length of \textit{plen}), \textit{q} (with length of \textit{qlen}) and \textit{g} (with length of \textit{glen}).
5353A simple DSA key validity check (without primality testing) is performed at the end of this function.
5354
5355\index{dsa\_set\_pqg\_dsaparam()}
5356\begin{verbatim}
5357int dsa_set_pqg_dsaparam(const unsigned char *dsaparam,
5358                               unsigned long  dsaparamlen,
5359                                     dsa_key *key);
5360\end{verbatim}
5361
5362This will initialise the \textit{p}, \textit{q} and \textit{g} part of \textit{key} structure by directly loading binary representation
5363of DSA parameters stored as a binary data in a buffer \textit{dsaparam} (with length of \textit{dsaparamlen}). A simple DSA key validity
5364check (without primality testing) is performed at the end of this function. The \textit{dsaparam} can be generated via:
5365\begin{verbatim}
5366 openssl dsaparam 2048 -outform DER -out dsaparam.der
5367\end{verbatim}
5368
5369\index{dsa\_generate\_pqg()}
5370\begin{verbatim}
5371int dsa_generate_pqg(prng_state *prng,
5372                            int  wprng,
5373                            int  group_size,
5374                            int  modulus_size,
5375                        dsa_key *key);
5376\end{verbatim}
5377
5378This will initialise the \textit{p}, \textit{q} and \textit{g} part of \textit{key} structure with newly generated random values.
5379As for the parameters they are the same as by \textit{dsa\_make\_key}.
5380
5381\index{dsa\_set\_key()}
5382\begin{verbatim}
5383int dsa_set_key(const unsigned char *in,
5384                      unsigned long  inlen,
5385                                int  type,
5386                            dsa_key *key);
5387\end{verbatim}
5388
5389This function can be used for setting the actual DSA key. If \textit{type} is \textit{PK\_PRIVATE} then the buffer \textit{in}
5390(with length of \textit{inlen}) contains a binary representation of \textit{x} part of the key (the public part \textit{y} is computed).
5391If \textit{type} is \textit{PK\_PUBLIC} then the buffer \textit{in} contains a binary representation of \textit{y} part of the key.
5392
5393\index{dsa\_generate\_key()}
5394\begin{verbatim}
5395int dsa_generate_key(prng_state *prng,
5396                            int  wprng,
5397                        dsa_key *key);
5398\end{verbatim}
5399
5400This function generates a private DSA key containing both \textit{x} and \textit{y} parts.
5401
5402\chapter{Standards Support}
5403\mysection{ASN.1 Formats}
5404LibTomCrypt supports a variety of ASN.1 data types encoded with the Distinguished Encoding Rules (DER) suitable for various cryptographic protocols.  The data types
5405are all provided with three basic functions with \textit{similar} prototypes.  One function has been dedicated to calculate the length in octets of a given
5406format, and two functions have been dedicated to encoding and decoding the format.
5407
5408On top of the basic data types are the SEQUENCE and SET data types which are collections of other ASN.1 types.  They are provided
5409in the same manner as the other data types except they use list of objects known as the \textbf{ltc\_asn1\_list} structure.  It is defined as the following:
5410
5411\index{ltc\_asn1\_list structure}
5412\begin{verbatim}
5413typedef struct {
5414   ltc_asn1_type          type;
5415   void                  *data;
5416   unsigned long          size;
5417   int                    used;
5418   struct ltc_asn1_list_ *prev,  *next,
5419                         *child, *parent;
5420} ltc_asn1_list;
5421\end{verbatim}
5422
5423\index{LTC\_SET\_ASN1 macro}
5424The \textit{type} field is one of the following ASN.1 field definitions.  The \textit{data} pointer is a void pointer to the data to be encoded (or the destination) and the
5425\textit{size} field is specific to what you are encoding (e.g. number of bits in the BIT STRING data type).  The \textit{used} field is primarily for the CHOICE decoder
5426and reflects if the particular member of a list was the decoded data type.  To help build the lists in an orderly fashion the macro
5427\textit{LTC\_SET\_ASN1(list, index, Type, Data, Size)} has been provided.
5428
5429It will assign to the \textit{index}th position in the \textit{list} the triplet (Type, Data, Size).  An example usage would be:
5430
5431\begin{small}
5432\begin{verbatim}
5433...
5434ltc_asn1_list   sequence[3];
5435unsigned long   three=3;
5436
5437LTC_SET_ASN1(sequence, 0, LTC_ASN1_IA5_STRING,    "hello", 5);
5438LTC_SET_ASN1(sequence, 1, LTC_ASN1_SHORT_INTEGER, &three,  1);
5439LTC_SET_ASN1(sequence, 2, LTC_ASN1_NULL,           NULL,   0);
5440\end{verbatim}
5441\end{small}
5442
5443The macro is relatively safe with respect to modifying variables, for instance the following code is equivalent.
5444
5445\begin{small}
5446\begin{verbatim}
5447...
5448ltc_asn1_list   sequence[3];
5449unsigned long   three=3;
5450int             x=0;
5451LTC_SET_ASN1(sequence, x++, LTC_ASN1_IA5_STRING,    "hello", 5);
5452LTC_SET_ASN1(sequence, x++, LTC_ASN1_SHORT_INTEGER, &three,  1);
5453LTC_SET_ASN1(sequence, x++, LTC_ASN1_NULL,           NULL,   0);
5454\end{verbatim}
5455\end{small}
5456
5457\begin{figure}[h]
5458\begin{center}
5459\begin{small}
5460\begin{tabular}{|l|l|}
5461\hline \textbf{Definition}           & \textbf{ASN.1 Type} \\
5462\hline LTC\_ASN1\_EOL                & End of a ASN.1 list structure. \\
5463\hline LTC\_ASN1\_BOOLEAN            & BOOLEAN type \\
5464\hline LTC\_ASN1\_INTEGER            & INTEGER (uses mp\_int) \\
5465\hline LTC\_ASN1\_SHORT\_INTEGER     & INTEGER (32--bit using unsigned long) \\
5466\hline LTC\_ASN1\_BIT\_STRING        & BIT STRING (one bit per char) \\
5467\hline LTC\_ASN1\_OCTET\_STRING      & OCTET STRING (one octet per char) \\
5468\hline LTC\_ASN1\_NULL               & NULL \\
5469\hline LTC\_ASN1\_OBJECT\_IDENTIFIER & OBJECT IDENTIFIER  \\
5470\hline LTC\_ASN1\_IA5\_STRING        & IA5 STRING (one octet per char) \\
5471\hline LTC\_ASN1\_PRINTABLE\_STRING  & PRINTABLE STRING (one octet per char) \\
5472\hline LTC\_ASN1\_UTF8\_STRING       & UTF8 STRING (one wchar\_t per char) \\
5473\hline LTC\_ASN1\_UTCTIME            & UTCTIME (see ltc\_utctime structure) \\
5474\hline LTC\_ASN1\_CHOICE             & CHOICE \\
5475\hline LTC\_ASN1\_SEQUENCE           & SEQUENCE (and SEQUENCE OF) \\
5476\hline LTC\_ASN1\_SET                & SET \\
5477\hline LTC\_ASN1\_SETOF              & SET OF \\
5478\hline LTC\_ASN1\_RAW\_BIT\_STRING   & BIT STRING (one octet per char) \\
5479\hline LTC\_ASN1\_TELETEX\_STRING    & TELETEX STRING (one octet per char) \\
5480\hline LTC\_ASN1\_CONSTRUCTED        & A constructed type that is not SEQUENCE or SET \\
5481\hline LTC\_ASN1\_CONTEXT\_SPECIFIC  & A context-specific type \\
5482\hline LTC\_ASN1\_GENERALIZEDTIME    & GeneralizedTime (see ltc\_generalizedtime structure) \\
5483\hline
5484\end{tabular}
5485\caption{List of ASN.1 Supported Types}
5486\index{ltc\_asn1\_type}
5487\end{small}
5488\end{center}
5489\end{figure}
5490
5491\subsection{SEQUENCE Type}
5492The SEQUENCE data type is a collection of other ASN.1 data types encapsulated with a small header which is a useful way of sending multiple data types in one packet.
5493
5494\subsubsection{SEQUENCE Encoding}
5495To encode a sequence a \textbf{ltc\_asn1\_list} array must be initialized with the members of the sequence and their respective pointers.  The encoding is performed
5496with the following function.
5497
5498\index{der\_encode\_sequence()}\index{LTC\_ASN1\_EOL}
5499\begin{verbatim}
5500int der_encode_sequence(ltc_asn1_list *list,
5501                        unsigned long  inlen,
5502                        unsigned char *out,
5503                        unsigned long *outlen);
5504\end{verbatim}
5505This encodes a sequence of items pointed to by \textit{list} where the list has \textit{inlen} items in it.  The SEQUENCE will be encoded to \textit{out} and of length \textit{outlen}.  The
5506function will terminate when it reads all the items out of the list (upto \textit{inlen}) or it encounters an item in the list with a type of \textbf{LTC\_ASN1\_EOL}.
5507
5508The \textit{data} pointer in the list would be the same pointer you would pass to the respective ASN.1 encoder (e.g. der\_encode\_bit\_string()) and it is simply passed on
5509verbatim to the dependent encoder.  The list can contain other SEQUENCE or SET types which enables you to have nested SEQUENCE and SET definitions.  In these cases
5510the \textit{data} pointer is simply a pointer to another \textbf{ltc\_asn1\_list}.
5511
5512\subsubsection{SEQUENCE Decoding}
5513
5514\index{der\_decode\_sequence()}
5515
5516Decoding a SEQUENCE is similar to encoding.  You set up an array of \textbf{ltc\_asn1\_list} where in this case the \textit{size} member is the maximum size
5517(in certain cases).  For types such as IA5 STRING, BIT STRING, OCTET STRING (etc) the \textit{size} field is updated after successful decoding to reflect how many
5518units of the respective type has been loaded.
5519
5520\begin{verbatim}
5521int der_decode_sequence(const unsigned char *in,
5522                              unsigned long  inlen,
5523                              ltc_asn1_list *list,
5524                              unsigned long  outlen);
5525\end{verbatim}
5526
5527This will decode upto \textit{outlen} items from the input buffer \textit{in} of length \textit{inlen} octets.  The function will stop (gracefully) when it runs out of items to decode.
5528It will fail (for among other reasons) when it runs out of input bytes to read, a data type is invalid or a heap failure occurred.
5529
5530For the following types the \textit{size} field will be updated to reflect the number of units read of the given type.
5531\begin{enumerate}
5532   \item BIT STRING
5533   \item OCTET STRING
5534   \item OBJECT IDENTIFIER
5535   \item IA5 STRING
5536   \item PRINTABLE STRING
5537\end{enumerate}
5538
5539\subsubsection{SEQUENCE Length}
5540
5541The length of a SEQUENCE can be determined with the following function.
5542
5543\index{der\_length\_sequence()}
5544\begin{verbatim}
5545int der_length_sequence(ltc_asn1_list *list,
5546                        unsigned long  inlen,
5547                        unsigned long *outlen);
5548\end{verbatim}
5549
5550This will get the encoding size for the given \textit{list} of length \textit{inlen} and store it in \textit{outlen}.
5551
5552\subsubsection{SEQUENCE Multiple Argument Lists}\index{LTC\_ASN1\_EOL}
5553
5554For small or simple sequences an encoding or decoding can be performed with one of the following two functions.
5555
5556\index{der\_encode\_sequence\_multi()}
5557\index{der\_decode\_sequence\_multi()}
5558
5559\begin{verbatim}
5560int der_encode_sequence_multi(unsigned char *out,
5561                              unsigned long *outlen, ...);
5562
5563int der_decode_sequence_multi(const unsigned char *in,
5564                                    unsigned long  inlen, ...);
5565\end{verbatim}
5566
5567These either encode or decode (respectively) a SEQUENCE data type where the items in the sequence are specified after the length parameter.
5568
5569The list of items are specified as a triple of the form \textit{(type, size, data)}  where \textit{type} is an \textbf{int}, \textit{size} is a \textbf{unsigned long}
5570and \textit{data} is \textbf{void} pointer.  The list of items must be terminated with an item with the type \textbf{LTC\_ASN1\_EOL}.
5571
5572It is ideal that you cast the \textit{size} values to unsigned long to ensure that the proper data type is passed to the function.  Constants such as \textit{1} without
5573a cast or prototype are of type \textbf{int} by default.  Appending \textit{UL} or pre-pending \textit{(unsigned long)} is enough to cast it to the correct type.
5574
5575\begin{small}
5576\begin{verbatim}
5577unsigned char buf[MAXBUFSIZE];
5578unsigned long buflen;
5579int           err;
5580
5581   buflen = sizeof(buf);
5582   if ((err =
5583        der_encode_sequence_multi(buf, &buflen,
5584        LTC_ASN1_IA5_STRING, 5UL, "Hello",
5585        LTC_ASN1_IA5_STRING, 7UL, " World!",
5586        LTC_ASN1_EOL,        0UL, NULL)) != CRYPT_OK) {
5587      // error handling
5588   }
5589\end{verbatim}
5590\end{small}
5591
5592This example encodes a SEQUENCE with two IA5 STRING types containing ``Hello'' and `` World!'' respectively.  Note the usage of the \textbf{UL} modifier
5593on the size parameters.  This forces the compiler to pass the numbers as the required \textbf{unsigned long} type that the function expects.
5594
5595\subsection{SET and SET OF}
5596
5597\index{SET} \index{SET OF}
5598SET and SET OF are related to the SEQUENCE type in that they can be pretty much be decoded with the same code.  However, they are different, and they should
5599be carefully noted.  The SET type is an unordered array of ASN.1 types sorted by the TAG (type identifier), whereas the SET OF type is an ordered array of
5600a \textbf{single} ASN.1 object sorted in ascending order by the DER their respective encodings.
5601
5602\subsubsection{SET Encoding}
5603
5604SETs use the same array structure of ltc\_asn1\_list that the SEQUENCE functions use.  They are encoded with the following function:
5605
5606\index{der\_encode\_set()}
5607\begin{verbatim}
5608int der_encode_set(ltc_asn1_list *list,
5609                   unsigned long  inlen,
5610                   unsigned char *out,
5611                   unsigned long *outlen);
5612\end{verbatim}
5613
5614This will encode the list of ASN.1 objects in \textit{list} of length \textit{inlen} objects, and store the output in \textit{out} of length \textit{outlen} bytes.
5615The function will make a copy of the list provided, and sort it by the TAG.  Objects with identical TAGs are additionally sorted on their original placement in the
5616array (to make the process deterministic).
5617
5618This function will \textbf{NOT} recognize \textit{DEFAULT} objects, and it is the responsibility of the caller to remove them as required.
5619
5620\subsubsection{SET Decoding}
5621
5622The SET type can be decoded with the following function.
5623
5624\index{der\_decode\_set()}
5625\begin{verbatim}
5626int der_decode_set(const unsigned char *in,
5627                         unsigned long  inlen,
5628                         ltc_asn1_list *list,
5629                         unsigned long  outlen);
5630\end{verbatim}
5631
5632This will decode the SET specified by \textit{list} of length \textit{outlen} objects from the input buffer \textit{in} of length \textit{inlen} octets.
5633
5634It handles the fact that SETs are not strictly ordered and will make multiple passes (as required) through the list to decode all the objects.
5635
5636\subsubsection{SET Length}
5637The length of a SET can be determined by calling der\_length\_sequence() since they have the same encoding length.
5638
5639\subsubsection{SET OF Encoding}
5640A \textit{SET OF} object is an array of identical objects (e.g. OCTET STRING) sorted in ascending order by the DER encoding of the object.  They are
5641used to store objects deterministically based solely on their encoding.  It uses the same array structure of ltc\_asn1\_list that the SEQUENCE functions
5642use.  They are encoded with the following function.
5643
5644\index{der\_encode\_setof()}
5645\begin{verbatim}
5646int der_encode_setof(ltc_asn1_list *list,
5647                     unsigned long  inlen,
5648                     unsigned char *out,
5649                     unsigned long *outlen);
5650\end{verbatim}
5651
5652This will encode a \textit{SET OF} containing the \textit{list} of \textit{inlen} ASN.1 objects and store the encoding in the output buffer \textit{out} of length \textit{outlen}.
5653
5654The routine will first encode the SET OF in an unordered fashion (in a temporary buffer) then sort using the XQSORT macro and copy back to the output buffer.  This
5655means you need at least enough memory to keep an additional copy of the output on the heap.
5656
5657\subsubsection{SET OF Decoding}
5658Since the decoding of a \textit{SET OF} object is unambiguous it can be decoded with der\_decode\_sequence().
5659
5660\subsubsection{SET OF Length}
5661Like the SET type the der\_length\_sequence() function can be used to determine the length of a \textit{SET OF} object.
5662
5663\subsection{ASN.1 INTEGER}
5664
5665To encode or decode INTEGER data types use the following functions.
5666
5667\index{der\_encode\_integer()}\index{der\_decode\_integer()}\index{der\_length\_integer()}
5668\begin{verbatim}
5669int der_encode_integer(         void *num,
5670                       unsigned char *out,
5671                       unsigned long *outlen);
5672
5673int der_decode_integer(const unsigned char *in,
5674                             unsigned long  inlen,
5675                                      void *num);
5676
5677int der_length_integer(         void *num,
5678                       unsigned long *len);
5679\end{verbatim}
5680
5681These will encode or decode a signed INTEGER data type using the bignum data type to store the large INTEGER.  To encode smaller values without allocating
5682a bignum to store the value, the \textit{short} INTEGER functions were made available.
5683
5684\index{der\_encode\_short\_integer()}\index{der\_decode\_short\_integer()}\index{der\_length\_short\_integer()}
5685\begin{verbatim}
5686int der_encode_short_integer(unsigned long  num,
5687                             unsigned char *out,
5688                             unsigned long *outlen);
5689
5690int der_decode_short_integer(const unsigned char *in,
5691                                   unsigned long  inlen,
5692                                   unsigned long *num);
5693
5694int der_length_short_integer(unsigned long  num,
5695                             unsigned long *outlen);
5696\end{verbatim}
5697
5698These will encode or decode an unsigned \textbf{unsigned long} type (only reads upto 32--bits).  For values in the range $0 \dots 2^{32} - 1$ the integer
5699and short integer functions can encode and decode each others outputs.
5700
5701\subsection{ASN.1 BIT STRING}
5702
5703\index{der\_encode\_bit\_string()}\index{der\_decode\_bit\_string()}\index{der\_length\_bit\_string()}
5704\begin{verbatim}
5705int der_encode_bit_string(const unsigned char *in,
5706                                unsigned long  inlen,
5707                                unsigned char *out,
5708                                unsigned long *outlen);
5709
5710int der_decode_bit_string(const unsigned char *in,
5711                                unsigned long  inlen,
5712                                unsigned char *out,
5713                                unsigned long *outlen);
5714
5715int der_length_bit_string(unsigned long  nbits,
5716                          unsigned long *outlen);
5717\end{verbatim}
5718
5719These will encode or decode a BIT STRING data type.  The bits are passed in (or read out) using one \textbf{char} per bit.  A non--zero value will be interpreted
5720as a one bit, and a zero value a zero bit.
5721
5722\subsection{ASN.1 RAW BIT STRING}
5723
5724\index{der\_encode\_raw\_bit\_string()}\index{der\_decode\_raw\_bit\_string()}
5725\begin{verbatim}
5726int der_encode_raw_bit_string(const unsigned char *in,
5727                                    unsigned long  inlen,
5728                                    unsigned char *out,
5729                                    unsigned long *outlen);
5730
5731int der_decode_raw_bit_string(const unsigned char *in,
5732                                    unsigned long  inlen,
5733                                    unsigned char *out,
5734                                    unsigned long *outlen);
5735\end{verbatim}
5736
5737These will encode or decode a BIT STRING data type.
5738The bits are passed in (or read out) using one \textbf{unsigned char} per 8 bit.
5739
5740This function differs from the normal BIT STRING, as it can be used to directly
5741process raw binary data and store it to resp. read it from an ASN.1 BIT STRING
5742data type.
5743
5744The length function is the same as for the normal BIT STRING \textit{der\_length\_bit\_string()}.
5745
5746\subsection{ASN.1 OCTET STRING}
5747
5748\index{der\_encode\_octet\_string()}\index{der\_decode\_octet\_string()}\index{der\_length\_octet\_string()}
5749\begin{verbatim}
5750int der_encode_octet_string(const unsigned char *in,
5751                                  unsigned long  inlen,
5752                                  unsigned char *out,
5753                                  unsigned long *outlen);
5754
5755int der_decode_octet_string(const unsigned char *in,
5756                                  unsigned long  inlen,
5757                                  unsigned char *out,
5758                                  unsigned long *outlen);
5759
5760int der_length_octet_string(unsigned long  noctets,
5761                            unsigned long *outlen);
5762\end{verbatim}
5763
5764These will encode or decode an OCTET STRING data type.  The octets are stored using one \textbf{unsigned char} each.
5765
5766\subsection{ASN.1 OBJECT IDENTIFIER}
5767
5768\index{der\_encode\_object\_identifier()}\index{der\_decode\_object\_identifier()}\index{der\_length\_object\_identifier()}
5769\begin{verbatim}
5770int der_encode_object_identifier(unsigned long *words,
5771                                 unsigned long  nwords,
5772                                 unsigned char *out,
5773                                 unsigned long *outlen);
5774
5775int der_decode_object_identifier(const unsigned char *in,
5776                                       unsigned long  inlen,
5777                                       unsigned long *words,
5778                                       unsigned long *outlen);
5779
5780int der_length_object_identifier(unsigned long *words,
5781                                 unsigned long  nwords,
5782                                 unsigned long *outlen);
5783\end{verbatim}
5784
5785These will encode or decode an OBJECT IDENTIFIER object.  The words of the OID are stored in individual \textbf{unsigned long} elements, and must be in the range
5786$0 \ldots 2^{32} - 1$.
5787
5788\subsection{ASN.1 IA5 STRING}
5789
5790\index{der\_encode\_ia5\_string()}\index{der\_decode\_ia5\_string()}\index{der\_length\_ia5\_string()}
5791\begin{verbatim}
5792int der_encode_ia5_string(const unsigned char *in,
5793                                unsigned long  inlen,
5794                                unsigned char *out,
5795                                unsigned long *outlen);
5796
5797int der_decode_ia5_string(const unsigned char *in,
5798                                unsigned long  inlen,
5799                                unsigned char *out,
5800                                unsigned long *outlen);
5801
5802int der_length_ia5_string(const unsigned char *octets,
5803                                unsigned long  noctets,
5804                                unsigned long *outlen);
5805\end{verbatim}
5806
5807These will encode or decode an IA5 STRING.  The characters are read or stored in individual \textbf{char} elements.  These functions performs internal character
5808to numerical conversions based on the conventions of the compiler being used.  For instance, on an x86\_32 machine 'A' == 65 but the same may not be true on
5809say a SPARC machine.  Internally, these functions have a table of literal characters and their numerical ASCII values.  This provides a stable conversion provided
5810that the build platform honours the run--time platforms character conventions.
5811
5812\subsection{ASN.1 TELETEX STRING}
5813
5814\index{der\_decode\_teletex\_string()}\index{der\_length\_teletex\_string()}
5815\begin{verbatim}
5816int der_decode_teletex_string(const unsigned char *in,
5817                                    unsigned long  inlen,
5818                                    unsigned char *out,
5819                                    unsigned long *outlen);
5820
5821int der_length_teletex_string(const unsigned char *octets,
5822                                    unsigned long  noctets,
5823                                    unsigned long *outlen);
5824\end{verbatim}
5825
5826These will decode a TELETEX STRING.
5827The characters are read in individual \textbf{char} elements.
5828The internal structure is similar to that of the IA5 STRING implementation, to
5829be able to provide a stable conversion independent of the build-- and run--time
5830platform.
5831
5832\subsection{ASN.1 PRINTABLE STRING}
5833
5834\index{der\_encode\_printable\_string()}\index{der\_decode\_printable\_string()}\index{der\_length\_printable\_string()}
5835\begin{verbatim}
5836int der_encode_printable_string(const unsigned char *in,
5837                                      unsigned long  inlen,
5838                                      unsigned char *out,
5839                                      unsigned long *outlen);
5840
5841int der_decode_printable_string(const unsigned char *in,
5842                                      unsigned long  inlen,
5843                                      unsigned char *out,
5844                                      unsigned long *outlen);
5845
5846int der_length_printable_string(const unsigned char *octets,
5847                                      unsigned long  noctets,
5848                                      unsigned long *outlen);
5849\end{verbatim}
5850
5851These will encode or decode an PRINTABLE STRING.  The characters are read or stored in individual \textbf{char} elements.  These functions performs internal character
5852to numerical conversions based on the conventions of the compiler being used.  For instance, on an x86\_32 machine 'A' == 65 but the same may not be true on
5853say a SPARC machine.  Internally, these functions have a table of literal characters and their numerical ASCII values.  This provides a stable conversion provided
5854that the build platform honours the run-time platforms character conventions.
5855
5856\subsection{ASN.1 UTF8 STRING}
5857
5858\index{der\_encode\_utf8\_string()}\index{der\_decode\_utf8\_string()}\index{der\_length\_utf8\_string()}
5859\begin{verbatim}
5860int der_encode_utf8_string(const wchar_t *in,
5861                           unsigned long  inlen,
5862                           unsigned char *out,
5863                           unsigned long *outlen);
5864
5865int der_decode_utf8_string(const unsigned char *in,
5866                                 unsigned long  inlen,
5867                                       wchar_t *out,
5868                                 unsigned long *outlen);
5869
5870int der_length_utf8_string(const wchar_t *octets,
5871                           unsigned long  noctets,
5872                           unsigned long *outlen);
5873\end{verbatim}
5874
5875These will encode or decode an UTF8 STRING.  The characters are read or stored in individual \textbf{wchar\_t} elements.  These function performs no internal
5876mapping and treat the characters as literals.
5877
5878These functions use the \textbf{wchar\_t} type which is not universally available.  In those cases, the library will typedef it to \textbf{unsigned long}.  If you
5879intend to use the ISO C functions for working with wide--char arrays, you should make sure that wchar\_t has been defined previously.
5880
5881\subsection{ASN.1 UTCTIME}
5882
5883The UTCTIME type is to store a date and time in ASN.1 format.  It uses the following structure to organize the time.
5884
5885\index{ltc\_utctime structure}
5886\begin{verbatim}
5887typedef struct {
5888   unsigned YY, /* year    00--99 */
5889            MM, /* month   01--12 */
5890            DD, /* day     01--31 */
5891            hh, /* hour    00--23 */
5892            mm, /* minute  00--59 */
5893            ss, /* second  00--59 */
5894            off_dir, /* timezone offset direction 0 == +, 1 == - */
5895            off_hh, /* timezone offset hours */
5896            off_mm; /* timezone offset minutes */
5897} ltc_utctime;
5898\end{verbatim}
5899
5900The time can be offset plus or minus a set amount of hours (off\_hh) and minutes (off\_mm).  When \textit{off\_dir} is zero, the time will be added otherwise it
5901will be subtracted.  For instance, the array $\lbrace 5, 6, 20, 22, 4, 00, 0, 5, 0 \rbrace$ represents the current time of
5902\textit{2005, June 20th, 22:04:00} with a time offset of +05h00.
5903
5904\index{der\_encode\_utctime()}\index{der\_decode\_utctime()}\index{der\_length\_utctime()}
5905\begin{verbatim}
5906int der_encode_utctime(  ltc_utctime *utctime,
5907                       unsigned char *out,
5908                       unsigned long *outlen);
5909
5910int der_decode_utctime(const unsigned char *in,
5911                             unsigned long *inlen,
5912                               ltc_utctime *out);
5913
5914int der_length_utctime(  ltc_utctime *utctime,
5915                       unsigned long *outlen);
5916\end{verbatim}
5917
5918The encoder will store time in one of the two ASN.1 formats, either \textit{YYMMDDhhmmssZ} or \textit{YYMMDDhhmmss$\pm$hhmm}, and perform minimal error checking on the
5919input.  The decoder will read all valid ASN.1 formats and perform range checking on the values (not complete but rational) useful for catching packet errors.
5920
5921It is suggested that decoded data be further scrutinized (e.g. days of month in particular).
5922
5923\subsection{ASN.1 GeneralizedTime}
5924
5925The GeneralizedTime type is to store a date and time in ASN.1 format.  It uses the following structure to organize the time.
5926
5927\index{ltc\_utctime structure}
5928\begin{verbatim}
5929typedef struct {
5930   unsigned YYYY, /* year              0--9999 */
5931            MM, /* month               1--12 */
5932            DD, /* day                 1--31 */
5933            hh, /* hour                0--23 */
5934            mm, /* minute              0--59 */
5935            ss, /* second              0--59 */
5936            fs, /* fractional seconds  1--UINT_MAX */
5937            off_dir, /* timezone offset direction 0 == +, 1 == - */
5938            off_hh, /* timezone offset hours */
5939            off_mm; /* timezone offset minutes */
5940} ltc_generalizedtime;
5941\end{verbatim}
5942
5943The time can be offset plus or minus a set amount of hours (off\_hh) and minutes (off\_mm).  When \textit{off\_dir} is zero, the time will be added otherwise it
5944will be subtracted.  For instance, the array $\lbrace 2005, 6, 20, 22, 4, 0, 122, 0, 5, 0 \rbrace$ represents the current time of
5945\textit{2005, June 20th, 22:04:00.122} with a time offset of +05h00.
5946
5947\index{der\_encode\_utctime()}\index{der\_decode\_utctime()}\index{der\_length\_utctime()}
5948\begin{verbatim}
5949int der_encode_generalizedtime(ltc_generalizedtime *gtime,
5950                               unsigned char       *out,
5951                               unsigned long       *outlen);
5952
5953int der_decode_generalizedtime(const unsigned char *in,
5954                               unsigned long       *inlen,
5955                               ltc_generalizedtime *out);
5956
5957int der_length_generalizedtime(ltc_generalizedtime *gtime,
5958                               unsigned long       *outlen);
5959\end{verbatim}
5960
5961The encoder will store time in one of the following ASN.1 formats, either \textit{YYYYMMDDhhmmssZ} or
5962\textit{YYYYMMDDhhmmss$\pm$hhmm} or\textit{YYYYMMDDhhmmss.fsZ} or \textit{YYYYMMDDhhmmss.fs$\pm$hhmm},
5963and perform minimal error checking on the input.
5964The decoder will read all valid ASN.1 formats and perform range checking on the values (not complete but
5965rational) useful for catching packet errors.
5966
5967The fractional seconds are always added in case they are not $0$.
5968The implementation of fractional seconds is currently unreliable and you can't detect decoded
5969resp. encode leading $0$'s (e.g. \textit{20170424232717.005Z} would be decoded as
5970\textit{22. April 2017, 23:27:17.5}).
5971
5972It is suggested that decoded data be further scrutinized (e.g. days of month in particular).
5973
5974\subsection{ASN.1 CHOICE}
5975
5976The CHOICE ASN.1 type represents a union of ASN.1 types all of which are stored in a \textit{ltc\_asn1\_list}.  There is no encoder for the CHOICE type, only a
5977decoder.  The decoder will scan through the provided list attempting to use the appropriate decoder on the input packet.  The list can contain any ASN.1 data
5978type\footnote{Except it cannot have LTC\_ASN1\_INTEGER and LTC\_ASN1\_SHORT\_INTEGER simultaneously.} except for other CHOICE types.
5979
5980There is no encoder for the CHOICE type as the actual DER encoding is the encoding of the chosen type.
5981
5982\index{der\_decode\_choice()}
5983\begin{verbatim}
5984int der_decode_choice(const unsigned char *in,
5985                            unsigned long *inlen,
5986                            ltc_asn1_list *list,
5987                            unsigned long  outlen);
5988\end{verbatim}
5989
5990This will decode the input in the \textit{in} field of length \textit{inlen}.  It uses the provided ASN.1 list specified in the \textit{list} field which has
5991\textit{outlen} elements.  The \textit{inlen} field will be updated with the length of the decoded data type, as well as the respective entry in the \textit{list} field
5992will have the \textit{used} flag set to non--zero to reflect it was the data type decoded.
5993
5994\subsection{ASN.1 Flexi Decoder}
5995The ASN.1 \textit{flexi} decoder allows the developer to decode arbitrary ASN.1 DER packets (provided they use data types LibTomCrypt supports) without first knowing
5996the structure of the data.  Where der\_decode\_sequence() requires the developer to specify the data types to decode in advance the flexi decoder is entirely
5997free form.
5998
5999The flexi decoder uses the same \textit{ltc\_asn1\_list} but instead of being stored in an array it uses the linked list pointers \textit{prev}, \textit{next}, \textit{parent}
6000and \textit{child}.  The list works as a \textit{doubly-linked list} structure where decoded items at the same level are siblings (using next and prev) and items
6001encoded in a SEQUENCE are stored as a child element.
6002
6003When a SEQUENCE or SET has been encountered a SEQUENCE (or SET resp.) item will be added as a sibling (e.g. list.type == LTC\_ASN1\_SEQUENCE) and the child
6004pointer points to a new list of items contained within the object.
6005
6006\index{der\_decode\_sequence\_flexi()}
6007\index{LTC\_ASN1\_CONSTRUCTED}
6008\index{LTC\_ASN1\_CONTEXT\_SPECIFIC}
6009\begin{verbatim}
6010int  der_decode_sequence_flexi(const unsigned char *in,
6011                                     unsigned long *inlen,
6012                                    ltc_asn1_list **out);
6013\end{verbatim}
6014
6015This will decode items in the \textit{in} buffer of max input length \textit{inlen} and store the newly created pointer to the list in \textit{out}.  This function allocates
6016all required memory for the decoding.  It stores the number of octets read back into \textit{inlen}.
6017
6018The function will terminate when either it hits an invalid ASN.1 tag, or it reads \textit{inlen} octets.  An early termination is a soft error, and returns
6019normally.  The decoded list \textit{out} will point to the very first element of the list (e.g. both parent and prev pointers will be \textbf{NULL}).
6020
6021An invalid decoding will terminate the process, and free the allocated memory automatically.
6022
6023The flexi decoder calls itself when decoding a constructed type. This leads to
6024a 'child process' that will terminate when it decodes an unkown/invalid
6025identifier and leaves an allocated but uninitialized child element.
6026However the parent processing will continue with a "soft-error".
6027This can be detected by checking for \textit{child} elements with
6028type \textbf{LTC\_ASN1\_EOL} after decoding.
6029
6030As of v1.18.0 the flexi decoder will also decode arbitrary constructed types
6031other than SEQUENCE and SET. The \textit{type} field will be set to
6032\textbf{LTC\_ASN1\_CONSTRUCTED} and the plain identifier that was indicated in the ASN.1
6033encoding is stored in the \textit{used} field. Further decoding is done in the
6034same way as if it were a SEQUENCE or SET.
6035
6036Also as of v1.18.0 the flexi decoder is capable to handle
6037\textit{context-specific} encodings. The \textit{type} field will be set to
6038\textbf{LTC\_ASN1\_CONTEXT\_SPECIFIC} and the plain identifier that was indicated
6039in the ASN.1 encoding is stored in the \textit{used} field. Encapsulated data
6040in the \textit{context-specific} encoding is copied to newly allocated memory
6041and is accessible through the \textit{data} field.
6042
6043\textbf{Note:} the list decoded by this function is \textbf{NOT} in the correct form for der\_encode\_sequence() to use directly.  You will first
6044have to convert the list by first storing all of the siblings in an array then storing all the children as sub-lists of a sequence using the \textit{.data}
6045pointer.  Currently no function in LibTomCrypt provides this ability.
6046
6047\subsubsection{Sample Decoding}
6048Suppose we decode the following structure:
6049\begin{small}
6050\begin{verbatim}
6051User ::= SEQUENCE {
6052   Name        IA5 STRING
6053   LoginToken  SEQUENCE {
6054      passwdHash   OCTET STRING
6055      pubkey       ECCPublicKey
6056   }
6057   LastOn      UTCTIME
6058}
6059\end{verbatim}
6060\end{small}
6061\begin{flushleft}and we decoded it with the following code:\end{flushleft}
6062
6063\begin{small}
6064\begin{verbatim}
6065unsigned char inbuf[MAXSIZE];
6066unsigned long inbuflen;
6067ltc_asn1_list *list;
6068int           err;
6069
6070/* somehow fill inbuf/inbuflen */
6071if ((err = der_decode_sequence_flexi(inbuf, inbuflen, &list)) != CRYPT_OK) {
6072   printf("Error decoding: %s\n", error_to_string(err));
6073   exit(EXIT_FAILURE);
6074}
6075\end{verbatim}
6076\end{small}
6077
6078At this point \textit{list} would point to the SEQUENCE identified by \textit{User}.  It would have no sibblings (prev or next), and only a child node.  Walking to the child
6079node with the following code will bring us to the \textit{Name} portion of the SEQUENCE:
6080\begin{small}
6081\begin{verbatim}
6082list = list->child;
6083\end{verbatim}
6084\end{small}
6085Now \textit{list} points to the \textit{Name} member (with the tag IA5 STRING).  The \textit{data}, \textit{size}, and \textit{type} members of \textit{list} should reflect
6086that of an IA5 STRING.  The sibbling will now be the \textit{LoginToken} SEQUENCE.  The sibbling has a child node which points to the \textit{passwdHash} OCTET STRING.
6087We can walk to this node with the following code:
6088\begin{small}
6089\begin{verbatim}
6090/* list already pointing to 'Name' */
6091list = list->next->child;
6092\end{verbatim}
6093\end{small}
6094At this point, \textit{list} will point to the \textit{passwdHash} member of the innermost SEQUENCE.  This node has a sibbling, the \textit{pubkey} member of the SEQUENCE.
6095The \textit{LastOn} member of the SEQUENCE is a sibbling of the LoginToken node, if we wanted to walk there we would have to go up and over via:
6096\begin{small}
6097\begin{verbatim}
6098list = list->parent->next;
6099\end{verbatim}
6100\end{small}
6101At this point, we are pointing to the last node of the list.  Lists are terminated in all directions by a \textbf{NULL} pointer.  All nodes are doubly linked so that you
6102can walk up and down the nodes without keeping pointers lying around.
6103
6104
6105\subsubsection{Shrink'ing a Flexi List}
6106While decoding the flexi decoder will recursively decode an ASN.1 \textit{constructed} type it will store the decoded list
6107as well as the plain data that was decoded.
6108To free up this additional data a shrink function is provided.
6109
6110\index{der\_sequence\_shrink()}
6111\begin{verbatim}
6112void der_sequence_shrink(ltc_asn1_list *in);
6113\end{verbatim}
6114
6115This will free all the plain constructed data, but keep the decoded list intact.
6116
6117\subsubsection{Free'ing a Flexi List}
6118To free the list use the following function.
6119
6120\index{der\_sequence\_free()}
6121\begin{verbatim}
6122void der_sequence_free(ltc_asn1_list *in);
6123\end{verbatim}
6124
6125This will free all of the memory allocated by der\_decode\_sequence\_flexi().
6126
6127\mysection{Password Based Cryptography}
6128\subsection{PKCS \#5}
6129\index{PKCS \#5}
6130In order to securely handle user passwords for the purposes of creating session keys and chaining IVs the PKCS \#5 was drafted.   PKCS \#5
6131is made up of two algorithms, Algorithm One and Algorithm Two.  Algorithm One is the older fairly limited algorithm which has been implemented
6132for completeness.  Algorithm Two is a bit more modern and more flexible to work with.
6133
6134The OpenSSL project implemented an extension to Algorithm One that allows for arbitrary keylengths; we have a compatible implementation described below.
6135
6136\subsection{Algorithm One}
6137Algorithm One accepts as input a password, an 8--byte salt, and an iteration counter.  The iteration counter is meant to act as delay for
6138people trying to brute force guess the password.  The higher the iteration counter the longer the delay.  This algorithm also requires a hash
6139algorithm and produces an output no longer than the output of the hash.
6140
6141\index{pkcs\_5\_alg1()}
6142\begin{alltt}
6143int pkcs_5_alg1(const unsigned char *password,
6144                      unsigned long  password_len,
6145                const unsigned char *salt,
6146                                int  iteration_count,
6147                                int  hash_idx,
6148                      unsigned char *out,
6149                      unsigned long *outlen)
6150\end{alltt}
6151Where \textit{password} is the user's password.  Since the algorithm allows binary passwords you must also specify the length in \textit{password\_len}.
6152The \textit{salt} is a fixed size 8--byte array which should be random for each user and session.  The \textit{iteration\_count} is the delay desired
6153on the password.  The \textit{hash\_idx} is the index of the hash you wish to use in the descriptor table.
6154
6155The output of length up to \textit{outlen} is stored in \textit{out}.  If \textit{outlen} is initially larger than the size of the hash functions output
6156it is set to the number of bytes stored.  If it is smaller than not all of the hash output is stored in \textit{out}.
6157
6158\index{pkcs\_5\_alg1\_openssl()}
6159\begin{alltt}
6160int pkcs_5_alg1_openssl(const unsigned char *password,
6161                      unsigned long  password_len,
6162                const unsigned char *salt,
6163                                int  iteration_count,
6164                                int  hash_idx,
6165                      unsigned char *out,
6166                      unsigned long *outlen)
6167\end{alltt}
6168As above, but we generate as many bytes as requested in outlen per the OpenSSL extension to Algorithm One.  If you are trying to be compatible with OpenSSL's EVP\_BytesToKey() or the "openssl enc" command line (or variants such as perl's Crypt::CBC), then use this function with MD5 as your hash (ick!) and iteration\_count=1 (double-ick!!).
6169\subsection{Algorithm Two}
6170
6171Algorithm Two is the recommended algorithm for this task.  It allows variable length salts, and can produce outputs larger than the
6172hash functions output.  As such, it can easily be used to derive session keys for ciphers and MACs as well initialization vectors as required
6173from a single password and invocation of this algorithm.
6174
6175\index{pkcs\_5\_alg2()}
6176\begin{alltt}
6177int pkcs_5_alg2(const unsigned char *password,
6178                      unsigned long  password_len,
6179                const unsigned char *salt,
6180                      unsigned long  salt_len,
6181                                int  iteration_count,
6182                                int  hash_idx,
6183                      unsigned char *out,
6184                      unsigned long *outlen)
6185\end{alltt}
6186Where \textit{password} is the users password.  Since the algorithm allows binary passwords you must also specify the length in \textit{password\_len}.
6187The \textit{salt} is an array of size \textit{salt\_len}.  It should be random for each user and session.  The \textit{iteration\_count} is the delay desired
6188on the password.  The \textit{hash\_idx} is the index of the hash you wish to use in the descriptor table.   The output of length up to
6189\textit{outlen} is stored in \textit{out}.
6190
6191\begin{verbatim}
6192/* demo to show how to make session state material
6193 * from a password */
6194#include <tomcrypt.h>
6195int main(void)
6196{
6197    unsigned char password[100], salt[100],
6198                  cipher_key[16], cipher_iv[16],
6199                  mac_key[16], outbuf[48];
6200    int           err, hash_idx;
6201    unsigned long outlen, password_len, salt_len;
6202
6203    /* register hash and get it's idx .... */
6204
6205    /* get users password and make up a salt ... */
6206
6207    /* create the material (100 iterations in algorithm) */
6208    outlen = sizeof(outbuf);
6209    if ((err = pkcs_5_alg2(password, password_len, salt,
6210                           salt_len, 100, hash_idx, outbuf,
6211                           &outlen))
6212       != CRYPT_OK) {
6213       /* error handle */
6214    }
6215
6216    /* now extract it */
6217    memcpy(cipher_key, outbuf, 16);
6218    memcpy(cipher_iv,  outbuf+16, 16);
6219    memcpy(mac_key,    outbuf+32, 16);
6220
6221    /* use material (recall to store the salt in the output) */
6222}
6223\end{verbatim}
6224
6225\mysection{Key Derviation Functions}
6226\subsection{HKDF}
6227\index{HKDF}
6228A key derivation function (KDF) is a basic and essential component of cryptographic systems.  Its goal is to take some source of initial
6229keying material and derive from it one or more cryptographically strong secret keys.
6230
6231HKDF follows the "extract-then-expand" paradigm, where the KDF logically consists of two modules.  The first stage takes the input
6232keying material and "extracts" from it a fixed-length pseudorandom key K.  The second stage "expands" the key K into several additional
6233pseudorandom keys (the output of the KDF).
6234
6235In many applications, the input keying material is not necessarily distributed uniformly, and the attacker may have some partial
6236knowledge about it (for example, a Diffie-Hellman value computed by a key exchange protocol) or even partial control of it (as in some
6237entropy-gathering applications).  Thus, the goal of the "extract" stage is to "concentrate" the possibly dispersed entropy of the input
6238keying material into a short, but cryptographically strong, pseudorandom key.  In some applications, the input may already be a
6239good pseudorandom key; in these cases, the "extract" stage is not necessary, and the "expand" part can be used alone.
6240
6241The second stage "expands" the pseudorandom key to the desired length; the number and lengths of the output keys depend on the
6242specific cryptographic algorithms for which the keys are needed.
6243
6244\subsection{HKDF Extract}
6245To perform the extraction phase, use the following function:
6246
6247\index{hkdf\_extract()}
6248\begin{alltt}
6249int hkdf_extract(   int  hash_idx,
6250    const unsigned char *salt,
6251          unsigned long  saltlen,
6252    const unsigned char *in,
6253          unsigned long  inlen,
6254          unsigned char *out,
6255          unsigned long *outlen);
6256\end{alltt}
6257The \textit{hash\_idx} parameter is the index into the descriptor table of the hash you want to use.
6258The \textit{salt} parameter is a pointer to the array of octets of length \textit{saltlen} containing the salt or a NULL pointer if a salt is not being used (in that case set saltlen to 0).
6259\textit{in} is a pointer to an array of octets of length \textit{inlen} containing the source entropy.  The extracted output is stored in the location pointed to by \textit{out}.
6260You must set \textit{outlen} to the size of the destination buffer before calling this function. It is updated to the length of the extracted output. If \textit{outlen} is too small the extracted output will be truncated.
6261
6262While the salt is optional, using one improves HKDF's security. If used, the salt should be randomly chosen, but does not need to be secret and may be re-used. Please see RFC5869 section 3.1 for more details.
6263
6264\subsection{HKDF Expand}
6265To perform the expansion phase, use the following function:
6266
6267\index{hkdf\_expand()}
6268\begin{alltt}
6269int hkdf_expand(    int  hash_idx,
6270    const unsigned char *info,
6271          unsigned long  infolen,
6272    const unsigned char *in,
6273          unsigned long  inlen,
6274          unsigned char *out,
6275          unsigned long  outlen);
6276\end{alltt}
6277
6278The \textit{hash\_idx} parameter is the index into the descriptor table of the hash you want to use.
6279The \textit{info} parameter, an array of octets of length \textit{infolen}, is an optional parameter (set \textit{info} to NULL and \textit{infolen} to 0 if not using it) which
6280may be used to bind the derived keys to some application and context specific information. This prevents the same keying material from being generated in different contexts. Please see RFC5869 section 3.2 for more information.
6281The extracted keying material is passed as octet array \textit{in} of length \textit{inlen}.  Expanded output of length \textit{outlen} is generated and stored in octet arrat \textit{out}.
6282
6283\subsection{HKDF Extract-and-Expand}
6284To perform both phases together, use the following function:
6285
6286\index{hkdf()}
6287\begin{alltt}
6288int hkdf(           int  hash_idx,
6289    const unsigned char *salt,
6290          unsigned long  saltlen,
6291    const unsigned char *info,
6292          unsigned long  infolen,
6293    const unsigned char *in,
6294          unsigned long  inlen,
6295          unsigned char *out,
6296          unsigned long  outlen);
6297\end{alltt}
6298
6299Parameters are as in \textit{hkdf\_extract()} and \textit{hkdf\_expand()}.
6300
6301\chapter{Miscellaneous}
6302\mysection{Base64 Encoding and Decoding}
6303The library provides functions to encode and decode a RFC 4648 Base64 coding scheme.
6304
6305\subsection{Standard 'base64' encoding}
6306The characters used in the mappings are:
6307\begin{verbatim}
6308ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
6309\end{verbatim}
6310Those characters are supported in the 7-bit ASCII map, which means they can be used for transport over
6311common e-mail, usenet and HTTP mediums.  The format of an encoded stream is just a literal sequence of ASCII characters
6312where a group of four represent 24-bits of input.  The first four chars of the encoders output is the length of the
6313original input.  After the first four characters is the rest of the message.
6314
6315Often, it is desirable to line wrap the output to fit nicely in an e-mail or usenet posting.  The decoder allows you to
6316put any character (that is not in the above sequence) in between any character of the encoders output.  You may not however,
6317break up the first four characters.
6318
6319To encode a binary string in base64 call:
6320\index{base64\_encode()}
6321\begin{verbatim}
6322int base64_encode(const unsigned char *in,
6323                        unsigned long  len,
6324                        unsigned char *out,
6325                        unsigned long *outlen);
6326\end{verbatim}
6327Where \textit{in} is the binary string and \textit{out} is where the ASCII output is placed.  You must set the value of \textit{outlen} prior
6328to calling this function and it sets the length of the base64 output in \textit{outlen} when it is done.  To decode a base64
6329string call:
6330\index{base64\_decode()}
6331\begin{verbatim}
6332int base64_decode(const unsigned char *in,
6333                        unsigned long  len,
6334                        unsigned char *out,
6335                        unsigned long *outlen);
6336\end{verbatim}
6337
6338The function \textit{base64\_decode} works in a relaxed way which allows decoding some inputs that do not strictly follow the standard.
6339If you want to be strict during decoding you can use:
6340\index{base64\_strict\_decode()}
6341\begin{verbatim}
6342int base64_strict_decode(const unsigned char *in,
6343                               unsigned long  len,
6344                               unsigned char *out,
6345                               unsigned long *outlen);
6346\end{verbatim}
6347
6348\subsection{URL--safe 'base64url' encoding}
6349The characters used in the mappings are:
6350\begin{verbatim}
6351ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_
6352\end{verbatim}
6353Those characters are sometimes also called URL and filename safe alphabet.
6354The interface is analogous to \textit{base64\_xxxx} functions in previous chapter.
6355
6356\begin{verbatim}
6357int base64url_encode(const unsigned char *in,  unsigned long len,
6358                           unsigned char *out, unsigned long *outlen);
6359
6360int base64url_strict_encode(const unsigned char *in,  unsigned long inlen,
6361                                  unsigned char *out, unsigned long *outlen);
6362
6363int base64url_decode(const unsigned char *in,  unsigned long len,
6364                           unsigned char *out, unsigned long *outlen);
6365
6366int base64url_strict_decode(const unsigned char *in,  unsigned long len,
6367                                  unsigned char *out, unsigned long *outlen);
6368\end{verbatim}
6369
6370\mysection{Primality Testing}
6371\index{Primality Testing}
6372The library includes primality testing and random prime functions as well.  The primality tester will perform the test in
6373two phases.  First it will perform trial division by the first few primes.  Second it will perform \textit{LTC\_MILLER\_RABIN\_REPS} (pre-defined to $35$) rounds of the
6374Rabin-Miller primality testing algorithm.  If the candidate passes both phases it is declared prime otherwise it is declared
6375composite.  No prime number will fail the two phases but composites can.  Each round of the Rabin-Miller algorithm reduces
6376the probability of a pseudo-prime by $1 \over 4$ therefore after sixteen rounds the probability is no more than
6377$\left ( { 1 \over 4 } \right )^{8} = 2^{-16}$.  In practice the probability of error is in fact much lower than that.
6378
6379When making random primes the trial division step is in fact an optimized implementation of \textit{Implementation of Fast RSA Key Generation on Smart Cards}\footnote{Chenghuai Lu, Andre L. M. dos Santos and Francisco R. Pimentel}.
6380In essence a table of machine-word sized residues are kept of a candidate modulo a set of primes.  When the candidate
6381is rejected and ultimately incremented to test the next number the residues are updated without using multi-word precision
6382math operations.  As a result the routine can scan ahead to the next number required for testing with very little work
6383involved.
6384
6385In the event that a composite did make it through it would most likely cause the the algorithm trying to use it to fail.  For
6386instance, in RSA two primes $p$ and $q$ are required.  The order of the multiplicative sub-group (modulo $pq$) is given
6387as $\phi(pq)$ or $(p - 1)(q - 1)$.  The decryption exponent $d$ is found as $de \equiv 1\mbox{ }(\mbox{mod } \phi(pq))$.  If either $p$ or $q$ is composite the value of $d$ will be incorrect and the user
6388will not be able to sign or decrypt messages at all.  Suppose $p$ was prime and $q$ was composite this is just a variation of
6389the multi-prime RSA.  Suppose $q = rs$ for two primes $r$ and $s$ then $\phi(pq) = (p - 1)(r - 1)(s - 1)$ which clearly is
6390not equal to $(p - 1)(rs - 1)$.
6391
6392These are not technically part of the LibTomMath library but this is the best place to document them.
6393To test if a \textit{mp\_int} is prime call:
6394\begin{verbatim}
6395int is_prime(mp_int *N, int *result);
6396\end{verbatim}
6397This puts a one in \textit{result} if the number is probably prime, otherwise it places a zero in it.  It is assumed that if
6398it returns an error that the value in \textit{result} is undefined.  To make
6399a random prime call:
6400\begin{verbatim}
6401int rand_prime(       mp_int *N,
6402               unsigned long len,
6403                  prng_state *prng,
6404                         int  wprng);
6405\end{verbatim}
6406Where \textit{len} is the size of the prime in bytes ($2 \le len \le 256$).  You can set \textit{len} to the negative size you want
6407to get a prime of the form $p \equiv 3\mbox{ }(\mbox{mod } 4)$.  So if you want a 1024-bit prime of this sort pass
6408\textit{len = -128} to the function.  Upon success it will return {\bf CRYPT\_OK} and \textit{N} will contain an integer which
6409is very likely prime.
6410
6411\mysection{Random MPI Generation}
6412\index{Random MPI Generation}
6413
6414Several Public Key Cryptography algorithms require random MPI's for operations like signature generation.
6415The library provides two API functions to generate random MPI's which allow the utilisation of a user-defined PRNG to aquire the random data.
6416
6417\index{rand\_bn\_bits()}
6418\begin{verbatim}
6419int rand_bn_bits(       void *N,
6420                         int bits,
6421                  prng_state *prng,
6422                         int wprng);
6423\end{verbatim}
6424
6425This sets \textit{N} to a \textit{bits}-long random MPI.
6426
6427\index{rand\_bn\_upto()}
6428\begin{verbatim}
6429int rand_bn_upto(       void *N,
6430                        void *limit,
6431                  prng_state *prng,
6432                         int wprng);
6433\end{verbatim}
6434
6435This ensures that \textit{N} is set to a random MPI in the range $1 \le N < limit$.
6436
6437
6438\mysection{Helper functions}
6439
6440\subsection{Zero'ing data}
6441
6442As widely know optimizing-compilers are sometimes allowed to remove an invocation of \textit{memset(out, 0, outlen)}, which could result
6443in sensitive data beeing not zero'ed out. Therefore LibTomCrypt implements a variant of this routine which won't be optimized-away.
6444
6445\index{zeromem()}
6446\begin{verbatim}
6447void zeromem(volatile void *out, size_t outlen);
6448\end{verbatim}
6449
6450This zero's the buffer \textit{out} of size \textit{outlen}.
6451
6452\subsection{Constant-time memory compare}
6453
6454Some symmetric-key cryptographic operation-modes are vulnerable to timing attacks in case non-contant-time memory comparison functions
6455are used to compare results. Therefore LibTomCrypt implements a constant-time memory compare function.
6456
6457\index{mem\_neq()}
6458\begin{verbatim}
6459int mem_neq(const void *a, const void *b, size_t len);
6460\end{verbatim}
6461
6462This will compare the buffer \textit{a} against the buffer \textit{b} for \textit{len} bytes.
6463The return value is either \textit{0} when the content of \textit{a} and \textit{b} is equal or \textit{1} when it differs.
6464
6465\subsection{Radix to binary conversion}
6466
6467All public-key cryptographic algorithms provide a way to import and/or export their key parameters in binary format.
6468In order to be able to import keys stored in different formats, e.g. hexadecimal strings, the \textit{radix\_to\_bin()} function is provided.
6469
6470\index{radix\_to\_bin()}
6471\begin{verbatim}
6472int radix_to_bin(const void *in, int radix, void *out, unsigned long *len);
6473\end{verbatim}
6474
6475This will convert the MPI \textit{in} of radix \textit{radix} to the buffer pointed to by \textit{out}.
6476The field \textit{len} is a pointer to the length of the buffer on input and the length stored on output.
6477
6478In case you don't know the length of the buffer you can use \textit{radix\_to\_bin()} to determine the length for you.
6479
6480\begin{verbatim}
6481#include <tomcrypt.h>
6482
6483int main(void)
6484{
6485   const char *mpi = "AABBCCDD";
6486   unsigned long l = 0;
6487   void* buf;
6488   int ret;
6489   ltc_mp = ltm_desc;
6490
6491   if (radix_to_bin(mpi, 16, NULL, &l) != CRYPT_BUFFER_OVERFLOW)
6492      return EXIT_FAILURE;
6493   buf = malloc(l);
6494
6495   ret = EXIT_SUCCESS;
6496   if (radix_to_bin(mpi, 16, buf, &l) != CRYPT_OK)
6497      ret = EXIT_FAILURE;
6498
6499   free(buf);
6500   return ret;
6501}
6502\end{verbatim}
6503
6504
6505\mysection{Dynamic Language Support}
6506\index{Dynamic Language Support}
6507Various LibTomCrypt functions require that their callers define a struct
6508(or a union) and provide a pointer to it, or allocate sufficient memory and
6509provide its pointer.  Programs written in C or C++ can obtain the necessary
6510information by simply including the appropriate header files, but dynamic
6511languages like Python don't understand C header files, and without assistance,
6512have no way to know how much memory to allocate.  A similar story can be told
6513for certain LTC constant values.
6514
6515LTC's Dynamic Language Support provides functions that return the size of
6516a named struct or union, the value of a named constant, a list of all sizes
6517supported, and a list of all named constants supported.  Two additional
6518functions can initialize LTM and TFM.
6519
6520To get the size of a named struct or union:
6521\begin{verbatim}
6522int crypt_get_size(  const char *namein,
6523                   unsigned int *sizeout);
6524\end{verbatim}
6525$namein$ is spelled exactly as found in the C header files.  This function will
6526return -1 if $namein$ is not found.
6527
6528To get the value of a named constant:
6529\begin{verbatim}
6530int crypt_get_constant(const char *namein,
6531                              int *valueout);
6532\end{verbatim}
6533$namein$ is spelled exactly as found in the C header files.  Again, -1 is
6534returned if $namein$ is not found.
6535
6536To get the names of all the supported structs, unions and constants:
6537\begin{verbatim}
6538int crypt_list_all_sizes(        char *names_list,
6539                         unsigned int *names_list_size);
6540
6541int crypt_list_all_constants(        char *names_list,
6542                             unsigned int *names_list_size);
6543\end{verbatim}
6544You may want to call these functions twice, first to get the amount
6545of memory to be allocated for the $names_list$, and a final time to
6546actually populate $names_list$.  If $names_list$ is NULL,
6547$names_list_size$ will be the minimum size needed to receive the
6548complete $names_list$.  If $names_list$ is NOT NULL, $names_list$ must
6549be a pointer to sufficient memory into which the $names_list$ will be
6550written.  Also, the value in $names_list_size$ sets the upper bound of
6551the number of characters to be written.  A -1 return value signifies
6552insufficient space.
6553
6554The format of the $names_list$ string is a series of $name,value$ pairs
6555where each name and value is separated by a comma, the pairs are separated
6556by newlines, and the list is null terminated.
6557
6558Calling either of these functions will initialize the respective
6559math library.
6560\begin{verbatim}
6561void init_LTM(void);
6562void init_TFM(void);
6563void init_GMP(void);
6564\end{verbatim}
6565
6566Here is a Python program demonstrating how to call various LTC dynamic
6567language support functions.
6568\begin{verbatim}
6569from ctypes import *
6570
6571# load the OSX shared/dynamic library
6572LIB = CDLL('libtomcrypt.dylib')
6573
6574# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
6575# print info about this library
6576
6577little = c_int()        # assume False is big
6578word32 = c_int()        # assume False is 64-bit
6579
6580LIB.crypt_get_constant('ENDIAN_LITTLE', byref(little))
6581LIB.crypt_get_constant('ENDIAN_32BITWORD', byref(word32))
6582
6583print('this lib was compiled for a %s endian %d-bit processor'
6584      % ('little' if little else 'big', 32 if word32 else 64))
6585
6586# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
6587# print the size of the struct named "sha256_state"
6588
6589struct_size = c_int()
6590
6591# don't forget to add the '_struct' or '_union' suffix
6592LIB.crypt_get_size('sha256_state_struct', byref(struct_size))
6593
6594print('allocate %d bytes for sha256_state' % struct_size.value)
6595
6596# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
6597# print a list of all supported named constants
6598
6599list_size = c_int()
6600
6601# call with NULL to calc the min size needed for the list
6602LIB.crypt_list_all_constants(None, byref(list_size))
6603
6604# allocate required space
6605names_list = c_buffer(list_size.value)
6606
6607# call again providing a pointer to where to write the list
6608LIB.crypt_list_all_constants(names_list, byref(list_size))
6609
6610print(names_list.value)
6611
6612# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
6613# print a list of all supported named structs and unions
6614
6615list_size = c_int()
6616
6617# call with NULL to calc the min size needed for the list
6618LIB.crypt_list_all_sizes(None, byref(list_size))
6619
6620# allocate required space
6621names_list = c_buffer(list_size.value)
6622
6623# call again providing a pointer to where to write the list
6624LIB.crypt_list_all_sizes(names_list, byref(list_size))
6625
6626print(names_list.value)
6627\end{verbatim}
6628
6629
6630\chapter{Programming Guidelines}
6631
6632\mysection{Secure Pseudo Random Number Generators}
6633Probably the single most vulnerable point of any cryptosystem is the PRNG.  Without one, generating and protecting secrets
6634would be impossible.  The requirement that one be setup correctly is vitally important, and to address this point the library
6635does provide two RNG sources that will address the largest amount of end users as possible.  The \textit{sprng} PRNG provides an easy to
6636access source of entropy for any application on a UNIX (and the like) or Windows computer.
6637
6638However, when the end user is not on one of these platforms, the application developer must address the issue of finding
6639entropy.  This manual is not designed to be a text on cryptography.  I would just like to highlight that when you design
6640a cryptosystem make sure the first problem you solve is getting a fresh source of entropy.
6641
6642\mysection{Preventing Trivial Errors}
6643Two simple ways to prevent trivial errors is to prevent overflows, and to check the return values.  All of the functions
6644which output variable length strings will require you to pass the length of the destination.  If the size of your output
6645buffer is smaller than the output it will report an error.  Therefore, make sure the size you pass is correct!
6646
6647Also, virtually all of the functions return an error code or {\bf CRYPT\_OK}.  You should detect all errors, as simple
6648typos can cause algorithms to fail to work as desired.
6649
6650\mysection{Registering Your Algorithms}
6651To avoid linking and other run--time errors it is important to register the ciphers, hashes and PRNGs you intend to use
6652before you try to use them.  This includes any function which would use an algorithm indirectly through a descriptor table.
6653
6654A neat bonus to the registry system is that you can add external algorithms that are not part of the library without
6655having to hack the library.  For example, suppose you have a hardware specific PRNG on your system.  You could easily
6656write the few functions required plus a descriptor.  After registering your PRNG, all of the library functions that
6657need a PRNG can instantly take advantage of it.  The same applies for ciphers, hashes, and bignum math routines.
6658
6659\mysection{Key Sizes}
6660
6661\subsection{Symmetric Ciphers}
6662For symmetric ciphers, use as large as of a key as possible.  For the most part \textit{bits are cheap} so using a 256--bit key
6663is not a hard thing to do.  As a good rule of thumb do not use a key smaller than 128 bits.
6664
6665\subsection{Asymmetric Ciphers}
6666The following chart gives the work factor for solving a DH/RSA public key using the NFS.  The work factor for a key of order
6667$n$ is estimated to be
6668\begin{equation}
6669e^{1.923 \cdot ln(n)^{1 \over 3} \cdot ln(ln(n))^{2 \over 3}}
6670\end{equation}
6671
6672Note that $n$ is not the bit-length but the magnitude.  For example, for a 1024-bit key $n = 2^{1024}$.  The work required
6673is:
6674\begin{figure}[H]
6675\begin{center}
6676\begin{tabular}{|c|c|}
6677    \hline RSA/DH Key Size (bits) & Work Factor ($log_2$) \\
6678    \hline 512 & 63.92 \\
6679    \hline 768 & 76.50 \\
6680    \hline 1024 & 86.76 \\
6681    \hline 1536 & 103.37 \\
6682    \hline 2048 & 116.88 \\
6683    \hline 2560 & 128.47 \\
6684    \hline 3072 & 138.73 \\
6685    \hline 4096 & 156.49 \\
6686    \hline
6687\end{tabular}
6688\end{center}
6689\caption{RSA/DH Key Strength}
6690\end{figure}
6691
6692The work factor for ECC keys is much higher since the best attack is still fully exponential.  Given a key of magnitude
6693$n$ it requires $\sqrt n$ work.  The following table summarizes the work required:
6694\begin{figure}[H]
6695\begin{center}
6696\begin{tabular}{|c|c|}
6697    \hline ECC Key Size (bits) & Work Factor ($log_2$) \\
6698    \hline 112 & 56 \\
6699    \hline 128 & 64 \\
6700    \hline 160 & 80 \\
6701    \hline 192 & 96  \\
6702    \hline 224 & 112 \\
6703    \hline 256 & 128 \\
6704    \hline 384 & 192 \\
6705    \hline 521 & 260.5 \\
6706    \hline
6707\end{tabular}
6708\end{center}
6709\caption{ECC Key Strength}
6710\end{figure}
6711
6712Using the above tables the following suggestions for key sizes seems appropriate:
6713\begin{center}
6714\begin{tabular}{|c|c|c|}
6715    \hline Security Goal & RSA/DH Key Size (bits) & ECC Key Size (bits) \\
6716    \hline Near term   & 1024 & 160 \\
6717    \hline Short term  & 1536 & 192 \\
6718    \hline Long Term   & 2560 & 384 \\
6719    \hline
6720\end{tabular}
6721\end{center}
6722
6723\mysection{Thread Safety}
6724The library is not fully thread safe but several simple precautions can be taken to avoid any problems.  The registry functions
6725such as register\_cipher() are not thread safe no matter what you do.  It is best to call them from your programs initialization
6726code before threads are initiated.
6727
6728The rest of the code uses state variables you must pass it such as hash\_state, hmac\_state, etc.  This means that if each
6729thread has its own state variables then they will not affect each other, and are fully thread safe.  This is fairly simple with symmetric ciphers
6730and hashes.
6731
6732\index{LTC\_PTHREAD}
6733The only sticky issue is a shared PRNG which can be alleviated with the careful use of mutex devices.  Defining LTC\_PTHREAD for instance, enables
6734pthreads based mutex locking in various routines such as the Yarrow and Fortuna PRNGs, the fixed point ECC multiplier, and other routines.
6735
6736\chapter{Configuring and Building the Library}
6737\mysection{Introduction}
6738The library is fairly flexible about how it can be built, used, and generally distributed.  Additions are being made with
6739each new release that will make the library even more flexible.  Each of the classes of functions can be disabled during
6740the build process to make a smaller library.  This is particularly useful for shared libraries.
6741
6742As of v1.06 of the library, the build process has been moved to two steps for the typical LibTomCrypt application.  This is because
6743LibTomCrypt no longer provides a math API on its own and relies on third party libraries (such as LibTomMath, GnuMP, or TomsFastMath).
6744
6745The build process now consists of installing a math library first, and then building and installing LibTomCrypt with a math library
6746configured.  Note that LibTomCrypt can be built with no internal math descriptors.  This means that one must be provided at either
6747build, or run time for the application.  LibTomCrypt comes with three math descriptors that provide a standard interface to math
6748libraries.
6749
6750\mysection{Makefile variables}
6751
6752All GNU driven makefiles (including the makefile for ICC) use a set of common variables to control the build and install process.  Most of the
6753settings can be overwritten from the command line which makes custom installation a breeze.
6754
6755\subsection{MAKE, CC, AR and CROSS\_COMPILE}
6756\index{MAKE} \index{CC} \index{AR} \index{CROSS\_COMPILE}
6757The MAKE, CC and AR flags can all be overwritten.  They default to \textit{make}, \textit{\$CC} and \textit{\$AR} respectively.
6758Changing MAKE allows you to change what program will be invoked to handle sub--directories. For example, this
6759
6760\begin{verbatim}
6761gmake install MAKE=gmake
6762\end{verbatim}
6763
6764\begin{flushleft} will build and install the libraries with the \textit{gmake} tool.  Similarly, \end{flushleft}
6765
6766\begin{verbatim}
6767make CC=arm-gcc AR=arm-ar
6768\end{verbatim}
6769
6770\begin{flushleft} will build the library using \textit{arm--gcc} as the compiler and \textit{arm--ar} as the archiver. \end{flushleft}
6771
6772\begin{verbatim}
6773make CROSS_COMPILE=arm-none-eabi-
6774\end{verbatim}
6775
6776\begin{flushleft} will build the library using the \textit{arm--none--eabi--} prefix'ed toolchain. \end{flushleft}
6777
6778\subsection{IGNORE\_SPEED and LTC\_DEBUG}
6779\index{IGNORE\_SPEED} \index{LTC\_DEBUG}
6780When \textbf{IGNORE\_SPEED} has been defined the default optimization flags for CFLAGS will be disabled which allows the developer to specify new
6781CFLAGS on the command line.  E.g. to add debugging
6782
6783\begin{verbatim}
6784make IGNORE_SPEED=1 CFLAGS="-g3"
6785\end{verbatim}
6786
6787This will turn off optimizations and add \textit{-g3} to the CFLAGS which enables debugging.
6788
6789Alternatively one can define \textbf{LTC\_DEBUG} instead, which additionally defines \textit{LTC\_NO\_ASM} and enables debug output on test failures.
6790
6791Defining \textit{LTC\_DEBUG=2} has the effect to enable verbose output in some of the tests.
6792
6793\begin{verbatim}
6794make LTC_DEBUG=2
6795\end{verbatim}
6796
6797\begin{flushleft} will build the library without compiler-optimisation or architecture specific code and will enable debugging
6798and verbose debug output. \end{flushleft}
6799
6800\subsection{LIBNAME}
6801\index{LIBNAME}
6802\textbf{LIBNAME} is the name of the output library (archive) to create.  It defaults to \textit{libtomcrypt.a} for static builds and \textit{libtomcrypt.la} for
6803shared.
6804On installation of the shared library the appropriately versioned \textit{libtomcrypt.so}, \textit{libtomcrypt.so.0} etc. will be created by \textit{libtool}.
6805
6806\subsection{Installation Directories}
6807\index{DESTDIR} \index{PREFIX} \index{LIBPATH} \index{INCPATH} \index{DATAPATH} \index{BINPATH}
6808\textbf{DESTDIR} is the location where the output will be stored.  It default to an empty string.
6809\textbf{PREFIX} is the prefix for the installation directories.  It defaults to \textit{/usr/local}.
6810\textbf{LIBPATH} is the location of the library directory which defaults to \textit{\$PREFIX/lib}.
6811\textbf{INCPATH} is the location of the header file directory which defaults to \textit{\$PREFIX/include}.
6812\textbf{DATAPATH} is the location of the data (documentation) directory which defaults to \textit{\$PREFIX/share/doc/libtomcrypt/pdf}.
6813\textbf{BINPATH} is the location of the binary file directory which defaults to \textit{\$PREFIX/bin}.
6814
6815They allow to configure the installation locations of the libary.
6816
6817\begin{verbatim}
6818make PREFIX=/home/tom/project DATAPATH=/home/tom/project/docs install
6819\end{verbatim}
6820
6821This will build the library and install it to the directories under \textit{/home/tom/project/}.  e.g.
6822
6823\begin{small}
6824\begin{verbatim}
6825/home/tom/project/:
6826total 1
6827drwxr-xr-x  2 tom users  80 Jul 30 16:02 docs
6828drwxr-xr-x  2 tom users 528 Jul 30 16:02 include
6829drwxr-xr-x  2 tom users  80 Jul 30 16:02 lib
6830
6831/home/tom/project/docs:
6832total 452
6833-rwxr-xr-x  1 tom users 459009 Jul 30 16:02 crypt.pdf
6834
6835/home/tom/project/include:
6836total 132
6837-rwxr-xr-x  1 tom users  2482 Jul 30 16:02 tomcrypt.h
6838-rwxr-xr-x  1 tom users   702 Jul 30 16:02 tomcrypt_argchk.h
6839-rwxr-xr-x  1 tom users  2945 Jul 30 16:02 tomcrypt_cfg.h
6840-rwxr-xr-x  1 tom users 22763 Jul 30 16:02 tomcrypt_cipher.h
6841-rwxr-xr-x  1 tom users  5174 Jul 30 16:02 tomcrypt_custom.h
6842-rwxr-xr-x  1 tom users 11314 Jul 30 16:02 tomcrypt_hash.h
6843-rwxr-xr-x  1 tom users 11571 Jul 30 16:02 tomcrypt_mac.h
6844-rwxr-xr-x  1 tom users 13614 Jul 30 16:02 tomcrypt_macros.h
6845-rwxr-xr-x  1 tom users 14714 Jul 30 16:02 tomcrypt_math.h
6846-rwxr-xr-x  1 tom users   632 Jul 30 16:02 tomcrypt_misc.h
6847-rwxr-xr-x  1 tom users 10934 Jul 30 16:02 tomcrypt_pk.h
6848-rwxr-xr-x  1 tom users  2634 Jul 30 16:02 tomcrypt_pkcs.h
6849-rwxr-xr-x  1 tom users  7067 Jul 30 16:02 tomcrypt_prng.h
6850-rwxr-xr-x  1 tom users  1467 Jul 30 16:02 tomcrypt_test.h
6851
6852/home/tom/project/lib:
6853total 1073
6854-rwxr-xr-x  1 tom users 1096284 Jul 30 16:02 libtomcrypt.a
6855\end{verbatim}
6856\end{small}
6857
6858For further information see: \url{https://www.gnu.org/prep/standards/html_node/DESTDIR.html}
6859and \url{https://www.freebsd.org/doc/en/books/porters-handbook/porting-prefix.html}.
6860
6861\mysection{Extra libraries}
6862\index{EXTRALIBS}
6863\textbf{EXTRALIBS} specifies any extra libraries required to link the test programs and shared libraries.  They are specified in the notation
6864that GCC expects for global archives.
6865
6866\begin{verbatim}
6867make install test timing CFLAGS="-DTFM_DESC -DUSE_TFM" EXTRALIBS=-ltfm
6868\end{verbatim}
6869
6870This will install the library using the TomsFastMath library and link the \textit{libtfm.a} library out of the default library search path.  The two
6871defines are explained below.  You can specify multiple archives (say if you want to support two math libraries, or add on additional code) to
6872the \textbf{EXTRALIBS} variable by separating them by a space.
6873
6874Note that \textbf{EXTRALIBS} is not required if you are only making and installing the static library but none of the test programs.
6875
6876\mysection{Building a Static Library}
6877
6878Building a static library is fairly trivial as it only requires one invocation of the GNU make command.
6879
6880\begin{verbatim}
6881make install CFLAGS="-DTFM_DESC"
6882\end{verbatim}
6883
6884That will build LibTomCrypt (including the TomsFastMath descriptor), and install it in the default locations indicated previously.  You can enable
6885the built--in LibTomMath descriptor as well (or in place of the TomsFastMath descriptor).  Similarly, you can build the library with no built--in
6886math descriptors.
6887
6888\begin{verbatim}
6889make install
6890\end{verbatim}
6891
6892In this case, no math descriptors are present in the library and they will have to be made available at build or run time before you can use any of the
6893public key functions.
6894
6895Note that even if you include the built--in descriptors you must link against the source library as well.
6896
6897\begin{verbatim}
6898gcc -DTFM_DESC myprogram.c -ltomcrypt -ltfm -o myprogram
6899\end{verbatim}
6900
6901This will compile \textit{myprogram} and link it against the LibTomCrypt library as well as TomsFastMath (which must have been previously installed).  Note that
6902we define \textbf{TFM\_DESC} for compilation.  This is so that the TFM descriptor symbol will be defined for the client application to make use of without
6903giving warnings.
6904
6905\mysection{Building a Shared Library}
6906
6907LibTomCrypt can also be built as a shared library through the \textit{makefile.shared} make script.  It is similar to use as the static script except
6908that you \textbf{must} specify the \textbf{EXTRALIBS} variable at install time.
6909
6910\begin{verbatim}
6911make -f makefile.shared install CFLAGS="-DTFM_DESC" EXTRALIBS=-ltfm
6912\end{verbatim}
6913
6914This will build and install the library and link the shared object against the TomsFastMath library (which must be installed as a shared object as well).  The
6915shared build process requires libtool to be installed.
6916
6917\mysection{Header Configuration}
6918The file \textit{tomcrypt\_cfg.h} is what lets you control various high level macros which control the behaviour of the library.  Build options are also
6919stored in \textit{tomcrypt\_custom.h} which allow the enabling and disabling of various algorithms.
6920
6921\subsubsection{ARGTYPE}
6922This lets you control how the LTC\_ARGCHK macro will behave.  The macro is used to check pointers inside the functions against
6923NULL.  There are four settings for ARGTYPE.  When set to 0, it will have the default behaviour of printing a message to
6924stderr and raising a SIGABRT signal.  This is provided so all platforms that use LibTomCrypt can have an error that functions
6925similarly.  When set to 1, it will simply pass on to the assert() macro.  When set to 2, the macro will display the error to
6926stderr then return execution to the caller.  This could lead to a segmentation fault (e.g. when a pointer is \textbf{NULL}) but is useful
6927if you handle signals on your own.  When set to 3, it will resolve to a empty macro and no error checking will be performed.  Finally, when set
6928to 4, it will return CRYPT\_INVALID\_ARG to the caller.
6929
6930\subsubsection{Endianness}
6931There are five macros related to endianness issues.  For little endian platforms define, \textbf{ENDIAN\_LITTLE}.  For big endian
6932platforms define \textbf{ENDIAN\_BIG}.  Similarly when the default word size of an \textit{unsigned long} is 32-bits define \textbf{ENDIAN\_32BITWORD}
6933or define \textbf{ENDIAN\_64BITWORD} when its 64-bits.  If you do not define any of them the library will automatically use \textbf{ENDIAN\_NEUTRAL}
6934which will work on all platforms.
6935
6936Currently LibTomCrypt will detect x86-32, x86-64, MIPS R5900, SPARC and SPARC64 running GCC as well as x86-32 running MSVC.
6937
6938\mysection{Customisation}
6939There are also options you can specify from the \textit{tomcrypt\_custom.h} header file.
6940
6941\subsection{X memory routines}
6942\index{XMALLOC}\index{XREALLOC}\index{XCALLOC}\index{XFREE}\index{XMEMSET}\index{XMEMCPY}\index{XMEMMOVE}\index{XMEMCMP}\index{XSTRCMP}
6943At the top of tomcrypt\_custom.h are a series of macros denoted as XMALLOC, XCALLOC, XREALLOC, XFREE, and so on.  They resolve to
6944the name of the respective functions from the standard C library by default.  This lets you substitute in your own memory routines.
6945If you substitute in your own functions they must behave like the standard C library functions in terms of what they expect as input and
6946output.
6947
6948These macros are handy for working with platforms which do not have a standard C library.
6949For instance, the OLPC\footnote{See \url{http://dev.laptop.org/git?p=bios-crypto;a=summary}}
6950bios code uses these macros to redirect to very compact heap and string operations.
6951
6952\subsection{X clock routines}
6953The rng\_get\_bytes() function can call a function that requires the clock() function.  These macros let you override
6954the default clock() used with a replacement.  By default the standard C library clock() function is used.
6955
6956\subsection{LTC\_NO\_FILE}
6957During the build if LTC\_NO\_FILE is defined then any function in the library that uses file I/O will not call the file I/O
6958functions and instead simply return CRYPT\_NOP.  This should help resolve any linker errors stemming from a lack of
6959file I/O on embedded platforms.
6960
6961\subsection{LTC\_CLEAN\_STACK}
6962When this functions is defined the functions that store key material on the stack will clean up afterwards.
6963Assumes that you have no memory paging with the stack.
6964
6965\subsection{LTC\_TEST}
6966When this has been defined the various self--test functions (for ciphers, hashes, prngs, etc) are included in the build.  This is the default configuration.
6967If LTC\_NO\_TEST has been defined, the testing routines will be compacted and only return CRYPT\_NOP.
6968
6969\subsection{LTC\_NO\_FAST}
6970When this has been defined the library will not use faster word oriented operations.  By default, they are only enabled for platforms
6971which can be auto-detected.  This macro ensures that they are never enabled.
6972
6973\subsection{LTC\_FAST}
6974This mode (auto-detected with x86\_32, x86\_64 platforms with GCC or CLANG) configures various routines such as ctr\_encrypt() or
6975cbc\_encrypt() that it can safely XOR multiple octets in one step by using a larger data type.  This has the benefit of
6976cutting down the overhead of the respective functions.
6977
6978This mode does have one downside.  It can cause unaligned reads from memory if you are not careful with the functions.  This is why
6979it has been enabled by default only for the x86 class of processors where unaligned accesses are allowed.  Technically LTC\_FAST
6980is not \textit{portable} since unaligned accesses are not covered by the ISO C specifications.
6981
6982In practice however, you can use it on pretty much any platform (even MIPS) with care.
6983
6984By design the \textit{fast} mode functions won't get unaligned on their own.  For instance, if you call ctr\_encrypt() right after calling
6985ctr\_start() and all the inputs you gave are aligned than ctr\_encrypt() will perform aligned memory operations only.  However, if you
6986call ctr\_encrypt() with an odd amount of plaintext then call it again the CTR pad (the IV) will be partially used.  This will
6987cause the ctr routine to first use up the remaining pad bytes.  Then if there are enough plaintext bytes left it will use
6988whole word XOR operations.  These operations will be unaligned.
6989
6990The simplest precaution is to make sure you process all data in power of two blocks and handle \textit{remainder} at the end.  e.g. If you are
6991CTR'ing a long stream process it in blocks of (say) four kilobytes and handle any remaining incomplete blocks at the end of the stream.
6992
6993\index{LTC\_FAST\_TYPE}
6994If you do plan on using the \textit{LTC\_FAST} mode, a \textit{LTC\_FAST\_TYPE} type which resolves to an optimal sized
6995data type you can perform integer operations with is required.  For the auto-detected platforms this type will be defined automatically.  Ideally it should be four or eight bytes since it must properly divide the size
6996of your block cipher (e.g. 16 bytes for AES).  This means sadly if you're on a platform with 57--bit words (or something) you can't
6997use this mode.  So sad.
6998
6999\subsection{LTC\_NO\_ASM}
7000When this has been defined the library will not use any inline assembler.  Only a few platforms support assembler inlines but various versions of ICC and GCC
7001cannot handle all of the assembler functions.
7002
7003\subsection{Symmetric Ciphers, One-way Hashes, PRNGS and Public Key Functions}
7004There are a plethora of macros for the ciphers, hashes, PRNGs and public key functions which are fairly
7005self-explanatory.  When they are defined the functionality is included otherwise it is not.  There are some
7006dependency issues which are noted in the file.  For instance, Yarrow requires CTR chaining mode, a block
7007cipher and a hash function.
7008
7009Also see technical note number five for more details.
7010
7011\subsection{LTC\_EASY}
7012When defined the library is configured to build fewer algorithms and modes.  Mostly it sticks to NIST and ANSI approved algorithms.  See
7013the header file \textit{tomcrypt\_custom.h} for more details.  It is meant to provide literally an easy method of trimming the library
7014build to the most minimum of useful functionality.
7015
7016\subsection{TWOFISH\_SMALL and TWOFISH\_TABLES}
7017Twofish is a 128-bit symmetric block cipher that is provided within the library.  The cipher itself is flexible enough
7018to allow some trade-offs in the implementation.  When TWOFISH\_SMALL is defined the scheduled symmetric key for Twofish
7019requires only 200 bytes of memory.  This is achieved by not pre-computing the substitution boxes.  Having this
7020defined will also greatly slow down the cipher.  When this macro is not defined Twofish will pre-compute the
7021tables at a cost of 4KB of memory.  The cipher will be much faster as a result.
7022
7023When TWOFISH\_TABLES is defined the cipher will use pre-computed (and fixed in code) tables required to work.  This is
7024useful when TWOFISH\_SMALL is defined as the table values are computed on the fly.  When this is defined the code size
7025will increase by approximately 500 bytes.  If this is defined but TWOFISH\_SMALL is not the cipher will still work but
7026it will not speed up the encryption or decryption functions.
7027
7028\subsection{GCM\_TABLES}
7029When defined GCM will use a 64KB table (per GCM state) which will greatly speed up the per--packet latency.
7030It also increases the initialization time and is not suitable when you are going to use a key a few times only.
7031
7032\subsection{GCM\_TABLES\_SSE2}
7033\index{SSE2}
7034When defined GCM will use the SSE2 instructions to perform the $GF(2^x)$ multiply using 16 128--bit XOR operations.  It shaves a few cycles per byte
7035of GCM output on both the AMD64 and Intel Pentium 4 platforms.  Requires GCC and an SSE2 equipped platform.
7036
7037\subsection{LTC\_SMALL\_CODE}
7038When this is defined some of the code such as the Rijndael and SAFER+ ciphers are replaced with smaller code variants.
7039These variants are slower but can save quite a bit of code space.
7040
7041\subsection{LTC\_PTHREAD}
7042When this is activated all of the descriptor table functions will use pthread locking to ensure thread safe updates to the tables.  Note that
7043it doesn't prevent a thread that is passively using a table from being messed up by another thread that updates the table.
7044
7045Generally the rule of thumb is to setup the tables once at startup and then leave them be.  This added build flag simply makes updating
7046the tables safer.
7047
7048\subsection{LTC\_ECC\_TIMING\_RESISTANT}
7049When this has been defined the ECC point multiplier (built--in to the library) will use a timing resistant point multiplication
7050algorithm which prevents leaking key bits of the private key (scalar).  It is a slower algorithm but useful for situations
7051where timing side channels pose a significant threat.
7052
7053This is enabled by default and can be disabled by defining \textbf{LTC\_NO\_ECC\_TIMING\_RESISTANT}.
7054
7055\subsection{LTC\_RSA\_BLINDING}
7056When this has been defined the RSA modular exponentiation will use a blinding algorithm to improve timing resistance.
7057
7058This is enabled by default and can be disabled by defining \textbf{LTC\_NO\_RSA\_BLINDING}.
7059
7060\subsection{LTC\_RSA\_CRT\_HARDENING}
7061When this has been defined the RSA modular exponentiation will do some sanity checks regarding the CRT parameters and the operations' results.
7062
7063This is enabled by default and can be disabled by defining \textbf{LTC\_NO\_RSA\_CRT\_HARDENING}.
7064
7065\subsection{Math Descriptors}
7066The library comes with three math descriptors that allow you to interface the public key cryptography API to freely available math
7067libraries.  When \textbf{GMP\_DESC}, \textbf{LTM\_DESC}, or \textbf{TFM\_DESC} are defined
7068descriptors for the respective library are built and included in the library as \textit{gmp\_desc}, \textit{ltm\_desc}, or \textit{tfm\_desc} respectively.
7069
7070In the test demos that use the libraries the additional flags \textbf{USE\_GMP}, \textbf{USE\_LTM}, and \textbf{USE\_TFM} can be defined
7071to tell the program which library to use.  Only one of the USE flags can be defined at once.
7072
7073\index{GMP\_DESC} \index{USE\_GMP} \index{LTM\_DESC} \index{TFM\_DESC} \index{USE\_LTM} \index{USE\_TFM}
7074\begin{small}
7075\begin{verbatim}
7076make -f makefile.shared install timing CFLAGS="-DGMP_DESC -DLTM_DESC -DTFM_DESC -DUSE_TFM" \
7077EXTRALIBS="-lgmp -ltommath -ltfm"
7078\end{verbatim}
7079\end{small}
7080
7081That will build and install the library with all descriptors (and link against all), but only use TomsFastMath in the timing demo.
7082
7083\chapter{Optimizations}
7084\mysection{Introduction}
7085The entire API was designed with plug and play in mind at the low level.  That is you can swap out any cipher, hash, PRNG or bignum library and the dependent API will not
7086require updating.  This has the nice benefit that one can add ciphers (etc.) not have to re--write portions of the API.  For the most part, LibTomCrypt has also been written
7087to be highly portable and easy to build out of the box on pretty much any platform.  As such there are no assembler inlines throughout the code, I make no assumptions
7088about the platform, etc...
7089
7090That works well for most cases but there are times where performance is of the essence.  This API allows optimized routines to be dropped in--place of the existing
7091portable routines.  For instance, hand optimized assembler versions of AES could be provided.  Any existing function that uses the cipher could automatically use
7092the optimized code without re--writing.  This also paves the way for hardware drivers that can access hardware accelerated cryptographic devices.
7093
7094At the heart of this flexibility is the \textit{descriptor} system.  A descriptor is essentially just a C \textit{struct} which describes the algorithm and provides pointers
7095to functions that do the required work.  For a given class of operation (e.g. cipher, hash, prng, bignum) the functions of a descriptor have identical prototypes which makes
7096development simple.  In most dependent routines all an end developer has to do is register\_XXX() the descriptor and they are set.
7097
7098\mysection{Ciphers}
7099The ciphers in LibTomCrypt are accessed through the ltc\_cipher\_descriptor structure.
7100
7101\label{sec:cipherdesc}
7102\begin{small}
7103\begin{verbatim}
7104struct ltc_cipher_descriptor {
7105   /** name of cipher */
7106   char *name;
7107
7108   /** internal ID */
7109   unsigned char ID;
7110
7111   /** min keysize (octets) */
7112   int  min_key_length,
7113
7114   /** max keysize (octets) */
7115        max_key_length,
7116
7117   /** block size (octets) */
7118        block_length,
7119
7120   /** default number of rounds */
7121        default_rounds;
7122
7123   /** Setup the cipher
7124      @param key         The input symmetric key
7125      @param keylen      The length of the input key (octets)
7126      @param num_rounds  The requested number of rounds (0==default)
7127      @param skey        [out] The destination of the scheduled key
7128      @return CRYPT_OK if successful
7129   */
7130   int  (*setup)(const unsigned char *key,
7131                                 int  keylen,
7132                                 int  num_rounds,
7133                       symmetric_key *skey);
7134
7135   /** Encrypt a block
7136      @param pt      The plaintext
7137      @param ct      [out] The ciphertext
7138      @param skey    The scheduled key
7139      @return CRYPT_OK if successful
7140   */
7141   int (*ecb_encrypt)(const unsigned char *pt,
7142                            unsigned char *ct,
7143                            symmetric_key *skey);
7144
7145   /** Decrypt a block
7146      @param ct      The ciphertext
7147      @param pt      [out] The plaintext
7148      @param skey    The scheduled key
7149      @return CRYPT_OK if successful
7150   */
7151   int (*ecb_decrypt)(const unsigned char *ct,
7152                            unsigned char *pt,
7153                            symmetric_key *skey);
7154
7155   /** Test the block cipher
7156       @return CRYPT_OK if successful,
7157               CRYPT_NOP if self-testing has been disabled
7158   */
7159   int (*test)(void);
7160
7161   /** Terminate the context
7162      @param skey    The scheduled key
7163   */
7164   void (*done)(symmetric_key *skey);
7165
7166   /** Determine a key size
7167       @param keysize    [in/out] The size of the key desired
7168                                  The suggested size
7169       @return CRYPT_OK if successful
7170   */
7171   int  (*keysize)(int *keysize);
7172
7173/** Accelerators **/
7174   /** Accelerated ECB encryption
7175       @param pt      Plaintext
7176       @param ct      Ciphertext
7177       @param blocks  The number of complete blocks to process
7178       @param skey    The scheduled key context
7179       @return CRYPT_OK if successful
7180   */
7181   int (*accel_ecb_encrypt)(const unsigned char *pt,
7182                                  unsigned char *ct,
7183                                  unsigned long  blocks,
7184                                  symmetric_key *skey);
7185
7186   /** Accelerated ECB decryption
7187       @param pt      Plaintext
7188       @param ct      Ciphertext
7189       @param blocks  The number of complete blocks to process
7190       @param skey    The scheduled key context
7191       @return CRYPT_OK if successful
7192   */
7193   int (*accel_ecb_decrypt)(const unsigned char *ct,
7194                                  unsigned char *pt,
7195                                  unsigned long  blocks,
7196                                  symmetric_key *skey);
7197
7198   /** Accelerated CBC encryption
7199       @param pt      Plaintext
7200       @param ct      Ciphertext
7201       @param blocks  The number of complete blocks to process
7202       @param IV      The initial value (input/output)
7203       @param skey    The scheduled key context
7204       @return CRYPT_OK if successful
7205   */
7206   int (*accel_cbc_encrypt)(const unsigned char *pt,
7207                                  unsigned char *ct,
7208                                  unsigned long  blocks,
7209                                  unsigned char *IV,
7210                                  symmetric_key *skey);
7211
7212   /** Accelerated CBC decryption
7213       @param pt      Plaintext
7214       @param ct      Ciphertext
7215       @param blocks  The number of complete blocks to process
7216       @param IV      The initial value (input/output)
7217       @param skey    The scheduled key context
7218       @return CRYPT_OK if successful
7219   */
7220   int (*accel_cbc_decrypt)(const unsigned char *ct,
7221                                  unsigned char *pt,
7222                                  unsigned long  blocks,
7223                                  unsigned char *IV,
7224                                  symmetric_key *skey);
7225
7226   /** Accelerated CTR encryption
7227       @param pt      Plaintext
7228       @param ct      Ciphertext
7229       @param blocks  The number of complete blocks to process
7230       @param IV      The initial value (input/output)
7231       @param mode    little or big endian counter (mode=0 or mode=1)
7232       @param skey    The scheduled key context
7233       @return CRYPT_OK if successful
7234   */
7235   int (*accel_ctr_encrypt)(const unsigned char *pt,
7236                                  unsigned char *ct,
7237                                  unsigned long  blocks,
7238                                  unsigned char *IV,
7239                                            int  mode,
7240                                  symmetric_key *skey);
7241
7242   /** Accelerated LRW
7243       @param pt      Plaintext
7244       @param ct      Ciphertext
7245       @param blocks  The number of complete blocks to process
7246       @param IV      The initial value (input/output)
7247       @param tweak   The LRW tweak
7248       @param skey    The scheduled key context
7249       @return CRYPT_OK if successful
7250   */
7251   int (*accel_lrw_encrypt)(const unsigned char *pt,
7252                                  unsigned char *ct,
7253                                  unsigned long  blocks,
7254                                  unsigned char *IV,
7255                            const unsigned char *tweak,
7256                                  symmetric_key *skey);
7257
7258   /** Accelerated LRW
7259       @param ct      Ciphertext
7260       @param pt      Plaintext
7261       @param blocks  The number of complete blocks to process
7262       @param IV      The initial value (input/output)
7263       @param tweak   The LRW tweak
7264       @param skey    The scheduled key context
7265       @return CRYPT_OK if successful
7266   */
7267   int (*accel_lrw_decrypt)(const unsigned char *ct,
7268                                  unsigned char *pt,
7269                                  unsigned long  blocks,
7270                                  unsigned char *IV,
7271                            const unsigned char *tweak,
7272                                  symmetric_key *skey);
7273
7274   /** Accelerated CCM packet (one-shot)
7275       @param key        The secret key to use
7276       @param keylen     The length of the secret key (octets)
7277       @param uskey      A previously scheduled key [can be NULL]
7278       @param nonce      The session nonce [use once]
7279       @param noncelen   The length of the nonce
7280       @param header     The header for the session
7281       @param headerlen  The length of the header (octets)
7282       @param pt         [out] The plaintext
7283       @param ptlen      The length of the plaintext (octets)
7284       @param ct         [out] The ciphertext
7285       @param tag        [out] The destination tag
7286       @param taglen     [in/out] The max size and resulting size
7287                                  of the authentication tag
7288       @param direction  Encrypt or Decrypt direction (0 or 1)
7289       @return CRYPT_OK if successful
7290   */
7291   int (*accel_ccm_memory)(
7292       const unsigned char *key,    unsigned long keylen,
7293       symmetric_key       *uskey,
7294       const unsigned char *nonce,  unsigned long noncelen,
7295       const unsigned char *header, unsigned long headerlen,
7296             unsigned char *pt,     unsigned long ptlen,
7297             unsigned char *ct,
7298             unsigned char *tag,    unsigned long *taglen,
7299                       int  direction);
7300
7301   /** Accelerated GCM packet (one shot)
7302       @param key        The secret key
7303       @param keylen     The length of the secret key
7304       @param IV         The initialization vector
7305       @param IVlen      The length of the initialization vector
7306       @param adata      The additional authentication data (header)
7307       @param adatalen   The length of the adata
7308       @param pt         The plaintext
7309       @param ptlen      The length of the plaintext/ciphertext
7310       @param ct         The ciphertext
7311       @param tag        [out] The MAC tag
7312       @param taglen     [in/out] The MAC tag length
7313       @param direction  Encrypt or Decrypt mode (GCM_ENCRYPT or GCM_DECRYPT)
7314       @return CRYPT_OK on success
7315   */
7316   int (*accel_gcm_memory)(
7317       const unsigned char *key,    unsigned long keylen,
7318       const unsigned char *IV,     unsigned long IVlen,
7319       const unsigned char *adata,  unsigned long adatalen,
7320             unsigned char *pt,     unsigned long ptlen,
7321             unsigned char *ct,
7322             unsigned char *tag,    unsigned long *taglen,
7323                       int direction);
7324
7325   /** Accelerated one shot OMAC
7326       @param key            The secret key
7327       @param keylen         The key length (octets)
7328       @param in             The message
7329       @param inlen          Length of message (octets)
7330       @param out            [out] Destination for tag
7331       @param outlen         [in/out] Initial and final size of out
7332       @return CRYPT_OK on success
7333   */
7334   int (*omac_memory)(
7335       const unsigned char *key, unsigned long keylen,
7336       const unsigned char *in,  unsigned long inlen,
7337             unsigned char *out, unsigned long *outlen);
7338
7339   /** Accelerated one shot XCBC
7340       @param key            The secret key
7341       @param keylen         The key length (octets)
7342       @param in             The message
7343       @param inlen          Length of message (octets)
7344       @param out            [out] Destination for tag
7345       @param outlen         [in/out] Initial and final size of out
7346       @return CRYPT_OK on success
7347   */
7348   int (*xcbc_memory)(
7349       const unsigned char *key, unsigned long keylen,
7350       const unsigned char *in,  unsigned long inlen,
7351             unsigned char *out, unsigned long *outlen);
7352
7353   /** Accelerated one shot F9
7354       @param key            The secret key
7355       @param keylen         The key length (octets)
7356       @param in             The message
7357       @param inlen          Length of message (octets)
7358       @param out            [out] Destination for tag
7359       @param outlen         [in/out] Initial and final size of out
7360       @return CRYPT_OK on success
7361       @remark Requires manual padding
7362   */
7363   int (*f9_memory)(
7364       const unsigned char *key, unsigned long keylen,
7365       const unsigned char *in,  unsigned long inlen,
7366             unsigned char *out, unsigned long *outlen);
7367};
7368\end{verbatim}
7369\end{small}
7370
7371\subsection{Name}
7372\index{find\_cipher()}
7373The \textit{name} parameter specifies the name of the cipher.  This is what a developer would pass to find\_cipher() to find the cipher in the descriptor
7374tables.
7375
7376\subsection{Internal ID}
7377This is a single byte Internal ID you can use to distinguish ciphers from each other.
7378
7379\subsection{Key Lengths}
7380The minimum key length is \textit{min\_key\_length} and is measured in octets.  Similarly the maximum key length is \textit{max\_key\_length}.  They can be equal
7381and both must valid key sizes for the cipher.  Values in between are not assumed to be valid though they may be.
7382
7383\subsection{Block Length}
7384The size of the ciphers plaintext or ciphertext is \textit{block\_length} and is measured in octets.
7385
7386\subsection{Rounds}
7387Some ciphers allow different number of rounds to be used.  Usually you just use the default.  The default round count is \textit{default\_rounds}.
7388
7389\subsection{Setup}
7390To initialize a cipher (for ECB mode) the function setup() was provided.  It accepts an array of key octets \textit{key} of length \textit{keylen} octets.  The user
7391can specify the number of rounds they want through \textit{num\_rounds} where $num\_rounds = 0$ means use the default.  The destination of a scheduled key is stored
7392in \textit{skey}.
7393
7394Inside the \textit{symmetric\_key} union there is a \textit{void *data} which you can use to allocate data if you need a data structure that does not fit with the existing
7395ones provided.  Just make sure in your \textit{done()} function that you free the allocated memory.
7396
7397\subsection{Single block ECB}
7398To process a single block in ECB mode the ecb\_encrypt() and ecb\_decrypt() functions were provided.  The plaintext and ciphertext buffers are allowed to overlap so you
7399must make sure you do not overwrite the output before you are finished with the input.
7400
7401\subsection{Testing}
7402The test() function is used to self--test the \textit{device}.  It takes no arguments and returns \textbf{CRYPT\_OK} if all is working properly.  You may return
7403\textbf{CRYPT\_NOP} to indicate that no testing was performed.
7404
7405\subsection{Key Sizing}
7406Occasionally, a function will want to find a suitable key size to use since the input is oddly sized.  The keysize() function is for this case.  It accepts a
7407pointer to an integer which represents the desired size.  The function then has to match it to the exact or a lower key size that is valid for the cipher.  For
7408example, if the input is $25$ and $24$ is valid then it stores $24$ back in the pointed to integer.  It must not round up and must return an error if the keysize
7409 cannot be mapped to a valid key size for the cipher.
7410
7411\subsection{Acceleration}
7412The next set of functions cover the accelerated functionality of the cipher descriptor.  Any combination of these functions may be set to \textbf{NULL} to indicate
7413it is not supported.  In those cases the software defaults are used (using the single ECB block routines).
7414
7415\subsubsection{Accelerated ECB}
7416These two functions are meant for cases where a user wants to encrypt (in ECB mode no less) an array of blocks.  These functions are accessed
7417through the accel\_ecb\_encrypt and accel\_ecb\_decrypt pointers.  The \textit{blocks} count is the number of complete blocks to process.
7418
7419\subsubsection{Accelerated CBC}
7420These two functions are meant for accelerated CBC encryption.  These functions are accessed through the accel\_cbc\_encrypt and accel\_cbc\_decrypt pointers.
7421The \textit{blocks} value is the number of complete blocks to process.  The \textit{IV} is the CBC initialization vector.  It is an input upon calling this function and must be
7422updated by the function before returning.
7423
7424\subsubsection{Accelerated CTR}
7425This function is meant for accelerated CTR encryption.  It is accessible through the accel\_ctr\_encrypt pointer.
7426The \textit{blocks} value is the number of complete blocks to process.  The \textit{IV} is the CTR counter vector.  It is an input upon calling this function and must be
7427updated by the function before returning.  The \textit{mode} value indicates whether the counter is big (mode = CTR\_COUNTER\_BIG\_ENDIAN) or
7428little (mode = CTR\_COUNTER\_LITTLE\_ENDIAN) endian.
7429
7430This function (and the way it's called) differs from the other two since ctr\_encrypt() allows any size input plaintext.  The accelerator will only be
7431called if the following conditions are met.
7432
7433\begin{enumerate}
7434   \item The accelerator is present
7435   \item The CTR pad is empty
7436   \item The remaining length of the input to process is greater than or equal to the block size.
7437\end{enumerate}
7438
7439The \textit{CTR pad} is empty when a multiple (including zero) blocks of text have been processed.  That is, if you pass in seven bytes to AES--CTR mode you would have to
7440pass in a minimum of nine extra bytes before the accelerator could be called.  The CTR accelerator must increment the counter (and store it back into the
7441buffer provided) before encrypting it to create the pad.
7442
7443The accelerator will only be used to encrypt whole blocks.  Partial blocks are always handled in software.
7444
7445\subsubsection{Accelerated LRW}
7446These functions are meant for accelerated LRW.  They process blocks of input in lengths of multiples of 16 octets.  They must accept the \textit{IV} and \textit{tweak}
7447state variables and updated them prior to returning.  Note that you may want to disable \textbf{LRW\_TABLES} in \textit{tomcrypt\_custom.h} if you intend
7448to use accelerators for LRW.
7449
7450While both encrypt and decrypt accelerators are not required it is suggested as it makes lrw\_setiv() more efficient.
7451
7452Note that calling lrw\_done() will only invoke the cipher\_descriptor[].done() function on the \textit{symmetric\_key} parameter of the LRW state.  That means
7453if your device requires any (LRW specific) resources you should free them in your ciphers() done function.  The simplest way to think of it is to write
7454the plugin solely to do LRW with the cipher.  That way cipher\_descriptor[].setup() means to init LRW resources and cipher\_descriptor[].done() means to
7455free them.
7456
7457\subsubsection{Accelerated CCM}
7458This function is meant for accelerated CCM encryption or decryption.  It processes the entire packet in one call.  You can optimize the work flow somewhat
7459by allowing the caller to call the setup() function first to schedule the key if your accelerator cannot do the key schedule on the fly (for instance).  This
7460function MUST support both key passing methods.
7461
7462\begin{center}
7463\begin{small}
7464\begin{tabular}{|r|r|l|}
7465\hline \textbf{key} & \textbf{uskey} & \textbf{Source of key} \\
7466\hline NULL         & NULL           & Error, not supported \\
7467\hline non-NULL     & NULL           & Use key, do a key schedule \\
7468\hline NULL         & non-NULL       & Use uskey, key schedule not required \\
7469\hline non-NULL     & non-NULL       & Use uskey, key schedule not required \\
7470\hline
7471\end{tabular}
7472\end{small}
7473\end{center}
7474
7475\index{ccm\_memory()} This function is called when the user calls ccm\_memory().
7476
7477\subsubsection{Accelerated GCM}
7478\index{gcm\_memory()}
7479This function is meant for accelerated GCM encryption or decryption.  It processes the entire packet in one call.  Note that the setup() function will not
7480be called prior to this.  This function must handle scheduling the key provided on its own.  It is called when the user calls gcm\_memory().
7481
7482\subsubsection{Accelerated OMAC}
7483\index{omac\_memory()}
7484This function is meant to perform an optimized OMAC1 (CMAC) message authentication code computation when the user calls omac\_memory().
7485
7486\subsubsection{Accelerated XCBC-MAC}
7487\index{xcbc\_memory()}
7488This function is meant to perform an optimized XCBC-MAC message authentication code computation when the user calls xcbc\_memory().
7489
7490\subsubsection{Accelerated F9}
7491\index{f9\_memory()}
7492This function is meant to perform an optimized F9 message authentication code computation when the user calls f9\_memory().  Like f9\_memory(), it requires
7493the caller to perform any 3GPP related padding before calling in order to ensure proper compliance with F9.
7494
7495
7496\mysection{One--Way Hashes}
7497The hash functions are accessed through the ltc\_hash\_descriptor structure.
7498
7499\begin{small}
7500\begin{verbatim}
7501struct ltc_hash_descriptor {
7502    /** name of hash */
7503    char *name;
7504
7505    /** internal ID */
7506    unsigned char ID;
7507
7508    /** Size of digest in octets */
7509    unsigned long hashsize;
7510
7511    /** Input block size in octets */
7512    unsigned long blocksize;
7513
7514    /** ASN.1 OID */
7515    unsigned long OID[16];
7516
7517    /** Length of DER encoding */
7518    unsigned long OIDlen;
7519
7520    /** Init a hash state
7521      @param hash   The hash to initialize
7522      @return CRYPT_OK if successful
7523    */
7524    int (*init)(hash_state *hash);
7525
7526    /** Process a block of data
7527      @param hash   The hash state
7528      @param in     The data to hash
7529      @param inlen  The length of the data (octets)
7530      @return CRYPT_OK if successful
7531    */
7532    int (*process)(         hash_state *hash,
7533                   const unsigned char *in,
7534                         unsigned long  inlen);
7535
7536    /** Produce the digest and store it
7537      @param hash   The hash state
7538      @param out    [out] The destination of the digest
7539      @return CRYPT_OK if successful
7540    */
7541    int (*done)(   hash_state *hash,
7542                unsigned char *out);
7543
7544    /** Self-test
7545      @return CRYPT_OK if successful,
7546              CRYPT_NOP if self-tests have been disabled
7547    */
7548    int (*test)(void);
7549
7550    /* accelerated hmac callback: if you need to-do
7551       multiple packets just use the generic hmac_memory
7552       and provide a hash callback
7553    */
7554    int  (*hmac_block)(const unsigned char *key,
7555                             unsigned long  keylen,
7556                       const unsigned char *in,
7557                             unsigned long  inlen,
7558                             unsigned char *out,
7559                             unsigned long *outlen);
7560};
7561\end{verbatim}
7562\end{small}
7563
7564\subsection{Name}
7565This is the name the hash is known by and what find\_hash() will look for.
7566
7567\subsection{Internal ID}
7568This is the internal ID byte used to distinguish the hash from other hashes.
7569
7570\subsection{Digest Size}
7571The \textit{hashsize} variable indicates the length of the output in octets.
7572
7573\subsection{Block Size}
7574The \textit{blocksize} variable indicates the length of input (in octets) that the hash processes in a given
7575invocation.
7576
7577\subsection{OID Identifier}
7578This is the universal ASN.1 Object Identifier for the hash.
7579
7580\subsection{Initialization}
7581The init function initializes the hash and prepares it to process message bytes.
7582
7583\subsection{Process}
7584This processes message bytes.  The algorithm must accept any length of input that the hash would allow.  The input is not
7585guaranteed to be a multiple of the block size in length.
7586
7587\subsection{Done}
7588The done function terminates the hash and returns the message digest.
7589
7590\subsection{Acceleration}
7591A compatible accelerator must allow processing data in any granularity which may require internal padding on the driver side.
7592
7593\subsection{HMAC Acceleration}
7594The hmac\_block() callback is meant for single--shot optimized HMAC implementations.  It is called directly by hmac\_memory() if present.  If you need
7595to be able to process multiple blocks per MAC then you will have to simply provide a process() callback and use hmac\_memory() as provided in LibTomCrypt.
7596
7597\mysection{Pseudo--Random Number Generators}
7598The pseudo--random number generators are accessible through the ltc\_prng\_descriptor structure.
7599
7600\begin{small}
7601\begin{verbatim}
7602struct ltc_prng_descriptor {
7603    /** Name of the PRNG */
7604    char *name;
7605
7606    /** size in bytes of exported state */
7607    int  export_size;
7608
7609    /** Start a PRNG state
7610        @param prng   [out] The state to initialize
7611        @return CRYPT_OK if successful
7612    */
7613    int (*start)(prng_state *prng);
7614
7615    /** Add entropy to the PRNG
7616        @param in         The entropy
7617        @param inlen      Length of the entropy (octets)
7618        @param prng       The PRNG state
7619        @return CRYPT_OK if successful
7620    */
7621    int (*add_entropy)(const unsigned char *in,
7622                             unsigned long  inlen,
7623                                prng_state *prng);
7624
7625    /** Ready a PRNG state to read from
7626        @param prng       The PRNG state to ready
7627        @return CRYPT_OK if successful
7628    */
7629    int (*ready)(prng_state *prng);
7630
7631    /** Read from the PRNG
7632        @param out     [out] Where to store the data
7633        @param outlen  Length of data desired (octets)
7634        @param prng    The PRNG state to read from
7635        @return Number of octets read
7636    */
7637    unsigned long (*read)(unsigned char *out,
7638                          unsigned long  outlen,
7639                             prng_state *prng);
7640
7641    /** Terminate a PRNG state
7642        @param prng   The PRNG state to terminate
7643        @return CRYPT_OK if successful
7644    */
7645    int (*done)(prng_state *prng);
7646
7647    /** Export a PRNG state
7648        @param out     [out] The destination for the state
7649        @param outlen  [in/out] The max size and resulting size
7650        @param prng    The PRNG to export
7651        @return CRYPT_OK if successful
7652    */
7653    int (*pexport)(unsigned char *out,
7654                   unsigned long *outlen,
7655                      prng_state *prng);
7656
7657    /** Import a PRNG state
7658        @param in      The data to import
7659        @param inlen   The length of the data to import (octets)
7660        @param prng    The PRNG to initialize/import
7661        @return CRYPT_OK if successful
7662    */
7663    int (*pimport)(const unsigned char *in,
7664                         unsigned long  inlen,
7665                            prng_state *prng);
7666
7667    /** Self-test the PRNG
7668        @return CRYPT_OK if successful,
7669                CRYPT_NOP if self-testing has been disabled
7670    */
7671    int (*test)(void);
7672};
7673\end{verbatim}
7674\end{small}
7675
7676\subsection{Name}
7677The name by which find\_prng() will find the PRNG.
7678
7679\subsection{Export Size}
7680When an PRNG state is to be exported for future use you specify the space required in this variable.
7681
7682\subsection{Start}
7683Initialize the PRNG and make it ready to accept entropy.
7684
7685\subsection{Entropy Addition}
7686Add entropy to the PRNG state.  The exact behaviour of this function depends on the particulars of the PRNG.
7687
7688\subsection{Ready}
7689This function makes the PRNG ready to read from by processing the entropy added.  The behaviour of this function depends
7690on the specific PRNG used.
7691
7692\subsection{Read}
7693Read from the PRNG and return the number of bytes read.  This function does not have to fill the buffer but it is best
7694if it does as many protocols do not retry reads and will fail on the first try.
7695
7696\subsection{Done}
7697Terminate a PRNG state.  The behaviour of this function depends on the particular PRNG used.
7698
7699\subsection{Exporting and Importing}
7700An exported PRNG state is data that the PRNG can later import to resume activity.  They're not meant to resume \textit{the same session}
7701but should at least maintain the same level of state entropy.
7702
7703\mysection{BigNum Math Descriptors}
7704The library also makes use of the math descriptors to access math functions.  While bignum math libraries usually differ in implementation
7705it hasn't proven hard to write \textit{glue} to use math libraries so far.  The basic descriptor looks like.
7706
7707\begin{small}
7708\begin{verbatim}
7709/** math descriptor */
7710typedef struct {
7711   /** Name of the math provider */
7712   char *name;
7713
7714   /** Bits per digit, amount of bits must fit in an unsigned long */
7715   int  bits_per_digit;
7716
7717/* ---- init/deinit functions ---- */
7718
7719   /** initialize a bignum
7720     @param   a     The number to initialize
7721     @return  CRYPT_OK on success
7722   */
7723   int (*init)(void **a);
7724
7725   /** init copy
7726     @param  dst    The number to initialize and write to
7727     @param  src    The number to copy from
7728     @return CRYPT_OK on success
7729   */
7730   int (*init_copy)(void **dst, void *src);
7731
7732   /** deinit
7733      @param   a    The number to free
7734      @return CRYPT_OK on success
7735   */
7736   void (*deinit)(void *a);
7737
7738/* ---- data movement ---- */
7739
7740   /** negate
7741      @param   src   The number to negate
7742      @param   dst   The destination
7743      @return CRYPT_OK on success
7744   */
7745   int (*neg)(void *src, void *dst);
7746
7747   /** copy
7748      @param   src   The number to copy from
7749      @param   dst   The number to write to
7750      @return CRYPT_OK on success
7751   */
7752   int (*copy)(void *src, void *dst);
7753
7754/* ---- trivial low level functions ---- */
7755
7756   /** set small constant
7757      @param a    Number to write to
7758      @param n    Source upto bits_per_digit (actually meant for very small constants)
7759      @return CRYPT_OK on success
7760   */
7761   int (*set_int)(void *a, unsigned long n);
7762
7763   /** get small constant
7764      @param a  Small number to read,
7765                only fetches up to bits_per_digit from the number
7766      @return   The lower bits_per_digit of the integer (unsigned)
7767   */
7768   unsigned long (*get_int)(void *a);
7769
7770   /** get digit n
7771     @param a  The number to read from
7772     @param n  The number of the digit to fetch
7773     @return  The bits_per_digit  sized n'th digit of a
7774   */
7775   ltc_mp_digit (*get_digit)(void *a, int n);
7776
7777   /** Get the number of digits that represent the number
7778     @param a   The number to count
7779     @return The number of digits used to represent the number
7780   */
7781   int (*get_digit_count)(void *a);
7782
7783   /** compare two integers
7784     @param a   The left side integer
7785     @param b   The right side integer
7786     @return LTC_MP_LT if a < b,
7787             LTC_MP_GT if a > b and
7788             LTC_MP_EQ otherwise.  (signed comparison)
7789   */
7790   int (*compare)(void *a, void *b);
7791
7792   /** compare against int
7793     @param a   The left side integer
7794     @param b   The right side integer (upto bits_per_digit)
7795     @return LTC_MP_LT if a < b,
7796             LTC_MP_GT if a > b and
7797             LTC_MP_EQ otherwise.  (signed comparison)
7798   */
7799   int (*compare_d)(void *a, unsigned long n);
7800
7801   /** Count the number of bits used to represent the integer
7802     @param a   The integer to count
7803     @return The number of bits required to represent the integer
7804   */
7805   int (*count_bits)(void * a);
7806
7807   /** Count the number of LSB bits which are zero
7808     @param a   The integer to count
7809     @return The number of contiguous zero LSB bits
7810   */
7811   int (*count_lsb_bits)(void *a);
7812
7813   /** Compute a power of two
7814     @param a  The integer to store the power in
7815     @param n  The power of two you want to store (a = 2^n)
7816     @return CRYPT_OK on success
7817   */
7818   int (*twoexpt)(void *a , int n);
7819
7820/* ---- radix conversions ---- */
7821
7822   /** read ascii string
7823     @param a     The integer to store into
7824     @param str   The string to read
7825     @param radix The radix the integer has been represented in (2-64)
7826     @return CRYPT_OK on success
7827   */
7828   int (*read_radix)(void *a, const char *str, int radix);
7829
7830   /** write number to string
7831     @param a     The integer to store
7832     @param str   The destination for the string
7833     @param radix The radix the integer is to be represented in (2-64)
7834     @return CRYPT_OK on success
7835   */
7836   int (*write_radix)(void *a, char *str, int radix);
7837
7838   /** get size as unsigned char string
7839     @param a  The integer to get the size (when stored in array of octets)
7840     @return   The length of the integer in octets
7841   */
7842   unsigned long (*unsigned_size)(void *a);
7843
7844   /** store an integer as an array of octets
7845     @param src   The integer to store
7846     @param dst   The buffer to store the integer in
7847     @return CRYPT_OK on success
7848   */
7849   int (*unsigned_write)(void *src, unsigned char *dst);
7850
7851   /** read an array of octets and store as integer
7852     @param dst   The integer to load
7853     @param src   The array of octets
7854     @param len   The number of octets
7855     @return CRYPT_OK on success
7856   */
7857   int (*unsigned_read)(         void *dst,
7858                        unsigned char *src,
7859                        unsigned long  len);
7860
7861/* ---- basic math ---- */
7862
7863   /** add two integers
7864     @param a   The first source integer
7865     @param b   The second source integer
7866     @param c   The destination of "a + b"
7867     @return CRYPT_OK on success
7868   */
7869   int (*add)(void *a, void *b, void *c);
7870
7871   /** add two integers
7872     @param a   The first source integer
7873     @param b   The second source integer
7874                (single digit of upto bits_per_digit in length)
7875     @param c   The destination of "a + b"
7876     @return CRYPT_OK on success
7877   */
7878   int (*addi)(void *a, unsigned long b, void *c);
7879
7880   /** subtract two integers
7881     @param a   The first source integer
7882     @param b   The second source integer
7883     @param c   The destination of "a - b"
7884     @return CRYPT_OK on success
7885   */
7886   int (*sub)(void *a, void *b, void *c);
7887
7888   /** subtract two integers
7889     @param a   The first source integer
7890     @param b   The second source integer
7891                (single digit of upto bits_per_digit in length)
7892     @param c   The destination of "a - b"
7893     @return CRYPT_OK on success
7894   */
7895   int (*subi)(void *a, unsigned long b, void *c);
7896
7897   /** multiply two integers
7898     @param a   The first source integer
7899     @param b   The second source integer
7900                (single digit of upto bits_per_digit in length)
7901     @param c   The destination of "a * b"
7902     @return CRYPT_OK on success
7903   */
7904   int (*mul)(void *a, void *b, void *c);
7905
7906   /** multiply two integers
7907     @param a   The first source integer
7908     @param b   The second source integer
7909                (single digit of upto bits_per_digit in length)
7910     @param c   The destination of "a * b"
7911     @return CRYPT_OK on success
7912   */
7913   int (*muli)(void *a, unsigned long b, void *c);
7914
7915   /** Square an integer
7916     @param a    The integer to square
7917     @param b    The destination
7918     @return CRYPT_OK on success
7919   */
7920   int (*sqr)(void *a, void *b);
7921
7922   /** Divide an integer
7923     @param a    The dividend
7924     @param b    The divisor
7925     @param c    The quotient (can be NULL to signify don't care)
7926     @param d    The remainder (can be NULL to signify don't care)
7927     @return CRYPT_OK on success
7928   */
7929   int (*mpdiv)(void *a, void *b, void *c, void *d);
7930
7931   /** divide by two
7932      @param  a   The integer to divide (shift right)
7933      @param  b   The destination
7934      @return CRYPT_OK on success
7935   */
7936   int (*div_2)(void *a, void *b);
7937
7938   /** Get remainder (small value)
7939      @param  a    The integer to reduce
7940      @param  b    The modulus (upto bits_per_digit in length)
7941      @param  c    The destination for the residue
7942      @return CRYPT_OK on success
7943   */
7944   int (*modi)(void *a, unsigned long b, unsigned long *c);
7945
7946   /** gcd
7947      @param  a     The first integer
7948      @param  b     The second integer
7949      @param  c     The destination for (a, b)
7950      @return CRYPT_OK on success
7951   */
7952   int (*gcd)(void *a, void *b, void *c);
7953
7954   /** lcm
7955      @param  a     The first integer
7956      @param  b     The second integer
7957      @param  c     The destination for [a, b]
7958      @return CRYPT_OK on success
7959   */
7960   int (*lcm)(void *a, void *b, void *c);
7961
7962   /** Modular multiplication
7963      @param  a     The first source
7964      @param  b     The second source
7965      @param  c     The modulus
7966      @param  d     The destination (a*b mod c)
7967      @return CRYPT_OK on success
7968   */
7969   int (*mulmod)(void *a, void *b, void *c, void *d);
7970
7971   /** Modular squaring
7972      @param  a     The first source
7973      @param  b     The modulus
7974      @param  c     The destination (a*a mod b)
7975      @return CRYPT_OK on success
7976   */
7977   int (*sqrmod)(void *a, void *b, void *c);
7978
7979   /** Modular inversion
7980      @param  a     The value to invert
7981      @param  b     The modulus
7982      @param  c     The destination (1/a mod b)
7983      @return CRYPT_OK on success
7984   */
7985   int (*invmod)(void *, void *, void *);
7986
7987/* ---- reduction ---- */
7988
7989   /** setup Montgomery
7990       @param a  The modulus
7991       @param b  The destination for the reduction digit
7992       @return CRYPT_OK on success
7993   */
7994   int (*montgomery_setup)(void *a, void **b);
7995
7996   /** get normalization value
7997       @param a   The destination for the normalization value
7998       @param b   The modulus
7999       @return  CRYPT_OK on success
8000   */
8001   int (*montgomery_normalization)(void *a, void *b);
8002
8003   /** reduce a number
8004       @param a   The number [and dest] to reduce
8005       @param b   The modulus
8006       @param c   The value "b" from montgomery_setup()
8007       @return CRYPT_OK on success
8008   */
8009   int (*montgomery_reduce)(void *a, void *b, void *c);
8010
8011   /** clean up  (frees memory)
8012       @param a   The value "b" from montgomery_setup()
8013       @return CRYPT_OK on success
8014   */
8015   void (*montgomery_deinit)(void *a);
8016
8017/* ---- exponentiation ---- */
8018
8019   /** Modular exponentiation
8020       @param a    The base integer
8021       @param b    The power (can be negative) integer
8022       @param c    The modulus integer
8023       @param d    The destination
8024       @return CRYPT_OK on success
8025   */
8026   int (*exptmod)(void *a, void *b, void *c, void *d);
8027
8028   /** Primality testing
8029       @param a     The integer to test
8030       @param b     The number of Miller-Rabin tests that shall be executed
8031       @param c     The destination of the result (FP_YES if prime)
8032       @return CRYPT_OK on success
8033   */
8034   int (*isprime)(void *a, int b, int *c);
8035
8036/* ----  (optional) ecc point math ---- */
8037
8038   /** ECC GF(p) point multiplication (from the NIST curves)
8039       @param k   The integer to multiply the point by
8040       @param G   The point to multiply
8041       @param R   The destination for kG
8042       @param modulus  The modulus for the field
8043       @param map Boolean indicated whether to map back to affine or not
8044                  (can be ignored if you work in affine only)
8045       @return CRYPT_OK on success
8046   */
8047   int (*ecc_ptmul)(     void *k,
8048                    ecc_point *G,
8049                    ecc_point *R,
8050                         void *modulus,
8051                          int  map);
8052
8053   /** ECC GF(p) point addition
8054       @param P    The first point
8055       @param Q    The second point
8056       @param R    The destination of P + Q
8057       @param modulus  The modulus
8058       @param mp   The "b" value from montgomery_setup()
8059       @return CRYPT_OK on success
8060   */
8061   int (*ecc_ptadd)(ecc_point *P,
8062                    ecc_point *Q,
8063                    ecc_point *R,
8064                         void *modulus,
8065                         void *mp);
8066
8067   /** ECC GF(p) point double
8068       @param P    The first point
8069       @param R    The destination of 2P
8070       @param modulus  The modulus
8071       @param mp   The "b" value from montgomery_setup()
8072       @return CRYPT_OK on success
8073   */
8074   int (*ecc_ptdbl)(ecc_point *P,
8075                    ecc_point *R,
8076                         void *modulus,
8077                         void *mp);
8078
8079   /** ECC mapping from projective to affine,
8080       currently uses (x,y,z) => (x/z^2, y/z^3, 1)
8081       @param P     The point to map
8082       @param modulus The modulus
8083       @param mp    The "b" value from montgomery_setup()
8084       @return CRYPT_OK on success
8085       @remark The mapping can be different but keep in mind a
8086               ecc_point only has three integers (x,y,z) so if
8087               you use a different mapping you have to make it fit.
8088   */
8089   int (*ecc_map)(ecc_point *P, void *modulus, void *mp);
8090
8091   /** Computes kA*A + kB*B = C using Shamir's Trick
8092       @param A        First point to multiply
8093       @param kA       What to multiple A by
8094       @param B        Second point to multiply
8095       @param kB       What to multiple B by
8096       @param C        [out] Destination point (can overlap with A or B)
8097       @param modulus  Modulus for curve
8098       @return CRYPT_OK on success
8099   */
8100   int (*ecc_mul2add)(ecc_point *A, void *kA,
8101                      ecc_point *B, void *kB,
8102                      ecc_point *C,
8103                           void *modulus);
8104
8105/* ---- (optional) rsa optimized math (for internal CRT) ---- */
8106
8107   /** RSA Key Generation
8108       @param prng     An active PRNG state
8109       @param wprng    The index of the PRNG desired
8110       @param size     The size of the key in octets
8111       @param e        The "e" value (public key).
8112                       e==65537 is a good choice
8113       @param key      [out] Destination of a newly created private key pair
8114       @return CRYPT_OK if successful, upon error all allocated ram is freed
8115    */
8116    int (*rsa_keygen)(prng_state *prng,
8117                             int  wprng,
8118                             int  size,
8119                            long  e,
8120                         rsa_key *key);
8121
8122   /** RSA exponentiation
8123      @param in       The octet array representing the base
8124      @param inlen    The length of the input
8125      @param out      The destination (to be stored in an octet array format)
8126      @param outlen   The length of the output buffer and the resulting size
8127                      (zero padded to the size of the modulus)
8128      @param which    PK_PUBLIC for public RSA and PK_PRIVATE for private RSA
8129      @param key      The RSA key to use
8130      @return CRYPT_OK on success
8131   */
8132   int (*rsa_me)(const unsigned char *in,   unsigned long inlen,
8133                       unsigned char *out,  unsigned long *outlen, int which,
8134                       rsa_key *key);
8135
8136/* ---- basic math continued ---- */
8137
8138   /** Modular addition
8139      @param  a     The first source
8140      @param  b     The second source
8141      @param  c     The modulus
8142      @param  d     The destination (a + b mod c)
8143      @return CRYPT_OK on success
8144   */
8145   int (*addmod)(void *a, void *b, void *c, void *d);
8146
8147   /** Modular substraction
8148      @param  a     The first source
8149      @param  b     The second source
8150      @param  c     The modulus
8151      @param  d     The destination (a - b mod c)
8152      @return CRYPT_OK on success
8153   */
8154   int (*submod)(void *a, void *b, void *c, void *d);
8155
8156/* ---- misc stuff ---- */
8157
8158   /** Make a pseudo-random mpi
8159      @param  a     The mpi to make random
8160      @param  size  The desired length
8161      @return CRYPT_OK on success
8162   */
8163   int (*rand)(void *a, int size);
8164} ltc_math_descriptor;
8165\end{verbatim}
8166\end{small}
8167
8168Most of the functions are fairly straightforward and do not need documentation.  We'll cover the basic conventions of the API and then explain the accelerated functions.
8169
8170\subsection{Conventions}
8171
8172All \textit{bignums} are accessed through an opaque \textit{void *} data type.  You must internally cast the pointer if you need to access members of your bignum structure.  During
8173the init calls a \textit{void **} will be passed where you allocate your structure and set the pointer then initialize the number to zero.  During the deinit calls you must
8174free the bignum as well as the structure you allocated to place it in.
8175
8176All functions except the Montgomery reductions work from left to right with the arguments.  For example, mul(a, b, c) computes $c \leftarrow ab$.
8177
8178All functions (except where noted otherwise) return \textbf{CRYPT\_OK} to signify a successful operation.  All error codes must be valid LibTomCrypt error codes.
8179
8180The digit routines (including functions with the \textit{i} suffix) use a \textit{ltc\_mp\_digit} to represent the digit.  If your internal digit is larger than this you must
8181then partition your digits.  Note that if your digit is smaller than an \textit{ltc\_mp\_digit} that is also acceptable as the \textit{bits\_per\_digit} parameter will specify this.
8182
8183\subsubsection{ltc\_mp\_digit}
8184\index{ltc\_mp\_digit}
8185
8186Depending on the archtitecture \textit{ltc\_mp\_digit} is either a $32$- or $64$-bit long \textit{unsigned} data type.
8187
8188\subsection{ECC Functions}
8189The ECC system in LibTomCrypt is based off of the NIST recommended curves over $GF(p)$ and is used to implement EC-DSA and EC-DH.   The ECC functions work with
8190the \textbf{ecc\_point} structure and assume the points are stored in Jacobian projective format.
8191
8192\begin{verbatim}
8193/** A point on a ECC curve, stored in Jacobian format such
8194    that (x,y,z) => (x/z^2, y/z^3, 1) when interpreted as affine */
8195typedef struct {
8196    /** The x co-ordinate */
8197    void *x;
8198    /** The y co-ordinate */
8199    void *y;
8200    /** The z co-ordinate */
8201    void *z;
8202} ecc_point;
8203\end{verbatim}
8204
8205All ECC functions must use this mapping system.  The only exception is when you remap all ECC callbacks which will allow you to have more control
8206over how the ECC math will be implemented.  Out of the box you only have three parameters per point to use $(x, y, z)$ however, these are just void pointers.  They
8207could point to anything you want.  The only further exception is the export functions which expects the values to be in affine format.
8208
8209\subsubsection{Point Multiply}
8210This will multiply the point $G$ by the scalar $k$ and store the result in the point $R$.  The value should be mapped to affine only if $map$ is set to one.
8211
8212\subsubsection{Point Addition}
8213This will add the point $P$ to the point $Q$ and store it in the point $R$.  The $mp$ parameter is the \textit{b} value from the montgomery\_setup() call.  The input points
8214may be in either affine (with $z = 1$) or projective format and the output point is always projective.
8215
8216\subsubsection{Point Mapping}
8217This will map the point $P$ back from projective to affine.  The output point $P$ must be of the form $(x, y, 1)$.
8218
8219\subsubsection{Shamir's Trick}
8220\index{Shamir's Trick}
8221\index{ltc\_ecc\_mul2add()}
8222To accelerate EC--DSA verification the library provides a built--in function called ltc\_ecc\_mul2add().  This performs two point multiplications and an addition in
8223roughly the time of one point multiplication.  It is called from ecc\_verify\_hash() if an accelerator is not present.  The acclerator function must allow the points to
8224overlap (e.g., $A \leftarrow k_1A + k_2B$) and must return the final point in affine format.
8225
8226
8227\subsection{RSA Functions}
8228The RSA Modular Exponentiation (ME) function is used by the RSA API to perform exponentiations for private and public key operations.  In particular for
8229private key operations it uses the CRT approach to lower the time required.  It is passed an RSA key with the following format.
8230
8231\begin{verbatim}
8232/** RSA PKCS style key */
8233typedef struct Rsa_key {
8234    /** Type of key, PK_PRIVATE or PK_PUBLIC */
8235    int type;
8236    /** The public exponent */
8237    void *e;
8238    /** The private exponent */
8239    void *d;
8240    /** The modulus */
8241    void *N;
8242    /** The p factor of N */
8243    void *p;
8244    /** The q factor of N */
8245    void *q;
8246    /** The 1/q mod p CRT param */
8247    void *qP;
8248    /** The d mod (p - 1) CRT param */
8249    void *dP;
8250    /** The d mod (q - 1) CRT param */
8251    void *dQ;
8252} rsa_key;
8253\end{verbatim}
8254
8255The call reads the \textit{in} buffer as an unsigned char array in big endian format.  Then it performs the exponentiation and stores the output in big endian format
8256to the \textit{out} buffer.  The output must be zero padded (leading bytes) so that the length of the output matches the length of the modulus (in bytes).  For example,
8257for RSA--1024 the output is always 128 bytes regardless of how small the numerical value of the exponentiation is.
8258
8259Since the function is given the entire RSA key (for private keys only) CRT is possible as prescribed in the PKCS \#1 v2.1 specification.
8260
8261\newpage
8262\markboth{Index}{Index}
8263\input{crypt.ind}
8264
8265\end{document}
8266
8267% ref:         HEAD -> master, tag: v1.18.2
8268% git commit:  7e7eb695d581782f04b24dc444cbfde86af59853
8269% commit time: 2018-07-01 22:49:01 +0200
8270