B
Ja das hatte ich schon irgendwo gelesen. Ich denke das kommt daher, dass die QT Libs dynamisch gelinkt werden. Hatte das beim Bauen der Qt Sourcen nicht bedacht, aber will das eh nochmal ändern, weil ich nicht immer die Qt DLLs mit rumschleppen will.
Auf jedenfall Danke für die schnelle Hilfe, klappt so weit
Ein kleines Problem hätte ich noch, auch wenn das hier im Forum dann wohl eher Offtopic ist:
Beim bauen des Botan Hello World Programms bekomm ich komische Fehler... der Code dazu ist Copy & Paste von Tutorial PDF (Seite 5, Final Version) und sieht so aus:
#include <botan/botan.h>
#include <string.h>
#include <iostream>
#include <fstream>
using namespace Botan;
int main(int argc, char* argv[])
{
std::string passphrase = "test";
std::ifstream infile("test.txt");
std::ofstream outfile("test.txt.crypt");
if (!infile)
return 0;
LibraryInitializer init;
S2K* s2k = get_s2k("PBKDF2(SHA-1)");
s2k->set_iterations(4096);
s2k->new_random_salt(8);
SecureVector<byte> the_salt = s2k->current_salt();
SymmetricKey master_key = s2k->derive_key(48, passphrase);
KDF* kdf = get_kdf("KDF2(SHA-1)");
SymmetricKey key = kdf->derive_key(20, master_key, "cipher key");
SymmetricKey mac_key = kdf->derive_key(20, masterkey, "hmac key");
InitializationVector iv = kdf->derive_key(8, masterkey, "cipher iv");
Pipe pipe(new Fork(new Chain(get_cipher("Blowfish/CBC/PKCS7", key, iv, ENCRYPTION),
new DataSink_Stream(outfile)), new MAC_Filter("HMAC(SHA-1)", mac_key)));
outfile.write((const char*)the_salt.ptr(), the_salt.size());
pipe.start_msg();
infile >> pipe;
pipe.end_msg();
SecureVector<byte> hmac = pipe.read_all(1);
outfile.write((const char*)hmac.ptr(), hmac.size());
return 0;
}
Das oben hab ich eben testweise auch unter linux mit
gcc -lbotan main.cc -o main
kompiliert, da krieg ich die gleichen Fehler wie unter Windows.
Und zwar sagt er mir des öfteren sowas:
main.cc:26: Fehler: keine passende Funktion für Aufruf von »Botan::KDF::derive_key(int, Botan::SymmetricKey&, const char [11])«
/usr/include/botan/pk_util.h:53: Anmerkung: Kandidaten sind: Botan::SecureVector<unsigned char> Botan::KDF::derive_key(Botan::u32bit, const Botan::MemoryRegion<unsigned char>&, const std::string&) const
/usr/include/botan/pk_util.h:55: Anmerkung: Botan::SecureVector<unsigned char> Botan::KDF::derive_key(Botan::u32bit, const Botan::MemoryRegion<unsigned char>&, const Botan::MemoryRegion<unsigned char>&) const
/usr/include/botan/pk_util.h:57: Anmerkung: Botan::SecureVector<unsigned char> Botan::KDF::derive_key(Botan::u32bit, const Botan::MemoryRegion<unsigned char>&, const Botan::byte*, Botan::u32bit) const
/usr/include/botan/pk_util.h:60: Anmerkung: Botan::SecureVector<unsigned char> Botan::KDF::derive_key(Botan::u32bit, const Botan::byte*, Botan::u32bit, const std::string&) const
/usr/include/botan/pk_util.h:62: Anmerkung: Botan::SecureVector<unsigned char> Botan::KDF::derive_key(Botan::u32bit, const Botan::byte*, Botan::u32bit, const Botan::byte*, Botan::u32bit) const
oder
main.cc:33: Fehler: »class Botan::SecureVector<unsigned char>« hat kein Element namens »ptr«
main.cc:40: Fehler: »class Botan::SecureVector<unsigned char>« hat kein Element namens »ptr«
Die Fehler hab ich jetzt bei vielen Teilen die ich aus dem PDF kopiert habe bekommen. Mach ich da irgendwas komplett falsch, oder wieso findet er Methoden/Objekte nicht, die im PDF doch fröhlich verwendet werden?
Wenn das zu Offtopic ist, kann ich vllt auch nen neuen Thread dafür aufmachen. Jedenfalls danke für die Hilfe.
[edit] hat sich wohl erledigt. nach ein bisschen header durchschauen scheint es wohl so, als ob der code im tutorial schlicht falsch ist, obwohl ich die fehler eher auf mich geschoben hätte.
wenn man statt .ptr() die methode .begin() nutzt, master_key statt masterkey verwendet, und als argument master_key.bits_of() statt master_key nimmt, kompiliert er, und läuft auch problemlos.
ob das cryptographisch/logisch gesehn dann noch stimmt, oder ob die lib dann falsch benutzt wird, kann ich mit meinem begrenzten botan-wissen jedoch nicht sagen.