Написал на Go BLAKE-512 (в дополнение к BLAKE-256) и Skein (Threefish тоже). Обе хэш-функции не выиграли SHA-3, выиграл Keccak. Плохо, Keccak в софте медленный.

SipHash! Я рассказывал про SipHash? Это криптографическая функция (MAC): даете ей 128-битный ключ и текст любой длины, она считает 64-битный хэш. Очень быстро работает (> 1 гигабайта в секунду на компе 2009 года), но самое главное, быстро считает хэш очень коротких текстов (8 байт, например). Ее придумали Jean-Philippe Aumasson и Dan Bernstein для того, чтобы победить HashDoS. Ruby на нее недавно перешел и Rust тоже. Если будете писать хэш-таблицу, обязательно используйте SipHash – она почти так же быстра, как MurMurHash или CityHash, но в отличие от них, безопасна (повторяю – криптографическая функция). Люди-то думали, что достаточно впихнуть любое рэндомное число куда-нибудь в функцию, и тогда коллизии невозможно угадать; а Жан-Филиппе с Бернштейном показали, что это не так: коллизии, например, для MurMur можно сделать такие, что они вообще не будут зависеть от seed будь он хоть трижды рэндомным. Так вот, я, конечно же, написал пакет для Go.

А еще я перевел на Go Бернштейновскую криптобиблиотеку NaCl, а потом оказалось, что Adam Langley работал над тем же. Мы объединили мои версии на Go, его ассемблерные версии, он написал новый интерфейс (лучше), и теперь все это дело живет в официальном репозитории go.crypto (документация тут). Если вам надо что-то зашифровать в своей программе, обязательно используйте NaCl. Она в несколько раз быстрее какой бы то ни было нехардварной комбинации MAC с AES, а самое главное, интерфейс – проще некуда.

В go.crypto, кстати, теперь еще живет scrypt, которую я написал в апреле. Scrypt придумал Colin Percival. Если вам нужен хэш пароля, или надо пароль преобразовать в ключ для шифрования, используете scrypt и будете счастливы. А не как LinkedIn, у которого утекли пароли, или Bitrix24, который хвастается тем, что хэширует пароли «двойным MD5». Интересно, как они пришли к тому, что двойной MD5 лучше, чем, например, пятерной? Хе-хе.

Richard Hipp придумал для прототипа SQLite4 хорошую кодировку для беззнаковых целых чисел. Опять же, я написал пакетик для Go. Смысл кодировки в том, что маленькие числа кодируются в маленькое количество байт, а большие числа – в большее количество байт, но не равномерно, как, например, у гугловского varint используемого в компрессоре Snappy, а оптимизированно под маленькие числа. Если Snappy кодирует число 200 в два байта, то эта кодировка – в один. Кроме того, по первому байту можно определить сколько еще байт в числе, а у Snappy для этого нужно читать байты до финального.

WebP. Помните еще такой формат картинок? Google придумал, Opera использует в «Turbo». Так вот они теперь поддерживают альфа-канал в lossy картинках и добавили lossless, который сжимает лучше PNG. Я обновил свой QuickLook плагин (это который показывает картинки, если нажать пробел в Finder) – теперь он поддерживает все нововведения.

Еще я написал кучу строк кода для всяких секретных проектов, но пока рассказать о них не могу, потому что секретные проекты часто не релизятся.

Вроде все.

PS. За моим кодом можно следить на GitHub.