{"id":15149938,"url":"https://github.com/seemoo-lab/pairsonic","last_synced_at":"2025-10-24T05:31:50.885Z","repository":{"id":256653112,"uuid":"849843665","full_name":"seemoo-lab/pairsonic","owner":"seemoo-lab","description":"Helping groups securely exchange contact information.","archived":false,"fork":false,"pushed_at":"2024-08-30T11:09:23.000Z","size":10447,"stargazers_count":35,"open_issues_count":0,"forks_count":2,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-01-31T00:12:51.399Z","etag":null,"topics":["acoustic-communication","android","authentication","dart","data-over-sound","decentralized","end-to-end-encryption","flutter","human-computer-interaction","nearby","proximity","security","serverless","smartphone","ultrasound","usability"],"latest_commit_sha":null,"homepage":"https://fputz.net/pairsonic","language":"Dart","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/seemoo-lab.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-08-30T11:08:44.000Z","updated_at":"2025-01-18T23:35:26.000Z","dependencies_parsed_at":"2024-09-12T08:17:23.000Z","dependency_job_id":"8203bb70-3111-4c0f-9bc4-64e96acd3d73","html_url":"https://github.com/seemoo-lab/pairsonic","commit_stats":null,"previous_names":["seemoo-lab/pairsonic"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seemoo-lab%2Fpairsonic","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seemoo-lab%2Fpairsonic/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seemoo-lab%2Fpairsonic/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seemoo-lab%2Fpairsonic/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/seemoo-lab","download_url":"https://codeload.github.com/seemoo-lab/pairsonic/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":237918710,"owners_count":19387305,"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":["acoustic-communication","android","authentication","dart","data-over-sound","decentralized","end-to-end-encryption","flutter","human-computer-interaction","nearby","proximity","security","serverless","smartphone","ultrasound","usability"],"created_at":"2024-09-26T14:01:34.183Z","updated_at":"2025-10-24T05:31:40.863Z","avatar_url":"https://github.com/seemoo-lab.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n    \u003cimg src=\"doc/img/icon.png\" width=\"200px\"/\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003e PairSonic \u003c/h1\u003e\n\n**PairSonic** is an open-source smartphone app that enables two or more users meeting in person to spontaneously exchange or verify their contact information.\nPairSonic supports the secure exchange of cryptographic public keys, which is crucial for protecting end-to-end encrypted communication, e.g., in messenger apps (so called *authentication ceremony*).\n\nPairSonic simplifies the pairing process by automating the tedious verification tasks of previous methods through an *acoustic out-of-band* channel using smartphones' built-in hardware.\nIt does not rely on external key management infrastructure, prior associations, or shared secrets.\n\n## Demo Video\n\nClick on the gif below to open the [full demo](https://youtu.be/e1AMYDLWN0E) where you can hear what it sounds like:\n\n\u003ca href=\"https://youtu.be/e1AMYDLWN0E\"\u003e\u003cimg width=\"500px\" src=\"doc/img/demo-short.gif\"\u003e\u003c/img\u003e\u003c/a\u003e\n\n## Using PairSonic\n\nThis repository contains a demo implementation of the PairSonic contact exchange protocol.\nThe app is written in Flutter and targets Android devices.\nTry it out yourself by following the build instructions below and installing the app.\n\nWhen you start the app, you can create a profile (name, avatar, bio) and exchange it with nearby users (see [live demo](https://youtu.be/e1AMYDLWN0E?t=29)). The app itself doesn't have any functionality besides implementing the contact exchange, so you cannot do much with your newly exchanged contacts – except appreciating that your smartphone just sounded like R2D2, of course. And that this sound helped exchange your contact information via local ad-hoc communication, without relying on the Internet.\n\nIn the future, PairSonic could be integrated into other apps as an option for in-person contact exchange/verification.\n\n\n\n## Features\n- **Verify end-to-end encryption.** Securely exchanges cryptographic public keys.\n- **Decentralized.** Operates without needing external key management infrastructure, prior associations, or shared secrets. Does not require an Internet connection.\n- **User-friendly.** Automates verification tasks, making the process simpler and more secure.\n- **Group compatibility.** Designed to work efficiently with both individual users and larger groups.\n- **Customizable profiles.** Developers can customize the type of contact informaiton exchanged.\n- **Broad compatibility.** Supports most Android devices with WiFi Direct, as long as they run Android 6 or newer (~2015).\n\n## Build \u0026 Develop\n\nRequirements:\n- Flutter 3.22 or later (with Dart 3.4 or later)\n- Java 17 or later\n- Gradle 8.5 or later\n\nIn order to build \u0026 run the app, make sure to have [Android Studio](https://developer.android.com/studio) as well as [adb](https://developer.android.com/tools/adb) installed and set up. For Android Studio, the [Flutter](https://plugins.jetbrains.com/plugin/9212-flutter) and [Dart](https://plugins.jetbrains.com/plugin/6351-dart) plugins are recommended. Then, either run `flutter run` or click the play button next to the main function in [lib/main.dart](lib/main.dart) in Android Studio and choose \"Run main.dart\".\n\n**Project structure \u0026 documentation**\n\nThe [doc/](doc/) directory contains more documentation, such as a description of the [code structure](doc/Code-Structure.md) and an overview of the [state machine](doc/PairSonic-Protocol.md) used during the PairSonic exchange.\n\n**Localization (l10n)**\n\nLocalization strings are placed inside the [l10n](lib/l10n/) directory in language-specific `.arb` files. The Android Studio plugin [Flutter Intl](https://plugins.jetbrains.com/plugin/13666-flutter-intl) automatically compiles these files into Dart code and outputs it into the [generated/intl](lib/generated/intl/) directory.\n\nTo manually generate these Dart files, run `flutter pub global run intl_utils:generate` in the project root.\n\n## Powered by\nThe PairSonic protocol is based on the secure foundation of the excellent [SafeSlinger](https://doi.org/10.1145/2500423.2500428) protocol. PairSonic internally uses the [ggwave](https://github.com/ggerganov/ggwave) library for acoustic communication.\n\n## Authors\n- **Florentin Putz** ([email](mailto:fputz@seemoo.de), [web](https://fputz.net))\n- **Thomas Völkl**\n- **Maximilian Gehring**\n\n## References\n\n- Florentin Putz, Steffen Haesler, and Matthias Hollick. **Sounds Good? Fast and Secure Contact Exchange in Groups**. *Proc. ACM Hum.-Comput. Interact. 8, CSCW2*, 2024. (accepted for publication; soon at https://doi.org/10.1145/3686964) [[PDF](https://fputz.net/cscw24sounds/pdf/)]\n- Florentin Putz, Steffen Haesler, Thomas Völkl, Maximilian Gehring, Nils Rollshausen, and Matthias Hollick. **PairSonic: Helping Groups Securely Exchange Contact Information**. *Companion of the 2024 Computer-Supported Cooperative Work and Social Computing (CSCW Companion ’24)*, 2024. (accepted for publication; soon at https://doi.org/10.1145/3678884.3681818) [[PDF](https://fputz.net/cscw24pairsonic/pdf/)]\n\n\n## License\nPairSonic is released under the [Apache-2.0](LICENSE) license.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fseemoo-lab%2Fpairsonic","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fseemoo-lab%2Fpairsonic","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fseemoo-lab%2Fpairsonic/lists"}