stdex/minisign_8hpp_source.html

231 lines
27 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.11.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>stdex: include/stdex/minisign.hpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">stdex
</div>
<div id="projectbrief">Additional custom or not Standard C++ covered algorithms</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.11.0 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',false);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){ initResizable(false); });
/* @license-end */
</script>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_fca3c47b2ea228727bd6729832f89576.html">stdex</a></li> </ul>
</div>
</div><!-- top -->
<div id="doc-content">
<div class="header">
<div class="headertitle"><div class="title">minisign.hpp</div></div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/*</span></div>
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"> SPDX-License-Identifier: MIT</span></div>
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment"> Copyright © 2023-2024 Amebis</span></div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">*/</span></div>
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span> </div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="preprocessor">#pragma once</span></div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span> </div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="preprocessor">#include &quot;assert.hpp&quot;</span></div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="preprocessor">#include &quot;base64.hpp&quot;</span></div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="preprocessor">#include &quot;compat.hpp&quot;</span></div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="preprocessor">#include &quot;parser.hpp&quot;</span></div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="preprocessor">#include &quot;stream.hpp&quot;</span></div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="preprocessor">#include &lt;stdint.h&gt;</span></div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> </div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="keyword">namespace </span>stdex</div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span>{</div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> <span class="keyword">namespace </span>minisign</div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> {</div>
<div class="foldopen" id="foldopen00024" data-start="{" data-end="};">
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"><a class="line" href="classstdex_1_1minisign_1_1untrusted__comment.html"> 24</a></span> <span class="keyword">class </span><a class="code hl_class" href="classstdex_1_1minisign_1_1untrusted__comment.html">untrusted_comment</a> : <span class="keyword">public</span> <a class="code hl_class" href="classstdex_1_1parser_1_1basic__parser.html">stdex::parser::parser</a></div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> {</div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">protected</span>:</div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> do_match(</div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> _In_reads_or_z_opt_(end) <span class="keyword">const</span> <span class="keywordtype">char</span>* text,</div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> _In_ <span class="keywordtype">size_t</span> start = 0,</div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> _In_ <span class="keywordtype">size_t</span> end = SIZE_MAX,</div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> _In_ <span class="keywordtype">int</span> flags = stdex::parser::match_default)</div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> {</div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> _Unreferenced_(flags);</div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> stdex_assert(text || start + 17 &gt;= end);</div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> <span class="keywordflow">if</span> (start + 17 &lt; end &amp;&amp;</div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> text[start + 0] == <span class="charliteral">&#39;u&#39;</span> &amp;&amp;</div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> text[start + 1] == <span class="charliteral">&#39;n&#39;</span> &amp;&amp;</div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> text[start + 2] == <span class="charliteral">&#39;t&#39;</span> &amp;&amp;</div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> text[start + 3] == <span class="charliteral">&#39;r&#39;</span> &amp;&amp;</div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> text[start + 4] == <span class="charliteral">&#39;u&#39;</span> &amp;&amp;</div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> text[start + 5] == <span class="charliteral">&#39;s&#39;</span> &amp;&amp;</div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> text[start + 6] == <span class="charliteral">&#39;t&#39;</span> &amp;&amp;</div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> text[start + 7] == <span class="charliteral">&#39;e&#39;</span> &amp;&amp;</div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> text[start + 8] == <span class="charliteral">&#39;d&#39;</span> &amp;&amp;</div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> text[start + 9] == <span class="charliteral">&#39; &#39;</span> &amp;&amp;</div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> text[start + 10] == <span class="charliteral">&#39;c&#39;</span> &amp;&amp;</div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> text[start + 11] == <span class="charliteral">&#39;o&#39;</span> &amp;&amp;</div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> text[start + 12] == <span class="charliteral">&#39;m&#39;</span> &amp;&amp;</div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> text[start + 13] == <span class="charliteral">&#39;m&#39;</span> &amp;&amp;</div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> text[start + 14] == <span class="charliteral">&#39;e&#39;</span> &amp;&amp;</div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> text[start + 15] == <span class="charliteral">&#39;n&#39;</span> &amp;&amp;</div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> text[start + 16] == <span class="charliteral">&#39;t&#39;</span> &amp;&amp;</div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> text[start + 17] == <span class="charliteral">&#39;:&#39;</span>)</div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> {</div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> this-&gt;<a class="code hl_struct" href="structstdex_1_1interval.html">interval</a>.<a class="code hl_variable" href="structstdex_1_1interval.html#a9b92e2b20290d8ac5a9b00209f25e27a">end</a> = (this-&gt;<a class="code hl_struct" href="structstdex_1_1interval.html">interval</a>.<a class="code hl_variable" href="structstdex_1_1interval.html#ab6a104de0f15b29bea77fe181b49c40b">start</a> = start) + 18;</div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> }</div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> this-&gt;<a class="code hl_struct" href="structstdex_1_1interval.html">interval</a>.<a class="code hl_function" href="structstdex_1_1interval.html#aa8113c9f2e3781fb25e30cb3d139e119">invalidate</a>();</div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> }</div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> };</div>
</div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> </div>
<div class="foldopen" id="foldopen00066" data-start="{" data-end="};">
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"><a class="line" href="classstdex_1_1minisign_1_1line__break.html"> 66</a></span> <span class="keyword">class </span><a class="code hl_class" href="classstdex_1_1minisign_1_1line__break.html">line_break</a> : <span class="keyword">public</span> <a class="code hl_class" href="classstdex_1_1parser_1_1basic__parser.html">stdex::parser::parser</a></div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> {</div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> <span class="keyword">protected</span>:</div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> do_match(</div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> _In_reads_or_z_opt_(end) <span class="keyword">const</span> <span class="keywordtype">char</span>* text,</div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> _In_ <span class="keywordtype">size_t</span> start = 0,</div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> _In_ <span class="keywordtype">size_t</span> end = SIZE_MAX,</div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> _In_ <span class="keywordtype">int</span> flags = stdex::parser::match_default)</div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> {</div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> _Unreferenced_(flags);</div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> stdex_assert(text || start + 1 &gt;= end);</div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <span class="keywordflow">if</span> (start + 1 &lt; end &amp;&amp;</div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> text[start + 0] == <span class="charliteral">&#39;\r&#39;</span> &amp;&amp;</div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> text[start + 1] == <span class="charliteral">&#39;\n&#39;</span>)</div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> {</div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> this-&gt;<a class="code hl_struct" href="structstdex_1_1interval.html">interval</a>.<a class="code hl_variable" href="structstdex_1_1interval.html#a9b92e2b20290d8ac5a9b00209f25e27a">end</a> = (this-&gt;<a class="code hl_struct" href="structstdex_1_1interval.html">interval</a>.<a class="code hl_variable" href="structstdex_1_1interval.html#ab6a104de0f15b29bea77fe181b49c40b">start</a> = start) + 2;</div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> }</div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> stdex_assert(text || start &gt;= end);</div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> <span class="keywordflow">if</span> (start &lt; end &amp;&amp; text[start] == <span class="charliteral">&#39;\n&#39;</span>) {</div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> this-&gt;<a class="code hl_struct" href="structstdex_1_1interval.html">interval</a>.<a class="code hl_variable" href="structstdex_1_1interval.html#a9b92e2b20290d8ac5a9b00209f25e27a">end</a> = (this-&gt;<a class="code hl_struct" href="structstdex_1_1interval.html">interval</a>.<a class="code hl_variable" href="structstdex_1_1interval.html#ab6a104de0f15b29bea77fe181b49c40b">start</a> = start) + 1;</div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> }</div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> this-&gt;<a class="code hl_struct" href="structstdex_1_1interval.html">interval</a>.<a class="code hl_function" href="structstdex_1_1interval.html#aa8113c9f2e3781fb25e30cb3d139e119">invalidate</a>();</div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> }</div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> };</div>
</div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> </div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> parse_minisig(_Inout_ <a class="code hl_class" href="classstdex_1_1stream_1_1basic.html">stdex::stream::basic</a>&amp; minisig, _Out_ uint8_t&amp; algorithm, _Out_writes_all_(8) uint8_t key_id[8], _Out_writes_all_(64) uint8_t signature[64])</div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> {</div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> std::vector&lt;uint8_t&gt; data;</div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> <a class="code hl_class" href="classstdex_1_1minisign_1_1untrusted__comment.html">minisign::untrusted_comment</a> <a class="code hl_class" href="classstdex_1_1minisign_1_1untrusted__comment.html">untrusted_comment</a>;</div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> std::string line;</div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> <span class="keywordflow">for</span> (;;) {</div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> minisig.readln(line);</div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> <span class="keywordflow">if</span> (!minisig.ok())</div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <span class="keywordflow">if</span> (line.empty() ||</div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> <a class="code hl_class" href="classstdex_1_1minisign_1_1untrusted__comment.html">untrusted_comment</a>.match(line.data(), 0, line.size()))</div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> <span class="keywordflow">continue</span>;</div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> <a class="code hl_class" href="classstdex_1_1base64__dec.html">stdex::base64_dec</a> decoder; <span class="keywordtype">bool</span> is_last;</div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> decoder.<a class="code hl_function" href="classstdex_1_1base64__dec.html#a94b0860b19c61f53208b79fcfd1ac32f">decode</a>(data, is_last, line.data(), line.size());</div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> }</div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> <span class="keywordflow">if</span> (data.size() &lt; 74)</div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">&quot;Minisign signature is too short&quot;</span>);</div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> <span class="keywordflow">if</span> (data[0] != <span class="charliteral">&#39;E&#39;</span>)</div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">&quot;not a Minisign signature&quot;</span>);</div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> algorithm = data[1];</div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> memcpy(&amp;key_id[0], &amp;data[2], 8);</div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> memcpy(&amp;signature[0], &amp;data[10], 64);</div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> }</div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> }</div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span>}</div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> </div>
<div class="ttc" id="aclassstdex_1_1base64__dec_html"><div class="ttname"><a href="classstdex_1_1base64__dec.html">stdex::base64_dec</a></div><div class="ttdoc">Base64 decoding session.</div><div class="ttdef"><b>Definition</b> base64.hpp:275</div></div>
<div class="ttc" id="aclassstdex_1_1base64__dec_html_a94b0860b19c61f53208b79fcfd1ac32f"><div class="ttname"><a href="classstdex_1_1base64__dec.html#a94b0860b19c61f53208b79fcfd1ac32f">stdex::base64_dec::decode</a></div><div class="ttdeci">void decode(std::vector&lt; T_to, AX &gt; &amp;out, bool &amp;is_last, const T_from *data, size_t size)</div><div class="ttdoc">Decodes one block of information, and appends it to the output.</div><div class="ttdef"><b>Definition</b> base64.hpp:297</div></div>
<div class="ttc" id="aclassstdex_1_1minisign_1_1line__break_html"><div class="ttname"><a href="classstdex_1_1minisign_1_1line__break.html">stdex::minisign::line_break</a></div><div class="ttdoc">Test for CRLF or LF.</div><div class="ttdef"><b>Definition</b> minisign.hpp:67</div></div>
<div class="ttc" id="aclassstdex_1_1minisign_1_1untrusted__comment_html"><div class="ttname"><a href="classstdex_1_1minisign_1_1untrusted__comment.html">stdex::minisign::untrusted_comment</a></div><div class="ttdoc">Test for &quot;untrusted comment:&quot;.</div><div class="ttdef"><b>Definition</b> minisign.hpp:25</div></div>
<div class="ttc" id="aclassstdex_1_1parser_1_1basic__parser_html"><div class="ttname"><a href="classstdex_1_1parser_1_1basic__parser.html">stdex::parser::basic_parser&lt; char &gt;</a></div></div>
<div class="ttc" id="aclassstdex_1_1stream_1_1basic_html"><div class="ttname"><a href="classstdex_1_1stream_1_1basic.html">stdex::stream::basic</a></div><div class="ttdoc">UTF-8 byte-order-mark</div><div class="ttdef"><b>Definition</b> stream.hpp:85</div></div>
<div class="ttc" id="astructstdex_1_1interval_html"><div class="ttname"><a href="structstdex_1_1interval.html">stdex::interval</a></div><div class="ttdoc">Numerical interval.</div><div class="ttdef"><b>Definition</b> interval.hpp:18</div></div>
<div class="ttc" id="astructstdex_1_1interval_html_a9b92e2b20290d8ac5a9b00209f25e27a"><div class="ttname"><a href="structstdex_1_1interval.html#a9b92e2b20290d8ac5a9b00209f25e27a">stdex::interval::end</a></div><div class="ttdeci">T end</div><div class="ttdoc">interval end</div><div class="ttdef"><b>Definition</b> interval.hpp:20</div></div>
<div class="ttc" id="astructstdex_1_1interval_html_aa8113c9f2e3781fb25e30cb3d139e119"><div class="ttname"><a href="structstdex_1_1interval.html#aa8113c9f2e3781fb25e30cb3d139e119">stdex::interval::invalidate</a></div><div class="ttdeci">void invalidate()</div><div class="ttdoc">Invalidates interval.</div><div class="ttdef"><b>Definition</b> interval.hpp:59</div></div>
<div class="ttc" id="astructstdex_1_1interval_html_ab6a104de0f15b29bea77fe181b49c40b"><div class="ttname"><a href="structstdex_1_1interval.html#ab6a104de0f15b29bea77fe181b49c40b">stdex::interval::start</a></div><div class="ttdeci">T start</div><div class="ttdoc">interval start</div><div class="ttdef"><b>Definition</b> interval.hpp:19</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Tue May 28 2024 08:26:16 for stdex by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.11.0
</small></address>
</div><!-- doc-content -->
</body>
</html>