<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Daniel Hugenroth</title>
    <link>https://www.danielhugenroth.com/</link>
    <description>Recent content on Daniel Hugenroth</description>
    <image>
      <title>Daniel Hugenroth</title>
      <url>https://www.danielhugenroth.com/photo_square.jpg</url>
      <link>https://www.danielhugenroth.com/photo_square.jpg</link>
    </image>
    <generator>Hugo -- 0.140.1</generator>
    <language>en-gb</language>
    <lastBuildDate>Sat, 17 Jan 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://www.danielhugenroth.com/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Scalable verifiability for supply chain security</title>
      <link>https://www.danielhugenroth.com/posts/2026_01_supply_chain_verifiability/</link>
      <pubDate>Sat, 17 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://www.danielhugenroth.com/posts/2026_01_supply_chain_verifiability/</guid>
      <description>&lt;p&gt;&lt;em&gt;This article discusses approaches for making supply chains verifiable and secure. The primary audience are developers working on build pipelines and dev ops engineers. It is &lt;a href=&#34;https://lightsquares.dev/blog/scalable-verifiability&#34;&gt;cross-posted from the Light Squares blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&#34;modern-supply-chain-security-needs-scalable-verifiability&#34;&gt;Modern supply chain security needs scalable verifiability&lt;/h3&gt;
&lt;p&gt;Modern software supply chains are complex. Dependency trees of modern software often contain thousands of packages across multiple ecosystems. This makes it challenging for any developer team to fully understand exactly what code is going into their build.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Android HKDF implementations</title>
      <link>https://www.danielhugenroth.com/posts/2024_04_android_hkdf_implementations/</link>
      <pubDate>Tue, 23 Apr 2024 00:00:00 +0000</pubDate>
      <guid>https://www.danielhugenroth.com/posts/2024_04_android_hkdf_implementations/</guid>
      <description>&lt;p&gt;&lt;em&gt;This article discusses several open-source implementations of the HKDF scheme for Android.
Since HKDF is a relatively simple algorithm, it allows for a good case study of cryptographic code.
The primary audience are applied cryptographers and software engineers working on protocols.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Key_derivation_function&#34;&gt;Key derivation functions (KDFs)&lt;/a&gt; are an important building block for practical protocols.
They take as input the input keying material (IKM), an optional salt, and a context string (info).
Their output is a pseudorandom key of specified length.
For most variants we can assume that the resulting key material is indistinguishable from random which makes it easily usable as input for other cryptographic algorithms.
Below is a typical example.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The power of example code</title>
      <link>https://www.danielhugenroth.com/posts/2024_02_the_power_of_example_code/</link>
      <pubDate>Thu, 15 Feb 2024 00:00:00 +0000</pubDate>
      <guid>https://www.danielhugenroth.com/posts/2024_02_the_power_of_example_code/</guid>
      <description>&lt;p&gt;&lt;em&gt;This article argues for the value of example code for software projects.
The primary audience are software engineers working on libraries and open-source code.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Executable example code is probably the most valuable artifact one can add to projects ranging from single-purpose libraries to larger frameworks.
This applies from the API design phase of a library to maintaining them in the long term.
The repositories of the Android libraries that I maintain(ed) typically include dedicated sample apps.
For example, the &lt;a href=&#34;https://github.com/lambdapioneer/sloth/tree/main/android#sample-app&#34;&gt;sample app for the Sloth library&lt;/a&gt; or the &lt;a href=&#34;https://libspectrum.io/docs/sample_apps&#34;&gt;sample app for the Spectrum library&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Secure remote access to Linux via SSH over Tailscale</title>
      <link>https://www.danielhugenroth.com/posts/2023_04_remote_access_linux_tailscale_and_ssh/</link>
      <pubDate>Sun, 09 Apr 2023 00:00:00 +0000</pubDate>
      <guid>https://www.danielhugenroth.com/posts/2023_04_remote_access_linux_tailscale_and_ssh/</guid>
      <description>&lt;p&gt;&lt;em&gt;This article describes how to securely access a local Linux machine remotely via SSH. The primary audience are engineers and researchers working with dedicated hardware behind a NAT, router, or similar.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Researchers often work with dedicated machines that live in the lab or at home.
This can be because they need to run experiments which require a lot of compute power or because they need to access hardware that is not available on a cloud server.
Since these machines typically do not have public IP addresses, accessing them remotely can seem tricky.
When a lab mate asked me, &amp;ldquo;how can I access my computer at home&amp;rdquo;, I failed to find a good online resource that describes how to do this in a convenient and secure manner.
That&amp;rsquo;s why I decided to write this quick tutorial.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Creating a .jar executable in an Android Studio project</title>
      <link>https://www.danielhugenroth.com/posts/2022_09_android_studio_and_cli_jar/</link>
      <pubDate>Mon, 12 Sep 2022 00:00:00 +0000</pubDate>
      <guid>https://www.danielhugenroth.com/posts/2022_09_android_studio_and_cli_jar/</guid>
      <description>&lt;p&gt;&lt;em&gt;This article describes how to add a CLI module to an existing Android Studio project that generates an executable .jar archive. The primary audience are software engineers working on Android.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;When developing for Android &amp;ndash; or other mobile platforms &amp;ndash; the change-to-effect latency can be often quite high due to the involved compilation and cross-device communication.
The regular unit tests get around this by executing in a VM on the host machine.
However, they can be inflexible when it comes to incorporating larger (binary) assets to test against.
Also, they do not lend themself to facilitate long fuzzing session or interactive usage.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Stack diving: getting up to speed in a large codebase</title>
      <link>https://www.danielhugenroth.com/posts/2022_08_stack_diving/</link>
      <pubDate>Fri, 26 Aug 2022 00:00:00 +0000</pubDate>
      <guid>https://www.danielhugenroth.com/posts/2022_08_stack_diving/</guid>
      <description>&lt;p&gt;&lt;em&gt;This article describes a technique that helps to become productive in a large code base quickly. When mentoring other engineers, I found this to be a very effective and teachable approach. The primary audience are software engineers and engineering managers.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;When I joined larger organisations, the on-boarding usually involved some sort of starter task: add a new metric to the dashboard, allow people to add a website URL to their profile, … .
They are a great idea, but often new engineers struggle to make progress &amp;ndash; paralysed by the complexity of the code base.
Most are start working on a small subset (e.g. do front-end changes first) before understanding the big picture.
This not only applies to junior engineers, the same is true for software veterans switching to a new company and auditors parachuting into a short-term project.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using linear programming (GLPK) for scheduling problems</title>
      <link>https://www.danielhugenroth.com/posts/2022_03_glpk_tutorial/</link>
      <pubDate>Wed, 23 Mar 2022 00:00:00 +0000</pubDate>
      <guid>https://www.danielhugenroth.com/posts/2022_03_glpk_tutorial/</guid>
      <description>&lt;p&gt;&lt;em&gt;This article is an intermediate-level tutorial on using the GNU Linear Programming Kit (GLPK) to solve a real-world scheduling problem. I wrote it, because I found only few good resources online that show specific solution strategies. This article wants to demystify linear programming and help you to start from a working example.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s first visit the problem.
Scheduling outings for a rowing club can be tedious &amp;ndash; and sometimes quite hard.
Given a list of squad members and their availabilities, we want to create outings with exactly 1 coach, 1 cox, and 4 people for each side of the boat (bow/stroke).
Rowing is sometimes duped the &amp;ldquo;ultimate team sport&amp;rdquo;, because even one missing person means that the entire crew cannot go out.
When faced with this challenge during term break where many people are only available sporadically, I gave up after trying to do so manually and resorted to &lt;a href=&#34;https://xkcd.com/1319/&#34;&gt;automating it&lt;/a&gt;.
In turn, this allowed me to do more &amp;ldquo;bespoke&amp;rdquo; scheduling where I could offer everyone to provide fine-grained availability and preferences.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Android support for Elliptic Curves (EC) in KeyPairGenerator</title>
      <link>https://www.danielhugenroth.com/posts/2021_07_ec_curves_on_android/</link>
      <pubDate>Sat, 10 Jul 2021 00:00:00 +0000</pubDate>
      <guid>https://www.danielhugenroth.com/posts/2021_07_ec_curves_on_android/</guid>
      <description>&lt;p&gt;&lt;em&gt;This article discusses the support for elliptic curves on Android. Its primary audience are engineers implementing or maintaining cryptographic protocols on Android. It hopefully also shows up as a helpful result when searching for error messages.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;During a recent cryptography project on Android, I found that only few Elliptic Curves are supported by the built-in key pair generator.
The typical error messages I got were along the line of &lt;code&gt;java.security.InvalidAlgorithmParameterException: unknown curve name&lt;/code&gt;.
Neither the official documentation nor any other online resource has a helpful list of the curves that I could use.
Therefore, I decided to do a quick inventory and summarize the results here.
In many places I link directly to the underlying source code.
I hope this post helps next engineer to better understand exceptions like the following one:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Password hashing on Android</title>
      <link>https://www.danielhugenroth.com/posts/2021_06_password_hashing_on_android/</link>
      <pubDate>Mon, 14 Jun 2021 00:00:00 +0000</pubDate>
      <guid>https://www.danielhugenroth.com/posts/2021_06_password_hashing_on_android/</guid>
      <description>&lt;p&gt;&lt;em&gt;This article explains why password hashing is important and how to do it properly on Android. The primary audience are software engineers working with passwords.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Password hashing&lt;/em&gt; or &lt;em&gt;password-based key derivation&lt;/em&gt; takes a password from the user as input and generates key material as output.
This is a helpful thing because many people struggle to memorize 256-bit encryption keys.
The standard procedure is to pass the user password through the password hashing function, and then use the derived key for cryptographic operations.
These operations can be symmetrical encryption/decryption of files or the generation of login tokens.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Roll-out phantoms - When results look worse than they are</title>
      <link>https://www.danielhugenroth.com/posts/2021_01_rollout_phantom/</link>
      <pubDate>Tue, 12 Jan 2021 00:00:00 +0000</pubDate>
      <guid>https://www.danielhugenroth.com/posts/2021_01_rollout_phantom/</guid>
      <description>&lt;p&gt;&lt;em&gt;This article explains an often-overlooked effect that can distort metrics during feature roll-out. The primary audience are software engineers and managers working on infrastructure and libraries.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I want to motivate this problem with a fictive scenario:
Alex wrote a replacement for an old and inefficient component in their app.
It took the team a few weeks to implement and they carefully measured on test devices that it improves all core metrics.
It is faster, uses less memory, all the good stuff.
Following procedure, Alex&amp;rsquo;s new code is bundled with the next release and they open it to 1% for an A/B test.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Advanced A/B test concepts</title>
      <link>https://www.danielhugenroth.com/posts/2021_01_ab_testing_201/</link>
      <pubDate>Mon, 11 Jan 2021 00:00:00 +0000</pubDate>
      <guid>https://www.danielhugenroth.com/posts/2021_01_ab_testing_201/</guid>
      <description>&lt;p&gt;&lt;em&gt;This article explains advanced A/B test concepts. The primary audience are engineers encountering such A/B tests for the first time.&lt;/em&gt;&lt;/p&gt;
&lt;!-- more --&gt;
&lt;p&gt;A/B tests allow engineers to validate fixes, test for regressions, and measure improvements.
In most situations the standard approach is to create a control and a test group of equal size (e.g. both 5%).
Users within the test population (e.g. 10%) are then randomly assigned to one of these.
However, sometimes more intricate methods can improve the user experience and make deployment safer and more effective.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Software survivability: maintainable code is not enough</title>
      <link>https://www.danielhugenroth.com/posts/2020_11_survivability_maintainability/</link>
      <pubDate>Tue, 24 Nov 2020 00:00:00 +0000</pubDate>
      <guid>https://www.danielhugenroth.com/posts/2020_11_survivability_maintainability/</guid>
      <description>&lt;p&gt;&lt;em&gt;This article discusses how long-term survival rate of internal software projects can be improved. The primary audience are senior software engineers and engineering managers working in medium to large organizations.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;When searching for &amp;ldquo;maintainable software&amp;rdquo;, many articles (&lt;a href=&#34;https://www.software.ac.uk/resources/guides/developing-maintainable-software&#34;&gt;[1]&lt;/a&gt;, &lt;a href=&#34;https://www.sealights.io/software-quality/software-maintainability-what-it-means-to-build-maintainable-software/&#34;&gt;[2]&lt;/a&gt;, &lt;a href=&#34;https://www.oreilly.com/library/view/building-maintainable-software/9781491955987/ch01.html&#34;&gt;[3]&lt;/a&gt;) focus on good coding practices.
And certainly, good naming conventions, readable code, continuous integration, unit testing, &amp;hellip; are all very important.
However, I feel that many discussions implicitly assume a caring person who is motivated and capable to take care of the required maintenance indefinitely.
I found that this is often not the case.
In a larger organization with considerable churn and regular changes in direction, it quickly happens that projects, which were once a great success, quickly fall between the cracks.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Drawing in Python</title>
      <link>https://www.danielhugenroth.com/posts/2020_08_python_drawing/</link>
      <pubDate>Sun, 23 Aug 2020 00:00:00 +0000</pubDate>
      <guid>https://www.danielhugenroth.com/posts/2020_08_python_drawing/</guid>
      <description>&lt;p&gt;&lt;em&gt;This article shares experiences with Python drawing libraries that I was missing when I started. The primary audience are software engineers who are looking for the tool for simple graphics.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;In 2020 the pandemic disrupted life.
This included the cancellation of the traditional &lt;a href=&#34;https://en.wikipedia.org/wiki/May_Bumps&#34;&gt;May Bumps rowing race&lt;/a&gt; that happens in Cambridge every year.
Therefore, a group of rowing enthusiasts got together and organised a decentralized running event called &lt;a href=&#34;https://en.wikipedia.org/wiki/May_Bumps_2020&#34;&gt;Virtual May Bumps&lt;/a&gt;.
It&amp;rsquo;s been a great success in bringing the community together (while being apart) and raising almost £6000 for charity.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Projects and papers</title>
      <link>https://www.danielhugenroth.com/projects/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.danielhugenroth.com/projects/</guid>
      <description>Here I collect recent projects and papers. Most projects stem from work in the industry or were part of my PhD. I enjoy specialised, under-explored, and niche areas while keeping an eye on the final product. Few things get me more excited than tackling challenging technical problems that result in large impact. You find many open-source projects on my [GitHub profile](https://github.com/lambdapioneer/) and full list of academic publications on [Google Scholar](https://scholar.google.com/citations?user=NCrUPQwAAAAJ).
</description>
    </item>
    <item>
      <title>Say hi 👋</title>
      <link>https://www.danielhugenroth.com/contact/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.danielhugenroth.com/contact/</guid>
      <description>You can get in contact with me via the mail below. I can potentially help with short-term consulting engagements related to my research areas: mobile security, protocol design, and applied cryptography. Also, I am always keen to learn about new resarch and opportunities for collaboration.
</description>
    </item>
  </channel>
</rss>
