diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 17:32:43 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 17:32:43 +0000 |
commit | 6bf0a5cb5034a7e684dcc3500e841785237ce2dd (patch) | |
tree | a68f146d7fa01f0134297619fbe7e33db084e0aa /comm/third_party/rnp/src/libsexp/README.adoc | |
parent | Initial commit. (diff) | |
download | thunderbird-upstream.tar.xz thunderbird-upstream.zip |
Adding upstream version 1:115.7.0.upstream/1%115.7.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'comm/third_party/rnp/src/libsexp/README.adoc')
-rw-r--r-- | comm/third_party/rnp/src/libsexp/README.adoc | 195 |
1 files changed, 195 insertions, 0 deletions
diff --git a/comm/third_party/rnp/src/libsexp/README.adoc b/comm/third_party/rnp/src/libsexp/README.adoc new file mode 100644 index 0000000000..69317257d4 --- /dev/null +++ b/comm/third_party/rnp/src/libsexp/README.adoc @@ -0,0 +1,195 @@ += S-expressions parser and generator library in C\++ (SEXP in C++) + +image:https://github.com/rnpgp/sexp/workflows/build-and-test/badge.svg["Build status Ubuntu/macOS/Windows", link="https://github.com/rnpgp/sexp/actions?workflow=build-and-test"] +image:https://github.com/rnpgp/sexp/workflows/build-and-test-rh/badge.svg["Build status CentOS/Fedora", link="https://github.com/rnpgp/sexp/actions?workflow=build-and-test-rh"] +image:https://github.com/rnpgp/sexp/workflows/build-and-test-deb/badge.svg["Build status Debian", link="https://github.com/rnpgp/sexp/actions?workflow=build-and-test-deb"] +image:https://github.com/rnpgp/sexp/workflows/build-and-test-msys/badge.svg["Build status MSys", link="https://github.com/rnpgp/sexp/actions?workflow=build-and-test-msys"] + + +image:https://codecov.io/gh/rnpgp/sexp/branch/feat/g23/graph/badge.svg["Code coverage", link="https://codecov.io/gh/rnpgp/sexp"] +image:https://github.com/rnpgp/sexp/workflows/CodeQL/badge.svg["CodeQL analysis", link="https://github.com/rnpgp/sexp/actions?workflow=CodeQL"] +image:https://scan.coverity.com/projects/27150/badge.svg["Coverity Scan Build Status", link="https://scan.coverity.com/projects/rnpgp-sexp"] + + +== Purpose + +This is a C++ library for working with S-expressions. This implementation +is derived from the reference SEXP C library developed by Professors Ronald Rivest +and Butler Lampson of MIT LCS (now CSAIL). + +This library differs from the original C implementation in the following ways: + +* It aims to be reuseable in C++ implementations and is importable via CMake. +* It includes a test suite for correctness testing and tests against malformed + S-expressions. +* It supports, and is tested against, all major platforms, including: +** Ubuntu, Debian, Fedora, CentOS +** macOS +** Windows +** msys +* It implements additional interface to work with S-expressions wrapped by GnuPG 2.3+ extended format as defined at https://github.com/gpg/gnupg/blob/master/agent/keyformat.txt + +The original C library is available at: + +* http://people.csail.mit.edu/rivest/sexp.html + + +== Background + +S-expressions are a data structure for representing complex data as a variation +on https://en.wikipedia.org/wiki/Lisp_(programming_language)[LISP] S-expressions. + +S-expressions were originally adopted for use in +http://theory.lcs.mit.edu/~cis/sdsi.html[SDSI] and +http://world.std.com/~cme/html/spki.html[SPKI]. + +SDSI has been developed by Professors +https://people.csail.mit.edu/rivest/index.html[Ronald L. Rivest] and Butler +Lampson of http://www.lcs.mit.edu/[MIT's Laboratory for Computer Science], +members of +http://theory.lcs.mit.edu/~cis[LCS's Cryptography and Information Security] +research group. + +NOTE: SDSI research has been supported by DARPA contract DABT63-96-C-0018, +"Security for Distributed Computer Systems". + +NOTE: SPKI has been developed by +http://www.clark.net/pub/cme/home.html[Carl Ellison] and others in the IETF SPKI +working group. + + +== Usage guide for S-expressions + +* https://people.csail.mit.edu/rivest/Sexp.txt[SEXP 1.0 guide] + + +== Code + +The library is a deep rework to C++ of the original +https://people.csail.mit.edu/rivest/sexp.html[SEXP library] that maintains full +support of original specification. + +While most applications will not need anything but the simple canonical and +transport formats; however, the code here is considerably more complex because +it also supports the advanced format, both for input and for output. + + +== Building and installation + +[source,sh] +---- +mkdir build +cd build +cmake .. +cmake --build . +ctest +cmake --install . +---- + + +== CMake script options + +`WITH_SEXP_TESTS:BOOL`:: +build tests (default: `ON`) + +`DOWNLOAD_GTEST`:: +if tests are build download googletest from github (default: `ON`) +when this option is set to `OFF` googletest binary package is a prerequisite for SEXP tests + +`WITH_SEXP_CLI:BOOL`:: +build the `sexp` client application (default: `ON`) + +`WITH_SANITIZERS:BOOL`:: +build with address and other sanitizers (default: `OFF`) +(requires clang compiler) + + + +== SEXP command-line utility + +The `sexp` command-line utility is reference parser and generator of S-expressions. +It can read, parse and print out SEXP in all defined formats. + +=== sexp switches: +[options="header"] +|======================================================================================================= +| Switch | Description | Default +3+| Input +| -i <filename> | input file name | read input from console (stdin) +| -p | prompt input if reading from console | disabled +| -s | treat input as a single SEXP string | disabled, input is treated as S-expression +3+| Output +| -o <filename> | output file name: | write output to console (stdout) +| -a | generate advanced transport format | enabled if no format is specified +| -b | generate base-64 transport format | disabled +| -c | generate canonical format | disabled +| -l | suppress linefeeds after output | disabled +| -w <width> | set output line width (0 implies no constraint)| 75 +3+| Miscellaneous +| -x | execute repeatedly until EOF | process single S-expression then exit +| -h | print help message and exit | +|======================================================================================================= + +Running without switches implies: -p -a -b -c -x + +=== Usage examples: +Prompt for S-expressions input from console, parse and output it to `certificate.dat` in base64 transport format +[source] +---- +sexp -o certificate.dat -p -b + +> Input: +> (aa bb (cc dd)) +> +> Writing base64 (of canonical) output to 'certificate.dat' +---- + +Parse all S-expressions from `certificate.dat`, output them to console in advanced transport format with no prompts +[source] +---- +sexp -i certificate.dat -x + +> (2:aa2:bb(2:cc2:dd)) +---- + +Parse S-expressions from `certificate.dat`, output it to console in canonical, base64 and advanced format with prompts and no width limitation +[source] +---- +sexp -i certificate.dat -a -b -c -p -w 0 + +> Reading input from certificate.dat +> +> Canonical output: +> (2:aa2:bb(2:cc2:dd)) +> Base64 (of canonical) output: +> {KDI6YWEyOmJiKDI6Y2MyOmRkKSk=} +> Advanced transport output: +> (aa bb (cc dd)) +---- + +Repeatedly prompt for S-expressions input from console, parse and output it console in advanced, base64 and canonical formats +[source] +---- +sexp -p -a -b -c -x +---- +or just +---- +sexp + +> Input: +> (abc def (ghi jkl)) +> +> Canonical output: +> (3:abc3:def(3:ghi3:jkl)) +> Base64 (of canonical) output: +> {KDM6YWJjMzpkZWYoMzpnaGkzOmprbCkp} +> Advanced transport output: +> (abc def (ghi jkl)) +> +> Input: +> ^C +---- + +== License + +The code is made available as open-source software under the MIT License. |