Quantum Hardening Cryptographic Protocols

I recently did some work as a side project for company called Patero that involved creating quantum hardened prototype of one of their products. This post discusses how to secure state-of-the-art cryptographic protocols against attacks from (future) quantum computers. It starts off with an introduction to how crypto protocols in general are constructed, to serve as an introduction for those of us who haven't done much crypto work in the past.

You can either watch the video below or read the full post for a text version.

Video auf Deutsch
Read the post.
No Comments
Write a comment.

How to Analyze Assembly Code to Guide Optimization Strategies

Another optimization post; this time about bin2c – a tool to generate C source files embedding binary files. Bin2c is up to 30 times faster than using XXD. Read the post.
No Comments
Write a comment.

Filtering Duplicates on the Command Line: 30x Faster than sort|uniq

This blog post discusses the implementation and optimization of huniq; a tool written in rust to filter non adjacent (and adjacent) duplicate lines on the command line outlining multiple advanced optimization techniques in the process. Read the post.
No Comments
Write a comment.

Why implementing equals() in javascript is hard and how use Symbols to do it correctly!

This post discusses the implementation of ferrum.js and how it can be used to implement equals in a safe, sound way in javascript. Read the post.
No Comments
Write a comment.

All the fibonacci sequence algorithms you will ever need

How to calculate numbers from the Fibonacci sequence quickly and efficiently. If you have been directed to this post in response to asking a question about Fibonacci sequences; in this case: hi! Read the post.
No Comments
Write a comment.

Why neither the command line nor the GUI is usable

My critique of both the command line interface and the graphical user interface; response to a blog post by someone criticizing command line interfaces. Read the post.
No Comments
Write a comment.

Blackmailed with Patreon account data

I received some spam mail using data from the patreon breach; writing this blurb in 2020 I marvel at how happy times these must have been for me to even note such an occurrence. I now receive hundreds of mails like this every day. Read the post.
1 Comment
Write a comment.

Refactoring Sauerbraten – When two STLs break

This blog post discusses the analysis of a bug in the microsoft visual studio C++ Standard Library. Read the post.
No Comments
Write a comment.

Hetzner Supportanfrage zu Zensur

Ich habe gerade einen Heise Artikel und einen Artikel auf SPON gelesen in denen beschrieben wird, dass Hetzner offenbar den Zensurwüschen der Russischen regierung nachkommt. Das passt mir nicht, weil mein eigener Server ja auch bei Hetzner läuft, also habe ich beschlossen mal ne Supportanfrage zu senden (und so vielleicht etwas Druck aufzubauen):

Sehr geehrte Damen und Herren, ich habe soeben folgenden Spiegel Artikel gelesen:

Webhoster Hetzner: Deutsche Firma hilft russischer Medienaufsicht bei Zensur

http://www.spiegel.de/netzwelt/netzpolitik/webhoster-hetzner-fordert-zensur-von-ukrainischer-website-glavcom-a-985147.html#js-article-comments-box-pager

Darin wird beschrieben, dass sie eine Mitteilung der russischen Medienaufsicht erhalten haben, die die Aufforderung enthielt teile der Ukrainischen Seite Glavcom zu Zensieren. Offenbar haben sie darauf reagiert indem sie die Website aufgefordert haben, die Inhalte vom Netz zu nehmen.

Das irritiert mich sehr, denn sie sind einen Deutsche Firma und ich hätte von ihnen erwartet, dass sie die Interessen ihrer Kunden wahren.

Bitte erläutern sie, wie rechtfertigen sie diese Vorgehensweise? Inwiefern widersprechen die Inhalte auf der Seite Glavcom Punkt 6.2 ihrer AGB? Im lichte auf meine eigenen Webseiten, möchte ich außerdem wissen unter welchen Voraussetzungen sie weitere Zensurmaßnahmen durchführen werden? Ist generell damit zu rechnen, dass den Zensurwünschen anderer Regierungen nachkommen?

Mit freundlichen Grüßen, Karolin Varner

Die Anfrage lizensiere ich natürlich unter CC-0 und ich lade alle anderen Herzlich ein dieses Schreiben als Vorlage für ihre eigenen Anfragen zu benutzen!

Update

(Heute ist der 17.3.2015)

Hetzner hat mir in der Tat geantwortet und das auch recht schnell – also zumindest viel, viel schneller als ich das hier veröffentliche.

Guten Tag,

Wir möchten uns zu dem von Spiegel Online veröffentlichten Artikel wie folgt äußern.

Wir als Webhosting-Unternehmen konzentrieren uns auf unsere Kernkompetenz, unseren Kunden auf aller Welt Leistungen rund um das Hosten von Webseiten bereit zu stellen, und halten uns politisch neutral. Wir pflegen keine politischen Beziehungen im In- und Ausland.

Grundsätzlich werden bei uns alle Beschwerden gleich behandelt. Sobald eine Beschwerde über eine auf unseren Servern gehostete Webseite eingeht, wird die Beschwerde formell geprüft und der betroffene Kunde per E-Mail an die bei uns hinterlegte E-Mail-Adresse informiert und gebeten, binnen 24 Stunden eine Stellungnahme dazu abzugeben.

Bei der formellen Prüfung prüfen wir, ob die beanstandete Webseite tatsächlich bei Hetzner Online gehostet wird. Darüber hinaus erfolgt eine erste Blickprüfung der Webseite, eine inhaltliche Prüfung findet in dieser Stufe noch nicht statt.

Erfolgt nach Fristablauf keine Reaktion/Stellungnahme des Kunden, so wird eine Erinnerung an den Kunden gesendet, mit Angabe einer evtl. Sperrung bei weiterer Nichtreaktion.

Bei weiterer Nichtreaktion wird diese Erinnerung nach weiteren 24 Stunden in der Regel nochmals versendet. Reagiert der Kunde weiterhin nicht, wird der Inhalt der beanstandeten Webseite geprüft und ggf. die Sperrung durchgeführt, um Schaden für den Kunden und Hetzner Online abzuwenden.

In dem von Spiegel Online veröffentlichten Fall wurde von unserem Kunden auf unsere Anfragen nicht fristgerecht eingegangen. Eine Serversperrung ist trotz der mangelnden Kommunikation des Kunden nicht erfolgt.

Bezüglich des Inhalts der angemahnten Website (sogut das über die Sprachbarriere hinweg möglich ist) sehen wir unsererseits keinen Grund, das Abuse-Ticket weiter zu verfolgen. Der Kunde wurde darüber informiert, dass wir das Abuse-Ticket schliessen, und unsererseits keine weiteren Schritte notwendig sind. Was uns in künftigen ähnlichen Fällen sehr helfen würde, wäre eine Stellungnahme des Kunden. Wenn man die Argumente beider Seiten kennt, fällt eine vernünftige Entscheidung im Abuse-Vorgang wohlmöglich leichter, als wenn nur die Beschwerde eines Beschwerdeführers vorliegt, welche vom Kunden ignoriert wird.

Wir bedauern den Vorfall sehr und hoffen, dass die kritischen Stimmen unsere Vorgehensweise nachvollziehen können.

Mit freundlichen Grüßen / Best Regards [NAME ENTFERNT]

No Comments
Write a comment.

Non breaking multi line strings in Ruby

Personally I like my code to be no longer than 60 characters (that's because so I can comfortably split my Vim screen and view two files side by side).
When I am coding rails it often happens that I need to create some error message or user feedback and these strings get far longer than 60 characters normally. Until now I've split my lines using + in these cases.

print "This is a nice, long string giving you some " +
    "feedback. Unfortunately it does not fit on the " +
    "screen so I have to split it."

I dislike that syntax because it is a lot of hassle to get the spaces and the quotes right. There seem to be a few better syntaxes (according to this StackOverflow Question), but they do not substantially improve the situation I think:

print "This is a nice, long string giving you some "\
      "feedback. Unfortunately it does not fit on the "\
      "screen so I have to split it."

The solution I came up with was a little helper function:

# Helper for multi line strings:
# Normalizes the string, so that every sequence of spaces is
# replaced by a single space.
# This also strips the string.
def NOCR(s)
  s.gsub!(/\s\s*/, ' ')
  s.strip!
  s
end

print NOCR "This is a nice, long string giving you some
    feedback. Unfortunately it does not fit on the screen
    screen so I have to split it."

This is still not a perfect solution, but it at least saves me the hassle of manually formatting the spaces and adding lots of quotes.

Of course, when using this, support for inserting newlines or tabs is completely gone. It would be possible to use some kind of escape syntax (%%, %n, %t, %s) to introduce it again, but I think in these cases it is better to fall back to manual formatting.

No Comments
Write a comment.

Git stats – LOC per author in the current head

So suddenly I am fluent in awk. Well, this is unexpected!

I've been working on one of my projects for quite a while and today I got interested in how much code I actually produced, so I wrote a little script to generate that statistic:

#! /bin/bash
# List the amount of code per author in the current HEAD

git ls-files "$@" | xargs -l1 git blame -s -- | awk '
  function get_author(commit) {
    author = commit_map[commit]
    if (author == "") {
      cmd = "git show -s --pretty=format:%ae " commit 
      cmd | getline author
      commit_map[commit] = author
      close(cmd)
    }
    return author
  }

  {
    author = get_author($1)
    counter[author] = counter[author] + 1
    if (counter[author] % 500 == 0)
      print($1 " -> " author " -> " counter[author]) | "cat >&2"
  }

  END {
    for (author in counter) {
      print counter[author] " " author
    }
  }
' | sort -n | column -t

Github Gist

This lists the files in the current head, git-blames each of those and runs the result through AWK. Awk does the author lookup (caches the result in an associative array) and then amount of lines for each author in another associative array. Finally the result is being printed, sorted and formatted.

No Comments
Write a comment.

Shuffling movies with mplayer and bash

Suppose you have a bunch of movies in a directory and want to play them randomly; switch into that directory and run:

$ find -print0 | sort -zR | xargs -0 mplayer
  1. Generate a list of files in this directory and it's subdirectories; the list is zero terminated because I have some special characters in my filenames
  2. Shuffle the list with sort -R
  3. Pass each line as an argument to mplayer

The zero-termination of the list is accomplished with find -print0, sort -z and xargs -0.

You can of course alter the find command: For instance use find -maxdepth 1 to skip subdirectories.

No Comments
Write a comment.

Batch rename in Bash

This post discusses how standard unix tools can be used to rename a lot of files according to a regexp based search and replace rule. Read the post.
No Comments
Write a comment.

Hello World

Soo. If you can see this it means I managed to setup my blog. Yaaay

A wonderful world awaits you on this blog…just not yet. Move along. Nothing to see here.

No Comments
Write a comment.