{"id":18425825,"url":"https://github.com/faforever/uid","last_synced_at":"2025-08-24T21:18:48.690Z","repository":{"id":75007087,"uuid":"56635802","full_name":"FAForever/uid","owner":"FAForever","description":null,"archived":false,"fork":false,"pushed_at":"2024-06-04T18:18:59.000Z","size":1091,"stargazers_count":2,"open_issues_count":2,"forks_count":4,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-04-07T16:41:15.703Z","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":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/FAForever.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":"2016-04-19T22:10:59.000Z","updated_at":"2024-06-03T11:51:59.000Z","dependencies_parsed_at":"2025-04-07T16:39:55.973Z","dependency_job_id":"8ea18293-75d1-4d49-ba7b-a4db4bdb3f9b","html_url":"https://github.com/FAForever/uid","commit_stats":null,"previous_names":[],"tags_count":47,"template":false,"template_full_name":null,"purl":"pkg:github/FAForever/uid","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FAForever%2Fuid","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FAForever%2Fuid/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FAForever%2Fuid/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FAForever%2Fuid/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/FAForever","download_url":"https://codeload.github.com/FAForever/uid/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FAForever%2Fuid/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271953140,"owners_count":24849290,"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-08-24T02:00:11.135Z","response_time":111,"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":[],"created_at":"2024-11-06T05:05:54.993Z","updated_at":"2025-08-24T21:18:48.631Z","avatar_url":"https://github.com/FAForever.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# FA Forever unique id implementation\n\nThis executable collects RSA encrypted user information.\n\nIt is used in the [FA Forever](http://www.faforever.com/) [client](https://github.com/FAForever/client) ([or this one](https://github.com/FAForever/downlords-faf-client)) to prevent [smurfing](http://www.urbandictionary.com/define.php?term=smurfing).\n\n[![Travis](https://travis-ci.org/FAForever/uid.svg?branch=master)](https://travis-ci.org/FAForever/uid)\n\n\n## Key generation instructions\n\nCreate a 2048 bit RSA key using openssl:\n```\nopenssl genrsa -out faf_priv.pem 2048\n```\n\nCreate the public key part which is stored encrypted in this repo:\n```\nopenssl rsa -in faf_priv.pem -pubout -out faf_pub.pem\n```\n\nNow generate the UID_PUBKEY_BYTES string variable you need to pass to CMake with\n```\n./encode_openssl_modulus.py `openssl rsa -noout -inform PEM -in faf_pub.pem -pubin -modulus`\n```\nwhich should result in\n```\n200,172,159,159,117,211,197,121,7,80,96,139,82,253,240,67,219,77,244,65,25,119,3,147,242,142,113,95,120,226,30,104,158,211,48,73,96,59,85,198,183,199,146,127,140,87,183,110,75,173,39,218,35,146,181,21,115,29,238,23,204,109,15,252,99,204,103,130,138,78,12,7,65,20,247,29,195,136,20,53,200,221,58,114,11,170,65,151,100,61,139,170,244,158,7,192,99,91,142,217,139,253,106,198,180,112,173,49,106,90,121,163,2,24,206,176,198,187,35,37,111,218,197,202,247,139,30,126,152,38,34,73,25,199,10,194,12,196,144,195,98,48,149,14,219,39,182,154,73,246,96,81,152,95,163,251,8,117,35,226,61,16,164,190,128,239,187,122,78,102,209,233,11,126,80,71,187,78,239,28,48,175,91,51,100,83,165,203,222,119,117,138,82,131,199,90,134,250,62,51,231,180,158,11,109,138,75,37,221,145,184,14,177,203,192,191,48,25,159,137,191,252,5,174,209,207,247,198,32,56,152,65,134,251,180,147,36,250,95,50,253,103,240,3,100,211,86,117,5,63,205,61,176,76,48,209\n```\nfor the provided example keyfile `faf_priv_example.pem`.\n\nThe private key must be supplied to the server as base64 encoded DER encoded environment variable FAF_PRIVATE_KEY you can generate with\n```\nopenssl rsa -inform PEM -in ./faf_priv.pem -outform DER | openssl enc -base64\n```\n\n## Build instructions\nYou need:\n* [CMake](https://cmake.org/)\n* [Crypto++](https://www.cryptopp.com/)\n* [JsonCpp](https://open-source-parsers.github.io/jsoncpp-docs/doxygen/index.html)\n* a recent C++ compiler\n* [UID_PUBKEY_BYTES bytes string](## Key generation instructions)\n\nExample build commandline script:\n```bash\nmkdir build\ncd build\ncmake \\\n  -DJSONCPP_LIBRARIES=/path/to/libjsoncpp.a \\\n  -DJSONCPP_INCLUDE_DIRS=/path/to/jsoncpp/include \\\n  -DCRYPTOPP_LIBRARIES=/path/to/libcryptopp.a \\\n  -DCRYPTOPP_INCLUDE_DIRS=/path/to/croptopp/include \\\n  -DUID_PUBKEY_BYTES=200,172,... \\\n  ..\nmake\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffaforever%2Fuid","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffaforever%2Fuid","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffaforever%2Fuid/lists"}