I noticed that libsodiums secret signing keys contain a copy of the public key?
What is the reason for this? Does it have to do with how the ecdsa algorithm works or is it just for convenience?
Computing a signature requires the public key in addition to the secret key.
So, having it precomputed instead of recomputing it every time a new message has to be signed is faster.
But there is another reason. Using the wrong public key when signing may have catastrophic security implications. So, keeping both encoded together prevents misuse.