{"id":20101044,"url":"https://github.com/fkie-cad/s-chat","last_synced_at":"2025-10-10T12:40:27.386Z","repository":{"id":88149107,"uuid":"427996231","full_name":"fkie-cad/s-chat","owner":"fkie-cad","description":"SSL/TLS chat app","archived":false,"fork":false,"pushed_at":"2022-07-06T08:23:26.000Z","size":318,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-02T17:14:45.172Z","etag":null,"topics":["chat","communication","gui","ssl","tls"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fkie-cad.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-11-14T17:35:33.000Z","updated_at":"2021-12-12T13:15:49.000Z","dependencies_parsed_at":"2023-03-07T05:15:38.010Z","dependency_job_id":null,"html_url":"https://github.com/fkie-cad/s-chat","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/fkie-cad/s-chat","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fkie-cad%2Fs-chat","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fkie-cad%2Fs-chat/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fkie-cad%2Fs-chat/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fkie-cad%2Fs-chat/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fkie-cad","download_url":"https://codeload.github.com/fkie-cad/s-chat/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fkie-cad%2Fs-chat/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279003892,"owners_count":26083641,"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-10T02:00:06.843Z","response_time":62,"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":["chat","communication","gui","ssl","tls"],"created_at":"2024-11-13T17:23:03.598Z","updated_at":"2025-10-10T12:40:27.360Z","avatar_url":"https://github.com/fkie-cad.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SChat (Duo)\n\nSecure TLS/SSL Windows E2E Chat.  \nCurrently just supporting TLS 1.2 due to Windows SChannel restrictions.\n\n## Version ##\n1.1.0  \nLast changed: 09.05.2022\n\n## Descrtiption\nGUI chat application that connects two communication partners directly over TCP using TLS 1.2.\nThe GUI is very *basic* at the moment but is work in progress.\n\n## Usage\nOne user plays the server and the other user has to connect to that server.  \nBoth sides need a valid certificate stored in the local user cert store.\nOn Windows 10, the maximum possible security is TLS 1.2 with a RSA certificate. \nThe Length can be of 8192 bit or even 16384 bit. \n16384 RSA might trigger network anomaly detection. \nThe edward curve and/or TLS 1.3 is not available for usage on Windows 10 OS.\n\nThe server side has to make it's ip and port reachable for the client.\nThis may be done in the router settings or elsewhere.\n\n## Requirements\n- msbuild tools\n\n## Build\n\n### Windows msbuild in developer cmd\n**easy**\n```bash\n$devcmd\u003e build.bat [/sc] [/d] [/r] [/dp] [/dphd] [/dpm] [/pdb]\n```\nTargets:\n- /sc: Build sChat.\n\nBuild modes:\n- /d: Build in debug mode.\n- /r: Build in release mode.\n- /b: Bitness of exe. 32^|64. Default: 64.\n- /rtl: Build with statically include runtime libs.\n- /pdb: Compile release version with pdbs. Default in debug version.\n\nFlags:\n- /dp: Debug print output.\n- /dphd: Extended hex dump debug print output.\n- /dpm: Messages are logged in the log file.\n\nOther:\n- /h: Print this.\n\n\n**wordy**\n```bash\n$devcmd\u003e msbuild [server.vcxproj|client.vcxproj] [/p:Platform=x86|x64] [/p:Configuration=Debug|Release] [/p:RunTimeLib=Debug|Release] [/p:DebugPrint=(1|2|4)] [/p:PDB=0|1]\n```\nOptions:\n - RunTimeLib: Statically include CRT debug or release runtime library.\n - DebugPrint: Show debug print for `1`, extendend hex dumps for `2` and message dump for `4`. \n   Theses are flags and may be combined by `or` / `+`.\n - PDB: Generate PDB files for `1`.\n\n## Run\n`SChat.exe` may be run by double clicking or via the cmd.\nStart options may be passed via the command line or a config file (recommended).\nThe config file is searched for in the current directory (out of which the application is started) and has to be named `.config`.\n\n**Usage:**\n```bash\n$ SChat.exe [/i ip] [/v vs] [/p port] [/n name] [/c certThumb] [/l logDir] [/d certDir] [/f fileDir]\n```\n**Options:**\n - /i string : The ip string.\n - /v int: The ip version 4 or 6 (default). Just needed, if ip is empty.\n - /p uint16 : The listening port number of the server.\n - /n string : The nick name.\n - /c string : Thumbprint of the cert in the local user cert store.\n - /l string : Directory to store the log files in. Defaults to current dir.\n - /d string : Directory to store the cert files in. Defaults to current dir.\n - /f string : Directory to store transfered files. Defaults to current dir.\n \n**Example:**\n```bash\n$ SChat.exe -i 123.456.789.876 -p 5432 -n alice -c aliceCertThumbPrint\n```\n\nThe cmd options can be skipped, because there are configuration fields in the app for them too.\n\nAfter starting, one partner has to play the **server** side.\n`User name`, `Port` and `Cert thumb` (thumbprint of the certificate) have to be filled with valid values.\nIp may be filled to make the server listen to only that IP.\nIf not filled, `IP Version` has to be set to `4` or `6`.\nThen the `Listen` button has to be pressed.\n\nThe **client** side has to fill `User name`, `Ip`, `Port` and `Cert thumb` (thumbprint of the certificate) with valid values and then press the `Connect` button.\n`IP Version` may be left empty.\n\nAfter that, the communication partners can start sending messages to each other by typing into the `Message` input and pressing `Enter` or the `Send` button.\n\nFiles can be sent by pressing the `File` button and browsing a file or by typing `/file path\\to\\the\\file` and then pressing `Enter` or `Send`.\nOn the receiving side, they are stored in the current directory (default).\n\nA log file will be created in the current working directory (default), \nnamed `\u003cSChat\u003e-\u003cdate\u003e-\u003ctime\u003e.log`, \nwhich will be filled with infos, depending on the debug print compiler flags.\n\nThe certificate of the other side is stored in `\u003csha1(cert)\u003e.der` in the current working directory (default).\nThe thumb hash (sha1) of the certificate is also displayed with the connection info in the message output.\nThis should by verified by calculating and comparing the hash with the communication partner or sharing it in advance!\n\nSince SChat works with user created (self-signed) certificates, \nthere is no internal trust check to the certificate of the other side (i.e. the *untrusted* error is skipped).\nThis is by design.\nTherefore, the validity of the certificate used by the other side has to be checked manually!\n\n\nThe directory where the log files, transferred file and certificate files are saved may be changed by using the gui, .config or cmd line options.\n\nAn example .config is located in [res/.config.example](res/.config.example).\n\nThe maximum size of messages, that can be displayed in the message window is 30.000 chars.\nIf it's filled up by 95% (28.500 chars) it will be freed by 20% of the maximum Size (6.000) chars from the beginning.\nCurrently there is no autosave option or safe button.\nThe deleted parts of the messages will be lost.\nThose safe options may be added in future versions though.\n\n\n## Create certificate\nAn easy way to create a certificate on Windows is to use Power Shell [New-SelfSignedCertificate][1]:\n\n```bash\nps\u003e New-SelfSignedCertificate -DnsName \u003cname\u003e -CertStoreLocation \"Cert:\\CurrentUser\\My\\\" -KeyAlgorithm RSA -KeyLength 8192 -HashAlgorithm SHA256\nps\u003e New-SelfSignedCertificate -DnsName \u003cname\u003e -CertStoreLocation \"Cert:\\CurrentUser\\My\\\" -KeyAlgorithm RSA -KeyLength (2048|4096|8192|16384) -HashAlgorithm (SHA256|SHA384|SHA512)\n[ps\u003e New-SelfSignedCertificate -DnsName \u003cname\u003e -CertStoreLocation \"Cert:\\CurrentUser\\My\\\" -KeyAlgorithm RSA_curve25519 -CurveExport CurveName] // doesn't work\nps\u003e New-SelfSignedCertificate -DnsName \u003cname\u003e -CertStoreLocation \"Cert:\\CurrentUser\\My\\\" -KeyAlgorithm RSA_brainpoolP(256|384|512)r1 -CurveExport CurveName\nps\u003e New-SelfSignedCertificate -DnsName \u003cname\u003e -CertStoreLocation \"Cert:\\CurrentUser\\My\\\" -KeyAlgorithm ECDSA_nistP(256|384|521) -CurveExport CurveName\n```\nDnsName may be any name and fills out `CN` and `Subject alternative name`.  \nCall help for more options:\n```bash\nps\u003e New-SelfSignedCertificate -?\n```\n\nValid curve names may be found with \n```bash\n$ certutil -displayEccCurve \n```\nJust entries with a `Curve OID` are valid. \nThat's why `RSA_curve25519` does not work (by default).\n\nAnother way is to generate a full .pfx certificate with `openssl` and import it into the local user store.\n(Importing an openssl ed25519 curve certificate does not work either!)\n\n[1]: https://docs.microsoft.com/en-us/powershell/module/pki/new-selfsignedcertificate?view=windowsserver2019-ps\n\n\n## List certificates in store with thumbprints\n```bash\nps\u003e Get-ChildItem \"Cert:\\CurrentUser\\My\"\n```\n\n## Open certificate store\n```bash\n$ mmc\n```\n`File \u003e Add/Remove Snap-in`, choose `Certificates` and the `Add \u003e `My user account`, `finish`, `Ok`.\nClick on `Certificates - Current User \u003e Personal \u003e Certificates`.\n\n\n## Questions, issues, bugs, security flaws, feature requests\nFeel free to open an issue.\n\n\n## COPYRIGHT, CREDITS \u0026 CONTACT\n### License\nPublished under [GNU GENERAL PUBLIC LICENSE](LICENSE).   \n\n### Author\n- Henning Braun ([henning.braun@fkie.fraunhofer.de](henning.braun@fkie.fraunhofer.de)) \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffkie-cad%2Fs-chat","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffkie-cad%2Fs-chat","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffkie-cad%2Fs-chat/lists"}