2010-04-21 6 views
1

La documentation des puits BIO de mémoire Openssl est here.Chaînes OpenSSL Bio: Clarification sur la documentation

Je crée une chaîne BIO pour transformer des chaînes binaires en chaînes base64. La source/puits est toujours un emplacement de mémoire, ce qui me permet de garder la même chaîne autour. Cependant les données (devraient) aller dans un tampon de mémoire géré par OpenSSL quand j'écris dessus, et elles devraient provenir d'un tampon de mémoire fourni par l'utilisateur quand elles sont lues de la chaîne. BIO_set_mem_buf() est la fonction utilisée pour définir un tampon fourni par l'utilisateur, et je vais définir la propriété BIO_NOCLOSE comme je gère ma mémoire en utilisant new. Maintenant, afin d'utiliser la même chaîne pour l'écriture, j'ai besoin de changer la mémoire bio dans la gestion de sa propre mémoire. Ma question est: "Est-ce que BIO_reset() va revenir à la gestion de sa propre mémoire après qu'un utilisateur ait fourni un tampon personnalisé? Y a-t-il des conséquences de performance d'utiliser une seule chaîne pour ce que je veux faire?

Répondre

1

Je ne suis pas sûr de vous avoir raison, mais voici comment je procède habituellement avec OpenSSL:

Je considère les structures BIO OpenSSL être une sorte de opaques flux. Quelles que soient les données que je dois transmettre (ou obtenir) à partir d'OpenSSL, elles sont généralement stockées dans une structure de données personnalisée, puis copiées depuis/vers un OpenSSL BIO pour traitement.

Comme vous l'avez dit, la documentation d'OpenSSL n'est pas très claire sur certains points. Puisque nous ne pouvons raisonnablement faire l'hypothèse de son comportement interne, je crois que cette façon de faire les choses est plus sûre.

Cependant, dans le cas où vous avez besoin de haute performance et que vous voulez éviter le inutile copier (ce serait légitime), il vaut mieux demander le OpenSSL Users mailing-list. Leurs réponses seront exactes et je crois que seulement elles peuvent répondre à des choses qui ne sont pas précisément décrites dans la documentation.

+0

Je suis allé sur le problème en gardant une copie du puits de mémoire BIO et le filtre bio base64 dans la mémoire locale de thread. Quand il a fallu décoder, j'ai créé un nouveau bio mem avec un tampon géré par mon application. –