{"id":42997590,"url":"https://github.com/crocs-muni/meesign-server","last_synced_at":"2026-01-31T03:35:14.248Z","repository":{"id":38329411,"uuid":"437875423","full_name":"crocs-muni/meesign-server","owner":"crocs-muni","description":null,"archived":false,"fork":false,"pushed_at":"2026-01-30T09:23:37.000Z","size":1014,"stargazers_count":12,"open_issues_count":6,"forks_count":8,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-01-31T01:12:51.835Z","etag":null,"topics":["cryptography","threshold-cryptography"],"latest_commit_sha":null,"homepage":"https://meesign.crocs.fi.muni.cz/","language":"Rust","has_issues":true,"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/crocs-muni.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-12-13T13:02:49.000Z","updated_at":"2026-01-07T09:39:45.000Z","dependencies_parsed_at":"2023-02-18T12:46:09.063Z","dependency_job_id":"579a97fe-e00e-49a3-911b-c796f0f1c645","html_url":"https://github.com/crocs-muni/meesign-server","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/crocs-muni/meesign-server","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crocs-muni%2Fmeesign-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crocs-muni%2Fmeesign-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crocs-muni%2Fmeesign-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crocs-muni%2Fmeesign-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/crocs-muni","download_url":"https://codeload.github.com/crocs-muni/meesign-server/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crocs-muni%2Fmeesign-server/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28928148,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-31T02:59:34.861Z","status":"ssl_error","status_checked_at":"2026-01-31T02:59:05.369Z","response_time":128,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["cryptography","threshold-cryptography"],"created_at":"2026-01-31T03:35:14.151Z","updated_at":"2026-01-31T03:35:14.240Z","avatar_url":"https://github.com/crocs-muni.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# MeeSign Server\n\nServer-side implementation for the MeeSign system. You can find more\ninformation about this project on its\n[homepage](https://meesign.crocs.fi.muni.cz/).\n\n## Usage\n\nThe MeeSign server requires PostgreSQL database instance. There are several\nways of running the server and the database instance, for most of which we use\nDocker and run the components inside dedicated containers. However, customized\ndeployment scenarios are possible.\n\n### Published Docker containers\n\nIf you have Docker installed, you can start both the MeeSign Server and the\nPostgreSQL database as Docker containers using Docker Compose.\n\n1. First, you need to generate the private keys and certificates for the\n   MeeSign server and the credentials for the Postgres database:\n\n    ```bash\n    bash generate_keys.sh\n    bash generate_db_credentials.sh\n\n2. Then you can start the Docker services, \n\n    ```bash\n    docker compose --file compose.base.yaml --file compose.deploy.yaml  up --detach\n    ```\n\n    In case the `up` sub-command fails, try cleaning up the previous containers\n    with (and try bringing it `up` again):\n\n    ```bash\n    docker compose -f compose.base.yaml -f compose.deploy.yaml down --volumes --remove-orphans\n    docker compose -f compose.base.yaml -f compose.deploy.yaml  up --detach\n    ```\n    The Docker image for MeeSign Server is pulled from the [Docker\n    hub](https://hub.docker.com/r/crocsmuni/meesign). In `compose.deploy.yaml` you can\n    specify whether to use `latest` (or other stable version), or `nightly`\n    (the bleeding edge, but unstable) version of the `crocsmuni/meesign` Docker\n    image. If you wish to start the MeeSign server from the local sources, you\n    need to update the `meesign-server` service in `compose.deploy.yaml` with:\n\n    ```yaml\n    services:\n      ... \n      meesign-server:\n        build:\n          context: .\n          dockerfile: Dockerfile\n    ```\n\n    For testing local sources, see **Integration Tests** section below.\n\nOnce up, the MeeSign should be available on `localhost` on port `1337`. The\ndata stored in the database container should be accessible outside the\ncontainers. For example, on Linux look for (root privileges might be required):\n\n```bash\nls /var/lib/Docker/volumes/meesign-deploy_db-data/\nbase          pg_dynshmem    pg_logical    pg_replslot   pg_stat      pg_tblspc    pg_wal                postgresql.conf\nglobal        pg_hba.conf    pg_multixact  pg_serial     pg_stat_tmp  pg_twophase  pg_xact               postmaster.opts\npg_commit_ts  pg_ident.conf  pg_notify     pg_snapshots  pg_subtrans  PG_VERSION   postgresql.auto.conf  postmaster.pid\n```\n\n### Build from source\n\nMeeSign server itself can also be built directly from source.\n\n1. [Install Rust](https://www.rust-lang.org/tools/install) and OpenSSL.\n\n2. Clone this repository and navigate to the project:\n\n   ```bash\n   git clone https://github.com/crocs-muni/meesign-server\n   cd meesign-server\n   ```\n\n3. Generate private keys and certificates and store them in `./keys` directory:\n\n   ```bash\n   bash generate_keys.sh\n   ```\n\n4. [Prepare MeeSignHelper](https://github.com/dufkan/meesign-helper) to support PDF signing.\n\nNow, the MeeSign server binary can be built with `cargo build`. In order to run\nthe server, a Postgres database is required. If you want to use custom Postgres\ndatabase, it's enough to set `DATABASE_URL` enviromental variable before\nstarting the server. For example:\n\n```bash\nexport DATABASE_URL=\"postgres://user:password@localhost:5432/database\"\n```\n\nOtherwise, you can start a Postgres database in a Docker cotainer.\n\n5. Generate the PostgreSQL database connection credentials and store them in\n   the `./.env` file. You can use `--force` to regenerate the credentials:\n\n   ```bash\n   bash generate_db_credentials.sh\n   ```\n\n6. Start PostgreSQL database server in a Docker container. You can use\n   different versions by editing `postgres:{version}` (e.g., `postgres:latest`\n   for the latest build):\n\n   ```bash\n   docker run --env-file ./.env --restart always --name meesign-postgres --user postgres --publish 5432:5432 postgres:17\n   ```\n\n7. Build and run the server (use `--release` for optimized build):\n\n   ```bash\n   cargo run\n   ```\n\n### Development and tests\n\nThere are three layers of tests available. Standard Rust unit tests, database\ntests, and integration tests (without the GUI).\n\n#### Unit tests\n\nTo execute unit tests (excluding tests that require database), simply run `cargo test`.\n\n#### Database tests\n\nDatabase tests require an instance of PostgresSQL database. To simplify the\ndatabase tests setup and achieve isolation of individual tests, we are using\n[Testcontainers](https://testcontainers.com/), in particular, the Rust\n[modules](https://github.com/testcontainers/testcontainers-rs-modules-community/).\nEach `db-tests` has access to an ephemeral PostgresSQL database in an ephemeral\nDocker container. The database tests are _hidden_ behind a feature flag\n`db-tests`, that otherwise has no usage. Database tests cannot be executed\nwithout the other unit tests. Thus, to run all tests do:\n\n```bash\ncargo run --features db-tests\n```\n\nIn case you would like to test against another database in tests, you can set\nthe enviromental variable `TEST_DATABASE_URL`, for example:\n\n```bash\nexport TEST_DATABASE_URL=postgres://meesign:mysecretpassword@localhost:5433/meesign\n```\n\n#### Integration tests\n\nIntegration tests of MeeSign Server against the [MeeSign\nClient](https://github.com/crocs-muni/meesign-client.git). For integration\ntests, static keys and certificates in `integration-tests/keys` and static\ndatabase credentials in `integration-tests/.env` are used. There is a\nconvenience script `run_integration_tests.sh`. When executed without any\nparameters, all of the [client\ntests](https://github.com/crocs-muni/meesign-client/blob/main/meesign_core/test/core_test.dart)\nare executed.\n\n```bash\n./run_integration_tests.sh\n```\n\nIn case the test containers don't boot up properly, for example with the following error\n\n```text\nError response from daemon: network {some-hash} not found\n```\nthen you can try to bring all test containers down, and try again\n\n```bash\n./run_integration_tests.sh down\n./run_integration_tests.sh\n```\n\nIntegration tests filtering is possible with [Test Path\nQueries](https://pub.dev/packages/test#test-path-queries), similarly to when\ncalling Dart test directly. For example, to call 2-out-of-3 group setting for\n[signing\nPDF](https://github.com/crocs-muni/meesign-client/blob/main/meesign_core/test/core_test.dart#L220)\nand challenge\n([GG18](https://github.com/crocs-muni/meesign-client/blob/main/meesign_core/test/core_test.dart#L226C26-L228)\nand\n[FROST](https://github.com/crocs-muni/meesign-client/blob/main/meesign_core/test/core_test.dart#L240-L241)),\nrun:\n\n```bash\n./run_integration_tests.sh --name \"sign|challenge\" --name \"2-3\"\n```\n\nThe `run_integration_tests.sh` is just a thin wrapper around `docker compose`.\nDocker compose provides more options, which might be needed when running\nintegration tests. In particular, the `docker compose config` sub-command is\nhandy when debugging the overriding the `./compose.base.yaml` with\n`./integration-tests/compose.yaml`. Especially, be aware of the [enviromental\nvariables\nprecedence](https://docs.docker.com/compose/how-tos/environment-variables/envvars-precedence/)\nin Docker Compose.\n\n## Acknowledgements\n\n* This work was supported by the Ministry of the Interior of the Czech Republic under grant VJ01010084 in program IMPAKT I.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcrocs-muni%2Fmeesign-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcrocs-muni%2Fmeesign-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcrocs-muni%2Fmeesign-server/lists"}