Mac sqDecryptSSL returning SQSSL_GENERIC_ERROR on errSSLClosedGraceful from SSLRead

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Mac sqDecryptSSL returning SQSSL_GENERIC_ERROR on errSSLClosedGraceful from SSLRead

Kris Gybels-2
I'm wondering whether the Mac SSL plugin is correct in returning SQSSL_GENERIC_ERROR from sqDecryptSSL when its SSLRead invocation returns errSSLClosedGraceful.

I'm trying to figure out why ZdcSecureSocketStream is sometimes signaling an error “Error: SSL Exception: decrypt failed [code:-5]”. I enabled logging in the SSL plugin and got the following output:

        [...]
        sqDecryptSSL: Input data 0 bytes
        sqDecryptSSL: Decrypting 69 bytes
        SqueakSSLRead: Requesting 5 bytes, having 69 bytes
        SqueakSSLRead: Requesting 64 bytes, having 64 bytes
        SqueakSSLWrite: Writing 69 bytes, having 16971 free
        sqDecryptSSL: SSLRead returned -9805
        Error: SSL Exception: decrypt failed [code:-5]
        ZdcSecureSocketStream(Object)>>error:
        ZdcSecureSocketStream>>sslException:code:
        ZdcSecureSocketStream>>fillBytes:startingAt:count: in Block: [ ...
        ZdcSecureSocketStream>>fillBytes:startingAt:count:
        [...]

The related code in the SSL plugin is the sqDecryptSSL function on lines 355-387 in sqMacSSL.c; -5 is SQSSL_GENERIC_ERROR defined on line 22 of SqueakSSL.h:

        https://code.google.com/p/squeakssl/source/browse/src/Mac%20OS/sqMacSSL.c#355
        https://code.google.com/p/squeakssl/source/browse/src/Cross/SqueakSSL.h#22

The above log shows that the SSLRead invocation on line 383 returned -9805 which is errSSLClosedGraceful:

        https://developer.apple.com/library/mac/documentation/Security/Reference/secureTransportRef/index.html#//apple_ref/c/econst/errSSLClosedGraceful

I'm not really sure what this status code means, but the description “closed gracefully” (as opposed to the description “closed due to an error” for errSSLClosedAbort) makes me wonder whether sqDecryptSSL shouldn't handle this status code as something other than an error?