Python router + Go sm-leaf reject missing to, empty ct, plaintext body. Summary logs never include ciphertext. MODULE.md.
170 lines
No EOL
5.1 KiB
TeX
170 lines
No EOL
5.1 KiB
TeX
%% Generated by Sphinx.
|
|
\def\sphinxdocclass{report}
|
|
\documentclass[letterpaper,10pt,english]{sphinxmanual}
|
|
\ifdefined\pdfpxdimen
|
|
\let\sphinxpxdimen\pdfpxdimen\else\newdimen\sphinxpxdimen
|
|
\fi \sphinxpxdimen=.75bp\relax
|
|
\ifdefined\pdfimageresolution
|
|
\pdfimageresolution= \numexpr \dimexpr1in\relax/\sphinxpxdimen\relax
|
|
\fi
|
|
\newdimen\sphinxremdimen\sphinxremdimen = 10pt
|
|
%% let collapsible pdf bookmarks panel have high depth per default
|
|
\PassOptionsToPackage{bookmarksdepth=5}{hyperref}
|
|
|
|
\PassOptionsToPackage{booktabs}{sphinx}
|
|
\PassOptionsToPackage{colorrows}{sphinx}
|
|
|
|
\PassOptionsToPackage{warn}{textcomp}
|
|
\usepackage[utf8]{inputenc}
|
|
\ifdefined\DeclareUnicodeCharacter
|
|
% support both utf8 and utf8x syntaxes
|
|
\ifdefined\DeclareUnicodeCharacterAsOptional
|
|
\def\sphinxDUC#1{\DeclareUnicodeCharacter{"#1}}
|
|
\else
|
|
\let\sphinxDUC\DeclareUnicodeCharacter
|
|
\fi
|
|
\sphinxDUC{00A0}{\nobreakspace}
|
|
\sphinxDUC{2500}{\sphinxunichar{2500}}
|
|
\sphinxDUC{2502}{\sphinxunichar{2502}}
|
|
\sphinxDUC{2514}{\sphinxunichar{2514}}
|
|
\sphinxDUC{251C}{\sphinxunichar{251C}}
|
|
\sphinxDUC{2572}{\textbackslash}
|
|
\fi
|
|
\usepackage{cmap}
|
|
\usepackage[T1]{fontenc}
|
|
\usepackage{amsmath,amssymb,amstext}
|
|
\usepackage{babel}
|
|
|
|
|
|
|
|
\usepackage{tgtermes}
|
|
\usepackage{tgheros}
|
|
\renewcommand{\ttdefault}{txtt}
|
|
|
|
|
|
|
|
\usepackage[Bjarne]{fncychap}
|
|
\usepackage{sphinx}
|
|
|
|
\fvset{fontsize=auto}
|
|
\usepackage{geometry}
|
|
|
|
|
|
% Include hyperref last.
|
|
\usepackage{hyperref}
|
|
% Fix anchor placement for figures with captions.
|
|
\usepackage{hypcap}% it must be loaded after hyperref.
|
|
% Set up styles of URL: it should be placed after hyperref.
|
|
\urlstyle{same}
|
|
|
|
|
|
\usepackage{sphinxmessages}
|
|
|
|
|
|
|
|
|
|
\title{Secure Messaging}
|
|
\date{Sep 16, 2026}
|
|
\release{}
|
|
\author{Verae}
|
|
\newcommand{\sphinxlogo}{\vbox{}}
|
|
\renewcommand{\releasename}{}
|
|
\makeindex
|
|
\begin{document}
|
|
|
|
\ifdefined\shorthandoff
|
|
\ifnum\catcode`\=\string=\active\shorthandoff{=}\fi
|
|
\ifnum\catcode`\"=\active\shorthandoff{"}\fi
|
|
\fi
|
|
|
|
\pagestyle{empty}
|
|
\sphinxmaketitle
|
|
\pagestyle{plain}
|
|
\sphinxtableofcontents
|
|
\pagestyle{normal}
|
|
\phantomsection\label{\detokenize{index::doc}}
|
|
|
|
|
|
\sphinxAtStartPar
|
|
Passthrough NATS envelopes, Ed25519 signed configuration, DataCube
|
|
admin\sphinxhyphen{}history, and Network Error Bundles.
|
|
|
|
\sphinxAtStartPar
|
|
This is \sphinxstylestrong{not} a HIPAA/SOC 2/ISO certificate.
|
|
\begin{itemize}
|
|
\item {}
|
|
\sphinxAtStartPar
|
|
Python spec: \sphinxcode{\sphinxupquote{python/secure\_messaging/}}
|
|
|
|
\item {}
|
|
\sphinxAtStartPar
|
|
Go leaf: \sphinxcode{\sphinxupquote{go/cmd/sm\sphinxhyphen{}leaf}} (in\sphinxhyphen{}process NATS + optional hub)
|
|
|
|
\item {}
|
|
\sphinxAtStartPar
|
|
Loopback health: \sphinxcode{\sphinxupquote{127.0.0.1:18783/health}}
|
|
|
|
\item {}
|
|
\sphinxAtStartPar
|
|
Catalog: \sphinxurl{https://git.georgelambert.org/marchon/nats-service-endpoints}
|
|
|
|
\item {}
|
|
\sphinxAtStartPar
|
|
Hub: \sphinxurl{https://git.georgelambert.org/marchon/system-git-sync}
|
|
|
|
\end{itemize}
|
|
|
|
|
|
\chapter{Who calls this module}
|
|
\label{\detokenize{index:who-calls-this-module}}
|
|
\sphinxAtStartPar
|
|
\sphinxcode{\sphinxupquote{pfc\sphinxhyphen{}py\sphinxhyphen{}admin}} (sign config, append history) and systemd \sphinxcode{\sphinxupquote{pfc\sphinxhyphen{}sm\sphinxhyphen{}leaf}}.
|
|
Tests send targeted good and bad messages on \sphinxcode{\sphinxupquote{verae.sm.send}}.
|
|
|
|
|
|
\chapter{Messages}
|
|
\label{\detokenize{index:messages}}\begin{itemize}
|
|
\item {}
|
|
\sphinxAtStartPar
|
|
\sphinxstylestrong{From:} console / tests / connectors
|
|
|
|
\item {}
|
|
\sphinxAtStartPar
|
|
\sphinxstylestrong{To:} mailbox dest in the clear; body ciphertext
|
|
|
|
\item {}
|
|
\sphinxAtStartPar
|
|
\sphinxstylestrong{Success:} ack \sphinxcode{\sphinxupquote{accepted}} + \sphinxcode{\sphinxupquote{lookup\_id}} (sender cannot reopen \sphinxcode{\sphinxupquote{ct}})
|
|
|
|
\item {}
|
|
\sphinxAtStartPar
|
|
\sphinxstylestrong{Failure:} \sphinxcode{\sphinxupquote{SM\sphinxhyphen{}MISSING\sphinxhyphen{}TO}}, \sphinxcode{\sphinxupquote{SM\sphinxhyphen{}EMPTY\sphinxhyphen{}CT}}, \sphinxcode{\sphinxupquote{SM\sphinxhyphen{}BAD\sphinxhyphen{}ALG}},
|
|
\sphinxcode{\sphinxupquote{SM\sphinxhyphen{}PLAINTEXT\sphinxhyphen{}BODY}}, \sphinxcode{\sphinxupquote{SM\sphinxhyphen{}BAD\sphinxhyphen{}JSON}} \(\rightarrow\) \sphinxcode{\sphinxupquote{verae.sm.error}} +
|
|
\sphinxcode{\sphinxupquote{verae.sm.dead}} + \sphinxcode{\sphinxupquote{verae.sm.log.summary}}
|
|
|
|
\item {}
|
|
\sphinxAtStartPar
|
|
\sphinxstylestrong{Filter:} no plaintext \sphinxcode{\sphinxupquote{body}} field; summary must not contain \sphinxcode{\sphinxupquote{ct}}
|
|
|
|
\item {}
|
|
\sphinxAtStartPar
|
|
\sphinxstylestrong{Timeout:} 5s NATS; 15s NPE sidecar
|
|
|
|
\end{itemize}
|
|
|
|
|
|
\chapter{Errors}
|
|
\label{\detokenize{index:errors}}
|
|
\sphinxAtStartPar
|
|
Network Error Bundle: \sphinxcode{\sphinxupquote{ct\_sender}} (sender\sphinxhyphen{}only status) and \sphinxcode{\sphinxupquote{ct\_system}}
|
|
(ops bounce, no mail body). \sphinxcode{\sphinxupquote{logging.mode=summary}}.
|
|
|
|
\sphinxAtStartPar
|
|
Variables: \sphinxcode{\sphinxupquote{crypto.mode}}, \sphinxcode{\sphinxupquote{routing.mode=passthrough}}, \sphinxcode{\sphinxupquote{SM\_LEAF\_HUB}},
|
|
\sphinxcode{\sphinxupquote{SM\_HTTP}}. See system\sphinxhyphen{}git\sphinxhyphen{}sync \sphinxcode{\sphinxupquote{docs/VARIABLES.md}}.
|
|
|
|
|
|
|
|
\renewcommand{\indexname}{Index}
|
|
\printindex
|
|
\end{document} |