diff --git a/doc/crypt.tex b/doc/crypt.tex index 37db095..2afaa06 100644 --- a/doc/crypt.tex +++ b/doc/crypt.tex @@ -6164,6 +6164,46 @@ int mem_neq(const void *a, const void *b, size_t len); This will compare the buffer \textit{a} against the buffer \textit{b} for \textit{len} bytes. The return value is either \textit{0} when the content of \textit{a} and \textit{b} is equal or \textit{1} when it differs. +\subsection{Radix to binary conversion} + +All public-key cryptographic algorithms provide a way to import and/or export their key parameters in binary format. +In order to be able to import keys stored in different formats, e.g. hexadecimal strings, the \textit{radix\_to\_bin()} function is provided. + +\index{radix\_to\_bin()} +\begin{verbatim} +int radix_to_bin(const void *in, int radix, void *out, unsigned long *len); +\end{verbatim} + +This will convert the MPI \textit{in} of radix \textit{radix} to the buffer pointed to by \textit{out}. +The field \textit{len} is a pointer to the length of the buffer on input and the length stored on output. + +In case you don't know the length of the buffer you can use \textit{radix\_to\_bin()} to determine the length for you. + +\begin{verbatim} +#include + +int main(void) +{ + const char *mpi = "AABBCCDD"; + unsigned long l = 0; + void* buf; + int ret; + ltc_mp = ltm_desc; + + if (radix_to_bin(mpi, 16, NULL, &l) != CRYPT_BUFFER_OVERFLOW) + return EXIT_FAILURE; + buf = malloc(l); + + ret = EXIT_SUCCESS; + if (radix_to_bin(mpi, 16, buf, &l) != CRYPT_OK) + ret = EXIT_FAILURE; + + free(buf); + return ret; +} +\end{verbatim} + + \mysection{Dynamic Language Support} \index{Dynamic Language Support} Various LibTomCrypt functions require that their callers define a struct