What is Nostr?
JeffG
npub1zuu…c2uc
2024-07-12 10:11:42

MLS over Nostr - 12th July 2024

This is the third in a series of weekly updates detailing progress on bringing MLS protocol DMs and group messaging to Nostr.

Previous Updates

Progress this week

Short update post this week but I made solid progress updating several OpenMLS dependencies and building a new library that implements all the OpenMLS crypto requirements for Nostr.

HPKE-RS

I mentioned a PR last week on the rust-hpke library, that PR is still waiting on review. However, in the meantime, the OpenMLS library depends on a slightly different hpke library, the hpke-rs library.

This library didn’t support the secp256k1 curve either so I’ve opened a PR to add support for secp256k1. That PR uses the RustCrypto library that is the default in the the hpke-rs library. However, because this library is built to allow for swapping out the underlying crypto library (using traits), I was also able to create a new library that uses the secp256k1 library instead of the RustCrypto library. This is the main crypto library that almost all Bitcoin and Nostr apps use so it’s important we use that instead of RustCrypto.

OpenMLS Nostr Crypto

The library that I’ve created (openmls-nostr-crypto) does a few things via separate sub-libraries (crates). The entire library tries to do as little as possible; only implementing the one required ciphersuite for all MLS implementations and the secp256k1 schnorr signatures ciphersuite I’ve created for Nostr. It’s also using the right secp256k1 library to do it.

openmls-nostr-crypto: implementes the crypto traits that the OpenMLS library expects to find for a given provider and removes all the ciphersuites that we don’t care about supporting.

hpke-rs-nostr-crypto: This implements the crypto traits that the hpke-rs library expects to find. Again removing all the ciphersuites we don’t care about supporting.

I’ve not yet written any tests for these libraries (which needs to be done) but I’ve gotten some very simple demos working with OpenMLS using this new set of libraries to handle the crypto.

I’ve been really impressed with the simplicity of the OpenMLS interface as well. While there is A LOT going on under the hood, the public interface that client developers have to use is clean and simple.

Onward and Upward

Next week I’ll continue working on these libraries; adding tests and continuing to build out my small demo app. I’ve been in touch with the maintainers of the OpenMLS library and I’m hoping to get a review done with them on my PRs and on my new library.

One thing I’ll call out here: The review of my library and getting them to review the direction of the project overall will be paid consulting so I’m making sure that I’ve got as much done as possible before scheduling that time and paying their rates. I’m a strong believer that the right conversation can save you months of wasted time, but I’m also a believer in making sure you’re prepared if you’re going to drop money on that conversation. 😅

Author Public Key
npub1zuuajd7u3sx8xu92yav9jwxpr839cs0kc3q6t56vd5u9q033xmhsk6c2uc