\documentclass[11pt]{article} \usepackage[a4paper, hmargin={2.8cm, 2.8cm}, vmargin={2.5cm, 2.5cm}]{geometry} \usepackage{eso-pic} % \AddToShipoutPicture \usepackage{graphicx} % \includegraphics \usepackage[inline]{enumitem} \usepackage{xspace} \author{ \Large{Thomas Bracht Laumann Jespersen} \\ \texttt{ntl316@alumni.ku.dk} \\ } \title{ \vspace{3cm} \Huge{Implementing Base Change without Space Change}% \\ %\Large{SOLE and LOSE as practical online, prefix-free encoding schemes} } \newcommand{\eof}{\textsc{eof}\xspace} %%\date{DATE, 2015} \begin{document} \AddToShipoutPicture*{\put(0,0){\includegraphics*[viewport=0 0 700 600]{include/ku-farve}}} \AddToShipoutPicture*{\put(0,602){\includegraphics*[viewport=0 600 700 1600]{include/ku-farve}}} \AddToShipoutPicture*{\put(0,0){\includegraphics*{include/ku-en}}} \clearpage\maketitle \thispagestyle{empty} %\begin{abstract} %We present a C library implementing the SOLE and LOSE encoding schemes presented %in~\cite{patrascu10trits}. % %The SOLE and LOSE encoding schemes are prefix-free, have excellent locality %properties and can be implemented using $O(\log{n})$ space. % %We provide an implementation handling input blocks of 128 bits as a C99 %compliant library. %\end{abstract} \newpage \section*{Project Description} Prefix-free encoding schemes are of interest in cryptographic applications, since they are a simple, but effective, counter-measure to extension attacks. The crux of the problem is encoding the end-of-file (\eof) without reserving any bit patterns in advance. The most basic approach increases the input linearly, but is very fast to encode and decode. Increasing the size of the data to be transferred is not preferable, since data transfer is typically much slower than data processing. The SOLE and LOSE encoding schemes introduced in~\cite{patrascu10trits} allow enocoding \eof in an online stream with a constant additive overhead. In both schemes, the input is handled in blocks of $b$ bits, viewed both as $b$-bit numbers, but also as ``characters'' in an alphabet of size $2^b$. During operation, the input blocks are handled in pairs, forming $2b$-bit numbers and some arithmetic operations are performed on these larger numbers. We present an implementation of the SOLE and LOSE encoding schemes as both statically and dynamically linkable libraries. Our implementation works with 128-bit blocks, thus requiring arithmetic operations on 256-bit numbers. How these operations are implemented is presented and discussed in the report. The implementation is written in ANSI~C with zero dependencies and is therefore expected to be quite portable. Some topics regarding portability of code will be discussed. Besides the practical aspects of implementing a portable library, we also provide a comparison of SOLE and an implementation ad-hoc, naive approach. It is our expectation that even if SOLE encoding requires more computation, it is on average faster. \section*{Learning Goals} At the end of this project, the student will have: \noindent Knowledge of: \begin{itemize}[noitemsep] \item the SOLE and LOSE encoding schemes \item online streaming methods \item how arbitrary precision arithmetic operations can be implemented \end{itemize} \noindent Skills in: \begin{itemize}[noitemsep] \item implementing compliant ANSI~C code using GNU's Autotools and building library code \item Validating such a library by benchmarking it against other libraries providing similar functionality \item Implementing arithmetic operations on numbers with more bits than available in a single register on a given architecture. \end{itemize} \noindent Compentences in: \begin{itemize}[noitemsep] \item Implementing a C library for cryptographic usage \item Implementing streaming algorithms in ANSI C \item Testing and benchmarking library code \end{itemize} \bibliographystyle{unsrt} \bibliography{refs} \end{document} Simply scared meter-maid runs like hell away from the cars. Fanning the flames of democracy should be considered a sin. Managing some else's expectations is extremely unpleasurable There once was a student at KU Who went on a trip to the loo After he flushed He deftly brushed And the next person could use the loo, too The once was a man in a hurry Whose bowel movements caused him to scurry Brush he did not In his haste he forgot So everyone found out he'd had curry