Hi Matt,

On 06/02/2017 12:40 PM, Matt Caswell wrote:
> 
> 
> On 02/06/17 11:00, Emeric Brun wrote:
>> Hi,
>>
>> I'm working on an ASYNC engine designed to offload crypto on multiple thread 
>> for monoproc applications.
>>
>> No issue on asymetric crypto part but i'm facing a problem concerning 
>> ciphers:
>>
>> When an SSL_read operation perform a do_cipher decrypt:
>>
>> My engine defer the do_cipher to be processed by an other thread using the 
>> output buffer provided by to the do_cipher method.
>>
>> After that it performs an ASYNC_pause_job(). On the application side it 
>> results on a WANT_ASYNC error.
>>
>> The application consider that nothing was written on its output, and the 
>> buffer read buffer is reused for something else.
>>
>> SSL_read is called a second time after receiving the event on the async fd. 
>> But this time the app used a different buffer.
>>
>> On the engine side, i don't see any change on the do_cipher output buffer 
>> which would allow to manage the issue with a memcopy.
>>
>> So my question is:
>>
>> Is there a way to perform ciphering with an ASYNC engine when the app don't 
>> reuse the same buffer.
> 
> No, the async operation is running in it own fibre which is initialised
> on first call, so it is still using the arguments from that initial
> call. Subsequent calls won't "see" any changes in those args. We should
> probably be more explicit about that in the docs.
> 
> Matt
> 

I see that you're using EVP_CIPH_FLAG_PIPELINE in the dasync engine and that 
you're calling
do_cipher to write in pipe_ctx->outbufs[i]. I also know that intel's qat uses 
such interface.

Where points these buffers? directly to the read buffer provided during the 
first SSL_read call
or are they temporary allocated buffers copied into the read buffer passed 
during the second
SSL_read call?

R,
Emeric
-- 
openssl-dev mailing list
To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-dev

Reply via email to