{"id":19174619,"url":"https://github.com/equalitie/np1sec-test-client","last_synced_at":"2025-11-01T12:04:53.610Z","repository":{"id":146907674,"uuid":"72218534","full_name":"equalitie/np1sec-test-client","owner":"equalitie","description":"A full-featured proof of concept implementation of an np1sec chat client, implemented as a pidgin plugin.","archived":false,"fork":false,"pushed_at":"2021-06-07T22:06:10.000Z","size":188,"stargazers_count":20,"open_issues_count":2,"forks_count":7,"subscribers_count":13,"default_branch":"master","last_synced_at":"2025-04-20T01:33:00.446Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/equalitie.png","metadata":{"files":{"readme":"README.md","changelog":null,"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,"zenodo":null}},"created_at":"2016-10-28T15:18:16.000Z","updated_at":"2023-03-25T14:34:50.000Z","dependencies_parsed_at":null,"dependency_job_id":"749ff9c3-73cf-42ce-be3a-597ef17087c2","html_url":"https://github.com/equalitie/np1sec-test-client","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/equalitie%2Fnp1sec-test-client","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/equalitie%2Fnp1sec-test-client/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/equalitie%2Fnp1sec-test-client/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/equalitie%2Fnp1sec-test-client/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/equalitie","download_url":"https://codeload.github.com/equalitie/np1sec-test-client/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252931812,"owners_count":21827170,"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:32.484Z","updated_at":"2025-11-01T12:04:53.575Z","avatar_url":"https://github.com/equalitie.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"An experimental [(n+1)sec](https://github.com/equalitie/np1sec) plugin for [Pidgin](https://www.pidgin.im/)\n==================================================\n\n**Important Warning**: This is a minimal test client for under-construction\nsoftware. It may crash and it may have undocumented security bugs. You should\nnot rely on it for security - or even stable communications.\n\n\n# Setup for users\n\nThe (n+1)sec test client works on any Linux distribution.\n\n## Dependencies\n\nBefore you run the script to install the np1sec-test-client, you should check\nthat the following packages are installed on your system, and install them if\nthey are not. You will also need a C++ compiler that supports C++14. In Debian\nyou can install the `build-essential` package.\n\n```\ncmake\ngit\nintltool\nlibasan (optional)\nlibboost1.55-dev (or higher)\nlibgcrypt-dev\nlibglib2.0-dev\nlibgnutls-dev\nlibgtk2.0-dev\nlibxml2-dev\nwget\n```\n\nIn Fedora you can install all dependencies using the following command (tested \nand working on Fedora 25):\n\n```\ndnf install boost-devel cmake gcc gcc-c++ git glib2-devel gnutls-devel gtk2-devel intltool kernel-devel libasan libgcrypt-devel libxml2-devel make wget\n```\n\n\n## Build\n\nnp1sec-test-client comes with a convenient script, which will download and\nbuild pidgin-2.11, the (n+1)sec library and this plugin for you.\n\nThis script builds a separate Pidgin instance with (n+1)sec support, which uses\na separate configuration from any Pidgin you may already be running on your\nmachine. This isn't strictly necessary and you could run (n+1)sec in your\nday-to-day Pidgin if you like, but this solution will avoid several problems\nwith this test build and avoid your regular chat client being compromised by\nany bugs in (n+1)sec.\n\nTo run it, download this file to an empty directory:\nhttps://raw.githubusercontent.com/equalitie/np1sec-test-client/master/run-np1sec.sh\n\nCheck that the file has the right permissions, else make it executable with the\ncommand:\n\n```\nchmod 775 run-np1sec.sh\n```\n\nFinally, within the directory containing the script, launch the following\ncommand to run the install script:\n\n```\n./run-np1sec.sh\n```\n\nThe script performs some automatic dependency resolution before building. This\nshould work well for users of Debian-based distributions, but users of other\ndistributions can disable this dependency resolution by executing the script with:\n```\n./run-np1sec.sh --force\n```\n\nOn success, the script will start Pidgin, where you can go to `Tools \u003e Plugins`\nand enable the `(n+1)sec Secure messaging` plugin.\n\nSubsequent Pidgin executions can be done by executing the same command again.\nNote however, that executing it will update the np1sec and np1sec-test-client\nprojects to their latest versions. To avoid that one may instead execute:\n\n```\n./bin/bin/pidgin --config=pidgin-home\n```\n\n\n## Using the (n+1)sec plugin\n\nOnce you have enabled the plugin (`Tools \u003e Plugins \u003e (n+1)sec secure\nmessaging`), join the XMPP (\"Jabber\") room (\"chat\") where you are planning to\nhave your encrypted conversation [as you would normally with\nPidgin](https://developer.pidgin.im/wiki/Using%20Pidgin#ChatroomsConferences).\n\nWhen you have joined the room you can chat in the clear (unencrypted) with\nother people as normal.\n\nUnder the list of `n people in this room`, you will see a second list called\n`(n+1)sec users` -- this shows everyone in the room who has installed and\nenabled their (n+1)sec plugin.\n\nTo invite people to a new encrypted conversation, click the `Create\nconversation` button. A new chat window will open. You can then select people\nto invite by double-clicking their usernames in the `Invite` pane of the new\nwindow (this list shows only those people who are (n+1)sec capable). Once\nsomeone is invited, their username is moved to the `Invited` pane, and when\nthey accept the invitation they are moved to the `Joined` pane.\n\nIf you are invited to a conversation, a new window will open automatically.\nThe `Joined` list in that window tells you who is in this conversation already,\nand the `Invited` list shows who has been invited to join. Find your username\nin the `Invited` pane of that window and double-click it to accept the\ninvitation. Your username will move to the `Joined` pane.\n\nWhen someone is first added to the `joined` pane, their username is suffixed\nwith a `!c` symbol, which indicates that the conversation is rotating its\nencryption keys to include them. They won't be party to the conversation,\nmeaning they won't be able to read or write encrypted chat messages, until this\ndisappears to indicate the key exchange is complete.\n\nInvitees who have not accepted their invitations are not party to an encrypted\nconversation and cannot see its messages.\n\nTo leave an encrypted conversation, or to decline an invitation, simply close\nits window.\n\n\n# Known bugs\n\n## User's chat \"handle\" must match their JID\n\nWhen you \"join a chat\" (i.e an XMPP MUC room) in Pidgin, the client requires\nyou to set a \"Handle\" or nickname. (n+1)sec will not work unless you set this\nto be exactly the same as the first part of your Jabber ID (the part before the `@`\nsymbol). This is case sensitive.\n\nExample:\n\n- JID: richard@np1sec.equalit.ie/resource\n- Correct handle: \"richard\"\n\n\n# Setup for developers\n\nFor developers it is better to use a custom built pidgin. This is because it can\nbe built with the minimum functionality it needs to work and thus causes less\nproblems when (e.g.) multiple instances of the messenger need to run on the same\nmachine.\n\n\n## Build pidgin\n\nDownload and extract pidgin source from\n[here](https://www.pidgin.im/download/source/).\n\nThen:\n\n```\ncd \u003cpidgin-directory\u003e\n./configure --disable-gtkspell --disable-gstreamer --disable-vv\n--disable-meanwhile --disable-avahi --disable-dbus\n--prefix=`pwd`/install\nmake install # Shall install into ./install\n```\n\n## Build (n+1)sec\n\n```\ncd \u003cnp1sec-test-client dir\u003e\nmkdir -p build\ncd build\ncmake .. -DNP1SEC_LIB_DIR=\u003cwhere libnp1sec.so can be found\u003e \\\n         -DNP1SEC_INC_DIR=\u003cwhere np1sec headers can be found\u003e\nmake\n```\n\nMake a link to the plugin where pidgin can find it:\n\n```\ncp libnp1sec-plugin.so ~/.purple/plugins/\n```\n\n## Test\n\nTo test it, you'll likely want to run pidgin multiple times on the same machine.\n\n```\nmkdir -p ~/pidgin\n\u003cpidgin-directory\u003e/install/bin/pidgin --config=~/pidgin/alice\n\u003cpidgin-directory\u003e/install/bin/pidgin --config=~/pidgin/bob\n\u003cpidgin-directory\u003e/install/bin/pidgin --config=~/pidgin/charlie\n```\n\n(Re)start pidgin, go to Tools \u003e Plugins and enable the `(n+1)sec Secure\nmessaging` plugin.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fequalitie%2Fnp1sec-test-client","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fequalitie%2Fnp1sec-test-client","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fequalitie%2Fnp1sec-test-client/lists"}