ECDSA async/offloading support for proxygen
authorAnirudh Ramachandran <avr@fb.com>
Wed, 17 Feb 2016 01:28:22 +0000 (17:28 -0800)
committerfacebook-github-bot-0 <folly-bot@fb.com>
Wed, 17 Feb 2016 02:20:25 +0000 (18:20 -0800)
Summary: Minor changes to AsyncSSLSocket for async crypto

Reviewed By: siyengar

Differential Revision: D2516765

fb-gh-sync-id: 354baeb94e6f63e8d5cdf8455ff5ca49a6aa479c
shipit-source-id: 354baeb94e6f63e8d5cdf8455ff5ca49a6aa479c

folly/io/async/AsyncSSLSocket.cpp
folly/io/async/AsyncSSLSocket.h

index 57275a170e75c377acd6d915bd4b3fbae03928b0..476b13ba057982d23685f9f441126406df631f66 100644 (file)
@@ -614,7 +614,7 @@ void AsyncSSLSocket::setServerName(std::string serverName) noexcept {
 void AsyncSSLSocket::timeoutExpired() noexcept {
   if (state_ == StateEnum::ESTABLISHED &&
       (sslState_ == STATE_CACHE_LOOKUP ||
-       sslState_ == STATE_RSA_ASYNC_PENDING)) {
+       sslState_ == STATE_ASYNC_PENDING)) {
     sslState_ = STATE_ERROR;
     // We are expecting a callback in restartSSLAccept.  The cache lookup
     // and rsa-call necessarily have pointers to this ssl socket, so delay
@@ -919,12 +919,18 @@ bool AsyncSSLSocket::willBlock(int ret, int *errorOut) noexcept {
     // The timeout (if set) keeps running here
     return true;
 #endif
+  } else if (0
 #ifdef SSL_ERROR_WANT_RSA_ASYNC_PENDING
-  } else if (error == SSL_ERROR_WANT_RSA_ASYNC_PENDING) {
+      || error == SSL_ERROR_WANT_RSA_ASYNC_PENDING
+#endif
+#ifdef SSL_ERROR_WANT_ECDSA_ASYNC_PENDING
+      || error == SSL_ERROR_WANT_ECDSA_ASYNC_PENDING
+#endif
+      ) {
     // Our custom openssl function has kicked off an async request to do
-    // modular exponentiation.  When that call returns, a callback will
+    // rsa/ecdsa private key operation.  When that call returns, a callback will
     // be invoked that will re-call handleAccept.
-    sslState_ = STATE_RSA_ASYNC_PENDING;
+    sslState_ = STATE_ASYNC_PENDING;
 
     // Unregister for all events while blocked here
     updateEventRegistration(
@@ -934,7 +940,6 @@ bool AsyncSSLSocket::willBlock(int ret, int *errorOut) noexcept {
 
     // The timeout (if set) keeps running here
     return true;
-#endif
   } else {
     // SSL_ERROR_ZERO_RETURN is processed here so we can get some detail
     // in the log
@@ -983,7 +988,7 @@ AsyncSSLSocket::restartSSLAccept()
   DestructorGuard dg(this);
   assert(
     sslState_ == STATE_CACHE_LOOKUP ||
-    sslState_ == STATE_RSA_ASYNC_PENDING ||
+    sslState_ == STATE_ASYNC_PENDING ||
     sslState_ == STATE_ERROR ||
     sslState_ == STATE_CLOSED
   );
index ca4f7e38b8cf3a4343ff6d90bc2e8892df1cd414..b203f13ad5ffcc42ebe179d6159cfb4850156102 100644 (file)
@@ -347,7 +347,7 @@ class AsyncSSLSocket : public virtual AsyncSocket {
     STATE_UNENCRYPTED,
     STATE_ACCEPTING,
     STATE_CACHE_LOOKUP,
-    STATE_RSA_ASYNC_PENDING,
+    STATE_ASYNC_PENDING,
     STATE_CONNECTING,
     STATE_ESTABLISHED,
     STATE_REMOTE_CLOSED, /// remote end closed; we can still write