2010-01-14 5 views

Répondre

1

Selon le FAQ, les routines OpenSSL sont thread-safe. J'ai regardé la source de cette fonction, et il semble en effet être thread safe. Bien sûr, cela suppose que vous ne transmettez pas les mêmes tampons d'entrée/sortie à la fonction sur des threads différents.

Pour un exemple d'appel, vous devriez pouvoir regarder dans la source OpenSSL. Il y a un fichier nommé bftest.c situé dans openssl/crypto/bf/qui a des appels de test à la fonction.

Modifier Après avoir réfléchi à cela un peu plus, il est probablement toujours sage d'utiliser la fonctionnalité CRYPTO_set_locking_callback pour le verrouillage multi-thread. L'algorithme Blowfish demandé dans la question d'origine ne fonctionne pas pour l'instant (dans la version d'OpenSSL que j'utilise), mais cela ne garantit pas qu'il ne le sera pas dans le futur pour quelque raison que ce soit. De plus, cela évite de futures douleurs si vous finissez par utiliser des fonctionnalités (telles que RAND_bytes) qui nécessitent ces verrous.

+0

Merci Mark J'ai été confondu par l'URL http://www.openssl.org/docs/crypto/threads.html Toute idée de quoi il est question. Aussi j'étais curieux de savoir ce qu'est EVP? –

+1

Si votre code utilise plusieurs threads avec des ressources partagées, OpenSSL utilisera le rappel défini par CRYPTO_set_locking_callback pour acquérir/libérer des verrous. Il est très simple à utiliser (un exemple se trouve dans le fichier crypto/threads/mttest.c) Il permet essentiellement de spécifier une fonction de rappel qui appelle la fonction de verrouillage de la plate-forme (par exemple, WaitForSingleObject dans win32). Je ne crois pas que BF_cfb64_encrypt ait besoin de cette fonction.J'ai regardé le code et ne vois pas d'appels à verrous.D'autre part, il serait probablement bon que les futures versions puissent acquérir des verrous –

+1

Je ne suis pas (encore) familier avec la bibliothèque EVP. C'est une interface de haut niveau qui fournit apparemment une couche d'abstraction sur les fonctions de niveau inférieur.Si vous utilisez les fonctions de niveau supérieur, je pense que votre application sera plus à l'abri des changements dans les fonctionnalités sous-jacentes. –