https://github.com/jorelosorio/go-signature
A command-line tool playground to encode, sign and decode data
https://github.com/jorelosorio/go-signature
cli containers docker go pem protocol-buffers rsa signatures
Last synced: 6 months ago
JSON representation
A command-line tool playground to encode, sign and decode data
- Host: GitHub
- URL: https://github.com/jorelosorio/go-signature
- Owner: jorelosorio
- Created: 2022-03-09T19:59:41.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2022-03-24T19:51:15.000Z (over 3 years ago)
- Last Synced: 2025-02-01T06:18:14.384Z (8 months ago)
- Topics: cli, containers, docker, go, pem, protocol-buffers, rsa, signatures
- Language: Go
- Homepage:
- Size: 55.7 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Go Signature
This project is the result of learning `Signatures` for packing and signing messages that may be sent out to a **-third-party-server-** to validate the authenticity and trust of the content.
> NOTE: This project does not send the data to any server, but both roles are assumed in this solution.
This project makes a CLI tool to make it easy to test the encoding, decoding and signing features.
## Try it
> Use it now with a Docker instance. It will open an interactive shell where you can start to play with some commands. Please refer to `How to use the command CLI tool` below, for more details.
docker pull jorelosorio/go-signature:latest
docker run -i -t jorelosorio/go-signature
## How to use the command CLI tool
To create a new pair of private and public keys and export them as `private_key.pem` and `public_key.pem`
sign create-keys --export-path .
To encode a new message
sign encode-message --sender "Jorge Osorio" --payload "HOLA" --private-key-path ./private_key.pem
To encode a new message importing the `payload` from a file
sign encode-message --sender "Jorge Osorio" --payload-path ./payload.txt --private-key-path ./private_key.pem
To decode a new message
sign decode-message --public-key-path ./public_key.pem --base64-message {BASE64_ENCODED_CONTAINER_DATA}
> If you want more details about a specific command usage use `--help` argument. For instance: `sign encode-message --help` . For general information run `sign --help`. There are also shortcuts for the commands in the help description.
## Tools
- GoLang `1.17`
- Docker
- Visual Studio Code `Optional!`
> It requires a `Remote - Containers` extension. for more information please refers to: https://code.visualstudio.com/docs/remote/containers#_getting-started
- Protocol Buffers `3.19.4`
> For more about what Protocol Buffers is please refer to: https://developers.google.com/protocol-buffers/docs/overview## Data structure
A `Message` struct has the following attributes.
```
Sender (String)
Payload (Bytes)
```A * `Container` struct has the following attributes.
```
Signature (Bytes)
Message (Message)
```> \* `Container` is the main structure to be sent, because it contains the message to be transported and the signature associated with it, **When validating the authenticity it shall be made with the message**.
## Development
This project contains a `Dockerfile` file with all required dependencies to run it using `Visual Studio Code` + `Remote - Containers` extension.
However, if you want to make it run locally in your development machine, please follow the instructions below.### Install Go
Install it from https://go.dev/dl/
### Protocol Buffers for Go
To install the `Protocol Buffers` compiler select the right OS and architecture from https://github.com/protocolbuffers/protobuf/releases/tag/v3.19.4 and follow the commands.
> NOTE: Replace `protoc-3.19.4-linux-x86_64.zip` by your right configuration, **For the purpose of this project, we are using a Linux machine inside a docker container**. To get more information about other options and platforms please refer to https://github.com/protocolbuffers/protobuf/blob/master/src/README.md
wget https://github.com/protocolbuffers/protobuf/releases/download/v3.19.4/protoc-3.19.4-linux-x86_64.zip
unzip protoc-3.19.4-linux-x86_64.zip -d /usr/local
rm protoc-3.19.4-linux-x86_64.zip
Run the following command to install the Go protocol buffers plugin
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
> NOTE: To get more information about Protocol Buffers in Go, please referes to: https://developers.google.com/protocol-buffers/docs/gotutorial and https://github.com/protocolbuffers/protobuf-go
### Data generation
Only required if you add/remove new fields
protoc --go_out=. proto/*.proto
### Build the command CLI tool
In the main workspace path run the following command to generate a build executable
go build -o bin/sign
> **If you are using windows the `sign` will become `sign.exe` instead.**
### Build Docker
To build the docker image use `Dockerfile.deploy` and the command
docker build -f Dockerfile.deploy -t jorelosorio/go-signature:latest .
To run the docker image as an interactive shell
docker run -i -t jorelosorio/go-signature
If everything goes well run:
sign --help