Pinki - Pinki helps developers ship software with authenticity

Pinki

Pinki helps developers ship software with authenticity.

Use it anywhere you would use gpg to sign and verify things.

Features

  • Easy to use
  • Portable, standalone binary
  • Anonymous -- a key is just a key, nothing more
  • Doesn't touch your filesystem
  • Reads and writes standard PEM-wrapped ASN.1 (compatible with X.509, GPG)

Installing

Precompiled Binaries

Visit Releases to download a precompiled binary for your system.

Verifying Binaries

All releases are signed using the following release signing key:

-----BEGIN PUBLIC KEY-----
MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEdDOWMNxI5f88Yck8WNcPsxDOwMbzoU/Y
cZhfoR+gwGi0wRoSscWA1xy1BQTG6PNrQlvLJbfm2vAIAImnyMmhoKS3hwcO6F+5
4QjLZQJAQHZ6G7c842gYRSnwLLQ2GIvj
-----END PUBLIC KEY-----

Each release binary has a corresponding file with an .asc prefix containing the signature for that file.

Here's an example of how you could use Pinki to verify itself.

๐Ÿ’ก In practice, you probably want to use another tool to verify Pinki itself the first time you download it. Once you have a genuine copy of pinki, then you can use it to verify updates to itself.

# Download Pinki for Linux (64-bit)
$ curl -sSL -o pinki https://releases.twuni.dev/pinki/latest/linux-amd64/pinki

# Use Pinki to verify itself
$ ./pinki verify "$(curl -sSL https://releases.twuni.dev/verify.pem)" "$(curl -sSL https://releases.twuni.dev/pinki/latest/linux-amd64/pinki.asc)" < pinki

If you get an output of OK, the signature is valid.

Building from source

Already have go? Clone this repo and run go build.

Usage

Pinki is designed to make it easy for you to do one of two things:

  • Sign your software so other people can verify its authenticity, or

  • Verify the authenticity of software you are using when the developers are using Pinki.

Signing your software with Pinki

First, you'll need a private key. To create a new key with the recommended (default) options:

$ pinki key create
-----BEGIN PRIVATE KEY-----
...............................................................
...............................................................
...............................................................
-----END PRIVATE KEY-----

Save the output somewhere safe. Put it in your password manager, vault, or whatever you are using to keep sensitive information safe.

Once you have a private key, you will need to export that in a way that is safe for people to verify your signatures:

$ pinki key export < /path/to/your-pinki-private-key
-----BEGIN PUBLIC KEY-----
...............................................................
...............................................................
-----END PUBLIC KEY-----

Publish this public key somewhere that anyone you want to be able to verify your signatures is able to access it. You can commit it to your source code repo, publish it to your website, etc.

๐Ÿ’ก The public key is not sensitive! You can safely share it with anyone.

Now that you have a private key, you're ready to sign your first thing!

$ pinki sign "$(cat /path/to/your-pinki-private-key)" < /path/to/your-thing-1.2.3.tar.gz
-----BEGIN SIGNATURE-----
...............................................................
...............................................................
-----END SIGNATURE-----

Publish that signature any way you like. Conventionally, you might want to publish it as a file with the same name as the thing you've signed, but with a .sig suffix. So foo-1.0.tgz would have its signature in foo-1.0.tgz.sig. The choice is up to you.

Verifying a signature with Pinki

To verify a signature, you'll need three things:

  • The thing that was signed (e.g: foo-1.2.3.tgz)
  • The signature (e.g: foo-1.2.3.tgz.asc)
  • The public key of the signer (e.g: foomaker-signing-key.pem)

Check the release notes or installation/verification documentation of the thing you're trying to verify for more details on where to find these things.

Once you have them, here's how you verify the thing is authentic!

$ pinki verify "$(cat /path/to/signing-key)" "$(cat /path/to/signature)" < /path/to/thing-that-was-signed
OK

The command will exit with status code 0 and print "OK" on success. Otherwise, it will exit with status code 1 and print an error message.

Similar Resources

Litmus helps Kubernetes SREs and developers practice chaos engineering in a Kubernetes native way.

Litmus helps Kubernetes SREs and developers practice chaos engineering in a Kubernetes native way.

Litmus Cloud-Native Chaos Engineering Read this in other languages. ๐Ÿ‡ฐ๐Ÿ‡ท ๐Ÿ‡จ๐Ÿ‡ณ ๐Ÿ‡ง๐Ÿ‡ท ๐Ÿ‡ฎ๐Ÿ‡ณ Overview Litmus is a toolset to do cloud-native chaos engineer

Jan 1, 2023

ControllerMesh is a solution that helps developers manage their controllers/operators better.

ControllerMesh is a solution that helps developers manage their controllers/operators better.

ControllerMesh ControllerMesh is a solution that helps developers manage their controllers/operators better. Key Features Canary update: the controlle

Jan 6, 2023

SigNoz helps developers monitor their applications & troubleshoot problems, an open-source alternative to DataDog, NewRelic, etc. ๐Ÿ”ฅ ๐Ÿ–ฅ. ๐Ÿ‘‰ Open source Application Performance Monitoring (APM) & Observability tool

SigNoz helps developers monitor their applications & troubleshoot problems, an open-source alternative to DataDog, NewRelic, etc. ๐Ÿ”ฅ ๐Ÿ–ฅ.   ๐Ÿ‘‰  Open source Application Performance Monitoring (APM) & Observability tool

Monitor your applications and troubleshoot problems in your deployed applications, an open-source alternative to DataDog, New Relic, etc. Documentatio

Sep 24, 2021

The Oracle Database Operator for Kubernetes (a.k.a. OraOperator) helps developers, DBAs, DevOps and GitOps teams reduce the time and complexity of deploying and managing Oracle Databases

The Oracle Database Operator for Kubernetes (a.k.a. OraOperator) helps developers, DBAs, DevOps and GitOps teams reduce the time and complexity of deploying and managing Oracle Databases. It eliminates the dependency on a human operator or administrator for the majority of database operations.

Dec 14, 2022

Give developers an easy way to create and integrate bank processing into their own software products

Give developers an easy way to create and integrate bank processing into their own software products

Community ยท Blog moov-io/bankcron Moov's mission is to give developers an easy way to create and integrate bank processing into their own software pro

Sep 27, 2022

A STOMP Client package for go developers, supporting all STOMP specification levels.

stompngo - A STOMP 1.0, 1.1 and 1.2 Client Package Features Full support of STOMP protocols: Protocol Level 1.0 Protocol Level 1.1 Protocol Level 1.2

Oct 19, 2022

A local webserver for developers

 A local webserver for developers

devd: a local webserver for developers Install Go to the releases page, download the package for your OS, and copy the binary to somewhere on your PAT

Dec 27, 2022

Lightweight service virtualization/API simulation tool for developers and testers

Lightweight service virtualization/API simulation tool for developers and testers

API simulations for development and testing Hoverfly is a lightweight, open source API simulation tool. Using Hoverfly, you can create realistic simul

Dec 28, 2022

Go library for accessing trending repositories and developers at Github.

Go library for accessing trending repositories and developers at Github.

go-trending A package to retrieve trending repositories and developers from Github written in golang. This package were inspired by rochefort/git-tren

Dec 21, 2022

:bento: Highly Configurable Terminal Dashboard for Developers and Creators

:bento: Highly Configurable Terminal Dashboard for Developers and Creators

DevDash is a highly configurable terminal dashboard for developers and creators who want to choose and display the most up-to-date metrics they need,

Jan 3, 2023

โšก๏ธ A dev tool for microservice developers to run local applications and/or forward others from/to Kubernetes SSH or TCP

โšก๏ธ A dev tool for microservice developers to run local applications and/or forward others from/to Kubernetes SSH or TCP

Your new microservice development environment friend. This CLI tool allows you to define a configuration to work with both local applications (Go, Nod

Jan 4, 2023

Casbin-forum is the official forum for Casbin developers and users.

Casbin-forum is the official forum for Casbin developers and users. Link https://forum.casbin.com/ Architecture Casbin-forum contains 2 p

Jan 3, 2023

Procmon is a Linux reimagining of the classic Procmon tool from the Sysinternals suite of tools for Windows. Procmon provides a convenient and efficient way for Linux developers to trace the syscall activity on the system.

Procmon is a Linux reimagining of the classic Procmon tool from the Sysinternals suite of tools for Windows. Procmon provides a convenient and efficient way for Linux developers to trace the syscall activity on the system.

Process Monitor for Linux (Preview) Process Monitor (Procmon) is a Linux reimagining of the classic Procmon tool from the Sysinternals suite of tools

Dec 29, 2022

screen sharing for developers https://screego.net/

screen sharing for developers https://screego.net/

screego/server screen sharing for developers Huge thanks to sipgate for sponsoring this project! Intro In the past I've had some problems sharing my s

Jan 1, 2023

Idiomatic nmap library for go developers

Idiomatic nmap library for go developers

nmap This library aims at providing idiomatic nmap bindings for go developers, in order to make it easier to write security audit tools using golang.

Jan 6, 2023

Golang-WASM provides a simple idiomatic, and comprehensive API and bindings for working with WebAssembly for Go and JavaScript developers

Golang-WASM provides a simple idiomatic, and comprehensive API and bindings for working with WebAssembly for Go and JavaScript developers

A bridge and bindings for JS DOM API with Go WebAssembly. Written by Team Ortix - Hamza Ali and Chan Wen Xu. GOOS=js GOARCH=wasm go get -u github.com/

Dec 22, 2022

pure go, cross-platform, MIT-licensed ui toolkit for developers

pure go, cross-platform, MIT-licensed ui toolkit for developers

duit - developer ui toolkit WARNING: this library is work in progress. backwards incompatible changes will be made. details duit is a pure go (*), cro

Dec 24, 2022

k6 is a modern load testing tool for developers and testers in the DevOps era.

k6 is a modern load testing tool for developers and testers in the DevOps era.

k6 is a modern load testing tool, building on our years of experience in the load and performance testing industry. It provides a clean, approachable scripting API, local and cloud execution, and flexible configuration.

Jan 8, 2023

Teller - the open-source universal secret manager for developers

 Teller - the open-source universal secret manager for developers

A secrets management tool for developers built in Go - never leave your command line for secrets.

Jan 8, 2023
Comments
  • pinki promise: p2p encryption

    pinki promise: p2p encryption

    add a command to derive a symmetric key from one private key and another public key (dh). more useful still would be to conveniently support encrypting and decrypting messages using that derived symmetric key.

  • pinki print: signing key fingerprinting

    pinki print: signing key fingerprinting

    add a command to get the fingerprint of a private or public key. the fingerprint is just the hex-encoded sha256 digest of the pem-formatted asn.1 encoded public key.

  • pinki ring: secure storage for signing keys

    pinki ring: secure storage for signing keys

    add a --ring option to commands involving private keys to read/write the key via secure storage instead of via cli argument or standard input/output.

    $ pinki --ring key create
    $ pinki --ring key export
    $ pinki --ring sign < file > file.sig
    
Related tags
Secure software enclave for storage of sensitive information in memory.

MemGuard Software enclave for storage of sensitive information in memory. This package attempts to reduce the likelihood of sensitive data being expos

Dec 30, 2022
Camera Control is a software "remote control" for conference cameras, e.g. Tenveo NV10U.
Camera Control is a software

Camera Control Camera Control is a software "remote control" for conference cameras, e.g. Tenveo NV10U. Smart access to stored positions and zoom sett

May 1, 2022
Ots - The Bhojpur OTS is a software-as-a-service product used as an Object Tracking System based on Bhojpur.NET Platform for application delivery.

Bhojpur OTS - Object Tracking System The Bhojpur OTS is a software-as-a-service product used as an Object Tracking System based on Bhojpur.NET Platfor

Sep 26, 2022
An experiment in software that has sovereignty over itself.

Sovereign An experiment in software that has sovereignty over itself. Why I Did This If you actually read through all of this, please let me know. You

Feb 11, 2022
Multi cluster kubernetes dashboard with batteries included. Build by developers, for developers.

kubetower Multi cluster kubernetes dashboard with batteries included. Built by developers, for developers. Features Restart deployments with one click

Nov 28, 2022
Mk48.io Ship Combat Game
Mk48.io Ship Combat Game

Mk48.io Game Mk48.io is an online multiplayer naval combat game, in which you take command of a ship and sail your way to victory. Watch out for torpe

Jan 2, 2023
Golang library for connecting to EOSIO SHIP

go-eosio-ship go-eosio-ship is a golang library built on top of go-eosio for con

Jan 3, 2022
Ipv6-ghost-ship - Silly usage of AWS EC2 IPv6 prefixes

ipv6-ghost-ship Twitter thread ?? As of July 2021, AWS EC2 instances can be assi

Dec 26, 2022
Go-generic-unboxing - A quick ready to ship demo for go generic using the official example

Go generic This repo contain basic demo for installing and running go1.18beta1 v

Feb 1, 2022
Open source Observability Platform. ๐Ÿ‘‰ SigNoz helps developers find issues in their deployed applications & solve them quickly
Open source Observability Platform. ๐Ÿ‘‰ SigNoz helps developers find issues in their deployed applications & solve them quickly

SigNoz SigNoz is an opensource observability platform. SigNoz uses distributed tracing to gain visibility into your systems and powers data using Kafk

Jan 4, 2023