1. 08 3月, 2016 10 次提交
    • M
      Fix building without multiblock support · fa22f98f
      Matt Caswell 提交于
      Not all platforms support multiblock. Building without it fails prior to
      this fix.
      
      RT#4396
      Reviewed-by: NRichard Levitte <levitte@openssl.org>
      fa22f98f
    • M
      Rename the numpipes argument to ssl3_enc/tls1_enc · 37205971
      Matt Caswell 提交于
      The numpipes argument to ssl3_enc/tls1_enc is actually the number of
      records passed in the array. To make this clearer rename the argument to
      |n_recs|.
      Reviewed-by: NTim Hudson <tjh@openssl.org>
      37205971
    • M
      Rename a function · ea71906e
      Matt Caswell 提交于
      Rename the have_whole_app_data_record_waiting() function to include the
      ssl3_record prefix...and make it a bit shorter.
      Reviewed-by: NTim Hudson <tjh@openssl.org>
      ea71906e
    • M
      Remove the wrec record layer field · f482740f
      Matt Caswell 提交于
      We used to use the wrec field in the record layer for keeping track of the
      current record that we are writing out. As part of the pipelining changes
      this has been moved to stack allocated variables to do the same thing,
      therefore the field is no longer needed.
      Reviewed-by: NTim Hudson <tjh@openssl.org>
      f482740f
    • M
      Update a comment · d3b324a1
      Matt Caswell 提交于
      Update a comment that was out of date due to the pipelining changes
      Reviewed-by: NTim Hudson <tjh@openssl.org>
      d3b324a1
    • M
      Add an SSL_has_pending() function · 49580f25
      Matt Caswell 提交于
      This is similar to SSL_pending() but just returns a 1 if there is data
      pending in the internal OpenSSL buffers or 0 otherwise (as opposed to
      SSL_pending() which returns the number of bytes available). Unlike
      SSL_pending() this will work even if "read_ahead" is set (which is the
      case if you are using read pipelining, or if you are doing DTLS). A 1
      return value means that we have unprocessed data. It does *not* necessarily
      indicate that there will be application data returned from a call to
      SSL_read(). The unprocessed data may not be application data or there
      could be errors when we attempt to parse the records.
      Reviewed-by: NTim Hudson <tjh@openssl.org>
      49580f25
    • M
      Add an ability to set the SSL read buffer size · dad78fb1
      Matt Caswell 提交于
      This capability is required for read pipelining. We will only read in as
      many records as will fit in the read buffer (and the network can provide
      in one go). The bigger the buffer the more records we can process in
      parallel.
      Reviewed-by: NTim Hudson <tjh@openssl.org>
      dad78fb1
    • M
      Lazily initialise the compression buffer · 0220fee4
      Matt Caswell 提交于
      With read pipelining we use multiple SSL3_RECORD structures for reading.
      There are SSL_MAX_PIPELINES (32) of them defined (typically not all of these
      would be used). Each one has a 16k compression buffer allocated! This
      results in a significant amount of memory being consumed which, most of the
      time, is not needed.  This change swaps the allocation of the compression
      buffer to be lazy so that it is only done immediately before it is actually
      used.
      Reviewed-by: NTim Hudson <tjh@openssl.org>
      0220fee4
    • M
      Implement read pipeline support in libssl · 94777c9c
      Matt Caswell 提交于
      Read pipelining is controlled in a slightly different way than with write
      pipelining. While reading we are constrained by the number of records that
      the peer (and the network) can provide to us in one go. The more records
      we can get in one go the more opportunity we have to parallelise the
      processing.
      
      There are two parameters that affect this:
      * The number of pipelines that we are willing to process in one go. This is
      controlled by max_pipelines (as for write pipelining)
      * The size of our read buffer. A subsequent commit will provide an API for
      adjusting the size of the buffer.
      
      Another requirement for this to work is that "read_ahead" must be set. The
      read_ahead parameter will attempt to read as much data into our read buffer
      as the network can provide. Without this set, data is read into the read
      buffer on demand. Setting the max_pipelines parameter to a value greater
      than 1 will automatically also turn read_ahead on.
      
      Finally, the read pipelining as currently implemented will only parallelise
      the processing of application data records. This would only make a
      difference for renegotiation so is unlikely to have a significant impact.
      Reviewed-by: NTim Hudson <tjh@openssl.org>
      94777c9c
    • M
      Implement write pipeline support in libssl · d102d9df
      Matt Caswell 提交于
      Use the new pipeline cipher capability to encrypt multiple records being
      written out all in one go. Two new SSL/SSL_CTX parameters can be used to
      control how this works: max_pipelines and split_send_fragment.
      
      max_pipelines defines the maximum number of pipelines that can ever be used
      in one go for a single connection. It must always be less than or equal to
      SSL_MAX_PIPELINES (currently defined to be 32). By default only one
      pipeline will be used (i.e. normal non-parallel operation).
      
      split_send_fragment defines how data is split up into pipelines. The number
      of pipelines used will be determined by the amount of data provided to the
      SSL_write call divided by split_send_fragment. For example if
      split_send_fragment is set to 2000 and max_pipelines is 4 then:
      SSL_write called with 0-2000 bytes == 1 pipeline used
      SSL_write called with 2001-4000 bytes == 2 pipelines used
      SSL_write called with 4001-6000 bytes == 3 pipelines used
      SSL_write_called with 6001+ bytes == 4 pipelines used
      
      split_send_fragment must always be less than or equal to max_send_fragment.
      By default it is set to be equal to max_send_fragment. This will mean that
      the same number of records will always be created as would have been
      created in the non-parallel case, although the data will be apportioned
      differently. In the parallel case data will be spread equally between the
      pipelines.
      Reviewed-by: NTim Hudson <tjh@openssl.org>
      d102d9df
  2. 23 2月, 2016 1 次提交
  3. 19 2月, 2016 1 次提交
    • R
      Remove outdated DEBUG flags. · d63a5e5e
      Rich Salz 提交于
      Add -DBIO_DEBUG to --strict-warnings.
      Remove comments about outdated debugging ifdef guards.
      Remove md_rand ifdef guarding an assert; it doesn't seem used.
      Remove the conf guards in conf_api since we use OPENSSL_assert, not assert.
      For pkcs12 stuff put OPENSSL_ in front of the macro name.
      Merge TLS_DEBUG into SSL_DEBUG.
      Various things just turned on/off asserts, mainly for checking non-NULL
      arguments, which is now removed: camellia, bn_ctx, crypto/modes.
      Remove some old debug code, that basically just printed things to stderr:
        DEBUG_PRINT_UNKNOWN_CIPHERSUITES, DEBUG_ZLIB, OPENSSL_RI_DEBUG,
        RL_DEBUG, RSA_DEBUG, SCRYPT_DEBUG.
      Remove OPENSSL_SSL_DEBUG_BROKEN_PROTOCOL.
      Reviewed-by: NRichard Levitte <levitte@openssl.org>
      d63a5e5e
  4. 18 2月, 2016 1 次提交
  5. 14 2月, 2016 1 次提交
  6. 12 2月, 2016 1 次提交
  7. 27 1月, 2016 1 次提交
    • R
      Remove /* foo.c */ comments · 34980760
      Rich Salz 提交于
      This was done by the following
              find . -name '*.[ch]' | /tmp/pl
      where /tmp/pl is the following three-line script:
              print unless $. == 1 && m@/\* .*\.[ch] \*/@;
              close ARGV if eof; # Close file to reset $.
      
      And then some hand-editing of other files.
      Reviewed-by: NViktor Dukhovni <viktor@openssl.org>
      34980760
  8. 25 1月, 2016 1 次提交
    • R
      Move pqueue into ssl · cf2cede4
      Rich Salz 提交于
      This is an internal facility, never documented, not for
      public consumption.  Move it into ssl (where it's only used
      for DTLS).
      
      I also made the typedef's for pqueue and pitem follow our style: they
      name structures, not pointers.
      Reviewed-by: NRichard Levitte <levitte@openssl.org>
      cf2cede4
  9. 12 1月, 2016 1 次提交
  10. 06 1月, 2016 1 次提交
  11. 24 12月, 2015 1 次提交
  12. 08 12月, 2015 3 次提交
  13. 20 11月, 2015 1 次提交
  14. 10 11月, 2015 1 次提交
  15. 02 11月, 2015 2 次提交
  16. 30 10月, 2015 5 次提交
  17. 06 10月, 2015 1 次提交
  18. 23 9月, 2015 2 次提交
    • M
      Remove remaining old listen code · 912c89c5
      Matt Caswell 提交于
      The old implementation of DTLSv1_listen which has now been replaced still
      had a few vestiges scattered throughout the code. This commit removes them.
      Reviewed-by: NAndy Polyakov <appro@openssl.org>
      912c89c5
    • M
      DTLSv1_listen rewrite · e3d0dae7
      Matt Caswell 提交于
      The existing implementation of DTLSv1_listen() is fundamentally flawed. This
      function is used in DTLS solutions to listen for new incoming connections
      from DTLS clients. A client will send an initial ClientHello. The server
      will respond with a HelloVerifyRequest containing a unique cookie. The
      client the responds with a second ClientHello - which this time contains the
      cookie.
      
      Once the cookie has been verified then DTLSv1_listen() returns to user code,
      which is typically expected to continue the handshake with a call to (for
      example) SSL_accept().
      
      Whilst listening for incoming ClientHellos, the underlying BIO is usually in
      an unconnected state. Therefore ClientHellos can come in from *any* peer.
      The arrival of the first ClientHello without the cookie, and the second one
      with it, could be interspersed with other intervening messages from
      different clients.
      
      The whole purpose of this mechanism is as a defence against DoS attacks. The
      idea is to avoid allocating state on the server until the client has
      verified that it is capable of receiving messages at the address it claims
      to come from. However the existing DTLSv1_listen() implementation completely
      fails to do this. It attempts to super-impose itself on the standard state
      machine and reuses all of this code. However the standard state machine
      expects to operate in a stateful manner with a single client, and this can
      cause various problems.
      
      A second more minor issue is that the return codes from this function are
      quite confused, with no distinction made between fatal and non-fatal errors.
      Most user code treats all errors as non-fatal, and simply retries the call
      to DTLSv1_listen().
      
      This commit completely rewrites the implementation of DTLSv1_listen() and
      provides a stand alone implementation that does not rely on the existing
      state machine. It also provides more consistent return codes.
      Reviewed-by: NAndy Polyakov <appro@openssl.org>
      e3d0dae7
  19. 02 9月, 2015 1 次提交
  20. 26 8月, 2015 1 次提交
  21. 14 8月, 2015 1 次提交
  22. 03 8月, 2015 2 次提交