{"id":15047703,"url":"https://github.com/dwmcrobb/libcredence","last_synced_at":"2026-02-17T13:32:12.156Z","repository":{"id":250356901,"uuid":"829392543","full_name":"dwmcrobb/libCredence","owner":"dwmcrobb","description":"C++ class library for secure, authenticated network communication over TCP.  Uses libsodium for encryption (XChaCha20Poly1305) and authentication (Ed25519 keys).","archived":false,"fork":false,"pushed_at":"2024-10-10T04:46:11.000Z","size":425,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-13T01:03:02.713Z","etag":null,"topics":["authentication","cpp20","encryption-decryption"],"latest_commit_sha":null,"homepage":"https://www.mcplex.net","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dwmcrobb.png","metadata":{"files":{"readme":"README.md","changelog":"ChangeLog","contributing":null,"funding":null,"license":null,"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}},"created_at":"2024-07-16T10:37:41.000Z","updated_at":"2024-10-10T04:46:19.000Z","dependencies_parsed_at":"2024-07-26T20:10:42.760Z","dependency_job_id":"8083f6a3-ca2e-4a40-80b0-48246a37b8fe","html_url":"https://github.com/dwmcrobb/libCredence","commit_stats":null,"previous_names":["dwmcrobb/libcredence"],"tags_count":44,"template":false,"template_full_name":null,"purl":"pkg:github/dwmcrobb/libCredence","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dwmcrobb%2FlibCredence","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dwmcrobb%2FlibCredence/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dwmcrobb%2FlibCredence/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dwmcrobb%2FlibCredence/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dwmcrobb","download_url":"https://codeload.github.com/dwmcrobb/libCredence/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dwmcrobb%2FlibCredence/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279013885,"owners_count":26085325,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-12T02:00:06.719Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["authentication","cpp20","encryption-decryption"],"created_at":"2024-09-24T21:03:18.554Z","updated_at":"2025-10-13T01:03:15.149Z","avatar_url":"https://github.com/dwmcrobb.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Dwm::Credence C++ Class Library\nThis class library may be used for secure, authenticated network\ncommunication over TCP.  The main three classes are \n[Dwm::Credence::Peer](https://www.mcplex.net/Software/Documentation/libDwmCredence/classDwm_1_1Credence_1_1Peer.html),\n[Dwm::Credence::KeyStash](https://www.mcplex.net/Software/Documentation/libDwmCredence/classDwm_1_1Credence_1_1KeyStash.html)\nand \n[Dwm::Credence::KnownKeys](https://www.mcplex.net/Software/Documentation/libDwmCredence/classDwm_1_1Credence_1_1KnownKeys.html).\nUtilizing just these three classes, it is relatively easy to create secure TCP\napplications.  There is an example in the [library documentation](https://www.mcplex.net/Software/Documentation/libDwmCredence/).\n\nSince I wanted something I could use across a variety of C++ client/server\napplications, I needed something that made it easy to send and receive\nobjects of a wide range of abstract data types.  The easiest way to do this\nwas to utilize the \n[Dwm::StreamIO](https://www.mcplex.net/Software/Documentation/libDwm/classDwm_1_1StreamIO.html)\nabstractions from [libDwm](https://github.com/dwmcrobb/libDwm), which only\nrequires that my messages are composed from fundamental types, objects which\nimplement the\n[Dwm::HasStreamRead](https://www.mcplex.net/Software/Documentation/libDwm/conceptDwm_1_1HasStreamRead.html)\nand [Dwm::HasStreamWrite](https://www.mcplex.net/Software/Documentation/libDwm/conceptDwm_1_1HasStreamWrite.html) concepts, and\ncontainers of either or both.  To be able to send and recieve the contents\nof a given class, I only need to implement Read(istream \u0026) and Write(ostream \u0026)\nmembers, and those are typically easy to do given the facilities in\n[Dwm::StreamIO](https://www.mcplex.net/Software/Documentation/libDwm/classDwm_1_1StreamIO.html).\nAs a result, I have more than half a dozen client/server application systems\nthat utilize the library.\n\n## History\nThis library replaced my older Dwm::Auth library that used Crypto++\nunder the hood.  I had some problems with Crypto++ that went\nunresolved after reporting them, which forced me to maintain\nmy own private fork with my fixes and start designing a new library\naround something else.  That something else being \n[libsodium](https://doc.libsodium.org), which is much smaller, and a\ngood fit for my needs.  It has its frailties (C arrays and pointers\nthat require care), but it's well-maintained, proven, widely used and\nhas good documentation.\n\n## Platforms\nFreeBSD, linux (Debian-based systems including Ubuntu and Raspberry Pi OS)\nand macOS.\n\nNote that on macOS, I am using MacPorts for dependencies.  Homebrew\nwill probably work, I've just always been a MacPorts user.\n\n## Dependencies\n### Tools\n#### C++ Compiler\nA C++20 compiler is required.  I'm using these at the time of writing:\n- FreeBSD: clang++ 18.1.4\n- Ubuntu 24.04 LTS: g++ 13.2.0\n- macOS: Apple clang version 15.0.0 (clang-1500.3.9.4)\n- Raspberry Pi OS 12(bookworm): g++ 12.2.0\n#### GNU make\n- FreeBSD: `sudo pkg install gmake`\n- Linux: `sudo apt install make`\n#### GNU flex\n- FreeBSD: `sudo pkg install flex`\n- Linux: `sudo apt install flex`\n#### GNU bison\n- FreeBSD: `sudo pkg install bison`\n- Linux: `sudo apt install bison`\n- macOS: `sudo port install bison`\n#### [mkfbsdmnfst](https://github.com/dwmcrobb/mkfbsdmnfst)\nNeeded to build a package on FreeBSD.\n#### [mkdebcontrol](https://github.com/dwmcrobb/mkdebcontrol)\nNeeded to build a package on Debian, Ubuntu and Raspberry Pi OS.\n### Libraries\n#### [libDwm](https://github.com/dwmcrobb/libDwm)\n#### libsodium\n- FreeBSD: `sudo pkg install libsodium`\n- Linux: `sudo apt install libsodium-dev`\n- macOS: `sudo port install libsodium`\n## Build\nThe build requires GNU make (hence on FreeBSD, the make command below\nshould be `gmake`).  It also requires GNU flex and GNU bison.\n\n    ./configure\n    make\n\n## Build a native package\nI normally build a native package to allow me to install the library\nusing the native packaging tools on FreeBSD, Debian-based Linux systems\nand macOS.  This is done with:\n\n    make package\n\nNote that if you want documentation to be included in the build, you\nmust use:\n\n    make BUILD_DOCS=yes package\n\n## Installation\nOnce a package is built, it may be installed using the native installation\ntools on your platform.\n#### FreeBSD\n    pkg install libDwmCredence-0.1.32.pkg\n#### Linux (Debian-based systems)\n    dpkg -i libDwmCredence_0.1.32_amd64.deb\n#### macOS\n    open libDwmCredence-0.1.32.pkg\n\n#### Other options\nYou can stage all of the installation files without creating a package\nby running:\n\n    make tarprep\n\t\nThis will place all of the files for installation in the `staging/usr/local`\ndirectory.  The top level `tarprep` make target is a dependency of the\n`package` target.\n\n## Documentation\nLibrary documentation is available at\n[www.mcplex.net/Software/Documentation/libDwmCredence](https://www.mcplex.net/Software/Documentation/libDwmCredence/)\nand may be built in the `doc` directory.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdwmcrobb%2Flibcredence","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdwmcrobb%2Flibcredence","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdwmcrobb%2Flibcredence/lists"}