{"id":19174614,"url":"https://github.com/equalitie/np1sec","last_synced_at":"2025-04-06T13:10:29.101Z","repository":{"id":18654711,"uuid":"21861833","full_name":"equalitie/np1sec","owner":"equalitie","description":"A library for off-the-record (deniable authenticated forward secure confidential) multiparty messaging","archived":false,"fork":false,"pushed_at":"2017-08-14T05:12:52.000Z","size":16695,"stargazers_count":406,"open_issues_count":20,"forks_count":31,"subscribers_count":43,"default_branch":"master","last_synced_at":"2025-03-30T11:11:09.995Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://learn.equalit.ie/wiki/Np1sec","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/equalitie.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-07-15T14:00:46.000Z","updated_at":"2025-03-30T00:41:19.000Z","dependencies_parsed_at":"2022-09-16T21:00:57.551Z","dependency_job_id":null,"html_url":"https://github.com/equalitie/np1sec","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/equalitie%2Fnp1sec","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/equalitie%2Fnp1sec/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/equalitie%2Fnp1sec/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/equalitie%2Fnp1sec/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/equalitie","download_url":"https://codeload.github.com/equalitie/np1sec/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247485287,"owners_count":20946398,"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","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":"2024-11-09T10:18:31.676Z","updated_at":"2025-04-06T13:10:29.074Z","avatar_url":"https://github.com/equalitie.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"(n+1)sec\n======\n\n(n+1)sec is a Free (libre), end-to-end secure, synchronous, multi-party messaging protocol, authored by eQualit.ie with support from the Open Technology Fund. The (n+1)sec project, similar to the OTR (off-the-record) project, makes it possible to have secure instantaneous communications between people. (n+1)sec extends upon OTR in supporting not just one-to-one chats, but also chats between arbitrary groups of people. Like OTR, (n+1)sec is built on top of arbitrary chat infrastructure systems, such as XMPP, and can be implemented in any client for these systems.\n\n![(n+1)sec](https://learn.equalit.ie/mw/images/7/7f/Np1sec-web.jpg)\n\nThe protocol underlying this multiparty communication security is described in this [paper](https://learn.equalit.ie/wiki/Np1sec). An experimental GUI client, in the form of a Pidgin plugin is [here](https://github.com/equalitie/np1sec-test-client). A command line client, called Jabberite, is included in this repository and described [below](https://github.com/equalitie/np1sec/blob/master/README.md#testing-np1sec). This client is used for instance in [EchoChamber](https://github.com/equalitie/EchoChamber), a testing platform for the (n+1)sec protocol that simulates network conditions and peer behavior to produce programmer-friendly benchmark data.\n\n\n# Building (n+1)sec\n\n## Library dependencies\n\nThe (n+1)sec library requires the following dependencies:\n\n* cmake \u003e= 2.8\n* libgcrypt \u003e= 1.6.0\n\nThe (n+1)sec test client, which is built by default but can be disabled, further requires the following libraries:\n\n* libglib2\n* libpurple\n* libreadline\n\n## Installing from source\n\nThe (n+1)sec library is built using cmake. To install (n+1)sec from source, run the following in the source directory:\n\n```\n$ cmake .\n$ make\n# make install\n```\n\n\n# Testing (n+1)sec\n\nTo test (n+1)sec in a graphic interface, you can install the [(n+1)sec plugin for Pidgin](https://github.com/equalitie/np1sec-test-client). A comprehensive [report of (n+1)sec test results](https://github.com/equalitie/np1sec/blob/master/doc/np1sec-test-report.pdf) is included in this repository.\n\n## Running the jabberite test client\n\nThe (n+1)sec library comes with a rudimentary command line chat client used to manually test the np1sec system in practice, called [_jabberite_](https://github.com/equalitie/np1sec/tree/master/test/jabberite). The jabberite tool is a basic jabber/XMPP multi-user-chat client that uses (n+1)sec for all its communications, and is built as part of the (n+1)sec test suite.\n\nTo run jabberite and connect to a given jabber multi-user chat server, run the following in the (n+1)sec build directory:\n```\n./jabberite --account=myusername@myserver.example.com --password=verysecret --server=conference.example.com --room=np1sec-test-room\n```\n\n\n## Running jabberite locally with prosody\n\nThe (n+1)sec library can be tested using the jabberite test client by running a jabber server on your local testing machine. For example, it can be run using the [_prosody_](https://prosody.im/) jabber server, configured as follows:\n\nAfter installing prosody, enable the following settings in ```/etc/prosody/prosody.cfg.lua```:\n```\nallow_registration = true;\n\nComponent \"conference.localhost\" \"muc\"\n```\n\nReload prosody, and create jabber user accounts for a couple of test users:\n```\n# prosodyctl adduser alice@localhost\n# prosodyctl adduser bob@localhost\n```\n\nWhen this is done, a secure chat session can be set up by running multiple instances of jabberite in separate terminals:\n\n```\n$ ./jabberite --account=alice@localhost --password=\"alice-password\" --server=conference.localhost --room=np1sec-test-room\n\n$ ./jabberite --account=bob@localhost --password=\"bob-password\" --server=conference.localhost --room=np1sec-test-room\n```\n\n## Running unit and integration tests\n\n(n+1)sec unit and integration tests can be found in the tests/echo_chamber directory. They\nhave additional dependencies to `boost-all-dev` and g++ version 5.4 or greater. To\ncompile them, one needs to `make` them explicitly by running the command\n\n```\n$ make echo_chamber\n```\n\nThese tests are self sufficient and don't need a connection to a XMPP server.\n\nTo run them one by one, one would execute\n\n```\n$ ./echo_chamber --log_level=test_suite\n```\n\nOr to run a particular test, one would use\n\n```\n$ ./echo_chamber --log_level=test_suite --run_test=\u003cname_of_the_test\u003e\n```\n\nFor more ways to tweak the execution of the tests please consult\nthe documentation on [Boost.Test](http://www.boost.org/doc/libs/1_63_0/libs/test/doc/html/boost_test/utf_reference/rt_param_reference.html)\nlibrary.\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fequalitie%2Fnp1sec","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fequalitie%2Fnp1sec","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fequalitie%2Fnp1sec/lists"}