Skip to content

Releases: pion/dtls

v2.0.2

25 Nov 11:07
Compare
Choose a tag to compare

Summary

  • Add AEAD_AES_128_GCM SRTP Profiles

v2.0.1

25 Nov 11:06
Compare
Choose a tag to compare

Summary

  • Fix flight1 handshakeRecvSequence handling. Only update handshakeRecvSequence when the flight successfully completes. Before we would prematurely increment putting us in a state where it would never complete.

v2.0.0

23 Apr 18:47
Compare
Choose a tag to compare

Summary

The main highlights of the 2.0.0 release are:

  • Much improved internal state tracking and handling by using a state machine mimicking the one in the DTLS RFC
  • Our API has moved much closer to Go's crypto/tls package to help newcomers get started more quickly
  • A number of security improvements including the hash algorithm selection and protocol version verification
  • Support for TLS_PSK_WITH_AES_128_CCM, TLS_ECDHE_ECDSA_WITH_AES_128_CCM and TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8
  • Supporting certificate chains and validation
  • context.Context based cancellation
  • Many compatibility fixes for better interopability with other DTLS libraries
  • E2E testing with OpenSSL

There have been no changes since v2.0.0-rc10.

Security fixes

There are several security updates in v2.0.0. All users are strongly encouraged to update pion/dtls to v2.0.0.

Denial-of-Service vulnerability fixes

  • Fix unreachable error handling (#208, #209)
    • ICMP hard error like Destination Unreachable caused the disconnection. Now, Read()/Write() returns net.Error. Users must check that whether the error permanently closed the connection or the error is temporary, especially for Dial()-ed underlying connection.
      n, err := conn.Read(b)
      if e, ok := err.(net.Error); ok || e.Temporary() {
        // Temporary error: should continue reading
      } else if err != nil {
        // Permanent error
      }
  • Fix packet unmarshal error handling (#215, #208)
    • The broken record layer header caused the disconnection. Such a packet is now silently discarded.
  • Verify packet epoch number (#208)
    • Plaintext Finished handshake message was handled as a valid message. Handshake epoch verification has been added.
  • Discard invalid ChangeCipherSpec (#208)
    • Peer wrongly incremented epoch whenever receiving unauthorized/plaintext ChangeCipherSpec message after the connection is established. ChangeCipherSpec message after finishing the handshake is discarded.
  • Fix boundary check of ClientHello unmarshaller (#208)
    • The server crashed when receiving invalid ClientHello. A boundary check has been fixed.

Certification verification algorithm downgrade vulnerability fix

  • Add signature/hash algorithm verification to ClientKeyExchange and CertificateVerify message handling (#224)
    • A hash algorithm could be downgraded to the weak one, which is not in the list indicated by signature_algorithms extension. Now, the selected signature scheme is verified to be in the signature_algorithms list and the package global white list.

Replay attack vulnerability fix

  • Add anti-replay protection (#211)
    • Replayed Application Data was not dropped. Sliding window replay detection has been added.

Changelog

The complete log between v1.5.4 and v2.0.0:

  • 513a0e3 Fix connCtx.RemoteAddr()
  • e14179e Update golang.org/x/crypto commit hash to 0ec3e99
  • 5f23720 Update golang.org/x/net commit hash to d3edc99
  • 25fd094 Fix data race in TestReplayProtection
  • b549159 Move ExportKeyingMaterial to State
  • e1af363 Add ConnectionState to Conn to return State
  • 3997799 Change some small things in the README
  • d80c2e8 Use crypto/ed25519 from stdlib
  • a63579d Refactor State.clone()
  • 3caecff Update CI configs to v0.2.0
  • de02b5f Update readme with restructured examples
  • b5868d3 Organise examples using subdirectories
  • 6f63195 Add example with certificate verification
  • c97531b Add certificates for use with examples
  • 3f3108d Fix listen example error handling
  • 8d11fee Stop handshaker on nextConn EOF
  • 3b5d798 Disable insecure hash algorithms by default
  • 24f778e Update module pion/transport to v0.10.0
  • 3028bdc Concurrently read and accept UDP packet
  • 70aa525 Fix error type naming
  • b0bb7b1 Close on outgoing sequence number overflow
  • 76e8c7c Fix connection close handling
  • d5cce09 Add comment to listen examples
  • ccbe515 Minimize the chance of port conflict on E2E tests
  • 361bce9 Fix panic on E2E test failure
  • d1d5f3f Fix hash algorithm selection
  • dd7858b Update module pion/transport to v0.9.2
  • f1595d5 Verify protocol version
  • 5b11374 Move replaydetector to pion/transport
  • 9e8c93e Refactor errors
  • 1a60060 Add replay attack protection
  • fe75c17 Fix flaky test on WASM environment
  • 45cabe8 Limit retransmit interval of last flight
  • 3b0a286 Fix routine leaks in tests
  • c598836 Fix udp.Conn deadlock on Close()
  • 863572a Refactor handshake state machine
  • 6bf60d2 Add context wrapper for Conn.Read
  • 5bc0a3f Improve error handling and cleanup in tests
  • 6969c90 Deadline implements context.Context
  • 375a1db Fix boundary check of ClientHello unmarshaller
  • a3205fa Fix default ServerName on test
  • 4bd0b6c Update golang.org/x/net commit hash to 244492d
  • 9ab9a33 Update golang Docker tag to v1.14
  • ef86d04 Update golang.org/x/crypto commit hash to 2aa609c
  • e950e1f Add end to end tests using OpenSSL
  • b2bba83 Add key usage cert-sign to selfsigned certs
  • 42d42d6 Add Extension Server Name Indication
  • 86643a9 Remove CCM from default cipher suites
  • 147774b Prefer GCM over CBC suites
  • b693635 Fix encodeCipherSuites ordering
  • 30a42e7 Respond to close_notify with close_notify
  • d68b05b Send close_notify as warning level
  • 34ebfdb Make timeout error derived from DeadlineExceeded
  • cfac183 Add parameter to make default context
  • d89a3e7 Support context.Context based cancellation
  • bf985a0 GoDoc -> pkg.go.dev
  • 34883a7 Make Conn fully net.Conn compatible
  • 2cc05a1 Rearrange internal package directory
  • 6babc47 Add CipherSuites and InsecureCipherSuites
  • d3200a6 Add CipherSuiteName
  • 5abf71d Make Listener compatible with net.Listener
  • dca3dfb Add fingerprint.StringFromHash
  • 51c3deb Unexpose HashAlgorithm
  • 1d1fe60 Move self sign helper and CCM under pkg/
  • 8f52027 Unexpose Closer
  • 0b80bd9 Fix data race in CipherSuites
  • 1aa50b6 Verify key before initializing CipherSuite
  • c9c352a Update golang.org/x/crypto commit hash to 69ecbb4
  • cfa3f98 Update CI configs to v0.1.3
  • 96cbe61 Update CI configs to v0.1.2
  • 4d000a0 Fix go.sum
  • fcd84b6 Support WASM build/test
  • 8b3680b Upgrade golangci-lint to 1.19.1
  • 1bb35ee Run TestPionE2ESimpleED25519 only on Go 1.13
  • 20c7570 Update assets to v0.0.2
  • 04ddc09 Disable disallowed-func-lint line by line
  • 5ace7ec Define internal/crypto/ccm errors as var
  • 9180e92 Update golang.org/x/crypto commit hash to 53104e6
  • 7fb5b69 Check err before/after calling Read
  • 22e6ab2 Store handshake timeout
  • d28cca3 Split Handshake/Read/Write errors
  • 8f68f7d Add datagram-like pipe for connection tests
  • 486ad1d Fix routine leak on close
  • b4351bb Refactor cipher suites with aes128ccm
  • d5c696f Add CCM cipher suits for ECDHE_ECDSA, PSK
  • 7dbc646 Use X25519() instead of ScalarMult()
  • 8748e4a...
Read more

v2.0.0-rc.10

11 Apr 04:30
Compare
Choose a tag to compare
v2.0.0-rc.10 Pre-release
Pre-release

API changes (make it closer to crypto/tls)

  • Replace Conn.Export() by Conn.ConnectionState() (#237)
  • Move ExportKeyingMaterial() from Conn to State (#240)

Fix

  • Fix RemoteAddr() (#247)

v2.0.0-rc.9

23 Mar 23:36
Compare
Choose a tag to compare
v2.0.0-rc.9 Pre-release
Pre-release

Since rc.8 the following changes have been made:

  • Fix routine leak on inner connection close #233
  • Fix error handling in listen examples #235

v2.0.0-rc.8

22 Mar 16:50
Compare
Choose a tag to compare
v2.0.0-rc.8 Pre-release
Pre-release

Since rc.7 the following changes have been made:

  • CCM is no longer part of the default cipher suites #201
  • SNI extension support #194
  • End to end tests with OpenSSL client/server #193
  • Large refactor of the handshake using the state machine from RFC6347 Section 4.2.4 #208
  • Fixes for a number of deadlocks
  • Replay attack protection #215
  • Verify the protocol version #211
  • Fix the hash algorithm detection #224
  • Close the connection on a sequence number overflow #214
  • Concurrent read and accept #226
  • Insecure hash algorithms are disabled by default #231

v2.0.0-rc.6

15 Feb 17:58
Compare
Choose a tag to compare
v2.0.0-rc.6 Pre-release
Pre-release

Since v2.0.0-rc5 the following changes have happened

  • Key is verified before cipher suite initialisation
  • Expose SelfSign helper and the CCM package
  • Make HashAlgorithm private
  • Listener is now compatible with stlib net.Listener
  • Conn is now compatible with stdlib net.Conn
  • New top-level functions CipherSuiteName, CipherSuites
    and InsecureCipherSuites added to match upcoming
    additions to crypto/tls in Go 1.14
  • Added support for using context.Context for cancellation
    in Dial, Client and Server
  • Where possible the API has been changed to mimic that
    of crypto/tls

Initial Release

04 Dec 08:02
Compare
Choose a tag to compare

First stable release of pions/dtls with the following features

  • DTLS 1.2 Client/Server (No DTLS 1.0)
  • Forward secrecy using ECDHE; with curve25519 (non-PFS will not be supported)
  • Handshake retransmission
  • Handshake out of order handshake processing
  • Support for the following ciphers
    • TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
    • TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256