<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: age123456gpg</title><link>https://news.ycombinator.com/user?id=age123456gpg</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Thu, 25 Jun 2026 23:40:42 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=age123456gpg" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by age123456gpg in "A Gentle Introduction to Lattice-Based Cryptography [pdf]"]]></title><description><![CDATA[
<p>I've implemented ML-KEM by the spec as an exercise recently (<a href="https://github.com/AlexanderYastrebov/mlkem" rel="nofollow">https://github.com/AlexanderYastrebov/mlkem</a>) and here are related links that helped me understand the math:<p>* [Enough Polynomials and Linear Algebra to Implement Kyber](<a href="https://words.filippo.io/kyber-math/" rel="nofollow">https://words.filippo.io/kyber-math/</a>)<p>* [Basic Lattice Cryptography. The concepts behind Kyber (ML-KEM) and Dilithium (ML-DSA)](<a href="https://eprint.iacr.org/2024/1287.pdf" rel="nofollow">https://eprint.iacr.org/2024/1287.pdf</a>)<p>* [A Complete Beginner Guide to the Number Theoretic Transform (NTT)](<a href="https://eprint.iacr.org/2024/585.pdf" rel="nofollow">https://eprint.iacr.org/2024/585.pdf</a>)</p>
]]></description><pubDate>Sun, 31 May 2026 14:46:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=48346081</link><dc:creator>age123456gpg</dc:creator><comments>https://news.ycombinator.com/item?id=48346081</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48346081</guid></item><item><title><![CDATA[New comment by age123456gpg in "Generalist AI – building general intelligence for the physical world"]]></title><description><![CDATA[
<p>Here is the video featuring data collection <a href="https://www.youtube.com/watch?v=PyGkn9DYm9s" rel="nofollow">https://www.youtube.com/watch?v=PyGkn9DYm9s</a></p>
]]></description><pubDate>Sat, 30 May 2026 10:43:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=48334788</link><dc:creator>age123456gpg</dc:creator><comments>https://news.ycombinator.com/item?id=48334788</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48334788</guid></item><item><title><![CDATA[New comment by age123456gpg in "Generalist AI – building general intelligence for the physical world"]]></title><description><![CDATA[
<p>Hi, I've stumbled upon this channel and was amazed by the precision and performance of the real-world object manipulation. It looks like that for many tasks you don't really need five finger palm and chops sticks is enough.
Its also very interesting how they collect training data - there is a video where you can see people solving manipulation tasks using the very same grippers with cameras.</p>
]]></description><pubDate>Sat, 30 May 2026 10:12:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=48334608</link><dc:creator>age123456gpg</dc:creator><comments>https://news.ycombinator.com/item?id=48334608</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48334608</guid></item><item><title><![CDATA[Generalist AI – building general intelligence for the physical world]]></title><description><![CDATA[
<p>Article URL: <a href="https://www.youtube.com/channel/UCwV9z8IGmbUQUb5D8KSv3mQ">https://www.youtube.com/channel/UCwV9z8IGmbUQUb5D8KSv3mQ</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=48334607">https://news.ycombinator.com/item?id=48334607</a></p>
<p>Points: 2</p>
<p># Comments: 2</p>
]]></description><pubDate>Sat, 30 May 2026 10:12:21 +0000</pubDate><link>https://www.youtube.com/channel/UCwV9z8IGmbUQUb5D8KSv3mQ</link><dc:creator>age123456gpg</dc:creator><comments>https://news.ycombinator.com/item?id=48334607</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48334607</guid></item><item><title><![CDATA[New comment by age123456gpg in "Cloudflare to cut about 20% of its workforce"]]></title><description><![CDATA[
<p>20%</p>
]]></description><pubDate>Thu, 07 May 2026 20:46:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=48054724</link><dc:creator>age123456gpg</dc:creator><comments>https://news.ycombinator.com/item?id=48054724</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48054724</guid></item><item><title><![CDATA[New comment by age123456gpg in "Show HN: I built a sub-500ms latency voice agent from scratch"]]></title><description><![CDATA[
<p>Hi all!
Check out this Handy app <a href="https://github.com/cjpais/Handy" rel="nofollow">https://github.com/cjpais/Handy</a> - a free, open source, and extensible speech-to-text application that works completely offline.<p>I am using it daily to drive Claude and it works really-well for me (much better than macOS dictation mode).</p>
]]></description><pubDate>Mon, 02 Mar 2026 22:51:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=47225335</link><dc:creator>age123456gpg</dc:creator><comments>https://news.ycombinator.com/item?id=47225335</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47225335</guid></item><item><title><![CDATA[New comment by age123456gpg in "Jetbrains released skills for Claude Code to write modern Go code"]]></title><description><![CDATA[
<p>Related, Using go fix to modernize Go code <a href="https://go.dev/blog/gofix" rel="nofollow">https://go.dev/blog/gofix</a></p>
]]></description><pubDate>Sat, 21 Feb 2026 11:20:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=47099738</link><dc:creator>age123456gpg</dc:creator><comments>https://news.ycombinator.com/item?id=47099738</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47099738</guid></item><item><title><![CDATA[New comment by age123456gpg in "Understanding the bin, sbin, usr/bin, usr/sbin split (2010)"]]></title><description><![CDATA[
<p>Here [1] is a related trick in the old Unix to run either `foo`, `/bin/foo` or `/usr/bin/foo` (apparently before `PATH` convention existed):<p><pre><code>    char string[10000];
    strp = string;
    for (i=0; i<9; i++)
        *strp++ = "/usr/bin/"[i];
    p = *argv++;
    while(*strp++ = *p++);

    // string == "/usr/bin/foo"
    execv(string+9, args); // foo (execv returns only in case of error, i.e. when foo does not exist)
    execv(string+4, args); // /bin/foo
    execv(string, args);   // /usr/bin/foo
</code></pre>
[1] <a href="https://github.com/dspinellis/unix-history-repo/blob/Research-V4-Snapshot-Development/usr/source/s2/nohup.c" rel="nofollow">https://github.com/dspinellis/unix-history-repo/blob/Researc...</a></p>
]]></description><pubDate>Sun, 04 Jan 2026 17:08:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=46489880</link><dc:creator>age123456gpg</dc:creator><comments>https://news.ycombinator.com/item?id=46489880</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46489880</guid></item><item><title><![CDATA[New comment by age123456gpg in "FreeBSD Home NAS, part 3: WireGuard VPN, routing, and Linux peers"]]></title><description><![CDATA[
<p>You can get yourself a vanity key using <a href="https://github.com/AlexanderYastrebov/wireguard-vanity-key" rel="nofollow">https://github.com/AlexanderYastrebov/wireguard-vanity-key</a> tool:<p><pre><code>   % wireguard-vanity-key -prefix=NAS/
   private                                      public                                       attempts   duration   attempts/s
   EiBsDB8zt/G4+VWGvxW2ZznNXYmcslcIyJimNR2PpF4= NAS/aex8+IFzLePBYVNGMsSo/1/XeUZcam+Hn8wbNB4= 22619537   0s         112587360</code></pre></p>
]]></description><pubDate>Sun, 04 Jan 2026 15:24:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=46488823</link><dc:creator>age123456gpg</dc:creator><comments>https://news.ycombinator.com/item?id=46488823</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46488823</guid></item><item><title><![CDATA[New comment by age123456gpg in "Go away Python"]]></title><description><![CDATA[
<p>Official stance about supporting interpreter mode for the reference <a href="https://github.com/golang/go/issues/24118" rel="nofollow">https://github.com/golang/go/issues/24118</a></p>
]]></description><pubDate>Tue, 30 Dec 2025 10:48:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=46431888</link><dc:creator>age123456gpg</dc:creator><comments>https://news.ycombinator.com/item?id=46431888</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46431888</guid></item><item><title><![CDATA[New comment by age123456gpg in "Spinning Up an Onion Mirror Is Stupid Easy"]]></title><description><![CDATA[
<p>Indeed, be careful with anything that involves secret bits.<p>This tool uses proper crypto/rand initialisation of the starting key <a href="https://github.com/AlexanderYastrebov/onion-vanity-address/blob/314bd6641e546fd66613a823ba550cd0a4e46841/main.go#L225" rel="nofollow">https://github.com/AlexanderYastrebov/onion-vanity-address/b...</a><p>Check out my other vanity generators (they all use crypto/rand):<p><a href="https://github.com/AlexanderYastrebov/wireguard-vanity-key" rel="nofollow">https://github.com/AlexanderYastrebov/wireguard-vanity-key</a><p><a href="https://github.com/AlexanderYastrebov/age-vanity-keygen" rel="nofollow">https://github.com/AlexanderYastrebov/age-vanity-keygen</a><p><a href="https://github.com/AlexanderYastrebov/ethereum-vanity-address" rel="nofollow">https://github.com/AlexanderYastrebov/ethereum-vanity-addres...</a></p>
]]></description><pubDate>Thu, 30 Oct 2025 17:52:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=45762930</link><dc:creator>age123456gpg</dc:creator><comments>https://news.ycombinator.com/item?id=45762930</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45762930</guid></item><item><title><![CDATA[New comment by age123456gpg in "Spinning Up an Onion Mirror Is Stupid Easy"]]></title><description><![CDATA[
<p>You can generate yourself a vanity .onion address using <a href="https://github.com/AlexanderYastrebov/onion-vanity-address" rel="nofollow">https://github.com/AlexanderYastrebov/onion-vanity-address</a> tool.
It can also generate vanity client authorization keypair.</p>
]]></description><pubDate>Thu, 30 Oct 2025 15:03:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=45760829</link><dc:creator>age123456gpg</dc:creator><comments>https://news.ycombinator.com/item?id=45760829</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45760829</guid></item><item><title><![CDATA[New comment by age123456gpg in "WireGuard topologies for self-hosting at home"]]></title><description><![CDATA[
<p>WireGuard over WireGuard (WireGuard end-to-end encrypted hub and spoke) example <a href="https://www.procustodibus.com/blog/2021/12/wireguard-e2ee-hub-and-spoke/" rel="nofollow">https://www.procustodibus.com/blog/2021/12/wireguard-e2ee-hu...</a></p>
]]></description><pubDate>Sat, 04 Oct 2025 15:41:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=45474118</link><dc:creator>age123456gpg</dc:creator><comments>https://news.ycombinator.com/item?id=45474118</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45474118</guid></item><item><title><![CDATA[New comment by age123456gpg in "Consistent Hashing"]]></title><description><![CDATA[
<p><p><pre><code>  // hashItem computes the slot an item hashes to, given a total number of slots.
  func hashItem(item string, nslots uint64) uint64 {
    digest := md5.Sum([]byte(item))
    digestHigh := binary.BigEndian.Uint64(digest[8:16])
    digestLow := binary.BigEndian.Uint64(digest[:8])
    return (digestHigh | digestLow) % nslots
  }
</code></pre>
Should be using XOR: (digestHigh ^ digestLow) % nslots</p>
]]></description><pubDate>Sun, 28 Sep 2025 10:04:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=45403152</link><dc:creator>age123456gpg</dc:creator><comments>https://news.ycombinator.com/item?id=45403152</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45403152</guid></item><item><title><![CDATA[New comment by age123456gpg in "Show HN: Fast Tor Onion Service vanity address generator"]]></title><description><![CDATA[
<p>Prefix check is a fast operation compared to candidate key generation so checking several prefixes adds a small overhead compared to checking just one.<p>Wildcard support has low value for the use case in my opinion, compare:<p><pre><code>    helloyebjctfjivalxn343gppksrzdpm33qzmeeq4qnqwgrgqy75zoqd.onion
    qbtlzwabvvkvmogjy2wdvnn6gq55463jhellobwtnjsinvtxsur67oad.onion</code></pre></p>
]]></description><pubDate>Sat, 20 Sep 2025 10:27:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=45312051</link><dc:creator>age123456gpg</dc:creator><comments>https://news.ycombinator.com/item?id=45312051</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45312051</guid></item><item><title><![CDATA[New comment by age123456gpg in "Show HN: Fast Tor Onion Service vanity address generator"]]></title><description><![CDATA[
<p>It also supports distributed search, e.g. you can run it in Kubernetes without exposing the secret key to the cluster, see <a href="https://github.com/AlexanderYastrebov/onion-vanity-address?tab=readme-ov-file#kubernetes" rel="nofollow">https://github.com/AlexanderYastrebov/onion-vanity-address?t...</a></p>
]]></description><pubDate>Fri, 12 Sep 2025 19:45:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=45225928</link><dc:creator>age123456gpg</dc:creator><comments>https://news.ycombinator.com/item?id=45225928</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45225928</guid></item><item><title><![CDATA[New comment by age123456gpg in "Show HN: Fast Tor Onion Service vanity address generator"]]></title><description><![CDATA[
<p>Thanks, great question!<p>In short: I got obsessed by making it as fast as possible and read a ton of elliptic curve cryptography papers.<p>It was a journey that started from reading WireGuard kernel sources,
then I was thinking about deriving IPv6 address from peer key, 
left a random comment on a dated gist <a href="https://gist.github.com/artizirk/c91e4f8c237dec07e3ad1b286f1855a7" rel="nofollow">https://gist.github.com/artizirk/c91e4f8c237dec07e3ad1b286f1...</a> 
from which I learned about vanity key concept.<p>I naturally enjoy doing performance optimization work so when I discovered incremental approach idea here
<a href="https://github.com/warner/wireguard-vanity-address/pull/15" rel="nofollow">https://github.com/warner/wireguard-vanity-address/pull/15</a> I decided to create my own tool.<p>I've implemented first version of <a href="https://github.com/AlexanderYastrebov/wireguard-vanity-key" rel="nofollow">https://github.com/AlexanderYastrebov/wireguard-vanity-key</a> and then continuously profiled it to improve performance.
From profiling I saw that field inversion and multiplication are the main operations.<p>I realized I need to reduce unnecessary computation to make it faster and for that I need to understand the underlying math which is actually quite simple.<p>I read RFCs for Curve25519 and papers from D. J. Bernstein who invented it.<p>You can see how my understanding evolved from the commit history <a href="https://github.com/AlexanderYastrebov/wireguard-vanity-key/commits/main/" rel="nofollow">https://github.com/AlexanderYastrebov/wireguard-vanity-key/c...</a><p>Once I have the fastest algorithm to generate vanity Curve25519 keypairs I can apply it to other things that use Curve25519 (<a href="https://ianix.com/pub/curve25519-deployment.html" rel="nofollow">https://ianix.com/pub/curve25519-deployment.html</a>) or Ed25519 (<a href="https://ianix.com/pub/ed25519-deployment.html" rel="nofollow">https://ianix.com/pub/ed25519-deployment.html</a>) which is an equivalent curve.<p>See also my other related projects:
* [age-vanity-keygen](<a href="https://github.com/AlexanderYastrebov/age-vanity-keygen" rel="nofollow">https://github.com/AlexanderYastrebov/age-vanity-keygen</a>) — Fast vanity age X25519 identity generator.
* [vanity25519](<a href="https://github.com/AlexanderYastrebov/vanity25519" rel="nofollow">https://github.com/AlexanderYastrebov/vanity25519</a>) — Efficient Curve25519 vanity key generator.</p>
]]></description><pubDate>Fri, 12 Sep 2025 11:51:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=45221136</link><dc:creator>age123456gpg</dc:creator><comments>https://news.ycombinator.com/item?id=45221136</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45221136</guid></item><item><title><![CDATA[Show HN: Fast Tor Onion Service vanity address generator]]></title><description><![CDATA[
<p>Hello,<p>I've built the tool to generate vanity Tor Onion Service addresses:<p><pre><code>    $ onion-vanity-address allium
    Found allium... in 12s after 558986486 attempts (48529996 attempts/s)
    ---
    hostname: alliumdye3it7ko4cuftoni4rlrupuobvio24ypz55qpzjzpvuetzhyd.onion
    hs_ed25519_public_key: PT0gZWQyNTUxOXYxLXB1YmxpYzogdHlwZTAgPT0AAAAC1ooweCbRP6ncFQs3NRyK40fRwaodrmH572D8py+tCQ==
    hs_ed25519_secret_key: PT0gZWQyNTUxOXYxLXNlY3JldDogdHlwZTAgPT0AAAAQEW4Rhot7oroPaETlAEG3GPAntvJ1agF2c7A2AXmBW3WqAH0oUZ1hySvvZl3hc9dSAIc49h1UuCPZacOWp4vQ
</code></pre>
The tool checks ~45'000'000 keys per second on a laptop which is ~2x faster than widely-used mkp224o <a href="https://github.com/cathugger/mkp224o" rel="nofollow">https://github.com/cathugger/mkp224o</a><p>I've explained key performance difference here <a href="https://github.com/AlexanderYastrebov/onion-vanity-address?tab=readme-ov-file#the-fastest-search-algorithm" rel="nofollow">https://github.com/AlexanderYastrebov/onion-vanity-address?t...</a><p>Would love your feedback, thanks!</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=45216630">https://news.ycombinator.com/item?id=45216630</a></p>
<p>Points: 16</p>
<p># Comments: 6</p>
]]></description><pubDate>Thu, 11 Sep 2025 22:10:39 +0000</pubDate><link>https://github.com/AlexanderYastrebov/onion-vanity-address</link><dc:creator>age123456gpg</dc:creator><comments>https://news.ycombinator.com/item?id=45216630</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45216630</guid></item><item><title><![CDATA[New comment by age123456gpg in "Setting up a home VPN server with WireGuard (2019)"]]></title><description><![CDATA[
<p>You can create prefixed keys (aka vanity key) for each peer using <a href="https://github.com/AlexanderYastrebov/wireguard-vanity-key" rel="nofollow">https://github.com/AlexanderYastrebov/wireguard-vanity-key</a><p><pre><code>    $ wireguard-vanity-key --prefix=mac/
    private                                      public                                       attempts   duration   attempts/s
    Mtvsq5urRK/HRE1EfqTkZ9dtBNNBjSVPbqYBZ/BL4Qw= mac/t3wcAUhyZUti7OM4KsGQ7/V00HPRmzI3agaSplM= 37258118   1s         70119328

    $ wireguard-vanity-key --prefix=ipad/
    private                                      public                                       attempts   duration   attempts/s
    hJXdv5FKyem2WqWzduSaEhEw1H4b+6BGTIqJeYu9H1c= ipad/s6w2nBEDhmuEl/xyLeohEbfc5MWUy5D8dJHgAs= 158299886  2s         69564916</code></pre></p>
]]></description><pubDate>Mon, 08 Sep 2025 19:20:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=45172654</link><dc:creator>age123456gpg</dc:creator><comments>https://news.ycombinator.com/item?id=45172654</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45172654</guid></item><item><title><![CDATA[Show HN: Generate age encryption keys with custom prefixes]]></title><description><![CDATA[
<p>Hello,<p>I built a tool that generates age (modern file encryption <a href="https://github.com/FiloSottile/age" rel="nofollow">https://github.com/FiloSottile/age</a>) keys with vanity prefixes.<p>The key innovation is using the fastest search algorithm available – it can check ~40'000'000 keys per second on a laptop, finding 6-character prefixes within a minute.<p>For example, running `age-vanity-keygen hacker` will find a key like:<p><pre><code>  $ age-vanity-keygen hacker
  Found age1hacker... in 23s after 973647953 attempts (42686172 attempts/s)
  # created: 2025-08-18T22:22:22+02:00
  # public key: age1hackerxf9wukrzxfjt56xmq7c3y5ua5ylgrk0pmhlmdsg3773q8qh3ym6v
  AGE-SECRET-KEY-1K9G5Y6DRJPSXUFE2ELZULCG6SET7YC0676KR33WXSULW2CDHLGGS0EMJA2
</code></pre>
The output is identical to the standard `age-keygen` tool, so it's a drop-in replacement when you want memorable or branded public keys.<p>I've packaged it as both a Go binary and Docker image. The core algorithm is in a separate library (<a href="https://github.com/AlexanderYastrebov/vanity25519" rel="nofollow">https://github.com/AlexanderYastrebov/vanity25519</a>) if anyone wants to use it for other X25519-based systems.<p>Would love your feedback, thanks!</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=44945227">https://news.ycombinator.com/item?id=44945227</a></p>
<p>Points: 3</p>
<p># Comments: 0</p>
]]></description><pubDate>Mon, 18 Aug 2025 20:54:23 +0000</pubDate><link>https://github.com/AlexanderYastrebov/age-vanity-keygen</link><dc:creator>age123456gpg</dc:creator><comments>https://news.ycombinator.com/item?id=44945227</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44945227</guid></item></channel></rss>