Fragen? Antworten! Siehe auch: Alternativlos
Als Teil von meinem OpenPGP-Gefummel habe ich mal einen Hasher-Prozess gebastelt. Der liest von stdin ein Byte mit der OpenPGP-ID des gewünschten Hash-Algorithmus. Dann liest er von stdin bis EOF, hasht das alles mit dem gewünschten Algorithmus, und gibt das Ergebnis auf stdout aus.
Damit das auch einen Vorteil hat, sandboxt er sich am Anfang mit seccomp auf "darf nur von stdin lesen und nach stdout schreiben" ein.
Das habe ich dann einmal mit den Hash-Routinen aus libtomcrypt implementiert, und einmal mit OpenSSL. Ergebnis:
$ du -k hash-tom hash-osslDas ist gestrippt, versteht sich. Von OpenSSL rufe ich folgende APIs auf:
60 hash-tom
1864 hash-ossl
Stöhn.
Ich hab jedenfalls keine Fragen mehr, wieso gatling mit TLS in der OpenSSL-Version viermal so groß ist wie in der mbedtls-Version.
Update: Es gibt auch Low-Level-APIs für Hashes, die sehen dann z.B. so aus:
SHA1_Init(&sha1ctx);
SHA1_Update(&sha1ctx, buffer, bytesinbuffer);
SHA1_Finish(&sha1ctx, outputhash);
So sehen jedenfalls die APIs in libtomcrypt aus. OpenSSL hat diese Art API auch — aber nicht für SHA3. Nur für die älteren Hashes. Und so muss ich diese völlig überflüssige EVP-Abstraktion nehmen, weil ich sonst nicht an SHA3 rankomme. Die drückt mir dann erstmal ein malloc rein, das sonst nicht gebraucht würde in dem Binary, und ich muss plötzlich auch noch libpthread reinladen. Super, OpenSSL!