Laszlo

Hello, I am Laszlo

Software-Engineer, .NET developer

Contact Me

Prefixed Integer Encoding with SIMD

HTTP/3 uses QPACK to encode header fields. QPACK uses the prefixed integer encoding from RFC 7541.

In a previous post I explored this encoding and compared it with QUIC's Variable Length Integer Encoding. That comparison considered using SIMD for prefixed-integer decoding.

This post explores encoding prefixed integers using SIMD.

Prefixed Integer Encoding

Find out more »


Integer Decoding with HTTP/3

HTTP/3 uses 2 different types of integer encoding in a transitive way. This blog post compares these encodings from size, decoding performance, and decoding complexity perspectives. These encodings are:

  • variable-length integer encoding defined by QUIC-TRANSPORT
  • prefixed integer encoding defined by HPACK

Seeing HPACK might be surprising as HTTP/3 uses QPACK for field compression. QPACK does not define the prefixed integer encoding; it inherits it from HPACK.

Both encodings encode positive integer numbers and zero.

Find out more »


Try-Catch-Finally in C#

Introduction

C#'s try-catch-finally statements are fundamental building blocks of the language. While most developers learn exception handling early in their careers and use it frequently in production applications, the mechanics can be surprisingly complex. Exception handling is often discussed during developer job interviews, and even experienced developers can struggle with some of its nuances.

A Complex Case

Let's examine a challenging code snippet that demonstrates these complexities. What does the following code print to the console?

Find out more »


Cryptographic Signatures with a TPM

In my previous post, I compared different signature algorithms listed primarily in RFC 9421, extended with MLDsa44. The focus of that comparison was performance rather than cryptographic strength. I ran the tests on multiple hardware configurations and operating systems, but performed the signing in software.

In this post, I use Windows and a TPM to sign data. The TPM protects the private key and performs the private key operation, while public key operations may be handled by the provider or operating system The test setup matches the previous tests as closely as possible.

Message sizes:

  • A small message, roughly the size of a single JSON property value.
  • A medium message, where the plaintext is roughly the size of a few properties (93 bytes).
  • A 1 KB message.

Find out more »


Crypto Signatures

In this post, I look at the different signature algorithms available to .NET developers. I am going to compare these algorithms from a performance point of view. However, I am not going to focus on their security strength.

Signature algorithms are used to provide integrity and authenticity for data. At the network level, a TLS connection provides encryption, but this is often not enough because some environments may terminate TLS connections. For example, load balancers and ingress proxies often terminate the TLS connection (and sometimes even downgrade the HTTP protocol version) before forwarding requests to the actual server instance. By signing each request or response message individually, a receiver can validate the signature of the sender. It can confirm that a message has not been tampered with and that it originates from the sender rather than from a man-in-the-middle attacker.

What it does not do:

  • It does not protect against replay attacks by itself, unless a nonce, idempotency key, or timestamp is included in the signed data.
  • Signatures do not encrypt the message. Anyone with access to the message can still read it. This means TLS is still required at the connection level.

Find out more »