diff --git a/pybtc/_crypto/module_crypto.cpp b/pybtc/_crypto/module_crypto.cpp index 912df37..3339f8c 100644 --- a/pybtc/_crypto/module_crypto.cpp +++ b/pybtc/_crypto/module_crypto.cpp @@ -31,6 +31,7 @@ static PyObject* crypto_encode_base58(PyObject *, PyObject* args) { if (!PyArg_ParseTuple(args,"y*", &buffer)) return NULL; std::string result = EncodeBase58((const unsigned char*)buffer.buf, (const unsigned char*)buffer.buf + buffer.len); + PyBuffer_Release(&buffer); const char * c = result.c_str(); PyObject *return_value = Py_BuildValue("s", c); Py_DECREF(c); @@ -42,6 +43,7 @@ static PyObject* crypto_double_sha256(PyObject *, PyObject* args) { if (!PyArg_ParseTuple(args,"y*", &buffer)) return NULL; unsigned char h[CSHA256::OUTPUT_SIZE]; CSHA256().Write((const unsigned char*)buffer.buf, buffer.len).Finalize(h); + PyBuffer_Release(&buffer); uint8_t h2[CSHA256::OUTPUT_SIZE]; CSHA256().Write(h, CSHA256::OUTPUT_SIZE).Finalize(h2); PyObject *return_value = Py_BuildValue("y#", h2, CSHA256::OUTPUT_SIZE); diff --git a/pybtc/_secp256k1/module_secp256k1.c b/pybtc/_secp256k1/module_secp256k1.c index 3eefce9..8a18aa0 100644 --- a/pybtc/_secp256k1/module_secp256k1.c +++ b/pybtc/_secp256k1/module_secp256k1.c @@ -26,9 +26,11 @@ static PyObject *secp256k1_secp256k1_ec_pubkey_tweak_add(PyObject *self, PyObjec if (!PyArg_ParseTuple(args,"y*y*i", &pubkey, &tweak, &flag)) { return NULL; } secp256k1_pubkey data; int t = secp256k1_ec_pubkey_parse(secp256k1_precomp_context_sign, &data, pubkey.buf, pubkey.len); + PyBuffer_Release(&pubkey); if (t==0) { return Py_BuildValue("b", -1); } t = secp256k1_ec_pubkey_tweak_add(secp256k1_context_no_precomp, &data, tweak.buf); + PyBuffer_Release(&tweak); if (t==0) { return Py_BuildValue("b", -2); } size_t outl = 33; @@ -57,9 +59,11 @@ static PyObject *secp256k1_secp256k1_ecdsa_add_points(PyObject *self, PyObject * if (!PyArg_ParseTuple(args,"y*y*i", &a, &b, &flag)) { return NULL; } secp256k1_pubkey data[2]; int t = secp256k1_ec_pubkey_parse(secp256k1_context_no_precomp, data, a.buf, a.len); + PyBuffer_Release(&a); if (t==0) { return Py_BuildValue("b", -1); } t = secp256k1_ec_pubkey_parse(secp256k1_context_no_precomp, data + 1, b.buf, b.len); + PyBuffer_Release(&b); if (t==0) { return Py_BuildValue("b", -1); } secp256k1_pubkey out; const secp256k1_pubkey* d[2]; @@ -92,6 +96,7 @@ static PyObject *secp256k1_secp256k1_ecdsa_signature_serialize_der(PyObject *sel int t = secp256k1_ecdsa_signature_parse_compact(secp256k1_context_no_precomp, &signature, sig.buf); + PyBuffer_Release(&sig); if (t==0) { return Py_BuildValue("b", 0); } unsigned char outputSer[72]; size_t outputLen = 72; @@ -111,7 +116,10 @@ static PyObject *secp256k1_secp256k1_nonce_rfc6979(PyObject *self, PyObject *arg Py_buffer key32; unsigned int counter; if (!PyArg_ParseTuple(args,"y*y*b", &msg32, &key32, &counter)) { return NULL; } + int r = secp256k1_nonce_function_rfc6979(nonce, msg32.buf, key32.buf, NULL, NULL, counter); + PyBuffer_Release(&msg32); + PyBuffer_Release(&key32); if (r == 0 ) { return Py_BuildValue("b", 0); } PyObject *return_value = Py_BuildValue("y#", &nonce, 32); Py_DECREF(nonce); @@ -129,6 +137,7 @@ static PyObject *secp256k1_secp256k1_ecdsa_recover(PyObject *self, PyObject *arg int r = secp256k1_ecdsa_signature_parse_der(secp256k1_context_no_precomp, &signature, sig.buf, sig.len); + PyBuffer_Release(&sig); if (r != 1) { return Py_BuildValue("b", -1);} @@ -150,6 +159,7 @@ static PyObject *secp256k1_secp256k1_ecdsa_recover(PyObject *self, PyObject *arg r = secp256k1_ecdsa_recover(secp256k1_precomp_context_verify, &pubkey, &signature_recoverable, message.buf); + PyBuffer_Release(&message); if (r != 1) { return Py_BuildValue("b", 0);} size_t outl; @@ -181,12 +191,13 @@ static PyObject *secp256k1_secp256k1_ecdsa_verify(PyObject *self, PyObject *args int r = secp256k1_ecdsa_signature_parse_der(secp256k1_context_no_precomp, &signature, sig.buf, sig.len); - + PyBuffer_Release(&sig); if (r != 1) { return Py_BuildValue("b", -1);} r = secp256k1_ec_pubkey_parse(secp256k1_context_no_precomp, &pubkey, pub.buf, pub.len); + PyBuffer_Release(&pub); if (r != 1) { return Py_BuildValue("b", -2);} @@ -194,6 +205,7 @@ static PyObject *secp256k1_secp256k1_ecdsa_verify(PyObject *self, PyObject *args &signature, message.buf, &pubkey); + PyBuffer_Release(&message); if (r != 1) { return Py_BuildValue("b", 0);} return Py_BuildValue("b", 1); } @@ -216,6 +228,7 @@ static PyObject *secp256k1_secp256k1_context_randomize(PyObject *self, PyObject int r = 0; r += secp256k1_context_randomize(secp256k1_precomp_context_sign, buffer.buf); r += secp256k1_context_randomize(secp256k1_precomp_context_sign, buffer.buf); + PyBuffer_Release(&buffer); if (r == 2) { return Py_BuildValue("b", 1); } else { return Py_BuildValue("b", 0); } @@ -267,6 +280,8 @@ static PyObject *secp256k1_secp256k1_ecdsa_sign(PyObject *self, PyObject *args) msg.buf, private_key.buf, NULL, NULL); + PyBuffer_Release(&private_key); + PyBuffer_Release(&msg); if (r != 1) { return Py_BuildValue("b", 0); }