├── .gitignore ├── CNAME ├── _config.yml ├── output ├── noisesocket.pdf └── noisesocket.html ├── make.html.bat ├── make.pdf.bat ├── Makefile ├── README.md ├── template_pandoc.html ├── spec_markdown.css ├── my.bib ├── template_pandoc.latex ├── noisesocket.md ├── ieee-with-url.csl └── test_vectors.json /.gitignore: -------------------------------------------------------------------------------- 1 | .idea/* 2 | -------------------------------------------------------------------------------- /CNAME: -------------------------------------------------------------------------------- 1 | noisesocket.com -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-slate -------------------------------------------------------------------------------- /output/noisesocket.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/noisesocket/spec/HEAD/output/noisesocket.pdf -------------------------------------------------------------------------------- /make.html.bat: -------------------------------------------------------------------------------- 1 | c:\pandoc\pandoc noisesocket.md -s --toc -f markdown --template template_pandoc.html --css=spec_markdown.css --filter pandoc-citeproc --bibliography=my.bib -o output\noisesocket.html -------------------------------------------------------------------------------- /make.pdf.bat: -------------------------------------------------------------------------------- 1 | c:\pandoc\pandoc.exe noisesocket.md -s --toc -f markdown --template template_pandoc.latex --css=spec_markdown.css --filter pandoc-citeproc --bibliography=my.bib -o output\noisesocket.pdf -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | 2 | default: output/noisesocket.html output/noisesocket.pdf 3 | 4 | # Pandoc 1.17.2, Pandoc-citeproc 5 | 6 | output/noisesocket.html: noisesocket.md template_pandoc.html spec_markdown.css my.bib 7 | pandoc noisesocket.md -s --toc \ 8 | -f markdown\ 9 | --template template_pandoc.html \ 10 | --css=spec_markdown.css \ 11 | --filter pandoc-citeproc \ 12 | -o output/noisesocket.html 13 | 14 | output/noisesocket.pdf: noisesocket.md template_pandoc.latex my.bib 15 | pandoc noisesocket.md -s --toc \ 16 | -f markdown\ 17 | --template template_pandoc.latex \ 18 | --filter pandoc-citeproc \ 19 | -o output/noisesocket.pdf 20 | 21 | clean: 22 | rm output/noisesocket.html output/noisesocket.pdf 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Noise Socket 2 | --------- 3 | NoiseSocket is an extension of the Noise Protocol Framework that enables quick and seamless secure connections with minimal code size, small keys, modern ciphers and hash functions, and extremely fast speed. It can be used with raw public keys instead of X.509 infrastructure and targets IoT devices, microservices, and back-end applications such as datacenter-to-datacenter communications. 4 | 5 | See [noisesocket.pdf](https://github.com/noiseprotocol/noisesocket_spec/blob/master/output/noisesocket.pdf) for full spec 6 | 7 | Implementations 8 | -------------- 9 | 10 | [Golang library](https://github.com/go-noisesocket/noisesocket/) 11 | 12 | [NGINX Module](https://github.com/VirgilSecurity/virgil-nginx-noise-socket) 13 | 14 | [PKI Integration](https://github.com/go-noisesocket/noisesocket/tree/master/virgil) 15 | -------------------------------------------------------------------------------- /template_pandoc.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | $for(author-meta)$ 8 | 9 | $endfor$ 10 | $if(date-meta)$ 11 | 12 | $endif$ 13 | $if(keywords)$ 14 | 15 | $endif$ 16 | $if(title-prefix)$$title-prefix$ – $endif$$pagetitle$ 17 | 18 | $if(quotes)$ 19 | 20 | $endif$ 21 | $if(highlighting-css)$ 22 | 25 | $endif$ 26 | $for(css)$ 27 | 28 | $endfor$ 29 | $if(math)$ 30 | $math$ 31 | $endif$ 32 | $for(header-includes)$ 33 | $header-includes$ 34 | $endfor$ 35 | 36 | 37 | $for(include-before)$ 38 | $include-before$ 39 | $endfor$ 40 | $if(title)$ 41 |
42 |

$title$

43 | $if(subtitle)$ 44 |

$subtitle$

45 | $endif$ 46 | $for(author)$ 47 | Author: $author$
48 | $endfor$ 49 | $if(revision)$ 50 | Revision: $revision$
51 | $endif$ 52 | $if(date)$ 53 | Date: $date$
54 | $endif$ 55 | $if(Copyright)$ 56 |

Copyright: $Copyright$

57 | $endif$ 58 |
59 | $endif$ 60 | $if(toc)$ 61 |
62 |

Table of Contents

63 | $toc$ 64 |
65 | $endif$ 66 | $body$ 67 | $for(include-after)$ 68 | $include-after$ 69 | $endfor$ 70 | 71 | -------------------------------------------------------------------------------- /spec_markdown.css: -------------------------------------------------------------------------------- 1 | html { font-size: 100%; overflow-y: scroll; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; } 2 | 3 | body{ 4 | color:#444; 5 | font-family:'Helvetica Neue', 'Helvetica', 'Arial'; 6 | font-size:12px; 7 | line-height:1.5em; 8 | padding:1em; 9 | margin:auto; 10 | max-width:42em; 11 | background:#ffffff; 12 | } 13 | 14 | a{ color: #0645ad; text-decoration:none;} 15 | a:hover{ color: #06e; } 16 | a:active{ color:#faa700; } 17 | a:focus{ outline: thin dotted; } 18 | a:hover, a:active{ outline: 0; } 19 | 20 | ::-moz-selection{background:rgba(255,255,0,0.3);color:#000} 21 | ::selection{background:rgba(255,255,0,0.3);color:#000} 22 | 23 | a::-moz-selection{background:rgba(255,255,0,0.3);color:#0645ad} 24 | a::selection{background:rgba(255,255,0,0.3);color:#0645ad} 25 | 26 | p{ 27 | margin:1em 0; 28 | } 29 | 30 | img{ 31 | max-width:100%; 32 | } 33 | 34 | h1,h2,h3,h4,h5,h6{ 35 | font-weight:normal; 36 | color:#111; 37 | line-height:1em; 38 | } 39 | h4,h5,h6{ font-weight: bold; } 40 | h1{ font-size:2.5em; } 41 | h2{ font-size:2em; } 42 | h3{ font-size:1.5em; } 43 | h4{ font-size:1.2em; } 44 | h5{ font-size:1em; } 45 | h6{ font-size:0.9em; } 46 | 47 | blockquote{ 48 | color:#666666; 49 | margin:0; 50 | padding-left: 3em; 51 | border-left: 0.5em #EEE solid; 52 | } 53 | hr { display: block; height: 2px; border: 0; border-top: 1px solid #aaa;border-bottom: 1px solid #eee; margin: 1em 0; padding: 0; } 54 | pre, code, kbd, samp { font-family: monospace, monospace; _font-family: 'courier new', monospace; font-size: 0.98em; line-height: 1.25em; } 55 | pre { background-color: #FFF; white-space: pre; white-space: pre-wrap; word-wrap: break-word; margin: 0 0; } 56 | 57 | b, strong { font-weight: bold; } 58 | 59 | dfn { font-style: italic; } 60 | 61 | ins { background: #ff9; color: #000; text-decoration: none; } 62 | 63 | mark { background: #ff0; color: #000; font-style: italic; font-weight: bold; } 64 | 65 | sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } 66 | sup { top: -0.5em; } 67 | sub { bottom: -0.25em; } 68 | 69 | ul, ol { margin: 1em 1; padding: 0 0 0 2em; } 70 | li p:last-child { margin:1 } 71 | dd { margin: 0 0 0 2em; } 72 | 73 | img { border: 0; -ms-interpolation-mode: bicubic; vertical-align: middle; } 74 | 75 | table { border-collapse: collapse; border-spacing: 0; border: 1px solid black; } 76 | td { vertical-align: top; padding: 12px; border: 1px solid black;} 77 | 78 | @media only screen and (min-width: 480px) { 79 | body{font-size:14px;} 80 | } 81 | 82 | @media only screen and (min-width: 768px) { 83 | body{font-size:16px;} 84 | } 85 | 86 | @media print { 87 | * { background: transparent !important; color: black !important; filter:none !important; -ms-filter: none !important; } 88 | body{font-size:12pt; max-width:100%;} 89 | a, a:visited { text-decoration: underline; } 90 | hr { height: 1px; border:0; border-bottom:1px solid black; } 91 | a[href]:after { content: " (" attr(href) ")"; } 92 | abbr[title]:after { content: " (" attr(title) ")"; } 93 | .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; } 94 | pre, blockquote { border: 1px solid #999; padding-right: 1em; page-break-inside: avoid; } 95 | tr, img { page-break-inside: avoid; } 96 | img { max-width: 100% !important; } 97 | @page :left { margin: 15mm 20mm 15mm 10mm; } 98 | @page :right { margin: 15mm 10mm 15mm 20mm; } 99 | p, h2, h3 { orphans: 3; widows: 3; } 100 | h2, h3 { page-break-after: avoid; } 101 | } -------------------------------------------------------------------------------- /my.bib: -------------------------------------------------------------------------------- 1 | 2 | @inproceedings{Rogaway:2002, 3 | author = {Rogaway, Phillip}, 4 | title = "{Authenticated-encryption with Associated-data}", 5 | booktitle = "{Proceedings of the 9th {ACM} Conference on Computer and Communications Security}", 6 | series = {CCS '02}, 7 | year = {2002}, 8 | isbn = {1-58113-612-9}, 9 | location = {Washington, DC, USA}, 10 | doi = {10.1145/586110.586125}, 11 | acmid = {586125}, 12 | publisher = {ACM}, 13 | address = {New York, NY, USA}, 14 | keywords = {OCB, associated-data problem, authenticated-encryption, block-cipher usage, key separation, modes of operation}, 15 | url="http://web.cs.ucdavis.edu/~rogaway/papers/ad.pdf" 16 | } 17 | 18 | 19 | @misc{rfc7748, 20 | author="A. Langley and M. Hamburg and S. Turner", 21 | title="{Elliptic Curves for Security}", 22 | series="Request for Comments", 23 | number="7748", 24 | howpublished="RFC 7748 (Informational)", 25 | publisher="IETF", 26 | organization="Internet Engineering Task Force", 27 | year=2016, 28 | month=jan, 29 | url="http://www.ietf.org/rfc/rfc7748.txt", 30 | } 31 | 32 | @misc{rfc2104, 33 | author="H. Krawczyk and M. Bellare and R. Canetti", 34 | title="{HMAC: Keyed-Hashing for Message Authentication}", 35 | series="Request for Comments", 36 | number="2104", 37 | howpublished="RFC 2104 (Informational)", 38 | publisher="IETF", 39 | organization="Internet Engineering Task Force", 40 | year=1997, 41 | month=feb, 42 | note="Updated by RFC 6151", 43 | url="http://www.ietf.org/rfc/rfc2104.txt", 44 | } 45 | 46 | @misc{rfc5869, 47 | author="H. Krawczyk and P. Eronen", 48 | title="{HMAC-based Extract-and-Expand Key Derivation Function (HKDF)}", 49 | series="Request for Comments", 50 | number="5869", 51 | howpublished="RFC 5869 (Informational)", 52 | publisher="IETF", 53 | organization="Internet Engineering Task Force", 54 | year=2010, 55 | month=may, 56 | url="http://www.ietf.org/rfc/rfc5869.txt", 57 | } 58 | 59 | @misc{elligator, 60 | author = {Daniel J. Bernstein and Mike Hamburg and Anna Krasnova and Tanja Lange}, 61 | title = "{Elligator: Elliptic-curve points indistinguishable from uniform random strings}", 62 | howpublished = {Cryptology ePrint Archive, Report 2013/325}, 63 | year = {2013}, 64 | url = "http://eprint.iacr.org/2013/325", 65 | } 66 | 67 | @misc{rfc7539, 68 | author="Y. Nir and A. Langley", 69 | title="{ChaCha20 and Poly1305 for IETF Protocols}", 70 | series="Request for Comments", 71 | number="7539", 72 | howpublished="RFC 7539 (Informational)", 73 | publisher="IETF", 74 | organization="Internet Engineering Task Force", 75 | year=2015, 76 | month=may, 77 | url="http://www.ietf.org/rfc/rfc7539.txt", 78 | } 79 | 80 | @techreport{nistgcm, 81 | author = {Dworkin, Morris J.}, 82 | title = "{SP 800-38D. Recommendation for Block Cipher Modes of Operation: Galois/Counter Mode (GCM) and GMAC}", 83 | year = {2007}, 84 | publisher = {National Institute of Standards \& Technology}, 85 | address = {Gaithersburg, MD, United States}, 86 | url="http://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-38d.pdf" 87 | } 88 | 89 | @TechReport{nistsha2, 90 | author = "NIST", 91 | key = "FIPS-180-4", 92 | title = "{FIPS 180-4. Secure Hash Standard (SHS)}", 93 | publisher = {National Institute of Standards \& Technology}, 94 | address = {Gaithersburg, MD, United States}, 95 | year = "2012", 96 | URL = "http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf" 97 | } 98 | 99 | @misc{rfc7693, 100 | 101 | author="M-J. Saarinen and J-P. Aumasson", 102 | title="{The BLAKE2 Cryptographic Hash and Message Authentication Code (MAC)}", 103 | series="Request for Comments", 104 | number="7693", 105 | howpublished="RFC 7693 (Informational)", 106 | publisher="IETF", 107 | organization="Internet Engineering Task Force", 108 | year=2015, 109 | month=nov, 110 | url="http://www.ietf.org/rfc/rfc7693.txt", 111 | } 112 | 113 | @misc{nacl, 114 | author="Daniel J. Bernstein and Tanja Lange and Peter Schwabe", 115 | title="{NaCl: Networking and Cryptography Library}", 116 | url="https://nacl.cr.yp.to/" 117 | } 118 | 119 | @misc{curvecp, 120 | author="Daniel J. Bernstein", 121 | title="{CurveCP: Usable security for the Internet}", 122 | url="https://curvecp.org" 123 | } 124 | 125 | @Inbook{sigma, 126 | author="Krawczyk, Hugo", 127 | title="{SIGMA: The `SIGn-and-MAc' Approach to Authenticated Diffie-Hellman and Its Use in the IKE Protocols}", 128 | bookTitle="{Advances in Cryptology - CRYPTO 2003}", 129 | year="2003", 130 | url="http://webee.technion.ac.il/~hugo/sigma.html" 131 | } 132 | 133 | @misc{homqv, 134 | author = {Shai Halevi and Hugo Krawczyk}, 135 | title = "{One-Pass HMQV and Asymmetric Key-Wrapping}", 136 | howpublished = {Cryptology ePrint Archive, Report 2010/638}, 137 | year = {2010}, 138 | url = {http://eprint.iacr.org/2010/638}, 139 | } 140 | 141 | @article{ntor, 142 | author = {Goldberg, Ian and Stebila, Douglas and Ustaoglu, Berkant}, 143 | title = "{Anonymity and One-way Authentication in Key Exchange Protocols}", 144 | journal = {Design, Codes, and Cryptography}, 145 | issue_date = {May 2013}, 146 | volume = {67}, 147 | number = {2}, 148 | month = may, 149 | year = {2013}, 150 | issn = {0925-1022}, 151 | numpages = {25}, 152 | doi = {10.1007/s10623-011-9604-z}, 153 | acmid = {2458069}, 154 | publisher = {Kluwer Academic Publishers}, 155 | address = {Norwell, MA, USA}, 156 | url="http://cacr.uwaterloo.ca/techreports/2011/cacr2011-11.pdf" 157 | } 158 | 159 | @inproceedings{otr, 160 | author = {Di Raimondo, Mario and Gennaro, Rosario and Krawczyk, Hugo}, 161 | title = "{Secure Off-the-record Messaging}", 162 | booktitle = "{Proceedings of the 2005 ACM Workshop on Privacy in the Electronic Society}", 163 | series = {WPES '05}, 164 | year = {2005}, 165 | isbn = {1-59593-228-3}, 166 | address = {New York, NY, USA}, 167 | url="http://www.dmi.unict.it/diraimondo/web/wp-content/uploads/papers/otr.pdf" 168 | } 169 | 170 | @Inbook{kudla2005, 171 | author="Kudla, Caroline and Paterson, Kenneth G.", 172 | title="{Modular Security Proofs for Key Agreement Protocols}", 173 | bookTitle="{Advances in Cryptology - ASIACRYPT 2005: 11th International Conference on the Theory and Application of Cryptology and Information Security}", 174 | year="2005", 175 | isbn="978-3-540-32267-2", 176 | doi="10.1007/11593447_30", 177 | url="http://www.isg.rhul.ac.uk/~kp/ModularProofs.pdf" 178 | } 179 | 180 | @Inbook{blakewilson1997, 181 | author="Blake-Wilson, Simon and Johnson, Don and Menezes, Alfred", 182 | title="Key agreement protocols and their security analysis", 183 | bookTitle="{Crytography and Coding: 6th IMA International Conference Cirencester, UK, December 17--19, 1997 Proceedings}", 184 | year="1997", 185 | url="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.25.387" 186 | } 187 | 188 | @misc{noise, 189 | author="T. Perrin", 190 | title="{The Noise Protocol Framework}", 191 | year=2017, 192 | url="https://noiseprotocol.org", 193 | } 194 | 195 | -------------------------------------------------------------------------------- /template_pandoc.latex: -------------------------------------------------------------------------------- 1 | \documentclass[$if(fontsize)$$fontsize$,$endif$$if(lang)$$babel-lang$,$endif$$if(papersize)$$papersize$paper,$endif$$for(classoption)$$classoption$$sep$,$endfor$]{$documentclass$} 2 | $if(fontfamily)$ 3 | \usepackage[$for(fontfamilyoptions)$$fontfamilyoptions$$sep$,$endfor$]{$fontfamily$} 4 | $else$ 5 | \usepackage{lmodern} 6 | $endif$ 7 | $if(linestretch)$ 8 | \usepackage{setspace} 9 | \setstretch{$linestretch$} 10 | $endif$ 11 | \usepackage{amssymb,amsmath} 12 | \usepackage{ifxetex,ifluatex} 13 | \usepackage{fixltx2e} % provides \textsubscript 14 | \ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex 15 | \usepackage[$if(fontenc)$$fontenc$$else$T1$endif$]{fontenc} 16 | \usepackage[utf8]{inputenc} 17 | $if(euro)$ 18 | \usepackage{eurosym} 19 | $endif$ 20 | \else % if luatex or xelatex 21 | \ifxetex 22 | \usepackage{mathspec} 23 | \else 24 | \usepackage{fontspec} 25 | \fi 26 | \defaultfontfeatures{Ligatures=TeX,Scale=MatchLowercase} 27 | $if(euro)$ 28 | \newcommand{\euro}{€} 29 | $endif$ 30 | $if(mainfont)$ 31 | \setmainfont[$for(mainfontoptions)$$mainfontoptions$$sep$,$endfor$]{$mainfont$} 32 | $endif$ 33 | $if(sansfont)$ 34 | \setsansfont[$for(sansfontoptions)$$sansfontoptions$$sep$,$endfor$]{$sansfont$} 35 | $endif$ 36 | $if(monofont)$ 37 | \setmonofont[Mapping=tex-ansi$if(monofontoptions)$,$for(monofontoptions)$$monofontoptions$$sep$,$endfor$$endif$]{$monofont$} 38 | $endif$ 39 | $if(mathfont)$ 40 | \setmathfont(Digits,Latin,Greek)[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} 41 | $endif$ 42 | $if(CJKmainfont)$ 43 | \usepackage{xeCJK} 44 | \setCJKmainfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$} 45 | $endif$ 46 | \fi 47 | % use upquote if available, for straight quotes in verbatim environments 48 | \IfFileExists{upquote.sty}{\usepackage{upquote}}{} 49 | % use microtype if available 50 | \IfFileExists{microtype.sty}{% 51 | \usepackage{microtype} 52 | \UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts 53 | }{} 54 | $if(geometry)$ 55 | \usepackage[$for(geometry)$$geometry$$sep$,$endfor$]{geometry} 56 | $endif$ 57 | \usepackage{hyperref} 58 | $if(colorlinks)$ 59 | \PassOptionsToPackage{usenames,dvipsnames}{color} % color is loaded by hyperref 60 | $endif$ 61 | \hypersetup{unicode=true, 62 | $if(title-meta)$ 63 | pdftitle={$title-meta$}, 64 | $endif$ 65 | $if(author-meta)$ 66 | pdfauthor={$author-meta$}, 67 | $endif$ 68 | $if(keywords)$ 69 | pdfkeywords={$for(keywords)$$keywords$$sep$; $endfor$}, 70 | $endif$ 71 | $if(colorlinks)$ 72 | colorlinks=true, 73 | linkcolor=$if(linkcolor)$$linkcolor$$else$Maroon$endif$, 74 | citecolor=$if(citecolor)$$citecolor$$else$Blue$endif$, 75 | urlcolor=$if(urlcolor)$$urlcolor$$else$Blue$endif$, 76 | $else$ 77 | pdfborder={0 0 0}, 78 | $endif$ 79 | breaklinks=true} 80 | \urlstyle{same} % don't use monospace font for urls 81 | $if(lang)$ 82 | \ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex 83 | \usepackage[shorthands=off,$for(babel-otherlangs)$$babel-otherlangs$,$endfor$main=$babel-lang$]{babel} 84 | $if(babel-newcommands)$ 85 | $babel-newcommands$ 86 | $endif$ 87 | \else 88 | \usepackage{polyglossia} 89 | \setmainlanguage[$polyglossia-lang.options$]{$polyglossia-lang.name$} 90 | $for(polyglossia-otherlangs)$ 91 | \setotherlanguage[$polyglossia-otherlangs.options$]{$polyglossia-otherlangs.name$} 92 | $endfor$ 93 | \fi 94 | $endif$ 95 | $if(natbib)$ 96 | \usepackage{natbib} 97 | \bibliographystyle{$if(biblio-style)$$biblio-style$$else$plainnat$endif$} 98 | $endif$ 99 | $if(biblatex)$ 100 | \usepackage$if(biblio-style)$[style=$biblio-style$]$endif${biblatex} 101 | $if(biblatexoptions)$\ExecuteBibliographyOptions{$for(biblatexoptions)$$biblatexoptions$$sep$,$endfor$}$endif$ 102 | $for(bibliography)$ 103 | \addbibresource{$bibliography$} 104 | $endfor$ 105 | $endif$ 106 | $if(listings)$ 107 | \usepackage{listings} 108 | $endif$ 109 | $if(lhs)$ 110 | \lstnewenvironment{code}{\lstset{language=Haskell,basicstyle=\small\ttfamily}}{} 111 | $endif$ 112 | $if(highlighting-macros)$ 113 | $highlighting-macros$ 114 | $endif$ 115 | $if(verbatim-in-note)$ 116 | \usepackage{fancyvrb} 117 | \VerbatimFootnotes % allows verbatim text in footnotes 118 | $endif$ 119 | $if(tables)$ 120 | \usepackage{longtable,booktabs} 121 | $endif$ 122 | $if(graphics)$ 123 | \usepackage{graphicx,grffile} 124 | \makeatletter 125 | \def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi} 126 | \def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi} 127 | \makeatother 128 | % Scale images if necessary, so that they will not overflow the page 129 | % margins by default, and it is still possible to overwrite the defaults 130 | % using explicit options in \includegraphics[width, height, ...]{} 131 | \setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio} 132 | $endif$ 133 | $if(links-as-notes)$ 134 | % Make links footnotes instead of hotlinks: 135 | \renewcommand{\href}[2]{#2\footnote{\url{#1}}} 136 | $endif$ 137 | $if(strikeout)$ 138 | \usepackage[normalem]{ulem} 139 | % avoid problems with \sout in headers with hyperref: 140 | \pdfstringdefDisableCommands{\renewcommand{\sout}{}} 141 | $endif$ 142 | $if(indent)$ 143 | $else$ 144 | \IfFileExists{parskip.sty}{% 145 | \usepackage{parskip} 146 | }{% else 147 | \setlength{\parindent}{0pt} 148 | \setlength{\parskip}{6pt plus 2pt minus 1pt} 149 | } 150 | $endif$ 151 | \setlength{\emergencystretch}{3em} % prevent overfull lines 152 | \providecommand{\tightlist}{% 153 | \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}} 154 | $if(numbersections)$ 155 | \setcounter{secnumdepth}{5} 156 | $else$ 157 | \setcounter{secnumdepth}{0} 158 | $endif$ 159 | $if(subparagraph)$ 160 | $else$ 161 | % Redefines (sub)paragraphs to behave more like sections 162 | \ifx\paragraph\undefined\else 163 | \let\oldparagraph\paragraph 164 | \renewcommand{\paragraph}[1]{\oldparagraph{#1}\mbox{}} 165 | \fi 166 | \ifx\subparagraph\undefined\else 167 | \let\oldsubparagraph\subparagraph 168 | \renewcommand{\subparagraph}[1]{\oldsubparagraph{#1}\mbox{}} 169 | \fi 170 | $endif$ 171 | $if(dir)$ 172 | \ifxetex 173 | % load bidi as late as possible as it modifies e.g. graphicx 174 | $if(latex-dir-rtl)$ 175 | \usepackage[RTLdocument]{bidi} 176 | $else$ 177 | \usepackage{bidi} 178 | $endif$ 179 | \fi 180 | \ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex 181 | \TeXXeTstate=1 182 | \newcommand{\RL}[1]{\beginR #1\endR} 183 | \newcommand{\LR}[1]{\beginL #1\endL} 184 | \newenvironment{RTL}{\beginR}{\endR} 185 | \newenvironment{LTR}{\beginL}{\endL} 186 | \fi 187 | $endif$ 188 | $for(header-includes)$ 189 | $header-includes$ 190 | $endfor$ 191 | 192 | $if(title)$ 193 | \title{$title$$if(thanks)$\thanks{$thanks$}$endif$} 194 | $endif$ 195 | $if(subtitle)$ 196 | \providecommand{\subtitle}[1]{} 197 | \subtitle{$subtitle$} 198 | $endif$ 199 | $if(author)$ 200 | \author{$for(author)$$author$$sep$ \and $endfor$} 201 | $endif$ 202 | $if(institute)$ 203 | \institute{$for(institute)$$institute$$sep$ \and $endfor$} 204 | $endif$ 205 | \date{Revision $revision$, $date$} 206 | 207 | \begin{document} 208 | $if(title)$ 209 | \maketitle 210 | $endif$ 211 | $if(abstract)$ 212 | \begin{abstract} 213 | $abstract$ 214 | \end{abstract} 215 | $endif$ 216 | 217 | $for(include-before)$ 218 | $include-before$ 219 | 220 | $endfor$ 221 | $if(toc)$ 222 | { 223 | $if(colorlinks)$ 224 | \hypersetup{linkcolor=$if(toccolor)$$toccolor$$else$black$endif$} 225 | $endif$ 226 | \setcounter{tocdepth}{$toc-depth$} 227 | \tableofcontents 228 | } 229 | $endif$ 230 | $if(lot)$ 231 | \listoftables 232 | $endif$ 233 | $if(lof)$ 234 | \listoffigures 235 | $endif$ 236 | $body$ 237 | 238 | $if(natbib)$ 239 | $if(bibliography)$ 240 | $if(biblio-title)$ 241 | $if(book-class)$ 242 | \renewcommand\bibname{$biblio-title$} 243 | $else$ 244 | \renewcommand\refname{$biblio-title$} 245 | $endif$ 246 | $endif$ 247 | \bibliography{$for(bibliography)$$bibliography$$sep$,$endfor$} 248 | 249 | $endif$ 250 | $endif$ 251 | $if(biblatex)$ 252 | \printbibliography$if(biblio-title)$[title=$biblio-title$]$endif$ 253 | 254 | $endif$ 255 | $for(include-after)$ 256 | $include-after$ 257 | 258 | $endfor$ 259 | \end{document} -------------------------------------------------------------------------------- /noisesocket.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'The NoiseSocket Protocol' 3 | author: 4 | - 'Alexey Ermishkin' 5 | - 'Trevor Perrin' 6 | revision: '1' 7 | date: '2017-07-27' 8 | bibliography: 'my.bib' 9 | link-citations: 'true' 10 | csl: 'ieee-with-url.csl' 11 | --- 12 | 13 | **Abstract** 14 | ======================== 15 | 16 | NoiseSocket is an extension of the Noise Protocol Framework that enables quick 17 | and seamless secure connections with minimal code size, small keys, 18 | modern ciphers and hash functions, and extremely fast speed. It can be used 19 | with raw public keys instead of X.509 infrastructure and targets IoT devices, 20 | microservices, and back-end applications such as datacenter-to-datacenter 21 | communications. 22 | 23 | 24 | \pagebreak 25 | 26 | 27 | 1. Overview 28 | ==================== 29 | 30 | The Noise Protocol Framework [@noise] describes simple **Noise protocols**. A Noise 31 | protocol sends a fixed sequence of handshake messages based on a fixed set of 32 | cryptographic choices. In some situations this is too rigid, and the responder 33 | needs flexibility to accept or reject the initiator's Noise protocol choice, or 34 | make its own choice based on options offered by the initiator. 35 | 36 | The **NoiseSocket** framework allows the initiator and responder to negotiate a particular Noise protocol. This is a two-step process: 37 | 38 | * The initiator begins executing an initial Noise protocol and sends an initial Noise handshake message. As a preamble to this message, the initiator can send some **negotiation data** which indicates the initial Noise protocol and can advertise support for other Noise protocols. 39 | 40 | * The responder can **accept** the initiator's choice of initial Noise protocol, **change** to a different Noise protocol, or **reject** the initiator's message entirely. The responder indicates this choice by sending some negotiation data back to the initiator, or closing the connection. 41 | 42 | NoiseSocket doesn't specify the contents of negotiation data, since different applications will encode versions and advertise protocol support in different ways. NoiseSocket just defines a message format to transport this data, and APIs to access it. 43 | 44 | NoiseSocket handles two other low-level issues: 45 | 46 | * NoiseSocket defines length fields for all messages, so NoiseSocket messages can be used with stream-based protocols like TCP. 47 | 48 | * NoiseSocket defines padding fields which are included in every ciphertext, so that applications can pad their messages to avoid revealing plaintext lengths to an eavesdropper. 49 | 50 | 51 | 2. Message Formats 52 | =================== 53 | A NoiseSocket protocol begins with a **handshake phase**. During the handshake phase each NoiseSocket message contains a single **handshake message** from some underlying Noise protocol, plus optional negotiation data. 54 | 55 | After the handshake completes, NoiseSocket enters the **transport phase** where each NoiseSocket message contains a **transport message** from some underlying Noise protocol. 56 | 57 | All transport messages and some handshake messages contain an encrypted Noise **payload**. Each encrypted payload contains a plaintext with a **body** (its actual contents) followed by **padding**. 58 | 59 | The following sections describe the format for NoiseSocket handshake and transport messages, and encrypted payloads. 60 | 61 | 2.1. Handshake messages 62 | -------------------------------- 63 | 64 | All NoiseSocket handshake messages have the same structure: 65 | 66 | - negotiation_data_len (2 bytes) 67 | - negotiation_data 68 | - noise_message_len (2 bytes) 69 | - noise_message 70 | 71 | The `negotiation_data_len` and `noise_message_len` fields are 2-byte unsigned 72 | integers, encoded in big-endian, that store the number of bytes for the following 73 | `negotiation_data` and `noise_message` fields. 74 | 75 | 2.2. Transport messages 76 | ------------------------- 77 | 78 | All NoiseSocket transport messages have the same structure: 79 | 80 | - noise_message_len (2 bytes) 81 | - noise_message 82 | 83 | The `noise_message_len` field is a 2-byte unsigned integer, encoded in big-endian, that stores the number of bytes for the following `noise_message` field. 84 | 85 | 2.3. Encrypted payloads 86 | ---------------------- 87 | Some Noise messages will carry an encrypted payload. When this payload is decrypted, the plaintext will have the following structure: 88 | 89 | - body_len (2 bytes) 90 | - body 91 | - padding 92 | 93 | The `body_len` field is a 2-byte unsigned integer, encoded in big-endian, that stores the number of bytes for the following `body` field. Following the `body` field the remainder of the plaintext will be padding bytes, which may contain arbitrary data and must be ignored by the recipient. 94 | 95 | 3. Negotiation 96 | =============== 97 | 98 | The initiator will choose the initial underlying Noise protocol, and will indicate this to the responder using the `negotiation_data` field. 99 | 100 | Upon receiving an initial NoiseSocket message, the responder has five options: 101 | 102 | * **Silent rejection**: The responder closes the network connection. 103 | 104 | * **Explicit rejection**: The responder sends a single NoiseSocket handshake message. The `negotiation_data` field must be non-empty and contain an error message. The `noise_message` field must be empty. After sending this message, the responder closes the network connection. 105 | 106 | * **Acceptance**: The responder sends a NoiseSocket handshake message containing the next handshake message in the initial Noise protocol. The `negotiation_data` field must be empty. 107 | 108 | * **Change protocol and send fallback message**: The responder sends a NoiseSocket handshake message containing a handshake message from a new Noise protocol, different from the initial Noise protocol. The `negotiation_data` field must be non-empty. The `noise_message` field must be non-empty. 109 | 110 | * **Change protocol and send reinitialization request**: The responder requests the initiator to send a NoiseSocket handshake message containing a handshake message from a new Noise protocol, different from the initial Noise protocol. The `negotiation_data` field must be non-empty. The `noise_message` field must be empty. 111 | 112 | The initiator's first `negotiation_data` field must indicate the initial Noise protocol and what other Noise protocols the initiator can support. How this is encoded is up to the application. 113 | 114 | If the responder's first `negotiation_data` field is empty, then the initial protocol was accepted. If the field is non-empty, it must encode values that distinguish betwen the "explicit rejection", "fallback", and "reinitialization request" cases. In the first case, the `negotiation_data` must encode an error message. In the latter two cases, the `negotiation_data` must encode the Noise protocol the initiator should fallback to or reinitialize with. 115 | 116 | When the initiator receives the first NoiseSocket response message, and for all later handshake messages received by both parties, the only options are silent rejection, explicit rejection, or acceptance. 117 | 118 | Example negotiation flows: 119 | 120 | * It's easy for the responder to change symmetric crypto options using a fallback protocol. For example, if the initial Noise protocol is `Noise_XX_25519_AESGCM_SHA256`, the responder can fallback to `Noise_XX+fallback_25519_ChaChaPoly_BLAKE2s`. This reuses the ephemeral public key from the initiator's initial message. 121 | 122 | * If the initiator attempts 0-RTT encryption that the responder fails to decrypt, the responder can use a fallback protocol. For example, if the initial Noise protocol is `Noise_IK_25519_AESGCM_SHA256`, the responder can fallback to `Noise_XX+fallback_25519_AESGCM_SHA256`. This reuses the ephemeral public key from the initiator's initial message. 123 | 124 | * If the responder wants to use a DH function that the initiator supports but did not send an ephemeral public key for, in the initial message, then the responder might need to request reinitialization. For example, if the initial Noise protocol is `Noise_XX_25519_AESGCM_SHA256`, the responder can request reinitialization to `Noise_XX_448_AESGCM_SHA256`, causing the initiator to respond with a NoiseSocket message containing the initial message from the `Noise_XX` pattern with a Curve448 ephemeral public key. 125 | 126 | 127 | 128 | 129 | 4. Prologue 130 | ============ 131 | 132 | Noise protocols take a **prologue** input. The prologue is cryptographically authenticated to make sure both parties have the same view of it. 133 | 134 | The prologue for the initial Noise protocol is set to the UTF-8 string "NoiseSocketInit1" followed by all bytes transmitted prior to the `noise_message_len`. This consists of the following values concatenated together: 135 | 136 | * The UTF-8 string "NoiseSocketInit1" 137 | * The initial message's `negotiation_data_len` 138 | * The initial message's `negotiation_data` 139 | 140 | If the responder changes the Noise protocol, the prologue is set to the UTF-8 string "NoiseSocketInit2" followed by all bytes received and transmitted prior to the `noise_message_len`. This consists of the following values concatenated together: 141 | 142 | * The UTF-8 string "NoiseSocketInit2" 143 | * The initial message's `negotiation_data_len` 144 | * The initial message's `negotiation_data` 145 | * The initial message's `noise_message_len` 146 | * The initial message's `noise_message` 147 | * The responding message's `negotiation_data_len` 148 | * The responding message's `negotiation_data` 149 | 150 | 151 | 5. API 152 | ====== 153 | 154 | The initiator uses the following functions during the handshake phase. These functions are described in the order they would typically be used to send the initial handshake message and process the first response. In particular, the initiator would "peek" at the negotiation data in the first response message, then decide whether reinitialization is necessary (if the negotiation data indicates a reinitialization request or a fallback message). 155 | 156 | **`Initialize`**: 157 | 158 | * INPUT: pattern, dh, cipher, hash 159 | * OUTPUT: session object 160 | 161 | **`WriteHandshakeMessage`**: 162 | 163 | * INPUT: negotiation_data, message_body, padded_len 164 | - `negotiation_data` is zero-length if omitted 165 | - `message_body` is zero-length if omitted 166 | - If this message has an encrypted payload and `noise_message_len` would be less than `padded_len`, padding is added to make `noise_message_len` equal `padded_len`. 167 | * OUTPUT: handshake_message 168 | 169 | **`PeekHandshakeMessage`**: 170 | 171 | * INPUT: handshake_message 172 | * OUTPUT: negotiation_data 173 | 174 | **`Reinitialize`**: 175 | 176 | * INPUT: fallback pattern or reinitialization pattern, dh, cipher, hash 177 | * OUTPUT: session object 178 | 179 | **`ReadHandshakeMessage`**: 180 | 181 | * INPUT: handshake_message 182 | * OUTPUT: message_body 183 | 184 | The server will use the same functions, except it will first "peek" at the initial message, then call `Initialize` if it is accepting the initial protocol, or `Reinitialize` if it is changing protocols with a fallback message or reinitialization request. 185 | 186 | If the responder is sending an explicit rejection or reinitialization request, it will use the following function: 187 | 188 | **`WriteEmptyHandshakeMessage`**: 189 | 190 | * INPUT: negotiation_data 191 | * OUTPUT: handshake_message 192 | 193 | Following the first exchange of handshake messages, the parties will continue calling `ReadHandshakeMessage` and `WriteHandshakeMessage` until the handshake is complete. 194 | 195 | After the handshake is complete, both parties will call `WriteMessage` and `ReadMessage` to send transport messages. Every call to `WriteMessage` will produce a NoiseSocket transport message, and every call to `ReadMessage` will decrypt a NoiseSocket transport message and return its body. 196 | 197 | \newpage 198 | 199 | **`WriteMessage`**: 200 | 201 | * INPUT: message_body, padded_len 202 | - `padded_len` is zero (no padding) if omitted 203 | - If `noise_message_len` would be less than `padded_len`, padding is added to make `noise_message_len` equal `padded_len`. 204 | * OUTPUT: transport_message 205 | 206 | **`ReadMessage`**: 207 | 208 | * INPUT: transport_message 209 | * OUTPUT: message_body 210 | 211 | 212 | 6. IPR 213 | ======== 214 | 215 | The NoiseSocket specification (this document) is hereby placed in the public domain. 216 | 217 | 7. Acknowledgements 218 | ======== 219 | 220 | Thanks to Rhys Weatherley for helpful discussion. 221 | 222 | 8. References 223 | ======== 224 | -------------------------------------------------------------------------------- /ieee-with-url.csl: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /output/noisesocket.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | The NoiseSocket Protocol 11 | 12 | 13 | 14 | 15 | 22 |
23 |

Table of Contents

24 | 39 |
40 |

Abstract

41 |

NoiseSocket is an extension of the Noise Protocol Framework that enables quick and seamless secure connections with minimal code size, small keys, modern ciphers and hash functions, and extremely fast speed. It can be used with raw public keys instead of X.509 infrastructure and targets IoT devices, microservices, and back-end applications such as datacenter-to-datacenter communications.

42 |

43 |

1. Overview

44 |

The Noise Protocol Framework [1] describes simple Noise protocols. A Noise protocol sends a fixed sequence of handshake messages based on a fixed set of cryptographic choices. In some situations this is too rigid, and the responder needs flexibility to accept or reject the initiator's Noise protocol choice, or make its own choice based on options offered by the initiator.

45 |

The NoiseSocket framework allows the initiator and responder to negotiate a particular Noise protocol. This is a two-step process:

46 | 50 |

NoiseSocket doesn't specify the contents of negotiation data, since different applications will encode versions and advertise protocol support in different ways. NoiseSocket just defines a message format to transport this data, and APIs to access it.

51 |

NoiseSocket handles two other low-level issues:

52 | 56 |

2. Message Formats

57 |

A NoiseSocket protocol begins with a handshake phase. During the handshake phase each NoiseSocket message contains a single handshake message from some underlying Noise protocol, plus optional negotiation data.

58 |

After the handshake completes, NoiseSocket enters the transport phase where each NoiseSocket message contains a transport message from some underlying Noise protocol.

59 |

All transport messages and some handshake messages contain an encrypted Noise payload. Each encrypted payload contains a plaintext with a body (its actual contents) followed by padding.

60 |

The following sections describe the format for NoiseSocket handshake and transport messages, and encrypted payloads.

61 |

2.1. Handshake messages

62 |

All NoiseSocket handshake messages have the same structure:

63 | 69 |

The negotiation_data_len and noise_message_len fields are 2-byte unsigned integers, encoded in big-endian, that store the number of bytes for the following negotiation_data and noise_message fields.

70 |

2.2. Transport messages

71 |

All NoiseSocket transport messages have the same structure:

72 | 76 |

The noise_message_len field is a 2-byte unsigned integer, encoded in big-endian, that stores the number of bytes for the following noise_message field.

77 |

2.3. Encrypted payloads

78 |

Some Noise messages will carry an encrypted payload. When this payload is decrypted, the plaintext will have the following structure:

79 | 84 |

The body_len field is a 2-byte unsigned integer, encoded in big-endian, that stores the number of bytes for the following body field. Following the body field the remainder of the plaintext will be padding bytes, which may contain arbitrary data and must be ignored by the recipient.

85 |

3. Negotiation

86 |

The initiator will choose the initial underlying Noise protocol, and will indicate this to the responder using the negotiation_data field.

87 |

Upon receiving an initial NoiseSocket message, the responder has five options:

88 | 95 |

The initiator's first negotiation_data field must indicate the initial Noise protocol and what other Noise protocols the initiator can support. How this is encoded is up to the application.

96 |

If the responder's first negotiation_data field is empty, then the initial protocol was accepted. If the field is non-empty, it must encode values that distinguish betwen the "explicit rejection", "fallback", and "reinitialization request" cases. In the first case, the negotiation_data must encode an error message. In the latter two cases, the negotiation_data must encode the Noise protocol the initiator should fallback to or reinitialize with.

97 |

When the initiator receives the first NoiseSocket response message, and for all later handshake messages received by both parties, the only options are silent rejection, explicit rejection, or acceptance.

98 |

Example negotiation flows:

99 | 104 |

4. Prologue

105 |

Noise protocols take a prologue input. The prologue is cryptographically authenticated to make sure both parties have the same view of it.

106 |

The prologue for the initial Noise protocol is set to the UTF-8 string "NoiseSocketInit1" followed by all bytes transmitted prior to the noise_message_len. This consists of the following values concatenated together:

107 | 112 |

If the responder changes the Noise protocol, the prologue is set to the UTF-8 string "NoiseSocketInit2" followed by all bytes received and transmitted prior to the noise_message_len. This consists of the following values concatenated together:

113 | 122 |

5. API

123 |

The initiator uses the following functions during the handshake phase. These functions are described in the order they would typically be used to send the initial handshake message and process the first response. In particular, the initiator would "peek" at the negotiation data in the first response message, then decide whether reinitialization is necessary (if the negotiation data indicates a reinitialization request or a fallback message).

124 |

Initialize:

125 | 129 |

WriteHandshakeMessage:

130 | 139 |

PeekHandshakeMessage:

140 | 144 |

Reinitialize:

145 | 149 |

ReadHandshakeMessage:

150 | 154 |

The server will use the same functions, except it will first "peek" at the initial message, then call Initialize if it is accepting the initial protocol, or Reinitialize if it is changing protocols with a fallback message or reinitialization request.

155 |

If the responder is sending an explicit rejection or reinitialization request, it will use the following function:

156 |

WriteEmptyHandshakeMessage:

157 | 161 |

Following the first exchange of handshake messages, the parties will continue calling ReadHandshakeMessage and WriteHandshakeMessage until the handshake is complete.

162 |

After the handshake is complete, both parties will call WriteMessage and ReadMessage to send transport messages. Every call to WriteMessage will produce a NoiseSocket transport message, and every call to ReadMessage will decrypt a NoiseSocket transport message and return its body.

163 | 164 |

WriteMessage:

165 | 173 |

ReadMessage:

174 | 178 |

6. IPR

179 |

The NoiseSocket specification (this document) is hereby placed in the public domain.

180 |

7. Acknowledgements

181 |

Thanks to Rhys Weatherley for helpful discussion.

182 |

8. References

183 |
184 |
185 |

[1] T. Perrin, “The Noise Protocol Framework.” 2017. https://noiseprotocol.org

186 |
187 |
188 | 189 | -------------------------------------------------------------------------------- /test_vectors.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "NoiseSocket", 3 | "init_prologue": "101c4e6f6973655f58585f32353531395f41455347434d5f5348413235361d4e6f6973655f58585f32353531395f41455347434d5f424c414b4532621c4e6f6973655f58585f32353531395f41455347434d5f5348413531321d4e6f6973655f58585f32353531395f41455347434d5f424c414b453273204e6f6973655f58585f32353531395f436861436861506f6c795f534841323536214e6f6973655f58585f32353531395f436861436861506f6c795f424c414b453262204e6f6973655f58585f32353531395f436861436861506f6c795f534841353132214e6f6973655f58585f32353531395f436861436861506f6c795f424c414b4532731c4e6f6973655f494b5f32353531395f41455347434d5f5348413235361d4e6f6973655f494b5f32353531395f41455347434d5f424c414b4532621c4e6f6973655f494b5f32353531395f41455347434d5f5348413531321d4e6f6973655f494b5f32353531395f41455347434d5f424c414b453273204e6f6973655f494b5f32353531395f436861436861506f6c795f534841323536214e6f6973655f494b5f32353531395f436861436861506f6c795f424c414b453262204e6f6973655f494b5f32353531395f436861436861506f6c795f534841353132214e6f6973655f494b5f32353531395f436861436861506f6c795f424c414b453273", 4 | "init_static": "0001020300010203000102030001020300010203000102030001020300010203", 5 | "init_ephemeral": "0001000100010001000100010001000100010001000100010001000100010001", 6 | "init_remote_static": "7f1844536de13929d289ed6e904e080f9e44cad25edd1fb2cd03a8758df2b527", 7 | "resp_static": "0001020304000102030400010203040001020304000102030400010203040001", 8 | "resp_ephemeral": "0001020001020001020001020001020001020001020001020001020001020001", 9 | "initial_message": "07081c4e6f6973655f58585f32353531395f41455347434d5f53484132353600206e230d8b0503d567a6be48ec5d0cb6f97979784ae6de477a2096c0bdaa6a9e771d4e6f6973655f58585f32353531395f41455347434d5f424c414b45326200206e230d8b0503d567a6be48ec5d0cb6f97979784ae6de477a2096c0bdaa6a9e771c4e6f6973655f58585f32353531395f41455347434d5f53484135313200206e230d8b0503d567a6be48ec5d0cb6f97979784ae6de477a2096c0bdaa6a9e771d4e6f6973655f58585f32353531395f41455347434d5f424c414b45327300206e230d8b0503d567a6be48ec5d0cb6f97979784ae6de477a2096c0bdaa6a9e77204e6f6973655f58585f32353531395f436861436861506f6c795f53484132353600206e230d8b0503d567a6be48ec5d0cb6f97979784ae6de477a2096c0bdaa6a9e77214e6f6973655f58585f32353531395f436861436861506f6c795f424c414b45326200206e230d8b0503d567a6be48ec5d0cb6f97979784ae6de477a2096c0bdaa6a9e77204e6f6973655f58585f32353531395f436861436861506f6c795f53484135313200206e230d8b0503d567a6be48ec5d0cb6f97979784ae6de477a2096c0bdaa6a9e77214e6f6973655f58585f32353531395f436861436861506f6c795f424c414b45327300206e230d8b0503d567a6be48ec5d0cb6f97979784ae6de477a2096c0bdaa6a9e771c4e6f6973655f494b5f32353531395f41455347434d5f534841323536007e6e230d8b0503d567a6be48ec5d0cb6f97979784ae6de477a2096c0bdaa6a9e77ded33f2edf815b80a131f4aa4bccd0ff6ba435af788d31c8b3ded3d2e125ca10612a1ba16321d54abf0859f8dc7f9e0668630e67d96630061d31ff896256b90d3316afff955959a0827189e6af40a10aa1766f042b321a2b22e3018590331d4e6f6973655f494b5f32353531395f41455347434d5f424c414b453262007e6e230d8b0503d567a6be48ec5d0cb6f97979784ae6de477a2096c0bdaa6a9e7717451186a32c7e6daf4ac9a94193e693ea9e83cae1446cef4ea45f545ba07f521f7fb8cac87f8ea1e0deb2b4486aad006bb0282a755347160fc340793958276e59786b09839015df030d5f63a0672a0b102cd8930b07ec768ef99f3d70781c4e6f6973655f494b5f32353531395f41455347434d5f534841353132007e6e230d8b0503d567a6be48ec5d0cb6f97979784ae6de477a2096c0bdaa6a9e777f89a3bf0ec848072b6afc56215d705e4e6e7148336af16dc3b0eaf82745ab96d8a41ac8ee06df2356e284c93c565aa5087376b2b04beb3680afd499b5bd9542881d18756783706d97f3786b6068b6ce595f652953290db4b994417a9ed41d4e6f6973655f494b5f32353531395f41455347434d5f424c414b453273007e6e230d8b0503d567a6be48ec5d0cb6f97979784ae6de477a2096c0bdaa6a9e7791ffd98836d76a63b1ae6cf7c8d152bc8d1bf91af7e3db5a04721e8a1432814e1697054ce5a625e6c94191146c4a93ccf00e3eb37f287157f9990a5b841d7df4f34891082ee00736986bf19c7943ee60fad68a3954216405137b8108b825204e6f6973655f494b5f32353531395f436861436861506f6c795f534841323536007e6e230d8b0503d567a6be48ec5d0cb6f97979784ae6de477a2096c0bdaa6a9e777c5e631b5fd5e369983f6a083743be4c0a0bb51327878ccb91aa05222b51ed832510c7e6d122452985654f8b44470099d07abff359645161d2483381850fba2b43910dbdcc86a5f58152cf87ddec06af49292639b878913276873f28e1d2214e6f6973655f494b5f32353531395f436861436861506f6c795f424c414b453262007e6e230d8b0503d567a6be48ec5d0cb6f97979784ae6de477a2096c0bdaa6a9e7710808dd51c7ebd4e9beab9e8c46b2a7cad34fb3ad9b78d855c3af2367c1b480393d78e73dbb65f79ae21ec14051554df296f9208723d424a523ae3dd6c7b554bdb47feaf7d0bc8b4b1b7192c0f12554fdd869c24290ef528eb72bebd889a204e6f6973655f494b5f32353531395f436861436861506f6c795f534841353132007e6e230d8b0503d567a6be48ec5d0cb6f97979784ae6de477a2096c0bdaa6a9e77af9ed1cbc554ac6507691741749ed940c92dca6d1510059b599e373b1e6d612bab02e72c9cff7d0da1a5c01277eeb7511e88da5cab50d8317f667f90e7b4876835396d02deded3a022a61707d398d15e1a8d8ee12f33c0bc5853f8e405c4214e6f6973655f494b5f32353531395f436861436861506f6c795f424c414b453273007e6e230d8b0503d567a6be48ec5d0cb6f97979784ae6de477a2096c0bdaa6a9e77088ed6a74cba961243cee1fc1cd76497457a5746d95082553d4948e3ac4b5417ffcd47a0d9997d6c2f88eeef0d2339be0867f7b452b5baac1fe0554d40ec07c923a105c66ed7775a1080e3850373345eccebfc2fab9ecc812a4e8223f8a3", 10 | "protocols": [ 11 | "Noise_XX_25519_AESGCM_SHA256", 12 | "Noise_XX_25519_AESGCM_BLAKE2b", 13 | "Noise_XX_25519_AESGCM_SHA512", 14 | "Noise_XX_25519_AESGCM_BLAKE2s", 15 | "Noise_XX_25519_ChaChaPoly_SHA256", 16 | "Noise_XX_25519_ChaChaPoly_BLAKE2b", 17 | "Noise_XX_25519_ChaChaPoly_SHA512", 18 | "Noise_XX_25519_ChaChaPoly_BLAKE2s", 19 | "Noise_IK_25519_AESGCM_SHA256", 20 | "Noise_IK_25519_AESGCM_BLAKE2b", 21 | "Noise_IK_25519_AESGCM_SHA512", 22 | "Noise_IK_25519_AESGCM_BLAKE2s", 23 | "Noise_IK_25519_ChaChaPoly_SHA256", 24 | "Noise_IK_25519_ChaChaPoly_BLAKE2b", 25 | "Noise_IK_25519_ChaChaPoly_SHA512", 26 | "Noise_IK_25519_ChaChaPoly_BLAKE2s" 27 | ], 28 | "sessions": [ 29 | { 30 | "index": 0, 31 | "pattern": "XX", 32 | "dh": "25519", 33 | "cipher": "AESGCM", 34 | "hash": "SHA256", 35 | "handshake_hash": "3b44b1f231e67ee0bd0ec1fa5c8cbe35c7db48f4482bfc7ae4c6898924beb1c9", 36 | "messages": [ 37 | { 38 | "payload": "", 39 | "fields": null 40 | }, 41 | { 42 | "payload": "001a04007b6f776e65723a22626f62407365727665722e636f6d227d", 43 | "fields": [ 44 | { 45 | "Type": 1024, 46 | "Data": "7b6f776e65723a22626f62407365727665722e636f6d227d" 47 | } 48 | ], 49 | "packet": "007d009f971588c6fe932c8908d6925522542c13dd3c2d9b84286b228ee76903bb1b3a48e9839afd84d5df2f70ceca8ad5236c18a398c2fd739f6bf9d5671e1534d21f02d943bd4dee25f03311c812a54e28b6b00b0d030b69c817b22051cb8a371a5c3656666663dac517548a978066c2a686f44a214b685eb0ab49f0b9e2" 50 | }, 51 | { 52 | "payload": "001c04007b6f776e65723a22616c69636540636c69656e742e636f6d227d", 53 | "fields": [ 54 | { 55 | "Type": 1024, 56 | "Data": "7b6f776e65723a22616c69636540636c69656e742e636f6d227d" 57 | } 58 | ], 59 | "packet": "005e5a02b1c707786c72897fbe7eb0a288593d15f5992b7d3112d7da33bd518ef31551db2e9224a3797cd4a7b25355e7768b1bd635e932118b5bb2245274c8c920b8290d09cba59bb5fbb8815975b51aa1af3e20e27e05febd16b75031df95ea" 60 | }, 61 | { 62 | "payload": "000d00006797c68ed7ba6c4f7c1d94000700010000000000", 63 | "fields": [ 64 | { 65 | "Type": 0, 66 | "Data": "6797c68ed7ba6c4f7c1d94" 67 | }, 68 | { 69 | "Type": 1, 70 | "Data": "0000000000" 71 | } 72 | ], 73 | "packet": "00285aa201e9a158e10459efe9629bccb04e15b631aa45d8ec568d9e2e0c3627d83a0bb2f700b2b75999" 74 | }, 75 | { 76 | "payload": "000f000078386c14fe4f4cc2bb949653cf00050001000000", 77 | "fields": [ 78 | { 79 | "Type": 0, 80 | "Data": "78386c14fe4f4cc2bb949653cf" 81 | }, 82 | { 83 | "Type": 1, 84 | "Data": "000000" 85 | } 86 | ], 87 | "packet": "002862608c992e84ea89175f66cfad65ab9801919f0ef0db7dce56f655d06e2d64cb374f31447860a056" 88 | }, 89 | { 90 | "payload": "000d000087871fb0a634905cb0428e000700010000000000", 91 | "fields": [ 92 | { 93 | "Type": 0, 94 | "Data": "87871fb0a634905cb0428e" 95 | }, 96 | { 97 | "Type": 1, 98 | "Data": "0000000000" 99 | } 100 | ], 101 | "packet": "0028ee443bf2dbcbbdab052c8a4a3b86660a7281ada98ac84da5c71c50c74508e952442c42bfa791eb9e" 102 | }, 103 | { 104 | "payload": "000f0000d9b9c561f2820c5cc71d653ff900050001000000", 105 | "fields": [ 106 | { 107 | "Type": 0, 108 | "Data": "d9b9c561f2820c5cc71d653ff9" 109 | }, 110 | { 111 | "Type": 1, 112 | "Data": "000000" 113 | } 114 | ], 115 | "packet": "0028f96c12d222788a2d70195be66d2e25c67d2fc532318efdca1413ba9ff7d2ad55659b5d53cd905259" 116 | } 117 | ] 118 | }, 119 | { 120 | "index": 1, 121 | "pattern": "XX", 122 | "dh": "25519", 123 | "cipher": "AESGCM", 124 | "hash": "BLAKE2b", 125 | "handshake_hash": "089c39a76a002c3122d761a52adde63de973d89ab03a1ab6503785ea812dcae9c3aceac0cd0085ea88a83aa0172a92f48a03177b78d929c8555c726ac57e2a12", 126 | "messages": [ 127 | { 128 | "payload": "", 129 | "fields": null 130 | }, 131 | { 132 | "payload": "001a04007b6f776e65723a22626f62407365727665722e636f6d227d", 133 | "fields": [ 134 | { 135 | "Type": 1024, 136 | "Data": "7b6f776e65723a22626f62407365727665722e636f6d227d" 137 | } 138 | ], 139 | "packet": "007d019f971588c6fe932c8908d6925522542c13dd3c2d9b84286b228ee76903bb1b3a9bb2835a6557d896981d5bb858298c1718c478b15c9688fcb470ff8c5f4fa1c935e9c803b83f1e621ec91134d739456bfcd11e7cc8c028b27bbb70ce7c3f4243dfeb9913aacb2454fdaa2272e5b00f16bb054c1918e0dcdde1d9f7a4" 140 | }, 141 | { 142 | "payload": "001c04007b6f776e65723a22616c69636540636c69656e742e636f6d227d", 143 | "fields": [ 144 | { 145 | "Type": 1024, 146 | "Data": "7b6f776e65723a22616c69636540636c69656e742e636f6d227d" 147 | } 148 | ], 149 | "packet": "005e476495c37dd895f168e56c9823ed21d51f7c37add00ea37dba93bf4eb96b702e8649e495720561fcbe8ade4af2e223d5f4bf2aafcbe96dcb5068e9dc9301d8b921083e6a182726406d34d24e7c0b003dd1c001d214c472be32c8f9f58d87" 150 | }, 151 | { 152 | "payload": "000d000047537ac86dca9aacfef24d000700010000000000", 153 | "fields": [ 154 | { 155 | "Type": 0, 156 | "Data": "47537ac86dca9aacfef24d" 157 | }, 158 | { 159 | "Type": 1, 160 | "Data": "0000000000" 161 | } 162 | ], 163 | "packet": "0028b4238b5724a8b31694e313250816c05512e0695c0267da85f423c9d0e43d89a77aa33ae34840e94f" 164 | }, 165 | { 166 | "payload": "000f0000a2a409f071f8ebaf191f59befb00050001000000", 167 | "fields": [ 168 | { 169 | "Type": 0, 170 | "Data": "a2a409f071f8ebaf191f59befb" 171 | }, 172 | { 173 | "Type": 1, 174 | "Data": "000000" 175 | } 176 | ], 177 | "packet": "0028f3d64923d2fefc556b506b6b2905e01d5a6e59b2813a02a821161de49fcbd4f61eca6a911bb1d359" 178 | }, 179 | { 180 | "payload": "000d0000451f2b765bb2c3b73c49ff000700010000000000", 181 | "fields": [ 182 | { 183 | "Type": 0, 184 | "Data": "451f2b765bb2c3b73c49ff" 185 | }, 186 | { 187 | "Type": 1, 188 | "Data": "0000000000" 189 | } 190 | ], 191 | "packet": "002822823c6bcdd22dea71f0be9e351b4e4dbef80e0bddabf03589903852cc1b0430f8798c8b06c433bd" 192 | }, 193 | { 194 | "payload": "000f00006cac0a4203d8b8efaed87d9d4a00050001000000", 195 | "fields": [ 196 | { 197 | "Type": 0, 198 | "Data": "6cac0a4203d8b8efaed87d9d4a" 199 | }, 200 | { 201 | "Type": 1, 202 | "Data": "000000" 203 | } 204 | ], 205 | "packet": "00287750240b1ec1d6330f3a196db780046572bb2ace4f0fd0925c4b7031cb302dacbf7927f6a6991609" 206 | } 207 | ] 208 | }, 209 | { 210 | "index": 2, 211 | "pattern": "XX", 212 | "dh": "25519", 213 | "cipher": "AESGCM", 214 | "hash": "SHA512", 215 | "handshake_hash": "d72f88fc688265d18e9b2905dfb6a9ccb73cc282bace23c9386942e6f90a7abf06b4bd65406aa186528ac75147035a1271a73e672e33fb5bce504e1ba4ee12cd", 216 | "messages": [ 217 | { 218 | "payload": "", 219 | "fields": null 220 | }, 221 | { 222 | "payload": "001a04007b6f776e65723a22626f62407365727665722e636f6d227d", 223 | "fields": [ 224 | { 225 | "Type": 1024, 226 | "Data": "7b6f776e65723a22626f62407365727665722e636f6d227d" 227 | } 228 | ], 229 | "packet": "007d029f971588c6fe932c8908d6925522542c13dd3c2d9b84286b228ee76903bb1b3a7c8d8234d7c888305ff4f2d3ad610c99e5eae374216f9da46078ad01a14a7f82bce0a78d200c8417ce256ed48db0b7fc556c229f0758c31599af9edff3b20d579bbee6274636210d69be04d075bdfe9fb0481b1dcff78675f14f3dc2" 230 | }, 231 | { 232 | "payload": "001c04007b6f776e65723a22616c69636540636c69656e742e636f6d227d", 233 | "fields": [ 234 | { 235 | "Type": 1024, 236 | "Data": "7b6f776e65723a22616c69636540636c69656e742e636f6d227d" 237 | } 238 | ], 239 | "packet": "005e5ff72f3c0fd52f7c095aa3341174d950f0e0fa62344b57425b0a82f3c9b8f98ea5ee999b7562c6092458361ec9bb02506e1003e6a6e8aa6d0d5307847bb523dc85d18e32278c33172d981e948fab5e510fad7ade2f6d0bd001cdd6553a85" 240 | }, 241 | { 242 | "payload": "000d000044620781c920e7e8b55789000700010000000000", 243 | "fields": [ 244 | { 245 | "Type": 0, 246 | "Data": "44620781c920e7e8b55789" 247 | }, 248 | { 249 | "Type": 1, 250 | "Data": "0000000000" 251 | } 252 | ], 253 | "packet": "00289ef08bf2925c555effd787a470f3f176c9301de2764d3870ee11165d113eca783b9bd787a438e711" 254 | }, 255 | { 256 | "payload": "000f0000d2fa4a46702718ce626030b05500050001000000", 257 | "fields": [ 258 | { 259 | "Type": 0, 260 | "Data": "d2fa4a46702718ce626030b055" 261 | }, 262 | { 263 | "Type": 1, 264 | "Data": "000000" 265 | } 266 | ], 267 | "packet": "0028094577c7191e945ff822d7d6fa816da9d399372dd530c84d87c1d87c5a38a3e97b1633cffd8d51e5" 268 | }, 269 | { 270 | "payload": "000d00007d924f94164e4cb75b9e05000700010000000000", 271 | "fields": [ 272 | { 273 | "Type": 0, 274 | "Data": "7d924f94164e4cb75b9e05" 275 | }, 276 | { 277 | "Type": 1, 278 | "Data": "0000000000" 279 | } 280 | ], 281 | "packet": "002875d064b8f82dd05e5559cb2f9db77c9e61fc64edbede5d21c411f5a37c83a852ce8ed0f20aaf1b09" 282 | }, 283 | { 284 | "payload": "000f0000837af78a57662b007f5872eaad00050001000000", 285 | "fields": [ 286 | { 287 | "Type": 0, 288 | "Data": "837af78a57662b007f5872eaad" 289 | }, 290 | { 291 | "Type": 1, 292 | "Data": "000000" 293 | } 294 | ], 295 | "packet": "00286518e0f1b2767ccff52511e52e232ec33f4359afbc8f92cf6d3e83b00df99802e693701e0fde77b2" 296 | } 297 | ] 298 | }, 299 | { 300 | "index": 3, 301 | "pattern": "XX", 302 | "dh": "25519", 303 | "cipher": "AESGCM", 304 | "hash": "BLAKE2s", 305 | "handshake_hash": "41fcfaf0846924c1ab3ebeeeed173352e5c7fe2899ca376da9f787bec5621d08", 306 | "messages": [ 307 | { 308 | "payload": "", 309 | "fields": null 310 | }, 311 | { 312 | "payload": "001a04007b6f776e65723a22626f62407365727665722e636f6d227d", 313 | "fields": [ 314 | { 315 | "Type": 1024, 316 | "Data": "7b6f776e65723a22626f62407365727665722e636f6d227d" 317 | } 318 | ], 319 | "packet": "007d039f971588c6fe932c8908d6925522542c13dd3c2d9b84286b228ee76903bb1b3a19228d756fa4f2776e5f70b2b9462b7a8ad3b670817a948808476d6757f7a387dd76b95bf580b3e189ba1f57a4555cce03f8d0cd4e1db1df45e2b36cbd7132c9454f74aad5cf132f855992ebb0830666bdf2489e03e4cd76f4c637bc" 320 | }, 321 | { 322 | "payload": "001c04007b6f776e65723a22616c69636540636c69656e742e636f6d227d", 323 | "fields": [ 324 | { 325 | "Type": 1024, 326 | "Data": "7b6f776e65723a22616c69636540636c69656e742e636f6d227d" 327 | } 328 | ], 329 | "packet": "005e671642ea9deab04a02b17eb4c564c355702f8dd4fc8d645f2c2daf6c9969c556ed3fb820cbbfd0daec129f3bf0f4cfb46b8a88b9699d17902f76cceece03bca302e4cd43981a52cd2701325ac9806143d492062d2678d32f7b9a9652a0b9" 330 | }, 331 | { 332 | "payload": "000d0000fcfb839e69fde6ea765c99000700010000000000", 333 | "fields": [ 334 | { 335 | "Type": 0, 336 | "Data": "fcfb839e69fde6ea765c99" 337 | }, 338 | { 339 | "Type": 1, 340 | "Data": "0000000000" 341 | } 342 | ], 343 | "packet": "00285f4051c933bb1f1becdbcef9ac77f278a6059fcf1f4e6131bcb07442d888650d0d5c1e5f10243843" 344 | }, 345 | { 346 | "payload": "000f000016fe35a3d5674352e6da6a5a5200050001000000", 347 | "fields": [ 348 | { 349 | "Type": 0, 350 | "Data": "16fe35a3d5674352e6da6a5a52" 351 | }, 352 | { 353 | "Type": 1, 354 | "Data": "000000" 355 | } 356 | ], 357 | "packet": "002835bffa418324d5c3d1582095333e4d25685f51e7b6efe530056979bad7339335a6adb9754499ce69" 358 | }, 359 | { 360 | "payload": "000d0000e09e770f381f29f078564b000700010000000000", 361 | "fields": [ 362 | { 363 | "Type": 0, 364 | "Data": "e09e770f381f29f078564b" 365 | }, 366 | { 367 | "Type": 1, 368 | "Data": "0000000000" 369 | } 370 | ], 371 | "packet": "00280855410edc55f2fa87754f5c0f9eff90efca2d82258d39ade98599bbc466231cf652b48e292cbd36" 372 | }, 373 | { 374 | "payload": "000f000062cbbd3e4f6300a7f5ba214cd500050001000000", 375 | "fields": [ 376 | { 377 | "Type": 0, 378 | "Data": "62cbbd3e4f6300a7f5ba214cd5" 379 | }, 380 | { 381 | "Type": 1, 382 | "Data": "000000" 383 | } 384 | ], 385 | "packet": "00287de9f7412bba5e3f480be1e710fdfb93b224694793fef0b8c98d7519cd2e0b97b31d98eac362ae0d" 386 | } 387 | ] 388 | }, 389 | { 390 | "index": 4, 391 | "pattern": "XX", 392 | "dh": "25519", 393 | "cipher": "ChaChaPoly", 394 | "hash": "SHA256", 395 | "handshake_hash": "59b90a690f5612a2be75f3e9bb8932cbe2239f2deeb49f2d809e0c1a0ff631e9", 396 | "messages": [ 397 | { 398 | "payload": "", 399 | "fields": null 400 | }, 401 | { 402 | "payload": "001a04007b6f776e65723a22626f62407365727665722e636f6d227d", 403 | "fields": [ 404 | { 405 | "Type": 1024, 406 | "Data": "7b6f776e65723a22626f62407365727665722e636f6d227d" 407 | } 408 | ], 409 | "packet": "007d049f971588c6fe932c8908d6925522542c13dd3c2d9b84286b228ee76903bb1b3af130d0113b994a37340a034d95a8f2c9774e23331c144b8065e940ee1e7a169de6a77073f64ca97f621d6e34ff3b847a390ee2ec285cde256830f2470572fb87fc225bb858551b8a170270ffeccf4146d924b6fc1156276bc5f2ad1f" 410 | }, 411 | { 412 | "payload": "001c04007b6f776e65723a22616c69636540636c69656e742e636f6d227d", 413 | "fields": [ 414 | { 415 | "Type": 1024, 416 | "Data": "7b6f776e65723a22616c69636540636c69656e742e636f6d227d" 417 | } 418 | ], 419 | "packet": "005e29a69a0736f6f7f6908b59c1fde62737ac6d1d4eea10e997e04e096c8e6611682a279fa60c8a44a8f71fbf74705e305c1ab373a4a40e0142dc40cc8fb14100e6751b95a6aeb01c3ac2cc3fa6c52ed99f1ed32b38fbac32e5a328b6d386d2" 420 | }, 421 | { 422 | "payload": "000d000010a7761ab22c9874d36ca1000700010000000000", 423 | "fields": [ 424 | { 425 | "Type": 0, 426 | "Data": "10a7761ab22c9874d36ca1" 427 | }, 428 | { 429 | "Type": 1, 430 | "Data": "0000000000" 431 | } 432 | ], 433 | "packet": "00283cf01776a7dce50307b17a3a4958f7e2ac5884a6e7e956dc3b75b10812344721d57874ba8d4cf9a4" 434 | }, 435 | { 436 | "payload": "000f0000e3c3970c811e1adf10aea2fa8700050001000000", 437 | "fields": [ 438 | { 439 | "Type": 0, 440 | "Data": "e3c3970c811e1adf10aea2fa87" 441 | }, 442 | { 443 | "Type": 1, 444 | "Data": "000000" 445 | } 446 | ], 447 | "packet": "00287c62a6774c205e186d99137ec5a486d363c981bf8eaf413e5b1a00a9200d3ed686510c762b228e13" 448 | }, 449 | { 450 | "payload": "000d0000cd012f8e98ac162926bdee000700010000000000", 451 | "fields": [ 452 | { 453 | "Type": 0, 454 | "Data": "cd012f8e98ac162926bdee" 455 | }, 456 | { 457 | "Type": 1, 458 | "Data": "0000000000" 459 | } 460 | ], 461 | "packet": "0028aa183cf6354d265fd483a9e4062a062d2d51d5b6d045c717564684fbadb10e761b228f37acc444c0" 462 | }, 463 | { 464 | "payload": "000f000015f9c845a9836c825d7015033d00050001000000", 465 | "fields": [ 466 | { 467 | "Type": 0, 468 | "Data": "15f9c845a9836c825d7015033d" 469 | }, 470 | { 471 | "Type": 1, 472 | "Data": "000000" 473 | } 474 | ], 475 | "packet": "0028bf5b3513565825bde6fc30c703af04503523e289292414fb148c1d28edf21f22d34a2567029a451d" 476 | } 477 | ] 478 | }, 479 | { 480 | "index": 5, 481 | "pattern": "XX", 482 | "dh": "25519", 483 | "cipher": "ChaChaPoly", 484 | "hash": "BLAKE2b", 485 | "handshake_hash": "fe1b12645c8db87746ae55c6776baa570edcd888a83768f7825d4353487d3c01a2b90ea443db049d2ad771a28a369189e12eab27a852ab1453cfa62a19c5a3ed", 486 | "messages": [ 487 | { 488 | "payload": "", 489 | "fields": null 490 | }, 491 | { 492 | "payload": "001a04007b6f776e65723a22626f62407365727665722e636f6d227d", 493 | "fields": [ 494 | { 495 | "Type": 1024, 496 | "Data": "7b6f776e65723a22626f62407365727665722e636f6d227d" 497 | } 498 | ], 499 | "packet": "007d059f971588c6fe932c8908d6925522542c13dd3c2d9b84286b228ee76903bb1b3a6813b26874d1a4d73ddcacc5716fc298f34bd1338ce9f9a4499a4fbee2366a07f4a6591c33cf66533dcd7f9067c3a029613336081168bd048de625206de89d0c9b2f4bf96404ab385d3f54891764df9828e19a87c03915abd25ffc2c" 500 | }, 501 | { 502 | "payload": "001c04007b6f776e65723a22616c69636540636c69656e742e636f6d227d", 503 | "fields": [ 504 | { 505 | "Type": 1024, 506 | "Data": "7b6f776e65723a22616c69636540636c69656e742e636f6d227d" 507 | } 508 | ], 509 | "packet": "005e96fc80bc903ada8b80d1652a9562d7cc9ec6c5c325e3d28b50fcba766fd1cdee0b91faf560fcc44eaa6e409720f0e0b4e8e1efdde2fc8f123fd016ebe79747c18dde32d74f970bad9ee5a0b87bdb799c66c0c40d0cb64abbcc75f5b2cf1b" 510 | }, 511 | { 512 | "payload": "000d00005a0910e060f91a0157cb96000700010000000000", 513 | "fields": [ 514 | { 515 | "Type": 0, 516 | "Data": "5a0910e060f91a0157cb96" 517 | }, 518 | { 519 | "Type": 1, 520 | "Data": "0000000000" 521 | } 522 | ], 523 | "packet": "0028b6f0f2c9e748f542eba4f63625ef01dc255fa9a07b05f311387b2891677aa37243a81f7add2c9509" 524 | }, 525 | { 526 | "payload": "000f0000aba4ca74402807c5c1c4f3912d00050001000000", 527 | "fields": [ 528 | { 529 | "Type": 0, 530 | "Data": "aba4ca74402807c5c1c4f3912d" 531 | }, 532 | { 533 | "Type": 1, 534 | "Data": "000000" 535 | } 536 | ], 537 | "packet": "002831889aa32491f67dfd425a729d1fe2ac63a915792441d3209652b3e480086cfe14f0698c52345378" 538 | }, 539 | { 540 | "payload": "000d000097a24735c5ff94becc5142000700010000000000", 541 | "fields": [ 542 | { 543 | "Type": 0, 544 | "Data": "97a24735c5ff94becc5142" 545 | }, 546 | { 547 | "Type": 1, 548 | "Data": "0000000000" 549 | } 550 | ], 551 | "packet": "00285c80aa6468977dbfb7824e53444dffe539c8dddcdcf5886df94e5b7d3ba6cb7cd63d15823c9facc3" 552 | }, 553 | { 554 | "payload": "000f0000a9fc15910c6161921de5074a3a00050001000000", 555 | "fields": [ 556 | { 557 | "Type": 0, 558 | "Data": "a9fc15910c6161921de5074a3a" 559 | }, 560 | { 561 | "Type": 1, 562 | "Data": "000000" 563 | } 564 | ], 565 | "packet": "00285374a61f9f2c2e16e2df4baed527cbe3a0445e8bbf5c56d06827288d48bf07eb9e406ac301733364" 566 | } 567 | ] 568 | }, 569 | { 570 | "index": 6, 571 | "pattern": "XX", 572 | "dh": "25519", 573 | "cipher": "ChaChaPoly", 574 | "hash": "SHA512", 575 | "handshake_hash": "beb140a34947eee5d0a289ae579360ba481b286af7eacda397cce44d78f3f2af82efe007af67f7e7228520e09f1890ac5c3f26e289d93cf4ed4ffbbaa465581f", 576 | "messages": [ 577 | { 578 | "payload": "", 579 | "fields": null 580 | }, 581 | { 582 | "payload": "001a04007b6f776e65723a22626f62407365727665722e636f6d227d", 583 | "fields": [ 584 | { 585 | "Type": 1024, 586 | "Data": "7b6f776e65723a22626f62407365727665722e636f6d227d" 587 | } 588 | ], 589 | "packet": "007d069f971588c6fe932c8908d6925522542c13dd3c2d9b84286b228ee76903bb1b3a11a1b55456eacf471fead7aac2e614ac97a29d13621e9880bb7fc3de2b12442d62a9fc35cea091a99dbffe3ff23aa67c9367acc68b5d3fab46fcc65e23cb8d69d06ca4e79f1a357114ef63371affa976d475c22fd89dd4e5e15a89cf" 590 | }, 591 | { 592 | "payload": "001c04007b6f776e65723a22616c69636540636c69656e742e636f6d227d", 593 | "fields": [ 594 | { 595 | "Type": 1024, 596 | "Data": "7b6f776e65723a22616c69636540636c69656e742e636f6d227d" 597 | } 598 | ], 599 | "packet": "005e52c7780f48751543cccb4afa4dcc8fc35ff81f1058f0bceddb4702ccbded8a520bfe88b78a1dfdf9ec4980f7076bde01750757f6fb6f45beba3f3491c4a943f8b4ac19d15210d21e09a680e9610171c93f0ead8b523cc1469ee29216fd2c" 600 | }, 601 | { 602 | "payload": "000d0000cc22fb91a0d4cfc70f6195000700010000000000", 603 | "fields": [ 604 | { 605 | "Type": 0, 606 | "Data": "cc22fb91a0d4cfc70f6195" 607 | }, 608 | { 609 | "Type": 1, 610 | "Data": "0000000000" 611 | } 612 | ], 613 | "packet": "0028fce4b41cb8e4fc5eab46fb2cf9dfb369f15c3748381c8cec4cf5ea94a2d2a57f60dfeefcaa5632fa" 614 | }, 615 | { 616 | "payload": "000f00005ae2f5c95dc9c629061c1cb77e00050001000000", 617 | "fields": [ 618 | { 619 | "Type": 0, 620 | "Data": "5ae2f5c95dc9c629061c1cb77e" 621 | }, 622 | { 623 | "Type": 1, 624 | "Data": "000000" 625 | } 626 | ], 627 | "packet": "0028dd0ef266efb2ceb840ab1c36b083fb132457af1e078925d4dd9c58ee6dc2925290748269561a1c99" 628 | }, 629 | { 630 | "payload": "000d0000d76fa652e8eb653efce933000700010000000000", 631 | "fields": [ 632 | { 633 | "Type": 0, 634 | "Data": "d76fa652e8eb653efce933" 635 | }, 636 | { 637 | "Type": 1, 638 | "Data": "0000000000" 639 | } 640 | ], 641 | "packet": "0028677fa684dbeea3f9f7cc27b7c50d61642a02693738458b776988293cee3717b77dac305f746ae26a" 642 | }, 643 | { 644 | "payload": "000f0000df8374f48c5f5f2bd1d0af1cb900050001000000", 645 | "fields": [ 646 | { 647 | "Type": 0, 648 | "Data": "df8374f48c5f5f2bd1d0af1cb9" 649 | }, 650 | { 651 | "Type": 1, 652 | "Data": "000000" 653 | } 654 | ], 655 | "packet": "002866992731accf9fa330bda073e5f607be706e13f21ce27c3d3e77e003f9e3b146fd9510b264995a1c" 656 | } 657 | ] 658 | }, 659 | { 660 | "index": 7, 661 | "pattern": "XX", 662 | "dh": "25519", 663 | "cipher": "ChaChaPoly", 664 | "hash": "BLAKE2s", 665 | "handshake_hash": "254e1dde4c707fa11130981e288c3295fa05d50f926219e2c093d149ec3d065f", 666 | "messages": [ 667 | { 668 | "payload": "", 669 | "fields": null 670 | }, 671 | { 672 | "payload": "001a04007b6f776e65723a22626f62407365727665722e636f6d227d", 673 | "fields": [ 674 | { 675 | "Type": 1024, 676 | "Data": "7b6f776e65723a22626f62407365727665722e636f6d227d" 677 | } 678 | ], 679 | "packet": "007d079f971588c6fe932c8908d6925522542c13dd3c2d9b84286b228ee76903bb1b3ad4e8d81765eee30028d58fdfb8940ab3baa77963349588fd2b1829a88f1b9f61ea7b69768bf6873b6fc4dea8b1f549da6f924d806d3fa61cd28bdbe381c8a8a4afaba94ace7548c24af97cca547a63239cdf49c636b2b30ad387b930" 680 | }, 681 | { 682 | "payload": "001c04007b6f776e65723a22616c69636540636c69656e742e636f6d227d", 683 | "fields": [ 684 | { 685 | "Type": 1024, 686 | "Data": "7b6f776e65723a22616c69636540636c69656e742e636f6d227d" 687 | } 688 | ], 689 | "packet": "005e03cd4aa011897bd4c138606ed1c9e8ce20667b88a4d4ae0adc702ec5474912264993e7fa6b73923ab200fb219ffb74058dd16617aa09abd42582ab7173d6ff8f0c7e2d4300d3a2442a388366474b24c425a2c4f011f9ea94cd7ec2cf9725" 690 | }, 691 | { 692 | "payload": "000d00006c21b5710d53a399265ace000700010000000000", 693 | "fields": [ 694 | { 695 | "Type": 0, 696 | "Data": "6c21b5710d53a399265ace" 697 | }, 698 | { 699 | "Type": 1, 700 | "Data": "0000000000" 701 | } 702 | ], 703 | "packet": "00285c2fa1b9ff15c78d51019a149bbfe25e522aa94ec1cf72f82efd7d3985514d4725a261c23036f1cd" 704 | }, 705 | { 706 | "payload": "000f00003e86a7b7b41f1288bbace2013b00050001000000", 707 | "fields": [ 708 | { 709 | "Type": 0, 710 | "Data": "3e86a7b7b41f1288bbace2013b" 711 | }, 712 | { 713 | "Type": 1, 714 | "Data": "000000" 715 | } 716 | ], 717 | "packet": "00287419563f08c9f43c1053544729d999f6131049cca4e5580fce8e0c7886e3e7e4220c8d4c8cd94d32" 718 | }, 719 | { 720 | "payload": "000d0000fa233a23857b5a4c32c7dd000700010000000000", 721 | "fields": [ 722 | { 723 | "Type": 0, 724 | "Data": "fa233a23857b5a4c32c7dd" 725 | }, 726 | { 727 | "Type": 1, 728 | "Data": "0000000000" 729 | } 730 | ], 731 | "packet": "0028adebb18050dc277717e70d819b39d07bb68412c0f16cc093c4e9dca45af4489a10d66e7e4cb111cc" 732 | }, 733 | { 734 | "payload": "000f00009a8a104a59e6df15ded8d4a6e600050001000000", 735 | "fields": [ 736 | { 737 | "Type": 0, 738 | "Data": "9a8a104a59e6df15ded8d4a6e6" 739 | }, 740 | { 741 | "Type": 1, 742 | "Data": "000000" 743 | } 744 | ], 745 | "packet": "00288e233881d990d1afc08425f50294f197cab2d0c5e387091ca33a2c7a911f04ecd8dd4ab28222e61d" 746 | } 747 | ] 748 | }, 749 | { 750 | "index": 8, 751 | "pattern": "IK", 752 | "dh": "25519", 753 | "cipher": "AESGCM", 754 | "hash": "SHA256", 755 | "handshake_hash": "8349776f04925ab666a298f37d692846d0a81ed1c35d0c49e96e4eac5390d2e3", 756 | "messages": [ 757 | { 758 | "payload": "001c04007b6f776e65723a22616c69636540636c69656e742e636f6d227d", 759 | "fields": [ 760 | { 761 | "Type": 1024, 762 | "Data": "7b6f776e65723a22616c69636540636c69656e742e636f6d227d" 763 | } 764 | ] 765 | }, 766 | { 767 | "payload": "001a04007b6f776e65723a22626f62407365727665722e636f6d227d", 768 | "fields": [ 769 | { 770 | "Type": 1024, 771 | "Data": "7b6f776e65723a22626f62407365727665722e636f6d227d" 772 | } 773 | ], 774 | "packet": "004e08009f971588c6fe932c8908d6925522542c13dd3c2d9b84286b228ee76903bb1b3afd77e8b4d64ebf10f2cbe3f13308811b8c4df8d5aad0a69c57bf31041f5294cbf3de154e87adb5aa9cbe31f8" 775 | }, 776 | { 777 | "payload": "000d00006ac653fa143ada034b47bd000700010000000000", 778 | "fields": [ 779 | { 780 | "Type": 0, 781 | "Data": "6ac653fa143ada034b47bd" 782 | }, 783 | { 784 | "Type": 1, 785 | "Data": "0000000000" 786 | } 787 | ], 788 | "packet": "0028f803d58746e50eead24c3f0d2e60a87c3990f8cf56bc5b0b8968dcf72cebc56bfb737a2ed747accd" 789 | }, 790 | { 791 | "payload": "000f0000530e80c06d8620154d0513376c00050001000000", 792 | "fields": [ 793 | { 794 | "Type": 0, 795 | "Data": "530e80c06d8620154d0513376c" 796 | }, 797 | { 798 | "Type": 1, 799 | "Data": "000000" 800 | } 801 | ], 802 | "packet": "0028109f3207645d4b9f73bd8c6563b0cff225c2e2f6fb0d6585ef81354578e4b204c390f2d55c9a86bb" 803 | }, 804 | { 805 | "payload": "000d0000923828678c7aede4e9ee27000700010000000000", 806 | "fields": [ 807 | { 808 | "Type": 0, 809 | "Data": "923828678c7aede4e9ee27" 810 | }, 811 | { 812 | "Type": 1, 813 | "Data": "0000000000" 814 | } 815 | ], 816 | "packet": "0028bc5b55ebdf8895f8af7015413c667682803b6ed4f248bebbb89aae927fc22266ffc9244da488ccb9" 817 | }, 818 | { 819 | "payload": "000f0000bff8149d26dd6c6fb4bcee583100050001000000", 820 | "fields": [ 821 | { 822 | "Type": 0, 823 | "Data": "bff8149d26dd6c6fb4bcee5831" 824 | }, 825 | { 826 | "Type": 1, 827 | "Data": "000000" 828 | } 829 | ], 830 | "packet": "0028a6aa2713447b148dd56a3cee3b8a2566dcd77197c4677cdaca4537ba6e09d5981c28a688fae7a070" 831 | } 832 | ] 833 | }, 834 | { 835 | "index": 9, 836 | "pattern": "IK", 837 | "dh": "25519", 838 | "cipher": "AESGCM", 839 | "hash": "BLAKE2b", 840 | "handshake_hash": "4b49b6d316c652d33d9e65119ceea52e4eda593d5daebda36783a162c230ec5e33879297c1d014690dde0ea26c99b783ac8054c8aa2911f3b6c787e23671e308", 841 | "messages": [ 842 | { 843 | "payload": "001c04007b6f776e65723a22616c69636540636c69656e742e636f6d227d", 844 | "fields": [ 845 | { 846 | "Type": 1024, 847 | "Data": "7b6f776e65723a22616c69636540636c69656e742e636f6d227d" 848 | } 849 | ] 850 | }, 851 | { 852 | "payload": "001a04007b6f776e65723a22626f62407365727665722e636f6d227d", 853 | "fields": [ 854 | { 855 | "Type": 1024, 856 | "Data": "7b6f776e65723a22626f62407365727665722e636f6d227d" 857 | } 858 | ], 859 | "packet": "004e09009f971588c6fe932c8908d6925522542c13dd3c2d9b84286b228ee76903bb1b3ae52307c1c61668c73feb8b69690d48feef806dee286e054fd55111116eba31b95fc8d84b466649d100c8c282" 860 | }, 861 | { 862 | "payload": "000d000058bb11f615a88bd120bcf2000700010000000000", 863 | "fields": [ 864 | { 865 | "Type": 0, 866 | "Data": "58bb11f615a88bd120bcf2" 867 | }, 868 | { 869 | "Type": 1, 870 | "Data": "0000000000" 871 | } 872 | ], 873 | "packet": "0028ea5a819e627701bf1bec4fe0569cf6488f0b36be38840336de35c0a4a3807414d80852f0d70b83ae" 874 | }, 875 | { 876 | "payload": "000f0000c407a321f49950895d86772e7600050001000000", 877 | "fields": [ 878 | { 879 | "Type": 0, 880 | "Data": "c407a321f49950895d86772e76" 881 | }, 882 | { 883 | "Type": 1, 884 | "Data": "000000" 885 | } 886 | ], 887 | "packet": "0028ecb94178714013600fab085f794e934a60d58bc1e335188f0657b316fea3ba7de0f60f610a0053f6" 888 | }, 889 | { 890 | "payload": "000d0000e184f895ba9e92b7a11350000700010000000000", 891 | "fields": [ 892 | { 893 | "Type": 0, 894 | "Data": "e184f895ba9e92b7a11350" 895 | }, 896 | { 897 | "Type": 1, 898 | "Data": "0000000000" 899 | } 900 | ], 901 | "packet": "0028af90d441e11984551aeb909e749285bdd447ec9a513be16ae44108d348b8e0f63b8929c5c8dcd166" 902 | }, 903 | { 904 | "payload": "000f000068901b98c56ed6877780b7a89f00050001000000", 905 | "fields": [ 906 | { 907 | "Type": 0, 908 | "Data": "68901b98c56ed6877780b7a89f" 909 | }, 910 | { 911 | "Type": 1, 912 | "Data": "000000" 913 | } 914 | ], 915 | "packet": "00282d5b8c5242115f5512ddf7995265fbc82defbd0c58fcf10805a767c62fb30b01d0ed08102671deb9" 916 | } 917 | ] 918 | }, 919 | { 920 | "index": 10, 921 | "pattern": "IK", 922 | "dh": "25519", 923 | "cipher": "AESGCM", 924 | "hash": "SHA512", 925 | "handshake_hash": "9c824d013a5f9700d0efc4b97ab90a7961e6e6873b9015d51426979a4fe7ae4322548aaff9e7227fce34bd953757588a4c574e99456cc1488281be748996e5d3", 926 | "messages": [ 927 | { 928 | "payload": "001c04007b6f776e65723a22616c69636540636c69656e742e636f6d227d", 929 | "fields": [ 930 | { 931 | "Type": 1024, 932 | "Data": "7b6f776e65723a22616c69636540636c69656e742e636f6d227d" 933 | } 934 | ] 935 | }, 936 | { 937 | "payload": "001a04007b6f776e65723a22626f62407365727665722e636f6d227d", 938 | "fields": [ 939 | { 940 | "Type": 1024, 941 | "Data": "7b6f776e65723a22626f62407365727665722e636f6d227d" 942 | } 943 | ], 944 | "packet": "004e0a009f971588c6fe932c8908d6925522542c13dd3c2d9b84286b228ee76903bb1b3a3acd8f20d5a813c437bdcbb99ae858c60d9d7567828061d82cc5f37426a1b3a80e9bd6a5dd6b96bad4672e1c" 945 | }, 946 | { 947 | "payload": "000d00002bafd8aea2a64ef4665f7e000700010000000000", 948 | "fields": [ 949 | { 950 | "Type": 0, 951 | "Data": "2bafd8aea2a64ef4665f7e" 952 | }, 953 | { 954 | "Type": 1, 955 | "Data": "0000000000" 956 | } 957 | ], 958 | "packet": "0028f81bed171791161e98ac040e97503bca91820c6a65ac000518954b63ed5c6a4fd18d77303dfb0f31" 959 | }, 960 | { 961 | "payload": "000f00007750bf08931ae40d70108fce0700050001000000", 962 | "fields": [ 963 | { 964 | "Type": 0, 965 | "Data": "7750bf08931ae40d70108fce07" 966 | }, 967 | { 968 | "Type": 1, 969 | "Data": "000000" 970 | } 971 | ], 972 | "packet": "00285e17086a762a53ca825ddd50800c6e1bfeb72ed366683c282b73ad9dd654d6e9edc5a9b77580df4a" 973 | }, 974 | { 975 | "payload": "000d0000e18c21a37e55ecfad776e8000700010000000000", 976 | "fields": [ 977 | { 978 | "Type": 0, 979 | "Data": "e18c21a37e55ecfad776e8" 980 | }, 981 | { 982 | "Type": 1, 983 | "Data": "0000000000" 984 | } 985 | ], 986 | "packet": "0028e7fb3d2134e12937da8baf7ffa8182343a0037e1f04d326ca275f2f0a649ce6d50dfed5cfcbfe9e6" 987 | }, 988 | { 989 | "payload": "000f0000b5a59ecb1ebe38a6c6381ecc5800050001000000", 990 | "fields": [ 991 | { 992 | "Type": 0, 993 | "Data": "b5a59ecb1ebe38a6c6381ecc58" 994 | }, 995 | { 996 | "Type": 1, 997 | "Data": "000000" 998 | } 999 | ], 1000 | "packet": "0028d158f352560d1df6515eac2549a7493704781b35ea76ef72bfe7e65e0303c3f69625b11cc45ba348" 1001 | } 1002 | ] 1003 | }, 1004 | { 1005 | "index": 11, 1006 | "pattern": "IK", 1007 | "dh": "25519", 1008 | "cipher": "AESGCM", 1009 | "hash": "BLAKE2s", 1010 | "handshake_hash": "9bd14ad530ffa5bee06e3de2a2e82add907863d9a21ab753ea0f0d8ea0f9f7fd", 1011 | "messages": [ 1012 | { 1013 | "payload": "001c04007b6f776e65723a22616c69636540636c69656e742e636f6d227d", 1014 | "fields": [ 1015 | { 1016 | "Type": 1024, 1017 | "Data": "7b6f776e65723a22616c69636540636c69656e742e636f6d227d" 1018 | } 1019 | ] 1020 | }, 1021 | { 1022 | "payload": "001a04007b6f776e65723a22626f62407365727665722e636f6d227d", 1023 | "fields": [ 1024 | { 1025 | "Type": 1024, 1026 | "Data": "7b6f776e65723a22626f62407365727665722e636f6d227d" 1027 | } 1028 | ], 1029 | "packet": "004e0b009f971588c6fe932c8908d6925522542c13dd3c2d9b84286b228ee76903bb1b3af68a70ca673daf8f07b919ecbf47c1d6b9ce1376ce2ab03d2f6ae7112fc2ea90aa1328b54e88cb3accab558c" 1030 | }, 1031 | { 1032 | "payload": "000d000071d2b87b290539019524a7000700010000000000", 1033 | "fields": [ 1034 | { 1035 | "Type": 0, 1036 | "Data": "71d2b87b290539019524a7" 1037 | }, 1038 | { 1039 | "Type": 1, 1040 | "Data": "0000000000" 1041 | } 1042 | ], 1043 | "packet": "00288a1c9cc398eb5cbe4002a2299fe4a09598a178f1046a567fde8cfaf930dd5a518429ebc6515ffbac" 1044 | }, 1045 | { 1046 | "payload": "000f00006754d027c241a892916848125b00050001000000", 1047 | "fields": [ 1048 | { 1049 | "Type": 0, 1050 | "Data": "6754d027c241a892916848125b" 1051 | }, 1052 | { 1053 | "Type": 1, 1054 | "Data": "000000" 1055 | } 1056 | ], 1057 | "packet": "002807dc5e496b307b94273c3cd29374d6487fc51b5f79d7cc9c9cdc2c8b1805f4a4365e5d22d8aa99d6" 1058 | }, 1059 | { 1060 | "payload": "000d0000f21d991fb78ccdbfc607b5000700010000000000", 1061 | "fields": [ 1062 | { 1063 | "Type": 0, 1064 | "Data": "f21d991fb78ccdbfc607b5" 1065 | }, 1066 | { 1067 | "Type": 1, 1068 | "Data": "0000000000" 1069 | } 1070 | ], 1071 | "packet": "00289860fc4ab717d5e175e74ff165068d1fcce4e86b926e532c0e10f9abeba5f8870f40f7d6018d4bca" 1072 | }, 1073 | { 1074 | "payload": "000f000001aa370b52ab9ade93d95b6cb300050001000000", 1075 | "fields": [ 1076 | { 1077 | "Type": 0, 1078 | "Data": "01aa370b52ab9ade93d95b6cb3" 1079 | }, 1080 | { 1081 | "Type": 1, 1082 | "Data": "000000" 1083 | } 1084 | ], 1085 | "packet": "002838cdf8034a930ffab6760c0f3b726ffb791555fd774d089693bb9c1f67edac8c419620d4f36ecdb5" 1086 | } 1087 | ] 1088 | }, 1089 | { 1090 | "index": 12, 1091 | "pattern": "IK", 1092 | "dh": "25519", 1093 | "cipher": "ChaChaPoly", 1094 | "hash": "SHA256", 1095 | "handshake_hash": "57a8ae1540d2c434299ffcf85fbbc036da0ceac1eee9a45cc39c91d3224c33db", 1096 | "messages": [ 1097 | { 1098 | "payload": "001c04007b6f776e65723a22616c69636540636c69656e742e636f6d227d", 1099 | "fields": [ 1100 | { 1101 | "Type": 1024, 1102 | "Data": "7b6f776e65723a22616c69636540636c69656e742e636f6d227d" 1103 | } 1104 | ] 1105 | }, 1106 | { 1107 | "payload": "001a04007b6f776e65723a22626f62407365727665722e636f6d227d", 1108 | "fields": [ 1109 | { 1110 | "Type": 1024, 1111 | "Data": "7b6f776e65723a22626f62407365727665722e636f6d227d" 1112 | } 1113 | ], 1114 | "packet": "004e0c009f971588c6fe932c8908d6925522542c13dd3c2d9b84286b228ee76903bb1b3a0fb442a67d9e947a36bcbf1a4f8731a901d2d634c9b53aabcbde593468fefdf9e2c305ff8d3d268305f62aa4" 1115 | }, 1116 | { 1117 | "payload": "000d0000af894ce738036893737808000700010000000000", 1118 | "fields": [ 1119 | { 1120 | "Type": 0, 1121 | "Data": "af894ce738036893737808" 1122 | }, 1123 | { 1124 | "Type": 1, 1125 | "Data": "0000000000" 1126 | } 1127 | ], 1128 | "packet": "0028ff93a6d062ac6598f4a2ba207fb98bcac5b5709c2894e64116f368f0f52ce1c4919cd45aea3c10be" 1129 | }, 1130 | { 1131 | "payload": "000f0000d8b9c301fb2a3d53d6ae5fed4c00050001000000", 1132 | "fields": [ 1133 | { 1134 | "Type": 0, 1135 | "Data": "d8b9c301fb2a3d53d6ae5fed4c" 1136 | }, 1137 | { 1138 | "Type": 1, 1139 | "Data": "000000" 1140 | } 1141 | ], 1142 | "packet": "0028c9ceaa96a034ad17d6532be50f250866b06dd543c2cbeab19651fcbc8363caf731d9b3857298243c" 1143 | }, 1144 | { 1145 | "payload": "000d00009b315bf437f0686ee417be000700010000000000", 1146 | "fields": [ 1147 | { 1148 | "Type": 0, 1149 | "Data": "9b315bf437f0686ee417be" 1150 | }, 1151 | { 1152 | "Type": 1, 1153 | "Data": "0000000000" 1154 | } 1155 | ], 1156 | "packet": "00281bc4b2caa55861050b82afabe94fa4cb0527cd65ccbdfbd19935f8cd9775d3c96b1a039b57d82475" 1157 | }, 1158 | { 1159 | "payload": "000f000043ff589baf2aec53ea9387a6bd00050001000000", 1160 | "fields": [ 1161 | { 1162 | "Type": 0, 1163 | "Data": "43ff589baf2aec53ea9387a6bd" 1164 | }, 1165 | { 1166 | "Type": 1, 1167 | "Data": "000000" 1168 | } 1169 | ], 1170 | "packet": "0028d694e5931b86e1748490d602cb058d36a212231ee02ee0eb39cae5ed4f82b3d828ea9947fa0caee6" 1171 | } 1172 | ] 1173 | }, 1174 | { 1175 | "index": 13, 1176 | "pattern": "IK", 1177 | "dh": "25519", 1178 | "cipher": "ChaChaPoly", 1179 | "hash": "BLAKE2b", 1180 | "handshake_hash": "247a00d5abfc8eef0221a5827a1303b9a0b607cbee46625ec33c27ae2ce2267cafe6bb4b6ddd12bf7613d71b9b23ac27a33d101f4c4891ecbc94dc55cfac2d2c", 1181 | "messages": [ 1182 | { 1183 | "payload": "001c04007b6f776e65723a22616c69636540636c69656e742e636f6d227d", 1184 | "fields": [ 1185 | { 1186 | "Type": 1024, 1187 | "Data": "7b6f776e65723a22616c69636540636c69656e742e636f6d227d" 1188 | } 1189 | ] 1190 | }, 1191 | { 1192 | "payload": "001a04007b6f776e65723a22626f62407365727665722e636f6d227d", 1193 | "fields": [ 1194 | { 1195 | "Type": 1024, 1196 | "Data": "7b6f776e65723a22626f62407365727665722e636f6d227d" 1197 | } 1198 | ], 1199 | "packet": "004e0d009f971588c6fe932c8908d6925522542c13dd3c2d9b84286b228ee76903bb1b3a58188a7096405cf5eb5dac32b9379ec2639759b6e4507dc4b8b7fc9642ccbee0b59f883f6c175ac7aef0b373" 1200 | }, 1201 | { 1202 | "payload": "000d00006041e1b66fe6e2c1b0db3f000700010000000000", 1203 | "fields": [ 1204 | { 1205 | "Type": 0, 1206 | "Data": "6041e1b66fe6e2c1b0db3f" 1207 | }, 1208 | { 1209 | "Type": 1, 1210 | "Data": "0000000000" 1211 | } 1212 | ], 1213 | "packet": "00282cb830a71afe5a2f263ffef39caff9c548f6061f7befce77f5f6ce20b572f7db0a59a3fe9b3d690e" 1214 | }, 1215 | { 1216 | "payload": "000f0000a81c12cc2e0b9af0befddc1f0200050001000000", 1217 | "fields": [ 1218 | { 1219 | "Type": 0, 1220 | "Data": "a81c12cc2e0b9af0befddc1f02" 1221 | }, 1222 | { 1223 | "Type": 1, 1224 | "Data": "000000" 1225 | } 1226 | ], 1227 | "packet": "0028cbfb61a74df05d85cda828be4a9888ca696fa885adb3bad2f34860f1c29f80abc5c76f5a6a3bdcb3" 1228 | }, 1229 | { 1230 | "payload": "000d00005f2eb1ae38cf0ede0903ed000700010000000000", 1231 | "fields": [ 1232 | { 1233 | "Type": 0, 1234 | "Data": "5f2eb1ae38cf0ede0903ed" 1235 | }, 1236 | { 1237 | "Type": 1, 1238 | "Data": "0000000000" 1239 | } 1240 | ], 1241 | "packet": "0028d7ba7a3a1dd6a6ab2122cd6b7b173cdb073700f689500f32e767cad7adcd3591537a8dcd02fb17b7" 1242 | }, 1243 | { 1244 | "payload": "000f000074d10fd868a4069f8c769d860300050001000000", 1245 | "fields": [ 1246 | { 1247 | "Type": 0, 1248 | "Data": "74d10fd868a4069f8c769d8603" 1249 | }, 1250 | { 1251 | "Type": 1, 1252 | "Data": "000000" 1253 | } 1254 | ], 1255 | "packet": "002857c8db9d127af322f663fc6a3bd4efb4c7ceba6c37dc199026e237b81b05c9dc9a0abc6a02f00ff1" 1256 | } 1257 | ] 1258 | }, 1259 | { 1260 | "index": 14, 1261 | "pattern": "IK", 1262 | "dh": "25519", 1263 | "cipher": "ChaChaPoly", 1264 | "hash": "SHA512", 1265 | "handshake_hash": "6d8e64261eebb61ed3a9ec48069646b6eeacc87ea80a68d0d4fa15737e076db8cde8573473686db3d65ae6b491a66ccab365a7f5fb96c17bdc8ce360ab9f63ea", 1266 | "messages": [ 1267 | { 1268 | "payload": "001c04007b6f776e65723a22616c69636540636c69656e742e636f6d227d", 1269 | "fields": [ 1270 | { 1271 | "Type": 1024, 1272 | "Data": "7b6f776e65723a22616c69636540636c69656e742e636f6d227d" 1273 | } 1274 | ] 1275 | }, 1276 | { 1277 | "payload": "001a04007b6f776e65723a22626f62407365727665722e636f6d227d", 1278 | "fields": [ 1279 | { 1280 | "Type": 1024, 1281 | "Data": "7b6f776e65723a22626f62407365727665722e636f6d227d" 1282 | } 1283 | ], 1284 | "packet": "004e0e009f971588c6fe932c8908d6925522542c13dd3c2d9b84286b228ee76903bb1b3adbd468df655765001bfa1d3d16b4b2197ebe7c48f7f94ed55209e31d8e9236625b67bc8ca0bc65a4df512c9c" 1285 | }, 1286 | { 1287 | "payload": "000d0000a69ff8e92b5992df472075000700010000000000", 1288 | "fields": [ 1289 | { 1290 | "Type": 0, 1291 | "Data": "a69ff8e92b5992df472075" 1292 | }, 1293 | { 1294 | "Type": 1, 1295 | "Data": "0000000000" 1296 | } 1297 | ], 1298 | "packet": "00285420dec3203fb70a7c1268fb1ab49f702d7482647d438679f9d70e057195251fee3bbf01609ea71e" 1299 | }, 1300 | { 1301 | "payload": "000f0000e6cb2377ceb58b57b75e6f61fa00050001000000", 1302 | "fields": [ 1303 | { 1304 | "Type": 0, 1305 | "Data": "e6cb2377ceb58b57b75e6f61fa" 1306 | }, 1307 | { 1308 | "Type": 1, 1309 | "Data": "000000" 1310 | } 1311 | ], 1312 | "packet": "002853cc59e5aeee8071502d85f7d48dbefed131f9a7bc8251221313589e5655a65963b7a869b9286477" 1313 | }, 1314 | { 1315 | "payload": "000d0000e375925a7c3a71c010dff8000700010000000000", 1316 | "fields": [ 1317 | { 1318 | "Type": 0, 1319 | "Data": "e375925a7c3a71c010dff8" 1320 | }, 1321 | { 1322 | "Type": 1, 1323 | "Data": "0000000000" 1324 | } 1325 | ], 1326 | "packet": "002898323d665b13b5a0832b28bce63d21fc7f5f77b52b77283db84e52ba9ebf5691ea1ee48c6a3373ea" 1327 | }, 1328 | { 1329 | "payload": "000f0000e4d1464865741cbbd9f3cc2ba400050001000000", 1330 | "fields": [ 1331 | { 1332 | "Type": 0, 1333 | "Data": "e4d1464865741cbbd9f3cc2ba4" 1334 | }, 1335 | { 1336 | "Type": 1, 1337 | "Data": "000000" 1338 | } 1339 | ], 1340 | "packet": "00287efeadf2ef04ea59529b545fb46dd79f7769a1151ece17cbce2dcbd4bfb34dda2311b04af5660b54" 1341 | } 1342 | ] 1343 | }, 1344 | { 1345 | "index": 15, 1346 | "pattern": "IK", 1347 | "dh": "25519", 1348 | "cipher": "ChaChaPoly", 1349 | "hash": "BLAKE2s", 1350 | "handshake_hash": "19957cd9e67ac292451304209d6afbc8d289eb0672f62ed29deff66d24baad65", 1351 | "messages": [ 1352 | { 1353 | "payload": "001c04007b6f776e65723a22616c69636540636c69656e742e636f6d227d", 1354 | "fields": [ 1355 | { 1356 | "Type": 1024, 1357 | "Data": "7b6f776e65723a22616c69636540636c69656e742e636f6d227d" 1358 | } 1359 | ] 1360 | }, 1361 | { 1362 | "payload": "001a04007b6f776e65723a22626f62407365727665722e636f6d227d", 1363 | "fields": [ 1364 | { 1365 | "Type": 1024, 1366 | "Data": "7b6f776e65723a22626f62407365727665722e636f6d227d" 1367 | } 1368 | ], 1369 | "packet": "004e0f009f971588c6fe932c8908d6925522542c13dd3c2d9b84286b228ee76903bb1b3a63524ea203d6dc8557b952377eb5336b92308f6d988a8eae82105308f0784cd051e778207ad57d0218481ed2" 1370 | }, 1371 | { 1372 | "payload": "000d000086d983f8f658dd630762f2000700010000000000", 1373 | "fields": [ 1374 | { 1375 | "Type": 0, 1376 | "Data": "86d983f8f658dd630762f2" 1377 | }, 1378 | { 1379 | "Type": 1, 1380 | "Data": "0000000000" 1381 | } 1382 | ], 1383 | "packet": "0028f86095fca86d8e37d44e3bc72e158d1aa0dd5be3574b2e7013b6e77d5a71ddd70e4abb017d7a30b9" 1384 | }, 1385 | { 1386 | "payload": "000f0000073c6ca378542e46c9c2e1bebd00050001000000", 1387 | "fields": [ 1388 | { 1389 | "Type": 0, 1390 | "Data": "073c6ca378542e46c9c2e1bebd" 1391 | }, 1392 | { 1393 | "Type": 1, 1394 | "Data": "000000" 1395 | } 1396 | ], 1397 | "packet": "00288e4878ab54bca3a295f383899fce6679d40a4dfdfd6632309dce5b16aa5516fdb561929b47d00b4c" 1398 | }, 1399 | { 1400 | "payload": "000d0000df86afb528743cf0584388000700010000000000", 1401 | "fields": [ 1402 | { 1403 | "Type": 0, 1404 | "Data": "df86afb528743cf0584388" 1405 | }, 1406 | { 1407 | "Type": 1, 1408 | "Data": "0000000000" 1409 | } 1410 | ], 1411 | "packet": "00284da08c00c7d9679c18c5fb1d9854f47eb9ead743bafb7b51bff70f9942fc5c8f3d844b2554e44936" 1412 | }, 1413 | { 1414 | "payload": "000f0000b360fc378274dbc8cd2ebe53da00050001000000", 1415 | "fields": [ 1416 | { 1417 | "Type": 0, 1418 | "Data": "b360fc378274dbc8cd2ebe53da" 1419 | }, 1420 | { 1421 | "Type": 1, 1422 | "Data": "000000" 1423 | } 1424 | ], 1425 | "packet": "00284ee6b62acb2047caf41d5a041a535298da0bb4ad22d776fed30e4b320f37e4e9cf933d45c9f4f6c9" 1426 | } 1427 | ] 1428 | } 1429 | ] 1430 | } 1431 | --------------------------------------------------------------------------------