{"id":32197013,"url":"https://github.com/rnpgp/sexpp","last_synced_at":"2026-02-21T13:01:37.250Z","repository":{"id":61736110,"uuid":"533758006","full_name":"rnpgp/sexpp","owner":"rnpgp","description":"C++ Library for SEXP (S-expressions)","archived":false,"fork":false,"pushed_at":"2025-03-22T20:33:28.000Z","size":260,"stargazers_count":9,"open_issues_count":4,"forks_count":5,"subscribers_count":9,"default_branch":"main","last_synced_at":"2025-10-22T02:51:35.111Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rnpgp.png","metadata":{"files":{"readme":"README.adoc","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-09-07T12:34:17.000Z","updated_at":"2025-06-11T13:43:25.000Z","dependencies_parsed_at":"2024-04-30T21:36:00.203Z","dependency_job_id":"8fbdfc60-4c55-4ec3-aa47-899d4fd8e7e4","html_url":"https://github.com/rnpgp/sexpp","commit_stats":null,"previous_names":["rnpgp/sexpp","rnpgp/sexp"],"tags_count":23,"template":false,"template_full_name":null,"purl":"pkg:github/rnpgp/sexpp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rnpgp%2Fsexpp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rnpgp%2Fsexpp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rnpgp%2Fsexpp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rnpgp%2Fsexpp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rnpgp","download_url":"https://codeload.github.com/rnpgp/sexpp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rnpgp%2Fsexpp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29681468,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-21T12:30:22.644Z","status":"ssl_error","status_checked_at":"2026-02-21T12:29:55.402Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-10-22T02:48:26.117Z","updated_at":"2026-02-21T13:01:37.245Z","avatar_url":"https://github.com/rnpgp.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"= S-Expressions parser and generator library in C\\++ (SEXP in C++)\n\nimage: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\"]\nimage: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\"]\nimage: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\"]\nimage: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\"]\n\n\nimage:https://codecov.io/gh/rnpgp/sexpp/branch/main/graph/badge.svg[\"Code coverage\", link=\"https://codecov.io/gh/rnpgp/sexpp\"]\nimage:https://github.com/rnpgp/sexpp/workflows/CodeQL/badge.svg[\"CodeQL analysis\", link=\"https://github.com/rnpgp/sexpp/actions?workflow=CodeQL\"]\nimage:https://scan.coverity.com/projects/28717/badge.svg[\"Coverity Scan Build Status\", link=\"https://scan.coverity.com/projects/rnpgp-sexpp\"]\n\n\n== Purpose\n\nThis is a C++ library for working with S-Expressions.\n\nThis implementation is derived from the reference SEXP C library developed by\nProf. Ronald Rivest and Prof. Butler Lampson of MIT LCS (now CSAIL).\n\nThis library differs from the original C implementation in the following ways:\n\n* It aims to be reusable in C++ implementations and is importable via CMake.\n* It includes a test suite for correctness testing and tests against malformed\n  S-Expressions.\n* It supports, and is tested against, all major platforms, including:\n** Ubuntu, Debian, Fedora, CentOS, NixOS\n** macOS\n** Windows native\n** Windows MSys\n* It implements additional interface to work with S-Expressions wrapped by GnuPG\n  2.3+ extended format\n\n== Background\n\nS-Expressions are a data structure for representing complex data as a variation\non https://en.wikipedia.org/wiki/Lisp_(programming_language)[LISP] S-Expressions.\n\nS-Expressions were originally adopted for use in\nhttps://wikipedia.org/wiki/Simple_public-key_infrastructure[SPKI and SDSI].\n\nSDSI has been developed by Prof.\nhttps://people.csail.mit.edu/rivest/index.html[Ronald L. Rivest] and\nProf. Butler Lampson of\nhttp://www.lcs.mit.edu/[MIT's Laboratory for Computer Science],\nmembers of LCS's Cryptography and Information Security\nresearch group.\n\nNOTE: SDSI research has been supported by DARPA contract DABT63-96-C-0018,\n\"Security for Distributed Computer Systems\".\n\nNOTE: SPKI has been developed by Carl Ellison and others in the IETF SPKI\nworking group.\n\n== S-Expressions specification\n\n* https://datatracker.ietf.org/doc/draft-rivest-sexp/\n\n== Code\n\nThe library is a deep rework to C++ of the original SEXP library that maintains full\nsupport of original specification.\n\nWhile most applications will not need anything but the simple canonical and\ntransport formats; however, the code here is considerably more complex because\nit also supports the advanced format, both for input and for output.\n\n\n== Building and installation\n\n[source,sh]\n----\n$ mkdir build\n$ cd build\n$ cmake ..\n$ cmake --build .\n$ ctest\n$ cmake --install .\n----\n\n\n== CMake script options\n\n`BUILD_SHARED_LIBS:BOOL`::\n(default: `OFF`)\nbuild shared library\n\n`WITH_SEXP_TESTS:BOOL`::\n(default: `ON`)\nbuild tests\n\n`DOWNLOAD_GTEST`::\n(default: `ON`)\nif tests are built, automatically download googletest from GitHub;\nwhen set to `OFF`, the googletest binary package needs to be available for SEXP\ntests.\n\n`WITH_SEXP_CLI:BOOL`::\n(default: `ON`) build the `sexp` command-line utility\n\n`WITH_SANITIZERS:BOOL`::\n(default: `OFF`)\nbuild with address and other sanitizers (requires clang compiler)\n\n\n\n== SEXPP command-line utility\n\nThe `sexpp` command-line utility is reference parser and generator of\nS-Expressions. It can read, parse and print out SEXP in all defined formats.\n\n=== Switches\n\n.`sexpp` switches\n[options=\"header\"]\n|===\n| Switch          | Description                                    | Default\n\n3+| Input\n| `-i \u003cfilename\u003e` | input file name                                | read input from console (stdin)\n| `-p`            | prompt input if reading from console           | disabled\n| `-s`            | treat input as a single SEXP string            | disabled, input is treated as an S-Expression\n\n3+| Output\n| `-o \u003cfilename\u003e` | output file name:                              | write output to console (stdout)\n| `-a`            | generate advanced transport format             | enabled if no format is specified\n| `-b`            | generate base-64 transport format              | disabled\n| `-c`            | generate canonical format                      | disabled\n| `-l`            | suppress linefeeds after output                | disabled\n| `-w \u003cwidth\u003e`    | set output line width (0 implies no constraint)| 75\n\n3+| Miscellaneous\n| `-x`            | execute repeatedly until EOF                   | process single S-Expression then exit\n| `-h`            | print help message and exit                    |\n\n|===\n\nRunning without switches implies: `-p -a -b -c -x`.\n\n=== Usage examples\n\nPrompt for S-Expressions input from console, parse and output it to\n`certificate.dat` in base64 transport format.\n\n[source]\n----\n$ sexpp -o certificate.dat -p -b\n\n\u003e Input:\n\u003e (aa bb (cc dd))\n\u003e\n\u003e Writing base64 (of canonical) output to 'certificate.dat'\n----\n\nParse all S-Expressions from `certificate.dat`, output them to console in\nadvanced transport format with no prompts:\n\n[source,sh]\n----\n$ sexpp -i certificate.dat -x\n\n\u003e (2:aa2:bb(2:cc2:dd))\n----\n\nParse S-Expressions from `certificate.dat`, output it to console in canonical,\nbase64 and advanced format with prompts and no width limitation:\n\n[source,sh]\n----\n$ sexpp -i certificate.dat -a -b -c -p -w 0\n\n\u003e Reading input from certificate.dat\n\u003e\n\u003e Canonical output:\n\u003e (2:aa2:bb(2:cc2:dd))\n\u003e Base64 (of canonical) output:\n\u003e {KDI6YWEyOmJiKDI6Y2MyOmRkKSk=}\n\u003e Advanced transport output:\n\u003e (aa bb (cc dd))\n----\n\nRepeatedly prompt for S-Expressions input from console, parse and output it\nconsole in advanced, base64 and canonical formats:\n\n[source,sh]\n----\n$ sexpp -p -a -b -c -x\n----\n\nor just\n\n[source,sh]\n----\n$ sexpp\n\n\u003e Input:\n\u003e (abc def (ghi jkl))\n\u003e\n\u003e Canonical output:\n\u003e (3:abc3:def(3:ghi3:jkl))\n\u003e Base64 (of canonical) output:\n\u003e {KDM6YWJjMzpkZWYoMzpnaGkzOmprbCkp}\n\u003e Advanced transport output:\n\u003e (abc def (ghi jkl))\n\u003e\n\u003e Input:\n\u003e ^C\n----\n\n== License\n\nCopyright Ribose.\n\nThe code is made available as open-source software under the MIT License.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frnpgp%2Fsexpp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frnpgp%2Fsexpp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frnpgp%2Fsexpp/lists"}