1
Fork 0
appliedcryptography/misc/macros/joc.sty

98 lines
2.9 KiB
TeX

\ProvidesPackage{joc}[2025/05/04 v1.0 Nadim's Joy of Cryptography Style Macros]
\RequirePackage{xcolor}
\RequirePackage[auto]{contour}
\RequirePackage{varwidth,tikz}
\RequirePackage[most]{tcolorbox}
\usetikzlibrary{shadows, arrows.meta, positioning, shapes, calc, fit, shapes.geometric}
\definecolor{jocbitcolor}{HTML}{A91716}
\definecolor{joctitlecolor}{HTML}{E5E5E5}
% Macro for state-separable proof style subroutines
\newcommand{\sssubroutine}[4]{
\begin{center}
\begin{tikzpicture}[box/.style={rectangle, draw, align=left, fill=white, inner sep=7pt, scale=#4, execute at begin node=\setlength{\baselineskip}{1.5em}}]
\node[box]{
\underline{\func{#1}{#2}}: \\
#3
};
\end{tikzpicture}
\end{center}
}
\newcommand{\sslibrarysubroutine}[4]{
\begin{tikzpicture}[box/.style={rectangle, align=left, inner sep=0pt, outer sep=0pt, fill=white, scale=#4, execute at begin node=\setlength{\baselineskip}{1.5em}, inner sep=0pt, outer sep=0pt}]
\node[box]{
\underline{\func{#1}{#2}}: \\
#3
};
\end{tikzpicture}
}
\newcommand{\prob}[1]{\ensuremath{\Pr\bigl[\ensuremath{#1}\bigr]}}
\newcommand{\lib}[2]{\ensuremath{\mathcal{L}^{#1}_\text{#2}}}
\newcommand{\prog}[1]{\ensuremath{\mathcal{A}_\text{#1}}}
\newcommand{\link}{\ensuremath{\diamond}}
\newcommand{\interchangeable}[1]{\ensuremath{\overset{\ensuremath{#1}}{\equiv}}}
\newcommand{\bit}[1]{\textcolor{jocbitcolor}{\texttt{#1}}}
\newcommand{\bits}{\ensuremath{\{\bit{0}, \bit{1}\}}}
\newcommand{\func}[2]{\ensuremath{\textrm{\textsc{#1}}\scalebox{1.05}{\ensuremath{(#2)}}}}
\newtcolorbox{sslibrarybox}[2][]{
colback=white,
colframe=black,
colbacktitle=joctitlecolor,
coltitle=black,
enhanced,hbox,
toptitle=1mm,
bottomtitle=1mm,
boxrule=0.5pt,
titlerule=0pt,
left=1mm,
right=1mm,
top=2mm,
bottom=2mm,
titlerule style=joctitlecolor,
sharp corners,
halign title=center,
title={#2},
#1
}
\newcommand{\sslibrary}[4]{
\begin{sslibrarybox}[scale=#4]{\lib{#1}{#2}}
\begin{varwidth}{\textwidth}
#3
\end{varwidth}
\end{sslibrarybox}
}
\newcommand{\ssprogram}[3]{
\begin{sslibrarybox}[scale=#3]{\prog{#1}}
\begin{tikzpicture}[box/.style={rectangle, align=left, fill=white, inner sep=0pt, outer sep=0pt, execute at begin node=\setlength{\baselineskip}{1.5em}}]
\node[box]{
#2
};
\end{tikzpicture}
\end{sslibrarybox}
}
\newcommand{\sslinked}[3]{
\begin{tikzpicture}[baseline]
\node[inner sep=0pt, outer sep=0pt] (left) {\begin{varwidth}{\textwidth}#1\end{varwidth}};
\node[inner sep=0pt, outer sep=0pt, anchor=west] (middle) at (left.east) {\begin{varwidth}{\textwidth}{\large\ensuremath{\ #2\ }}\end{varwidth}};
\node[inner sep=0pt, outer sep=0pt, anchor=west] (right) at (middle.east) {\begin{varwidth}{\textwidth}#3\end{varwidth}};
\end{tikzpicture}
}
\contourlength{1.2pt}
\newcommand{\hl}[1]{%
\relax\ifmmode%
{}%
\contour{hlbg}{\textcolor{hlfg}{${} #1 {}$}}%
{}%
\else%
\contour{hlbg}{\textcolor{hlfg}{#1}}%
\fi%
}