#PGPainless is the core library of the ecosystem, additionally providing a CLI tool (pgpainless-cli).

The 2.0.0 release brought OpenPGP v6 support and integrates #bouncycastle 1.82.

https://codeberg.org/PGPainless/pgpainless

pgpainless

Simple to use OpenPGP API based on Bouncycastle

Codeberg.org

I just released #PGPainless 2.0!

The new release comes with support for #OpenPGP v6 (#rfc9580) leveraging #BouncyCastle|s new high-level OpenPGP API internally.

The API saw substantial changes compared to the 1.7 release line. Among others, it migrated away from the singleton pattern towards configurable API instances.

You can download the (Linux_x86_64) native CLI binary binary here: https://github.com/pgpainless/pgpainless/releases/tag/2.0.0

Release PGPainless-CLI 2.0.0 Β· pgpainless/pgpainless

PGPainless 2.0.0

GitHub
Building a Secure Diary with Quarkus, Bouncy Castle, and Panache
Protect your thoughts, one encrypted entry at a time.
https://myfear.substack.com/p/secure-diary-quarkus-bouncy-castle-java-tutorial
#Java #Security #BouncyCastle #AES
The Bouncy Castle Project Turns 25: From JCE Jank to Quantum-Ready Royalty

Bouncy Castle Project turns 25: from a simple Java Cryptographic Library to a globally trusted cryptographic toolkit - and still open-source!

Keyfactor

Funny.

While MLKem Decapsulator has the ability to import a public key in byte[] format, MLDSA on the other hand has a MLDsaSignerthingy that does not and need to be passed a Public key from an AsymmetricCipherKeyPair object - which means that now i need to rewrite that bloody PEM thingy i deleted from my code 2 days ago.

Funny - like getting a kick in your balls kind of funny. #bouncycastle

And MLKem + MLDsa wrappers to simplify use of the PCQ stuff in #BouncyCastle are done.

Wrappers are extremely useful if you like, gonna USE the stuff, and not just throw stuff together and say "Hey look what i did" and then forget about it.

KEM became 4 functions and DSA only 3 (1 KeyPairGenerator + usables).

Figured out why GetEncoded() didn't work, i forgot to cast the public key into a MLKemPublicKeyParameters. After that, GetEncoded() works as it should. #bouncycastle

Also while trying out some PQC samples, i found several code examples that used

using Org.BouncyCastle.Pqc.Crypto.Crystals.Kyber;

But this namespace (.Kyber) does not exist for the .NET release of #BouncyCastle. Dilithium OTOH exists there under crystals.*

When trying out code, do note that it can be ancient and refer to testing namespaces or even namespaces that exists under another release (Java). Be very specific on what you google, for me i had to add -"java" to my search and then the results became better.

Qustion: Anyone know why .GetEncoded() method doesn't exist on a public key from an AsymmetricKeyPair object in #BouncyCastle ?

I'm using the C# version (2.6.0) and are working with keypairs from ML-KEM (Kyber) and ML-DSA (Dilithium).

Java seems to support this but not the C# version...