<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Articles on Technology on Al's Thoughts...</title><link>https://dalw.in/posts/technology/</link><description>Recent content in Articles on Technology on Al's Thoughts...</description><generator>Hugo</generator><language>en</language><lastBuildDate>Mon, 18 May 2026 23:15:32 +0530</lastBuildDate><atom:link href="https://dalw.in/posts/technology/index.xml" rel="self" type="application/rss+xml"/><item><title>How to Use Elliptic Curve Diffie Hellman Library in Go</title><link>https://dalw.in/posts/technology/how-to-use-elliptic-curve-diffie-hellman-library-in-go/</link><pubDate>Mon, 18 May 2026 23:15:32 +0530</pubDate><guid>https://dalw.in/posts/technology/how-to-use-elliptic-curve-diffie-hellman-library-in-go/</guid><description>&lt;p&gt;Go introduced a new library called &lt;a href="https://en.wikipedia.org/wiki/Elliptic-curve_Diffie%E2%80%93Hellman"&gt;Elliptic Curve Diffie Hellman&lt;/a&gt;(&lt;a href="https://pkg.go.dev/crypto/ecdh"&gt;crypto/ecdh&lt;/a&gt;) in v1.20.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s see how to use this library to exchange encrypted data between two entities without sharing the secret that was used to encrypt the data.&lt;/p&gt;
&lt;h3 id="generate-public-key-on-the-client"&gt;Generate public key on the client&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;clientCurve&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#ff7b72;font-weight:bold"&gt;:=&lt;/span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;ecdh.&lt;span style="color:#d2a8ff;font-weight:bold"&gt;P256&lt;/span&gt;()&lt;span style="color:#6e7681"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;clientPrivKey,&lt;span style="color:#6e7681"&gt; &lt;/span&gt;err&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#ff7b72;font-weight:bold"&gt;:=&lt;/span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;clientCurve.&lt;span style="color:#d2a8ff;font-weight:bold"&gt;GenerateKey&lt;/span&gt;(rand.Reader)&lt;span style="color:#6e7681"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff7b72"&gt;if&lt;/span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;err&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#ff7b72;font-weight:bold"&gt;!=&lt;/span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#79c0ff"&gt;nil&lt;/span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;{&lt;span style="color:#6e7681"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6e7681"&gt;	&lt;/span&gt;t.&lt;span style="color:#d2a8ff;font-weight:bold"&gt;Fatalf&lt;/span&gt;(&lt;span style="color:#a5d6ff"&gt;&amp;#34;Error: %v&amp;#34;&lt;/span&gt;,&lt;span style="color:#6e7681"&gt; &lt;/span&gt;err)&lt;span style="color:#6e7681"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#6e7681"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;clientPubKey&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#ff7b72;font-weight:bold"&gt;:=&lt;/span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;clientPrivKey.&lt;span style="color:#d2a8ff;font-weight:bold"&gt;PublicKey&lt;/span&gt;()&lt;span style="color:#6e7681"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="generate-public-key-on-the-server"&gt;Generate public key on the server&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;serverCurve&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#ff7b72;font-weight:bold"&gt;:=&lt;/span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;ecdh.&lt;span style="color:#d2a8ff;font-weight:bold"&gt;P256&lt;/span&gt;()&lt;span style="color:#6e7681"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;serverPrivKey,&lt;span style="color:#6e7681"&gt; &lt;/span&gt;err&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#ff7b72;font-weight:bold"&gt;:=&lt;/span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;serverCurve.&lt;span style="color:#d2a8ff;font-weight:bold"&gt;GenerateKey&lt;/span&gt;(rand.Reader)&lt;span style="color:#6e7681"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff7b72"&gt;if&lt;/span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;err&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#ff7b72;font-weight:bold"&gt;!=&lt;/span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#79c0ff"&gt;nil&lt;/span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;{&lt;span style="color:#6e7681"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6e7681"&gt;	&lt;/span&gt;t.&lt;span style="color:#d2a8ff;font-weight:bold"&gt;Fatalf&lt;/span&gt;(&lt;span style="color:#a5d6ff"&gt;&amp;#34;Error: %v&amp;#34;&lt;/span&gt;,&lt;span style="color:#6e7681"&gt; &lt;/span&gt;err)&lt;span style="color:#6e7681"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#6e7681"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;serverPubKey&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#ff7b72;font-weight:bold"&gt;:=&lt;/span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;serverPrivKey.&lt;span style="color:#d2a8ff;font-weight:bold"&gt;PublicKey&lt;/span&gt;()&lt;span style="color:#6e7681"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The &lt;code&gt;clientPubkey&lt;/code&gt; and &lt;code&gt;serverPubKey&lt;/code&gt; can be shared over the network as plain text.&lt;/p&gt;</description></item></channel></rss>