Merge pull request #1843 from geofft/pyasn1-eoc

Work around pyasn1's willingness to return endOfOctets in DER parsing
diff --git a/.travis.yml b/.travis.yml
index b6f6f0c..251eb07 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,29 +1,125 @@
-language: c
-os:
-    - osx
-    - linux
-compiler:
-    - clang
-    - gcc
-env:
-    matrix:
-        - TOXENV=py26
-        - TOXENV=py27
-        - TOXENV=py32
-        - TOXENV=py33
-        - TOXENV=py34
-        - TOXENV=pypy
-        - TOXENV=pypy3
-        - TOXENV=py26 OPENSSL=0.9.8
-        - TOXENV=py27 OPENSSL=0.9.8
-        - TOXENV=py32 OPENSSL=0.9.8
-        - TOXENV=py33 OPENSSL=0.9.8
-        - TOXENV=py34 OPENSSL=0.9.8
-        - TOXENV=pypy OPENSSL=0.9.8
-        - TOXENV=pypy3 OPENSSL=0.9.8
-        - TOXENV=docs
-        - TOXENV=pep8
-        - TOXENV=py3pep8
+sudo: false
+language: python
+cache:
+    directories:
+        - $HOME/.cache/pip
+matrix:
+    include:
+        - python: 2.6 # these are just to make travis's UI a bit prettier
+          env: TOXENV=py26
+        - python: 2.7
+          env: TOXENV=py27
+        - python: 3.2
+          env: TOXENV=py32
+        - python: 3.3
+          env: TOXENV=py33
+        - python: 3.4
+          env: TOXENV=py34
+        - python: pypy
+          env: TOXENV=pypy
+        - python: 2.6
+          env: TOXENV=py26 OPENSSL=0.9.8
+          addons:
+              apt:
+                  sources:
+                      - lucid
+                  packages:
+                      - libssl-dev/lucid
+        - python: 2.7
+          env: TOXENV=py27 OPENSSL=0.9.8
+          addons:
+              apt:
+                  sources:
+                      - lucid
+                  packages:
+                      - libssl-dev/lucid
+        - python: 3.2
+          env: TOXENV=py32 OPENSSL=0.9.8
+          addons:
+              apt:
+                  sources:
+                      - lucid
+                  packages:
+                      - libssl-dev/lucid
+        - python: 3.3
+          env: TOXENV=py33 OPENSSL=0.9.8
+          addons:
+              apt:
+                  sources:
+                      - lucid
+                  packages:
+                      - libssl-dev/lucid
+        - python: 3.4
+          env: TOXENV=py34 OPENSSL=0.9.8
+          addons:
+              apt:
+                  sources:
+                      - lucid
+                  packages:
+                      - libssl-dev/lucid
+        - python: pypy
+          env: TOXENV=pypy OPENSSL=0.9.8
+          addons:
+              apt:
+                  sources:
+                      - lucid
+                  packages:
+                      - libssl-dev/lucid
+        - python: 2.7
+          env: TOXENV=docs
+          addons:
+              apt:
+                  packages:
+                      - libenchant-dev
+        - python: 2.7
+          env: TOXENV=pep8
+        - python: 3.3
+          env: TOXENV=py3pep8
+        - language: generic
+          os: osx
+          env: TOXENV=py26
+        - language: generic
+          os: osx
+          env: TOXENV=py27
+        - language: generic
+          os: osx
+          env: TOXENV=py32
+        - language: generic
+          os: osx
+          env: TOXENV=py33
+        - language: generic
+          os: osx
+          env: TOXENV=py34
+        - language: generic
+          os: osx
+          env: TOXENV=pypy
+        - language: generic
+          os: osx
+          env: TOXENV=pypy3
+        - language: generic
+          os: osx
+          env: TOXENV=py26 OPENSSL=0.9.8
+        - language: generic
+          os: osx
+          env: TOXENV=py27 OPENSSL=0.9.8
+        - language: generic
+          os: osx
+          env: TOXENV=py32 OPENSSL=0.9.8
+        - language: generic
+          os: osx
+          env: TOXENV=py33 OPENSSL=0.9.8
+        - language: generic
+          os: osx
+          env: TOXENV=py34 OPENSSL=0.9.8
+        - language: generic
+          os: osx
+          env: TOXENV=pypy OPENSSL=0.9.8
+        - language: generic
+          os: osx
+          env: TOXENV=pypy3 OPENSSL=0.9.8
+        - language: generic
+          os: osx
+          env: TOXENV=docs
 
 install:
     - ./.travis/install.sh
@@ -40,31 +136,3 @@
             - "irc.freenode.org#cryptography-dev"
         use_notice: true
         skip_join: true
-    webhooks:
-        - https://buildtimetrend.herokuapp.com/travis
-
-matrix:
-    exclude:
-        # excluding pypy3 from linux configs until the ubuntu ppa has pypy3 available.
-        - os: linux
-          env: TOXENV=pypy3
-        - os: linux
-          env: TOXENV=pypy3 OPENSSL=0.9.8
-        - os: osx
-          compiler: gcc
-        - os: osx
-          env: TOXENV=pep8
-          compiler: clang
-        - os: osx
-          env: TOXENV=py3pep8
-          compiler: clang
-
-        - os: linux
-          env: TOXENV=docs
-          compiler: clang
-        - os: linux
-          env: TOXENV=pep8
-          compiler: clang
-        - os: linux
-          env: TOXENV=py3pep8
-          compiler: clang
diff --git a/.travis/install.sh b/.travis/install.sh
index aacfc5a..f7f3d50 100755
--- a/.travis/install.sh
+++ b/.travis/install.sh
@@ -3,7 +3,6 @@
 set -e
 set -x
 
-
 if [[ "$(uname -s)" == 'Darwin' ]]; then
     brew update
 
@@ -18,11 +17,11 @@
     case "${TOXENV}" in
         py26)
             curl -O https://bootstrap.pypa.io/get-pip.py
-            sudo python get-pip.py
+            python get-pip.py --user
             ;;
         py27)
             curl -O https://bootstrap.pypa.io/get-pip.py
-            sudo python get-pip.py
+            python get-pip.py --user
             ;;
         py32)
             brew upgrade pyenv
@@ -51,55 +50,15 @@
             ;;
         docs)
             curl -O https://bootstrap.pypa.io/get-pip.py
-            sudo python get-pip.py
+            python get-pip.py --user
             ;;
     esac
     pyenv rehash
-
+    pip install --user virtualenv
 else
-    sudo add-apt-repository -y ppa:fkrull/deadsnakes
-
-    if [[ "${TOXENV}" == "pypy" ]]; then
-        sudo add-apt-repository -y ppa:pypy/ppa
-    fi
-
-    if [[ "${OPENSSL}" == "0.9.8" ]]; then
-        sudo add-apt-repository -y "deb http://archive.ubuntu.com/ubuntu/ lucid main"
-    fi
-
-    # Retry `update` on failure, some of the servers aren't super reliable.
-    sudo apt-get -y update || sudo apt-get -y update || sudo apt-get -y update
-
-    if [[ "${OPENSSL}" == "0.9.8" ]]; then
-        sudo apt-get install -y --force-yes libssl-dev/lucid
-    fi
-
-    case "${TOXENV}" in
-        py26)
-            sudo apt-get install python2.6 python2.6-dev
-            ;;
-        py32)
-            sudo apt-get install python3.2 python3.2-dev
-            ;;
-        py33)
-            sudo apt-get install python3.3 python3.3-dev
-            ;;
-        py34)
-            sudo apt-get install python3.4 python3.4-dev
-            ;;
-        py3pep8)
-            sudo apt-get install python3.3 python3.3-dev
-            ;;
-        pypy)
-            sudo apt-get install --force-yes pypy pypy-dev
-            ;;
-        docs)
-            sudo apt-get install libenchant-dev
-            ;;
-    esac
+    pip install virtualenv
 fi
 
-sudo pip install virtualenv
-virtualenv ~/.venv
+python -m virtualenv ~/.venv
 source ~/.venv/bin/activate
 pip install tox coveralls
diff --git a/docs/hazmat/primitives/asymmetric/utils.rst b/docs/hazmat/primitives/asymmetric/utils.rst
index 6b34880..7380f0b 100644
--- a/docs/hazmat/primitives/asymmetric/utils.rst
+++ b/docs/hazmat/primitives/asymmetric/utils.rst
@@ -15,6 +15,8 @@
 
     :returns: The decoded tuple ``(r, s)``.
 
+    :raises ValueError: Raised if the signature is malformed.
+
 .. function:: encode_rfc6979_signature(r, s)
 
     Creates an :rfc:`6979` byte string from raw signature values.
diff --git a/docs/spelling_wordlist.txt b/docs/spelling_wordlist.txt
index f7b73b3..b7c4c6c 100644
--- a/docs/spelling_wordlist.txt
+++ b/docs/spelling_wordlist.txt
@@ -36,6 +36,7 @@
 Koblitz
 Lange
 metadata
+multi
 naïve
 namespace
 namespaces
diff --git a/setup.py b/setup.py
index d8c0790..eb735a0 100644
--- a/setup.py
+++ b/setup.py
@@ -29,22 +29,19 @@
     exec(f.read(), about)
 
 
-SETUPTOOLS_DEPENDENCY = "setuptools"
-CFFI_DEPENDENCY = "cffi>=0.8"
-SIX_DEPENDENCY = "six>=1.4.1"
 VECTORS_DEPENDENCY = "cryptography_vectors=={0}".format(about['__version__'])
 
 requirements = [
     "pyasn1",
-    SIX_DEPENDENCY,
-    SETUPTOOLS_DEPENDENCY
+    "six>=1.4.1",
+    "setuptools"
 ]
 
 if sys.version_info < (3, 4):
     requirements.append("enum34")
 
 if platform.python_implementation() != "PyPy":
-    requirements.append(CFFI_DEPENDENCY)
+    requirements.append("cffi>=0.8")
 
 # If you add a new dep here you probably need to add it in the tox.ini as well
 test_requirements = [