txp0wer / pqpg Goto Github PK
View Code? Open in Web Editor NEWPost Quantum Privacy Guard: yet another little GnuPG-like command line tool for post-quantum cryptography
License: GNU General Public License v3.0
Post Quantum Privacy Guard: yet another little GnuPG-like command line tool for post-quantum cryptography
License: GNU General Public License v3.0
PQPG: POST QUANTUM PRIVACY GUARD a little GnuPG-like command line tool for post-quantum cryptography License: GNU GPLv3 or later Requirements: * rust-nightly (because of dependencies) * a lot of rust libraries (see Cargo.toml) Compile/install: git clone https://github.com/txp0wer/pqpg cd pqpg cargo run --release [--features x86simd] <subcommand> [args] cargo install [--features x86simd] # if you decide you like it # "--features x86simd" may increase performance, but requires an x86 CPU Usage: pqpg keygen <name> generates a key and asks for a passphrase returns the fingerprint of your key pqpg import <public_key_file> <name> [address], adds a public key file to your database pqpg export <name_or_fingerprint> [public_key_file] extracts a public key from your database and writes it to stdout or a specified file pqpg encrypt <name_or_fingerprint> <input_file> <output_file> pqpg decrypt <input_file> <output_file> asks for the passphrase, fails if the private key is missing pqpg chpass <name_or_fingerprint> changes the passphrase pqpg list [name_or_fingerprint] list all or search known keys pqpg test runs some self-tests Crypto: only encryption so far * Public-Key encryption: "new hope" (Ring-LWE; 14592 bits; through sarkara library; see module SealedBox) * symmetric encryption: SCrypt (through rust-crypto; to protect the private key files) * Hash: Blake2b (sarkara; for the PK fingerprints) To do: * implement an address book (name->fingerprint) (WIP) * implement an optional "ASCII armor" * implement the usual key management features (delete keys, rename keys) * refactor the builtin help function * migrate key material to the database Known bugs: * file size is limited by available RAM (blame sarkara::SealedBox for that) WARNING: * this tool is not yet production ready, so don't trust it with any sensitive/important data * I assume that the algorithms are really secure against quantum computers and that their implementations have neither significant flaws nor backdoors * the file formats may change in the future
This is a wonderful project. I hope this doesn't become vapourware or that you don't abandon it. Keep up the good work. This is the second tool I have found after Codecrypt which uses QC-MDPC McEliece,Your's is something "different". However I would be glad if you implement the ASCII armour and Address Book feature soon. Ciao.
I'm attempting to get pqpg running but get the following errors:
user@ubuntu:~/rust/pqpg-master$ cargo run --release
Compiling rust-crypto v0.2.36
Compiling libgcrypt-sys v0.4.0
Compiling newhope v0.1.6
Compiling blissb v0.1.0
Compiling seckey v0.2.6
Compiling rusqlite v0.7.4
error: use of unstable library feature 'iterator_step_by': unstable replacement of Range::step_by (see issue #27741)
--> /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/newhope-0.1.6/src/ntt.rs:100:22
|
100 | for i in (0..10).step_by(2) {
| ^^^^^^^
|
= help: add #![feature(iterator_step_by)] to the crate attributes to enable
error: use of unstable library feature 'iterator_step_by': unstable replacement of Range::step_by (see issue #27741)
--> /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/newhope-0.1.6/src/ntt.rs:103:45
|
103 | for (jt, j) in (start..(N - 1)).step_by(2 * distance).enumerate() {
| ^^^^^^^
|
= help: add #![feature(iterator_step_by)] to the crate attributes to enable
error: use of unstable library feature 'iterator_step_by': unstable replacement of Range::step_by (see issue #27741)
--> /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/blissb-0.1.0/src/utils.rs:61:26
|
61 | for i in (0..64).step_by(2) {
| ^^^^^^^
|
= help: add #![feature(iterator_step_by)] to the crate attributes to enable
error: use of unstable library feature 'iterator_step_by': unstable replacement of Range::step_by (see issue #27741)
--> /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/newhope-0.1.6/src/ntt.rs:115:45
|
115 | for (jt, j) in (start..(N - 1)).step_by(2 * distance).enumerate() {
| ^^^^^^^
|
= help: add #![feature(iterator_step_by)] to the crate attributes to enable
error: use of unstable library feature 'iterator_step_by': unstable replacement of Range::step_by (see issue #27741)
--> /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/blissb-0.1.0/src/ntt.rs:43:25
|
43 | for k in (0..N).step_by(i + i) {
| ^^^^^^^
|
= help: add #![feature(iterator_step_by)] to the crate attributes to enable
error: use of unstable library feature 'iterator_step_by': unstable replacement of Range::step_by (see issue #27741)
--> /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/blissb-0.1.0/src/ntt.rs:51:29
|
51 | for k in (j..N).step_by(i + i) {
| ^^^^^^^
|
= help: add #![feature(iterator_step_by)] to the crate attributes to enable
error: use of unstable library feature 'iterator_step_by': unstable replacement of Range::step_by (see issue #27741)
--> /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/newhope-0.1.6/src/newhope.rs:53:21
|
53 | for i in (0..N).step_by(4) {
| ^^^^^^^
|
= help: add #![feature(iterator_step_by)] to the crate attributes to enable
error: aborting due to 4 previous errors
error: Could not compile newhope
.
warning: build failed, waiting for other jobs to finish...
error: aborting due to 3 previous errors
error: Could not compile blissb
.
warning: build failed, waiting for other jobs to finish...
error: build failed
This seems to be related to this rust issue: rust-lang/rust#27741
Any help would be appreciated. Thanks.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.