\hypertarget{fingerprint_8h}{}\section{src/fingerprint.h File Reference}
\label{fingerprint_8h}\index{src/fingerprint.\+h@{src/fingerprint.\+h}}
{\ttfamily \#include \char`\"{}signal\+\_\+protocol\+\_\+types.\+h\char`\"{}}\newline
Include dependency graph for fingerprint.\+h\+:
\nopagebreak
\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[width=265pt]{fingerprint_8h__incl}
\end{center}
\end{figure}
\subsection*{Functions}
\begin{DoxyCompactItemize}
\item 
int \hyperlink{fingerprint_8h_a3a086e22bb8d882f9fd23d15958c570a}{fingerprint\+\_\+generator\+\_\+create} (\hyperlink{signal__protocol__types_8h_afba52fd3e8ba8ba461017fd002005186}{fingerprint\+\_\+generator} $\ast$$\ast$generator, int iterations, int scannable\+\_\+version, \hyperlink{structsignal__context}{signal\+\_\+context} $\ast$global\+\_\+context)
\item 
int \hyperlink{fingerprint_8h_ae0e6e555933e2b27cffe2ccde2292036}{fingerprint\+\_\+generator\+\_\+create\+\_\+for} (\hyperlink{signal__protocol__types_8h_afba52fd3e8ba8ba461017fd002005186}{fingerprint\+\_\+generator} $\ast$generator, const char $\ast$local\+\_\+stable\+\_\+identifier, const \hyperlink{signal__protocol__types_8h_a73ea701c5087163bba608c4706df6176}{ec\+\_\+public\+\_\+key} $\ast$local\+\_\+identity\+\_\+key, const char $\ast$remote\+\_\+stable\+\_\+identifier, const \hyperlink{signal__protocol__types_8h_a73ea701c5087163bba608c4706df6176}{ec\+\_\+public\+\_\+key} $\ast$remote\+\_\+identity\+\_\+key, \hyperlink{signal__protocol__types_8h_a3323cceb779c3f94e87bff43f6eb23f2}{fingerprint} $\ast$$\ast$fingerprint\+\_\+val)
\item 
int \hyperlink{fingerprint_8h_a4f2386703d7e1277528c19309e555911}{fingerprint\+\_\+generator\+\_\+create\+\_\+for\+\_\+list} (\hyperlink{signal__protocol__types_8h_afba52fd3e8ba8ba461017fd002005186}{fingerprint\+\_\+generator} $\ast$generator, const char $\ast$local\+\_\+stable\+\_\+identifier, const \hyperlink{signal__protocol__types_8h_ac3820e3142fd7136e199c9bea5b5a1e8}{ec\+\_\+public\+\_\+key\+\_\+list} $\ast$local\+\_\+identity\+\_\+key\+\_\+list, const char $\ast$remote\+\_\+stable\+\_\+identifier, const \hyperlink{signal__protocol__types_8h_ac3820e3142fd7136e199c9bea5b5a1e8}{ec\+\_\+public\+\_\+key\+\_\+list} $\ast$remote\+\_\+identity\+\_\+key\+\_\+list, \hyperlink{signal__protocol__types_8h_a3323cceb779c3f94e87bff43f6eb23f2}{fingerprint} $\ast$$\ast$fingerprint\+\_\+val)
\item 
void \hyperlink{fingerprint_8h_a30a8320a273654748bf49d1b6b2d37a1}{fingerprint\+\_\+generator\+\_\+free} (\hyperlink{signal__protocol__types_8h_afba52fd3e8ba8ba461017fd002005186}{fingerprint\+\_\+generator} $\ast$generator)
\item 
int \hyperlink{fingerprint_8h_a57ec9e389b5d5c0baa64bf9f23f7f2e0}{fingerprint\+\_\+create} (\hyperlink{signal__protocol__types_8h_a3323cceb779c3f94e87bff43f6eb23f2}{fingerprint} $\ast$$\ast$fingerprint\+\_\+val, \hyperlink{signal__protocol__types_8h_a336fb6fb46299a4d2c5c85c2d53fd59a}{displayable\+\_\+fingerprint} $\ast$displayable, \hyperlink{signal__protocol__types_8h_a00095147498537e644b908f6519efd8d}{scannable\+\_\+fingerprint} $\ast$scannable)
\item 
\hyperlink{signal__protocol__types_8h_a336fb6fb46299a4d2c5c85c2d53fd59a}{displayable\+\_\+fingerprint} $\ast$ \hyperlink{fingerprint_8h_af55e75fc35c9011f7d5aa424b8bbab97}{fingerprint\+\_\+get\+\_\+displayable} (const \hyperlink{signal__protocol__types_8h_a3323cceb779c3f94e87bff43f6eb23f2}{fingerprint} $\ast$fingerprint\+\_\+val)
\item 
\hyperlink{signal__protocol__types_8h_a00095147498537e644b908f6519efd8d}{scannable\+\_\+fingerprint} $\ast$ \hyperlink{fingerprint_8h_a6d3363582d0aef19cc417349e3707394}{fingerprint\+\_\+get\+\_\+scannable} (const \hyperlink{signal__protocol__types_8h_a3323cceb779c3f94e87bff43f6eb23f2}{fingerprint} $\ast$fingerprint\+\_\+val)
\item 
void \hyperlink{fingerprint_8h_af8e08754ea427d7742e92a90c06791ea}{fingerprint\+\_\+destroy} (\hyperlink{structsignal__type__base}{signal\+\_\+type\+\_\+base} $\ast$type)
\item 
int \hyperlink{fingerprint_8h_ab8b1dd393246577d3ac2196933e2a448}{displayable\+\_\+fingerprint\+\_\+create} (\hyperlink{signal__protocol__types_8h_a336fb6fb46299a4d2c5c85c2d53fd59a}{displayable\+\_\+fingerprint} $\ast$$\ast$displayable, const char $\ast$local\+\_\+fingerprint, const char $\ast$remote\+\_\+fingerprint)
\item 
const char $\ast$ \hyperlink{fingerprint_8h_a8043142388dcadb3e04644a89528ee20}{displayable\+\_\+fingerprint\+\_\+local} (const \hyperlink{signal__protocol__types_8h_a336fb6fb46299a4d2c5c85c2d53fd59a}{displayable\+\_\+fingerprint} $\ast$displayable)
\item 
const char $\ast$ \hyperlink{fingerprint_8h_a4a4c3aeb33af6c8001613ed79bbd7738}{displayable\+\_\+fingerprint\+\_\+remote} (const \hyperlink{signal__protocol__types_8h_a336fb6fb46299a4d2c5c85c2d53fd59a}{displayable\+\_\+fingerprint} $\ast$displayable)
\item 
const char $\ast$ \hyperlink{fingerprint_8h_a6e6cead3ec33a475205decdcb571c941}{displayable\+\_\+fingerprint\+\_\+text} (const \hyperlink{signal__protocol__types_8h_a336fb6fb46299a4d2c5c85c2d53fd59a}{displayable\+\_\+fingerprint} $\ast$displayable)
\item 
void \hyperlink{fingerprint_8h_a8e9973e1d041eb6b003991623c880712}{displayable\+\_\+fingerprint\+\_\+destroy} (\hyperlink{structsignal__type__base}{signal\+\_\+type\+\_\+base} $\ast$type)
\item 
int \hyperlink{fingerprint_8h_a1e26e6a1a18f911a8339913923c886dd}{scannable\+\_\+fingerprint\+\_\+create} (\hyperlink{signal__protocol__types_8h_a00095147498537e644b908f6519efd8d}{scannable\+\_\+fingerprint} $\ast$$\ast$scannable, \hyperlink{uthash_8h_a435d1572bf3f880d55459d9805097f62}{uint32\+\_\+t} version, const char $\ast$local\+\_\+stable\+\_\+identifier, const \hyperlink{structsignal__buffer}{signal\+\_\+buffer} $\ast$local\+\_\+fingerprint, const char $\ast$remote\+\_\+stable\+\_\+identifier, const \hyperlink{structsignal__buffer}{signal\+\_\+buffer} $\ast$remote\+\_\+fingerprint)
\item 
int \hyperlink{fingerprint_8h_aec8d27698e53181e7ef546c21dec8ce8}{scannable\+\_\+fingerprint\+\_\+serialize} (\hyperlink{structsignal__buffer}{signal\+\_\+buffer} $\ast$$\ast$buffer, const \hyperlink{signal__protocol__types_8h_a00095147498537e644b908f6519efd8d}{scannable\+\_\+fingerprint} $\ast$scannable)
\item 
int \hyperlink{fingerprint_8h_a5e5790959651465ce5bb2eb2c1291c1d}{scannable\+\_\+fingerprint\+\_\+deserialize} (\hyperlink{signal__protocol__types_8h_a00095147498537e644b908f6519efd8d}{scannable\+\_\+fingerprint} $\ast$$\ast$scannable, const \hyperlink{uthash_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t} $\ast$data, size\+\_\+t len, \hyperlink{structsignal__context}{signal\+\_\+context} $\ast$global\+\_\+context)
\item 
\hyperlink{uthash_8h_a435d1572bf3f880d55459d9805097f62}{uint32\+\_\+t} \hyperlink{fingerprint_8h_a769d41cfd0a356ae837471c58eb361e0}{scannable\+\_\+fingerprint\+\_\+get\+\_\+version} (const \hyperlink{signal__protocol__types_8h_a00095147498537e644b908f6519efd8d}{scannable\+\_\+fingerprint} $\ast$scannable)
\item 
const char $\ast$ \hyperlink{fingerprint_8h_aa0a6d71b55808585b31af9674a59b395}{scannable\+\_\+fingerprint\+\_\+get\+\_\+local\+\_\+stable\+\_\+identifier} (const \hyperlink{signal__protocol__types_8h_a00095147498537e644b908f6519efd8d}{scannable\+\_\+fingerprint} $\ast$scannable)
\item 
\hyperlink{structsignal__buffer}{signal\+\_\+buffer} $\ast$ \hyperlink{fingerprint_8h_a375402cc160c3568de34cfd038203534}{scannable\+\_\+fingerprint\+\_\+get\+\_\+local\+\_\+fingerprint} (const \hyperlink{signal__protocol__types_8h_a00095147498537e644b908f6519efd8d}{scannable\+\_\+fingerprint} $\ast$scannable)
\item 
const char $\ast$ \hyperlink{fingerprint_8h_aecd96dc2d72482576e95bc9681cdaf26}{scannable\+\_\+fingerprint\+\_\+get\+\_\+remote\+\_\+stable\+\_\+identifier} (const \hyperlink{signal__protocol__types_8h_a00095147498537e644b908f6519efd8d}{scannable\+\_\+fingerprint} $\ast$scannable)
\item 
\hyperlink{structsignal__buffer}{signal\+\_\+buffer} $\ast$ \hyperlink{fingerprint_8h_ab0ba2190e6aef718ff10cb8a208133de}{scannable\+\_\+fingerprint\+\_\+get\+\_\+remote\+\_\+fingerprint} (const \hyperlink{signal__protocol__types_8h_a00095147498537e644b908f6519efd8d}{scannable\+\_\+fingerprint} $\ast$scannable)
\item 
int \hyperlink{fingerprint_8h_a3f0880bb29482fd02323eafd5bf9ebba}{scannable\+\_\+fingerprint\+\_\+compare} (const \hyperlink{signal__protocol__types_8h_a00095147498537e644b908f6519efd8d}{scannable\+\_\+fingerprint} $\ast$scannable, const \hyperlink{signal__protocol__types_8h_a00095147498537e644b908f6519efd8d}{scannable\+\_\+fingerprint} $\ast$other\+\_\+scannable)
\item 
void \hyperlink{fingerprint_8h_a69f75ba614155003097319d8b2fb4277}{scannable\+\_\+fingerprint\+\_\+destroy} (\hyperlink{structsignal__type__base}{signal\+\_\+type\+\_\+base} $\ast$type)
\end{DoxyCompactItemize}


\subsection{Function Documentation}
\mbox{\Hypertarget{fingerprint_8h_ab8b1dd393246577d3ac2196933e2a448}\label{fingerprint_8h_ab8b1dd393246577d3ac2196933e2a448}} 
\index{fingerprint.\+h@{fingerprint.\+h}!displayable\+\_\+fingerprint\+\_\+create@{displayable\+\_\+fingerprint\+\_\+create}}
\index{displayable\+\_\+fingerprint\+\_\+create@{displayable\+\_\+fingerprint\+\_\+create}!fingerprint.\+h@{fingerprint.\+h}}
\subsubsection{\texorpdfstring{displayable\+\_\+fingerprint\+\_\+create()}{displayable\_fingerprint\_create()}}
{\footnotesize\ttfamily int displayable\+\_\+fingerprint\+\_\+create (\begin{DoxyParamCaption}\item[{\hyperlink{signal__protocol__types_8h_a336fb6fb46299a4d2c5c85c2d53fd59a}{displayable\+\_\+fingerprint} $\ast$$\ast$}]{displayable,  }\item[{const char $\ast$}]{local\+\_\+fingerprint,  }\item[{const char $\ast$}]{remote\+\_\+fingerprint }\end{DoxyParamCaption})}

\mbox{\Hypertarget{fingerprint_8h_a8e9973e1d041eb6b003991623c880712}\label{fingerprint_8h_a8e9973e1d041eb6b003991623c880712}} 
\index{fingerprint.\+h@{fingerprint.\+h}!displayable\+\_\+fingerprint\+\_\+destroy@{displayable\+\_\+fingerprint\+\_\+destroy}}
\index{displayable\+\_\+fingerprint\+\_\+destroy@{displayable\+\_\+fingerprint\+\_\+destroy}!fingerprint.\+h@{fingerprint.\+h}}
\subsubsection{\texorpdfstring{displayable\+\_\+fingerprint\+\_\+destroy()}{displayable\_fingerprint\_destroy()}}
{\footnotesize\ttfamily void displayable\+\_\+fingerprint\+\_\+destroy (\begin{DoxyParamCaption}\item[{\hyperlink{structsignal__type__base}{signal\+\_\+type\+\_\+base} $\ast$}]{type }\end{DoxyParamCaption})}

\mbox{\Hypertarget{fingerprint_8h_a8043142388dcadb3e04644a89528ee20}\label{fingerprint_8h_a8043142388dcadb3e04644a89528ee20}} 
\index{fingerprint.\+h@{fingerprint.\+h}!displayable\+\_\+fingerprint\+\_\+local@{displayable\+\_\+fingerprint\+\_\+local}}
\index{displayable\+\_\+fingerprint\+\_\+local@{displayable\+\_\+fingerprint\+\_\+local}!fingerprint.\+h@{fingerprint.\+h}}
\subsubsection{\texorpdfstring{displayable\+\_\+fingerprint\+\_\+local()}{displayable\_fingerprint\_local()}}
{\footnotesize\ttfamily const char$\ast$ displayable\+\_\+fingerprint\+\_\+local (\begin{DoxyParamCaption}\item[{const \hyperlink{signal__protocol__types_8h_a336fb6fb46299a4d2c5c85c2d53fd59a}{displayable\+\_\+fingerprint} $\ast$}]{displayable }\end{DoxyParamCaption})}

\mbox{\Hypertarget{fingerprint_8h_a4a4c3aeb33af6c8001613ed79bbd7738}\label{fingerprint_8h_a4a4c3aeb33af6c8001613ed79bbd7738}} 
\index{fingerprint.\+h@{fingerprint.\+h}!displayable\+\_\+fingerprint\+\_\+remote@{displayable\+\_\+fingerprint\+\_\+remote}}
\index{displayable\+\_\+fingerprint\+\_\+remote@{displayable\+\_\+fingerprint\+\_\+remote}!fingerprint.\+h@{fingerprint.\+h}}
\subsubsection{\texorpdfstring{displayable\+\_\+fingerprint\+\_\+remote()}{displayable\_fingerprint\_remote()}}
{\footnotesize\ttfamily const char$\ast$ displayable\+\_\+fingerprint\+\_\+remote (\begin{DoxyParamCaption}\item[{const \hyperlink{signal__protocol__types_8h_a336fb6fb46299a4d2c5c85c2d53fd59a}{displayable\+\_\+fingerprint} $\ast$}]{displayable }\end{DoxyParamCaption})}

\mbox{\Hypertarget{fingerprint_8h_a6e6cead3ec33a475205decdcb571c941}\label{fingerprint_8h_a6e6cead3ec33a475205decdcb571c941}} 
\index{fingerprint.\+h@{fingerprint.\+h}!displayable\+\_\+fingerprint\+\_\+text@{displayable\+\_\+fingerprint\+\_\+text}}
\index{displayable\+\_\+fingerprint\+\_\+text@{displayable\+\_\+fingerprint\+\_\+text}!fingerprint.\+h@{fingerprint.\+h}}
\subsubsection{\texorpdfstring{displayable\+\_\+fingerprint\+\_\+text()}{displayable\_fingerprint\_text()}}
{\footnotesize\ttfamily const char$\ast$ displayable\+\_\+fingerprint\+\_\+text (\begin{DoxyParamCaption}\item[{const \hyperlink{signal__protocol__types_8h_a336fb6fb46299a4d2c5c85c2d53fd59a}{displayable\+\_\+fingerprint} $\ast$}]{displayable }\end{DoxyParamCaption})}

\mbox{\Hypertarget{fingerprint_8h_a57ec9e389b5d5c0baa64bf9f23f7f2e0}\label{fingerprint_8h_a57ec9e389b5d5c0baa64bf9f23f7f2e0}} 
\index{fingerprint.\+h@{fingerprint.\+h}!fingerprint\+\_\+create@{fingerprint\+\_\+create}}
\index{fingerprint\+\_\+create@{fingerprint\+\_\+create}!fingerprint.\+h@{fingerprint.\+h}}
\subsubsection{\texorpdfstring{fingerprint\+\_\+create()}{fingerprint\_create()}}
{\footnotesize\ttfamily int fingerprint\+\_\+create (\begin{DoxyParamCaption}\item[{\hyperlink{signal__protocol__types_8h_a3323cceb779c3f94e87bff43f6eb23f2}{fingerprint} $\ast$$\ast$}]{fingerprint\+\_\+val,  }\item[{\hyperlink{signal__protocol__types_8h_a336fb6fb46299a4d2c5c85c2d53fd59a}{displayable\+\_\+fingerprint} $\ast$}]{displayable,  }\item[{\hyperlink{signal__protocol__types_8h_a00095147498537e644b908f6519efd8d}{scannable\+\_\+fingerprint} $\ast$}]{scannable }\end{DoxyParamCaption})}

\mbox{\Hypertarget{fingerprint_8h_af8e08754ea427d7742e92a90c06791ea}\label{fingerprint_8h_af8e08754ea427d7742e92a90c06791ea}} 
\index{fingerprint.\+h@{fingerprint.\+h}!fingerprint\+\_\+destroy@{fingerprint\+\_\+destroy}}
\index{fingerprint\+\_\+destroy@{fingerprint\+\_\+destroy}!fingerprint.\+h@{fingerprint.\+h}}
\subsubsection{\texorpdfstring{fingerprint\+\_\+destroy()}{fingerprint\_destroy()}}
{\footnotesize\ttfamily void fingerprint\+\_\+destroy (\begin{DoxyParamCaption}\item[{\hyperlink{structsignal__type__base}{signal\+\_\+type\+\_\+base} $\ast$}]{type }\end{DoxyParamCaption})}

\mbox{\Hypertarget{fingerprint_8h_a3a086e22bb8d882f9fd23d15958c570a}\label{fingerprint_8h_a3a086e22bb8d882f9fd23d15958c570a}} 
\index{fingerprint.\+h@{fingerprint.\+h}!fingerprint\+\_\+generator\+\_\+create@{fingerprint\+\_\+generator\+\_\+create}}
\index{fingerprint\+\_\+generator\+\_\+create@{fingerprint\+\_\+generator\+\_\+create}!fingerprint.\+h@{fingerprint.\+h}}
\subsubsection{\texorpdfstring{fingerprint\+\_\+generator\+\_\+create()}{fingerprint\_generator\_create()}}
{\footnotesize\ttfamily int fingerprint\+\_\+generator\+\_\+create (\begin{DoxyParamCaption}\item[{\hyperlink{signal__protocol__types_8h_afba52fd3e8ba8ba461017fd002005186}{fingerprint\+\_\+generator} $\ast$$\ast$}]{generator,  }\item[{int}]{iterations,  }\item[{int}]{scannable\+\_\+version,  }\item[{\hyperlink{structsignal__context}{signal\+\_\+context} $\ast$}]{global\+\_\+context }\end{DoxyParamCaption})}

Construct a fingerprint generator for 60 digit numerics.


\begin{DoxyParams}{Parameters}
{\em generator} & set to a freshly allocated generator instance \\
\hline
{\em iterations} & The number of internal iterations to perform in the process of generating a fingerprint. This needs to be constant, and synchronized across all clients.\\
\hline
\end{DoxyParams}
The higher the iteration count, the higher the security level\+:
\begin{DoxyItemize}
\item 1024 $\sim$ 109.\+7 bits
\item 1400 $>$ 110 bits
\item 5200 $>$ 112 bits 
\begin{DoxyParams}{Parameters}
{\em scannable\+\_\+version} & The format version for the scannable fingerprint (0 or 1) \\
\hline
{\em global\+\_\+context} & the global library context \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
0 on success, or negative on failure 
\end{DoxyReturn}

\end{DoxyItemize}\mbox{\Hypertarget{fingerprint_8h_ae0e6e555933e2b27cffe2ccde2292036}\label{fingerprint_8h_ae0e6e555933e2b27cffe2ccde2292036}} 
\index{fingerprint.\+h@{fingerprint.\+h}!fingerprint\+\_\+generator\+\_\+create\+\_\+for@{fingerprint\+\_\+generator\+\_\+create\+\_\+for}}
\index{fingerprint\+\_\+generator\+\_\+create\+\_\+for@{fingerprint\+\_\+generator\+\_\+create\+\_\+for}!fingerprint.\+h@{fingerprint.\+h}}
\subsubsection{\texorpdfstring{fingerprint\+\_\+generator\+\_\+create\+\_\+for()}{fingerprint\_generator\_create\_for()}}
{\footnotesize\ttfamily int fingerprint\+\_\+generator\+\_\+create\+\_\+for (\begin{DoxyParamCaption}\item[{\hyperlink{signal__protocol__types_8h_afba52fd3e8ba8ba461017fd002005186}{fingerprint\+\_\+generator} $\ast$}]{generator,  }\item[{const char $\ast$}]{local\+\_\+stable\+\_\+identifier,  }\item[{const \hyperlink{signal__protocol__types_8h_a73ea701c5087163bba608c4706df6176}{ec\+\_\+public\+\_\+key} $\ast$}]{local\+\_\+identity\+\_\+key,  }\item[{const char $\ast$}]{remote\+\_\+stable\+\_\+identifier,  }\item[{const \hyperlink{signal__protocol__types_8h_a73ea701c5087163bba608c4706df6176}{ec\+\_\+public\+\_\+key} $\ast$}]{remote\+\_\+identity\+\_\+key,  }\item[{\hyperlink{signal__protocol__types_8h_a3323cceb779c3f94e87bff43f6eb23f2}{fingerprint} $\ast$$\ast$}]{fingerprint\+\_\+val }\end{DoxyParamCaption})}

Generate a scannable and displayble fingerprint.


\begin{DoxyParams}{Parameters}
{\em local\+\_\+stable\+\_\+identifier} & The client\textquotesingle{}s \char`\"{}stable\char`\"{} identifier. \\
\hline
{\em local\+\_\+identity\+\_\+key} & The client\textquotesingle{}s identity key. \\
\hline
{\em remote\+\_\+stable\+\_\+identifier} & The remote party\textquotesingle{}s \char`\"{}stable\char`\"{} identifier. \\
\hline
{\em remote\+\_\+identity\+\_\+key} & The remote party\textquotesingle{}s identity key. \\
\hline
{\em fingerprint\+\_\+val} & Set to a freshly allocated unique fingerprint for this conversation \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
0 on success, or negative on failure 
\end{DoxyReturn}
\mbox{\Hypertarget{fingerprint_8h_a4f2386703d7e1277528c19309e555911}\label{fingerprint_8h_a4f2386703d7e1277528c19309e555911}} 
\index{fingerprint.\+h@{fingerprint.\+h}!fingerprint\+\_\+generator\+\_\+create\+\_\+for\+\_\+list@{fingerprint\+\_\+generator\+\_\+create\+\_\+for\+\_\+list}}
\index{fingerprint\+\_\+generator\+\_\+create\+\_\+for\+\_\+list@{fingerprint\+\_\+generator\+\_\+create\+\_\+for\+\_\+list}!fingerprint.\+h@{fingerprint.\+h}}
\subsubsection{\texorpdfstring{fingerprint\+\_\+generator\+\_\+create\+\_\+for\+\_\+list()}{fingerprint\_generator\_create\_for\_list()}}
{\footnotesize\ttfamily int fingerprint\+\_\+generator\+\_\+create\+\_\+for\+\_\+list (\begin{DoxyParamCaption}\item[{\hyperlink{signal__protocol__types_8h_afba52fd3e8ba8ba461017fd002005186}{fingerprint\+\_\+generator} $\ast$}]{generator,  }\item[{const char $\ast$}]{local\+\_\+stable\+\_\+identifier,  }\item[{const \hyperlink{signal__protocol__types_8h_ac3820e3142fd7136e199c9bea5b5a1e8}{ec\+\_\+public\+\_\+key\+\_\+list} $\ast$}]{local\+\_\+identity\+\_\+key\+\_\+list,  }\item[{const char $\ast$}]{remote\+\_\+stable\+\_\+identifier,  }\item[{const \hyperlink{signal__protocol__types_8h_ac3820e3142fd7136e199c9bea5b5a1e8}{ec\+\_\+public\+\_\+key\+\_\+list} $\ast$}]{remote\+\_\+identity\+\_\+key\+\_\+list,  }\item[{\hyperlink{signal__protocol__types_8h_a3323cceb779c3f94e87bff43f6eb23f2}{fingerprint} $\ast$$\ast$}]{fingerprint\+\_\+val }\end{DoxyParamCaption})}

Generate a scannable and displayble fingerprint for a list of keys


\begin{DoxyParams}{Parameters}
{\em local\+\_\+stable\+\_\+identifier} & The client\textquotesingle{}s \char`\"{}stable\char`\"{} identifier. \\
\hline
{\em local\+\_\+identity\+\_\+key\+\_\+list} & The client\textquotesingle{}s identity key list. \\
\hline
{\em remote\+\_\+stable\+\_\+identifier} & The remote party\textquotesingle{}s \char`\"{}stable\char`\"{} identifier. \\
\hline
{\em remote\+\_\+identity\+\_\+key\+\_\+list} & The remote party\textquotesingle{}s identity key list. \\
\hline
{\em fingerprint\+\_\+val} & Set to a freshly allocated unique fingerprint for this conversation \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
0 on success, or negative on failure 
\end{DoxyReturn}
\mbox{\Hypertarget{fingerprint_8h_a30a8320a273654748bf49d1b6b2d37a1}\label{fingerprint_8h_a30a8320a273654748bf49d1b6b2d37a1}} 
\index{fingerprint.\+h@{fingerprint.\+h}!fingerprint\+\_\+generator\+\_\+free@{fingerprint\+\_\+generator\+\_\+free}}
\index{fingerprint\+\_\+generator\+\_\+free@{fingerprint\+\_\+generator\+\_\+free}!fingerprint.\+h@{fingerprint.\+h}}
\subsubsection{\texorpdfstring{fingerprint\+\_\+generator\+\_\+free()}{fingerprint\_generator\_free()}}
{\footnotesize\ttfamily void fingerprint\+\_\+generator\+\_\+free (\begin{DoxyParamCaption}\item[{\hyperlink{signal__protocol__types_8h_afba52fd3e8ba8ba461017fd002005186}{fingerprint\+\_\+generator} $\ast$}]{generator }\end{DoxyParamCaption})}

\mbox{\Hypertarget{fingerprint_8h_af55e75fc35c9011f7d5aa424b8bbab97}\label{fingerprint_8h_af55e75fc35c9011f7d5aa424b8bbab97}} 
\index{fingerprint.\+h@{fingerprint.\+h}!fingerprint\+\_\+get\+\_\+displayable@{fingerprint\+\_\+get\+\_\+displayable}}
\index{fingerprint\+\_\+get\+\_\+displayable@{fingerprint\+\_\+get\+\_\+displayable}!fingerprint.\+h@{fingerprint.\+h}}
\subsubsection{\texorpdfstring{fingerprint\+\_\+get\+\_\+displayable()}{fingerprint\_get\_displayable()}}
{\footnotesize\ttfamily \hyperlink{signal__protocol__types_8h_a336fb6fb46299a4d2c5c85c2d53fd59a}{displayable\+\_\+fingerprint}$\ast$ fingerprint\+\_\+get\+\_\+displayable (\begin{DoxyParamCaption}\item[{const \hyperlink{signal__protocol__types_8h_a3323cceb779c3f94e87bff43f6eb23f2}{fingerprint} $\ast$}]{fingerprint\+\_\+val }\end{DoxyParamCaption})}

\mbox{\Hypertarget{fingerprint_8h_a6d3363582d0aef19cc417349e3707394}\label{fingerprint_8h_a6d3363582d0aef19cc417349e3707394}} 
\index{fingerprint.\+h@{fingerprint.\+h}!fingerprint\+\_\+get\+\_\+scannable@{fingerprint\+\_\+get\+\_\+scannable}}
\index{fingerprint\+\_\+get\+\_\+scannable@{fingerprint\+\_\+get\+\_\+scannable}!fingerprint.\+h@{fingerprint.\+h}}
\subsubsection{\texorpdfstring{fingerprint\+\_\+get\+\_\+scannable()}{fingerprint\_get\_scannable()}}
{\footnotesize\ttfamily \hyperlink{signal__protocol__types_8h_a00095147498537e644b908f6519efd8d}{scannable\+\_\+fingerprint}$\ast$ fingerprint\+\_\+get\+\_\+scannable (\begin{DoxyParamCaption}\item[{const \hyperlink{signal__protocol__types_8h_a3323cceb779c3f94e87bff43f6eb23f2}{fingerprint} $\ast$}]{fingerprint\+\_\+val }\end{DoxyParamCaption})}

\mbox{\Hypertarget{fingerprint_8h_a3f0880bb29482fd02323eafd5bf9ebba}\label{fingerprint_8h_a3f0880bb29482fd02323eafd5bf9ebba}} 
\index{fingerprint.\+h@{fingerprint.\+h}!scannable\+\_\+fingerprint\+\_\+compare@{scannable\+\_\+fingerprint\+\_\+compare}}
\index{scannable\+\_\+fingerprint\+\_\+compare@{scannable\+\_\+fingerprint\+\_\+compare}!fingerprint.\+h@{fingerprint.\+h}}
\subsubsection{\texorpdfstring{scannable\+\_\+fingerprint\+\_\+compare()}{scannable\_fingerprint\_compare()}}
{\footnotesize\ttfamily int scannable\+\_\+fingerprint\+\_\+compare (\begin{DoxyParamCaption}\item[{const \hyperlink{signal__protocol__types_8h_a00095147498537e644b908f6519efd8d}{scannable\+\_\+fingerprint} $\ast$}]{scannable,  }\item[{const \hyperlink{signal__protocol__types_8h_a00095147498537e644b908f6519efd8d}{scannable\+\_\+fingerprint} $\ast$}]{other\+\_\+scannable }\end{DoxyParamCaption})}

Compare a scanned QR code with what we expect. 
\begin{DoxyParams}{Parameters}
{\em scannable} & The local scannable data \\
\hline
{\em other\+\_\+scannable} & The data from the scanned code \\
\hline
\end{DoxyParams}

\begin{DoxyRetVals}{Return values}
{\em 1} & if the scannable codes match \\
\hline
{\em 0} & if the scannable codes do not match \\
\hline
{\em S\+G\+\_\+\+E\+R\+R\+\_\+\+F\+P\+\_\+\+V\+E\+R\+S\+I\+O\+N\+\_\+\+M\+I\+S\+M\+A\+T\+CH} & if the scanned fingerprint is the wrong version \\
\hline
{\em S\+G\+\_\+\+E\+R\+R\+\_\+\+F\+P\+\_\+\+I\+D\+E\+N\+T\+\_\+\+M\+I\+S\+M\+A\+T\+CH} & if the scanned fingerprint is for the wrong stable identifier \\
\hline
\end{DoxyRetVals}
\mbox{\Hypertarget{fingerprint_8h_a1e26e6a1a18f911a8339913923c886dd}\label{fingerprint_8h_a1e26e6a1a18f911a8339913923c886dd}} 
\index{fingerprint.\+h@{fingerprint.\+h}!scannable\+\_\+fingerprint\+\_\+create@{scannable\+\_\+fingerprint\+\_\+create}}
\index{scannable\+\_\+fingerprint\+\_\+create@{scannable\+\_\+fingerprint\+\_\+create}!fingerprint.\+h@{fingerprint.\+h}}
\subsubsection{\texorpdfstring{scannable\+\_\+fingerprint\+\_\+create()}{scannable\_fingerprint\_create()}}
{\footnotesize\ttfamily int scannable\+\_\+fingerprint\+\_\+create (\begin{DoxyParamCaption}\item[{\hyperlink{signal__protocol__types_8h_a00095147498537e644b908f6519efd8d}{scannable\+\_\+fingerprint} $\ast$$\ast$}]{scannable,  }\item[{\hyperlink{uthash_8h_a435d1572bf3f880d55459d9805097f62}{uint32\+\_\+t}}]{version,  }\item[{const char $\ast$}]{local\+\_\+stable\+\_\+identifier,  }\item[{const \hyperlink{structsignal__buffer}{signal\+\_\+buffer} $\ast$}]{local\+\_\+fingerprint,  }\item[{const char $\ast$}]{remote\+\_\+stable\+\_\+identifier,  }\item[{const \hyperlink{structsignal__buffer}{signal\+\_\+buffer} $\ast$}]{remote\+\_\+fingerprint }\end{DoxyParamCaption})}

\mbox{\Hypertarget{fingerprint_8h_a5e5790959651465ce5bb2eb2c1291c1d}\label{fingerprint_8h_a5e5790959651465ce5bb2eb2c1291c1d}} 
\index{fingerprint.\+h@{fingerprint.\+h}!scannable\+\_\+fingerprint\+\_\+deserialize@{scannable\+\_\+fingerprint\+\_\+deserialize}}
\index{scannable\+\_\+fingerprint\+\_\+deserialize@{scannable\+\_\+fingerprint\+\_\+deserialize}!fingerprint.\+h@{fingerprint.\+h}}
\subsubsection{\texorpdfstring{scannable\+\_\+fingerprint\+\_\+deserialize()}{scannable\_fingerprint\_deserialize()}}
{\footnotesize\ttfamily int scannable\+\_\+fingerprint\+\_\+deserialize (\begin{DoxyParamCaption}\item[{\hyperlink{signal__protocol__types_8h_a00095147498537e644b908f6519efd8d}{scannable\+\_\+fingerprint} $\ast$$\ast$}]{scannable,  }\item[{const \hyperlink{uthash_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t} $\ast$}]{data,  }\item[{size\+\_\+t}]{len,  }\item[{\hyperlink{structsignal__context}{signal\+\_\+context} $\ast$}]{global\+\_\+context }\end{DoxyParamCaption})}

\mbox{\Hypertarget{fingerprint_8h_a69f75ba614155003097319d8b2fb4277}\label{fingerprint_8h_a69f75ba614155003097319d8b2fb4277}} 
\index{fingerprint.\+h@{fingerprint.\+h}!scannable\+\_\+fingerprint\+\_\+destroy@{scannable\+\_\+fingerprint\+\_\+destroy}}
\index{scannable\+\_\+fingerprint\+\_\+destroy@{scannable\+\_\+fingerprint\+\_\+destroy}!fingerprint.\+h@{fingerprint.\+h}}
\subsubsection{\texorpdfstring{scannable\+\_\+fingerprint\+\_\+destroy()}{scannable\_fingerprint\_destroy()}}
{\footnotesize\ttfamily void scannable\+\_\+fingerprint\+\_\+destroy (\begin{DoxyParamCaption}\item[{\hyperlink{structsignal__type__base}{signal\+\_\+type\+\_\+base} $\ast$}]{type }\end{DoxyParamCaption})}

\mbox{\Hypertarget{fingerprint_8h_a375402cc160c3568de34cfd038203534}\label{fingerprint_8h_a375402cc160c3568de34cfd038203534}} 
\index{fingerprint.\+h@{fingerprint.\+h}!scannable\+\_\+fingerprint\+\_\+get\+\_\+local\+\_\+fingerprint@{scannable\+\_\+fingerprint\+\_\+get\+\_\+local\+\_\+fingerprint}}
\index{scannable\+\_\+fingerprint\+\_\+get\+\_\+local\+\_\+fingerprint@{scannable\+\_\+fingerprint\+\_\+get\+\_\+local\+\_\+fingerprint}!fingerprint.\+h@{fingerprint.\+h}}
\subsubsection{\texorpdfstring{scannable\+\_\+fingerprint\+\_\+get\+\_\+local\+\_\+fingerprint()}{scannable\_fingerprint\_get\_local\_fingerprint()}}
{\footnotesize\ttfamily \hyperlink{structsignal__buffer}{signal\+\_\+buffer}$\ast$ scannable\+\_\+fingerprint\+\_\+get\+\_\+local\+\_\+fingerprint (\begin{DoxyParamCaption}\item[{const \hyperlink{signal__protocol__types_8h_a00095147498537e644b908f6519efd8d}{scannable\+\_\+fingerprint} $\ast$}]{scannable }\end{DoxyParamCaption})}

\mbox{\Hypertarget{fingerprint_8h_aa0a6d71b55808585b31af9674a59b395}\label{fingerprint_8h_aa0a6d71b55808585b31af9674a59b395}} 
\index{fingerprint.\+h@{fingerprint.\+h}!scannable\+\_\+fingerprint\+\_\+get\+\_\+local\+\_\+stable\+\_\+identifier@{scannable\+\_\+fingerprint\+\_\+get\+\_\+local\+\_\+stable\+\_\+identifier}}
\index{scannable\+\_\+fingerprint\+\_\+get\+\_\+local\+\_\+stable\+\_\+identifier@{scannable\+\_\+fingerprint\+\_\+get\+\_\+local\+\_\+stable\+\_\+identifier}!fingerprint.\+h@{fingerprint.\+h}}
\subsubsection{\texorpdfstring{scannable\+\_\+fingerprint\+\_\+get\+\_\+local\+\_\+stable\+\_\+identifier()}{scannable\_fingerprint\_get\_local\_stable\_identifier()}}
{\footnotesize\ttfamily const char$\ast$ scannable\+\_\+fingerprint\+\_\+get\+\_\+local\+\_\+stable\+\_\+identifier (\begin{DoxyParamCaption}\item[{const \hyperlink{signal__protocol__types_8h_a00095147498537e644b908f6519efd8d}{scannable\+\_\+fingerprint} $\ast$}]{scannable }\end{DoxyParamCaption})}

\mbox{\Hypertarget{fingerprint_8h_ab0ba2190e6aef718ff10cb8a208133de}\label{fingerprint_8h_ab0ba2190e6aef718ff10cb8a208133de}} 
\index{fingerprint.\+h@{fingerprint.\+h}!scannable\+\_\+fingerprint\+\_\+get\+\_\+remote\+\_\+fingerprint@{scannable\+\_\+fingerprint\+\_\+get\+\_\+remote\+\_\+fingerprint}}
\index{scannable\+\_\+fingerprint\+\_\+get\+\_\+remote\+\_\+fingerprint@{scannable\+\_\+fingerprint\+\_\+get\+\_\+remote\+\_\+fingerprint}!fingerprint.\+h@{fingerprint.\+h}}
\subsubsection{\texorpdfstring{scannable\+\_\+fingerprint\+\_\+get\+\_\+remote\+\_\+fingerprint()}{scannable\_fingerprint\_get\_remote\_fingerprint()}}
{\footnotesize\ttfamily \hyperlink{structsignal__buffer}{signal\+\_\+buffer}$\ast$ scannable\+\_\+fingerprint\+\_\+get\+\_\+remote\+\_\+fingerprint (\begin{DoxyParamCaption}\item[{const \hyperlink{signal__protocol__types_8h_a00095147498537e644b908f6519efd8d}{scannable\+\_\+fingerprint} $\ast$}]{scannable }\end{DoxyParamCaption})}

\mbox{\Hypertarget{fingerprint_8h_aecd96dc2d72482576e95bc9681cdaf26}\label{fingerprint_8h_aecd96dc2d72482576e95bc9681cdaf26}} 
\index{fingerprint.\+h@{fingerprint.\+h}!scannable\+\_\+fingerprint\+\_\+get\+\_\+remote\+\_\+stable\+\_\+identifier@{scannable\+\_\+fingerprint\+\_\+get\+\_\+remote\+\_\+stable\+\_\+identifier}}
\index{scannable\+\_\+fingerprint\+\_\+get\+\_\+remote\+\_\+stable\+\_\+identifier@{scannable\+\_\+fingerprint\+\_\+get\+\_\+remote\+\_\+stable\+\_\+identifier}!fingerprint.\+h@{fingerprint.\+h}}
\subsubsection{\texorpdfstring{scannable\+\_\+fingerprint\+\_\+get\+\_\+remote\+\_\+stable\+\_\+identifier()}{scannable\_fingerprint\_get\_remote\_stable\_identifier()}}
{\footnotesize\ttfamily const char$\ast$ scannable\+\_\+fingerprint\+\_\+get\+\_\+remote\+\_\+stable\+\_\+identifier (\begin{DoxyParamCaption}\item[{const \hyperlink{signal__protocol__types_8h_a00095147498537e644b908f6519efd8d}{scannable\+\_\+fingerprint} $\ast$}]{scannable }\end{DoxyParamCaption})}

\mbox{\Hypertarget{fingerprint_8h_a769d41cfd0a356ae837471c58eb361e0}\label{fingerprint_8h_a769d41cfd0a356ae837471c58eb361e0}} 
\index{fingerprint.\+h@{fingerprint.\+h}!scannable\+\_\+fingerprint\+\_\+get\+\_\+version@{scannable\+\_\+fingerprint\+\_\+get\+\_\+version}}
\index{scannable\+\_\+fingerprint\+\_\+get\+\_\+version@{scannable\+\_\+fingerprint\+\_\+get\+\_\+version}!fingerprint.\+h@{fingerprint.\+h}}
\subsubsection{\texorpdfstring{scannable\+\_\+fingerprint\+\_\+get\+\_\+version()}{scannable\_fingerprint\_get\_version()}}
{\footnotesize\ttfamily \hyperlink{uthash_8h_a435d1572bf3f880d55459d9805097f62}{uint32\+\_\+t} scannable\+\_\+fingerprint\+\_\+get\+\_\+version (\begin{DoxyParamCaption}\item[{const \hyperlink{signal__protocol__types_8h_a00095147498537e644b908f6519efd8d}{scannable\+\_\+fingerprint} $\ast$}]{scannable }\end{DoxyParamCaption})}

\mbox{\Hypertarget{fingerprint_8h_aec8d27698e53181e7ef546c21dec8ce8}\label{fingerprint_8h_aec8d27698e53181e7ef546c21dec8ce8}} 
\index{fingerprint.\+h@{fingerprint.\+h}!scannable\+\_\+fingerprint\+\_\+serialize@{scannable\+\_\+fingerprint\+\_\+serialize}}
\index{scannable\+\_\+fingerprint\+\_\+serialize@{scannable\+\_\+fingerprint\+\_\+serialize}!fingerprint.\+h@{fingerprint.\+h}}
\subsubsection{\texorpdfstring{scannable\+\_\+fingerprint\+\_\+serialize()}{scannable\_fingerprint\_serialize()}}
{\footnotesize\ttfamily int scannable\+\_\+fingerprint\+\_\+serialize (\begin{DoxyParamCaption}\item[{\hyperlink{structsignal__buffer}{signal\+\_\+buffer} $\ast$$\ast$}]{buffer,  }\item[{const \hyperlink{signal__protocol__types_8h_a00095147498537e644b908f6519efd8d}{scannable\+\_\+fingerprint} $\ast$}]{scannable }\end{DoxyParamCaption})}

