Understanding IPFS in Depth(5/6): What Is Libp2p?
medium.com
medium.com
Here are a few unofficial implementations on Libp2p in C. - https://github.com/squishyhuman/c-libp2p - https://github.com/Agorise/c-libp2p
Here are Go, and Rust (Official)implementations: - https://github.com/libp2p/go-libp2p - https://github.com/libp2p/rust-libp2p You can find the interfaces in the codebase. If you are having a hard time finding the interfaces in the codebase, or not able to figure out how to use them, then PLEASE head over to discuss.libp2p.io. There are a ton of people who will be more than happy to help you :)
I will try to add all this info in the article wherever possible. Is there anything else that you what to be improved in the article?
There's the Rust repository, and the auto-generated documentation can be found at https://docs.rs/libp2p/0.11.0/libp2p/
I'm curious what about a C implementation is the requirement for you? Is it the ability for to link against your C/C++ code, or for reading and understanding the structures and algorithms with the simplicity of C parlance, or another reason?
If the first one, it is possible to create a C shared-library "cdylib" with Rust (included in cargo by default), and using cbindgen[1] you can generate the headers to use the c-api.
It doesn't look like anybody has done that yet, unfortunately. But know that it should be a lot easier to create C/C++ compatibility than doing a rewrite or port.
[1] https://github.com/eqrion/cbindgen
EDIT:
Or as the sibling comment points out, there ARE C implementations out there, so you can ignore this post.