<div dir="ltr">Hi folks,
<div><br></div><div>The curve25519 implementation I'm using (agl's) returns all zeros if its given points that are outside of the twist. How should noise handle peers sending each other bogus points?</div><div><br></div><div>Option 1: Do nothing. ECDH() will return 32 bytes of zeros, which will then continue along happily computing things.</div><div><br></div><div>Option 2: Compare ECDH() output to all zeros in constant time, and return an error if it matches.</div><div><br></div><div>Option 1 would be a lot simpler, obviously. But is this safe? Is it <i>guaranteed</i> that continuing the chain of calculations from all zeros will always result in some invalid state that will be rejected anyway? Or is there actually something dangerous here?</div><div><br></div><div>With option 2, I'd just ignore the message and not let it change any session state, as I currently do if AEAD fails.</div><div><br></div><div>Which is best?</div><div><br></div><div>Thanks,</div><div>Jason</div></div>