protocol fix: Alice must provide proof of knowledge of her private key
currently, the first step of the protocol (key exchange phase) does not require either party to go first. however, there is a potential attack where if Bob sends his public key `P_b = G*s_b` first, Alice sends back `P_a = -P_b + P_a'` where the secret is then `-s_b + s_a'`. after Alice locks her eth, Bob then locks his monero in the account `P_a + P_b = -P_b + P_a' + P_b = P_a' = G*s_a'`. since Alice knows `s_a'` she can unlock the monero as well as the eth. 

to prevent this from happening, either Alice can be forced to send keys first (a bit hacky, not preferred), or Alice must send a proof of knowledge of the private key corresponding to `P_a` along with her keys. this proof of knowledege can take the form `P_a.sign(P_a)` (ie. a signature of `P_a`, signed with `s_a`). since Alice does not know `s_b` this prevents the above attack from occuring.

thanks to @kayabaNerve for pointing this out!