You may find GitHub - corememltd/acmerl: Erlang ACME implementation useful to crib from, in particularly ranch_ssl_acme:challenge/3 and acme_client_certificate:ready/3.
This code has been extracted from an internal project so is likely to not be directly usable, but when writing it at the time I also noticed that it was hard to navigate public_key; I think I ended up just reading the OTP source until I started figuring it out.
Apologies for the roughness of the code, it was needed for a PoC and gen_statem had just appeared it was unclear at the time to me how to accomplish what I wanted with it. I recommend ignoring everything except my interaction with ssl and public_key ![]()
This project exists really now for me as just a map of how to do this in the future.
Of note, you likely will need something like ranch_ssl_acme for your project as IIRC at the time ranch did not support ssl:handshake_continue in a way that was usable to me; things may have changed since, I have not looked if they have though.
Good luck in your adventures!