catch PyAsn1Error for encoding signature as well
diff --git a/src/cryptography/hazmat/primitives/asymmetric/utils.py b/src/cryptography/hazmat/primitives/asymmetric/utils.py
index 08bb40c..cf5973a 100644
--- a/src/cryptography/hazmat/primitives/asymmetric/utils.py
+++ b/src/cryptography/hazmat/primitives/asymmetric/utils.py
@@ -32,7 +32,11 @@
 
 
 def encode_rfc6979_signature(r, s):
-    sig = _DSSSigValue()
-    sig.setComponentByName('r', r)
-    sig.setComponentByName('s', s)
+    try:
+        sig = _DSSSigValue()
+        sig.setComponentByName('r', r)
+        sig.setComponentByName('s', s)
+    except PyAsn1Error:
+        raise ValueError("Both r and s must be integers")
+
     return encoder.encode(sig)
diff --git a/tests/hazmat/primitives/test_asym_utils.py b/tests/hazmat/primitives/test_asym_utils.py
index 1a945f3..3598f78 100644
--- a/tests/hazmat/primitives/test_asym_utils.py
+++ b/tests/hazmat/primitives/test_asym_utils.py
@@ -36,6 +36,14 @@
     assert decode_rfc6979_signature(sig4) == (-1, 0)
 
 
+def test_encode_rfc6979_non_integer():
+    with pytest.raises(ValueError):
+        encode_rfc6979_signature("h", 3)
+        encode_rfc6979_signature(3, "h")
+        encode_rfc6979_signature(3.3, 1.2)
+        encode_rfc6979_signature("hello", "world")
+
+
 def test_decode_rfc6979_trailing_bytes():
     with pytest.raises(ValueError):
         decode_rfc6979_signature(b"0\x06\x02\x01\x01\x02\x01\x01\x00\x00\x00")