\doxysection{src/l1/a5.c File Reference}
\label{a5_8c}\index{src/l1/a5.c@{src/l1/a5.c}}


Osmocom GMR-\/1 A5 ciphering algorithm implementation.  


{\ttfamily \#include $<$string.\+h$>$}\newline
{\ttfamily \#include $<$stdint.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/bits.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/gmr1/l1/a5.\+h$>$}\newline
\doxysubsection*{Macros}
\begin{DoxyCompactItemize}
\item 
\#define {\bfseries A51\+\_\+\+R1\+\_\+\+LEN}~19
\item 
\#define {\bfseries A51\+\_\+\+R2\+\_\+\+LEN}~22
\item 
\#define {\bfseries A51\+\_\+\+R3\+\_\+\+LEN}~23
\item 
\#define {\bfseries A51\+\_\+\+R4\+\_\+\+LEN}~17
\item 
\#define {\bfseries A51\+\_\+\+R1\+\_\+\+MASK}~((1$<$$<$A51\+\_\+\+R1\+\_\+\+LEN)-\/1)
\item 
\#define {\bfseries A51\+\_\+\+R2\+\_\+\+MASK}~((1$<$$<$A51\+\_\+\+R2\+\_\+\+LEN)-\/1)
\item 
\#define {\bfseries A51\+\_\+\+R3\+\_\+\+MASK}~((1$<$$<$A51\+\_\+\+R3\+\_\+\+LEN)-\/1)
\item 
\#define {\bfseries A51\+\_\+\+R4\+\_\+\+MASK}~((1$<$$<$A51\+\_\+\+R4\+\_\+\+LEN)-\/1)
\item 
\#define {\bfseries A51\+\_\+\+R1\+\_\+\+TAPS}~0x072000 /$\ast$ \textbf{ x}$^\wedge$19 + \textbf{ x}$^\wedge$18 + \textbf{ x}$^\wedge$17 + \textbf{ x}$^\wedge$14 + 1 $\ast$/
\item 
\#define {\bfseries A51\+\_\+\+R2\+\_\+\+TAPS}~0x311000 /$\ast$ \textbf{ x}$^\wedge$22 + \textbf{ x}$^\wedge$21 + \textbf{ x}$^\wedge$17 + \textbf{ x}$^\wedge$13 + 1 $\ast$/
\item 
\#define {\bfseries A51\+\_\+\+R3\+\_\+\+TAPS}~0x660000 /$\ast$ \textbf{ x}$^\wedge$23 + \textbf{ x}$^\wedge$22 + \textbf{ x}$^\wedge$19 + \textbf{ x}$^\wedge$18 + 1 $\ast$/
\item 
\#define {\bfseries A51\+\_\+\+R4\+\_\+\+TAPS}~0x013100 /$\ast$ \textbf{ x}$^\wedge$17 + \textbf{ x}$^\wedge$14 + \textbf{ x}$^\wedge$13 + \textbf{ x}$^\wedge$9 + 1 $\ast$/
\item 
\#define {\bfseries A51\+\_\+\+BIT}(r,  n)~(1 $<$$<$ n)
\item 
\#define \textbf{ MAJ}(rnum,  rname,  a,  b,  c)
\end{DoxyCompactItemize}
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
\item 
void \textbf{ gmr1\+\_\+a5} (int n, uint8\+\_\+t $\ast$key, uint32\+\_\+t fn, int nbits, \textbf{ ubit\+\_\+t} $\ast$dl, \textbf{ ubit\+\_\+t} $\ast$ul)
\begin{DoxyCompactList}\small\item\em Main method to generate a A5/x cipher stream. \end{DoxyCompactList}\item 
void \textbf{ gmr1\+\_\+a5\+\_\+1} (uint8\+\_\+t $\ast$key, uint32\+\_\+t fn, int nbits, \textbf{ ubit\+\_\+t} $\ast$dl, \textbf{ ubit\+\_\+t} $\ast$ul)
\begin{DoxyCompactList}\small\item\em Generate a GMR-\/1 A5/1 cipher stream. \end{DoxyCompactList}\end{DoxyCompactItemize}


\doxysubsection{Detailed Description}
Osmocom GMR-\/1 A5 ciphering algorithm implementation. 



\doxysubsection{Macro Definition Documentation}
\mbox{\label{a5_8c_a7d6896e2125732468a6bc4b0798e8a39}} 
\index{a5.c@{a5.c}!MAJ@{MAJ}}
\index{MAJ@{MAJ}!a5.c@{a5.c}}
\doxysubsubsection{MAJ}
{\footnotesize\ttfamily \#define MAJ(\begin{DoxyParamCaption}\item[{}]{rnum,  }\item[{}]{rname,  }\item[{}]{a,  }\item[{}]{b,  }\item[{}]{c }\end{DoxyParamCaption})}

{\bfseries Value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{                m[rnum] = \_a5\_majority(                 \(\backslash\)}
\DoxyCodeLine{                        r[rnum] \& A51\_BIT(rname, a),    \(\backslash\)}
\DoxyCodeLine{                        r[rnum] \& A51\_BIT(rname, b),    \(\backslash\)}
\DoxyCodeLine{                        r[rnum] \& A51\_BIT(rname, c)     \(\backslash\)}
\DoxyCodeLine{                );}

\end{DoxyCode}
