Ich habe mir den Bitcoin Core-Code angesehen, um seinen SHA256-Code zu verwenden, bin aber verwirrt darüber, wo ich hinschauen sollte.
In bitcoin/src/crypto/sha256.h gibt es CSHA256
und in bitcoin/src/crypto/sha256.cpp gibt es Namespaces namens sha256_sse4, sha256_shani.
Und dann gibt es noch bitcoin/src/hash.h
Erklärungen und Anleitungen wären sehr willkommen.
sha256.h
hat die exportierten (von außen sichtbaren) Methoden und Funktionen. Um SHA256 zu berechnen, sollten Sie #include
das tun.
sha256_sse4.cpp
sha256_sse41.cpp
sha256_avx2.cpp
sha256_shani.cpp
enthalten SHA256-Transformationsfunktionen (verwendet in SHA256.Write
), die jeweils auf verschiedene Prozessoren mit unterschiedlichen Befehlssätzen spezialisiert sind. Oben ist die Liste der Reihe nach, die meisten Computer unterstützen SSE4, aber nur wenige unterstützen den SHA-NI-Befehlssatz, der der schnellste Weg ist, wie ein neuer Prozessor SHA256 berechnen kann.
sha256.cpp
enthält andere Methoden, die keinen Engpass darstellen, Funktionen, die prüfen, welche Befehlssätze unterstützt werden, Tests sowie eine reine C++-Transformationsfunktion für ältere und Nicht-x86-Computer.
hash.h
bevorzugt Polymorphismus über C++-Templates.
Beispiele: