use pyasn1 for creating the dss-sig-value structure
diff --git a/dev-requirements.txt b/dev-requirements.txt
index 092b991..4fff76b 100644
--- a/dev-requirements.txt
+++ b/dev-requirements.txt
@@ -5,6 +5,7 @@
 iso8601
 pep8-naming
 pretend
+pyasn1
 pytest
 requests
 sphinx
diff --git a/setup.py b/setup.py
index c841911..4dd9e62 100644
--- a/setup.py
+++ b/setup.py
@@ -44,6 +44,7 @@
 # If you add a new dep here you probably need to add it in the tox.ini as well
 test_requirements = [
     "pytest",
+    "pyasn1",
     "pretend",
     "iso8601",
 ]
diff --git a/tests/test_utils.py b/tests/test_utils.py
index 7b3ffbc..ae9f692 100644
--- a/tests/test_utils.py
+++ b/tests/test_utils.py
@@ -140,17 +140,6 @@
     assert sig3 == b"0\x06\x02\x01\x00\x02\x01\x00"
 
 
-def test_dss_sig_value_negative():
-    with pytest.raises(ValueError):
-        dss_sig_value(-1, 1)
-
-    with pytest.raises(ValueError):
-        dss_sig_value(1, -1)
-
-    with pytest.raises(ValueError):
-        dss_sig_value(-1, -1)
-
-
 def test_load_nist_vectors():
     vector_data = textwrap.dedent("""
     # CAVS 11.1
diff --git a/tests/utils.py b/tests/utils.py
index d856513..37565b4 100644
--- a/tests/utils.py
+++ b/tests/utils.py
@@ -18,6 +18,9 @@
 import re
 from contextlib import contextmanager
 
+from pyasn1.codec.ber import encoder
+from pyasn1.type import namedtype, univ
+
 import pytest
 
 import six
@@ -80,31 +83,18 @@
     assert exc_info.value._reason is reason
 
 
-def _int_to_asn1_int(i):
-    """
-    Used by dss_sig_value to convert python integers to ASN.1 integer bytes.
-    """
-    if i == 0:
-        return b'\x02\x01\x00'
-    if i < 0:
-        raise ValueError("This only supports positive integers right now.")
-    result = []
-    while i:
-        result.append(six.int2byte(i & 0xFF))
-        i >>= 8
-    # ASN.1 integers are stored big endian two's complement, so add a byte if
-    # the ordinal value of the last byte is over 0x7f.
-    if ord(result[-1]) > 127:
-        result.append(b"\x00")
-    result.reverse()
-    packed = b''.join(result)
-    return b"\x02" + chr(len(packed)).encode("ascii") + packed
+class DSSSigValue(univ.Sequence):
+    componentType = namedtype.NamedTypes(
+        namedtype.NamedType('r', univ.Integer()),
+        namedtype.NamedType('s', univ.Integer())
+    )
 
 
 def dss_sig_value(r, s):
-    combined = _int_to_asn1_int(r) + _int_to_asn1_int(s)
-    sig = b"0" + chr(len(combined)).encode("ascii") + combined
-    return sig
+    sig = DSSSigValue()
+    sig.setComponentByName('r', r)
+    sig.setComponentByName('s', s)
+    return encoder.encode(sig)
 
 
 def load_vectors_from_file(filename, loader):
diff --git a/tox.ini b/tox.ini
index da95995..e7d168d 100644
--- a/tox.ini
+++ b/tox.ini
@@ -7,6 +7,7 @@
     coverage
     iso8601
     pretend
+    pyasn1
     pytest
     ./vectors
 commands =