diff --git a/src/ecdsa.js b/src/ecdsa.js
index 549eedb..0a07412 100644
--- a/src/ecdsa.js
+++ b/src/ecdsa.js
@@ -75,6 +75,10 @@ function deterministicGenerateK (curve, hash, d, checkSig) {
 }
 
 function sign (curve, hash, d) {
+  typeForce('Curve', curve)
+  typeForce('Buffer', hash)
+  typeForce('BigInteger', d)
+
   var e = BigInteger.fromBuffer(hash)
   var n = curve.n
   var G = curve.G
@@ -105,6 +109,11 @@ function sign (curve, hash, d) {
 }
 
 function verify (curve, hash, signature, Q) {
+  typeForce('Curve', curve)
+  typeForce('Buffer', hash)
+  typeForce('ECSignature', signature)
+  typeForce('Point', Q)
+
   var n = curve.n
   var G = curve.G
 
@@ -153,6 +162,10 @@ function verify (curve, hash, signature, Q) {
   * http://www.secg.org/download/aid-780/sec1-v2.pdf
   */
 function recoverPubKey (curve, e, signature, i) {
+  typeForce('Curve', curve)
+  typeForce('BigInteger', e)
+  typeForce('ECSignature', signature)
+  typeForce('Number', i)
   assert.strictEqual(i & 3, i, 'Recovery param is more than two bits')
 
   var n = curve.n
@@ -206,6 +219,11 @@ function recoverPubKey (curve, e, signature, i) {
   * that resulted in a successful pubkey recovery.
   */
 function calcPubKeyRecoveryParam (curve, e, signature, Q) {
+  typeForce('Curve', curve)
+  typeForce('BigInteger', e)
+  typeForce('ECSignature', signature)
+  typeForce('Point', Q)
+
   for (var i = 0; i < 4; i++) {
     var Qprime = recoverPubKey(curve, e, signature, i)