{"id":28509431,"url":"https://github.com/codenotary/immuch","last_synced_at":"2025-09-25T13:31:40.669Z","repository":{"id":265473628,"uuid":"665454120","full_name":"codenotary/immuch","owner":"codenotary","description":"immuch is a tool written in Golang for secure communication backed by immudb Vault service.","archived":false,"fork":false,"pushed_at":"2023-07-17T14:42:17.000Z","size":115,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-06-26T06:51:48.466Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Go","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/codenotary.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}},"created_at":"2023-07-12T08:37:02.000Z","updated_at":"2024-04-26T04:27:54.000Z","dependencies_parsed_at":"2024-11-29T22:16:17.354Z","dependency_job_id":null,"html_url":"https://github.com/codenotary/immuch","commit_stats":null,"previous_names":["codenotary/immuch"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/codenotary/immuch","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codenotary%2Fimmuch","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codenotary%2Fimmuch/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codenotary%2Fimmuch/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codenotary%2Fimmuch/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/codenotary","download_url":"https://codeload.github.com/codenotary/immuch/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codenotary%2Fimmuch/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263243621,"owners_count":23436336,"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":"2025-06-08T22:08:29.648Z","updated_at":"2025-09-25T13:31:40.563Z","avatar_url":"https://github.com/codenotary.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# immuCh - Immutable Communication Channel Tool\n\nimmuch is a tool written in Golang for secure communication backed by [immudb Vault service](https://vault.immudb.io/). It implements a simple message sending and receiving while guaranteeing tamperproof exchange.\n\nMessage can be sent either in plain text, encrypted with a symmetric AES key, or making use of PGP public/private key infrastructure.\n\n## What you need to fire it up\n1. Register on [https://vault.immudb.io/](https://vault.immudb.io/) and get your API key\n2. Exchange your *read*  (not the write key!) API key with the other party\n3. (Optional but recommended) Generate your AES or PGP keys for message encryption\n4. Get the immuch by building it from source or getting an already compiled binary\n\n## Generating keys\nTo keep your data secure we encourage you to use an additional security layer by using your own encryption keys either AES or PGP.\n\n### Generating AES key\nAES (Advanced Encryption Standard) is a symmetric block cipher standardized by NIST. It has a fixed data block size of 16 bytes. Its keys can be 128, 192, or 256 bits long.\n\nGiven the above you can start with a key with a length of 16 characters\n```\ndate +%s | sha256sum | base64 | head -c 16 ; echo\n```\n\n### Generating a PGP key\nStart with generating a new key pair. You will be asked to protect it with a password\n```\ngpg --gen-key\n```\n\nExport the public and private keys as separated files from the `pubring.kbx` keyring\n```\ngpg --export \"Kristaps \u003ckristaps@codenotary.com\u003e\" \u003e ~/.gnupg/pubkey.asc\ngpg --export-secret-key \"Kristaps \u003ckristaps@codenotary.com\u003e\" \u003e ~/.gnupg/private.gpg\n```\n## Running it\nFirst, you will need to setup your environment based on the encryption chosen. Running the `setup` command allows you to make up your configuration.\n\n```\n./immuch -h\n\nimmuch is a secure CLI messager making use of immudb Vault as a backend:\n\nIt enables two parties to communicate securely by using a trusted central authority for exchanging their messages.\n\nimmudb Vault guarantees the integrity of contents saved by mathematical proof.\n\nUsage:\n  immuch [command]\n\nAvailable Commands:\n  completion  Generate the autocompletion script for the specified shell\n  help        Help about any command\n  receive     Receive an immutable message\n  send        Send out an immutable message\n  setup       Setup your configuration\n\nFlags:\n      --config string   config file (default is $HOME/.immuch.yaml)\n  -h, --help            help for immuch\n  -t, --toggle          Help message for toggle\n      --verbose         enable verbose output\n```\n\nYou can start simply by just setting your API key for Vault\n```\n./immuch setup --vault-key \u003cyour-vault-key\u003e\n\n./immuch send \"Hi there!\"\nUsing config file: /home/u/.immuch.yaml\n2023/07/12 11:09:34 !!! sending in plain text\nWednesday, 12-Jul-23 11:09:34 EEST sent: anonymous ---\u003e Hi there!\n```\n\nTo receive the message on the other end just use the `receive` command\n```\n./immuch receive\nUsing config file: /home/u/.immuch.yaml\nWednesday, 12-Jul-23 11:09:34 EEST received: anonymous ---\u003e Hi there!\n\n```\n\nTo make use of AES encryption add the required configuration based on your generated AES key and set the flag to encrypt it\n```\n./immuch setup --enc-aes ZTg5MGM4NzM1MDFm\n\n/immuch send \"Hi there encrypted with AES\" --encrypt-aes\nUsing config file: /home/u/.immuch.yaml\nWednesday, 12-Jul-23 11:14:30 EEST sent: anonymous ---\u003e Hi there encrypted with AES\n```\n\nTo receive it back once again just use the `receive` command. It will automatically recognize the type of encryption as long as you have your key configured on the receiving end.\n```\n./immuch receive\nUsing config file: /home/u/.immuch.yaml\nWednesday, 12-Jul-23 11:14:30 EEST received: anonymous ---\u003e Hi there encrypted with AES\n```\n\nTo enable encryption with PGP keys configure the ImmuCh tool with the following parameters.\n```\n./immuch setup --enc-pgp-pub ~/.gnupg/pubkey.asc --enc-pgp-priv ~/.gnupg/private.gpg --enc-pgp-passphrase password123\n\n./immuch send \"hi pgp encrypted 1\" --encrypt-pgp\nUsing config file: /home/u/.immuch.yaml\nWednesday, 12-Jul-23 11:26:53 EEST sent: anonymous ---\u003e Hi! This is PGP encrypted\n\n./immuch receive\nUsing config file: /home/u/.immuch.yaml\nWednesday, 12-Jul-23 11:26:53 EEST received: anonymous ---\u003e Hi! This is PGP encrypted\n```\n\nAs you can see all the previous messages were sent without any identity. This can be simply configured with the `--identity` flag within the setup.\n```\n./immuch setup --identity Kristaps\n```\n\nThe configuration, in the end, would look like this\n```\ncat ~/.immuch.yaml\nenc_key_aes: ZTg5MGM4NzM1MDFm\nenc_key_pgp_passphrase: 3iy6d17qFbFV5h/mUkXtm2Z3s85rfi971N27+0iH68IZNtWWpMIp\nenc_key_pgp_priv: /home/u/.gnupg/private.gpg\nenc_key_pgp_pub: /home/u/.gnupg/pubkey.asc\nidentity: Kristaps\nseckey: wnbBJbRkS26L4HHuuzwJLg==\nvault_key: \u003cvault-key-here\u003e\n```\n\n## How it looks in immudb Vault\n\n![immuch](img/ui_data_struct.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodenotary%2Fimmuch","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcodenotary%2Fimmuch","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodenotary%2Fimmuch/lists"}