Šílená API, tak to naprosto souhlasím, už jsem si u linuxových knihoven musel zvyknout. Hlavně mám rád knihovny "all-in-one". Člověk si napíše projekt na pár řádků a k tomu musí nalinkovat několik desítek megabajtů knihoven, které aplikace využije pro požadovanou funkčnost asi z 1%.
Mimochodem, nemáte někdo náhodou po ruce zdroják (v C/C++) na jednoduchý výpočet DSA (Digital Signing Algorithm). Potřebuju jen samotné core toho algoritmu. Nechci OpenSSL ani libopenssl ani nic podobného. Stačí mi, když to bude umět vygenerovat pár klíčů, podepsat text, a ověřit podpis. Nechci certifikáty, nechci řetězce certifikátů, nechci ověřovat doménu, nechci ověřovat DNS, nechci standardní formát klíčů, nechci přístup do repozitáře klíčů a potřebuju to maximálně portabilní.
Implementovat svépomocí nějaký šifrovací algoritmus nebo protokol obyčejně není dobrý nápad, protože je to o několik řádů těžší než použít šílená API. Třeba DSA se může velmi jednoduše položit na chybě v generátoru náhodných čísel, který musí být při každém podpisu být "bezchybný".
Dále jsou pak náročně ošetřitelné věci jako chybové nebo časové postranné kanály (u RSA se proti timing side-channels typicky používá blinding - násobení náhodným číslem a jeho inverzem). Obecně "textbook verze" šifrovacích primitiv jsou zranitelné na spoustu známých útoků.
Jeden pokus o rozumnou knihovnu s rozumným API je Bernsteinova NaCl (http://nacl.cr.yp.to/), která má za cíl kromě rozumných API implementovat i různé ochrany třeba proti side channels - například odstranění časování závislé od cachování procesoru a predikcí skoků. Těžko ale říct jak moc bude do budoucna podporována.
Zrovna probíhá jedna diskuse "Just how bad is OpenSSL?" (http://lists.randombit.net/pipermail/cryptography/2012-October/003373.html). Je to zajímavé, ale celkem dlouhé. Ve zkratce pár pozorování: největší problém OpenSSL je chybějící dokumentace. Má sice celkem hnusný kód, ale zároveň ten kód prošel nejvíce code review a celkově se v něm moc závažných chyb tak často nevyskytuje.