\doxysection{GSM/\+GPRS/3G Authentication}
\label{group__auth}\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}


GSM/\+GPRS/3G authentication core infrastructure.  


\doxysubsection*{Files}
\begin{DoxyCompactItemize}
\item 
file \textbf{ auth.\+h}
\item 
file \textbf{ auth\+\_\+core.\+c}
\item 
file \textbf{ comp128.\+c}
\begin{DoxyCompactList}\small\item\em COMP128 v1; common/old GSM Authentication Algorithm (A3/\+A8). \end{DoxyCompactList}\item 
file \textbf{ comp128v23.\+c}
\begin{DoxyCompactList}\small\item\em COMP128 version 2 and 3 implementation, common algorithm used for GSM Authentication (A3/\+A8). \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsection*{Data Structures}
\begin{DoxyCompactItemize}
\item 
struct \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2}
\begin{DoxyCompactList}\small\item\em permanent (secret) subscriber auth data \end{DoxyCompactList}\item 
struct \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data}
\item 
struct \textbf{ osmo\+\_\+auth\+\_\+vector}
\item 
struct \textbf{ osmo\+\_\+auth\+\_\+impl}
\end{DoxyCompactItemize}
\doxysubsection*{Macros}
\begin{DoxyCompactItemize}
\item 
\#define \textbf{ OSMO\+\_\+\+A5\+\_\+\+MAX\+\_\+\+KEY\+\_\+\+LEN\+\_\+\+BYTES}~(128/8)
\item 
\#define \textbf{ OSMO\+\_\+\+MILENAGE\+\_\+\+IND\+\_\+\+BITLEN\+\_\+\+MAX}~28
\item 
\#define \textbf{ OSMO\+\_\+\+AUTH\+\_\+\+ALG\+\_\+\+XOR}~\textbf{ OSMO\+\_\+\+AUTH\+\_\+\+ALG\+\_\+\+XOR\+\_\+3G}
\end{DoxyCompactItemize}
\doxysubsection*{Enumerations}
\begin{DoxyCompactItemize}
\item 
enum \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+type} \{ \newline
\textbf{ OSMO\+\_\+\+AUTH\+\_\+\+TYPE\+\_\+\+NONE} = 0x00
, \newline
\textbf{ OSMO\+\_\+\+AUTH\+\_\+\+TYPE\+\_\+\+GSM} = 0x01
, \newline
\textbf{ OSMO\+\_\+\+AUTH\+\_\+\+TYPE\+\_\+\+UMTS} = 0x02
 \}
\begin{DoxyCompactList}\small\item\em Authentication Type (GSM/\+UMTS) \end{DoxyCompactList}\item 
enum \textbf{ osmo\+\_\+auth\+\_\+algo} \{ \newline
\textbf{ OSMO\+\_\+\+AUTH\+\_\+\+ALG\+\_\+\+NONE}
, \newline
\textbf{ OSMO\+\_\+\+AUTH\+\_\+\+ALG\+\_\+\+COMP128v1}
, \newline
\textbf{ OSMO\+\_\+\+AUTH\+\_\+\+ALG\+\_\+\+COMP128v2}
, \newline
\textbf{ OSMO\+\_\+\+AUTH\+\_\+\+ALG\+\_\+\+COMP128v3}
, \newline
\textbf{ OSMO\+\_\+\+AUTH\+\_\+\+ALG\+\_\+\+XOR\+\_\+3G}
, \newline
\textbf{ OSMO\+\_\+\+AUTH\+\_\+\+ALG\+\_\+\+MILENAGE}
, \newline
\textbf{ OSMO\+\_\+\+AUTH\+\_\+\+ALG\+\_\+\+XOR\+\_\+2G}
, \newline
\textbf{ OSMO\+\_\+\+AUTH\+\_\+\+ALG\+\_\+\+TUAK}
, \newline
\textbf{ \+\_\+\+OSMO\+\_\+\+AUTH\+\_\+\+ALG\+\_\+\+NUM}
 \}
\begin{DoxyCompactList}\small\item\em Authentication Algorithm. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
\item 
static const char $\ast$ \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+type\+\_\+name} (enum \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+type} val)
\item 
int \textbf{ osmo\+\_\+auth\+\_\+gen\+\_\+vec} (struct \textbf{ osmo\+\_\+auth\+\_\+vector} $\ast$vec, struct \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data} $\ast$aud, const uint8\+\_\+t $\ast$\+\_\+rand)
\begin{DoxyCompactList}\small\item\em Generate authentication vector. \end{DoxyCompactList}\item 
int \textbf{ osmo\+\_\+auth\+\_\+gen\+\_\+vec2} (struct \textbf{ osmo\+\_\+auth\+\_\+vector} $\ast$vec, struct \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2} $\ast$aud, const uint8\+\_\+t $\ast$\+\_\+rand)
\begin{DoxyCompactList}\small\item\em Generate authentication vector. \end{DoxyCompactList}\item 
int \textbf{ osmo\+\_\+auth\+\_\+gen\+\_\+vec\+\_\+auts} (struct \textbf{ osmo\+\_\+auth\+\_\+vector} $\ast$vec, struct \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data} $\ast$aud, const uint8\+\_\+t $\ast$auts, const uint8\+\_\+t $\ast$rand\+\_\+auts, const uint8\+\_\+t $\ast$\+\_\+rand)
\begin{DoxyCompactList}\small\item\em Generate authentication vector and re-\/sync sequence. \end{DoxyCompactList}\item 
int \textbf{ osmo\+\_\+auth\+\_\+gen\+\_\+vec\+\_\+auts2} (struct \textbf{ osmo\+\_\+auth\+\_\+vector} $\ast$vec, struct \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2} $\ast$aud, const uint8\+\_\+t $\ast$auts, const uint8\+\_\+t $\ast$rand\+\_\+auts, const uint8\+\_\+t $\ast$\+\_\+rand)
\begin{DoxyCompactList}\small\item\em Generate authentication vector and re-\/sync sequence. \end{DoxyCompactList}\item 
int \textbf{ osmo\+\_\+auth\+\_\+register} (struct \textbf{ osmo\+\_\+auth\+\_\+impl} $\ast$impl)
\begin{DoxyCompactList}\small\item\em Register an authentication algorithm implementation with the core. \end{DoxyCompactList}\item 
int \textbf{ osmo\+\_\+auth\+\_\+load} (const char $\ast$path)
\begin{DoxyCompactList}\small\item\em Load all available authentication plugins from the given path. \end{DoxyCompactList}\item 
int \textbf{ osmo\+\_\+auth\+\_\+supported} (enum \textbf{ osmo\+\_\+auth\+\_\+algo} algo)
\begin{DoxyCompactList}\small\item\em Determine if a given authentication algorithm is supported. \end{DoxyCompactList}\item 
void \textbf{ osmo\+\_\+c4} (uint8\+\_\+t $\ast$ck, const uint8\+\_\+t $\ast$kc)
\item 
const char $\ast$ \textbf{ osmo\+\_\+auth\+\_\+alg\+\_\+name} (enum \textbf{ osmo\+\_\+auth\+\_\+algo} alg)
\begin{DoxyCompactList}\small\item\em Get human-\/readable name of authentication algorithm. \end{DoxyCompactList}\item 
enum \textbf{ osmo\+\_\+auth\+\_\+algo} \textbf{ osmo\+\_\+auth\+\_\+alg\+\_\+parse} (const char $\ast$\textbf{ name})
\begin{DoxyCompactList}\small\item\em Parse human-\/readable name of authentication algorithm. \end{DoxyCompactList}\item 
void \textbf{ osmo\+\_\+auth\+\_\+c3} (uint8\+\_\+t kc[$\,$], const uint8\+\_\+t ck[$\,$], const uint8\+\_\+t ik[$\,$])
\item 
void \textbf{ osmo\+\_\+auth\+\_\+c2} (uint8\+\_\+t \textbf{ sres}[4], const uint8\+\_\+t $\ast$\textbf{ res}, size\+\_\+t res\+\_\+len, uint8\+\_\+t sres\+\_\+deriv\+\_\+func)
\begin{DoxyCompactList}\small\item\em Derive GSM SRES from UMTS [X]RES (auth function c2 from 3GPP TS 33.\+103 Section 6.\+8.\+1.\+2. \end{DoxyCompactList}\item 
static int \textbf{ c128v1\+\_\+gen\+\_\+vec} (struct \textbf{ osmo\+\_\+auth\+\_\+vector} $\ast$vec, struct \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2} $\ast$aud, const uint8\+\_\+t $\ast$\+\_\+rand)
\item 
static \textbf{ \+\_\+\+\_\+attribute\+\_\+\+\_\+} ((constructor))
\item 
static int \textbf{ c128v2\+\_\+gen\+\_\+vec} (struct \textbf{ osmo\+\_\+auth\+\_\+vector} $\ast$vec, struct \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2} $\ast$aud, const uint8\+\_\+t $\ast$\+\_\+rand)
\item 
static int \textbf{ c128v3\+\_\+gen\+\_\+vec} (struct \textbf{ osmo\+\_\+auth\+\_\+vector} $\ast$vec, struct \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2} $\ast$aud, const uint8\+\_\+t $\ast$\+\_\+rand)
\item 
static \textbf{ LLIST\+\_\+\+HEAD} (osmo\+\_\+auths)
\item 
static int \textbf{ auth\+\_\+data2auth\+\_\+data2} (struct \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2} $\ast$out, const struct \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data} $\ast$in)
\item 
static void \textbf{ c5\+\_\+function} (uint8\+\_\+t $\ast$ik, const uint8\+\_\+t $\ast$kc)
\item 
int \textbf{ osmo\+\_\+auth\+\_\+3g\+\_\+from\+\_\+2g} (struct \textbf{ osmo\+\_\+auth\+\_\+vector} $\ast$vec)
\begin{DoxyCompactList}\small\item\em Generate 3G CK + IK from 2G authentication vector. \end{DoxyCompactList}\item 
static const uint8\+\_\+t $\ast$ \textbf{ gen\+\_\+opc\+\_\+if\+\_\+needed} (const struct \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2} $\ast$aud, uint8\+\_\+t $\ast$gen\+\_\+opc)
\item 
static int \textbf{ milenage\+\_\+gen\+\_\+vec} (struct \textbf{ osmo\+\_\+auth\+\_\+vector} $\ast$vec, struct \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2} $\ast$aud, const uint8\+\_\+t $\ast$\+\_\+rand)
\item 
static int \textbf{ milenage\+\_\+gen\+\_\+vec\+\_\+auts} (struct \textbf{ osmo\+\_\+auth\+\_\+vector} $\ast$vec, struct \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2} $\ast$aud, const uint8\+\_\+t $\ast$auts, const uint8\+\_\+t $\ast$rand\+\_\+auts, const uint8\+\_\+t $\ast$\+\_\+rand)
\item 
static int \textbf{ tuak\+\_\+gen\+\_\+vec} (struct \textbf{ osmo\+\_\+auth\+\_\+vector} $\ast$vec, struct \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2} $\ast$aud, const uint8\+\_\+t $\ast$\+\_\+rand)
\item 
static int \textbf{ tuak\+\_\+gen\+\_\+vec\+\_\+auts} (struct \textbf{ osmo\+\_\+auth\+\_\+vector} $\ast$vec, struct \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2} $\ast$aud, const uint8\+\_\+t $\ast$auts, const uint8\+\_\+t $\ast$rand\+\_\+auts, const uint8\+\_\+t $\ast$\+\_\+rand)
\item 
static void \textbf{ xor} (uint8\+\_\+t $\ast$out, const uint8\+\_\+t $\ast$a, const uint8\+\_\+t $\ast$b, size\+\_\+t \textbf{ len})
\item 
static int \textbf{ xor\+\_\+gen\+\_\+vec} (struct \textbf{ osmo\+\_\+auth\+\_\+vector} $\ast$vec, struct \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2} $\ast$aud, const uint8\+\_\+t $\ast$\+\_\+rand)
\item 
static int \textbf{ xor\+\_\+gen\+\_\+vec\+\_\+auts} (struct \textbf{ osmo\+\_\+auth\+\_\+vector} $\ast$vec, struct \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2} $\ast$aud, const uint8\+\_\+t $\ast$auts, const uint8\+\_\+t $\ast$rand\+\_\+auts, const uint8\+\_\+t $\ast$\+\_\+rand)
\item 
static int \textbf{ xor2g\+\_\+gen\+\_\+vec} (struct \textbf{ osmo\+\_\+auth\+\_\+vector} $\ast$vec, struct \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2} $\ast$aud, const uint8\+\_\+t $\ast$\+\_\+rand)
\item 
static void \textbf{ \+\_\+comp128\+\_\+compression\+\_\+round} (uint8\+\_\+t $\ast$x, int \textbf{ n}, const uint8\+\_\+t $\ast$tbl)
\item 
static void \textbf{ \+\_\+comp128\+\_\+compression} (uint8\+\_\+t $\ast$x)
\item 
static void \textbf{ \+\_\+comp128\+\_\+bitsfrombytes} (uint8\+\_\+t $\ast$x, uint8\+\_\+t $\ast$bits)
\item 
static void \textbf{ \+\_\+comp128\+\_\+permutation} (uint8\+\_\+t $\ast$x, uint8\+\_\+t $\ast$bits)
\item 
void \textbf{ comp128v1} (const uint8\+\_\+t $\ast$ki, const uint8\+\_\+t $\ast$rand, uint8\+\_\+t $\ast$\textbf{ sres}, uint8\+\_\+t $\ast$kc)
\begin{DoxyCompactList}\small\item\em Perform COMP128v1 algorithm. \end{DoxyCompactList}\item 
void \textbf{ comp128} (const uint8\+\_\+t $\ast$ki, const uint8\+\_\+t $\ast$rand, uint8\+\_\+t $\ast$\textbf{ sres}, uint8\+\_\+t $\ast$kc)
\begin{DoxyCompactList}\small\item\em Perform COMP128v1 algorithm. \end{DoxyCompactList}\item 
static void \textbf{ \+\_\+comp128v23\+\_\+internal} (uint8\+\_\+t $\ast$output, const uint8\+\_\+t $\ast$kxor, const uint8\+\_\+t $\ast$rand)
\item 
int \textbf{ comp128v3} (const uint8\+\_\+t $\ast$ki, const uint8\+\_\+t $\ast$rand, uint8\+\_\+t $\ast$\textbf{ sres}, uint8\+\_\+t $\ast$kc)
\begin{DoxyCompactList}\small\item\em Perform COMP128v3 algorithm. \end{DoxyCompactList}\item 
int \textbf{ comp128v2} (const uint8\+\_\+t $\ast$ki, const uint8\+\_\+t $\ast$rand, uint8\+\_\+t $\ast$\textbf{ sres}, uint8\+\_\+t $\ast$kc)
\begin{DoxyCompactList}\small\item\em Perform COMP128v2 algorithm. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsection*{Variables}
\begin{DoxyCompactItemize}
\item 
const struct \textbf{ value\+\_\+string} \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+type\+\_\+names} [$\,$]
\item 
enum \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+type} \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::type}
\item 
enum \textbf{ osmo\+\_\+auth\+\_\+algo} \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::algo}
\item 
uint8\+\_\+t \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::opc} [32]
\begin{DoxyCompactList}\small\item\em operator invariant value \end{DoxyCompactList}\item 
uint8\+\_\+t \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::opc\+\_\+len}
\begin{DoxyCompactList}\small\item\em OPc length (in bytes)\+: 16 or 32. \end{DoxyCompactList}\item 
uint8\+\_\+t \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::k} [32]
\begin{DoxyCompactList}\small\item\em secret key of the subscriber \end{DoxyCompactList}\item 
uint8\+\_\+t \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::k\+\_\+len}
\begin{DoxyCompactList}\small\item\em K length (in bytes)\+: 16 or 32. \end{DoxyCompactList}\item 
uint8\+\_\+t \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::amf} [2]
\item 
uint64\+\_\+t \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::sqn}
\begin{DoxyCompactList}\small\item\em sequence number (in\+: prev sqn; out\+: used sqn) \end{DoxyCompactList}\item 
int \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::opc\+\_\+is\+\_\+op}
\begin{DoxyCompactList}\small\item\em is the OPC field OPC (0) or OP (1) ? \end{DoxyCompactList}\item 
unsigned int \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::ind\+\_\+bitlen}
\begin{DoxyCompactList}\small\item\em nr of bits not in SEQ, only SQN \end{DoxyCompactList}\item 
unsigned int \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::ind}
\begin{DoxyCompactList}\small\item\em which IND slot to use an SQN from \end{DoxyCompactList}\item 
uint64\+\_\+t \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::sqn\+\_\+ms}
\begin{DoxyCompactList}\small\item\em sqn from AUTS (output value only) \end{DoxyCompactList}\item 
\begin{tabbing}
xx\=xx\=xx\=xx\=xx\=xx\=xx\=xx\=xx\=\kill
struct \{\\
\>uint8\_t \textbf{ osmo\_sub\_auth\_data2::opc} [32]\\
\>\>{\em operator invariant value }\\
\>uint8\_t \textbf{ osmo\_sub\_auth\_data2::opc\_len}\\
\>\>{\em OPc length (in bytes): 16 or 32. }\\
\>uint8\_t \textbf{ osmo\_sub\_auth\_data2::k} [32]\\
\>\>{\em secret key of the subscriber }\\
\>uint8\_t \textbf{ osmo\_sub\_auth\_data2::k\_len}\\
\>\>{\em K length (in bytes): 16 or 32. }\\
\>uint8\_t \textbf{ osmo\_sub\_auth\_data2::amf} [2]\\
\>uint64\_t \textbf{ osmo\_sub\_auth\_data2::sqn}\\
\>\>{\em sequence number (in: prev sqn; out: used sqn) }\\
\>int \textbf{ osmo\_sub\_auth\_data2::opc\_is\_op}\\
\>\>{\em is the OPC field OPC (0) or OP (1) ? }\\
\>unsigned int \textbf{ osmo\_sub\_auth\_data2::ind\_bitlen}\\
\>\>{\em nr of bits not in SEQ, only SQN }\\
\>unsigned int \textbf{ osmo\_sub\_auth\_data2::ind}\\
\>\>{\em which IND slot to use an SQN from }\\
\>uint64\_t \textbf{ osmo\_sub\_auth\_data2::sqn\_ms}\\
\>\>{\em sqn from AUTS (output value only) }\\
\} \textbf{ osmo\_sub\_auth\_data2::umts}\\

\end{tabbing}\item 
uint8\+\_\+t \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::ki} [\textbf{ OSMO\+\_\+\+A5\+\_\+\+MAX\+\_\+\+KEY\+\_\+\+LEN\+\_\+\+BYTES}]
\begin{DoxyCompactList}\small\item\em secret key \end{DoxyCompactList}\item 
\begin{tabbing}
xx\=xx\=xx\=xx\=xx\=xx\=xx\=xx\=xx\=\kill
struct \{\\
\>uint8\_t \textbf{ osmo\_sub\_auth\_data2::ki} [\textbf{ OSMO\_A5\_MAX\_KEY\_LEN\_BYTES}]\\
\>\>{\em secret key }\\
\} \textbf{ osmo\_sub\_auth\_data2::gsm}\\

\end{tabbing}\item 
\begin{tabbing}
xx\=xx\=xx\=xx\=xx\=xx\=xx\=xx\=xx\=\kill
union \{\\
\>struct \{\\
\>\>uint8\_t \textbf{ osmo\_sub\_auth\_data2::opc} [32]\\
\>\>\>{\em operator invariant value }\\
\>\>uint8\_t \textbf{ osmo\_sub\_auth\_data2::opc\_len}\\
\>\>\>{\em OPc length (in bytes): 16 or 32. }\\
\>\>uint8\_t \textbf{ osmo\_sub\_auth\_data2::k} [32]\\
\>\>\>{\em secret key of the subscriber }\\
\>\>uint8\_t \textbf{ osmo\_sub\_auth\_data2::k\_len}\\
\>\>\>{\em K length (in bytes): 16 or 32. }\\
\>\>uint8\_t \textbf{ osmo\_sub\_auth\_data2::amf} [2]\\
\>\>uint64\_t \textbf{ osmo\_sub\_auth\_data2::sqn}\\
\>\>\>{\em sequence number (in: prev sqn; out: used sqn) }\\
\>\>int \textbf{ osmo\_sub\_auth\_data2::opc\_is\_op}\\
\>\>\>{\em is the OPC field OPC (0) or OP (1) ? }\\
\>\>unsigned int \textbf{ osmo\_sub\_auth\_data2::ind\_bitlen}\\
\>\>\>{\em nr of bits not in SEQ, only SQN }\\
\>\>unsigned int \textbf{ osmo\_sub\_auth\_data2::ind}\\
\>\>\>{\em which IND slot to use an SQN from }\\
\>\>uint64\_t \textbf{ osmo\_sub\_auth\_data2::sqn\_ms}\\
\>\>\>{\em sqn from AUTS (output value only) }\\
\>\} \textbf{ osmo\_sub\_auth\_data2::umts}\\
\>struct \{\\
\>\>uint8\_t \textbf{ osmo\_sub\_auth\_data2::ki} [\textbf{ OSMO\_A5\_MAX\_KEY\_LEN\_BYTES}]\\
\>\>\>{\em secret key }\\
\>\} \textbf{ osmo\_sub\_auth\_data2::gsm}\\
\} \textbf{ osmo\_sub\_auth\_data2::u}\\

\end{tabbing}\item 
enum \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+type} \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data\+::type}
\item 
enum \textbf{ osmo\+\_\+auth\+\_\+algo} \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data\+::algo}
\item 
uint8\+\_\+t \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data\+::opc} [16]
\begin{DoxyCompactList}\small\item\em operator invariant value \end{DoxyCompactList}\item 
uint8\+\_\+t \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data\+::k} [\textbf{ OSMO\+\_\+\+A5\+\_\+\+MAX\+\_\+\+KEY\+\_\+\+LEN\+\_\+\+BYTES}]
\begin{DoxyCompactList}\small\item\em secret key of the subscriber \end{DoxyCompactList}\item 
uint8\+\_\+t \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data\+::amf} [2]
\item 
uint64\+\_\+t \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data\+::sqn}
\begin{DoxyCompactList}\small\item\em sequence number (in\+: prev sqn; out\+: used sqn) \end{DoxyCompactList}\item 
int \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data\+::opc\+\_\+is\+\_\+op}
\begin{DoxyCompactList}\small\item\em is the OPC field OPC (0) or OP (1) ? \end{DoxyCompactList}\item 
unsigned int \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data\+::ind\+\_\+bitlen}
\begin{DoxyCompactList}\small\item\em nr of bits not in SEQ, only SQN \end{DoxyCompactList}\item 
unsigned int \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data\+::ind}
\begin{DoxyCompactList}\small\item\em which IND slot to use an SQN from \end{DoxyCompactList}\item 
uint64\+\_\+t \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data\+::sqn\+\_\+ms}
\begin{DoxyCompactList}\small\item\em sqn from AUTS (output value only) \end{DoxyCompactList}\item 
\begin{tabbing}
xx\=xx\=xx\=xx\=xx\=xx\=xx\=xx\=xx\=\kill
struct \{\\
\>uint8\_t \textbf{ osmo\_sub\_auth\_data::opc} [16]\\
\>\>{\em operator invariant value }\\
\>uint8\_t \textbf{ osmo\_sub\_auth\_data::k} [\textbf{ OSMO\_A5\_MAX\_KEY\_LEN\_BYTES}]\\
\>\>{\em secret key of the subscriber }\\
\>uint8\_t \textbf{ osmo\_sub\_auth\_data::amf} [2]\\
\>uint64\_t \textbf{ osmo\_sub\_auth\_data::sqn}\\
\>\>{\em sequence number (in: prev sqn; out: used sqn) }\\
\>int \textbf{ osmo\_sub\_auth\_data::opc\_is\_op}\\
\>\>{\em is the OPC field OPC (0) or OP (1) ? }\\
\>unsigned int \textbf{ osmo\_sub\_auth\_data::ind\_bitlen}\\
\>\>{\em nr of bits not in SEQ, only SQN }\\
\>unsigned int \textbf{ osmo\_sub\_auth\_data::ind}\\
\>\>{\em which IND slot to use an SQN from }\\
\>uint64\_t \textbf{ osmo\_sub\_auth\_data::sqn\_ms}\\
\>\>{\em sqn from AUTS (output value only) }\\
\} \textbf{ osmo\_sub\_auth\_data::umts}\\

\end{tabbing}\item 
uint8\+\_\+t \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data\+::ki} [\textbf{ OSMO\+\_\+\+A5\+\_\+\+MAX\+\_\+\+KEY\+\_\+\+LEN\+\_\+\+BYTES}]
\begin{DoxyCompactList}\small\item\em secret key \end{DoxyCompactList}\item 
\begin{tabbing}
xx\=xx\=xx\=xx\=xx\=xx\=xx\=xx\=xx\=\kill
struct \{\\
\>uint8\_t \textbf{ osmo\_sub\_auth\_data::ki} [\textbf{ OSMO\_A5\_MAX\_KEY\_LEN\_BYTES}]\\
\>\>{\em secret key }\\
\} \textbf{ osmo\_sub\_auth\_data::gsm}\\

\end{tabbing}\item 
\begin{tabbing}
xx\=xx\=xx\=xx\=xx\=xx\=xx\=xx\=xx\=\kill
union \{\\
\>struct \{\\
\>\>uint8\_t \textbf{ osmo\_sub\_auth\_data::opc} [16]\\
\>\>\>{\em operator invariant value }\\
\>\>uint8\_t \textbf{ osmo\_sub\_auth\_data::k} [\textbf{ OSMO\_A5\_MAX\_KEY\_LEN\_BYTES}]\\
\>\>\>{\em secret key of the subscriber }\\
\>\>uint8\_t \textbf{ osmo\_sub\_auth\_data::amf} [2]\\
\>\>uint64\_t \textbf{ osmo\_sub\_auth\_data::sqn}\\
\>\>\>{\em sequence number (in: prev sqn; out: used sqn) }\\
\>\>int \textbf{ osmo\_sub\_auth\_data::opc\_is\_op}\\
\>\>\>{\em is the OPC field OPC (0) or OP (1) ? }\\
\>\>unsigned int \textbf{ osmo\_sub\_auth\_data::ind\_bitlen}\\
\>\>\>{\em nr of bits not in SEQ, only SQN }\\
\>\>unsigned int \textbf{ osmo\_sub\_auth\_data::ind}\\
\>\>\>{\em which IND slot to use an SQN from }\\
\>\>uint64\_t \textbf{ osmo\_sub\_auth\_data::sqn\_ms}\\
\>\>\>{\em sqn from AUTS (output value only) }\\
\>\} \textbf{ osmo\_sub\_auth\_data::umts}\\
\>struct \{\\
\>\>uint8\_t \textbf{ osmo\_sub\_auth\_data::ki} [\textbf{ OSMO\_A5\_MAX\_KEY\_LEN\_BYTES}]\\
\>\>\>{\em secret key }\\
\>\} \textbf{ osmo\_sub\_auth\_data::gsm}\\
\} \textbf{ osmo\_sub\_auth\_data::u}\\

\end{tabbing}\item 
uint8\+\_\+t \textbf{ osmo\+\_\+auth\+\_\+vector\+::rand} [16]
\begin{DoxyCompactList}\small\item\em random challenge \end{DoxyCompactList}\item 
uint8\+\_\+t \textbf{ osmo\+\_\+auth\+\_\+vector\+::autn} [16]
\begin{DoxyCompactList}\small\item\em authentication nonce \end{DoxyCompactList}\item 
uint8\+\_\+t \textbf{ osmo\+\_\+auth\+\_\+vector\+::ck} [\textbf{ OSMO\+\_\+\+A5\+\_\+\+MAX\+\_\+\+KEY\+\_\+\+LEN\+\_\+\+BYTES}]
\begin{DoxyCompactList}\small\item\em ciphering key \end{DoxyCompactList}\item 
uint8\+\_\+t \textbf{ osmo\+\_\+auth\+\_\+vector\+::ik} [\textbf{ OSMO\+\_\+\+A5\+\_\+\+MAX\+\_\+\+KEY\+\_\+\+LEN\+\_\+\+BYTES}]
\begin{DoxyCompactList}\small\item\em integrity key \end{DoxyCompactList}\item 
uint8\+\_\+t \textbf{ osmo\+\_\+auth\+\_\+vector\+::res} [16]
\begin{DoxyCompactList}\small\item\em authentication result \end{DoxyCompactList}\item 
uint8\+\_\+t \textbf{ osmo\+\_\+auth\+\_\+vector\+::res\+\_\+len}
\begin{DoxyCompactList}\small\item\em length (in bytes) of res\+: 4..16 bytes \end{DoxyCompactList}\item 
uint8\+\_\+t \textbf{ osmo\+\_\+auth\+\_\+vector\+::kc} [8]
\begin{DoxyCompactList}\small\item\em Kc for GSM encryption (A5) \end{DoxyCompactList}\item 
uint8\+\_\+t \textbf{ osmo\+\_\+auth\+\_\+vector\+::sres} [4]
\begin{DoxyCompactList}\small\item\em authentication result for GSM \end{DoxyCompactList}\item 
uint32\+\_\+t \textbf{ osmo\+\_\+auth\+\_\+vector\+::auth\+\_\+types}
\begin{DoxyCompactList}\small\item\em bitmask of OSMO\+\_\+\+AUTH\+\_\+\+TYPE\+\_\+$\ast$ \end{DoxyCompactList}\item 
struct \textbf{ llist\+\_\+head} \textbf{ osmo\+\_\+auth\+\_\+impl\+::list}
\item 
enum \textbf{ osmo\+\_\+auth\+\_\+algo} \textbf{ osmo\+\_\+auth\+\_\+impl\+::algo}
\begin{DoxyCompactList}\small\item\em algorithm we implement \end{DoxyCompactList}\item 
const char $\ast$ \textbf{ osmo\+\_\+auth\+\_\+impl\+::name}
\begin{DoxyCompactList}\small\item\em name of the implementation \end{DoxyCompactList}\item 
unsigned int \textbf{ osmo\+\_\+auth\+\_\+impl\+::priority}
\begin{DoxyCompactList}\small\item\em priority value (resp. \end{DoxyCompactList}\item 
int($\ast$ \textbf{ osmo\+\_\+auth\+\_\+impl\+::gen\+\_\+vec} )(struct \textbf{ osmo\+\_\+auth\+\_\+vector} $\ast$vec, struct \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2} $\ast$aud, const uint8\+\_\+t $\ast$\+\_\+rand)
\begin{DoxyCompactList}\small\item\em callback for generate authentication vectors \end{DoxyCompactList}\item 
int($\ast$ \textbf{ osmo\+\_\+auth\+\_\+impl\+::gen\+\_\+vec\+\_\+auts} )(struct \textbf{ osmo\+\_\+auth\+\_\+vector} $\ast$vec, struct \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2} $\ast$aud, const uint8\+\_\+t $\ast$auts, const uint8\+\_\+t $\ast$rand\+\_\+auts, const uint8\+\_\+t $\ast$\+\_\+rand)
\begin{DoxyCompactList}\small\item\em callback for generating auth vectors + re-\/sync \end{DoxyCompactList}\item 
static struct \textbf{ osmo\+\_\+auth\+\_\+impl} \textbf{ c128v1\+\_\+alg}
\item 
static struct \textbf{ osmo\+\_\+auth\+\_\+impl} \textbf{ c128v2\+\_\+alg}
\item 
static struct \textbf{ osmo\+\_\+auth\+\_\+impl} \textbf{ c128v3\+\_\+alg}
\item 
static struct \textbf{ osmo\+\_\+auth\+\_\+impl} $\ast$ \textbf{ selected\+\_\+auths} [\textbf{ \+\_\+\+OSMO\+\_\+\+AUTH\+\_\+\+ALG\+\_\+\+NUM}]
\item 
static const struct \textbf{ value\+\_\+string} \textbf{ auth\+\_\+alg\+\_\+vals} [$\,$]
\item 
const struct \textbf{ value\+\_\+string} \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+type\+\_\+names} [$\,$]
\item 
static struct \textbf{ osmo\+\_\+auth\+\_\+impl} \textbf{ milenage\+\_\+alg}
\item 
static struct \textbf{ osmo\+\_\+auth\+\_\+impl} \textbf{ tuak\+\_\+alg}
\item 
static struct \textbf{ osmo\+\_\+auth\+\_\+impl} \textbf{ xor\+\_\+alg}
\item 
static struct \textbf{ osmo\+\_\+auth\+\_\+impl} \textbf{ xor2g\+\_\+alg}
\item 
static const uint8\+\_\+t \textbf{ table\+\_\+0} [512]
\item 
static const uint8\+\_\+t \textbf{ table\+\_\+1} [256]
\item 
static const uint8\+\_\+t \textbf{ table\+\_\+2} [128]
\item 
static const uint8\+\_\+t \textbf{ table\+\_\+3} [64]
\item 
static const uint8\+\_\+t \textbf{ table\+\_\+4} [32]
\item 
static const uint8\+\_\+t $\ast$ \textbf{ \+\_\+comp128\+\_\+table} [5] = \{ \textbf{ table\+\_\+0}, \textbf{ table\+\_\+1}, \textbf{ table\+\_\+2}, \textbf{ table\+\_\+3}, \textbf{ table\+\_\+4} \}
\item 
static const uint8\+\_\+t \textbf{ table0} [256]
\item 
static const uint8\+\_\+t \textbf{ table1} [256]
\end{DoxyCompactItemize}


\doxysubsection{Detailed Description}
GSM/\+GPRS/3G authentication core infrastructure. 



\doxysubsection{Macro Definition Documentation}
\mbox{\label{group__auth_ga920ad9bc59d5f523d231a30ab44c9d05}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!OSMO\_A5\_MAX\_KEY\_LEN\_BYTES@{OSMO\_A5\_MAX\_KEY\_LEN\_BYTES}}
\index{OSMO\_A5\_MAX\_KEY\_LEN\_BYTES@{OSMO\_A5\_MAX\_KEY\_LEN\_BYTES}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{OSMO\_A5\_MAX\_KEY\_LEN\_BYTES}
{\footnotesize\ttfamily \#define OSMO\+\_\+\+A5\+\_\+\+MAX\+\_\+\+KEY\+\_\+\+LEN\+\_\+\+BYTES~(128/8)}

\mbox{\label{group__auth_ga143c60fc6f85a76a8f8c97fe005026ae}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!OSMO\_AUTH\_ALG\_XOR@{OSMO\_AUTH\_ALG\_XOR}}
\index{OSMO\_AUTH\_ALG\_XOR@{OSMO\_AUTH\_ALG\_XOR}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{OSMO\_AUTH\_ALG\_XOR}
{\footnotesize\ttfamily \#define OSMO\+\_\+\+AUTH\+\_\+\+ALG\+\_\+\+XOR~\textbf{ OSMO\+\_\+\+AUTH\+\_\+\+ALG\+\_\+\+XOR\+\_\+3G}}

\mbox{\label{group__auth_gafd8f1d573f8d8cd5e92d75208746179d}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!OSMO\_MILENAGE\_IND\_BITLEN\_MAX@{OSMO\_MILENAGE\_IND\_BITLEN\_MAX}}
\index{OSMO\_MILENAGE\_IND\_BITLEN\_MAX@{OSMO\_MILENAGE\_IND\_BITLEN\_MAX}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{OSMO\_MILENAGE\_IND\_BITLEN\_MAX}
{\footnotesize\ttfamily \#define OSMO\+\_\+\+MILENAGE\+\_\+\+IND\+\_\+\+BITLEN\+\_\+\+MAX~28}



\doxysubsection{Enumeration Type Documentation}
\mbox{\label{group__auth_ga6b9985150a3302a8a87bcf8b0a4a50d6}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!osmo\_auth\_algo@{osmo\_auth\_algo}}
\index{osmo\_auth\_algo@{osmo\_auth\_algo}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{osmo\_auth\_algo}
{\footnotesize\ttfamily enum \textbf{ osmo\+\_\+auth\+\_\+algo}}



Authentication Algorithm. 

See also \doxyref{osmo\+\_\+auth\+\_\+alg\+\_\+name()}{p.}{group__auth_ga994867cd1aa5e9a614ee2f41a3607791} and \doxyref{osmo\+\_\+auth\+\_\+alg\+\_\+parse()}{p.}{group__auth_ga5ba41b4cabb7b1bad0a8a1d8425a07ea}. \begin{DoxyEnumFields}{Enumerator}
\raisebox{\heightof{T}}[0pt][0pt]{\index{OSMO\_AUTH\_ALG\_NONE@{OSMO\_AUTH\_ALG\_NONE}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!OSMO\_AUTH\_ALG\_NONE@{OSMO\_AUTH\_ALG\_NONE}}}\mbox{\label{group__auth_gga6b9985150a3302a8a87bcf8b0a4a50d6a4a5e403ae8da719772d1f7360509ffb4}} 
OSMO\+\_\+\+AUTH\+\_\+\+ALG\+\_\+\+NONE&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{OSMO\_AUTH\_ALG\_COMP128v1@{OSMO\_AUTH\_ALG\_COMP128v1}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!OSMO\_AUTH\_ALG\_COMP128v1@{OSMO\_AUTH\_ALG\_COMP128v1}}}\mbox{\label{group__auth_gga6b9985150a3302a8a87bcf8b0a4a50d6a590d6404406268a363252b292e8d3175}} 
OSMO\+\_\+\+AUTH\+\_\+\+ALG\+\_\+\+COMP128v1&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{OSMO\_AUTH\_ALG\_COMP128v2@{OSMO\_AUTH\_ALG\_COMP128v2}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!OSMO\_AUTH\_ALG\_COMP128v2@{OSMO\_AUTH\_ALG\_COMP128v2}}}\mbox{\label{group__auth_gga6b9985150a3302a8a87bcf8b0a4a50d6a174a7ca4699743fc8a4a120f15415e45}} 
OSMO\+\_\+\+AUTH\+\_\+\+ALG\+\_\+\+COMP128v2&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{OSMO\_AUTH\_ALG\_COMP128v3@{OSMO\_AUTH\_ALG\_COMP128v3}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!OSMO\_AUTH\_ALG\_COMP128v3@{OSMO\_AUTH\_ALG\_COMP128v3}}}\mbox{\label{group__auth_gga6b9985150a3302a8a87bcf8b0a4a50d6abceafcf91631fe47a55c0c1f0e18b0e6}} 
OSMO\+\_\+\+AUTH\+\_\+\+ALG\+\_\+\+COMP128v3&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{OSMO\_AUTH\_ALG\_XOR\_3G@{OSMO\_AUTH\_ALG\_XOR\_3G}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!OSMO\_AUTH\_ALG\_XOR\_3G@{OSMO\_AUTH\_ALG\_XOR\_3G}}}\mbox{\label{group__auth_gga6b9985150a3302a8a87bcf8b0a4a50d6a9d7a2c937a546edb83daf59577a7a0db}} 
OSMO\+\_\+\+AUTH\+\_\+\+ALG\+\_\+\+XOR\+\_\+3G&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{OSMO\_AUTH\_ALG\_MILENAGE@{OSMO\_AUTH\_ALG\_MILENAGE}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!OSMO\_AUTH\_ALG\_MILENAGE@{OSMO\_AUTH\_ALG\_MILENAGE}}}\mbox{\label{group__auth_gga6b9985150a3302a8a87bcf8b0a4a50d6af5b18c6ef6b3603c4765c69242d3f254}} 
OSMO\+\_\+\+AUTH\+\_\+\+ALG\+\_\+\+MILENAGE&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{OSMO\_AUTH\_ALG\_XOR\_2G@{OSMO\_AUTH\_ALG\_XOR\_2G}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!OSMO\_AUTH\_ALG\_XOR\_2G@{OSMO\_AUTH\_ALG\_XOR\_2G}}}\mbox{\label{group__auth_gga6b9985150a3302a8a87bcf8b0a4a50d6adfaa1dc4a3dc4e468a01a610f61d3782}} 
OSMO\+\_\+\+AUTH\+\_\+\+ALG\+\_\+\+XOR\+\_\+2G&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{OSMO\_AUTH\_ALG\_TUAK@{OSMO\_AUTH\_ALG\_TUAK}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!OSMO\_AUTH\_ALG\_TUAK@{OSMO\_AUTH\_ALG\_TUAK}}}\mbox{\label{group__auth_gga6b9985150a3302a8a87bcf8b0a4a50d6a626ccdb67e4986eece290a91be71649d}} 
OSMO\+\_\+\+AUTH\+\_\+\+ALG\+\_\+\+TUAK&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{\_OSMO\_AUTH\_ALG\_NUM@{\_OSMO\_AUTH\_ALG\_NUM}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!\_OSMO\_AUTH\_ALG\_NUM@{\_OSMO\_AUTH\_ALG\_NUM}}}\mbox{\label{group__auth_gga6b9985150a3302a8a87bcf8b0a4a50d6af14ebc6a77122a1daaf26d2c80fb61dc}} 
\+\_\+\+OSMO\+\_\+\+AUTH\+\_\+\+ALG\+\_\+\+NUM&\\
\hline

\end{DoxyEnumFields}
\mbox{\label{group__auth_gaaa361da6317c3adf1e53fb6a0325d0ff}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!osmo\_sub\_auth\_type@{osmo\_sub\_auth\_type}}
\index{osmo\_sub\_auth\_type@{osmo\_sub\_auth\_type}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{osmo\_sub\_auth\_type}
{\footnotesize\ttfamily enum \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+type}}



Authentication Type (GSM/\+UMTS) 

\begin{DoxyEnumFields}{Enumerator}
\raisebox{\heightof{T}}[0pt][0pt]{\index{OSMO\_AUTH\_TYPE\_NONE@{OSMO\_AUTH\_TYPE\_NONE}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!OSMO\_AUTH\_TYPE\_NONE@{OSMO\_AUTH\_TYPE\_NONE}}}\mbox{\label{group__auth_ggaaa361da6317c3adf1e53fb6a0325d0ffabff665a821365f0bd09cf607bb82e052}} 
OSMO\+\_\+\+AUTH\+\_\+\+TYPE\+\_\+\+NONE&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{OSMO\_AUTH\_TYPE\_GSM@{OSMO\_AUTH\_TYPE\_GSM}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!OSMO\_AUTH\_TYPE\_GSM@{OSMO\_AUTH\_TYPE\_GSM}}}\mbox{\label{group__auth_ggaaa361da6317c3adf1e53fb6a0325d0ffa57327f1d68fc641f0e59d2332dd1c79a}} 
OSMO\+\_\+\+AUTH\+\_\+\+TYPE\+\_\+\+GSM&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{OSMO\_AUTH\_TYPE\_UMTS@{OSMO\_AUTH\_TYPE\_UMTS}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!OSMO\_AUTH\_TYPE\_UMTS@{OSMO\_AUTH\_TYPE\_UMTS}}}\mbox{\label{group__auth_ggaaa361da6317c3adf1e53fb6a0325d0ffa03c804f89981374b573a0719536cdd09}} 
OSMO\+\_\+\+AUTH\+\_\+\+TYPE\+\_\+\+UMTS&\\
\hline

\end{DoxyEnumFields}


\doxysubsection{Function Documentation}
\mbox{\label{group__auth_ga9ed16867a9394d9ccf1132194edae298}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!\_\_attribute\_\_@{\_\_attribute\_\_}}
\index{\_\_attribute\_\_@{\_\_attribute\_\_}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{\_\_attribute\_\_()}
{\footnotesize\ttfamily static \+\_\+\+\_\+attribute\+\_\+\+\_\+ (\begin{DoxyParamCaption}\item[{(constructor)}]{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ c128v1\+\_\+alg}, and \textbf{ osmo\+\_\+auth\+\_\+register()}.

\mbox{\label{group__auth_ga5e99217608aeb1dabc679eeb9d2b22fd}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!\_comp128\_bitsfrombytes@{\_comp128\_bitsfrombytes}}
\index{\_comp128\_bitsfrombytes@{\_comp128\_bitsfrombytes}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{\_comp128\_bitsfrombytes()}
{\footnotesize\ttfamily static void \+\_\+comp128\+\_\+bitsfrombytes (\begin{DoxyParamCaption}\item[{uint8\+\_\+t $\ast$}]{x,  }\item[{uint8\+\_\+t $\ast$}]{bits }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}



Referenced by \textbf{ comp128v1()}.

\mbox{\label{group__auth_ga7f442d38026c015efd256e76a921990b}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!\_comp128\_compression@{\_comp128\_compression}}
\index{\_comp128\_compression@{\_comp128\_compression}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{\_comp128\_compression()}
{\footnotesize\ttfamily static void \+\_\+comp128\+\_\+compression (\begin{DoxyParamCaption}\item[{uint8\+\_\+t $\ast$}]{x }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}



References \textbf{ \+\_\+comp128\+\_\+compression\+\_\+round()}, \textbf{ \+\_\+comp128\+\_\+table}, and \textbf{ n}.



Referenced by \textbf{ comp128v1()}.

\mbox{\label{group__auth_ga0304701c01325fbee210e956ecfb5d8a}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!\_comp128\_compression\_round@{\_comp128\_compression\_round}}
\index{\_comp128\_compression\_round@{\_comp128\_compression\_round}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{\_comp128\_compression\_round()}
{\footnotesize\ttfamily static void \+\_\+comp128\+\_\+compression\+\_\+round (\begin{DoxyParamCaption}\item[{uint8\+\_\+t $\ast$}]{x,  }\item[{int}]{n,  }\item[{const uint8\+\_\+t $\ast$}]{tbl }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}



References \textbf{ n}.



Referenced by \textbf{ \+\_\+comp128\+\_\+compression()}.

\mbox{\label{group__auth_ga4c473f3b288df76d3bed9004d14ac1e5}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!\_comp128\_permutation@{\_comp128\_permutation}}
\index{\_comp128\_permutation@{\_comp128\_permutation}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{\_comp128\_permutation()}
{\footnotesize\ttfamily static void \+\_\+comp128\+\_\+permutation (\begin{DoxyParamCaption}\item[{uint8\+\_\+t $\ast$}]{x,  }\item[{uint8\+\_\+t $\ast$}]{bits }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}



Referenced by \textbf{ comp128v1()}.

\mbox{\label{group__auth_gab01ec510cfe7a8d4f60b449932b58c71}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!\_comp128v23\_internal@{\_comp128v23\_internal}}
\index{\_comp128v23\_internal@{\_comp128v23\_internal}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{\_comp128v23\_internal()}
{\footnotesize\ttfamily static void \+\_\+comp128v23\+\_\+internal (\begin{DoxyParamCaption}\item[{uint8\+\_\+t $\ast$}]{output,  }\item[{const uint8\+\_\+t $\ast$}]{kxor,  }\item[{const uint8\+\_\+t $\ast$}]{rand }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ table0}, and \textbf{ table1}.



Referenced by \textbf{ comp128v3()}.

\mbox{\label{group__auth_ga6fa92175490e4c99e2c60858b8430eb3}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!auth\_data2auth\_data2@{auth\_data2auth\_data2}}
\index{auth\_data2auth\_data2@{auth\_data2auth\_data2}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{auth\_data2auth\_data2()}
{\footnotesize\ttfamily static int auth\+\_\+data2auth\+\_\+data2 (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2} $\ast$}]{out,  }\item[{const struct \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data} $\ast$}]{in }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::algo}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data\+::algo}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::amf}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data\+::amf}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::gsm}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data\+::gsm}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::ind}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data\+::ind}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::ind\+\_\+bitlen}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data\+::ind\+\_\+bitlen}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::k}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data\+::k}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::k\+\_\+len}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::ki}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data\+::ki}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data\+::opc}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::opc}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::opc\+\_\+is\+\_\+op}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data\+::opc\+\_\+is\+\_\+op}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::opc\+\_\+len}, \textbf{ OSMO\+\_\+\+AUTH\+\_\+\+TYPE\+\_\+\+GSM}, \textbf{ OSMO\+\_\+\+AUTH\+\_\+\+TYPE\+\_\+\+NONE}, \textbf{ OSMO\+\_\+\+AUTH\+\_\+\+TYPE\+\_\+\+UMTS}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::sqn}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data\+::sqn}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::sqn\+\_\+ms}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data\+::sqn\+\_\+ms}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::type}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data\+::type}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::u}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data\+::u}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::umts}, and \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data\+::umts}.



Referenced by \textbf{ osmo\+\_\+auth\+\_\+gen\+\_\+vec()}, and \textbf{ osmo\+\_\+auth\+\_\+gen\+\_\+vec\+\_\+auts()}.

\mbox{\label{group__auth_ga62f76a98b9b77e721c6be6248ac99afc}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!c128v1\_gen\_vec@{c128v1\_gen\_vec}}
\index{c128v1\_gen\_vec@{c128v1\_gen\_vec}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{c128v1\_gen\_vec()}
{\footnotesize\ttfamily static int c128v1\+\_\+gen\+\_\+vec (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+auth\+\_\+vector} $\ast$}]{vec,  }\item[{struct \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2} $\ast$}]{aud,  }\item[{const uint8\+\_\+t $\ast$}]{\+\_\+rand }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::algo}, \textbf{ osmo\+\_\+auth\+\_\+vector\+::auth\+\_\+types}, \textbf{ comp128v1()}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::gsm}, \textbf{ osmo\+\_\+auth\+\_\+vector\+::kc}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::ki}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ OSMO\+\_\+\+AUTH\+\_\+\+ALG\+\_\+\+COMP128v1}, \textbf{ OSMO\+\_\+\+AUTH\+\_\+\+TYPE\+\_\+\+GSM}, \textbf{ osmo\+\_\+auth\+\_\+vector\+::sres}, and \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::u}.

\mbox{\label{group__auth_ga9cceac217ecf4ba7740e53d6703ea7c1}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!c128v2\_gen\_vec@{c128v2\_gen\_vec}}
\index{c128v2\_gen\_vec@{c128v2\_gen\_vec}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{c128v2\_gen\_vec()}
{\footnotesize\ttfamily static int c128v2\+\_\+gen\+\_\+vec (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+auth\+\_\+vector} $\ast$}]{vec,  }\item[{struct \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2} $\ast$}]{aud,  }\item[{const uint8\+\_\+t $\ast$}]{\+\_\+rand }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::algo}, \textbf{ osmo\+\_\+auth\+\_\+vector\+::auth\+\_\+types}, \textbf{ comp128v2()}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::gsm}, \textbf{ osmo\+\_\+auth\+\_\+vector\+::kc}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::ki}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ OSMO\+\_\+\+AUTH\+\_\+\+ALG\+\_\+\+COMP128v2}, \textbf{ OSMO\+\_\+\+AUTH\+\_\+\+TYPE\+\_\+\+GSM}, \textbf{ osmo\+\_\+auth\+\_\+vector\+::sres}, and \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::u}.

\mbox{\label{group__auth_ga0d7d600731dfb2d0ca3e7edc1cece980}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!c128v3\_gen\_vec@{c128v3\_gen\_vec}}
\index{c128v3\_gen\_vec@{c128v3\_gen\_vec}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{c128v3\_gen\_vec()}
{\footnotesize\ttfamily static int c128v3\+\_\+gen\+\_\+vec (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+auth\+\_\+vector} $\ast$}]{vec,  }\item[{struct \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2} $\ast$}]{aud,  }\item[{const uint8\+\_\+t $\ast$}]{\+\_\+rand }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::algo}, \textbf{ osmo\+\_\+auth\+\_\+vector\+::auth\+\_\+types}, \textbf{ comp128v3()}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::gsm}, \textbf{ osmo\+\_\+auth\+\_\+vector\+::kc}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::ki}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ OSMO\+\_\+\+AUTH\+\_\+\+ALG\+\_\+\+COMP128v3}, \textbf{ OSMO\+\_\+\+AUTH\+\_\+\+TYPE\+\_\+\+GSM}, \textbf{ osmo\+\_\+auth\+\_\+vector\+::sres}, and \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::u}.

\mbox{\label{group__auth_ga58c9a1c7cfbda7da0601b0ae84d7dc3a}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!c5\_function@{c5\_function}}
\index{c5\_function@{c5\_function}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{c5\_function()}
{\footnotesize\ttfamily static void c5\+\_\+function (\begin{DoxyParamCaption}\item[{uint8\+\_\+t $\ast$}]{ik,  }\item[{const uint8\+\_\+t $\ast$}]{kc }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}



Referenced by \textbf{ osmo\+\_\+auth\+\_\+3g\+\_\+from\+\_\+2g()}.

\mbox{\label{group__auth_ga1961767bf30fc3c7af6309689cec82ef}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!comp128@{comp128}}
\index{comp128@{comp128}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{comp128()}
{\footnotesize\ttfamily void comp128 (\begin{DoxyParamCaption}\item[{const uint8\+\_\+t $\ast$}]{ki,  }\item[{const uint8\+\_\+t $\ast$}]{rand,  }\item[{uint8\+\_\+t $\ast$}]{sres,  }\item[{uint8\+\_\+t $\ast$}]{kc }\end{DoxyParamCaption})}



Perform COMP128v1 algorithm. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em ki} & Secret Key K(i) of subscriber \\
\hline
\mbox{\texttt{ in}}  & {\em rand} & Random Challenge \\
\hline
\mbox{\texttt{ out}}  & {\em sres} & user-\/supplied buffer for storing computed SRES value \\
\hline
\mbox{\texttt{ out}}  & {\em kc} & user-\/supplied buffer for storing computed Kc value \\
\hline
\end{DoxyParams}


References \textbf{ comp128v1()}, and \textbf{ sres}.

\mbox{\label{group__auth_gae6055f97427469f1aae0a21faabc9fce}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!comp128v1@{comp128v1}}
\index{comp128v1@{comp128v1}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{comp128v1()}
{\footnotesize\ttfamily void comp128v1 (\begin{DoxyParamCaption}\item[{const uint8\+\_\+t $\ast$}]{ki,  }\item[{const uint8\+\_\+t $\ast$}]{rand,  }\item[{uint8\+\_\+t $\ast$}]{sres,  }\item[{uint8\+\_\+t $\ast$}]{kc }\end{DoxyParamCaption})}



Perform COMP128v1 algorithm. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em ki} & Secret Key K(i) of subscriber \\
\hline
\mbox{\texttt{ in}}  & {\em rand} & Random Challenge \\
\hline
\mbox{\texttt{ out}}  & {\em sres} & user-\/supplied buffer for storing computed SRES value \\
\hline
\mbox{\texttt{ out}}  & {\em kc} & user-\/supplied buffer for storing computed Kc value \\
\hline
\end{DoxyParams}


References \textbf{ \+\_\+comp128\+\_\+bitsfrombytes()}, \textbf{ \+\_\+comp128\+\_\+compression()}, \textbf{ \+\_\+comp128\+\_\+permutation()}, and \textbf{ sres}.



Referenced by \textbf{ c128v1\+\_\+gen\+\_\+vec()}, and \textbf{ comp128()}.

\mbox{\label{group__auth_gabe3207d7dac26dbf7aaac3d12eb9e962}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!comp128v2@{comp128v2}}
\index{comp128v2@{comp128v2}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{comp128v2()}
{\footnotesize\ttfamily int comp128v2 (\begin{DoxyParamCaption}\item[{const uint8\+\_\+t $\ast$}]{ki,  }\item[{const uint8\+\_\+t $\ast$}]{rand,  }\item[{uint8\+\_\+t $\ast$}]{sres,  }\item[{uint8\+\_\+t $\ast$}]{kc }\end{DoxyParamCaption})}



Perform COMP128v2 algorithm. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em ki} & Secret Key K(i) of subscriber \\
\hline
\mbox{\texttt{ in}}  & {\em rand} & Random Challenge \\
\hline
\mbox{\texttt{ out}}  & {\em sres} & user-\/supplied buffer for storing computed SRES value \\
\hline
\mbox{\texttt{ out}}  & {\em kc} & user-\/supplied buffer for storing computed Kc value \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
0 
\end{DoxyReturn}


References \textbf{ comp128v3()}, and \textbf{ sres}.



Referenced by \textbf{ c128v2\+\_\+gen\+\_\+vec()}.

\mbox{\label{group__auth_ga821a0548508a79a13cc8d8b23d90ab0c}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!comp128v3@{comp128v3}}
\index{comp128v3@{comp128v3}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{comp128v3()}
{\footnotesize\ttfamily int comp128v3 (\begin{DoxyParamCaption}\item[{const uint8\+\_\+t $\ast$}]{ki,  }\item[{const uint8\+\_\+t $\ast$}]{rand,  }\item[{uint8\+\_\+t $\ast$}]{sres,  }\item[{uint8\+\_\+t $\ast$}]{kc }\end{DoxyParamCaption})}



Perform COMP128v3 algorithm. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em ki} & Secret Key K(i) of subscriber \\
\hline
\mbox{\texttt{ in}}  & {\em rand} & Random Challenge \\
\hline
\mbox{\texttt{ out}}  & {\em sres} & user-\/supplied buffer for storing computed SRES value \\
\hline
\mbox{\texttt{ out}}  & {\em kc} & user-\/supplied buffer for storing computed Kc value \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
0 
\end{DoxyReturn}


References \textbf{ \+\_\+comp128v23\+\_\+internal()}, and \textbf{ sres}.



Referenced by \textbf{ c128v3\+\_\+gen\+\_\+vec()}, and \textbf{ comp128v2()}.

\mbox{\label{group__auth_gaa5bdf73c23c626f4b2b5540b8ff4b929}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!gen\_opc\_if\_needed@{gen\_opc\_if\_needed}}
\index{gen\_opc\_if\_needed@{gen\_opc\_if\_needed}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{gen\_opc\_if\_needed()}
{\footnotesize\ttfamily static const uint8\+\_\+t $\ast$ gen\+\_\+opc\+\_\+if\+\_\+needed (\begin{DoxyParamCaption}\item[{const struct \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2} $\ast$}]{aud,  }\item[{uint8\+\_\+t $\ast$}]{gen\+\_\+opc }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::k}, \textbf{ milenage\+\_\+opc\+\_\+gen()}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::opc}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::opc\+\_\+is\+\_\+op}, \textbf{ OSMO\+\_\+\+AUTH\+\_\+\+TYPE\+\_\+\+UMTS}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::type}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::u}, and \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::umts}.



Referenced by \textbf{ milenage\+\_\+gen\+\_\+vec()}, and \textbf{ milenage\+\_\+gen\+\_\+vec\+\_\+auts()}.

\mbox{\label{group__auth_ga36d159f6f94da3bab926ad2577e82ac4}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!LLIST\_HEAD@{LLIST\_HEAD}}
\index{LLIST\_HEAD@{LLIST\_HEAD}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{LLIST\_HEAD()}
{\footnotesize\ttfamily static LLIST\+\_\+\+HEAD (\begin{DoxyParamCaption}\item[{osmo\+\_\+auths}]{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}

\mbox{\label{group__auth_gac3f6ead738d9c3af73e51d92a75b673e}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!milenage\_gen\_vec@{milenage\_gen\_vec}}
\index{milenage\_gen\_vec@{milenage\_gen\_vec}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{milenage\_gen\_vec()}
{\footnotesize\ttfamily static int milenage\+\_\+gen\+\_\+vec (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+auth\+\_\+vector} $\ast$}]{vec,  }\item[{struct \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2} $\ast$}]{aud,  }\item[{const uint8\+\_\+t $\ast$}]{\+\_\+rand }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::algo}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::amf}, \textbf{ osmo\+\_\+auth\+\_\+vector\+::auth\+\_\+types}, \textbf{ osmo\+\_\+auth\+\_\+vector\+::autn}, \textbf{ osmo\+\_\+auth\+\_\+vector\+::ck}, \textbf{ gen\+\_\+opc\+\_\+if\+\_\+needed()}, \textbf{ osmo\+\_\+auth\+\_\+vector\+::ik}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::ind}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::ind\+\_\+bitlen}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::k}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::k\+\_\+len}, \textbf{ osmo\+\_\+auth\+\_\+vector\+::kc}, \textbf{ milenage\+\_\+generate()}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::opc\+\_\+len}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ OSMO\+\_\+\+AUTH\+\_\+\+ALG\+\_\+\+MILENAGE}, \textbf{ osmo\+\_\+auth\+\_\+c2()}, \textbf{ osmo\+\_\+auth\+\_\+c3()}, \textbf{ OSMO\+\_\+\+AUTH\+\_\+\+TYPE\+\_\+\+GSM}, \textbf{ OSMO\+\_\+\+AUTH\+\_\+\+TYPE\+\_\+\+UMTS}, \textbf{ OSMO\+\_\+\+MILENAGE\+\_\+\+IND\+\_\+\+BITLEN\+\_\+\+MAX}, \textbf{ osmo\+\_\+auth\+\_\+vector\+::res}, \textbf{ osmo\+\_\+auth\+\_\+vector\+::res\+\_\+len}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::sqn}, \textbf{ osmo\+\_\+auth\+\_\+vector\+::sres}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::u}, and \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::umts}.



Referenced by \textbf{ milenage\+\_\+gen\+\_\+vec\+\_\+auts()}.

\mbox{\label{group__auth_ga2ea34c4f1b365b2b3df314f0667e792b}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!milenage\_gen\_vec\_auts@{milenage\_gen\_vec\_auts}}
\index{milenage\_gen\_vec\_auts@{milenage\_gen\_vec\_auts}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{milenage\_gen\_vec\_auts()}
{\footnotesize\ttfamily static int milenage\+\_\+gen\+\_\+vec\+\_\+auts (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+auth\+\_\+vector} $\ast$}]{vec,  }\item[{struct \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2} $\ast$}]{aud,  }\item[{const uint8\+\_\+t $\ast$}]{auts,  }\item[{const uint8\+\_\+t $\ast$}]{rand\+\_\+auts,  }\item[{const uint8\+\_\+t $\ast$}]{\+\_\+rand }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::algo}, \textbf{ gen\+\_\+opc\+\_\+if\+\_\+needed()}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::k}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::k\+\_\+len}, \textbf{ milenage\+\_\+auts()}, \textbf{ milenage\+\_\+gen\+\_\+vec()}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::opc\+\_\+len}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ OSMO\+\_\+\+AUTH\+\_\+\+ALG\+\_\+\+MILENAGE}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::sqn}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::sqn\+\_\+ms}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::u}, and \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::umts}.

\mbox{\label{group__auth_gabe3ad0d5150ffe844a8537cc6f485b95}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!osmo\_auth\_3g\_from\_2g@{osmo\_auth\_3g\_from\_2g}}
\index{osmo\_auth\_3g\_from\_2g@{osmo\_auth\_3g\_from\_2g}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{osmo\_auth\_3g\_from\_2g()}
{\footnotesize\ttfamily int osmo\+\_\+auth\+\_\+3g\+\_\+from\+\_\+2g (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+auth\+\_\+vector} $\ast$}]{vec }\end{DoxyParamCaption})}



Generate 3G CK + IK from 2G authentication vector. 


\begin{DoxyParams}{Parameters}
{\em vec} & Authentication Vector to be modified \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
1 if the vector was changed, 0 otherwise
\end{DoxyReturn}
This function performs the C5 and C4 functions to derive the UMTS key material from the GSM key material in the supplied vector, {\itshape if} the input vector doesn\textquotesingle{}t yet have UMTS authentication capability. 

References \textbf{ osmo\+\_\+auth\+\_\+vector\+::auth\+\_\+types}, \textbf{ c5\+\_\+function()}, \textbf{ osmo\+\_\+auth\+\_\+vector\+::ck}, \textbf{ osmo\+\_\+auth\+\_\+vector\+::ik}, \textbf{ osmo\+\_\+auth\+\_\+vector\+::kc}, \textbf{ OSMO\+\_\+\+AUTH\+\_\+\+TYPE\+\_\+\+GSM}, \textbf{ OSMO\+\_\+\+AUTH\+\_\+\+TYPE\+\_\+\+UMTS}, and \textbf{ osmo\+\_\+c4()}.

\mbox{\label{group__auth_ga994867cd1aa5e9a614ee2f41a3607791}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!osmo\_auth\_alg\_name@{osmo\_auth\_alg\_name}}
\index{osmo\_auth\_alg\_name@{osmo\_auth\_alg\_name}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{osmo\_auth\_alg\_name()}
{\footnotesize\ttfamily const char $\ast$ osmo\+\_\+auth\+\_\+alg\+\_\+name (\begin{DoxyParamCaption}\item[{enum \textbf{ osmo\+\_\+auth\+\_\+algo}}]{alg }\end{DoxyParamCaption})}



Get human-\/readable name of authentication algorithm. 



References \textbf{ auth\+\_\+alg\+\_\+vals}, and \textbf{ get\+\_\+value\+\_\+string()}.

\mbox{\label{group__auth_ga5ba41b4cabb7b1bad0a8a1d8425a07ea}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!osmo\_auth\_alg\_parse@{osmo\_auth\_alg\_parse}}
\index{osmo\_auth\_alg\_parse@{osmo\_auth\_alg\_parse}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{osmo\_auth\_alg\_parse()}
{\footnotesize\ttfamily enum \textbf{ osmo\+\_\+auth\+\_\+algo} osmo\+\_\+auth\+\_\+alg\+\_\+parse (\begin{DoxyParamCaption}\item[{const char $\ast$}]{name }\end{DoxyParamCaption})}



Parse human-\/readable name of authentication algorithm. 



References \textbf{ auth\+\_\+alg\+\_\+vals}, \textbf{ get\+\_\+string\+\_\+value()}, and \textbf{ name}.

\mbox{\label{group__auth_gae9715795e16a46f78ddf24d7ab77d127}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!osmo\_auth\_c2@{osmo\_auth\_c2}}
\index{osmo\_auth\_c2@{osmo\_auth\_c2}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{osmo\_auth\_c2()}
{\footnotesize\ttfamily void osmo\+\_\+auth\+\_\+c2 (\begin{DoxyParamCaption}\item[{uint8\+\_\+t}]{sres[4],  }\item[{const uint8\+\_\+t $\ast$}]{res,  }\item[{size\+\_\+t}]{res\+\_\+len,  }\item[{uint8\+\_\+t}]{sres\+\_\+deriv\+\_\+func }\end{DoxyParamCaption})}



Derive GSM SRES from UMTS [X]RES (auth function c2 from 3GPP TS 33.\+103 Section 6.\+8.\+1.\+2. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ out}}  & {\em sres} & GSM SRES value, 4 byte target buffer \\
\hline
\mbox{\texttt{ in}}  & {\em res} & UMTS XRES, 4..16 bytes input buffer \\
\hline
\mbox{\texttt{ in}}  & {\em res\+\_\+len} & length of res parameter (in bytes) \\
\hline
\mbox{\texttt{ in}}  & {\em sres\+\_\+deriv\+\_\+func} & SRES derivation function (1 or 2, see 3GPP TS 55.\+205 Section 4 \\
\hline
\end{DoxyParams}


References \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ res}, and \textbf{ sres}.



Referenced by \textbf{ gsm\+\_\+milenage()}, \textbf{ milenage\+\_\+gen\+\_\+vec()}, and \textbf{ tuak\+\_\+gen\+\_\+vec()}.

\mbox{\label{group__auth_ga5cc1d918b10f6b7dd52360f2a1910dba}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!osmo\_auth\_c3@{osmo\_auth\_c3}}
\index{osmo\_auth\_c3@{osmo\_auth\_c3}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{osmo\_auth\_c3()}
{\footnotesize\ttfamily void osmo\+\_\+auth\+\_\+c3 (\begin{DoxyParamCaption}\item[{uint8\+\_\+t}]{kc[$\,$],  }\item[{const uint8\+\_\+t}]{ck[$\,$],  }\item[{const uint8\+\_\+t}]{ik[$\,$] }\end{DoxyParamCaption})}



Referenced by \textbf{ gsm\+\_\+milenage()}, \textbf{ milenage\+\_\+gen\+\_\+vec()}, \textbf{ tuak\+\_\+gen\+\_\+vec()}, and \textbf{ xor\+\_\+gen\+\_\+vec()}.

\mbox{\label{group__auth_ga0ec223fc54378e524c919349a7386a01}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!osmo\_auth\_gen\_vec@{osmo\_auth\_gen\_vec}}
\index{osmo\_auth\_gen\_vec@{osmo\_auth\_gen\_vec}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{osmo\_auth\_gen\_vec()}
{\footnotesize\ttfamily int osmo\+\_\+auth\+\_\+gen\+\_\+vec (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+auth\+\_\+vector} $\ast$}]{vec,  }\item[{struct \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data} $\ast$}]{aud,  }\item[{const uint8\+\_\+t $\ast$}]{\+\_\+rand }\end{DoxyParamCaption})}



Generate authentication vector. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ out}}  & {\em vec} & Generated authentication vector \\
\hline
\mbox{\texttt{ in}}  & {\em aud} & Subscriber-\/specific key material \\
\hline
\mbox{\texttt{ in}}  & {\em \+\_\+rand} & Random challenge to be used \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
0 on success, negative error on failure
\end{DoxyReturn}
This function performs the core cryptographic function of the AUC, computing authentication triples/quintuples based on the permanent subscriber data and a random value. The result is what is forwarded by the AUC via HLR and VLR to the MSC which will then be able to invoke authentication with the MS 

References \textbf{ auth\+\_\+data2auth\+\_\+data2()}, \textbf{ osmo\+\_\+auth\+\_\+gen\+\_\+vec2()}, \textbf{ OSMO\+\_\+\+AUTH\+\_\+\+TYPE\+\_\+\+UMTS}, \textbf{ osmo\+\_\+auth\+\_\+vector\+::res\+\_\+len}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::sqn}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data\+::sqn}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data\+::type}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::u}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data\+::u}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::umts}, and \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data\+::umts}.



Referenced by \textbf{ oap\+\_\+evaluate\+\_\+challenge()}.

\mbox{\label{group__auth_ga351dc22cac23a5bde8483c5bee6cb8d2}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!osmo\_auth\_gen\_vec2@{osmo\_auth\_gen\_vec2}}
\index{osmo\_auth\_gen\_vec2@{osmo\_auth\_gen\_vec2}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{osmo\_auth\_gen\_vec2()}
{\footnotesize\ttfamily int osmo\+\_\+auth\+\_\+gen\+\_\+vec2 (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+auth\+\_\+vector} $\ast$}]{vec,  }\item[{struct \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2} $\ast$}]{aud,  }\item[{const uint8\+\_\+t $\ast$}]{\+\_\+rand }\end{DoxyParamCaption})}



Generate authentication vector. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ out}}  & {\em vec} & Generated authentication vector. See below! \\
\hline
\mbox{\texttt{ in}}  & {\em aud} & Subscriber-\/specific key material \\
\hline
\mbox{\texttt{ in}}  & {\em \+\_\+rand} & Random challenge to be used \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
0 on success, negative error on failure
\end{DoxyReturn}
This function performs the core cryptographic function of the AUC, computing authentication triples/quintuples based on the permanent subscriber data and a random value. The result is what is forwarded by the AUC via HLR and VLR to the MSC which will then be able to invoke authentication with the MS.

Contrary to the older \doxyref{osmo\+\_\+auth\+\_\+gen\+\_\+vec()}{p.}{group__auth_ga0ec223fc54378e524c919349a7386a01}, the caller must specify the desired RES length in the vec-\/$>$res\+\_\+len field prior to calling this function. The requested length must match the capabilities of the chosen algorithm (e.\+g. 4/8 for MILENAGE). 

References \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::algo}, \textbf{ osmo\+\_\+auth\+\_\+impl\+::gen\+\_\+vec}, \textbf{ osmo\+\_\+auth\+\_\+vector\+::rand}, and \textbf{ selected\+\_\+auths}.



Referenced by \textbf{ osmo\+\_\+auth\+\_\+gen\+\_\+vec()}.

\mbox{\label{group__auth_gaad42c206b8d9ba81752aee3aae5d6d5f}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!osmo\_auth\_gen\_vec\_auts@{osmo\_auth\_gen\_vec\_auts}}
\index{osmo\_auth\_gen\_vec\_auts@{osmo\_auth\_gen\_vec\_auts}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{osmo\_auth\_gen\_vec\_auts()}
{\footnotesize\ttfamily int osmo\+\_\+auth\+\_\+gen\+\_\+vec\+\_\+auts (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+auth\+\_\+vector} $\ast$}]{vec,  }\item[{struct \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data} $\ast$}]{aud,  }\item[{const uint8\+\_\+t $\ast$}]{auts,  }\item[{const uint8\+\_\+t $\ast$}]{rand\+\_\+auts,  }\item[{const uint8\+\_\+t $\ast$}]{\+\_\+rand }\end{DoxyParamCaption})}



Generate authentication vector and re-\/sync sequence. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ out}}  & {\em vec} & Generated authentication vector \\
\hline
\mbox{\texttt{ in}}  & {\em aud} & Subscriber-\/specific key material \\
\hline
\mbox{\texttt{ in}}  & {\em auts} & AUTS value sent by the SIM/\+MS \\
\hline
\mbox{\texttt{ in}}  & {\em rand\+\_\+auts} & RAND value sent by the SIM/\+MS \\
\hline
\mbox{\texttt{ in}}  & {\em \+\_\+rand} & Random challenge to be used to generate vector \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
0 on success, negative error on failure
\end{DoxyReturn}
This function performs a special variant of the core cryptographic function of the AUC\+: computing authentication triples/quintuples based on the permanent subscriber data, a random value as well as the AUTS and RAND values returned by the SIM/\+MS. This special variant is needed if the sequence numbers between MS and AUC have for some reason become different. 

References \textbf{ auth\+\_\+data2auth\+\_\+data2()}, \textbf{ osmo\+\_\+auth\+\_\+gen\+\_\+vec\+\_\+auts2()}, \textbf{ OSMO\+\_\+\+AUTH\+\_\+\+TYPE\+\_\+\+UMTS}, \textbf{ osmo\+\_\+auth\+\_\+vector\+::res\+\_\+len}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::sqn}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data\+::sqn}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::sqn\+\_\+ms}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data\+::sqn\+\_\+ms}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data\+::type}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::u}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data\+::u}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::umts}, and \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data\+::umts}.

\mbox{\label{group__auth_ga5f2ae637fa4e65483fd404611c828020}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!osmo\_auth\_gen\_vec\_auts2@{osmo\_auth\_gen\_vec\_auts2}}
\index{osmo\_auth\_gen\_vec\_auts2@{osmo\_auth\_gen\_vec\_auts2}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{osmo\_auth\_gen\_vec\_auts2()}
{\footnotesize\ttfamily int osmo\+\_\+auth\+\_\+gen\+\_\+vec\+\_\+auts2 (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+auth\+\_\+vector} $\ast$}]{vec,  }\item[{struct \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2} $\ast$}]{aud,  }\item[{const uint8\+\_\+t $\ast$}]{auts,  }\item[{const uint8\+\_\+t $\ast$}]{rand\+\_\+auts,  }\item[{const uint8\+\_\+t $\ast$}]{\+\_\+rand }\end{DoxyParamCaption})}



Generate authentication vector and re-\/sync sequence. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ out}}  & {\em vec} & Generated authentication vector. See below! \\
\hline
\mbox{\texttt{ in}}  & {\em aud} & Subscriber-\/specific key material \\
\hline
\mbox{\texttt{ in}}  & {\em auts} & AUTS value sent by the SIM/\+MS \\
\hline
\mbox{\texttt{ in}}  & {\em rand\+\_\+auts} & RAND value sent by the SIM/\+MS \\
\hline
\mbox{\texttt{ in}}  & {\em \+\_\+rand} & Random challenge to be used to generate vector \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
0 on success, negative error on failure
\end{DoxyReturn}
This function performs a special variant of the core cryptographic function of the AUC\+: computing authentication triples/quintuples based on the permanent subscriber data, a random value as well as the AUTS and RAND values returned by the SIM/\+MS. This special variant is needed if the sequence numbers between MS and AUC have for some reason become different.

Contrary to the older \doxyref{osmo\+\_\+auth\+\_\+gen\+\_\+vec\+\_\+auts()}{p.}{group__auth_gaad42c206b8d9ba81752aee3aae5d6d5f}, the caller must specify the desired RES length in the vec-\/$>$res\+\_\+len field prior to calling this function. The requested length must match the capabilities of the chosen algorithm (e.\+g. 4/8 for MILENAGE). 

References \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::algo}, \textbf{ osmo\+\_\+auth\+\_\+impl\+::gen\+\_\+vec\+\_\+auts}, \textbf{ osmo\+\_\+auth\+\_\+vector\+::rand}, and \textbf{ selected\+\_\+auths}.



Referenced by \textbf{ osmo\+\_\+auth\+\_\+gen\+\_\+vec\+\_\+auts()}.

\mbox{\label{group__auth_ga83e136ee2ee55df7fcb4bc2721c83aa0}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!osmo\_auth\_load@{osmo\_auth\_load}}
\index{osmo\_auth\_load@{osmo\_auth\_load}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{osmo\_auth\_load()}
{\footnotesize\ttfamily int osmo\+\_\+auth\+\_\+load (\begin{DoxyParamCaption}\item[{const char $\ast$}]{path }\end{DoxyParamCaption})}



Load all available authentication plugins from the given path. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em path} & Path name of the directory containing the plugins \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
number of plugins loaded in case of success, negative in case of error
\end{DoxyReturn}
This function will load all plugins contained in the specified path. 

References \textbf{ osmo\+\_\+plugin\+\_\+load\+\_\+all()}.

\mbox{\label{group__auth_ga03ac5ccce18a8af0c4d0fc524f52033e}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!osmo\_auth\_register@{osmo\_auth\_register}}
\index{osmo\_auth\_register@{osmo\_auth\_register}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{osmo\_auth\_register()}
{\footnotesize\ttfamily int osmo\+\_\+auth\+\_\+register (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+auth\+\_\+impl} $\ast$}]{impl }\end{DoxyParamCaption})}



Register an authentication algorithm implementation with the core. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em impl} & Structure describing implementation and it\textquotesingle{}s callbacks \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
0 on success, or a negative error code on failure
\end{DoxyReturn}
This function is called by an authentication implementation plugin to register itself with the authentication core. 

References \textbf{ osmo\+\_\+auth\+\_\+impl\+::algo}, \textbf{ ARRAY\+\_\+\+SIZE}, \textbf{ osmo\+\_\+auth\+\_\+impl\+::list}, \textbf{ llist\+\_\+add\+\_\+tail()}, \textbf{ osmo\+\_\+auth\+\_\+impl\+::priority}, and \textbf{ selected\+\_\+auths}.



Referenced by \textbf{ \+\_\+\+\_\+attribute\+\_\+\+\_\+()}.

\mbox{\label{group__auth_ga0a0f74a4d32f663db22b58b6de75a9ac}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!osmo\_auth\_supported@{osmo\_auth\_supported}}
\index{osmo\_auth\_supported@{osmo\_auth\_supported}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{osmo\_auth\_supported()}
{\footnotesize\ttfamily int osmo\+\_\+auth\+\_\+supported (\begin{DoxyParamCaption}\item[{enum \textbf{ osmo\+\_\+auth\+\_\+algo}}]{algo }\end{DoxyParamCaption})}



Determine if a given authentication algorithm is supported. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em algo} & Algorithm which should be checked \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
1 if algo is supported, 0 if not, negative error on failure
\end{DoxyReturn}
This function is used by an application to determine at runtime if a given authentication algorithm is supported or not. 

References \textbf{ osmo\+\_\+auth\+\_\+impl\+::algo}, \textbf{ ARRAY\+\_\+\+SIZE}, and \textbf{ selected\+\_\+auths}.

\mbox{\label{group__auth_gaa651ab6eb7e2a9a83c6e0810f05edc88}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!osmo\_c4@{osmo\_c4}}
\index{osmo\_c4@{osmo\_c4}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{osmo\_c4()}
{\footnotesize\ttfamily void osmo\+\_\+c4 (\begin{DoxyParamCaption}\item[{uint8\+\_\+t $\ast$}]{ck,  }\item[{const uint8\+\_\+t $\ast$}]{kc }\end{DoxyParamCaption})}



Referenced by \textbf{ \+\_\+a5\+\_\+3()}, \textbf{ gea3()}, and \textbf{ osmo\+\_\+auth\+\_\+3g\+\_\+from\+\_\+2g()}.

\mbox{\label{group__auth_ga0db36ada5479c06f370184fe331032f0}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!osmo\_sub\_auth\_type\_name@{osmo\_sub\_auth\_type\_name}}
\index{osmo\_sub\_auth\_type\_name@{osmo\_sub\_auth\_type\_name}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{osmo\_sub\_auth\_type\_name()}
{\footnotesize\ttfamily static const char $\ast$ osmo\+\_\+sub\+\_\+auth\+\_\+type\+\_\+name (\begin{DoxyParamCaption}\item[{enum \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+type}}]{val }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}



References \textbf{ get\+\_\+value\+\_\+string()}, and \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+type\+\_\+names}.

\mbox{\label{group__auth_ga8a56dff2af116920f7d1859e9d310b4c}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!tuak\_gen\_vec@{tuak\_gen\_vec}}
\index{tuak\_gen\_vec@{tuak\_gen\_vec}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{tuak\_gen\_vec()}
{\footnotesize\ttfamily static int tuak\+\_\+gen\+\_\+vec (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+auth\+\_\+vector} $\ast$}]{vec,  }\item[{struct \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2} $\ast$}]{aud,  }\item[{const uint8\+\_\+t $\ast$}]{\+\_\+rand }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::algo}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::amf}, \textbf{ osmo\+\_\+auth\+\_\+vector\+::auth\+\_\+types}, \textbf{ osmo\+\_\+auth\+\_\+vector\+::autn}, \textbf{ osmo\+\_\+auth\+\_\+vector\+::ck}, \textbf{ gen\+\_\+opc\+\_\+if\+\_\+needed()}, \textbf{ osmo\+\_\+auth\+\_\+vector\+::ik}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::ind}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::ind\+\_\+bitlen}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::k}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::k\+\_\+len}, \textbf{ osmo\+\_\+auth\+\_\+vector\+::kc}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::opc\+\_\+len}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ OSMO\+\_\+\+AUTH\+\_\+\+ALG\+\_\+\+TUAK}, \textbf{ osmo\+\_\+auth\+\_\+c2()}, \textbf{ osmo\+\_\+auth\+\_\+c3()}, \textbf{ OSMO\+\_\+\+AUTH\+\_\+\+TYPE\+\_\+\+GSM}, \textbf{ OSMO\+\_\+\+AUTH\+\_\+\+TYPE\+\_\+\+UMTS}, \textbf{ OSMO\+\_\+\+MILENAGE\+\_\+\+IND\+\_\+\+BITLEN\+\_\+\+MAX}, \textbf{ osmo\+\_\+auth\+\_\+vector\+::res}, \textbf{ osmo\+\_\+auth\+\_\+vector\+::res\+\_\+len}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::sqn}, \textbf{ osmo\+\_\+auth\+\_\+vector\+::sres}, \textbf{ tuak\+\_\+generate()}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::u}, and \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::umts}.



Referenced by \textbf{ tuak\+\_\+gen\+\_\+vec\+\_\+auts()}.

\mbox{\label{group__auth_gac33a46ec15898d2a62ab3f04bac681fe}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!tuak\_gen\_vec\_auts@{tuak\_gen\_vec\_auts}}
\index{tuak\_gen\_vec\_auts@{tuak\_gen\_vec\_auts}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{tuak\_gen\_vec\_auts()}
{\footnotesize\ttfamily static int tuak\+\_\+gen\+\_\+vec\+\_\+auts (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+auth\+\_\+vector} $\ast$}]{vec,  }\item[{struct \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2} $\ast$}]{aud,  }\item[{const uint8\+\_\+t $\ast$}]{auts,  }\item[{const uint8\+\_\+t $\ast$}]{rand\+\_\+auts,  }\item[{const uint8\+\_\+t $\ast$}]{\+\_\+rand }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::algo}, \textbf{ gen\+\_\+opc\+\_\+if\+\_\+needed()}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::k}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::k\+\_\+len}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::opc\+\_\+len}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ OSMO\+\_\+\+AUTH\+\_\+\+ALG\+\_\+\+TUAK}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::sqn}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::sqn\+\_\+ms}, \textbf{ tuak\+\_\+auts()}, \textbf{ tuak\+\_\+gen\+\_\+vec()}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::u}, and \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::umts}.

\mbox{\label{group__auth_gadb81629f87414226ac80a55cfc52f0a1}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!xor@{xor}}
\index{xor@{xor}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{xor()}
{\footnotesize\ttfamily static void xor (\begin{DoxyParamCaption}\item[{uint8\+\_\+t $\ast$}]{out,  }\item[{const uint8\+\_\+t $\ast$}]{a,  }\item[{const uint8\+\_\+t $\ast$}]{b,  }\item[{size\+\_\+t}]{len }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ len}.



Referenced by \textbf{ xor\+\_\+gen\+\_\+vec()}, and \textbf{ xor\+\_\+gen\+\_\+vec\+\_\+auts()}.

\mbox{\label{group__auth_gaf7b21c032bada67f037871f73f947139}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!xor2g\_gen\_vec@{xor2g\_gen\_vec}}
\index{xor2g\_gen\_vec@{xor2g\_gen\_vec}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{xor2g\_gen\_vec()}
{\footnotesize\ttfamily static int xor2g\+\_\+gen\+\_\+vec (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+auth\+\_\+vector} $\ast$}]{vec,  }\item[{struct \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2} $\ast$}]{aud,  }\item[{const uint8\+\_\+t $\ast$}]{\+\_\+rand }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::algo}, \textbf{ osmo\+\_\+auth\+\_\+vector\+::auth\+\_\+types}, \textbf{ ENOTSUP}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::gsm}, \textbf{ osmo\+\_\+auth\+\_\+vector\+::kc}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::ki}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ OSMO\+\_\+\+AUTH\+\_\+\+ALG\+\_\+\+XOR\+\_\+2G}, \textbf{ OSMO\+\_\+\+AUTH\+\_\+\+TYPE\+\_\+\+GSM}, \textbf{ osmo\+\_\+auth\+\_\+vector\+::sres}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::type}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::u}, and \textbf{ xor()}.

\mbox{\label{group__auth_ga91a4e8a9b8cff47dc79c39cabda368bb}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!xor\_gen\_vec@{xor\_gen\_vec}}
\index{xor\_gen\_vec@{xor\_gen\_vec}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{xor\_gen\_vec()}
{\footnotesize\ttfamily static int xor\+\_\+gen\+\_\+vec (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+auth\+\_\+vector} $\ast$}]{vec,  }\item[{struct \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2} $\ast$}]{aud,  }\item[{const uint8\+\_\+t $\ast$}]{\+\_\+rand }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}

Step 2\+: res = xdout

Suggested length for res is 128 bits, i.\+e. 16 bytes, but also can be in range\+: 30 $<$ n $<$ 128 bits.

3GPP TS 33.\+102, clause 6.\+8.\+1.\+2, b sres = c2(res) = res[0-\/3] $^\wedge$ res[4-\/7] $^\wedge$ res[8-\/11] $^\wedge$ res[12-\/15]

3GPP TS 33.\+102, clause 6.\+8.\+1.\+2, c kc = c3(ck, ik) = ck[0-\/7] $^\wedge$ ck[8-\/15] $^\wedge$ ik[0-\/7] $^\wedge$ ik[8-\/15] FIXME\+: do we really have CK/\+IK for GSM?

Step 3\+: cdout = sqn[0-\/5] $\vert$$\vert$ amf[0-\/1] NOTE (for USIM)\+: sqn[0-\/5] = autn[0-\/5] $^\wedge$ ak[0-\/5]

Step 5\+: autn = sqn $^\wedge$ ak $\vert$$\vert$ amf $\vert$$\vert$ mac NOTE\+: cdout still contains SQN from step 3

References \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::algo}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::amf}, \textbf{ osmo\+\_\+auth\+\_\+vector\+::auth\+\_\+types}, \textbf{ osmo\+\_\+auth\+\_\+vector\+::autn}, \textbf{ osmo\+\_\+auth\+\_\+vector\+::ck}, \textbf{ ENOTSUP}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::gsm}, \textbf{ osmo\+\_\+auth\+\_\+vector\+::ik}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::k}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::k\+\_\+len}, \textbf{ osmo\+\_\+auth\+\_\+vector\+::kc}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::ki}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ OSMO\+\_\+\+AUTH\+\_\+\+ALG\+\_\+\+XOR\+\_\+3G}, \textbf{ osmo\+\_\+auth\+\_\+c3()}, \textbf{ OSMO\+\_\+\+AUTH\+\_\+\+TYPE\+\_\+\+GSM}, \textbf{ OSMO\+\_\+\+AUTH\+\_\+\+TYPE\+\_\+\+UMTS}, \textbf{ osmo\+\_\+auth\+\_\+vector\+::res}, \textbf{ osmo\+\_\+auth\+\_\+vector\+::res\+\_\+len}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::sqn}, \textbf{ osmo\+\_\+auth\+\_\+vector\+::sres}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::type}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::u}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::umts}, and \textbf{ xor()}.



Referenced by \textbf{ xor\+\_\+gen\+\_\+vec\+\_\+auts()}.

\mbox{\label{group__auth_ga154bde954401da0e76b0eb19a373ff94}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!xor\_gen\_vec\_auts@{xor\_gen\_vec\_auts}}
\index{xor\_gen\_vec\_auts@{xor\_gen\_vec\_auts}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{xor\_gen\_vec\_auts()}
{\footnotesize\ttfamily static int xor\+\_\+gen\+\_\+vec\+\_\+auts (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+auth\+\_\+vector} $\ast$}]{vec,  }\item[{struct \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2} $\ast$}]{aud,  }\item[{const uint8\+\_\+t $\ast$}]{auts,  }\item[{const uint8\+\_\+t $\ast$}]{rand\+\_\+auts,  }\item[{const uint8\+\_\+t $\ast$}]{\+\_\+rand }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::algo}, \textbf{ ENOTSUP}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::gsm}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::k}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::k\+\_\+len}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::ki}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ OSMO\+\_\+\+AUTH\+\_\+\+ALG\+\_\+\+XOR\+\_\+3G}, \textbf{ OSMO\+\_\+\+AUTH\+\_\+\+TYPE\+\_\+\+GSM}, \textbf{ OSMO\+\_\+\+AUTH\+\_\+\+TYPE\+\_\+\+UMTS}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::sqn}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::sqn\+\_\+ms}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::type}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::u}, \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::umts}, \textbf{ xor()}, and \textbf{ xor\+\_\+gen\+\_\+vec()}.



\doxysubsection{Variable Documentation}
\mbox{\label{group__auth_ga1e4a5f73e3ef0da731c7c893e6a616bf}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!\_comp128\_table@{\_comp128\_table}}
\index{\_comp128\_table@{\_comp128\_table}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{\_comp128\_table}
{\footnotesize\ttfamily const uint8\+\_\+t$\ast$ \+\_\+comp128\+\_\+table[5] = \{ \textbf{ table\+\_\+0}, \textbf{ table\+\_\+1}, \textbf{ table\+\_\+2}, \textbf{ table\+\_\+3}, \textbf{ table\+\_\+4} \}\hspace{0.3cm}{\ttfamily [static]}}



Referenced by \textbf{ \+\_\+comp128\+\_\+compression()}.

\mbox{\label{group__auth_gacd6d9249b567ff1a9cf951e0c691f7bb}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!algo@{algo}}
\index{algo@{algo}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{algo\hspace{0.1cm}{\footnotesize\ttfamily [1/3]}}
{\footnotesize\ttfamily enum \textbf{ osmo\+\_\+auth\+\_\+algo} osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::algo}



Referenced by \textbf{ auth\+\_\+data2auth\+\_\+data2()}, \textbf{ c128v1\+\_\+gen\+\_\+vec()}, \textbf{ c128v2\+\_\+gen\+\_\+vec()}, \textbf{ c128v3\+\_\+gen\+\_\+vec()}, \textbf{ milenage\+\_\+gen\+\_\+vec()}, \textbf{ milenage\+\_\+gen\+\_\+vec\+\_\+auts()}, \textbf{ osmo\+\_\+auth\+\_\+gen\+\_\+vec2()}, \textbf{ osmo\+\_\+auth\+\_\+gen\+\_\+vec\+\_\+auts2()}, \textbf{ tuak\+\_\+gen\+\_\+vec()}, \textbf{ tuak\+\_\+gen\+\_\+vec\+\_\+auts()}, \textbf{ xor2g\+\_\+gen\+\_\+vec()}, \textbf{ xor\+\_\+gen\+\_\+vec()}, and \textbf{ xor\+\_\+gen\+\_\+vec\+\_\+auts()}.

\mbox{\label{group__auth_gaeeebbe14f7aaff37a2168aea4d3ab727}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!algo@{algo}}
\index{algo@{algo}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{algo\hspace{0.1cm}{\footnotesize\ttfamily [2/3]}}
{\footnotesize\ttfamily enum \textbf{ osmo\+\_\+auth\+\_\+algo} osmo\+\_\+sub\+\_\+auth\+\_\+data\+::algo}



Referenced by \textbf{ auth\+\_\+data2auth\+\_\+data2()}.

\mbox{\label{group__auth_ga034c21d2e72d21eea75009d1eb1a8714}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!algo@{algo}}
\index{algo@{algo}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{algo\hspace{0.1cm}{\footnotesize\ttfamily [3/3]}}
{\footnotesize\ttfamily enum \textbf{ osmo\+\_\+auth\+\_\+algo} osmo\+\_\+auth\+\_\+impl\+::algo}



algorithm we implement 



Referenced by \textbf{ osmo\+\_\+auth\+\_\+register()}, and \textbf{ osmo\+\_\+auth\+\_\+supported()}.

\mbox{\label{group__auth_ga133843a063f2ac8d7ecf19ed69e8b8c0}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!amf@{amf}}
\index{amf@{amf}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{amf\hspace{0.1cm}{\footnotesize\ttfamily [1/4]}}
{\footnotesize\ttfamily uint8\+\_\+t osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::amf[2]}



Referenced by \textbf{ auth\+\_\+data2auth\+\_\+data2()}, \textbf{ milenage\+\_\+gen\+\_\+vec()}, \textbf{ tuak\+\_\+gen\+\_\+vec()}, and \textbf{ xor\+\_\+gen\+\_\+vec()}.

\mbox{\label{group__auth_ga7c012f53aaf9662cd35e892e6c1f2dba}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!amf@{amf}}
\index{amf@{amf}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{\hspace{0.1cm}{\footnotesize\ttfamily [2/4]}}
{\footnotesize\ttfamily uint8\+\_\+t  \{ ... \} \+::amf[2]}

\mbox{\label{group__auth_ga8a942dfea912cdb4989f02e9ca83fbaa}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!amf@{amf}}
\index{amf@{amf}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{\hspace{0.1cm}{\footnotesize\ttfamily [3/4]}}
{\footnotesize\ttfamily uint8\+\_\+t  \{ ... \} \+::amf[2]}

\mbox{\label{group__auth_ga49bc409a2b11630ed88984a49ba49a28}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!amf@{amf}}
\index{amf@{amf}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{amf\hspace{0.1cm}{\footnotesize\ttfamily [4/4]}}
{\footnotesize\ttfamily uint8\+\_\+t osmo\+\_\+sub\+\_\+auth\+\_\+data\+::amf[2]}



Referenced by \textbf{ auth\+\_\+data2auth\+\_\+data2()}, and \textbf{ oap\+\_\+evaluate\+\_\+challenge()}.

\mbox{\label{group__auth_ga26f23faa69b79e5843977bf07ddd0376}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!auth\_alg\_vals@{auth\_alg\_vals}}
\index{auth\_alg\_vals@{auth\_alg\_vals}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{auth\_alg\_vals}
{\footnotesize\ttfamily const struct \textbf{ value\+\_\+string} auth\+\_\+alg\+\_\+vals[$\,$]\hspace{0.3cm}{\ttfamily [static]}}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        \{ OSMO\_AUTH\_ALG\_NONE, \textcolor{stringliteral}{"{}None"{}} \},}
\DoxyCodeLine{        \{ OSMO\_AUTH\_ALG\_COMP128v1, \textcolor{stringliteral}{"{}COMP128v1"{}} \},}
\DoxyCodeLine{        \{ OSMO\_AUTH\_ALG\_COMP128v2, \textcolor{stringliteral}{"{}COMP128v2"{}} \},}
\DoxyCodeLine{        \{ OSMO\_AUTH\_ALG\_COMP128v3, \textcolor{stringliteral}{"{}COMP128v3"{}} \},}
\DoxyCodeLine{        \{ OSMO\_AUTH\_ALG\_XOR\_3G, \textcolor{stringliteral}{"{}XOR-\/3G"{}} \},}
\DoxyCodeLine{        \{ OSMO\_AUTH\_ALG\_MILENAGE, \textcolor{stringliteral}{"{}MILENAGE"{}} \},}
\DoxyCodeLine{        \{ OSMO\_AUTH\_ALG\_XOR\_2G, \textcolor{stringliteral}{"{}XOR-\/2G"{}} \},}
\DoxyCodeLine{        \{ OSMO\_AUTH\_ALG\_TUAK, \textcolor{stringliteral}{"{}TUAK"{}} \},}
\DoxyCodeLine{        \{ 0, NULL \}}
\DoxyCodeLine{\}}

\end{DoxyCode}


Referenced by \textbf{ osmo\+\_\+auth\+\_\+alg\+\_\+name()}, and \textbf{ osmo\+\_\+auth\+\_\+alg\+\_\+parse()}.

\mbox{\label{group__auth_gae29e80a3e9cd1f831f7084ac232bc0f8}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!auth\_types@{auth\_types}}
\index{auth\_types@{auth\_types}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{auth\_types}
{\footnotesize\ttfamily uint32\+\_\+t osmo\+\_\+auth\+\_\+vector\+::auth\+\_\+types}



bitmask of OSMO\+\_\+\+AUTH\+\_\+\+TYPE\+\_\+$\ast$ 



Referenced by \textbf{ c128v1\+\_\+gen\+\_\+vec()}, \textbf{ c128v2\+\_\+gen\+\_\+vec()}, \textbf{ c128v3\+\_\+gen\+\_\+vec()}, \textbf{ decode\+\_\+auth\+\_\+info()}, \textbf{ encode\+\_\+auth\+\_\+info()}, \textbf{ milenage\+\_\+gen\+\_\+vec()}, \textbf{ osmo\+\_\+auth\+\_\+3g\+\_\+from\+\_\+2g()}, \textbf{ tuak\+\_\+gen\+\_\+vec()}, \textbf{ xor2g\+\_\+gen\+\_\+vec()}, and \textbf{ xor\+\_\+gen\+\_\+vec()}.

\mbox{\label{group__auth_gaf71e00e7a46b92a9f2abafbb65453807}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!autn@{autn}}
\index{autn@{autn}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{autn}
{\footnotesize\ttfamily uint8\+\_\+t osmo\+\_\+auth\+\_\+vector\+::autn[16]}



authentication nonce 



Referenced by \textbf{ decode\+\_\+auth\+\_\+info()}, \textbf{ encode\+\_\+auth\+\_\+info()}, \textbf{ milenage\+\_\+gen\+\_\+vec()}, \textbf{ oap\+\_\+evaluate\+\_\+challenge()}, \textbf{ tuak\+\_\+gen\+\_\+vec()}, and \textbf{ xor\+\_\+gen\+\_\+vec()}.

\mbox{\label{group__auth_gad2f592fe15e7d4e2d790122a6d40cd51}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!c128v1\_alg@{c128v1\_alg}}
\index{c128v1\_alg@{c128v1\_alg}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{c128v1\_alg}
{\footnotesize\ttfamily struct \textbf{ osmo\+\_\+auth\+\_\+impl} c128v1\+\_\+alg\hspace{0.3cm}{\ttfamily [static]}}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        .algo = OSMO\_AUTH\_ALG\_COMP128v1,}
\DoxyCodeLine{        .name = \textcolor{stringliteral}{"{}COMP128v1 (libosmogsm built-\/in)"{}},}
\DoxyCodeLine{        .priority = 1000,}
\DoxyCodeLine{        .gen\_vec = \&c128v1\_gen\_vec,}
\DoxyCodeLine{\}}

\end{DoxyCode}


Referenced by \textbf{ \+\_\+\+\_\+attribute\+\_\+\+\_\+()}.

\mbox{\label{group__auth_ga5c15bb82523e69423eba13cc672b8f41}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!c128v2\_alg@{c128v2\_alg}}
\index{c128v2\_alg@{c128v2\_alg}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{c128v2\_alg}
{\footnotesize\ttfamily struct \textbf{ osmo\+\_\+auth\+\_\+impl} c128v2\+\_\+alg\hspace{0.3cm}{\ttfamily [static]}}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        .algo = OSMO\_AUTH\_ALG\_COMP128v2,}
\DoxyCodeLine{        .name = \textcolor{stringliteral}{"{}COMP128v2 (libosmogsm built-\/in)"{}},}
\DoxyCodeLine{        .priority = 1000,}
\DoxyCodeLine{        .gen\_vec = \&c128v2\_gen\_vec,}
\DoxyCodeLine{\}}

\end{DoxyCode}


Referenced by \textbf{ \+\_\+\+\_\+attribute\+\_\+\+\_\+()}.

\mbox{\label{group__auth_ga75b9b90e4aa5d63b6ad618404ac0bd83}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!c128v3\_alg@{c128v3\_alg}}
\index{c128v3\_alg@{c128v3\_alg}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{c128v3\_alg}
{\footnotesize\ttfamily struct \textbf{ osmo\+\_\+auth\+\_\+impl} c128v3\+\_\+alg\hspace{0.3cm}{\ttfamily [static]}}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        .algo = OSMO\_AUTH\_ALG\_COMP128v3,}
\DoxyCodeLine{        .name = \textcolor{stringliteral}{"{}COMP128v3 (libosmogsm built-\/in)"{}},}
\DoxyCodeLine{        .priority = 1000,}
\DoxyCodeLine{        .gen\_vec = \&c128v3\_gen\_vec,}
\DoxyCodeLine{\}}

\end{DoxyCode}


Referenced by \textbf{ \+\_\+\+\_\+attribute\+\_\+\+\_\+()}.

\mbox{\label{group__auth_gae762ffc62e16057b5a858d3a77d94630}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!ck@{ck}}
\index{ck@{ck}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{ck}
{\footnotesize\ttfamily uint8\+\_\+t osmo\+\_\+auth\+\_\+vector\+::ck[\textbf{ OSMO\+\_\+\+A5\+\_\+\+MAX\+\_\+\+KEY\+\_\+\+LEN\+\_\+\+BYTES}]}



ciphering key 



Referenced by \textbf{ decode\+\_\+auth\+\_\+info()}, \textbf{ encode\+\_\+auth\+\_\+info()}, \textbf{ milenage\+\_\+gen\+\_\+vec()}, \textbf{ osmo\+\_\+auth\+\_\+3g\+\_\+from\+\_\+2g()}, \textbf{ tuak\+\_\+gen\+\_\+vec()}, and \textbf{ xor\+\_\+gen\+\_\+vec()}.

\mbox{\label{group__auth_ga8f32475bd3974ac0fe1e0ffa4be991b5}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!gen\_vec@{gen\_vec}}
\index{gen\_vec@{gen\_vec}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{gen\_vec}
{\footnotesize\ttfamily int($\ast$ osmo\+\_\+auth\+\_\+impl\+::gen\+\_\+vec) (struct \textbf{ osmo\+\_\+auth\+\_\+vector} $\ast$vec, struct \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2} $\ast$aud, const uint8\+\_\+t $\ast$\+\_\+rand)}



callback for generate authentication vectors 



Referenced by \textbf{ osmo\+\_\+auth\+\_\+gen\+\_\+vec2()}.

\mbox{\label{group__auth_gaa5f403ee59b5b7a92b4d1b3e7c8063b9}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!gen\_vec\_auts@{gen\_vec\_auts}}
\index{gen\_vec\_auts@{gen\_vec\_auts}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{gen\_vec\_auts}
{\footnotesize\ttfamily int($\ast$ osmo\+\_\+auth\+\_\+impl\+::gen\+\_\+vec\+\_\+auts) (struct \textbf{ osmo\+\_\+auth\+\_\+vector} $\ast$vec, struct \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+data2} $\ast$aud, const uint8\+\_\+t $\ast$auts, const uint8\+\_\+t $\ast$rand\+\_\+auts, const uint8\+\_\+t $\ast$\+\_\+rand)}



callback for generating auth vectors + re-\/sync 



Referenced by \textbf{ osmo\+\_\+auth\+\_\+gen\+\_\+vec\+\_\+auts2()}.

\mbox{\label{group__auth_gad491d50a4507113cd54eed9e5ca2a6a0}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!gsm@{gsm}}
\index{gsm@{gsm}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{\hspace{0.1cm}{\footnotesize\ttfamily [1/4]}}
{\footnotesize\ttfamily struct  \{ ... \}  osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::@125\+::gsm}

\mbox{\label{group__auth_ga9b8b6db5067e64a918be6d1145d36904}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!gsm@{gsm}}
\index{gsm@{gsm}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{\hspace{0.1cm}{\footnotesize\ttfamily [2/4]}}
{\footnotesize\ttfamily struct  \{ ... \}  osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::gsm}



Referenced by \textbf{ auth\+\_\+data2auth\+\_\+data2()}, \textbf{ c128v1\+\_\+gen\+\_\+vec()}, \textbf{ c128v2\+\_\+gen\+\_\+vec()}, \textbf{ c128v3\+\_\+gen\+\_\+vec()}, \textbf{ xor2g\+\_\+gen\+\_\+vec()}, \textbf{ xor\+\_\+gen\+\_\+vec()}, and \textbf{ xor\+\_\+gen\+\_\+vec\+\_\+auts()}.

\mbox{\label{group__auth_ga52b37583e773c2c050cd89ef3e199f5c}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!gsm@{gsm}}
\index{gsm@{gsm}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{\hspace{0.1cm}{\footnotesize\ttfamily [3/4]}}
{\footnotesize\ttfamily struct  \{ ... \}  osmo\+\_\+sub\+\_\+auth\+\_\+data\+::gsm}



Referenced by \textbf{ auth\+\_\+data2auth\+\_\+data2()}.

\mbox{\label{group__auth_gaffe1e6cefec00011a68890e46af759a4}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!gsm@{gsm}}
\index{gsm@{gsm}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{\hspace{0.1cm}{\footnotesize\ttfamily [4/4]}}
{\footnotesize\ttfamily struct  \{ ... \}  osmo\+\_\+sub\+\_\+auth\+\_\+data\+::@128\+::gsm}

\mbox{\label{group__auth_gab09f2a686730303826790fdca0dbb5bc}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!ik@{ik}}
\index{ik@{ik}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{ik}
{\footnotesize\ttfamily uint8\+\_\+t osmo\+\_\+auth\+\_\+vector\+::ik[\textbf{ OSMO\+\_\+\+A5\+\_\+\+MAX\+\_\+\+KEY\+\_\+\+LEN\+\_\+\+BYTES}]}



integrity key 



Referenced by \textbf{ decode\+\_\+auth\+\_\+info()}, \textbf{ encode\+\_\+auth\+\_\+info()}, \textbf{ milenage\+\_\+gen\+\_\+vec()}, \textbf{ osmo\+\_\+auth\+\_\+3g\+\_\+from\+\_\+2g()}, \textbf{ tuak\+\_\+gen\+\_\+vec()}, and \textbf{ xor\+\_\+gen\+\_\+vec()}.

\mbox{\label{group__auth_ga74d31acdd6e4a419592689abd942d826}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!ind@{ind}}
\index{ind@{ind}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{\hspace{0.1cm}{\footnotesize\ttfamily [1/4]}}
{\footnotesize\ttfamily unsigned int  \{ ... \} \+::ind}



which IND slot to use an SQN from 

\mbox{\label{group__auth_ga5e10a5fb2264883a00cf4523af340833}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!ind@{ind}}
\index{ind@{ind}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{ind\hspace{0.1cm}{\footnotesize\ttfamily [2/4]}}
{\footnotesize\ttfamily unsigned int osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::ind}



which IND slot to use an SQN from 



Referenced by \textbf{ auth\+\_\+data2auth\+\_\+data2()}, \textbf{ milenage\+\_\+gen\+\_\+vec()}, and \textbf{ tuak\+\_\+gen\+\_\+vec()}.

\mbox{\label{group__auth_ga0db163d65407f044a88f0d5e8da06e5d}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!ind@{ind}}
\index{ind@{ind}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{\hspace{0.1cm}{\footnotesize\ttfamily [3/4]}}
{\footnotesize\ttfamily unsigned int  \{ ... \} \+::ind}



which IND slot to use an SQN from 

\mbox{\label{group__auth_ga771d057de5d3433914defbb315d4c056}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!ind@{ind}}
\index{ind@{ind}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{ind\hspace{0.1cm}{\footnotesize\ttfamily [4/4]}}
{\footnotesize\ttfamily unsigned int osmo\+\_\+sub\+\_\+auth\+\_\+data\+::ind}



which IND slot to use an SQN from 



Referenced by \textbf{ auth\+\_\+data2auth\+\_\+data2()}.

\mbox{\label{group__auth_ga0b69313b871c4fd738987fc3485b7449}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!ind\_bitlen@{ind\_bitlen}}
\index{ind\_bitlen@{ind\_bitlen}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{\hspace{0.1cm}{\footnotesize\ttfamily [1/4]}}
{\footnotesize\ttfamily unsigned int  \{ ... \} \+::ind\+\_\+bitlen}



nr of bits not in SEQ, only SQN 

\mbox{\label{group__auth_ga9241648f2d99ab9f901eec840493894a}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!ind\_bitlen@{ind\_bitlen}}
\index{ind\_bitlen@{ind\_bitlen}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{ind\_bitlen\hspace{0.1cm}{\footnotesize\ttfamily [2/4]}}
{\footnotesize\ttfamily unsigned int osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::ind\+\_\+bitlen}



nr of bits not in SEQ, only SQN 



Referenced by \textbf{ auth\+\_\+data2auth\+\_\+data2()}, \textbf{ milenage\+\_\+gen\+\_\+vec()}, and \textbf{ tuak\+\_\+gen\+\_\+vec()}.

\mbox{\label{group__auth_gadb7fe1b76ac4d4fcab7672a409c60f03}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!ind\_bitlen@{ind\_bitlen}}
\index{ind\_bitlen@{ind\_bitlen}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{\hspace{0.1cm}{\footnotesize\ttfamily [3/4]}}
{\footnotesize\ttfamily unsigned int  \{ ... \} \+::ind\+\_\+bitlen}



nr of bits not in SEQ, only SQN 

\mbox{\label{group__auth_gaded6cd8f9cdc09a3cc9d2e010c95e363}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!ind\_bitlen@{ind\_bitlen}}
\index{ind\_bitlen@{ind\_bitlen}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{ind\_bitlen\hspace{0.1cm}{\footnotesize\ttfamily [4/4]}}
{\footnotesize\ttfamily unsigned int osmo\+\_\+sub\+\_\+auth\+\_\+data\+::ind\+\_\+bitlen}



nr of bits not in SEQ, only SQN 



Referenced by \textbf{ auth\+\_\+data2auth\+\_\+data2()}.

\mbox{\label{group__auth_ga9f1e865be5732741b708c76f47a29f81}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!k@{k}}
\index{k@{k}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{k\hspace{0.1cm}{\footnotesize\ttfamily [1/4]}}
{\footnotesize\ttfamily uint8\+\_\+t osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::k[32]}



secret key of the subscriber 



Referenced by \textbf{ auth\+\_\+data2auth\+\_\+data2()}, \textbf{ gen\+\_\+opc\+\_\+if\+\_\+needed()}, \textbf{ milenage\+\_\+gen\+\_\+vec()}, \textbf{ milenage\+\_\+gen\+\_\+vec\+\_\+auts()}, \textbf{ tuak\+\_\+gen\+\_\+vec()}, \textbf{ tuak\+\_\+gen\+\_\+vec\+\_\+auts()}, \textbf{ xor\+\_\+gen\+\_\+vec()}, and \textbf{ xor\+\_\+gen\+\_\+vec\+\_\+auts()}.

\mbox{\label{group__auth_gac5a56015401d27e804920a3666b27289}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!k@{k}}
\index{k@{k}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{\hspace{0.1cm}{\footnotesize\ttfamily [2/4]}}
{\footnotesize\ttfamily uint8\+\_\+t  \{ ... \} \+::k[32]}



secret key of the subscriber 

\mbox{\label{group__auth_gada1cefa1d36b20d5a3e8bd64a937af03}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!k@{k}}
\index{k@{k}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{k\hspace{0.1cm}{\footnotesize\ttfamily [3/4]}}
{\footnotesize\ttfamily uint8\+\_\+t osmo\+\_\+sub\+\_\+auth\+\_\+data\+::k[\textbf{ OSMO\+\_\+\+A5\+\_\+\+MAX\+\_\+\+KEY\+\_\+\+LEN\+\_\+\+BYTES}]}



secret key of the subscriber 



Referenced by \textbf{ auth\+\_\+data2auth\+\_\+data2()}, and \textbf{ oap\+\_\+evaluate\+\_\+challenge()}.

\mbox{\label{group__auth_gab1c523a890058aa95f327076b8d0ff2c}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!k@{k}}
\index{k@{k}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{\hspace{0.1cm}{\footnotesize\ttfamily [4/4]}}
{\footnotesize\ttfamily uint8\+\_\+t  \{ ... \} \+::k[\textbf{ OSMO\+\_\+\+A5\+\_\+\+MAX\+\_\+\+KEY\+\_\+\+LEN\+\_\+\+BYTES}]}



secret key of the subscriber 

\mbox{\label{group__auth_ga8682927f6276dcb8ed6244a25f299d72}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!k\_len@{k\_len}}
\index{k\_len@{k\_len}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily uint8\+\_\+t  \{ ... \} \+::k\+\_\+len}



K length (in bytes)\+: 16 or 32. 

\mbox{\label{group__auth_ga7dd317cb61ee359d69b05a8567a86b76}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!k\_len@{k\_len}}
\index{k\_len@{k\_len}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{k\_len\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily uint8\+\_\+t osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::k\+\_\+len}



K length (in bytes)\+: 16 or 32. 



Referenced by \textbf{ auth\+\_\+data2auth\+\_\+data2()}, \textbf{ gen\+\_\+opc\+\_\+if\+\_\+needed()}, \textbf{ milenage\+\_\+gen\+\_\+vec()}, \textbf{ milenage\+\_\+gen\+\_\+vec\+\_\+auts()}, \textbf{ tuak\+\_\+gen\+\_\+vec()}, \textbf{ tuak\+\_\+gen\+\_\+vec\+\_\+auts()}, \textbf{ xor\+\_\+gen\+\_\+vec()}, and \textbf{ xor\+\_\+gen\+\_\+vec\+\_\+auts()}.

\mbox{\label{group__auth_ga7c1f2692b7179e1c031559f480002d9b}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!kc@{kc}}
\index{kc@{kc}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{kc}
{\footnotesize\ttfamily uint8\+\_\+t osmo\+\_\+auth\+\_\+vector\+::kc[8]}



Kc for GSM encryption (A5) 



Referenced by \textbf{ c128v1\+\_\+gen\+\_\+vec()}, \textbf{ c128v2\+\_\+gen\+\_\+vec()}, \textbf{ c128v3\+\_\+gen\+\_\+vec()}, \textbf{ decode\+\_\+auth\+\_\+info()}, \textbf{ encode\+\_\+auth\+\_\+info()}, \textbf{ milenage\+\_\+gen\+\_\+vec()}, \textbf{ osmo\+\_\+auth\+\_\+3g\+\_\+from\+\_\+2g()}, \textbf{ tuak\+\_\+gen\+\_\+vec()}, \textbf{ xor2g\+\_\+gen\+\_\+vec()}, and \textbf{ xor\+\_\+gen\+\_\+vec()}.

\mbox{\label{group__auth_ga3d5b9d5d00b509e1eac6bf14d8a212f5}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!ki@{ki}}
\index{ki@{ki}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{ki\hspace{0.1cm}{\footnotesize\ttfamily [1/4]}}
{\footnotesize\ttfamily uint8\+\_\+t osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::ki[\textbf{ OSMO\+\_\+\+A5\+\_\+\+MAX\+\_\+\+KEY\+\_\+\+LEN\+\_\+\+BYTES}]}



secret key 



Referenced by \textbf{ auth\+\_\+data2auth\+\_\+data2()}, \textbf{ c128v1\+\_\+gen\+\_\+vec()}, \textbf{ c128v2\+\_\+gen\+\_\+vec()}, \textbf{ c128v3\+\_\+gen\+\_\+vec()}, \textbf{ xor2g\+\_\+gen\+\_\+vec()}, \textbf{ xor\+\_\+gen\+\_\+vec()}, and \textbf{ xor\+\_\+gen\+\_\+vec\+\_\+auts()}.

\mbox{\label{group__auth_gada31f37c76bc5ba7a716afd65a3deca9}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!ki@{ki}}
\index{ki@{ki}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{\hspace{0.1cm}{\footnotesize\ttfamily [2/4]}}
{\footnotesize\ttfamily uint8\+\_\+t  \{ ... \} \+::ki[\textbf{ OSMO\+\_\+\+A5\+\_\+\+MAX\+\_\+\+KEY\+\_\+\+LEN\+\_\+\+BYTES}]}



secret key 

\mbox{\label{group__auth_gae3862caad1f98a978766be6988327ea3}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!ki@{ki}}
\index{ki@{ki}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{\hspace{0.1cm}{\footnotesize\ttfamily [3/4]}}
{\footnotesize\ttfamily uint8\+\_\+t  \{ ... \} \+::ki[\textbf{ OSMO\+\_\+\+A5\+\_\+\+MAX\+\_\+\+KEY\+\_\+\+LEN\+\_\+\+BYTES}]}



secret key 

\mbox{\label{group__auth_gac85a0e953858708eab77beca08b53ec8}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!ki@{ki}}
\index{ki@{ki}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{ki\hspace{0.1cm}{\footnotesize\ttfamily [4/4]}}
{\footnotesize\ttfamily uint8\+\_\+t osmo\+\_\+sub\+\_\+auth\+\_\+data\+::ki[\textbf{ OSMO\+\_\+\+A5\+\_\+\+MAX\+\_\+\+KEY\+\_\+\+LEN\+\_\+\+BYTES}]}



secret key 



Referenced by \textbf{ auth\+\_\+data2auth\+\_\+data2()}.

\mbox{\label{group__auth_ga0c7fee2bdd2b4413acefb9e826448135}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!list@{list}}
\index{list@{list}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{list}
{\footnotesize\ttfamily struct \textbf{ llist\+\_\+head} osmo\+\_\+auth\+\_\+impl\+::list}



Referenced by \textbf{ osmo\+\_\+auth\+\_\+register()}.

\mbox{\label{group__auth_ga80b740f6bb4edce256f15d8767b93296}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!milenage\_alg@{milenage\_alg}}
\index{milenage\_alg@{milenage\_alg}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{milenage\_alg}
{\footnotesize\ttfamily struct \textbf{ osmo\+\_\+auth\+\_\+impl} milenage\+\_\+alg\hspace{0.3cm}{\ttfamily [static]}}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        .algo = OSMO\_AUTH\_ALG\_MILENAGE,}
\DoxyCodeLine{        .name = \textcolor{stringliteral}{"{}MILENAGE (libosmogsm built-\/in)"{}},}
\DoxyCodeLine{        .priority = 1000,}
\DoxyCodeLine{        .gen\_vec = \&milenage\_gen\_vec,}
\DoxyCodeLine{        .gen\_vec\_auts = \&milenage\_gen\_vec\_auts,}
\DoxyCodeLine{\}}

\end{DoxyCode}


Referenced by \textbf{ \+\_\+\+\_\+attribute\+\_\+\+\_\+()}.

\mbox{\label{group__auth_ga92149cb654b4db74c4ecb5bbbb7b129e}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!name@{name}}
\index{name@{name}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{name}
{\footnotesize\ttfamily const char$\ast$ osmo\+\_\+auth\+\_\+impl\+::name}



name of the implementation 

\mbox{\label{group__auth_ga30bcd335a9c8f9eaae934b64f3e9a0d0}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!opc@{opc}}
\index{opc@{opc}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{\hspace{0.1cm}{\footnotesize\ttfamily [1/4]}}
{\footnotesize\ttfamily uint8\+\_\+t  \{ ... \} \+::opc[16]}



operator invariant value 

\mbox{\label{group__auth_ga690a7c607a35e39bb2eacf2c7a1f7477}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!opc@{opc}}
\index{opc@{opc}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{opc\hspace{0.1cm}{\footnotesize\ttfamily [2/4]}}
{\footnotesize\ttfamily uint8\+\_\+t osmo\+\_\+sub\+\_\+auth\+\_\+data\+::opc[16]}



operator invariant value 



Referenced by \textbf{ auth\+\_\+data2auth\+\_\+data2()}, and \textbf{ oap\+\_\+evaluate\+\_\+challenge()}.

\mbox{\label{group__auth_ga651314bfb29422bd6e9dfe6241dd53d9}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!opc@{opc}}
\index{opc@{opc}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{\hspace{0.1cm}{\footnotesize\ttfamily [3/4]}}
{\footnotesize\ttfamily uint8\+\_\+t  \{ ... \} \+::opc[32]}



operator invariant value 

\mbox{\label{group__auth_ga23378539091782fc9de1d9d96c4aa47c}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!opc@{opc}}
\index{opc@{opc}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{opc\hspace{0.1cm}{\footnotesize\ttfamily [4/4]}}
{\footnotesize\ttfamily uint8\+\_\+t osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::opc[32]}



operator invariant value 



Referenced by \textbf{ auth\+\_\+data2auth\+\_\+data2()}, and \textbf{ gen\+\_\+opc\+\_\+if\+\_\+needed()}.

\mbox{\label{group__auth_ga94efe3eb0fc66bf617a4f16329b433b4}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!opc\_is\_op@{opc\_is\_op}}
\index{opc\_is\_op@{opc\_is\_op}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{\hspace{0.1cm}{\footnotesize\ttfamily [1/4]}}
{\footnotesize\ttfamily int  \{ ... \} \+::opc\+\_\+is\+\_\+op}



is the OPC field OPC (0) or OP (1) ? 

\mbox{\label{group__auth_gae6b3af2d62ee09d24dddd87d6b028d15}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!opc\_is\_op@{opc\_is\_op}}
\index{opc\_is\_op@{opc\_is\_op}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{opc\_is\_op\hspace{0.1cm}{\footnotesize\ttfamily [2/4]}}
{\footnotesize\ttfamily int osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::opc\+\_\+is\+\_\+op}



is the OPC field OPC (0) or OP (1) ? 



Referenced by \textbf{ auth\+\_\+data2auth\+\_\+data2()}, and \textbf{ gen\+\_\+opc\+\_\+if\+\_\+needed()}.

\mbox{\label{group__auth_ga0b0ac5b79bfdd2e841e7acaaa4424f61}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!opc\_is\_op@{opc\_is\_op}}
\index{opc\_is\_op@{opc\_is\_op}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{\hspace{0.1cm}{\footnotesize\ttfamily [3/4]}}
{\footnotesize\ttfamily int  \{ ... \} \+::opc\+\_\+is\+\_\+op}



is the OPC field OPC (0) or OP (1) ? 

\mbox{\label{group__auth_ga82da2c1363751efe7c090e36ae035c1e}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!opc\_is\_op@{opc\_is\_op}}
\index{opc\_is\_op@{opc\_is\_op}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{opc\_is\_op\hspace{0.1cm}{\footnotesize\ttfamily [4/4]}}
{\footnotesize\ttfamily int osmo\+\_\+sub\+\_\+auth\+\_\+data\+::opc\+\_\+is\+\_\+op}



is the OPC field OPC (0) or OP (1) ? 



Referenced by \textbf{ auth\+\_\+data2auth\+\_\+data2()}.

\mbox{\label{group__auth_gafe1eef133d3822e3bdcc2574e1a06c13}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!opc\_len@{opc\_len}}
\index{opc\_len@{opc\_len}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily uint8\+\_\+t  \{ ... \} \+::opc\+\_\+len}



OPc length (in bytes)\+: 16 or 32. 

\mbox{\label{group__auth_gab973ec75aed9b63a40e68d5f011aacf6}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!opc\_len@{opc\_len}}
\index{opc\_len@{opc\_len}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{opc\_len\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily uint8\+\_\+t osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::opc\+\_\+len}



OPc length (in bytes)\+: 16 or 32. 



Referenced by \textbf{ auth\+\_\+data2auth\+\_\+data2()}, \textbf{ milenage\+\_\+gen\+\_\+vec()}, \textbf{ milenage\+\_\+gen\+\_\+vec\+\_\+auts()}, \textbf{ tuak\+\_\+gen\+\_\+vec()}, and \textbf{ tuak\+\_\+gen\+\_\+vec\+\_\+auts()}.

\mbox{\label{group__auth_ga96657fe49eca98e1ae04cbf9aceea3d0}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!osmo\_sub\_auth\_type\_names@{osmo\_sub\_auth\_type\_names}}
\index{osmo\_sub\_auth\_type\_names@{osmo\_sub\_auth\_type\_names}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{osmo\_sub\_auth\_type\_names\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily const struct \textbf{ value\+\_\+string} osmo\+\_\+sub\+\_\+auth\+\_\+type\+\_\+names[$\,$]\hspace{0.3cm}{\ttfamily [extern]}}



Referenced by \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+type\+\_\+name()}.

\mbox{\label{group__auth_ga96657fe49eca98e1ae04cbf9aceea3d0}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!osmo\_sub\_auth\_type\_names@{osmo\_sub\_auth\_type\_names}}
\index{osmo\_sub\_auth\_type\_names@{osmo\_sub\_auth\_type\_names}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{osmo\_sub\_auth\_type\_names\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily const struct \textbf{ value\+\_\+string} osmo\+\_\+sub\+\_\+auth\+\_\+type\+\_\+names[$\,$]}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        \{ OSMO\_AUTH\_TYPE\_NONE, \textcolor{stringliteral}{"{}None"{}} \},}
\DoxyCodeLine{        \{ OSMO\_AUTH\_TYPE\_GSM, \textcolor{stringliteral}{"{}GSM"{}} \},}
\DoxyCodeLine{        \{ OSMO\_AUTH\_TYPE\_UMTS, \textcolor{stringliteral}{"{}UMTS"{}} \},}
\DoxyCodeLine{        \{ 0, NULL \}}
\DoxyCodeLine{\}}

\end{DoxyCode}


Referenced by \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+type\+\_\+name()}.

\mbox{\label{group__auth_ga6853aaa6edba1215d29fef84477894fa}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!priority@{priority}}
\index{priority@{priority}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{priority}
{\footnotesize\ttfamily unsigned int osmo\+\_\+auth\+\_\+impl\+::priority}



priority value (resp. 

othe implementations 

Referenced by \textbf{ osmo\+\_\+auth\+\_\+register()}.

\mbox{\label{group__auth_gada3cb5ea280bd328abe15851f0c8f6fe}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!rand@{rand}}
\index{rand@{rand}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{rand}
{\footnotesize\ttfamily uint8\+\_\+t osmo\+\_\+auth\+\_\+vector\+::rand[16]}



random challenge 



Referenced by \textbf{ decode\+\_\+auth\+\_\+info()}, \textbf{ encode\+\_\+auth\+\_\+info()}, \textbf{ osmo\+\_\+auth\+\_\+gen\+\_\+vec2()}, and \textbf{ osmo\+\_\+auth\+\_\+gen\+\_\+vec\+\_\+auts2()}.

\mbox{\label{group__auth_gaa543f7d30c32d5b5de7b0c4740452c5c}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!res@{res}}
\index{res@{res}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{res}
{\footnotesize\ttfamily uint8\+\_\+t osmo\+\_\+auth\+\_\+vector\+::res[16]}



authentication result 



Referenced by \textbf{ decode\+\_\+auth\+\_\+info()}, \textbf{ encode\+\_\+auth\+\_\+info()}, \textbf{ milenage\+\_\+gen\+\_\+vec()}, \textbf{ oap\+\_\+evaluate\+\_\+challenge()}, \textbf{ tuak\+\_\+gen\+\_\+vec()}, and \textbf{ xor\+\_\+gen\+\_\+vec()}.

\mbox{\label{group__auth_gab790f8c7c8160816567091ab905393b9}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!res\_len@{res\_len}}
\index{res\_len@{res\_len}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{res\_len}
{\footnotesize\ttfamily uint8\+\_\+t osmo\+\_\+auth\+\_\+vector\+::res\+\_\+len}



length (in bytes) of res\+: 4..16 bytes 



Referenced by \textbf{ decode\+\_\+auth\+\_\+info()}, \textbf{ encode\+\_\+auth\+\_\+info()}, \textbf{ milenage\+\_\+gen\+\_\+vec()}, \textbf{ oap\+\_\+evaluate\+\_\+challenge()}, \textbf{ osmo\+\_\+auth\+\_\+gen\+\_\+vec()}, \textbf{ osmo\+\_\+auth\+\_\+gen\+\_\+vec\+\_\+auts()}, \textbf{ tuak\+\_\+gen\+\_\+vec()}, and \textbf{ xor\+\_\+gen\+\_\+vec()}.

\mbox{\label{group__auth_gacc4ad012e7d8ce5c084811fd9aaa6a75}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!selected\_auths@{selected\_auths}}
\index{selected\_auths@{selected\_auths}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{selected\_auths}
{\footnotesize\ttfamily struct \textbf{ osmo\+\_\+auth\+\_\+impl}$\ast$ selected\+\_\+auths[\textbf{ \+\_\+\+OSMO\+\_\+\+AUTH\+\_\+\+ALG\+\_\+\+NUM}]\hspace{0.3cm}{\ttfamily [static]}}



Referenced by \textbf{ osmo\+\_\+auth\+\_\+gen\+\_\+vec2()}, \textbf{ osmo\+\_\+auth\+\_\+gen\+\_\+vec\+\_\+auts2()}, \textbf{ osmo\+\_\+auth\+\_\+register()}, and \textbf{ osmo\+\_\+auth\+\_\+supported()}.

\mbox{\label{group__auth_ga4654b1872666bbfacbe0a37c73028716}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!sqn@{sqn}}
\index{sqn@{sqn}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{\hspace{0.1cm}{\footnotesize\ttfamily [1/4]}}
{\footnotesize\ttfamily uint64\+\_\+t  \{ ... \} \+::sqn}



sequence number (in\+: prev sqn; out\+: used sqn) 

\mbox{\label{group__auth_ga9b9ac4dfef474e8dd9113a5bb41c56a2}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!sqn@{sqn}}
\index{sqn@{sqn}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{sqn\hspace{0.1cm}{\footnotesize\ttfamily [2/4]}}
{\footnotesize\ttfamily uint64\+\_\+t osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::sqn}



sequence number (in\+: prev sqn; out\+: used sqn) 



Referenced by \textbf{ auth\+\_\+data2auth\+\_\+data2()}, \textbf{ milenage\+\_\+gen\+\_\+vec()}, \textbf{ milenage\+\_\+gen\+\_\+vec\+\_\+auts()}, \textbf{ osmo\+\_\+auth\+\_\+gen\+\_\+vec()}, \textbf{ osmo\+\_\+auth\+\_\+gen\+\_\+vec\+\_\+auts()}, \textbf{ tuak\+\_\+gen\+\_\+vec()}, \textbf{ tuak\+\_\+gen\+\_\+vec\+\_\+auts()}, \textbf{ xor\+\_\+gen\+\_\+vec()}, and \textbf{ xor\+\_\+gen\+\_\+vec\+\_\+auts()}.

\mbox{\label{group__auth_ga396bf9e7314325f7924528c14c20c0ed}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!sqn@{sqn}}
\index{sqn@{sqn}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{\hspace{0.1cm}{\footnotesize\ttfamily [3/4]}}
{\footnotesize\ttfamily uint64\+\_\+t  \{ ... \} \+::sqn}



sequence number (in\+: prev sqn; out\+: used sqn) 

\mbox{\label{group__auth_ga8b63d241b26b9c87bd1f0ff5d8949cb3}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!sqn@{sqn}}
\index{sqn@{sqn}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{sqn\hspace{0.1cm}{\footnotesize\ttfamily [4/4]}}
{\footnotesize\ttfamily uint64\+\_\+t osmo\+\_\+sub\+\_\+auth\+\_\+data\+::sqn}



sequence number (in\+: prev sqn; out\+: used sqn) 



Referenced by \textbf{ auth\+\_\+data2auth\+\_\+data2()}, \textbf{ oap\+\_\+evaluate\+\_\+challenge()}, \textbf{ osmo\+\_\+auth\+\_\+gen\+\_\+vec()}, and \textbf{ osmo\+\_\+auth\+\_\+gen\+\_\+vec\+\_\+auts()}.

\mbox{\label{group__auth_gae3a3908addc4cfba2abd7c1c2066eaf5}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!sqn\_ms@{sqn\_ms}}
\index{sqn\_ms@{sqn\_ms}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{\hspace{0.1cm}{\footnotesize\ttfamily [1/4]}}
{\footnotesize\ttfamily uint64\+\_\+t  \{ ... \} \+::sqn\+\_\+ms}



sqn from AUTS (output value only) 

\mbox{\label{group__auth_gad23a76b5cbb60e24e9e38427157295b2}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!sqn\_ms@{sqn\_ms}}
\index{sqn\_ms@{sqn\_ms}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{sqn\_ms\hspace{0.1cm}{\footnotesize\ttfamily [2/4]}}
{\footnotesize\ttfamily uint64\+\_\+t osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::sqn\+\_\+ms}



sqn from AUTS (output value only) 



Referenced by \textbf{ auth\+\_\+data2auth\+\_\+data2()}, \textbf{ milenage\+\_\+gen\+\_\+vec\+\_\+auts()}, \textbf{ osmo\+\_\+auth\+\_\+gen\+\_\+vec\+\_\+auts()}, \textbf{ tuak\+\_\+gen\+\_\+vec\+\_\+auts()}, and \textbf{ xor\+\_\+gen\+\_\+vec\+\_\+auts()}.

\mbox{\label{group__auth_gad952c22fb24659a4f50506dd3548d9ee}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!sqn\_ms@{sqn\_ms}}
\index{sqn\_ms@{sqn\_ms}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{\hspace{0.1cm}{\footnotesize\ttfamily [3/4]}}
{\footnotesize\ttfamily uint64\+\_\+t  \{ ... \} \+::sqn\+\_\+ms}



sqn from AUTS (output value only) 

\mbox{\label{group__auth_gace9efe56c96005583d30cffa41bd6bb2}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!sqn\_ms@{sqn\_ms}}
\index{sqn\_ms@{sqn\_ms}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{sqn\_ms\hspace{0.1cm}{\footnotesize\ttfamily [4/4]}}
{\footnotesize\ttfamily uint64\+\_\+t osmo\+\_\+sub\+\_\+auth\+\_\+data\+::sqn\+\_\+ms}



sqn from AUTS (output value only) 



Referenced by \textbf{ auth\+\_\+data2auth\+\_\+data2()}, and \textbf{ osmo\+\_\+auth\+\_\+gen\+\_\+vec\+\_\+auts()}.

\mbox{\label{group__auth_ga9a72cd0021bd4c707f38399452f044d5}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!sres@{sres}}
\index{sres@{sres}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{sres}
{\footnotesize\ttfamily uint8\+\_\+t osmo\+\_\+auth\+\_\+vector\+::sres[4]}



authentication result for GSM 



Referenced by \textbf{ c128v1\+\_\+gen\+\_\+vec()}, \textbf{ c128v2\+\_\+gen\+\_\+vec()}, \textbf{ c128v3\+\_\+gen\+\_\+vec()}, \textbf{ decode\+\_\+auth\+\_\+info()}, \textbf{ encode\+\_\+auth\+\_\+info()}, \textbf{ milenage\+\_\+gen\+\_\+vec()}, \textbf{ tuak\+\_\+gen\+\_\+vec()}, \textbf{ xor2g\+\_\+gen\+\_\+vec()}, and \textbf{ xor\+\_\+gen\+\_\+vec()}.

\mbox{\label{group__auth_ga456fc559b3cf4c1536af923d3e788377}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!table0@{table0}}
\index{table0@{table0}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{table0}
{\footnotesize\ttfamily const uint8\+\_\+t table0[256]\hspace{0.3cm}{\ttfamily [static]}}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        197, 235, 60, 151, 98, 96, 3, 100, 248, 118, 42, 117, 172, 211, 181, 203, 61,}
\DoxyCodeLine{        126, 156, 87, 149, 224, 55, 132, 186, 63, 238, 255, 85, 83, 152, 33, 160,}
\DoxyCodeLine{        184, 210, 219, 159, 11, 180, 194, 130, 212, 147, 5, 215, 92, 27, 46, 113,}
\DoxyCodeLine{        187, 52, 25, 185, 79, 221, 48, 70, 31, 101, 15, 195, 201, 50, 222, 137,}
\DoxyCodeLine{        233, 229, 106, 122, 183, 178, 177, 144, 207, 234, 182, 37, 254, 227, 231, 54,}
\DoxyCodeLine{        209, 133, 65, 202, 69, 237, 220, 189, 146, 120, 68, 21, 125, 38, 30, 2,}
\DoxyCodeLine{        155, 53, 196, 174, 176, 51, 246, 167, 76, 110, 20, 82, 121, 103, 112, 56,}
\DoxyCodeLine{        173, 49, 217, 252, 0, 114, 228, 123, 12, 93, 161, 253, 232, 240, 175, 67,}
\DoxyCodeLine{        128, 22, 158, 89, 18, 77, 109, 190, 17, 62, 4, 153, 163, 59, 145, 138,}
\DoxyCodeLine{        7, 74, 205, 10, 162, 80, 45, 104, 111, 150, 214, 154, 28, 191, 169, 213,}
\DoxyCodeLine{        88, 193, 198, 200, 245, 39, 164, 124, 84, 78, 1, 188, 170, 23, 86, 226,}
\DoxyCodeLine{        141, 32, 6, 131, 127, 199, 40, 135, 16, 57, 71, 91, 225, 168, 242, 206,}
\DoxyCodeLine{        97, 166, 44, 14, 90, 236, 239, 230, 244, 223, 108, 102, 119, 148, 251, 29,}
\DoxyCodeLine{        216, 8, 9, 249, 208, 24, 105, 94, 34, 64, 95, 115, 72, 134, 204, 43,}
\DoxyCodeLine{        247, 243, 218, 47, 58, 73, 107, 241, 179, 116, 66, 36, 143, 81, 250, 139,}
\DoxyCodeLine{        19, 13, 142, 140, 129, 192, 99, 171, 157, 136, 41, 75, 35, 165, 26}
\DoxyCodeLine{\}}

\end{DoxyCode}


Referenced by \textbf{ \+\_\+comp128v23\+\_\+internal()}.

\mbox{\label{group__auth_ga342b496e9acfe4a29d7d7fa44d4ddd6b}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!table1@{table1}}
\index{table1@{table1}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{table1}
{\footnotesize\ttfamily const uint8\+\_\+t table1[256]\hspace{0.3cm}{\ttfamily [static]}}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        170, 42, 95, 141, 109, 30, 71, 89, 26, 147, 231, 205, 239, 212, 124, 129, 216,}
\DoxyCodeLine{        79, 15, 185, 153, 14, 251, 162, 0, 241, 172, 197, 43, 10, 194, 235, 6,}
\DoxyCodeLine{        20, 72, 45, 143, 104, 161, 119, 41, 136, 38, 189, 135, 25, 93, 18, 224,}
\DoxyCodeLine{        171, 252, 195, 63, 19, 58, 165, 23, 55, 133, 254, 214, 144, 220, 178, 156,}
\DoxyCodeLine{        52, 110, 225, 97, 183, 140, 39, 53, 88, 219, 167, 16, 198, 62, 222, 76,}
\DoxyCodeLine{        139, 175, 94, 51, 134, 115, 22, 67, 1, 249, 217, 3, 5, 232, 138, 31,}
\DoxyCodeLine{        56, 116, 163, 70, 128, 234, 132, 229, 184, 244, 13, 34, 73, 233, 154, 179,}
\DoxyCodeLine{        131, 215, 236, 142, 223, 27, 57, 246, 108, 211, 8, 253, 85, 66, 245, 193,}
\DoxyCodeLine{        78, 190, 4, 17, 7, 150, 127, 152, 213, 37, 186, 2, 243, 46, 169, 68,}
\DoxyCodeLine{        101, 60, 174, 208, 158, 176, 69, 238, 191, 90, 83, 166, 125, 77, 59, 21,}
\DoxyCodeLine{        92, 49, 151, 168, 99, 9, 50, 146, 113, 117, 228, 65, 230, 40, 82, 54,}
\DoxyCodeLine{        237, 227, 102, 28, 36, 107, 24, 44, 126, 206, 201, 61, 114, 164, 207, 181,}
\DoxyCodeLine{        29, 91, 64, 221, 255, 48, 155, 192, 111, 180, 210, 182, 247, 203, 148, 209,}
\DoxyCodeLine{        98, 173, 11, 75, 123, 250, 118, 32, 47, 240, 202, 74, 177, 100, 80, 196,}
\DoxyCodeLine{        33, 248, 86, 157, 137, 120, 130, 84, 204, 122, 81, 242, 188, 200, 149, 226,}
\DoxyCodeLine{        218, 160, 187, 106, 35, 87, 105, 96, 145, 199, 159, 12, 121, 103, 112}
\DoxyCodeLine{\}}

\end{DoxyCode}


Referenced by \textbf{ \+\_\+comp128v23\+\_\+internal()}.

\mbox{\label{group__auth_ga3e56122c81d12c49ed948eb64d828ca9}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!table\_0@{table\_0}}
\index{table\_0@{table\_0}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{table\_0}
{\footnotesize\ttfamily const uint8\+\_\+t table\+\_\+0[512]\hspace{0.3cm}{\ttfamily [static]}}

\mbox{\label{group__auth_ga5d28426025d42ff9f55c14e490d79334}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!table\_1@{table\_1}}
\index{table\_1@{table\_1}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{table\_1}
{\footnotesize\ttfamily const uint8\+\_\+t table\+\_\+1[256]\hspace{0.3cm}{\ttfamily [static]}}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{  19,  11,  80, 114,  43,   1,  69,  94,  39,  18, 127, 117,  97,   3,  85,  43,}
\DoxyCodeLine{  27, 124,  70,  83,  47,  71,  63,  10,  47,  89,  79,   4,  14,  59,  11,   5,}
\DoxyCodeLine{  35, 107, 103,  68,  21,  86,  36,  91,  85, 126,  32,  50, 109,  94, 120,   6,}
\DoxyCodeLine{  53,  79,  28,  45,  99,  95,  41,  34,  88,  68,  93,  55, 110, 125, 105,  20,}
\DoxyCodeLine{  90,  80,  76,  96,  23,  60,  89,  64, 121,  56,  14,  74, 101,   8,  19,  78,}
\DoxyCodeLine{  76,  66, 104,  46, 111,  50,  32,   3,  39,   0,  58,  25,  92,  22,  18,  51,}
\DoxyCodeLine{  57,  65, 119, 116,  22, 109,   7,  86,  59,  93,  62, 110,  78,  99,  77,  67,}
\DoxyCodeLine{  12, 113,  87,  98, 102,   5,  88,  33,  38,  56,  23,   8,  75,  45,  13,  75,}
\DoxyCodeLine{  95,  63,  28,  49, 123, 120,  20, 112,  44,  30,  15,  98, 106,   2, 103,  29,}
\DoxyCodeLine{  82, 107,  42, 124,  24,  30,  41,  16, 108, 100, 117,  40,  73,  40,   7, 114,}
\DoxyCodeLine{  82, 115,  36, 112,  12, 102, 100,  84,  92,  48,  72,  97,   9,  54,  55,  74,}
\DoxyCodeLine{ 113, 123,  17,  26,  53,  58,   4,   9,  69, 122,  21, 118,  42,  60,  27,  73,}
\DoxyCodeLine{ 118, 125,  34,  15,  65, 115,  84,  64,  62,  81,  70,   1,  24, 111, 121,  83,}
\DoxyCodeLine{ 104,  81,  49, 127,  48, 105,  31,  10,   6,  91,  87,  37,  16,  54, 116, 126,}
\DoxyCodeLine{  31,  38,  13,   0,  72, 106,  77,  61,  26,  67,  46,  29,  96,  37,  61,  52,}
\DoxyCodeLine{ 101,  17,  44, 108,  71,  52,  66,  57,  33,  51,  25,  90,   2, 119, 122,  35,}
\DoxyCodeLine{\}}

\end{DoxyCode}
\mbox{\label{group__auth_ga28df089a79bcf8fef3aa44484c244d9e}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!table\_2@{table\_2}}
\index{table\_2@{table\_2}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{table\_2}
{\footnotesize\ttfamily const uint8\+\_\+t table\+\_\+2[128]\hspace{0.3cm}{\ttfamily [static]}}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{ 52,  50,  44,   6,  21,  49,  41,  59,  39,  51,  25,  32,  51,  47,  52,  43,}
\DoxyCodeLine{ 37,   4,  40,  34,  61,  12,  28,   4,  58,  23,   8,  15,  12,  22,   9,  18,}
\DoxyCodeLine{ 55,  10,  33,  35,  50,   1,  43,   3,  57,  13,  62,  14,   7,  42,  44,  59,}
\DoxyCodeLine{ 62,  57,  27,   6,   8,  31,  26,  54,  41,  22,  45,  20,  39,   3,  16,  56,}
\DoxyCodeLine{ 48,   2,  21,  28,  36,  42,  60,  33,  34,  18,   0,  11,  24,  10,  17,  61,}
\DoxyCodeLine{ 29,  14,  45,  26,  55,  46,  11,  17,  54,  46,   9,  24,  30,  60,  32,   0,}
\DoxyCodeLine{ 20,  38,   2,  30,  58,  35,   1,  16,  56,  40,  23,  48,  13,  19,  19,  27,}
\DoxyCodeLine{ 31,  53,  47,  38,  63,  15,  49,   5,  37,  53,  25,  36,  63,  29,   5,   7,}
\DoxyCodeLine{\}}

\end{DoxyCode}
\mbox{\label{group__auth_gafc1b65a1e6d5b0e71f6d79a4cb7383ba}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!table\_3@{table\_3}}
\index{table\_3@{table\_3}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{table\_3}
{\footnotesize\ttfamily const uint8\+\_\+t table\+\_\+3[64]\hspace{0.3cm}{\ttfamily [static]}}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{  1,   5,  29,   6,  25,   1,  18,  23,  17,  19,   0,   9,  24,  25,   6,  31,}
\DoxyCodeLine{ 28,  20,  24,  30,   4,  27,   3,  13,  15,  16,  14,  18,   4,   3,   8,   9,}
\DoxyCodeLine{ 20,   0,  12,  26,  21,   8,  28,   2,  29,   2,  15,   7,  11,  22,  14,  10,}
\DoxyCodeLine{ 17,  21,  12,  30,  26,  27,  16,  31,  11,   7,  13,  23,  10,   5,  22,  19,}
\DoxyCodeLine{\}}

\end{DoxyCode}
\mbox{\label{group__auth_ga042f8c0ec33de372d706fa3c57089727}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!table\_4@{table\_4}}
\index{table\_4@{table\_4}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{table\_4}
{\footnotesize\ttfamily const uint8\+\_\+t table\+\_\+4[32]\hspace{0.3cm}{\ttfamily [static]}}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{ 15,  12,  10,   4,   1,  14,  11,   7,   5,   0,  14,   7,   1,   2,  13,   8,}
\DoxyCodeLine{ 10,   3,   4,   9,   6,   0,   3,   2,   5,   6,   8,   9,  11,  13,  15,  12,}
\DoxyCodeLine{\}}

\end{DoxyCode}
\mbox{\label{group__auth_gaa467ce31a4037cb6cb8c0b324854d300}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!tuak\_alg@{tuak\_alg}}
\index{tuak\_alg@{tuak\_alg}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{tuak\_alg}
{\footnotesize\ttfamily struct \textbf{ osmo\+\_\+auth\+\_\+impl} tuak\+\_\+alg\hspace{0.3cm}{\ttfamily [static]}}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        .algo = OSMO\_AUTH\_ALG\_TUAK,}
\DoxyCodeLine{        .name = \textcolor{stringliteral}{"{}TUAK (libosmogsm built-\/in)"{}},}
\DoxyCodeLine{        .priority = 1000,}
\DoxyCodeLine{        .gen\_vec = \&tuak\_gen\_vec,}
\DoxyCodeLine{        .gen\_vec\_auts = \&tuak\_gen\_vec\_auts,}
\DoxyCodeLine{\}}

\end{DoxyCode}


Referenced by \textbf{ \+\_\+\+\_\+attribute\+\_\+\+\_\+()}.

\mbox{\label{group__auth_ga1fbc41e080734844b6b8ade81d465705}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!type@{type}}
\index{type@{type}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{type\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily enum \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+type} osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::type}



Referenced by \textbf{ auth\+\_\+data2auth\+\_\+data2()}, \textbf{ gen\+\_\+opc\+\_\+if\+\_\+needed()}, \textbf{ xor2g\+\_\+gen\+\_\+vec()}, \textbf{ xor\+\_\+gen\+\_\+vec()}, and \textbf{ xor\+\_\+gen\+\_\+vec\+\_\+auts()}.

\mbox{\label{group__auth_ga8be97cffc5fb3766cc25f7af443632b6}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!type@{type}}
\index{type@{type}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{type\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily enum \textbf{ osmo\+\_\+sub\+\_\+auth\+\_\+type} osmo\+\_\+sub\+\_\+auth\+\_\+data\+::type}



Referenced by \textbf{ auth\+\_\+data2auth\+\_\+data2()}, \textbf{ oap\+\_\+evaluate\+\_\+challenge()}, \textbf{ osmo\+\_\+auth\+\_\+gen\+\_\+vec()}, and \textbf{ osmo\+\_\+auth\+\_\+gen\+\_\+vec\+\_\+auts()}.

\mbox{\label{group__auth_ga79887be78e0615fa2ecf1667ba8e241a}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!u@{u}}
\index{u@{u}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily union  \{ ... \}  osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::u}



Referenced by \textbf{ auth\+\_\+data2auth\+\_\+data2()}, \textbf{ c128v1\+\_\+gen\+\_\+vec()}, \textbf{ c128v2\+\_\+gen\+\_\+vec()}, \textbf{ c128v3\+\_\+gen\+\_\+vec()}, \textbf{ gen\+\_\+opc\+\_\+if\+\_\+needed()}, \textbf{ milenage\+\_\+gen\+\_\+vec()}, \textbf{ milenage\+\_\+gen\+\_\+vec\+\_\+auts()}, \textbf{ osmo\+\_\+auth\+\_\+gen\+\_\+vec()}, \textbf{ osmo\+\_\+auth\+\_\+gen\+\_\+vec\+\_\+auts()}, \textbf{ tuak\+\_\+gen\+\_\+vec()}, \textbf{ tuak\+\_\+gen\+\_\+vec\+\_\+auts()}, \textbf{ xor2g\+\_\+gen\+\_\+vec()}, \textbf{ xor\+\_\+gen\+\_\+vec()}, and \textbf{ xor\+\_\+gen\+\_\+vec\+\_\+auts()}.

\mbox{\label{group__auth_ga7cc3373390ff61537b41ed939e83ef1d}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!u@{u}}
\index{u@{u}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily union  \{ ... \}  osmo\+\_\+sub\+\_\+auth\+\_\+data\+::u}



Referenced by \textbf{ auth\+\_\+data2auth\+\_\+data2()}, \textbf{ oap\+\_\+evaluate\+\_\+challenge()}, \textbf{ osmo\+\_\+auth\+\_\+gen\+\_\+vec()}, and \textbf{ osmo\+\_\+auth\+\_\+gen\+\_\+vec\+\_\+auts()}.

\mbox{\label{group__auth_ga20e1f9d6098482464ee1fdb21a29eff7}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!umts@{umts}}
\index{umts@{umts}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{\hspace{0.1cm}{\footnotesize\ttfamily [1/4]}}
{\footnotesize\ttfamily struct  \{ ... \}  osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::@125\+::umts}

\mbox{\label{group__auth_ga7d6a1d58930ce19fb20acb40566566b6}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!umts@{umts}}
\index{umts@{umts}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{\hspace{0.1cm}{\footnotesize\ttfamily [2/4]}}
{\footnotesize\ttfamily struct  \{ ... \}  osmo\+\_\+sub\+\_\+auth\+\_\+data2\+::umts}



Referenced by \textbf{ auth\+\_\+data2auth\+\_\+data2()}, \textbf{ gen\+\_\+opc\+\_\+if\+\_\+needed()}, \textbf{ milenage\+\_\+gen\+\_\+vec()}, \textbf{ milenage\+\_\+gen\+\_\+vec\+\_\+auts()}, \textbf{ osmo\+\_\+auth\+\_\+gen\+\_\+vec()}, \textbf{ osmo\+\_\+auth\+\_\+gen\+\_\+vec\+\_\+auts()}, \textbf{ tuak\+\_\+gen\+\_\+vec()}, \textbf{ tuak\+\_\+gen\+\_\+vec\+\_\+auts()}, \textbf{ xor\+\_\+gen\+\_\+vec()}, and \textbf{ xor\+\_\+gen\+\_\+vec\+\_\+auts()}.

\mbox{\label{group__auth_gad7a34d370107b249f2f7c36c426256bd}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!umts@{umts}}
\index{umts@{umts}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{\hspace{0.1cm}{\footnotesize\ttfamily [3/4]}}
{\footnotesize\ttfamily struct  \{ ... \}  osmo\+\_\+sub\+\_\+auth\+\_\+data\+::@128\+::umts}

\mbox{\label{group__auth_ga1e2a52dd40064ad1825d6a71825506d7}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!umts@{umts}}
\index{umts@{umts}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{\hspace{0.1cm}{\footnotesize\ttfamily [4/4]}}
{\footnotesize\ttfamily struct  \{ ... \}  osmo\+\_\+sub\+\_\+auth\+\_\+data\+::umts}



Referenced by \textbf{ auth\+\_\+data2auth\+\_\+data2()}, \textbf{ oap\+\_\+evaluate\+\_\+challenge()}, \textbf{ osmo\+\_\+auth\+\_\+gen\+\_\+vec()}, and \textbf{ osmo\+\_\+auth\+\_\+gen\+\_\+vec\+\_\+auts()}.

\mbox{\label{group__auth_ga2549e926f009789675fb7f030dd91ea8}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!xor2g\_alg@{xor2g\_alg}}
\index{xor2g\_alg@{xor2g\_alg}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{xor2g\_alg}
{\footnotesize\ttfamily struct \textbf{ osmo\+\_\+auth\+\_\+impl} xor2g\+\_\+alg\hspace{0.3cm}{\ttfamily [static]}}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        .algo = OSMO\_AUTH\_ALG\_XOR\_2G,}
\DoxyCodeLine{        .name = \textcolor{stringliteral}{"{}XOR-\/2G (libosmogsm built-\/in)"{}},}
\DoxyCodeLine{        .priority = 1000,}
\DoxyCodeLine{        .gen\_vec = \&xor2g\_gen\_vec,}
\DoxyCodeLine{\}}

\end{DoxyCode}


Referenced by \textbf{ \+\_\+\+\_\+attribute\+\_\+\+\_\+()}.

\mbox{\label{group__auth_gadcedd117ca6eb4785411f43b74a81933}} 
\index{GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}!xor\_alg@{xor\_alg}}
\index{xor\_alg@{xor\_alg}!GSM/GPRS/3G Authentication@{GSM/GPRS/3G Authentication}}
\doxysubsubsection{xor\_alg}
{\footnotesize\ttfamily struct \textbf{ osmo\+\_\+auth\+\_\+impl} xor\+\_\+alg\hspace{0.3cm}{\ttfamily [static]}}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        .algo = OSMO\_AUTH\_ALG\_XOR\_3G,}
\DoxyCodeLine{        .name = \textcolor{stringliteral}{"{}XOR-\/3G (libosmogsm built-\/in)"{}},}
\DoxyCodeLine{        .priority = 1000,}
\DoxyCodeLine{        .gen\_vec = \&xor\_gen\_vec,}
\DoxyCodeLine{        .gen\_vec\_auts = \&xor\_gen\_vec\_auts,}
\DoxyCodeLine{\}}

\end{DoxyCode}


Referenced by \textbf{ \+\_\+\+\_\+attribute\+\_\+\+\_\+()}.

