RE: Need some help with bio pairs

2000-09-07 Thread David Schwartz

>   Need some help here. I initialize a connection with the
> following chunk of
> code (error checking removed for simplicity):
[snip]
>   I thought that this meant that 'ssl_bio' would be the
> decrypted side and
> 'bio_io' would be the encrypted side. However, I send encrypted data to
> 'bio_io' and that exact same data (still encrypted) is
> immediately received
> through 'ssl_bio'.
>
>   What am I doing wrong?

It seems to be working now. It just seems that I need to keep churning the
SSL engine more than once, even if both BIO_read functions return -1. Go
figure.

DS

__
OpenSSL Project http://www.openssl.org
User Support Mailing List[EMAIL PROTECTED]
Automated List Manager   [EMAIL PROTECTED]



Re: Need some help with bio pairs

2000-09-07 Thread Amit Chopra

Looks like you've solved your problem. I just wanted to point out one
thing
though.

The ssl_bio is no side. Its ssl_read and ssl_write would produce plain
text
and encrypted text respectively. 
The sides that you talk about are actually the the 2 BIOs in the BIO
pair.
These act as buffers for ssl_read/write.

I hope this is not misleading.

Regards,
Amit.



David Schwartz wrote:

> [snip]
> >   I thought that this meant that 'ssl_bio' would be the
> > decrypted side and
> > 'bio_io' would be the encrypted side. However, I send encrypted data to
> > 'bio_io' and that exact same data (still encrypted) is
> > immediately received
> > through 'ssl_bio'.
> 
[snip]
__
OpenSSL Project http://www.openssl.org
User Support Mailing List[EMAIL PROTECTED]
Automated List Manager   [EMAIL PROTECTED]



RE: Need some help with bio pairs

2000-09-07 Thread David Schwartz

> Looks like you've solved your problem. I just wanted to point out one
> thing
> though.
>
> The ssl_bio is no side. Its ssl_read and ssl_write would produce plain
> text
> and encrypted text respectively.

Not so. BIO_read and BIO_write on ssl_bio allow me to get in and out
plaintext.

> The sides that you talk about are actually the the 2 BIOs in the BIO
> pair.
> These act as buffers for ssl_read/write.

Yes, the two BIO interfaces are 'ssl_bio' and 'bio_io'. This leaves me with
four operations:

1) Get decrypted plaintext (from SSL to server) = BIO_read(ssl_bio)
2) Get encrypted data (from SSL to socket) = BIO_read(bio_io)
3) Hand encrypted data (from socket to SSL) = BIO_write(bio_io)
4) Hand plaintext (from server to SSL) = BIO_write(ssl_bio)

DS

> David Schwartz wrote:
>
> > [snip]
> > >   I thought that this meant that 'ssl_bio' would be the
> > > decrypted side and
> > > 'bio_io' would be the encrypted side. However, I send
> encrypted data to
> > > 'bio_io' and that exact same data (still encrypted) is
> > > immediately received
> > > through 'ssl_bio'.
> >
> [snip]
> __
> OpenSSL Project http://www.openssl.org
> User Support Mailing List[EMAIL PROTECTED]
> Automated List Manager   [EMAIL PROTECTED]
>

__
OpenSSL Project http://www.openssl.org
User Support Mailing List[EMAIL PROTECTED]
Automated List Manager   [EMAIL PROTECTED]



Re: Need some help with bio pairs

2000-09-08 Thread Amit Chopra

> Not so. BIO_read and BIO_write on ssl_bio allow me to get in and out
> plaintext.
> 
> > The sides that you talk about are actually the the 2 BIOs in the BIO
> > pair.
> > These act as buffers for ssl_read/write.
> 
> Yes, the two BIO interfaces are 'ssl_bio' and 'bio_io'. This leaves me with
> four operations:
> 
> 1) Get decrypted plaintext (from SSL to server) = BIO_read(ssl_bio)
> 2) Get encrypted data (from SSL to socket) = BIO_read(bio_io)
> 3) Hand encrypted data (from socket to SSL) = BIO_write(bio_io)
> 4) Hand plaintext (from server to SSL) = BIO_write(ssl_bio)
> 
> DS

I was looking at it like this. 

Where do you get decrypted client data for server procseeing? 
>From one of the BIO in the BIO pair.

Where do you get encrypted server data to send to client? 
>From the other BIO in the pair.

I guess the difference is just in our way of looking at it.

Regards,
Amit.
__
OpenSSL Project http://www.openssl.org
User Support Mailing List[EMAIL PROTECTED]
Automated List Manager   [EMAIL PROTECTED]



Re: Need some help with bio pairs

2000-09-08 Thread Bodo Moeller

On Thu, Sep 07, 2000 at 08:53:47PM -0700, David Schwartz wrote:

>   It seems to be working now. It just seems that I need to keep churning the
> SSL engine more than once, even if both BIO_read functions return -1. Go
> figure.

During the SSL handshake (which always occurs when the connection is
new, and which may be repeated later), data must be sent in both
directions a couple of times.  So no application data will be
transported at first, but there should either be protocol data at
bio_io that must be sent over the network, or the SSL engine may need
to receive data via bio_io in order to continue.

You can check BIO_ctrl_get_read_request(bio_io) to test whether the
SSL engine tried to read something, and you can use
BIO_ctrl_pending(bio_io) to test whether there is data that
has to be sent over the network.

You also can check BIO_should_read(ssl_bio) to see if the SSL engine
tried to read data from the network; however note that the similar
test BIO_should_write(ssl_bio) often will return 0 even when there
is still data that has to be transferred over the network --
the return value 0 just means that there was enough space
in the buffer inside the BIO pair.  So it's better to use
BIO_ctrl_get_read_request and BIO_ctrl_pending to see what
I/O operations have to be done, and then call BIO_read(ssl_bio, ...)
or BIO_write(ssl_bio, ...) again if BIO_should_retry(ssl_bio)
returns true, and repeat the process until BIO_should_retry
finally returns 0.
__
OpenSSL Project http://www.openssl.org
User Support Mailing List[EMAIL PROTECTED]
Automated List Manager   [EMAIL PROTECTED]