Giter Site home page Giter Site logo

neopg's Introduction

Gitter Build Status Code Coverage

NeoPG implements the OpenPGP standard.

NeoPG is written in C++11. It starts out as an opinionated fork of the GnuPG code base, and hopefully will evolve to something entirely different.

For now, many parts of NeoPG are licensed by the upstream authors under various licenses, including GPL and LGPL variants. Please refer to the copyright notice at the top of every file.

New source code contributed by the NeoPG authors is licensed under the permissive Simplified BSD license (the same license as Botan, the cryptography library we want to use).

AT THIS TIME, THE COMPLETE WORK IS NECESSARILY LICENSED UNDER THE MOST RESTRICTIVE LICENSE OF ANY OF ITS PARTS, THE GPLv3. See the file license.txt for details.

The dependencies are also released under their respective various licenses.

Note: As we are using libcurl, you might have to pay attention to possible license incompatibilities between the GPL as used by the legacy gnupg code and the TLS library linked to libcurl. In the future, when libcurl supports Botan as TLS option, we might include a copy and link statically to make this easier.

Status

Currently, NeoPG is under development, and in an exploratory phase. No promises are made about the stability, functionality, and security of the development releases "0.0.x". I am actively seeking feedback and guidance for the API design and scope of functionality from users and application developers.

From a purely practical point, the software should build and run, and a lot of legacy functionality is available through the "gpg2", "gpg-agent", "dirmngr" etc. subcommands. New subcommands are introduced as functionality is added or replaced.

From an organizational point of view, this is currently a one-man project without third-party funding. A significant amount of time is spent on developing a more substantial basis for the project. So you will see periods of coding activity, but also periods of organizational activity (such as talks, and grant application writing).

Installation

Supported Compiler Versions

  • Ubuntu 14.04.5 LTS: GCC 4.9, 5, 6, 7
  • Ubuntu 14.04.5 LTS: Clang 3.5, 3.6, 3.7, 3.8, 3.9, 4.0, 5.0
  • MacOS: Xcode 6.4, 7.3, 8.3, 9.1

GCC 4.8 is not supported (see nlohmann/json).

Dependencies

Aside from a working C++ toolchain you'll need the following libraries.

  1. CMake >= 3.2
  2. SQLite >= 3.0
  3. Botan >= 2.0 --with-zlib --with-bzip2
  4. Boost >= 1.64.0
  5. libcurl >= 7.49.0
  6. gettext-tools

Make

With all dependencies installed NeoPG can be build with CMake.

$ git submodule update --init
$ cmake -H. -Bbuild
$ cmake --build build
$ cmake --build build --target test # opt: ARGS=-V or CTEST_OUTPUT_ON_FAILURE=1

To install (default is /usr/local)

$ cmake --build build --target install

To change default installation, set cmake parameter CMAKE_INSTALL_PREFIX for example:

$ cmake -H. -Build -DCMAKE_INSTALL_PREFIX=<path>

Select your compiler and language version by setting CXX and CXXSTD environment variables, e.g.:

$ CXX=clang++-5 CXXSTD=14 cmake -H. -Bbuild

or set cmake parameter CMAKE_CXX_COMPILER CMAKE_CXX_STANDARD

Legacy support

You can create links to the neopg binary under a name that ends with a legacy subcommand. If called through such a link, neopg will invoke that subcommand directly. For example, neo-gpg2 --version would be the same as neopg gpg2 --version, and so on. Examples for names that would behave that way are neopg-gpg2, neo-gpg2, neogpg2, gpg2 etc. Here is a list of supported endings:

Ending Subcommand
gpg gpg2
gpg2 gpg2
agent agent
scd scd
dirmngr dirmngr
dirmngr-client dirmngr-client

Development

Development builds have extra dependencies:

  1. gcovr (make coverage)
  2. clang-format (make pretty)
  3. cppcheck (make lint; TODO: Replace with cmake-tidy?)
  4. doxygen (make doc)

To enable a debug build, set the CMAKE_BUILD_TYPE flag (default is Release):

$ cmake -DCMAKE_BUILD_TYPE=Debug -DCOVERAGE=ON ..
$ cmake --build build --target coverage

Other targets:

$ cmake --build build --target pretty        # Run clang-format on all source files
$ cmake --build build --target lint          # Run cppcheck
$ cmake --build build --target coverage      # Just coverage.info for codecov.io
$ cmake --build build --target coverage-html # Local HTML report
$ cmake --build build --target coverage-data # Cobertura XML report

TODO

  • format strings for list-keys etc

Code metrics:

  • sloccount, git-loc
  • secretgrind
  • sonarqube

Windows

  • chocolatey

macOS

  • brew (homebrew)

openpgp profile

  • ascii armor default
  • auto keylocate default auto keyretrieve
  • dirmngr: hkps connections should default to system trust if --hkp-cacert is not given

Hacking

Fedora

To get started on Fedora 28, or later, do the following.

# Install dev dependencies
$ sudo dnf install -y \
    boost-devel \
    botan2-devel \
    cmake \
    gcc-c++ \
    gcovr \
    git \
    gnutls-devel \
    lcov \
    libusbx-devel \
    python \
    sqlite-devel \

# Clone repo and build
$ git clone --recursive [email protected]:das-labor/neopg.git
$ cmake -Hneopg -Bneopg/build
$ cmake --build neopg/build

macOS

To get started on macOS, follow these steps. For the dependencies use a package manager like Homebrew:

$ brew install botan boost cmake doxygen gettext

By default homebrew does not link the gettext binaries into the path, to enforce this:

$ brew link gettext --force

Build it!

# Clone repo and build
$ git clone --recursive [email protected]:das-labor/neopg.git
$ cmake -Hneopg -Bneopg/build
$ cmake --build neopg/build

Have fun!

neopg's People

Contributors

bitpick avatar bjoe avatar bkircher avatar colinh avatar e7p avatar fkr avatar flanfly avatar jwilk avatar lambdafu avatar rofl0r avatar romanz avatar sphinxc0re avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

neopg's Issues

Packet could use header strategy

Currently, we can not influence the way headers are generated. So tests for old style headers need to count bytes manually and set a custom header.

Having different strategies (old vs new, adaptive length type vs fixed length type) could help with that.

Could also be useful to generate backward compatible output with certain compliance profiles.

The custom header could then be one of the strategies. So the solution would likely be a header strategy class (ouch) that comes in different flavors.

neopg curl

neopg curl should be a simple utility command to test the libcurl integration (timeout, proxy settings, etc).

For this, network settings should be global options and passed through to dirmngr also.

Javascript Version with Emscripten

Compile NeoPG with emscripten to Javascript and create a demo in a js terminal emulator that can be run right in the browser. At first, it should probably mock all file and web accesses (it's a demo after all).

build or install broken on Ubuntu 18.04

Hi, it seems the build or the installation under ubuntu 18.04 is broken.

When i clone the repo i do following things:
git submodule update --init cd build cmake .. make && make test sudo make install
With v0.0.5 tag the library is created, but not installed, with master it seems the library isn't even created?

Any idea?

Compatibility programs

If we hardlink "gpg2" to neopg, neopg should automatically choose the gpg2 subcommand, etc. This will allow for easy backwards-compatibility. But if this is useful hinges on the question how compatible we can be. In particular, if we are compatible enough to run enigmail or similar.

remove unsafe cmdline invocations

Remove all variants that mix status messages, plaintext and log messages on the command line.

  • --output FILE --verify OK
  • --verify detach_sig data OK
  • --decrypt (with verify) NOT OK

etc.

Rework cipher preference selection

If you ask GnuPG to encrypt to a recipient that prefers "AES256, AES192, AES, CAST5, 3DES" in that order, and to another recipient that prefers the reverse order "3DES, CAST5, AES, AES192, AES256", then GnuPG will use 3DES.

This is by choice:

         /* Note the '<' here.  This means in case of a tie, we will                                                                                                                
             favor the lower algorithm number.  We have a choice                                                                                                                     
             between the lower number (probably an older algorithm                                                                                                                   
             with more time in use), or the higher number (probably a                                                                                                                
             newer algorithm with less time in use).  Older is                                                                                                                       
             probably safer here, even though the newer algorithms                                                                                                                   
             tend to be "stronger". */

For NeoPG, I want the code to always behave as if a crypto preference list has been set by the user that overrides all preferences in the selected keys. The default list should prefer AES over 3DES if it is available.

In case AES is not available in the chosen key, we should raise appropriate warnings or even abort.

I think it is possible to configure this with the right combinations of options in GnuPG, too, but it should be the only way to do it, the right defaults need to be chosen, and the rest of the code can be removed.

neopg cat crashes when reading a directory

mkdir tmp
neopg cat tmp
terminate called after throwing an instance of 'Botan::Stream_IO_Error'
  what():  I/O error: DataSource_Stream::read: Source failure
Aborted (core dumped)

Fails to build against recent botan

After upgrading botan2 from 2.9.0 to 2.17.2 neopg 0.0.6 fails to build.

❯ nix-build -A neopg
these derivations will be built:
  /nix/store/vrp0lffg377x1jx9aj8dn6lx7xnh00hz-neopg-0.0.6.drv
building '/nix/store/vrp0lffg377x1jx9aj8dn6lx7xnh00hz-neopg-0.0.6.drv' on 'ssh://[email protected]'...
copying path '/nix/store/wxd902wy32yvwa5300npha7baygh927r-rhash-1.4.0' from 'https://cache.nixos.org'...
copying path '/nix/store/06d9sbafqk2jk426nhi0z4fgqpz1wx7g-sqlite-3.33.0-bin' from 'https://cache.nixos.org'...
copying path '/nix/store/kl3ysil590r8k0h268qsiklbjf9lhd1y-systemd-minimal-246.6-dev' from 'https://cache.nixos.org'...
copying path '/nix/store/b2s6wzq5wcz838b4x7016rf4sf2jzja6-libusb-1.0.23-dev' from 'https://cache.nixos.org'...
copying path '/nix/store/21cib7707fqxwg9xpjx0hfa5p9bx8hvh-cmake-3.18.4' from 'https://cache.nixos.org'...
copying path '/nix/store/waa7sz7dnsmw9gmggqd4rjygxzzgxl60-sqlite-3.33.0-dev' from 'https://cache.nixos.org'...
unpacking sources
unpacking source archive /nix/store/xzhm6685vamb86bqzf789hhcm0wav492-source
source root is source
patching sources
configuring
fixing cmake files...
cmake flags: -DCMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY=OFF -DCMAKE_FIND_USE_PACKAGE_REGISTRY=OFF -DCMAKE_EXPORT_NO_PACKAGE_REGISTRY=ON -DCMAKE_BUILD_TYPE=Release -DCMAKE_SKIP_BUILD_RPATH=ON -DCMAKE_INSTALL_LOCALEDIR=/nix/store/ncjn6whq05j526darbbl8i0isyfic480-neopg-0.0.6/share/locale -DCMAKE_INSTALL_LIBEXECDIR=/nix/store/ncjn6whq05j526darbbl8i0isyfic480-neopg-0.0.6/libexec -DCMAKE_INSTALL_LIBDIR=/nix/store/ncjn6whq05j526darbbl8i0isyfic480-neopg-0.0.6/lib -DCMAKE_INSTALL_DOCDIR=/nix/store/ncjn6whq05j526darbbl8i0isyfic480-neopg-0.0.6/share/doc/neopg -DCMAKE_INSTALL_INFODIR=/nix/store/ncjn6whq05j526darbbl8i0isyfic480-neopg-0.0.6/share/info -DCMAKE_INSTALL_MANDIR=/nix/store/ncjn6whq05j526darbbl8i0isyfic480-neopg-0.0.6/share/man -DCMAKE_INSTALL_OLDINCLUDEDIR=/nix/store/ncjn6whq05j526darbbl8i0isyfic480-neopg-0.0.6/include -DCMAKE_INSTALL_INCLUDEDIR=/nix/store/ncjn6whq05j526darbbl8i0isyfic480-neopg-0.0.6/include -DCMAKE_INSTALL_SBINDIR=/nix/store/ncjn6whq05j526darbbl8i0isyfic480-neopg-0.0.6/sbin -DCMAKE_INSTALL_BINDIR=/nix/store/ncjn6whq05j526darbbl8i0isyfic480-neopg-0.0.6/bin -DCMAKE_INSTALL_NAME_DIR=/nix/store/ncjn6whq05j526darbbl8i0isyfic480-neopg-0.0.6/lib -DCMAKE_POLICY_DEFAULT_CMP0025=NEW -DCMAKE_OSX_SYSROOT= -DCMAKE_OSX_ARCHITECTURES=x86_64 -DCMAKE_FIND_FRAMEWORK=LAST -DCMAKE_STRIP=/nix/store/p3kn26g5nhmx6spn37ar3mn0xjbzks3g-binutils-2.31.1/bin/strip -DCMAKE_RANLIB=/nix/store/p3kn26g5nhmx6spn37ar3mn0xjbzks3g-binutils-2.31.1/bin/ranlib -DCMAKE_AR=/nix/store/p3kn26g5nhmx6spn37ar3mn0xjbzks3g-binutils-2.31.1/bin/ar -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -DCMAKE_INSTALL_PREFIX=/nix/store/ncjn6whq05j526darbbl8i0isyfic480-neopg-0.0.6
-- Could NOT find Git (missing: GIT_EXECUTABLE)
-- The CXX compiler identification is GNU 9.3.0
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /nix/store/s3j2gpc2s7cdn2wafm192jfp9k8jfvhs-gcc-wrapper-9.3.0/bin/g++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- NeoPG v0.0.6
-- The C compiler identification is GNU 9.3.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /nix/store/s3j2gpc2s7cdn2wafm192jfp9k8jfvhs-gcc-wrapper-9.3.0/bin/gcc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Could NOT find PythonInterp (missing: PYTHON_EXECUTABLE)
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Failed
-- Looking for pthread_create in pthreads
-- Looking for pthread_create in pthreads - not found
-- Looking for pthread_create in pthread
-- Looking for pthread_create in pthread - found
-- Found Threads: TRUE
-- Could NOT find Doxygen (missing: DOXYGEN_EXECUTABLE)
-- Found PkgConfig: pkg-config (found version "0.29.2")
-- Checking for module 'sqlite3'
--   Found sqlite3, version 3.33.0
-- Checking for module 'botan-2'
--   Found botan-2, version 2.17.2
-- Checking for module 'libusb-1.0'
--   Found libusb-1.0, version 1.0.23
-- Checking for module 'gnutls'
--   Found gnutls, version 3.6.15
Package libtasn1 was not found in the pkg-config search path.
Perhaps you should add the directory containing `libtasn1.pc'
to the PKG_CONFIG_PATH environment variable
Package 'libtasn1', required by 'gnutls', not found
Package libtasn1 was not found in the pkg-config search path.
Perhaps you should add the directory containing `libtasn1.pc'
to the PKG_CONFIG_PATH environment variable
Package 'libtasn1', required by 'gnutls', not found
Package libtasn1 was not found in the pkg-config search path.
Perhaps you should add the directory containing `libtasn1.pc'
to the PKG_CONFIG_PATH environment variable
Package 'libtasn1', required by 'gnutls', not found
Package libtasn1 was not found in the pkg-config search path.
Perhaps you should add the directory containing `libtasn1.pc'
to the PKG_CONFIG_PATH environment variable
Package 'libtasn1', required by 'gnutls', not found
-- Found Boost: /nix/store/cdsa5329z5sxklx7nbgnsl87dhi2492h-boost-1.69.0-dev/include (found version "1.69.0") found components: locale date_time
-- Found CURL: /nix/store/izq29d1nqgc348pi96rjlr8cvxysimsx-curl-7.73.0/lib/libcurl.so (found version "7.73.0")
-- Found Gettext: /nix/store/ddb7nbpq53xvdf9zdhafd1vfpyxicfqg-gettext-0.21/bin/msgmerge (found version "0.21")
-- Configuring done
-- Generating done
CMake Warning:
  Manually-specified variables were not used by the project:

    CMAKE_EXPORT_NO_PACKAGE_REGISTRY
    CMAKE_INSTALL_BINDIR
    CMAKE_INSTALL_DOCDIR
    CMAKE_INSTALL_INCLUDEDIR
    CMAKE_INSTALL_INFODIR
    CMAKE_INSTALL_LIBDIR
    CMAKE_INSTALL_LIBEXECDIR
    CMAKE_INSTALL_LOCALEDIR
    CMAKE_INSTALL_MANDIR
    CMAKE_INSTALL_OLDINCLUDEDIR
    CMAKE_INSTALL_SBINDIR


-- Build files have been written to: /build/source
cmake: enabled parallel building
building
build flags: -j64 -l64 SHELL=/nix/store/516z50fm1jbpcl32qnzy7kynrh0vl22w-bash-4.4-p23/bin/bash
Scanning dependencies of target translations_1
Scanning dependencies of target neopg
Scanning dependencies of target gtest
Scanning dependencies of target gpg-error
[  0%] Generating de.gmo
[  0%] Building CXX object legacy/CMakeFiles/gpg-error.dir/libgpg-error/src/b64dec.cpp.o
[  1%] Building CXX object legacy/CMakeFiles/gpg-error.dir/libgpg-error/src/code-from-errno.cpp.o
[  1%] Building CXX object legacy/CMakeFiles/gpg-error.dir/libgpg-error/src/estream.cpp.o
[  1%] Building CXX object legacy/CMakeFiles/gpg-error.dir/libgpg-error/src/visibility.cpp.o
[  1%] Building CXX object legacy/CMakeFiles/gpg-error.dir/libgpg-error/src/code-to-errno.cpp.o
[  1%] Building CXX object legacy/CMakeFiles/gpg-error.dir/libgpg-error/src/strerror.cpp.o
[  1%] Building CXX object legacy/CMakeFiles/gpg-error.dir/libgpg-error/src/estream-printf.cpp.o
[  2%] Building CXX object legacy/CMakeFiles/gpg-error.dir/libgpg-error/src/init.cpp.o
[  2%] Building CXX object 3rdparty/googletest/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o
[  2%] Built target translations_1
[  2%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/compressed_data_packet.cpp.o
[  2%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/literal_data_packet.cpp.o
[  2%] Building CXX object neopg/CMakeFiles/neopg.dir/crypto/rng.cpp.o
[  2%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/marker_packet.cpp.o
[  3%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/modification_detection_code_packet.cpp.o
[  3%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/multiprecision_integer.cpp.o
[  3%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/object_identifier.cpp.o
[  3%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/packet.cpp.o
[  3%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/public_key/data/v3_public_key_data.cpp.o
[  4%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/packet_header.cpp.o
[  4%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/public_key_packet.cpp.o
[  4%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/public_key/data/v4_public_key_data.cpp.o
[  4%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/public_key/material/raw_public_key_material.cpp.o
[  4%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/public_key/material/dsa_public_key_material.cpp.o
[  4%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/public_key/material/ecdh_public_key_material.cpp.o
[  5%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/public_key/material/eddsa_public_key_material.cpp.o
[  5%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/public_key/material/ecdsa_public_key_material.cpp.o
[  5%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/public_key/material/elgamal_public_key_material.cpp.o
[  5%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/public_key/material/rsa_public_key_material.cpp.o
[  5%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/public_key/public_key_data.cpp.o
[  6%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/public_key/public_key_material.cpp.o
[  6%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/public_subkey_packet.cpp.o
[  6%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/raw_packet.cpp.o
[  6%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/signature_packet.cpp.o
[  6%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/signature/data/v3_signature_data.cpp.o
[  7%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/signature/data/v4_signature_subpacket_data.cpp.o
[  7%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/signature/data/v4_signature_data.cpp.o
[  7%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/signature/material/raw_signature_material.cpp.o
[  7%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/signature/material/rsa_signature_material.cpp.o
[  7%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/signature/material/dsa_signature_material.cpp.o
[  7%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/signature/material/eddsa_signature_material.cpp.o
[  8%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/signature/material/ecdsa_signature_material.cpp.o
[  8%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/signature/signature_data.cpp.o
[ 10%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/signature/subpacket/embedded_signature_subpacket.cpp.o
[ 10%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/signature/subpacket/exportable_certification_subpacket.cpp.o
[ 10%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/signature/signature_material.cpp.o
[ 10%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/signature/signature_subpacket.cpp.o
[ 10%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/signature/subpacket/features_subpacket.cpp.o
[ 10%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/signature/subpacket/issuer_subpacket.cpp.o
[ 10%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/signature/subpacket/key_expiration_time_subpacket.cpp.o
[ 10%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/signature/subpacket/notation_data_subpacket.cpp.o
[ 10%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/signature/subpacket/key_flags_subpacket.cpp.o
[ 11%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/signature/subpacket/key_server_preferences_subpacket.cpp.o
[ 11%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/signature/subpacket/policy_uri_subpacket.cpp.o
[ 11%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/signature/subpacket/preferred_compression_algorithms_subpacket.cpp.o
[ 11%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/signature/subpacket/preferred_hash_algorithms_subpacket.cpp.o
[ 11%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/signature/subpacket/preferred_key_server_subpacket.cpp.o
[ 12%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/signature/subpacket/preferred_symmetric_algorithms_subpacket.cpp.o
[ 12%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/signature/subpacket/primary_user_id_subpacket.cpp.o
[ 12%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/signature/subpacket/reason_for_revocation_subpacket.cpp.o
[ 13%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/signature/subpacket/revocable_subpacket.cpp.o
[ 13%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/signature/subpacket/raw_signature_subpacket.cpp.o
[ 13%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/signature/subpacket/revocation_key_subpacket.cpp.o
[ 13%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/signature/subpacket/regular_expression_subpacket.cpp.o
[ 13%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/signature/subpacket/signature_expiration_time_subpacket.cpp.o
/build/source/legacy/libgpg-error/src/estream-printf.cpp: In function 'int pr_integer(estream_printf_out_t, void*, argspec_t, value_t, size_t*)':
/build/source/legacy/libgpg-error/src/estream-printf.cpp:879:12: note: the ABI of passing union with long double has changed in GCC 4.4
  879 | static int pr_integer(estream_printf_out_t outfnc, void *outfncarg,
      |            ^~~~~~~~~~
[ 13%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/signature/subpacket/signature_creation_time_subpacket.cpp.o
[ 13%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/signature/subpacket/signature_target_subpacket.cpp.o
[ 13%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/signature/subpacket/trust_signature_subpacket.cpp.o
[ 14%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/signature/subpacket/signers_user_id_subpacket.cpp.o
[ 14%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/symmetrically_encrypted_data_packet.cpp.o
[ 14%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/symmetrically_encrypted_integrity_protected_data_packet.cpp.o
[ 14%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/trust_packet.cpp.o
[ 14%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/user_attribute/subpacket/image_attribute_subpacket.cpp.o
In file included from /build/source/neopg/openpgp/literal_data_packet.cpp:6:
/build/source/neopg/openpgp/literal_data_packet.h:14:38: warning: 'visibility' attribute ignored [-Wattributes]
   14 | const NEOPG_UNSTABLE_API std::string LITERAL_DATA_CONSOLE = "_CONSOLE";
      |                                      ^~~~~~~~~~~~~~~~~~~~
[ 15%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/user_attribute/subpacket/raw_user_attribute_subpacket.cpp.o
[ 15%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/user_attribute/user_attribute_subpacket.cpp.o
[ 15%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/user_attribute_packet.cpp.o
[ 15%] Building CXX object neopg/CMakeFiles/neopg.dir/openpgp/user_id_packet.cpp.o
[ 15%] Building CXX object neopg/CMakeFiles/neopg.dir/parser/openpgp.cpp.o
[ 15%] Building CXX object neopg/CMakeFiles/neopg.dir/proto/http.cpp.o
[ 16%] Building CXX object neopg/CMakeFiles/neopg.dir/parser/parser_input.cpp.o
[ 16%] Building CXX object neopg/CMakeFiles/neopg.dir/proto/uri.cpp.o
[ 16%] Building CXX object neopg/CMakeFiles/neopg.dir/utils/stream.cpp.o
[ 16%] Building CXX object neopg/CMakeFiles/neopg.dir/utils/time.cpp.o
[ 16%] Linking CXX static library libgpg-error.a
[ 16%] Built target gpg-error
Scanning dependencies of target ksba
Scanning dependencies of target assuan
[ 16%] Building CXX object legacy/CMakeFiles/assuan.dir/libassuan/src/system-posix.cpp.o
[ 17%] Building CXX object legacy/CMakeFiles/assuan.dir/libassuan/src/assuan-buffer.cpp.o
[ 17%] Building CXX object legacy/CMakeFiles/assuan.dir/libassuan/src/assuan-error.cpp.o
[ 17%] Building CXX object legacy/CMakeFiles/assuan.dir/libassuan/src/assuan-handler.cpp.o
[ 17%] Building CXX object legacy/CMakeFiles/assuan.dir/libassuan/src/assuan-inquire.cpp.o
[ 17%] Building CXX object legacy/CMakeFiles/assuan.dir/libassuan/src/assuan-io.cpp.o
[ 17%] Building CXX object legacy/CMakeFiles/ksba.dir/libksba/src/reader.cpp.o
[ 17%] Building CXX object legacy/CMakeFiles/ksba.dir/libksba/src/writer.cpp.o
[ 19%] Building CXX object legacy/CMakeFiles/ksba.dir/libksba/src/asn1-parse.cpp.o
[ 20%] Building CXX object legacy/CMakeFiles/assuan.dir/libassuan/src/assuan-listen.cpp.o
[ 20%] Building CXX object legacy/CMakeFiles/ksba.dir/libksba/src/asn1-func.cpp.o
[ 20%] Building CXX object legacy/CMakeFiles/assuan.dir/libassuan/src/assuan-logging.cpp.o
[ 20%] Building CXX object legacy/CMakeFiles/assuan.dir/libassuan/src/assuan-pipe-connect.cpp.o
[ 20%] Building CXX object legacy/CMakeFiles/assuan.dir/libassuan/src/assuan-pipe-server.cpp.o
[ 20%] Building CXX object legacy/CMakeFiles/assuan.dir/libassuan/src/assuan-socket.cpp.o
[ 20%] Building CXX object legacy/CMakeFiles/ksba.dir/libksba/src/der-encoder.cpp.o
[ 20%] Building CXX object legacy/CMakeFiles/ksba.dir/libksba/src/asn1-func2.cpp.o
[ 20%] Building CXX object legacy/CMakeFiles/ksba.dir/libksba/src/ber-decoder.cpp.o
[ 20%] Building CXX object legacy/CMakeFiles/assuan.dir/libassuan/src/assuan-uds.cpp.o
[ 20%] Building CXX object legacy/CMakeFiles/ksba.dir/libksba/src/ber-help.cpp.o
[ 21%] Building CXX object legacy/CMakeFiles/assuan.dir/libassuan/src/assuan.cpp.o
[ 21%] Building CXX object legacy/CMakeFiles/assuan.dir/libassuan/src/client.cpp.o
[ 22%] Building CXX object legacy/CMakeFiles/ksba.dir/libksba/src/cert.cpp.o
[ 22%] Building CXX object legacy/CMakeFiles/assuan.dir/libassuan/src/context.cpp.o
[ 22%] Building CXX object legacy/CMakeFiles/ksba.dir/libksba/src/cms.cpp.o
[ 22%] Building CXX object legacy/CMakeFiles/ksba.dir/libksba/src/cms-parser.cpp.o
[ 22%] Building CXX object legacy/CMakeFiles/ksba.dir/libksba/src/certreq.cpp.o
[ 22%] Building CXX object legacy/CMakeFiles/ksba.dir/libksba/src/crl.cpp.o
[ 22%] Building CXX object legacy/CMakeFiles/assuan.dir/libassuan/src/debug.cpp.o
[ 23%] Building CXX object legacy/CMakeFiles/assuan.dir/libassuan/src/system.cpp.o
[ 23%] Building CXX object legacy/CMakeFiles/assuan.dir/libassuan/src/server.cpp.o
[ 24%] Building CXX object legacy/CMakeFiles/ksba.dir/libksba/src/ocsp.cpp.o
[ 24%] Building CXX object legacy/CMakeFiles/ksba.dir/libksba/src/keyinfo.cpp.o
[ 24%] Building CXX object legacy/CMakeFiles/ksba.dir/libksba/src/oid.cpp.o
[ 24%] Building CXX object legacy/CMakeFiles/ksba.dir/libksba/src/name.cpp.o
[ 25%] Building CXX object legacy/CMakeFiles/ksba.dir/libksba/src/dn.cpp.o
[ 25%] Building CXX object legacy/CMakeFiles/ksba.dir/libksba/src/time.cpp.o
[ 25%] Building CXX object legacy/CMakeFiles/ksba.dir/libksba/src/util.cpp.o
/build/source/neopg/openpgp/object_identifier.cpp: In member function 'const string NeoPG::ObjectIdentifier::as_string() const':
/build/source/neopg/openpgp/object_identifier.cpp:99:24: warning: 'std::string Botan::OID::as_string() const' is deprecated: Use OID::to_string [-Wdeprecated-declarations]
   99 |   return oid.as_string();
      |                        ^
In file included from /nix/store/am5drb1pqlwfyrgz62c0f8c0pv589lwi-botan-2.17.2/include/botan-2/botan/ber_dec.h:11,
                 from /build/source/neopg/openpgp/object_identifier.cpp:8:
/nix/store/am5drb1pqlwfyrgz62c0f8c0pv589lwi-botan-2.17.2/include/botan-2/botan/asn1_obj.h:252:58: note: declared here
  252 |       std::string BOTAN_DEPRECATED("Use OID::to_string") as_string() const
      |                                                          ^~~~~~~~~
[ 25%] Building CXX object legacy/CMakeFiles/ksba.dir/libksba/src/asn1-tables.cpp.o
[ 25%] Linking CXX static library libassuan.a
[ 25%] Built target assuan
[ 25%] Linking CXX static library libksba.a
[ 25%] Built target ksba
[ 26%] Linking CXX shared library libneopg.so
[ 26%] Built target neopg
Scanning dependencies of target neopg-tool
Scanning dependencies of target gcrypt
[ 26%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/src/context.cpp.o
[ 26%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/src/global.cpp.o
[ 28%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/src/sexp.cpp.o
[ 28%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/src/hmac256.cpp.o
[ 28%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/src/misc.cpp.o
[ 28%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/src/secmem.cpp.o
[ 28%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/src/visibility.cpp.o
[ 28%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/crc.cpp.o
[ 28%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/src/stdmem.cpp.o
[ 28%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/ecc.cpp.o
[ 30%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/ecc-eddsa.cpp.o
[ 30%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/ecc-gost.cpp.o
[ 30%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/ecc-misc.cpp.o
[ 30%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/ecc-curves.cpp.o
[ 30%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/elgamal.cpp.o
[ 30%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/ecc-ecdsa.cpp.o
[ 30%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/des.cpp.o
[ 30%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/dsa.cpp.o
[ 30%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/rsa.cpp.o
[ 30%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/sha1.cpp.o
[ 31%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/sha512.cpp.o
[ 31%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/sha256.cpp.o
[ 31%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/whirlpool.cpp.o
[ 31%] Building CXX object neopg-tool/CMakeFiles/neopg-tool.dir/cli/cat_command.cpp.o
[ 31%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/md4.cpp.o
[ 31%] Building CXX object neopg-tool/CMakeFiles/neopg-tool.dir/cli/armor_command.cpp.o
[ 31%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/md5.cpp.o
[ 32%] Building CXX object neopg-tool/CMakeFiles/neopg-tool.dir/cli/hash_command.cpp.o
[ 32%] Building CXX object neopg-tool/CMakeFiles/neopg-tool.dir/cli/command.cpp.o
[ 32%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/keccak.cpp.o
[ 32%] Building CXX object neopg-tool/CMakeFiles/neopg-tool.dir/cli/packet/dump/json_dump.cpp.o
[ 32%] Building CXX object neopg-tool/CMakeFiles/neopg-tool.dir/cli/compress_command.cpp.o
[ 33%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/rmd160.cpp.o
[ 33%] Building CXX object neopg-tool/CMakeFiles/neopg-tool.dir/cli/packet/dump/hex_dump.cpp.o
[ 33%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/camellia-glue.cpp.o
[ 33%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/camellia.cpp.o
[ 33%] Building CXX object neopg-tool/CMakeFiles/neopg-tool.dir/cli/packet/dump_packet_command.cpp.o
[ 33%] Building CXX object neopg-tool/CMakeFiles/neopg-tool.dir/cli/packet/dump/legacy_dump.cpp.o
[ 33%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/blowfish.cpp.o
[ 34%] Building CXX object neopg-tool/CMakeFiles/neopg-tool.dir/cli/random_command.cpp.o
[ 34%] Building CXX object neopg-tool/CMakeFiles/neopg-tool.dir/cli/packet_command.cpp.o
[ 34%] Building CXX object neopg-tool/CMakeFiles/neopg-tool.dir/cli/packet/dump_packet_sink.cpp.o
[ 34%] Building CXX object neopg-tool/CMakeFiles/neopg-tool.dir/cli/version_command.cpp.o
[ 34%] Building CXX object neopg-tool/CMakeFiles/neopg-tool.dir/io/streams.cpp.o
[ 34%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/rijndael.cpp.o
[ 34%] Building CXX object neopg-tool/CMakeFiles/neopg-tool.dir/io/hex_filter.cpp.o
[ 35%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/idea.cpp.o
[ 35%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/cast5.cpp.o
[ 35%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/twofish.cpp.o
[ 35%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/rfc2268.cpp.o
[ 35%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/mac-cmac.cpp.o
[ 35%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/cipher.cpp.o
[ 37%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/cipher-cbc.cpp.o
[ 37%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/cipher-cfb.cpp.o
[ 37%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/cipher-ofb.cpp.o
[ 37%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/cipher-ctr.cpp.o
[ 37%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/cipher-aeswrap.cpp.o
[ 38%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/cipher-ccm.cpp.o
[ 38%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/cipher-cmac.cpp.o
[ 38%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/cipher-gcm.cpp.o
[ 38%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/cipher-poly1305.cpp.o
[ 38%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/cipher-ocb.cpp.o
[ 38%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/cipher-xts.cpp.o
[ 39%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/cipher-selftest.cpp.o
[ 39%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/pubkey.cpp.o
[ 39%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/pubkey-util.cpp.o
[ 39%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/mac.cpp.o
[ 40%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/mac-hmac.cpp.o
[ 40%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/md.cpp.o
[ 40%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/mac-gmac.cpp.o
[ 40%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/mac-poly1305.cpp.o
[ 40%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/kdf.cpp.o
[ 40%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/poly1305.cpp.o
[ 40%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/primegen.cpp.o
[ 41%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/scrypt.cpp.o
[ 41%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/hash-common.cpp.o
[ 41%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/dsa-common.cpp.o
[ 41%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/cipher/rsa-common.cpp.o
[ 41%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/mpi/ec.cpp.o
[ 42%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/mpi/mpi-add.cpp.o
[ 42%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/mpi/mpi-bit.cpp.o
[ 42%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/mpi/mpi-cmp.cpp.o
[ 42%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/mpi/mpicoder.cpp.o
[ 42%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/mpi/mpi-div.cpp.o
[ 43%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/mpi/mpi-gcd.cpp.o
[ 43%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/mpi/mpih-div.cpp.o
[ 43%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/mpi/mpih-mul.cpp.o
[ 43%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/mpi/mpi-inline.cpp.o
[ 43%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/mpi/mpi-inv.cpp.o
[ 44%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/mpi/mpi-mod.cpp.o
[ 44%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/mpi/mpi-mpow.cpp.o
[ 44%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/mpi/mpi-mul.cpp.o
[ 44%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/mpi/mpi-pow.cpp.o
[ 44%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/mpi/mpi-scan.cpp.o
[ 44%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/mpi/mpiutil.cpp.o
[ 46%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/mpi/mpih-add1.cpp.o
[ 46%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/mpi/generic/mpih-mul1.cpp.o
[ 46%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/mpi/generic/mpih-lshift.cpp.o
[ 46%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/mpi/generic/mpih-mul2.cpp.o
[ 46%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/mpi/generic/mpih-mul3.cpp.o
[ 47%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/mpi/generic/mpih-rshift.cpp.o
[ 47%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/mpi/generic/mpih-sub1.cpp.o
[ 47%] Building CXX object legacy/CMakeFiles/gcrypt.dir/libgcrypt/random/random.cpp.o
In file included from /build/source/neopg-tool/cli/compress_command.cpp:8:
/nix/store/am5drb1pqlwfyrgz62c0f8c0pv589lwi-botan-2.17.2/include/botan-2/botan/comp_filter.h:11:24: error: expected constructor, destructor, or type conversion before '(' token
   11 | BOTAN_DEPRECATED_HEADER(comp_filter.h)
      |                        ^
In file included from /nix/store/am5drb1pqlwfyrgz62c0f8c0pv589lwi-botan-2.17.2/include/botan-2/botan/types.h:14,
                 from /nix/store/am5drb1pqlwfyrgz62c0f8c0pv589lwi-botan-2.17.2/include/botan-2/botan/secmem.h:11,
                 from /nix/store/am5drb1pqlwfyrgz62c0f8c0pv589lwi-botan-2.17.2/include/botan-2/botan/filters.h:12,
                 from /nix/store/am5drb1pqlwfyrgz62c0f8c0pv589lwi-botan-2.17.2/include/botan-2/botan/comp_filter.h:13,
                 from /build/source/neopg-tool/cli/compress_command.cpp:8:
/nix/store/am5drb1pqlwfyrgz62c0f8c0pv589lwi-botan-2.17.2/include/botan-2/botan/mem_ops.h: In function 'void Botan::copy_mem(T*, const T*, std::size_t)':
/nix/store/am5drb1pqlwfyrgz62c0f8c0pv589lwi-botan-2.17.2/include/botan-2/botan/mem_ops.h:136:4: error: 'assertion_failure' is not a member of 'Botan'
  136 |    BOTAN_ASSERT_IMPLICATION(n > 0, in != nullptr && out != nullptr,
      |    ^~~~~~~~~~~~~~~~~~~~~~~~
/nix/store/am5drb1pqlwfyrgz62c0f8c0pv589lwi-botan-2.17.2/include/botan-2/botan/mem_ops.h: In function 'std::size_t Botan::buffer_insert(std::vector<_Tp, _Alloc>&, std::size_t, const T*, std::size_t)':
/nix/store/am5drb1pqlwfyrgz62c0f8c0pv589lwi-botan-2.17.2/include/botan-2/botan/mem_ops.h:233:4: error: 'assertion_failure' is not a member of 'Botan'
  233 |    BOTAN_ASSERT_NOMSG(buf_offset <= buf.size());
      |    ^~~~~~~~~~~~~~~~~~
/nix/store/am5drb1pqlwfyrgz62c0f8c0pv589lwi-botan-2.17.2/include/botan-2/botan/mem_ops.h: In function 'std::size_t Botan::buffer_insert(std::vector<_Tp, _Alloc>&, std::size_t, const std::vector<T, Alloc2>&)':
/nix/store/am5drb1pqlwfyrgz62c0f8c0pv589lwi-botan-2.17.2/include/botan-2/botan/mem_ops.h:247:4: error: 'assertion_failure' is not a member of 'Botan'
  247 |    BOTAN_ASSERT_NOMSG(buf_offset <= buf.size());
      |    ^~~~~~~~~~~~~~~~~~
/nix/store/am5drb1pqlwfyrgz62c0f8c0pv589lwi-botan-2.17.2/include/botan-2/botan/filter.h: In member function 'void Botan::Filter::send(const std::vector<unsigned char, Alloc>&, std::size_t)':
/nix/store/am5drb1pqlwfyrgz62c0f8c0pv589lwi-botan-2.17.2/include/botan-2/botan/filter.h:83:10: error: 'assertion_failure' is not a member of 'Botan'
   83 |          BOTAN_ASSERT_NOMSG(length <= in.size());
      |          ^~~~~~~~~~~~~~~~~~
/nix/store/am5drb1pqlwfyrgz62c0f8c0pv589lwi-botan-2.17.2/include/botan-2/botan/cipher_mode.h: In member function 'void Botan::Cipher_Mode::update(Botan::secure_vector<unsigned char>&, std::size_t)':
/nix/store/am5drb1pqlwfyrgz62c0f8c0pv589lwi-botan-2.17.2/include/botan-2/botan/cipher_mode.h:114:10: error: 'assertion_failure' is not a member of 'Botan'
  114 |          BOTAN_ASSERT(buffer.size() >= offset, "Offset ok");
      |          ^~~~~~~~~~~~
[ 47%] Linking CXX static library libgcrypt.a
[ 47%] Built target gcrypt
make[2]: *** [neopg-tool/CMakeFiles/neopg-tool.dir/build.make:121: neopg-tool/CMakeFiles/neopg-tool.dir/cli/compress_command.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
[ 47%] Linking CXX shared library libgtest.so
[ 47%] Built target gtest
Scanning dependencies of target gtest_main
[ 48%] Building CXX object 3rdparty/googletest/googletest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o
[ 48%] Linking CXX shared library libgtest_main.so
[ 48%] Built target gtest_main
Scanning dependencies of target gcrypt-secmem-test
Scanning dependencies of target gpg-error-test
Scanning dependencies of target ksba-test
Scanning dependencies of target assuan-test
Scanning dependencies of target test-libneopg
Scanning dependencies of target gcrypt-test
[ 48%] Building CXX object legacy/CMakeFiles/gcrypt-secmem-test.dir/libgcrypt/tests/t-secmem.cpp.o
[ 48%] Building CXX object legacy/CMakeFiles/ksba-test.dir/libksba/tests/ksba-test.cpp.o
[ 48%] Building CXX object legacy/CMakeFiles/gcrypt-secmem-test.dir/libgcrypt/tests/gcrypt-secmem-test.cpp.o
[ 48%] Building CXX object legacy/CMakeFiles/gpg-error-test.dir/libgpg-error/tests/t-strerror.cpp.o
[ 50%] Building CXX object legacy/CMakeFiles/gpg-error-test.dir/libgpg-error/tests/gpg-error-test.cpp.o
[ 50%] Building CXX object legacy/CMakeFiles/ksba-test.dir/libksba/tests/t-oid.cpp.o
[ 50%] Building CXX object legacy/CMakeFiles/gpg-error-test.dir/libgpg-error/tests/t-b64dec.cpp.o
[ 50%] Building CXX object legacy/CMakeFiles/ksba-test.dir/libksba/tests/t-dnparser.cpp.o
[ 50%] Building CXX object legacy/CMakeFiles/gpg-error-test.dir/libgpg-error/tests/t-printf.cpp.o
[ 50%] Building CXX object legacy/CMakeFiles/gpg-error-test.dir/libgpg-error/tests/t-syserror.cpp.o
[ 50%] Building CXX object legacy/CMakeFiles/ksba-test.dir/libksba/tests/t-crl-parser.cpp.o
[ 50%] Building CXX object legacy/CMakeFiles/assuan-test.dir/libassuan/tests/fdpassing.cpp.o
[ 50%] Building CXX object legacy/CMakeFiles/gcrypt-test.dir/libgcrypt/tests/gcrypt-test.cpp.o
[ 50%] Building CXX object legacy/CMakeFiles/assuan-test.dir/libassuan/tests/assuan-test.cpp.o
[ 50%] Building CXX object legacy/CMakeFiles/gcrypt-test.dir/libgcrypt/tests/hmac.cpp.o
[ 50%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/marker_packet_tests.cpp.o
[ 50%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/multiprecision_integer_tests.cpp.o
[ 50%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/literal_data_packet_tests.cpp.o
[ 50%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/compressed_data_packet_tests.cpp.o
[ 51%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/modification_detection_code_packet_tests.cpp.o
[ 51%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/public_key/material/eddsa_public_key_material_tests.cpp.o
[ 53%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/object_identifier_tests.cpp.o
[ 53%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/public_key_packet_tests.cpp.o
[ 53%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/packet_header_tests.cpp.o
[ 53%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/public_key/data/v4_public_key_data_tests.cpp.o
[ 53%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/public_key/data/v3_public_key_data_tests.cpp.o
[ 53%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/public_key/material/elgamal_public_key_material_tests.cpp.o
[ 53%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/public_key/material/raw_public_key_material_tests.cpp.o
[ 53%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/public_key/material/dsa_public_key_material_tests.cpp.o
[ 53%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/public_key/material/ecdsa_public_key_material_tests.cpp.o
[ 53%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/public_key/material/ecdh_public_key_material_tests.cpp.o
[ 53%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/public_key/public_key_material_tests.cpp.o
[ 53%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/public_key/public_key_data_tests.cpp.o
[ 53%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/public_key/material/rsa_public_key_material_tests.cpp.o
[ 55%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/signature_packet_tests.cpp.o
[ 55%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/public_subkey_packet_tests.cpp.o
[ 55%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/signature/signature_data_tests.cpp.o
[ 55%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/signature/data/v3_signature_data_tests.cpp.o
[ 55%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/signature/data/v4_signature_data_tests.cpp.o
[ 55%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/signature/material/raw_signature_material_tests.cpp.o
[ 56%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/signature/material/dsa_signature_material_tests.cpp.o
[ 56%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/signature/data/v4_signature_subpacket_data_tests.cpp.o
[ 56%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/signature/material/rsa_signature_material_tests.cpp.o
[ 56%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/signature/material/eddsa_signature_material_tests.cpp.o
[ 57%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/signature/signature_material_tests.cpp.o
[ 57%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/signature/material/ecdsa_signature_material_tests.cpp.o
[ 57%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/signature/signature_subpacket_tests.cpp.o
[ 57%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/signature/subpacket/embedded_signature_subpacket_tests.cpp.o
[ 57%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/signature/subpacket/exportable_certification_subpacket_tests.cpp.o
[ 57%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/signature/subpacket/features_subpacket_tests.cpp.o
[ 58%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/signature/subpacket/issuer_subpacket_tests.cpp.o
[ 58%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/signature/subpacket/key_expiration_time_subpacket_tests.cpp.o
[ 58%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/signature/subpacket/key_flags_subpacket_tests.cpp.o
[ 58%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/signature/subpacket/key_server_preferences_subpacket_tests.cpp.o
[ 58%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/signature/subpacket/notation_data_subpacket_tests.cpp.o
[ 59%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/signature/subpacket/policy_uri_subpacket_tests.cpp.o
[ 59%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/signature/subpacket/preferred_compression_algorithms_subpacket_tests.cpp.o
[ 59%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/signature/subpacket/preferred_hash_algorithms_subpacket_tests.cpp.o
[ 59%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/signature/subpacket/preferred_key_server_subpacket_tests.cpp.o
[ 59%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/signature/subpacket/preferred_symmetric_algorithms_subpacket_tests.cpp.o
[ 59%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/signature/subpacket/primary_user_id_subpacket_tests.cpp.o
[ 59%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/signature/subpacket/reason_for_revocation_subpacket_tests.cpp.o
[ 60%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/signature/subpacket/raw_signature_subpacket_tests.cpp.o
[ 60%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/signature/subpacket/regular_expression_subpacket_tests.cpp.o
[ 60%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/signature/subpacket/revocable_subpacket_tests.cpp.o
[ 61%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/signature/subpacket/signature_creation_time_subpacket_tests.cpp.o
[ 61%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/signature/subpacket/revocation_key_subpacket_tests.cpp.o
[ 61%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/signature/subpacket/signature_target_subpacket_tests.cpp.o
[ 61%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/signature/subpacket/signature_expiration_time_subpacket_tests.cpp.o
[ 61%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/signature/subpacket/signers_user_id_subpacket_tests.cpp.o
In file included from /build/source/neopg/openpgp/literal_data_packet_tests.cpp:6:
/build/source/neopg/openpgp/literal_data_packet.h:14:38: warning: 'visibility' attribute ignored [-Wattributes]
   14 | const NEOPG_UNSTABLE_API std::string LITERAL_DATA_CONSOLE = "_CONSOLE";
      |                                      ^~~~~~~~~~~~~~~~~~~~
[ 61%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/signature/subpacket/trust_signature_subpacket_tests.cpp.o
[ 62%] Linking CXX executable gcrypt-secmem-test
[ 62%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/symmetrically_encrypted_data_packet_tests.cpp.o
[ 64%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/symmetrically_encrypted_integrity_protected_data_packet_tests.cpp.o
[ 64%] Linking CXX executable ksba-test
[ 64%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/trust_packet_tests.cpp.o
[ 64%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/user_attribute/subpacket/image_attribute_subpacket_tests.cpp.o
[ 64%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/user_attribute/subpacket/raw_user_attribute_subpacket_tests.cpp.o
[ 64%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/user_attribute/user_attribute_subpacket_tests.cpp.o
[ 65%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/user_attribute_packet_tests.cpp.o
[ 65%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/openpgp/user_id_packet_tests.cpp.o
[ 65%] Linking CXX executable gpg-error-test
[ 65%] Built target gcrypt-secmem-test
[ 65%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/parser/openpgp_tests.cpp.o
[ 65%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/parser/parser_input_tests.cpp.o
[ 65%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/proto/http_tests.cpp.o
[ 65%] Built target ksba-test
[ 65%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/utils/stream_tests.cpp.o
[ 66%] Building CXX object neopg/tests/CMakeFiles/test-libneopg.dir/__/proto/uri_tests.cpp.o
[ 66%] Built target gpg-error-test
[ 66%] Linking CXX executable assuan-test
[ 66%] Built target assuan-test
[ 66%] Linking CXX executable gcrypt-test
[ 66%] Built target gcrypt-test
make[1]: *** [CMakeFiles/Makefile2:1658: neopg-tool/CMakeFiles/neopg-tool.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
[ 66%] Linking CXX executable test-libneopg
[ 66%] Built target test-libneopg
make: *** [Makefile:160: all] Error 2
builder for '/nix/store/vrp0lffg377x1jx9aj8dn6lx7xnh00hz-neopg-0.0.6.drv' failed with exit code 2

Question about licensing

How does this licensing work?

For now, many parts of NeoPG are licensed by the upstream authors under various licenses, including GPL and LGPL variants. Please refer to the copyright notice at the top of every file.

New source code contributed by the NeoPG authors is licensed under the permissive Simplified BSD license (the same license as Botan, the cryptography library we want to use).

Wouldn't that make this project (and any new source code addition on this project) a "derivative work" of those "upstream" projects ?

key generation failed when enter passphrase

neopg gpg2 --full-generate-key failed with

neopg: agent_genkey failed: GPG_ERR_NO_PASSPHRASE
Key generation failed: GPG_ERR_NO_PASSPHRASE

after entering a passphrase. without a passphrase it's working

ensure NeoPG::URI and NeoPG::Http agree on URL parsing.

Mismatching URL parser can lead to security problems (for example whitelisting domain names such as "brave.com%60x.code-fu.org"). Currently, NeoPG does only check the protocol, but in case we want to do more, this issue shall remind us to be careful.

Unfortunately, libcurl doesn't expose the URL parser yet: curl/curl#2412

Manpage

Please build a manpage. it can be very simple at first, but it would be really helpful. There has to be one, sooner or later :)

GPGME support

What is the status of porting GPGME library?
Are there bindings to other languages that work (it's python i'm interested)?

Ubuntu (artful)

I'm trying to compile neopg in Ubuntu.
Because there is no botan2 package available I downloaded the source and compiled it successfully. My problem was the CMake couldn't find the libusb-1.0 package. I have no idea how to investigate that problem. Any advice?

Embed resources

If we are serious about the "portable app" concept of providing a single binary, we need to embed some resources into the binary.

  • The translations (mo files). boost::locale::message supports this
  • The SKS Poolserver root certificate (sks-keyservers.netCA.pem).

Here is a helper binary and cmake/boost integration: https://github.com/cyrilcode/embed-resource

Find maximum key size on public keyservers

Find the maximum reasonable key size in the SKS pool. For this, do a histogram over all keys and find a reasonable cut off after eliminating outliers.Then limit http requests to that.

Use Botan Pipe and Filters

This is challenging, because:

  • GnuPG uses a push/pull architecture for write/read pipes, while Botan only supports a push/push architecture (this is why usually the read and write direction of a filter are merged in a single filter object, but only one of the parts is used).
  • GnuPG has some support for OpenPGP encodings inside the pipe implementation (for example splitting up in chunks with partial length headers)
  • GnuPG changes the filter set up dynamically (for example to insert compression/decompression after detection)

Simplifying the logic so much that we can do the final replacement will take a while. Maybe it is faster to reimplement from scratch.

Low-level packet parser

See PR #60.

  • Public-Key Encrypted Session Key Packet
  • Signature Packet
    • Signature Data
      • Signature Data (V3)
      • Signature Data (V4)
        • Signature Subpacket Data (V4)
    • Signature Material
      • RSA
      • DSA
      • Ecdsa
      • Eddsa
      • Raw
    • Signature Subpackets
      • SignatureCreationTime
      • SignatureExpirationTime
      • ExportableCertification
      • TrustSignature
      • RegularExpression
      • Revocable
      • KeyExpirationTime
      • PreferredSymmetricAlgorithms
      • RevocationKey
      • Issuer
      • NotationData
      • PreferredHashAlgorithms
      • PreferredCompressionAlgorithms
      • KeyServerPreferences
      • PreferredKeyServer
      • PrimaryUserId
      • PolicyUri
      • KeyFlags
      • SignersUserId
      • ReasonForRevocation
      • Features
      • SignatureTarget
      • EmbeddedSignature
  • Symmetric-Key Encrypted Session Key Packet
  • One-Pass Signature Packet
  • Secret-Key Packet
  • Public-Key Packet
    • Public-Key Data
      • Public-Key Data (V3)
      • Public-Key Data (V4)
    • Public-Key Material
      • RsaPublicKeyMaterial
      • DsaPublicKeyMaterial
      • ElgamalPublicKeyMaterial
      • EcdsaPublicKeyMaterial
      • EcdhPublicKeyMaterial
      • EddsaPublicKeyMaterial
      • Raw
  • Secret-Subkey Packet
  • Compressed Data Packet
  • Symmetrically Encrypted Data Packet
  • Marker Packet
  • Literal Data Packet
  • Trust Packet
  • User ID Packet
  • Public-Subkey Packet
  • User Attribute Packet
    • User Attribute Subpacket
      • Image Attribute Subpacket
      • Raw User Attribute Subpacket
  • Sym. Encrypted and Integrity Protected Data Packet
  • Modification Detection Code Packet

Email-verifying key server

We need a simple, centralized key server that verifies email addresses, and allows to update and delete keys via the command line and web interface. Features are to be determined, but it should be very minimal:

  • Probably only needs to store key and (hashed?) email address, and during transactions a session key. No password, all operations work like "I forgot my password" mechanisms on websites.
  • Keys should fulfill some security requirements (freshness, expiration, etc).
  • Good integration into neopg.
  • Email verification by neopg command line or maybe even just a simple URL click. The registration key could be encrypted, but deletion can't be in case the key is lost. The most convenient would be to not require a full verification, and just allow the owner of the email address to set arbitrary keys.
  • Some protection against crawling.
  • If it stores email addresses in clear (rather than hashed), it can send reminder mails when the key is going to expire or becomes insecure. OTOH, not storing readable email addresses is a good idea.

Requires more thought, but we need to solve the problem of key retrieval in OpenPGP without repeating past mistakes. And although we want to support keybase.io, we don't want to put all eggs into one basket.

There is also autocrypt and pep for direct negotiation.

keybase.io support

keybase.io provides some data that can be publicly validated, for example binding of OpenPGP keys to twitter accounts and other social networks. This allows to use OpenPGP even without email, which circumvents a lot of problems, at the cost of being less private.

It's not clear at this point what supporting keybase.io support means, but it certainly includes things like key retrieval via twitter handle, for example. Maybe with twitter oauth integration, we can even send direct messages. Needs more research.

FreeBSD bus error in boost::locale::conv when charmap is not set

System: FreeBSD 11.1-RELEASE (GENERIC)

[~/neopg/build]$ gdb src/neopg 
GNU gdb 6.1.1 [FreeBSD]
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "amd64-marcel-freebsd"...
(gdb) run 
Starting program: /usr/home/lambdafu/neopg/build/src/neopg 
warning: Lowest section in /usr/local/lib/libicudata.so.59 is .hash at 0000000000000120

Program received signal SIGBUS, Bus error.
0x0000000800f20155 in boost::locale::conv::impl::convert_to<wchar_t> () from /usr/local/lib/libboost_locale.so.1.64.0
(gdb) bt
#0  0x0000000800f20155 in boost::locale::conv::impl::convert_to<wchar_t> () from /usr/local/lib/libboost_locale.so.1.64.0
#1  0x0000000800f1f89d in boost::locale::conv::to_utf<wchar_t> () from /usr/local/lib/libboost_locale.so.1.64.0
#2  0x0000000800f3afb1 in boost::locale::util::simple_converter_impl::simple_converter_impl () from /usr/local/lib/libboost_locale.so.1.64.0
#3  0x0000000800f3ac23 in boost::locale::util::create_simple_codecvt () from /usr/local/lib/libboost_locale.so.1.64.0
#4  0x0000000800f3e7ac in boost::locale::impl_icu::create_codecvt () from /usr/local/lib/libboost_locale.so.1.64.0
#5  0x0000000800f49b1a in boost::locale::impl_icu::icu_localization_backend::install () from /usr/local/lib/libboost_locale.so.1.64.0
#6  0x0000000800f2d7e8 in boost::locale::localization_backend_manager::impl::actual_backend::install () from /usr/local/lib/libboost_locale.so.1.64.0
#7  0x0000000800f29b27 in boost::locale::generator::generate () from /usr/local/lib/libboost_locale.so.1.64.0
#8  0x0000000800f298fd in boost::locale::generator::generate () from /usr/local/lib/libboost_locale.so.1.64.0
#9  0x000000000068b574 in boost::locale::generator::operator() (this=0x7fffffff9608, id=@0x7fffffff95a0) at generator.hpp:202
#10 0x0000000000679f3f in setup_locale () at /usr/home/lambdafu/neopg/src/neopg.cpp:28
#11 0x000000000066eb8e in main (argc=1, argv=0x7fffffffeb18) at /usr/home/lambdafu/neopg/src/neopg.cpp:105
(gdb) 

Locale settings:

$ locale   
LANG=
LC_CTYPE="C"
LC_COLLATE="C"
LC_TIME="C"
LC_NUMERIC="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_ALL=

As a work-around, setting the charmap for LC_CTYPE to basically any value works:

$ LC_CTYPE=en_US.UTF-8 src/neopg 
NeoPG implements the OpenPGP standard.
Usage: src/neopg [OPTIONS] [SUBCOMMAND]
[...]

Key cleanup

On import, in particular of secret keys, offer to clean up the key by removing obsolete ciphers, keyserver urls, and other preferences. Lots of stuff that can go in here.

Request for SM2, SM3 and SM4

Botan2 already has support for SM2/3/4 algorithms which are published by OSCCA(Office of State Commercial Cipher Administration) to meet regulations for use within China. And also, openpgp has that draft extension which can be found here:
https://datatracker.ietf.org/doc/draft-ribose-openpgp-oscca/

So, please, if you can add the support for those algorithms? Thanks.

You can run 'botan-test sm2_enc sm2_sig hash' to verify the support.

New command line syntax proposition

Hello,

I've encountered your project after I was wondering if there are any alternatives to the awful and extremely unintuitive CLI syntax of current gpg. I've discussed the option of contributing to the upstream GnuPG code an alternative executable that will use the same C functions and library that the executable gpg uses but with a different CLI syntax and git style commands and arguments and not just everything starting with --. It was discussed thoroughly in the gnupg-devel mailing list in these threads: First here and a long time afterwards here.

I just wanted to share with you my design for the new syntax which I've built strictly according to the official documentation of GnuPG. It's in this gist, I hope you'll understand the syntax of it. I've used # for a subcommand a ## for a subcommand's argument etc. Most of the options are named the same as in the original gpg syntax.

Please summarize project "status" in the README

Hello!

This project looks very interesting! I am the lead developer of Mailpile (https://www.mailpile.is/) and we currently rely on GnuPG for our OpenPGP implementation. GnuPG is not the easiest of tools to work with, so I am always on the look out for alternatives. I agree with a lot of the "opinions" you've expressed and the direction you are taking, so this project is very interesting to me!

The one thing that is somewhat unclear to me, is what the current state of this project is.

Is it experimental? Is it alpha? Is it usable as a replacement for GnuPG, and if so in what cases?

It would be really helpful if things like this were explained with just a few sentences in the project README. Thanks!

(Another less important, but related question, has to do with the project itself. Is this a hobby project? Is this sponsored by your employer? If I decide I want to build on your work, how confident can I be that development and maintenance will continue?)

Release 0.0.6?

For the Nixpkgs upgrade to 0.0.5, I somehow fail to run the tests. After a while I noticed, that I'm able to build neopg on current master just fine. Would it be possible to get a new release? That would make the version number of the package in Nixpkgs look more nice. Alternatively I'd bump neopg to 0.0.6pre2018-11-10 in NixOS/nixpkgs#59942 .

Remove s2k modes 0 and 1

These are insecure. For decrypting existing data, they might be slightly useful, but they should be removed from the user interface entirely.

support gpg-agent protocol

The gpg-agent protocol is also implemented by seahorse, for example. It may serve as an extension for certain use cases. We might want to support it even if we don't use it internally.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.