Blog

Series · 3 partsEnvelope Encryption with AWS KMS in Node.js
  1. Authenticated Encryption Using the Web Crypto API
  2. Generating DEKs with AWS KMS
  3. Encrypting and Decrypting Files

2026 4 posts

10 min read

Envelope Encryption with AWS KMS in Node.js · Part Three

Encrypting and Decrypting Files

The final part of the envelope encryption triptych combines all of our learnings together in two CLI programs — an encryptor and a decryptor.

10 min read
7 min read

Envelope Encryption with AWS KMS in Node.js · Part Two

Generating DEKs with AWS KMS

This article introduces the AWS KMS API. It covers provisioning credentials with an IAM user, the AWS CLI, and aws-vault, creating a KMS key, and generating Data Encryption Keys using the GenerateDataKey API.

7 min read
6 min read

Envelope Encryption with AWS KMS in Node.js · Part One

Authenticated Encryption Using the Web Crypto API

Envelope encryption protects data at rest by encrypting each message with an ephemeral Data Encryption Key (DEK), which is itself encrypted and stored alongside the ciphertext. This article covers the foundational layer: authenticated encryption with AES-GCM using the Web Crypto API in Node.js.

6 min read

2025 6 posts

12 min read

How to Set Up PostgreSQL and Migrations in ASP.NET Web Forms

If, for archeological reasons, you need to work with ASP.NET Web Forms in 2025, this post is for you. You will find out how to set up Entity Framework 6 with PostgreSQL and how to create migrations. None of this has been tested in production.

12 min read
25 min read

Secure cookie library in Go from scratch

In this post, I show you how to write a "secure cookie" library that will encrypt and authenticate payloads using the XChaCha20-Poly1305 AEAD, using the Go programming language.

25 min read

2024 2 posts

2 min read

How to Use Phoenix 1.7 with Vite.js

How to set up a Phoenix 1.7 project with Vite.js in place of the default setup, or how to start a Phoenix project if you're not a Tailwind person.

2 min read

2023 2 posts

3 min read

Using UUIDv6 or v7 as primary key in Ecto

UUIDs are a great choice for primary keys in PostgreSQL. However, not all UUIDs were created equal. This post discusses the pros and cons of different UUID formats and explains how to use newer formats in Ecto for Elixir.

3 min read

2022 30 posts

2 min read

Absinthe Tips and Tricks: Generic Types

Over the years, I have developed a big collection of modules and macros that I copy and paste in all Elixir projects using Absinthe. It is high time I started sharing my experience with the community. Today I present a simple way to build “generic” types.

2 min read
3 min read

PostgreSQL without Homebrew on macOS

In this post I describe why I decided not to use PostgreSQL from Homebrew and how you can use a Dockerized image instead.

3 min read
1 min read

Learning iOS and Swift · Day 28

Signing in over API

Today I removed the mock from the login view and made the form actually call a login mutation upon submission.

1 min read
1 min read

Learning iOS and Swift · Day 27

Login view

Today I implemented a login view with a mocked authentication step.

1 min read
3 min read

Learning iOS and Swift · Day 26

Keychain storage, MVVM architecture

Exploring integration with Apollo Client for iOS. Discovering MVVM architecture and singleton classes. Storing authentication data inside the Keychain using the Security module, which is part of Foundation.

3 min read
1 min read

Learning iOS and Swift · Day 25

Adding dots to a page view, watchOS 101

I made my first steps building a watchOS application according to Apple's SwiftUI tutorial.

1 min read

More series

Learning iOS and Swift — 28 parts