crypto: introduce ECDH

cc @trevnorris 
Why not just pass `char* buf` instead? No need to worry about GC, but I'm sure you already realize this seeing how you pass the value below.