summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Gilbert <floppym@gentoo.org>2015-05-26 00:35:30 +0000
committerMike Gilbert <floppym@gentoo.org>2015-05-26 00:35:30 +0000
commit046006b6136cbd231fc8e68900d15e953b4f8050 (patch)
tree115bb0d2317b1c2de037ee6313eab0c92ba54879 /dev-python/m2crypto/files
parentWhitespace. (diff)
downloadgentoo-2-046006b6136cbd231fc8e68900d15e953b4f8050.tar.gz
gentoo-2-046006b6136cbd231fc8e68900d15e953b4f8050.tar.bz2
gentoo-2-046006b6136cbd231fc8e68900d15e953b4f8050.zip
Move patches to a tarball to avoid QA warning.
(Portage version: 2.2.20/cvs/Linux x86_64, signed Manifest commit with key 0BBEEA1FEA4843A4)
Diffstat (limited to 'dev-python/m2crypto/files')
-rw-r--r--dev-python/m2crypto/files/0.21.1-0001-Fixed-invalid-variable-name.patch25
-rw-r--r--dev-python/m2crypto/files/0.21.1-0002-Fixing-memory-leaks-in-the-SWIG-wrapper.patch1697
-rw-r--r--dev-python/m2crypto/files/0.21.1-0003-Use-swig-generated-python-loader.patch165
3 files changed, 0 insertions, 1887 deletions
diff --git a/dev-python/m2crypto/files/0.21.1-0001-Fixed-invalid-variable-name.patch b/dev-python/m2crypto/files/0.21.1-0001-Fixed-invalid-variable-name.patch
deleted file mode 100644
index a055d39fe053..000000000000
--- a/dev-python/m2crypto/files/0.21.1-0001-Fixed-invalid-variable-name.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From 3afe5a15df02bce629051e67a691f2b21ce3cfa7 Mon Sep 17 00:00:00 2001
-From: Hugo Castilho <hugo.p.castilho@telecom.pt>
-Date: Fri, 2 May 2014 15:50:08 +0100
-Subject: [PATCH 1/3] Fixed invalid variable name
-
----
- M2Crypto/ASN1.py | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/M2Crypto/ASN1.py b/M2Crypto/ASN1.py
-index 09d9e9f..bb306ef 100644
---- a/M2Crypto/ASN1.py
-+++ b/M2Crypto/ASN1.py
-@@ -174,7 +174,7 @@ class ASN1_UTCTIME:
- raise ValueError("Invalid date: %s" % date)
- month, rest = date.split(' ', 1)
- if month not in self._ssl_months:
-- raise ValueError("Invalid date %s: Invalid month: %s" % (date, m))
-+ raise ValueError("Invalid date %s: Invalid month: %s" % (date, month))
- if rest.endswith(' GMT'):
- timezone = UTC
- rest = rest[:-4]
---
-2.4.1
-
diff --git a/dev-python/m2crypto/files/0.21.1-0002-Fixing-memory-leaks-in-the-SWIG-wrapper.patch b/dev-python/m2crypto/files/0.21.1-0002-Fixing-memory-leaks-in-the-SWIG-wrapper.patch
deleted file mode 100644
index 52dd74af4bed..000000000000
--- a/dev-python/m2crypto/files/0.21.1-0002-Fixing-memory-leaks-in-the-SWIG-wrapper.patch
+++ /dev/null
@@ -1,1697 +0,0 @@
-From 452d50d64a8e3368fe93db561a14a7bd14ca1b3c Mon Sep 17 00:00:00 2001
-From: Andreas Moser <amoser@google.com>
-Date: Thu, 9 Oct 2014 15:13:12 +0200
-Subject: [PATCH 2/3] Fixing memory leaks in the SWIG wrapper.
-
----
- SWIG/_aes.i | 26 +++++-----
- SWIG/_bio.i | 28 ++++++-----
- SWIG/_dh.i | 36 ++++++++------
- SWIG/_dsa.i | 106 ++++++++++++++++++++++++++---------------
- SWIG/_ec.i | 94 +++++++++++++++++++++++--------------
- SWIG/_evp.i | 151 ++++++++++++++++++++++++++++++++++-------------------------
- SWIG/_lib.i | 124 ++++++++++++++++++++++++++++++++++--------------
- SWIG/_rand.i | 16 +++----
- SWIG/_rc4.i | 21 +++++----
- SWIG/_rsa.i | 125 +++++++++++++++++++++++++++++--------------------
- SWIG/_ssl.i | 51 ++++++++++----------
- SWIG/_util.i | 24 +++++-----
- 12 files changed, 485 insertions(+), 317 deletions(-)
-
-diff --git a/SWIG/_aes.i b/SWIG/_aes.i
-index 013531b..31e9252 100644
---- a/SWIG/_aes.i
-+++ b/SWIG/_aes.i
-@@ -42,16 +42,16 @@ void AES_free(AES_KEY *key) {
- // otherwise: encrypt (Python code will supply the value 1.)
- */
- PyObject *AES_set_key(AES_KEY *key, PyObject *value, int bits, int op) {
-- const void *vbuf;
-- Py_ssize_t vlen;
-+ Py_buffer vbuf;
-
-- if (PyObject_AsReadBuffer(value, &vbuf, &vlen) == -1)
-- return NULL;
-+ if (m2_PyObject_GetBuffer(value, &vbuf, PyBUF_SIMPLE) == -1)
-+ return NULL;
-
- if (op == 0)
-- AES_set_encrypt_key(vbuf, bits, key);
-+ AES_set_encrypt_key(vbuf.buf, bits, key);
- else
-- AES_set_decrypt_key(vbuf, bits, key);
-+ AES_set_decrypt_key(vbuf.buf, bits, key);
-+ m2_PyBuffer_Release(value, &vbuf);
- Py_INCREF(Py_None);
- return Py_None;
- }
-@@ -61,21 +61,23 @@ PyObject *AES_set_key(AES_KEY *key, PyObject *value, int bits, int op) {
- // otherwise: encrypt (Python code will supply the value 1.)
- */
- PyObject *AES_crypt(const AES_KEY *key, PyObject *in, int outlen, int op) {
-- const void *buf;
-- Py_ssize_t len;
- unsigned char *out;
-+ Py_buffer buf;
-
-- if (PyObject_AsReadBuffer(in, &buf, &len) == -1)
-- return NULL;
-+ if (m2_PyObject_GetBuffer(in, &buf, PyBUF_SIMPLE) == -1)
-+ return NULL;
-
- if (!(out=(unsigned char *)PyMem_Malloc(outlen))) {
- PyErr_SetString(PyExc_MemoryError, "AES_crypt");
-+ m2_PyBuffer_Release(in, &buf);
- return NULL;
- }
-+
- if (op == 0)
-- AES_encrypt((const unsigned char *)in, out, key);
-+ AES_encrypt((const unsigned char *)buf.buf, out, key);
- else
-- AES_decrypt((const unsigned char *)in, out, key);
-+ AES_decrypt((const unsigned char *)buf.buf, out, key);
-+ m2_PyBuffer_Release(in, &buf);
- return PyString_FromStringAndSize((char*)out, outlen);
- }
-
-diff --git a/SWIG/_bio.i b/SWIG/_bio.i
-index bae3453..115b694 100644
---- a/SWIG/_bio.i
-+++ b/SWIG/_bio.i
-@@ -121,20 +121,21 @@ PyObject *bio_gets(BIO *bio, int num) {
- }
-
- int bio_write(BIO *bio, PyObject *from) {
-- const void *fbuf;
-- int flen, ret;
-+ Py_buffer fbuf;
-+ int ret;
-
-- if (m2_PyObject_AsReadBufferInt(from, &fbuf, &flen) == -1)
-- return -1;
-+ if (m2_PyObject_GetBufferInt(from, &fbuf, PyBUF_SIMPLE) == -1)
-+ return -1;
-
- Py_BEGIN_ALLOW_THREADS
-- ret = BIO_write(bio, fbuf, flen);
-+ ret = BIO_write(bio, fbuf.buf, fbuf.len);
- Py_END_ALLOW_THREADS
- if (ret < 0) {
- if (ERR_peek_error()) {
- PyErr_SetString(_bio_err, ERR_reason_error_string(ERR_get_error()));
- }
- }
-+ m2_PyBuffer_Release(from, &fbuf);
- return ret;
- }
-
-@@ -175,15 +176,20 @@ int bio_get_flags(BIO *bio) {
- }
-
- PyObject *bio_set_cipher(BIO *b, EVP_CIPHER *c, PyObject *key, PyObject *iv, int op) {
-- const void *kbuf, *ibuf;
-- Py_ssize_t klen, ilen;
-+ Py_buffer kbuf, ibuf;
-
-- if ((PyObject_AsReadBuffer(key, &kbuf, &klen) == -1)
-- || (PyObject_AsReadBuffer(iv, &ibuf, &ilen) == -1))
-- return NULL;
-+ if (m2_PyObject_GetBuffer(key, &kbuf, PyBUF_SIMPLE) == -1)
-+ return NULL;
-+
-+ if (m2_PyObject_GetBuffer(iv, &ibuf, PyBUF_SIMPLE) == -1) {
-+ m2_PyBuffer_Release(key, &kbuf);
-+ return NULL;
-+ }
-
- BIO_set_cipher(b, (const EVP_CIPHER *)c,
-- (unsigned char *)kbuf, (unsigned char *)ibuf, op);
-+ (unsigned char *)kbuf.buf, (unsigned char *)ibuf.buf, op);
-+ m2_PyBuffer_Release(iv, &ibuf);
-+ m2_PyBuffer_Release(key, &kbuf);
- Py_INCREF(Py_None);
- return Py_None;
- }
-diff --git a/SWIG/_dh.i b/SWIG/_dh.i
-index 6083d4e..b95671c 100644
---- a/SWIG/_dh.i
-+++ b/SWIG/_dh.i
-@@ -83,33 +83,37 @@ int dh_check(DH *dh) {
- }
-
- PyObject *dh_compute_key(DH *dh, PyObject *pubkey) {
-- const void *pkbuf;
-- int pklen, klen;
-+ Py_buffer pkbuf;
-+ int klen;
- void *key;
- BIGNUM *pk;
- PyObject *ret;
-
-- if (m2_PyObject_AsReadBufferInt(pubkey, &pkbuf, &pklen) == -1)
-- return NULL;
-+ if (m2_PyObject_GetBufferInt(pubkey, &pkbuf, PyBUF_SIMPLE) == -1)
-+ return NULL;
-
-- if (!(pk = BN_mpi2bn((unsigned char *)pkbuf, pklen, NULL))) {
-+ if (!(pk = BN_mpi2bn((unsigned char *)pkbuf.buf, pkbuf.len, NULL))) {
- PyErr_SetString(_dh_err, ERR_reason_error_string(ERR_get_error()));
-+ m2_PyBuffer_Release(pubkey, &pkbuf);
- return NULL;
- }
- if (!(key = PyMem_Malloc(DH_size(dh)))) {
- BN_free(pk);
- PyErr_SetString(PyExc_MemoryError, "dh_compute_key");
-+ m2_PyBuffer_Release(pubkey, &pkbuf);
- return NULL;
- }
- if ((klen = DH_compute_key((unsigned char *)key, pk, dh)) == -1) {
- BN_free(pk);
- PyMem_Free(key);
- PyErr_SetString(_dh_err, ERR_reason_error_string(ERR_get_error()));
-+ m2_PyBuffer_Release(pubkey, &pkbuf);
- return NULL;
- }
- ret = PyString_FromStringAndSize((const char *)key, klen);
- BN_free(pk);
- PyMem_Free(key);
-+ m2_PyBuffer_Release(pubkey, &pkbuf);
- return ret;
- }
-
-@@ -147,39 +151,41 @@ PyObject *dh_get_priv(DH *dh) {
-
- PyObject *dh_set_p(DH *dh, PyObject *value) {
- BIGNUM *bn;
-- const void *vbuf;
-- int vlen;
-+ Py_buffer vbuf;
-
-- if (m2_PyObject_AsReadBufferInt(value, &vbuf, &vlen) == -1)
-- return NULL;
-+ if (m2_PyObject_GetBufferInt(value, &vbuf, PyBUF_SIMPLE) == -1)
-+ return NULL;
-
-- if (!(bn = BN_mpi2bn((unsigned char *)vbuf, vlen, NULL))) {
-+ if (!(bn = BN_mpi2bn((unsigned char *)vbuf.buf, vbuf.len, NULL))) {
- PyErr_SetString(_dh_err, ERR_reason_error_string(ERR_get_error()));
-+ m2_PyBuffer_Release(value, &vbuf);
- return NULL;
- }
- if (dh->p)
- BN_free(dh->p);
- dh->p = bn;
-+ m2_PyBuffer_Release(value, &vbuf);
- Py_INCREF(Py_None);
- return Py_None;
- }
-
- PyObject *dh_set_g(DH *dh, PyObject *value) {
- BIGNUM *bn;
-- const void *vbuf;
-- int vlen;
-+ Py_buffer vbuf;
-
-- if (m2_PyObject_AsReadBufferInt(value, &vbuf, &vlen) == -1)
-- return NULL;
-+ if (m2_PyObject_GetBufferInt(value, &vbuf, PyBUF_SIMPLE) == -1)
-+ return NULL;
-
-- if (!(bn = BN_mpi2bn((unsigned char *)vbuf, vlen, NULL))) {
-+ if (!(bn = BN_mpi2bn((unsigned char *)vbuf.buf, vbuf.len, NULL))) {
- PyErr_SetString(_dh_err, ERR_reason_error_string(ERR_get_error()));
-+ m2_PyBuffer_Release(value, &vbuf);
- return NULL;
- }
- if (dh->g)
- BN_free(dh->g);
- dh->g = bn;
- Py_INCREF(Py_None);
-+ m2_PyBuffer_Release(value, &vbuf);
- return Py_None;
- }
- %}
-diff --git a/SWIG/_dsa.i b/SWIG/_dsa.i
-index a35dd88..e5d466b 100644
---- a/SWIG/_dsa.i
-+++ b/SWIG/_dsa.i
-@@ -99,57 +99,60 @@ PyObject *dsa_get_priv(DSA *dsa) {
-
- PyObject *dsa_set_p(DSA *dsa, PyObject *value) {
- BIGNUM *bn;
-- const void *vbuf;
-- int vlen;
-+ Py_buffer vbuf;
-
-- if (m2_PyObject_AsReadBufferInt(value, &vbuf, &vlen) == -1)
-- return NULL;
-+ if (m2_PyObject_GetBufferInt(value, &vbuf, PyBUF_SIMPLE) == -1)
-+ return NULL;
-
-- if (!(bn = BN_mpi2bn((unsigned char *)vbuf, vlen, NULL))) {
-+ if (!(bn = BN_mpi2bn((unsigned char *)vbuf.buf, vbuf.len, NULL))) {
- PyErr_SetString(_dsa_err, ERR_reason_error_string(ERR_get_error()));
-+ m2_PyBuffer_Release(value, &vbuf);
- return NULL;
- }
- if (dsa->p)
- BN_free(dsa->p);
- dsa->p = bn;
-+ m2_PyBuffer_Release(value, &vbuf);
- Py_INCREF(Py_None);
- return Py_None;
- }
-
- PyObject *dsa_set_q(DSA *dsa, PyObject *value) {
- BIGNUM *bn;
-- const void *vbuf;
-- int vlen;
-+ Py_buffer vbuf;
-
-- if (m2_PyObject_AsReadBufferInt(value, &vbuf, &vlen) == -1)
-- return NULL;
-+ if (m2_PyObject_GetBufferInt(value, &vbuf, PyBUF_SIMPLE) == -1)
-+ return NULL;
-
-- if (!(bn = BN_mpi2bn((unsigned char *)vbuf, vlen, NULL))) {
-+ if (!(bn = BN_mpi2bn((unsigned char *)vbuf.buf, vbuf.len, NULL))) {
- PyErr_SetString(_dsa_err, ERR_reason_error_string(ERR_get_error()));
-+ m2_PyBuffer_Release(value, &vbuf);
- return NULL;
- }
- if (dsa->q)
- BN_free(dsa->q);
- dsa->q = bn;
-+ m2_PyBuffer_Release(value, &vbuf);
- Py_INCREF(Py_None);
- return Py_None;
- }
-
- PyObject *dsa_set_g(DSA *dsa, PyObject *value) {
- BIGNUM *bn;
-- const void *vbuf;
-- int vlen;
-+ Py_buffer vbuf;
-
-- if (m2_PyObject_AsReadBufferInt(value, &vbuf, &vlen) == -1)
-+ if (m2_PyObject_GetBufferInt(value, &vbuf, PyBUF_SIMPLE) == -1)
- return NULL;
-
-- if (!(bn = BN_mpi2bn((unsigned char *)vbuf, vlen, NULL))) {
-+ if (!(bn = BN_mpi2bn((unsigned char *)vbuf.buf, vbuf.len, NULL))) {
- PyErr_SetString(_dsa_err, ERR_reason_error_string(ERR_get_error()));
-+ m2_PyBuffer_Release(value, &vbuf);
- return NULL;
- }
- if (dsa->g)
- BN_free(dsa->g);
- dsa->g = bn;
-+ m2_PyBuffer_Release(value, &vbuf);
- Py_INCREF(Py_None);
- return Py_None;
- }
-@@ -236,97 +239,124 @@ DSA *dsa_read_pub_key(BIO *f, PyObject *pyfunc) {
- }
-
- PyObject *dsa_sign(DSA *dsa, PyObject *value) {
-- const void *vbuf;
-- int vlen;
-+ Py_buffer vbuf;
- PyObject *tuple;
- DSA_SIG *sig;
-
-- if (m2_PyObject_AsReadBufferInt(value, &vbuf, &vlen) == -1)
-+ if (m2_PyObject_GetBufferInt(value, &vbuf, PyBUF_SIMPLE) == -1)
- return NULL;
-
-- if (!(sig = DSA_do_sign(vbuf, vlen, dsa))) {
-+ if (!(sig = DSA_do_sign(vbuf.buf, vbuf.len, dsa))) {
- PyErr_SetString(_dsa_err, ERR_reason_error_string(ERR_get_error()));
-+ m2_PyBuffer_Release(value, &vbuf);
- return NULL;
- }
- if (!(tuple = PyTuple_New(2))) {
- DSA_SIG_free(sig);
- PyErr_SetString(PyExc_RuntimeError, "PyTuple_New() fails");
-+ m2_PyBuffer_Release(value, &vbuf);
- return NULL;
- }
- PyTuple_SET_ITEM(tuple, 0, dsa_sig_get_r(sig));
- PyTuple_SET_ITEM(tuple, 1, dsa_sig_get_s(sig));
- DSA_SIG_free(sig);
-+ m2_PyBuffer_Release(value, &vbuf);
- return tuple;
- }
-
- int dsa_verify(DSA *dsa, PyObject *value, PyObject *r, PyObject *s) {
-- const void *vbuf, *rbuf, *sbuf;
-- int vlen, rlen, slen;
-+ Py_buffer vbuf, rbuf, sbuf;
- DSA_SIG *sig;
- int ret;
-
-- if ((m2_PyObject_AsReadBufferInt(value, &vbuf, &vlen) == -1)
-- || (m2_PyObject_AsReadBufferInt(r, &rbuf, &rlen) == -1)
-- || (m2_PyObject_AsReadBufferInt(s, &sbuf, &slen) == -1))
-+ if (m2_PyObject_GetBufferInt(value, &vbuf, PyBUF_SIMPLE) == -1)
-+ return -1;
-+ if (m2_PyObject_GetBufferInt(r, &rbuf, PyBUF_SIMPLE) == -1) {
-+ m2_PyBuffer_Release(value, &vbuf);
-+ return -1;
-+ }
-+ if (m2_PyObject_GetBufferInt(s, &sbuf, PyBUF_SIMPLE) == -1) {
-+ m2_PyBuffer_Release(value, &vbuf);
-+ m2_PyBuffer_Release(r, &rbuf);
- return -1;
-+ }
-
- if (!(sig = DSA_SIG_new())) {
- PyErr_SetString(_dsa_err, ERR_reason_error_string(ERR_get_error()));
-+ m2_PyBuffer_Release(value, &vbuf);
-+ m2_PyBuffer_Release(r, &rbuf);
-+ m2_PyBuffer_Release(s, &sbuf);
- return -1;
- }
-- if (!(sig->r = BN_mpi2bn((unsigned char *)rbuf, rlen, NULL))) {
-+ if (!(sig->r = BN_mpi2bn((unsigned char *)rbuf.buf, rbuf.len, NULL))) {
- PyErr_SetString(_dsa_err, ERR_reason_error_string(ERR_get_error()));
- DSA_SIG_free(sig);
-+ m2_PyBuffer_Release(value, &vbuf);
-+ m2_PyBuffer_Release(r, &rbuf);
-+ m2_PyBuffer_Release(s, &sbuf);
- return -1;
- }
-- if (!(sig->s = BN_mpi2bn((unsigned char *)sbuf, slen, NULL))) {
-+ if (!(sig->s = BN_mpi2bn((unsigned char *)sbuf.buf, sbuf.len, NULL))) {
- PyErr_SetString(_dsa_err, ERR_reason_error_string(ERR_get_error()));
- DSA_SIG_free(sig);
-+ m2_PyBuffer_Release(value, &vbuf);
-+ m2_PyBuffer_Release(r, &rbuf);
-+ m2_PyBuffer_Release(s, &sbuf);
- return -1;
- }
-- ret = DSA_do_verify(vbuf, vlen, sig, dsa);
-+ ret = DSA_do_verify(vbuf.buf, vbuf.len, sig, dsa);
- DSA_SIG_free(sig);
- if (ret == -1)
- PyErr_SetString(_dsa_err, ERR_reason_error_string(ERR_get_error()));
-+ m2_PyBuffer_Release(value, &vbuf);
-+ m2_PyBuffer_Release(r, &rbuf);
-+ m2_PyBuffer_Release(s, &sbuf);
- return ret;
- }
-
- PyObject *dsa_sign_asn1(DSA *dsa, PyObject *value) {
-- const void *vbuf;
-- int vlen;
-+ Py_buffer vbuf;
- void *sigbuf;
- unsigned int siglen;
- PyObject *ret;
-
-- if (m2_PyObject_AsReadBufferInt(value, &vbuf, &vlen) == -1)
-+ if (m2_PyObject_GetBufferInt(value, &vbuf, PyBUF_SIMPLE) == -1)
- return NULL;
-
- if (!(sigbuf = PyMem_Malloc(DSA_size(dsa)))) {
- PyErr_SetString(PyExc_MemoryError, "dsa_sign_asn1");
-+ m2_PyBuffer_Release(value, &vbuf);
- return NULL;
- }
-- if (!DSA_sign(0, vbuf, vlen, (unsigned char *)sigbuf, &siglen, dsa)) {
-+ if (!DSA_sign(0, vbuf.buf, vbuf.len,
-+ (unsigned char *)sigbuf, &siglen, dsa)) {
- PyErr_SetString(_dsa_err, ERR_reason_error_string(ERR_get_error()));
- PyMem_Free(sigbuf);
-+ m2_PyBuffer_Release(value, &vbuf);
- return NULL;
- }
- ret = PyString_FromStringAndSize(sigbuf, siglen);
- PyMem_Free(sigbuf);
-+ m2_PyBuffer_Release(value, &vbuf);
- return ret;
- }
-
- int dsa_verify_asn1(DSA *dsa, PyObject *value, PyObject *sig) {
-- const void *vbuf;
-- void *sbuf;
-- int vlen, slen, ret;
-+ int ret;
-+ Py_buffer vbuf, sbuf;
-
-- if ((m2_PyObject_AsReadBufferInt(value, &vbuf, &vlen) == -1)
-- || (m2_PyObject_AsReadBufferInt(sig, (const void **)&sbuf, &slen)
-- == -1))
-- return -1;
-+ if (m2_PyObject_GetBufferInt(value, &vbuf, PyBUF_SIMPLE) == -1)
-+ return -1;
-+ if (m2_PyObject_GetBufferInt(sig, &sbuf, PyBUF_SIMPLE) == -1) {
-+ m2_PyBuffer_Release(value, &vbuf);
-+ return -1;
-+ }
-
-- if ((ret = DSA_verify(0, vbuf, vlen, sbuf, slen, dsa)) == -1)
-+ if ((ret = DSA_verify(0, (const void *) vbuf.buf, vbuf.len,
-+ (void *) sbuf.buf, sbuf.len, dsa)) == -1)
- PyErr_SetString(_dsa_err, ERR_reason_error_string(ERR_get_error()));
-+ m2_PyBuffer_Release(value, &vbuf);
-+ m2_PyBuffer_Release(sig, &sbuf);
- return ret;
- }
-
-diff --git a/SWIG/_ec.i b/SWIG/_ec.i
-index f0e52bd..0271c73 100644
---- a/SWIG/_ec.i
-+++ b/SWIG/_ec.i
-@@ -255,56 +255,76 @@ PyObject *ecdsa_sig_get_s(ECDSA_SIG *ecdsa_sig) {
- }
-
- PyObject *ecdsa_sign(EC_KEY *key, PyObject *value) {
-- const void *vbuf;
-- int vlen;
- PyObject *tuple;
- ECDSA_SIG *sig;
-+ Py_buffer vbuf;
-
-- if (m2_PyObject_AsReadBufferInt(value, &vbuf, &vlen) == -1)
-- return NULL;
-+ if (m2_PyObject_GetBufferInt(value, &vbuf, PyBUF_SIMPLE) == -1)
-+ return NULL;
-
-- if (!(sig = ECDSA_do_sign(vbuf, vlen, key))) {
-+ if (!(sig = ECDSA_do_sign(vbuf.buf, vbuf.len, key))) {
- PyErr_SetString(_ec_err, ERR_reason_error_string(ERR_get_error()));
-+ m2_PyBuffer_Release(value, &vbuf);
- return NULL;
- }
- if (!(tuple = PyTuple_New(2))) {
- ECDSA_SIG_free(sig);
- PyErr_SetString(PyExc_RuntimeError, "PyTuple_New() fails");
-+ m2_PyBuffer_Release(value, &vbuf);
- return NULL;
- }
- PyTuple_SET_ITEM(tuple, 0, ecdsa_sig_get_r(sig));
- PyTuple_SET_ITEM(tuple, 1, ecdsa_sig_get_s(sig));
- ECDSA_SIG_free(sig);
-+ m2_PyBuffer_Release(value, &vbuf);
- return tuple;
- }
-
- int ecdsa_verify(EC_KEY *key, PyObject *value, PyObject *r, PyObject *s) {
-- const void *vbuf, *rbuf, *sbuf;
-- int vlen, rlen, slen;
-+ Py_buffer vbuf, rbuf, sbuf;
- ECDSA_SIG *sig;
- int ret;
-
-- if ((m2_PyObject_AsReadBufferInt(value, &vbuf, &vlen) == -1)
-- || (m2_PyObject_AsReadBufferInt(r, &rbuf, &rlen) == -1)
-- || (m2_PyObject_AsReadBufferInt(s, &sbuf, &slen) == -1))
-- return -1;
-+ if (m2_PyObject_GetBufferInt(value, &vbuf, PyBUF_SIMPLE) == -1)
-+ return -1;
-+ if (m2_PyObject_GetBufferInt(r, &rbuf, PyBUF_SIMPLE) == -1) {
-+ m2_PyBuffer_Release(value, &vbuf);
-+ return -1;
-+ }
-+ if (m2_PyObject_GetBufferInt(s, &sbuf, PyBUF_SIMPLE) == -1) {
-+ m2_PyBuffer_Release(value, &vbuf);
-+ m2_PyBuffer_Release(r, &rbuf);
-+ return -1;
-+ }
-
- if (!(sig = ECDSA_SIG_new())) {
- PyErr_SetString(_ec_err, ERR_reason_error_string(ERR_get_error()));
-+ m2_PyBuffer_Release(value, &vbuf);
-+ m2_PyBuffer_Release(r, &rbuf);
-+ m2_PyBuffer_Release(s, &sbuf);
- return -1;
- }
-- if (!BN_mpi2bn((unsigned char *)rbuf, rlen, sig->r)) {
-+ if (!BN_mpi2bn((unsigned char *)rbuf.buf, rbuf.len, sig->r)) {
- PyErr_SetString(_ec_err, ERR_reason_error_string(ERR_get_error()));
- ECDSA_SIG_free(sig);
-+ m2_PyBuffer_Release(value, &vbuf);
-+ m2_PyBuffer_Release(r, &rbuf);
-+ m2_PyBuffer_Release(s, &sbuf);
- return -1;
- }
-- if (!BN_mpi2bn((unsigned char *)sbuf, slen, sig->s)) {
-+ if (!BN_mpi2bn((unsigned char *)sbuf.buf, sbuf.len, sig->s)) {
- PyErr_SetString(_ec_err, ERR_reason_error_string(ERR_get_error()));
- ECDSA_SIG_free(sig);
-+ m2_PyBuffer_Release(value, &vbuf);
-+ m2_PyBuffer_Release(r, &rbuf);
-+ m2_PyBuffer_Release(s, &sbuf);
- return -1;
- }
-- ret = ECDSA_do_verify(vbuf, vlen, sig, key);
-+ ret = ECDSA_do_verify(vbuf.buf, vbuf.len, sig, key);
- ECDSA_SIG_free(sig);
-+ m2_PyBuffer_Release(value, &vbuf);
-+ m2_PyBuffer_Release(r, &rbuf);
-+ m2_PyBuffer_Release(s, &sbuf);
- if (ret == -1)
- PyErr_SetString(_ec_err, ERR_reason_error_string(ERR_get_error()));
- return ret;
-@@ -312,42 +332,49 @@ int ecdsa_verify(EC_KEY *key, PyObject *value, PyObject *r, PyObject *s) {
-
-
- PyObject *ecdsa_sign_asn1(EC_KEY *key, PyObject *value) {
-- const void *vbuf;
-- int vlen;
-+ Py_buffer vbuf;
- void *sigbuf;
- unsigned int siglen;
- PyObject *ret;
-
-- if (m2_PyObject_AsReadBufferInt(value, &vbuf, &vlen) == -1)
-+ if (m2_PyObject_GetBufferInt(value, &vbuf, PyBUF_SIMPLE) == -1)
- return NULL;
-
- if (!(sigbuf = PyMem_Malloc(ECDSA_size(key)))) {
- PyErr_SetString(PyExc_MemoryError, "ecdsa_sign_asn1");
-+ m2_PyBuffer_Release(value, &vbuf);
- return NULL;
- }
-- if (!ECDSA_sign(0, vbuf, vlen, (unsigned char *)sigbuf, &siglen, key)) {
-+ if (!ECDSA_sign(0, vbuf.buf, vbuf.len,
-+ (unsigned char *)sigbuf, &siglen, key)) {
- PyErr_SetString(_ec_err, ERR_reason_error_string(ERR_get_error()));
- PyMem_Free(sigbuf);
-+ m2_PyBuffer_Release(value, &vbuf);
- return NULL;
- }
- ret = PyString_FromStringAndSize(sigbuf, siglen);
- PyMem_Free(sigbuf);
-+ m2_PyBuffer_Release(value, &vbuf);
- return ret;
- }
-
-
- int ecdsa_verify_asn1(EC_KEY *key, PyObject *value, PyObject *sig) {
-- const void *vbuf;
-- void *sbuf;
-- int vlen, slen, ret;
-+ Py_buffer vbuf, sbuf;
-+ int ret;
-
-- if ((m2_PyObject_AsReadBufferInt(value, &vbuf, &vlen) == -1)
-- || (m2_PyObject_AsReadBufferInt(sig, (const void **)&sbuf, &slen)
-- == -1))
-- return -1;
-+ if (m2_PyObject_GetBufferInt(value, &vbuf, PyBUF_SIMPLE) == -1)
-+ return -1;
-+ if (m2_PyObject_GetBufferInt(sig, &sbuf, PyBUF_SIMPLE) == -1) {
-+ m2_PyBuffer_Release(value, &vbuf);
-+ return -1;
-+ }
-
-- if ((ret = ECDSA_verify(0, vbuf, vlen, sbuf, slen, key)) == -1)
-+ if ((ret = ECDSA_verify(0, (const void *) vbuf.buf, vbuf.len,
-+ sbuf.buf, sbuf.len, key)) == -1)
- PyErr_SetString(_ec_err, ERR_reason_error_string(ERR_get_error()));
-+ m2_PyBuffer_Release(value, &vbuf);
-+ m2_PyBuffer_Release(sig, &sbuf);
- return ret;
- }
-
-@@ -385,18 +412,17 @@ PyObject *ecdh_compute_key(EC_KEY *keypairA, EC_KEY *pubkeyB) {
-
-
- EC_KEY* ec_key_from_pubkey_der(PyObject *pubkey) {
-- const void *keypairbuf;
-- Py_ssize_t keypairbuflen;
-+ Py_buffer keypairbuf;
- const unsigned char *tempBuf;
- EC_KEY *keypair;
-
-- if (PyObject_AsReadBuffer(pubkey, &keypairbuf, &keypairbuflen) == -1)
-- {
-- return NULL;
-- }
-+ if (m2_PyObject_GetBufferInt(pubkey, &keypairbuf, PyBUF_SIMPLE) == -1)
-+ return NULL;
-
-- tempBuf = (const unsigned char *)keypairbuf;
-- if ((keypair = d2i_EC_PUBKEY( NULL, &tempBuf, keypairbuflen)) == 0)
-+ tempBuf = (const unsigned char *)keypairbuf.buf;
-+ keypair = d2i_EC_PUBKEY( NULL, &tempBuf, keypairbuf.len);
-+ m2_PyBuffer_Release(pubkey, &keypairbuf);
-+ if (keypair == 0)
- {
- PyErr_SetString(_ec_err, ERR_reason_error_string(ERR_get_error()));
- return NULL;
-diff --git a/SWIG/_evp.i b/SWIG/_evp.i
-index 0593eed..ff36521 100644
---- a/SWIG/_evp.i
-+++ b/SWIG/_evp.i
-@@ -169,22 +169,23 @@ PyObject *pkcs5_pbkdf2_hmac_sha1(PyObject *pass,
- int iter,
- int keylen) {
- unsigned char key[EVP_MAX_KEY_LENGTH];
-- unsigned char *saltbuf;
-- char *passbuf;
- PyObject *ret;
-- int passlen, saltlen;
-+ Py_buffer passbuf, saltbuf;
-
-- if (m2_PyObject_AsReadBufferInt(pass, (const void **)&passbuf,
-- &passlen) == -1)
-- return NULL;
-- if (m2_PyObject_AsReadBufferInt(salt, (const void **)&saltbuf,
-- &saltlen) == -1)
-+ if (m2_PyObject_GetBufferInt(pass, &passbuf, PyBUF_SIMPLE) == -1)
-+ return NULL;
-+ if (m2_PyObject_GetBufferInt(salt, &saltbuf, PyBUF_SIMPLE) == -1) {
-+ m2_PyBuffer_Release(pass, &passbuf);
- return NULL;
-+ }
-
-- PKCS5_PBKDF2_HMAC_SHA1(passbuf, passlen, saltbuf, saltlen, iter,
-- keylen, key);
-+ PKCS5_PBKDF2_HMAC_SHA1((char *) passbuf.buf, passbuf.len,
-+ (unsigned char *) saltbuf.buf, saltbuf.len,
-+ iter, keylen, key);
- ret = PyString_FromStringAndSize((char*)key, keylen);
- OPENSSL_cleanse(key, keylen);
-+ m2_PyBuffer_Release(pass, &passbuf);
-+ m2_PyBuffer_Release(salt, &saltbuf);
- return ret;
- }
-
-@@ -202,13 +203,15 @@ void md_ctx_free(EVP_MD_CTX *ctx) {
- }
-
- int digest_update(EVP_MD_CTX *ctx, PyObject *blob) {
-- const void *buf;
-- Py_ssize_t len;
-+ Py_buffer buf;
-+ int ret;
-
-- if (PyObject_AsReadBuffer(blob, &buf, &len) == -1)
-- return -1;
-+ if (m2_PyObject_GetBuffer(blob, &buf, PyBUF_SIMPLE) == -1)
-+ return -1;
-
-- return EVP_DigestUpdate(ctx, buf, len);
-+ ret = EVP_DigestUpdate(ctx, buf.buf, buf.len);
-+ m2_PyBuffer_Release(blob, &buf);
-+ return ret;
- }
-
- PyObject *digest_final(EVP_MD_CTX *ctx) {
-@@ -247,25 +250,25 @@ void hmac_ctx_free(HMAC_CTX *ctx) {
- }
-
- PyObject *hmac_init(HMAC_CTX *ctx, PyObject *key, const EVP_MD *md) {
-- const void *kbuf;
-- int klen;
-+ Py_buffer kbuf;
-
-- if (m2_PyObject_AsReadBufferInt(key, &kbuf, &klen) == -1)
-- return NULL;
-+ if (m2_PyObject_GetBufferInt(key, &kbuf, PyBUF_SIMPLE) == -1)
-+ return NULL;
-
-- HMAC_Init(ctx, kbuf, klen, md);
-+ HMAC_Init(ctx, kbuf.buf, kbuf.len, md);
-+ m2_PyBuffer_Release(key, &kbuf);
- Py_INCREF(Py_None);
- return Py_None;
- }
-
- PyObject *hmac_update(HMAC_CTX *ctx, PyObject *blob) {
-- const void *buf;
-- Py_ssize_t len;
-+ Py_buffer buf;
-
-- if (PyObject_AsReadBuffer(blob, &buf, &len) == -1)
-- return NULL;
-+ if (m2_PyObject_GetBuffer(blob, &buf, PyBUF_SIMPLE) == -1)
-+ return NULL;
-
-- HMAC_Update(ctx, buf, len);
-+ HMAC_Update(ctx, buf.buf, buf.len);
-+ m2_PyBuffer_Release(blob, &buf);
- Py_INCREF(Py_None);
- return Py_None;
- }
-@@ -286,25 +289,30 @@ PyObject *hmac_final(HMAC_CTX *ctx) {
- }
-
- PyObject *hmac(PyObject *key, PyObject *data, const EVP_MD *md) {
-- const void *kbuf, *dbuf;
- void *blob;
-- int klen;
- unsigned int blen;
-- Py_ssize_t dlen;
- PyObject *ret;
-+ Py_buffer kbuf, dbuf;
-
-- if ((m2_PyObject_AsReadBufferInt(key, &kbuf, &klen) == -1)
-- || (PyObject_AsReadBuffer(data, &dbuf, &dlen) == -1))
-+ if (m2_PyObject_GetBufferInt(key, &kbuf, PyBUF_SIMPLE) == -1)
- return NULL;
-+ if (m2_PyObject_GetBuffer(data, &dbuf, PyBUF_SIMPLE) == -1) {
-+ m2_PyBuffer_Release(key, &kbuf);
-+ return NULL;
-+ }
-
- if (!(blob = PyMem_Malloc(EVP_MAX_MD_SIZE))) {
- PyErr_SetString(PyExc_MemoryError, "hmac");
-+ m2_PyBuffer_Release(key, &kbuf);
-+ m2_PyBuffer_Release(data, &dbuf);
- return NULL;
- }
-- HMAC(md, kbuf, klen, dbuf, dlen, blob, &blen);
-+ HMAC(md, kbuf.buf, kbuf.len, dbuf.buf, dbuf.len, blob, &blen);
- blob = PyMem_Realloc(blob, blen);
- ret = PyString_FromStringAndSize(blob, blen);
- PyMem_Free(blob);
-+ m2_PyBuffer_Release(key, &kbuf);
-+ m2_PyBuffer_Release(data, &dbuf);
- return ret;
- }
-
-@@ -329,61 +337,74 @@ PyObject *bytes_to_key(const EVP_CIPHER *cipher, EVP_MD *md,
- PyObject *iv, /* Not used */
- int iter) {
- unsigned char key[EVP_MAX_KEY_LENGTH];
-- const void *dbuf, *sbuf;
-- int dlen, klen;
-- Py_ssize_t slen;
-+ int klen;
- PyObject *ret;
-+ Py_buffer dbuf, sbuf;
-
-- if ((m2_PyObject_AsReadBufferInt(data, &dbuf, &dlen) == -1)
-- || (PyObject_AsReadBuffer(salt, &sbuf, &slen) == -1))
-+ if (m2_PyObject_GetBufferInt(data, &dbuf, PyBUF_SIMPLE) == -1)
- return NULL;
-+ if (m2_PyObject_GetBuffer(salt, &sbuf, PyBUF_SIMPLE) == -1) {
-+ m2_PyBuffer_Release(data, &dbuf);
-+ return NULL;
-+ }
-
-- assert((slen == 8) || (slen == 0));
-- klen = EVP_BytesToKey(cipher, md, (unsigned char *)sbuf,
-- (unsigned char *)dbuf, dlen, iter,
-+ assert((sbuf.len == 8) || (sbuf.len == 0));
-+ klen = EVP_BytesToKey(cipher, md, (unsigned char *)sbuf.buf,
-+ (unsigned char *)dbuf.buf, dbuf.len, iter,
- key, NULL); /* Since we are not returning IV no need to derive it */
- ret = PyString_FromStringAndSize((char*)key, klen);
-+ m2_PyBuffer_Release(data, &dbuf);
-+ m2_PyBuffer_Release(salt, &sbuf);
- return ret;
- }
-
- PyObject *cipher_init(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
- PyObject *key, PyObject *iv, int mode) {
-- const void *kbuf, *ibuf;
-- Py_ssize_t klen, ilen;
-+ Py_buffer kbuf, ibuf;
-
-- if ((PyObject_AsReadBuffer(key, &kbuf, &klen) == -1)
-- || (PyObject_AsReadBuffer(iv, &ibuf, &ilen) == -1))
-+ if (m2_PyObject_GetBuffer(key, &kbuf, PyBUF_SIMPLE) == -1)
-+ return NULL;
-+ if (m2_PyObject_GetBuffer(iv, &ibuf, PyBUF_SIMPLE) == -1) {
-+ m2_PyBuffer_Release(key, &kbuf);
- return NULL;
-+ }
-
-- if (!EVP_CipherInit(ctx, cipher, (unsigned char *)kbuf,
-- (unsigned char *)ibuf, mode)) {
-+ if (!EVP_CipherInit(ctx, cipher, (unsigned char *)kbuf.buf,
-+ (unsigned char *)ibuf.buf, mode)) {
- PyErr_SetString(_evp_err, ERR_reason_error_string(ERR_get_error()));
-+ m2_PyBuffer_Release(key, &kbuf);
-+ m2_PyBuffer_Release(iv, &ibuf);
- return NULL;
- }
- Py_INCREF(Py_None);
-+ m2_PyBuffer_Release(key, &kbuf);
-+ m2_PyBuffer_Release(iv, &ibuf);
- return Py_None;
- }
-
- PyObject *cipher_update(EVP_CIPHER_CTX *ctx, PyObject *blob) {
-- const void *buf;
-- int len, olen;
-+ int olen;
- void *obuf;
- PyObject *ret;
-+ Py_buffer buf;
-
-- if (m2_PyObject_AsReadBufferInt(blob, &buf, &len) == -1)
-+ if (m2_PyObject_GetBuffer(blob, &buf, PyBUF_SIMPLE) == -1)
- return NULL;
-
-- if (!(obuf = PyMem_Malloc(len + EVP_CIPHER_CTX_block_size(ctx) - 1))) {
-+ if (!(obuf = PyMem_Malloc(buf.len + EVP_CIPHER_CTX_block_size(ctx) - 1))) {
- PyErr_SetString(PyExc_MemoryError, "cipher_update");
-+ m2_PyBuffer_Release(blob, &buf);
- return NULL;
- }
-- if (!EVP_CipherUpdate(ctx, obuf, &olen, (unsigned char *)buf, len)) {
-+ if (!EVP_CipherUpdate(ctx, obuf, &olen, (unsigned char *)buf.buf, buf.len)) {
- PyMem_Free(obuf);
- PyErr_SetString(_evp_err, ERR_reason_error_string(ERR_get_error()));
-+ m2_PyBuffer_Release(blob, &buf);
- return NULL;
- }
- ret = PyString_FromStringAndSize(obuf, olen);
- PyMem_Free(obuf);
-+ m2_PyBuffer_Release(blob, &buf);
- return ret;
- }
-
-@@ -407,17 +428,18 @@ PyObject *cipher_final(EVP_CIPHER_CTX *ctx) {
- }
-
- PyObject *sign_update(EVP_MD_CTX *ctx, PyObject *blob) {
-- const void *buf;
-- Py_ssize_t len;
-+ Py_buffer buf;
-
-- if (PyObject_AsReadBuffer(blob, &buf, &len) == -1)
-+ if (m2_PyObject_GetBuffer(blob, &buf, PyBUF_SIMPLE) == -1)
- return NULL;
-
-- if (!EVP_SignUpdate(ctx, buf, len)) {
-+ if (!EVP_SignUpdate(ctx, buf.buf, buf.len)) {
- PyErr_SetString(_evp_err, ERR_reason_error_string(ERR_get_error()));
-+ m2_PyBuffer_Release(blob, &buf);
- return NULL;
- }
- Py_INCREF(Py_None);
-+ m2_PyBuffer_Release(blob, &buf);
- return Py_None;
- }
-
-@@ -445,24 +467,27 @@ PyObject *sign_final(EVP_MD_CTX *ctx, EVP_PKEY *pkey) {
- }
-
- int verify_update(EVP_MD_CTX *ctx, PyObject *blob) {
-- const void *buf;
-- Py_ssize_t len;
-+ Py_buffer buf;
-+ int ret;
-
-- if (PyObject_AsReadBuffer(blob, &buf, &len) == -1)
-+ if (m2_PyObject_GetBuffer(blob, &buf, PyBUF_SIMPLE) == -1)
- return -1;
--
-- return EVP_VerifyUpdate(ctx, buf, len);
-+ ret = EVP_VerifyUpdate(ctx, buf.buf, buf.len);
-+ m2_PyBuffer_Release(blob, &buf);
-+ return ret;
- }
-
-
- int verify_final(EVP_MD_CTX *ctx, PyObject *blob, EVP_PKEY *pkey) {
-- unsigned char *kbuf;
-- int len;
-+ Py_buffer kbuf;
-+ int ret;
-
-- if (m2_PyObject_AsReadBufferInt(blob, (const void **)&kbuf, &len) == -1)
-+ if (m2_PyObject_GetBufferInt(blob, &kbuf, PyBUF_SIMPLE) == -1)
- return -1;
-
-- return EVP_VerifyFinal(ctx, kbuf, len, pkey);
-+ ret = EVP_VerifyFinal(ctx, (unsigned char *) kbuf.buf, kbuf.len, pkey);
-+ m2_PyBuffer_Release(blob, &kbuf);
-+ return ret;
- }
- %}
-
-diff --git a/SWIG/_lib.i b/SWIG/_lib.i
-index 2eaa9fa..890a723 100644
---- a/SWIG/_lib.i
-+++ b/SWIG/_lib.i
-@@ -47,33 +47,77 @@ void blob_free(Blob *blob) {
- /* Python helpers. */
-
- %}
--%ignore m2_PyObject_AsReadBufferInt;
-+%ignore PyBuffer_Release;
-+%ignore PyObject_CheckBuffer;
-+%ignore PyObject_GetBuffer;
-+%ignore m2_PyBuffer_Release;
-+%ignore m2_PyObject_GetBuffer;
-+%ignore m2_PyObject_GetBufferInt;
- %ignore m2_PyString_AsStringAndSizeInt;
- %{
--static int
--m2_PyObject_AsReadBufferInt(PyObject *obj, const void **buffer,
-- int *buffer_len)
--{
-- int ret;
-- Py_ssize_t len;
-
-- ret = PyObject_AsReadBuffer(obj, buffer, &len);
-- if (ret)
-- return ret;
-- if (len > INT_MAX) {
-- PyErr_SetString(PyExc_ValueError, "object too large");
-- return -1;
-- }
-- *buffer_len = len;
-+
-+#if PY_VERSION_HEX < 0x02060000
-+static int PyObject_CheckBuffer(PyObject *obj) {
-+ (void)obj;
- return 0;
- }
-
-+static int PyObject_GetBuffer(PyObject *obj, Py_buffer *view, int flags) {
-+ (void)obj;
-+ (void)view;
-+ (void)flags;
-+ return -1;
-+}
-+
-+static void PyBuffer_Release(Py_buffer *view) {
-+ (void)view;
-+}
-+#endif /* PY_VERSION_HEX < 0x02060000 */
-+
-+
-+static void m2_PyBuffer_Release(PyObject *obj, Py_buffer *view) {
-+ if (PyObject_CheckBuffer(obj))
-+ PyBuffer_Release(view);
-+ /* else do nothing, view->buf comes from PyObject_AsReadBuffer */
-+}
-+
-+static int m2_PyObject_GetBuffer(PyObject *obj, Py_buffer *view, int flags) {
-+ int ret;
-+
-+ if (PyObject_CheckBuffer(obj))
-+ ret = PyObject_GetBuffer(obj, view, flags);
-+ else {
-+ const void *buf;
-+
-+ ret = PyObject_AsReadBuffer(obj, &buf, &view->len);
-+
-+ if (ret == 0)
-+ view->buf = (void *)buf;
-+ }
-+ return ret;
-+}
-+
-+
-+static int m2_PyObject_GetBufferInt(PyObject *obj, Py_buffer *view, int flags) {
-+ int ret;
-+
-+ ret = m2_PyObject_GetBuffer(obj, view, flags);
-+ if (ret)
-+ return ret;
-+ if (view->len > INT_MAX) {
-+ PyErr_SetString(PyExc_ValueError, "object too large");
-+ m2_PyBuffer_Release(obj, view);
-+ return -1;
-+ }
-+ return 0;
-+}
-+
- static int
- m2_PyString_AsStringAndSizeInt(PyObject *obj, char **s, int *len)
- {
- int ret;
- Py_ssize_t len2;
--
- ret = PyString_AsStringAndSize(obj, s, &len2);
- if (ret)
- return ret;
-@@ -318,13 +362,15 @@ PyObject *bn_to_mpi(BIGNUM *bn) {
- }
-
- BIGNUM *mpi_to_bn(PyObject *value) {
-- const void *vbuf;
-- int vlen;
-+ Py_buffer vbuf;
-+ BIGNUM *ret;
-
-- if (m2_PyObject_AsReadBufferInt(value, &vbuf, &vlen) == -1)
-- return NULL;
-+ if (m2_PyObject_GetBufferInt(value, &vbuf, PyBUF_SIMPLE) == -1)
-+ return NULL;
-
-- return BN_mpi2bn(vbuf, vlen, NULL);
-+ ret = BN_mpi2bn(vbuf.buf, vbuf.len, NULL);
-+ m2_PyBuffer_Release(value, &vbuf);
-+ return ret;
- }
-
- PyObject *bn_to_bin(BIGNUM *bn) {
-@@ -344,13 +390,15 @@ PyObject *bn_to_bin(BIGNUM *bn) {
- }
-
- BIGNUM *bin_to_bn(PyObject *value) {
-- const void *vbuf;
-- int vlen;
-+ Py_buffer vbuf;
-+ BIGNUM *ret;
-
-- if (m2_PyObject_AsReadBufferInt(value, &vbuf, &vlen) == -1)
-- return NULL;
-+ if (m2_PyObject_GetBufferInt(value, &vbuf, PyBUF_SIMPLE) == -1)
-+ return NULL;
-
-- return BN_bin2bn(vbuf, vlen, NULL);
-+ ret = BN_bin2bn(vbuf.buf, vbuf.len, NULL);
-+ m2_PyBuffer_Release(value, &vbuf);
-+ return ret;
- }
-
- PyObject *bn_to_hex(BIGNUM *bn) {
-@@ -372,44 +420,48 @@ PyObject *bn_to_hex(BIGNUM *bn) {
- }
-
- BIGNUM *hex_to_bn(PyObject *value) {
-- const void *vbuf;
-- Py_ssize_t vlen;
-+ Py_buffer vbuf;
- BIGNUM *bn;
-
-- if (PyObject_AsReadBuffer(value, &vbuf, &vlen) == -1)
-- return NULL;
-+ if (m2_PyObject_GetBuffer(value, &vbuf, PyBUF_SIMPLE) == -1)
-+ return NULL;
-
- if ((bn=BN_new())==NULL) {
- PyErr_SetString(PyExc_MemoryError, "hex_to_bn");
-+ m2_PyBuffer_Release(value, &vbuf);
- return NULL;
- }
-- if (BN_hex2bn(&bn, (const char *)vbuf) <= 0) {
-+ if (BN_hex2bn(&bn, (const char *)vbuf.buf) <= 0) {
- PyErr_SetString(PyExc_RuntimeError,
- ERR_error_string(ERR_get_error(), NULL));
- BN_free(bn);
-+ m2_PyBuffer_Release(value, &vbuf);
- return NULL;
- }
-+ m2_PyBuffer_Release(value, &vbuf);
- return bn;
- }
-
- BIGNUM *dec_to_bn(PyObject *value) {
-- const void *vbuf;
-- Py_ssize_t vlen;
-+ Py_buffer vbuf;
- BIGNUM *bn;
-
-- if (PyObject_AsReadBuffer(value, &vbuf, &vlen) == -1)
-- return NULL;
-+ if (m2_PyObject_GetBuffer(value, &vbuf, PyBUF_SIMPLE) == -1)
-+ return NULL;
-
- if ((bn=BN_new())==NULL) {
- PyErr_SetString(PyExc_MemoryError, "dec_to_bn");
-+ m2_PyBuffer_Release(value, &vbuf);
- return NULL;
- }
-- if ((BN_dec2bn(&bn, (const char *)vbuf) <= 0)) {
-+ if ((BN_dec2bn(&bn, (const char *)vbuf.buf) <= 0)) {
- PyErr_SetString(PyExc_RuntimeError,
- ERR_error_string(ERR_get_error(), NULL));
- BN_free(bn);
-+ m2_PyBuffer_Release(value, &vbuf);
- return NULL;
- }
-+ m2_PyBuffer_Release(value, &vbuf);
- return bn;
- }
- %}
-diff --git a/SWIG/_rand.i b/SWIG/_rand.i
-index 1a59a90..7e07126 100644
---- a/SWIG/_rand.i
-+++ b/SWIG/_rand.i
-@@ -26,25 +26,25 @@ void rand_init(PyObject *rand_err) {
- }
-
- PyObject *rand_seed(PyObject *seed) {
-- const void *buf;
-- int len;
-+ Py_buffer buf;
-
-- if (m2_PyObject_AsReadBufferInt(seed, &buf, &len) == -1)
-+ if (m2_PyObject_GetBufferInt(seed, &buf, PyBUF_SIMPLE) == -1)
- return NULL;
-
-- RAND_seed(buf, len);
-+ RAND_seed(buf.buf, buf.len);
-+ m2_PyBuffer_Release(seed, &buf);
- Py_INCREF(Py_None);
- return Py_None;
- }
-
- PyObject *rand_add(PyObject *blob, double entropy) {
-- const void *buf;
-- int len;
-+ Py_buffer buf;
-
-- if (m2_PyObject_AsReadBufferInt(blob, &buf, &len) == -1)
-+ if (m2_PyObject_GetBufferInt(blob, &buf, PyBUF_SIMPLE) == -1)
- return NULL;
-
-- RAND_add(buf, len, entropy);
-+ RAND_add(buf.buf, buf.len, entropy);
-+ m2_PyBuffer_Release(blob, &buf);
- Py_INCREF(Py_None);
- return Py_None;
- }
-diff --git a/SWIG/_rc4.i b/SWIG/_rc4.i
-index 42cec17..d3c013a 100644
---- a/SWIG/_rc4.i
-+++ b/SWIG/_rc4.i
-@@ -22,33 +22,34 @@ void rc4_free(RC4_KEY *key) {
- }
-
- PyObject *rc4_set_key(RC4_KEY *key, PyObject *value) {
-- const void *vbuf;
-- int vlen;
-+ Py_buffer vbuf;
-
-- if (m2_PyObject_AsReadBufferInt(value, &vbuf, &vlen) == -1)
-+ if (m2_PyObject_GetBufferInt(value, &vbuf, PyBUF_SIMPLE) == -1)
- return NULL;
-
-- RC4_set_key(key, vlen, vbuf);
-+ RC4_set_key(key, vbuf.len, vbuf.buf);
-+ m2_PyBuffer_Release(value, &vbuf);
- Py_INCREF(Py_None);
- return Py_None;
- }
-
- PyObject *rc4_update(RC4_KEY *key, PyObject *in) {
- PyObject *ret;
-- const void *buf;
-- Py_ssize_t len;
- void *out;
-+ Py_buffer buf;
-
-- if (PyObject_AsReadBuffer(in, &buf, &len) == -1)
-+ if (m2_PyObject_GetBuffer(in, &buf, PyBUF_SIMPLE) == -1)
- return NULL;
-
-- if (!(out = PyMem_Malloc(len))) {
-+ if (!(out = PyMem_Malloc(buf.len))) {
- PyErr_SetString(PyExc_MemoryError, "expected a string object");
-+ m2_PyBuffer_Release(in, &buf);
- return NULL;
- }
-- RC4(key, len, buf, out);
-- ret = PyString_FromStringAndSize(out, len);
-+ RC4(key, buf.len, buf.buf, out);
-+ ret = PyString_FromStringAndSize(out, buf.len);
- PyMem_Free(out);
-+ m2_PyBuffer_Release(in, &buf);
- return ret;
- }
-
-diff --git a/SWIG/_rsa.i b/SWIG/_rsa.i
-index af91c5c..22bb55d 100644
---- a/SWIG/_rsa.i
-+++ b/SWIG/_rsa.i
-@@ -120,18 +120,19 @@ PyObject *rsa_get_n(RSA *rsa) {
-
- PyObject *rsa_set_e(RSA *rsa, PyObject *value) {
- BIGNUM *bn;
-- const void *vbuf;
-- int vlen;
-+ Py_buffer pybuf;
-
-- if (m2_PyObject_AsReadBufferInt(value, &vbuf, &vlen) == -1)
-- return NULL;
-+ if (m2_PyObject_GetBufferInt(value, &pybuf, PyBUF_SIMPLE) == -1)
-+ return NULL;
-
-- if (!(bn = BN_mpi2bn((unsigned char *)vbuf, vlen, NULL))) {
-+ if (!(bn = BN_mpi2bn((unsigned char *)pybuf.buf, pybuf.len, NULL))) {
- PyErr_SetString(_rsa_err, ERR_reason_error_string(ERR_get_error()));
-+ m2_PyBuffer_Release(value, &pybuf);
- return NULL;
- }
- if (rsa->e)
- BN_free(rsa->e);
-+ m2_PyBuffer_Release(value, &pybuf);
- rsa->e = bn;
- Py_INCREF(Py_None);
- return Py_None;
-@@ -139,18 +140,19 @@ PyObject *rsa_set_e(RSA *rsa, PyObject *value) {
-
- PyObject *rsa_set_n(RSA *rsa, PyObject *value) {
- BIGNUM *bn;
-- const void *vbuf;
-- int vlen;
-+ Py_buffer pybuf;
-
-- if (m2_PyObject_AsReadBufferInt(value, &vbuf, &vlen) == -1)
-- return NULL;
-+ if (m2_PyObject_GetBufferInt(value, &pybuf, PyBUF_SIMPLE) == -1)
-+ return NULL;
-
-- if (!(bn = BN_mpi2bn((unsigned char *)vbuf, vlen, NULL))) {
-+ if (!(bn = BN_mpi2bn((unsigned char *)pybuf.buf, pybuf.len, NULL))) {
- PyErr_SetString(_rsa_err, ERR_reason_error_string(ERR_get_error()));
-+ m2_PyBuffer_Release(value, &pybuf);
- return NULL;
- }
- if (rsa->n)
- BN_free(rsa->n);
-+ m2_PyBuffer_Release(value, &pybuf);
- rsa->n = bn;
- Py_INCREF(Py_None);
- return Py_None;
-@@ -158,18 +160,19 @@ PyObject *rsa_set_n(RSA *rsa, PyObject *value) {
-
- PyObject *rsa_set_e_bin(RSA *rsa, PyObject *value) {
- BIGNUM *bn;
-- const void *vbuf;
-- int vlen;
-+ Py_buffer pybuf;
-
-- if (m2_PyObject_AsReadBufferInt(value, &vbuf, &vlen) == -1)
-- return NULL;
-+ if (m2_PyObject_GetBufferInt(value, &pybuf, PyBUF_SIMPLE) == -1)
-+ return NULL;
-
-- if (!(bn = BN_bin2bn((unsigned char *)vbuf, vlen, NULL))) {
-+ if (!(bn = BN_bin2bn((unsigned char *)pybuf.buf, pybuf.len, NULL))) {
- PyErr_SetString(_rsa_err, ERR_reason_error_string(ERR_get_error()));
-+ m2_PyBuffer_Release(value, &pybuf);
- return NULL;
- }
- if (rsa->e)
- BN_free(rsa->e);
-+ m2_PyBuffer_Release(value, &pybuf);
- rsa->e = bn;
- Py_INCREF(Py_None);
- return Py_None;
-@@ -177,178 +180,196 @@ PyObject *rsa_set_e_bin(RSA *rsa, PyObject *value) {
-
- PyObject *rsa_set_n_bin(RSA *rsa, PyObject *value) {
- BIGNUM *bn;
-- const void *vbuf;
-- int vlen;
-+ Py_buffer pybuf;
-
-- if (m2_PyObject_AsReadBufferInt(value, &vbuf, &vlen) == -1)
-- return NULL;
-+ if (m2_PyObject_GetBufferInt(value, &pybuf, PyBUF_SIMPLE) == -1)
-+ return NULL;
-
-- if (!(bn = BN_bin2bn((unsigned char *)vbuf, vlen, NULL))) {
-+ if (!(bn = BN_bin2bn((unsigned char *)pybuf.buf, pybuf.len, NULL))) {
- PyErr_SetString(_rsa_err, ERR_reason_error_string(ERR_get_error()));
-+ m2_PyBuffer_Release(value, &pybuf);
- return NULL;
- }
- if (rsa->n)
- BN_free(rsa->n);
-+ m2_PyBuffer_Release(value, &pybuf);
- rsa->n = bn;
- Py_INCREF(Py_None);
- return Py_None;
- }
-
- PyObject *rsa_private_encrypt(RSA *rsa, PyObject *from, int padding) {
-- const void *fbuf;
- void *tbuf;
-- int flen, tlen;
-+ int tlen;
- PyObject *ret;
-+ Py_buffer pybuf;
-
-- if (m2_PyObject_AsReadBufferInt(from, &fbuf, &flen) == -1)
-- return NULL;
-+ if (m2_PyObject_GetBufferInt(from, &pybuf, PyBUF_SIMPLE) == -1)
-+ return NULL;
-
- if (!(tbuf = PyMem_Malloc(BN_num_bytes(rsa->n)))) {
- PyErr_SetString(PyExc_MemoryError, "rsa_private_encrypt");
-+ m2_PyBuffer_Release(from, &pybuf);
- return NULL;
- }
-- tlen = RSA_private_encrypt(flen, (unsigned char *)fbuf,
-- (unsigned char *)tbuf, rsa, padding);
-+ tlen = RSA_private_encrypt(pybuf.len, (unsigned char *)pybuf.buf,
-+ (unsigned char *)tbuf, rsa, padding);
- if (tlen == -1) {
- PyMem_Free(tbuf);
-+ m2_PyBuffer_Release(from, &pybuf);
- PyErr_SetString(_rsa_err, ERR_reason_error_string(ERR_get_error()));
- return NULL;
- }
- ret = PyString_FromStringAndSize((const char *)tbuf, tlen);
- PyMem_Free(tbuf);
-+ m2_PyBuffer_Release(from, &pybuf);
- return ret;
- }
-
- PyObject *rsa_public_decrypt(RSA *rsa, PyObject *from, int padding) {
-- const void *fbuf;
- void *tbuf;
-- int flen, tlen;
-+ int tlen;
- PyObject *ret;
-+ Py_buffer pybuf;
-
-- if (m2_PyObject_AsReadBufferInt(from, &fbuf, &flen) == -1)
-+ if (m2_PyObject_GetBufferInt(from, &pybuf, PyBUF_SIMPLE) == -1)
- return NULL;
-
- if (!(tbuf = PyMem_Malloc(BN_num_bytes(rsa->n)))) {
- PyErr_SetString(PyExc_MemoryError, "rsa_public_decrypt");
-+ m2_PyBuffer_Release(from, &pybuf);
- return NULL;
- }
-- tlen = RSA_public_decrypt(flen, (unsigned char *)fbuf,
-- (unsigned char *)tbuf, rsa, padding);
-+ tlen = RSA_public_decrypt(pybuf.len, (unsigned char *)pybuf.buf,
-+ (unsigned char *)tbuf, rsa, padding);
- if (tlen == -1) {
- PyMem_Free(tbuf);
-+ m2_PyBuffer_Release(from, &pybuf);
- PyErr_SetString(_rsa_err, ERR_reason_error_string(ERR_get_error()));
- return NULL;
- }
- ret = PyString_FromStringAndSize((const char *)tbuf, tlen);
- PyMem_Free(tbuf);
-+ m2_PyBuffer_Release(from, &pybuf);
- return ret;
- }
-
- PyObject *rsa_public_encrypt(RSA *rsa, PyObject *from, int padding) {
-- const void *fbuf;
- void *tbuf;
-- int flen, tlen;
-+ int tlen;
- PyObject *ret;
-+ Py_buffer pybuf;
-
-- if (m2_PyObject_AsReadBufferInt(from, &fbuf, &flen) == -1)
-+ if (m2_PyObject_GetBufferInt(from, &pybuf, PyBUF_SIMPLE) == -1)
- return NULL;
-
- if (!(tbuf = PyMem_Malloc(BN_num_bytes(rsa->n)))) {
- PyErr_SetString(PyExc_MemoryError, "rsa_public_encrypt");
-+ m2_PyBuffer_Release(from, &pybuf);
- return NULL;
- }
-- tlen = RSA_public_encrypt(flen, (unsigned char *)fbuf,
-+ tlen = RSA_public_encrypt(pybuf.len, (unsigned char *)pybuf.buf,
- (unsigned char *)tbuf, rsa, padding);
- if (tlen == -1) {
- PyMem_Free(tbuf);
-+ m2_PyBuffer_Release(from, &pybuf);
- PyErr_SetString(_rsa_err, ERR_reason_error_string(ERR_get_error()));
- return NULL;
- }
- ret = PyString_FromStringAndSize((const char *)tbuf, tlen);
- PyMem_Free(tbuf);
-+ m2_PyBuffer_Release(from, &pybuf);
- return ret;
- }
-
- PyObject *rsa_private_decrypt(RSA *rsa, PyObject *from, int padding) {
-- const void *fbuf;
- void *tbuf;
-- int flen, tlen;
-+ int tlen;
- PyObject *ret;
-+ Py_buffer pybuf;
-
-- if (m2_PyObject_AsReadBufferInt(from, &fbuf, &flen) == -1)
-+ if (m2_PyObject_GetBufferInt(from, &pybuf, PyBUF_SIMPLE) == -1)
- return NULL;
-
- if (!(tbuf = PyMem_Malloc(BN_num_bytes(rsa->n)))) {
- PyErr_SetString(PyExc_MemoryError, "rsa_private_decrypt");
-+ m2_PyBuffer_Release(from, &pybuf);
- return NULL;
- }
-- tlen = RSA_private_decrypt(flen, (unsigned char *)fbuf,
-- (unsigned char *)tbuf, rsa, padding);
-+ tlen = RSA_private_decrypt(pybuf.len, (unsigned char *)pybuf.buf,
-+ (unsigned char *)tbuf, rsa, padding);
-+
- if (tlen == -1) {
- PyMem_Free(tbuf);
-+ m2_PyBuffer_Release(from, &pybuf);
- PyErr_SetString(_rsa_err, ERR_reason_error_string(ERR_get_error()));
- return NULL;
- }
- ret = PyString_FromStringAndSize((const char *)tbuf, tlen);
- PyMem_Free(tbuf);
-+ m2_PyBuffer_Release(from, &pybuf);
- return ret;
- }
-
- #if OPENSSL_VERSION_NUMBER >= 0x0090708fL
- PyObject *rsa_padding_add_pkcs1_pss(RSA *rsa, PyObject *digest, EVP_MD *hash, int salt_length) {
-- const void *dbuf;
- unsigned char *tbuf;
-- int dlen, result, tlen;
-+ int result, tlen;
- PyObject *ret;
-+ Py_buffer dbuf;
-
-- if (m2_PyObject_AsReadBufferInt(digest, &dbuf, &dlen) == -1)
-+ if (m2_PyObject_GetBufferInt(digest, &dbuf, PyBUF_SIMPLE) == -1)
- return NULL;
-
- tlen = RSA_size(rsa);
-
- if (!(tbuf = OPENSSL_malloc(tlen))) {
- PyErr_SetString(PyExc_MemoryError, "rsa_padding_add_pkcs1_pss");
-+ m2_PyBuffer_Release(digest, &dbuf);
- return NULL;
- }
- result = RSA_padding_add_PKCS1_PSS(
- rsa,
- tbuf,
-- (unsigned char *)dbuf,
-+ (unsigned char *)dbuf.buf,
- hash,
- salt_length);
-
- if (result == -1) {
- OPENSSL_cleanse(tbuf, tlen);
- OPENSSL_free(tbuf);
-+ m2_PyBuffer_Release(digest, &dbuf);
- PyErr_SetString(_rsa_err, ERR_reason_error_string(ERR_get_error()));
- return NULL;
- }
- ret = PyString_FromStringAndSize((const char *)tbuf, tlen);
- OPENSSL_cleanse(tbuf, tlen);
- OPENSSL_free(tbuf);
-+ m2_PyBuffer_Release(digest, &dbuf);
- return ret;
- }
-
- int rsa_verify_pkcs1_pss(RSA *rsa, PyObject *digest, PyObject *signature, EVP_MD *hash, int salt_length) {
-- const void *dbuf;
-- const void *sbuf;
-- int dlen, slen, ret;
-+ int ret;
-+ Py_buffer dbuf, sbuf;
-
-- if (m2_PyObject_AsReadBufferInt(digest, &dbuf, &dlen) == -1) {
-+ if (m2_PyObject_GetBufferInt(digest, &dbuf, PyBUF_SIMPLE) == -1) {
- return 0;
- }
--
-- if (m2_PyObject_AsReadBufferInt(signature, &sbuf, &slen) == -1) {
-+ if (m2_PyObject_GetBufferInt(signature, &sbuf, PyBUF_SIMPLE) == -1) {
-+ m2_PyBuffer_Release(digest, &dbuf);
- return 0;
- }
-
- ret = RSA_verify_PKCS1_PSS(
- rsa,
-- (unsigned char *)dbuf,
-+ (unsigned char *)dbuf.buf,
- hash,
-- (unsigned char *)sbuf,
-+ (unsigned char *)sbuf.buf,
- salt_length);
-
-+ m2_PyBuffer_Release(digest, &dbuf);
-+ m2_PyBuffer_Release(signature, &sbuf);
- return ret;
- }
- #endif
-diff --git a/SWIG/_ssl.i b/SWIG/_ssl.i
-index 28a247c..e0856af 100644
---- a/SWIG/_ssl.i
-+++ b/SWIG/_ssl.i
-@@ -315,13 +315,14 @@ void ssl_ctx_set_verify(SSL_CTX *ctx, int mode, PyObject *pyfunc) {
- }
-
- int ssl_ctx_set_session_id_context(SSL_CTX *ctx, PyObject *sid_ctx) {
-- const void *buf;
-- int len;
--
-- if (m2_PyObject_AsReadBufferInt(sid_ctx, &buf, &len) == -1)
-- return -1;
-+ Py_buffer buf;
-+ int ret;
-
-- return SSL_CTX_set_session_id_context(ctx, buf, len);
-+ if (m2_PyObject_GetBufferInt(sid_ctx, &buf, PyBUF_SIMPLE) == -1)
-+ return -1;
-+ ret = SSL_CTX_set_session_id_context(ctx, buf.buf, buf.len);
-+ m2_PyBuffer_Release(sid_ctx, &buf);
-+ return ret;
- }
-
- void ssl_ctx_set_info_callback(SSL_CTX *ctx, PyObject *pyfunc) {
-@@ -384,13 +385,15 @@ void ssl_set_client_CA_list_from_context(SSL *ssl, SSL_CTX *ctx) {
- }
-
- int ssl_set_session_id_context(SSL *ssl, PyObject *sid_ctx) {
-- const void *buf;
-- int len;
-+ Py_buffer buf;
-+ int ret;
-
-- if (m2_PyObject_AsReadBufferInt(sid_ctx, &buf, &len) == -1)
-- return -1;
-+ if (m2_PyObject_GetBufferInt(sid_ctx, &buf, PyBUF_SIMPLE) == -1)
-+ return -1;
-
-- return SSL_set_session_id_context(ssl, buf, len);
-+ ret = SSL_set_session_id_context(ssl, buf.buf, buf.len);
-+ m2_PyBuffer_Release(sid_ctx, &buf);
-+ return ret;
- }
-
- int ssl_set_fd(SSL *ssl, int fd) {
-@@ -583,17 +586,14 @@ PyObject *ssl_read_nbio(SSL *ssl, int num) {
- }
-
- int ssl_write(SSL *ssl, PyObject *blob) {
-- const void *buf;
-- int len, r, err, ret;
--
-+ int r, err, ret;
-+ Py_buffer buf;
-
-- if (m2_PyObject_AsReadBufferInt(blob, &buf, &len) == -1) {
-+ if (m2_PyObject_GetBufferInt(blob, &buf, PyBUF_SIMPLE) == -1)
- return -1;
-- }
-
--
- Py_BEGIN_ALLOW_THREADS
-- r = SSL_write(ssl, buf, len);
-+ r = SSL_write(ssl, buf.buf, buf.len);
- Py_END_ALLOW_THREADS
-
-
-@@ -623,22 +623,19 @@ int ssl_write(SSL *ssl, PyObject *blob) {
- ret = -1;
- }
-
--
-+ m2_PyBuffer_Release(blob, &buf);
- return ret;
- }
-
- int ssl_write_nbio(SSL *ssl, PyObject *blob) {
-- const void *buf;
-- int len, r, err, ret;
--
-+ int r, err, ret;
-+ Py_buffer buf;
-
-- if (m2_PyObject_AsReadBufferInt(blob, &buf, &len) == -1) {
-+ if (m2_PyObject_GetBufferInt(blob, &buf, PyBUF_SIMPLE) == -1)
- return -1;
-- }
--
-
- Py_BEGIN_ALLOW_THREADS
-- r = SSL_write(ssl, buf, len);
-+ r = SSL_write(ssl, buf.buf, buf.len);
- Py_END_ALLOW_THREADS
-
-
-@@ -667,7 +664,7 @@ int ssl_write_nbio(SSL *ssl, PyObject *blob) {
- ret = -1;
- }
-
--
-+ m2_PyBuffer_Release(blob, &buf);
- return ret;
- }
-
-diff --git a/SWIG/_util.i b/SWIG/_util.i
-index c1105eb..f1f0a74 100644
---- a/SWIG/_util.i
-+++ b/SWIG/_util.i
-@@ -17,41 +17,43 @@ void util_init(PyObject *util_err) {
-
- PyObject *util_hex_to_string(PyObject *blob) {
- PyObject *obj;
-- const void *buf;
- char *ret;
-- Py_ssize_t len;
-+ Py_buffer buf;
-
-- if (PyObject_AsReadBuffer(blob, &buf, &len) == -1)
-- return NULL;
-+ if (m2_PyObject_GetBuffer(blob, &buf, PyBUF_SIMPLE) == -1)
-+ return NULL;
-
-- ret = hex_to_string((unsigned char *)buf, len);
-+ ret = hex_to_string((unsigned char *)buf.buf, buf.len);
- if (!ret) {
- PyErr_SetString(_util_err, ERR_reason_error_string(ERR_get_error()));
-+ m2_PyBuffer_Release(blob, &buf);
- return NULL;
- }
- obj = PyString_FromString(ret);
- OPENSSL_free(ret);
-+ m2_PyBuffer_Release(blob, &buf);
- return obj;
- }
-
- PyObject *util_string_to_hex(PyObject *blob) {
- PyObject *obj;
-- const void *buf;
- unsigned char *ret;
-- Py_ssize_t len0;
- long len;
-+ Py_buffer buf;
-
-- if (PyObject_AsReadBuffer(blob, &buf, &len0) == -1)
-- return NULL;
-+ if (m2_PyObject_GetBuffer(blob, &buf, PyBUF_SIMPLE) == -1)
-+ return NULL;
-
-- len = len0;
-- ret = string_to_hex((char *)buf, &len);
-+ len = buf.len;
-+ ret = string_to_hex((char *)buf.buf, &len);
- if (ret == NULL) {
- PyErr_SetString(_util_err, ERR_reason_error_string(ERR_get_error()));
-+ m2_PyBuffer_Release(blob, &buf);
- return NULL;
- }
- obj = PyString_FromStringAndSize((char*)ret, len);
- OPENSSL_free(ret);
-+ m2_PyBuffer_Release(blob, &buf);
- return obj;
- }
- %}
---
-2.4.1
-
diff --git a/dev-python/m2crypto/files/0.21.1-0003-Use-swig-generated-python-loader.patch b/dev-python/m2crypto/files/0.21.1-0003-Use-swig-generated-python-loader.patch
deleted file mode 100644
index 95d183daabfe..000000000000
--- a/dev-python/m2crypto/files/0.21.1-0003-Use-swig-generated-python-loader.patch
+++ /dev/null
@@ -1,165 +0,0 @@
-From a0b19d256e834b77fc414b162bc86eabb06d516c Mon Sep 17 00:00:00 2001
-From: Joe Julian <jjulian@io.com>
-Date: Tue, 19 May 2015 23:54:08 -0700
-Subject: [PATCH 3/3] Use swig generated python loader
-
----
- M2Crypto/__init__.py | 4 ++--
- M2Crypto/m2.py | 4 +---
- SWIG/Makefile | 4 ++--
- SWIG/_m2crypto.def | 2 +-
- SWIG/_m2crypto.i | 2 +-
- pack.py | 4 ++--
- setup.py | 28 +++++++++++++++++++++++-----
- 7 files changed, 32 insertions(+), 16 deletions(-)
-
-diff --git a/M2Crypto/__init__.py b/M2Crypto/__init__.py
-index e7acfe7..84d90e3 100644
---- a/M2Crypto/__init__.py
-+++ b/M2Crypto/__init__.py
-@@ -19,7 +19,7 @@ Copyright 2008-2011 Heikki Toivonen. All rights reserved.
- version_info = (0, 21, 1)
- version = '.'.join([str(_v) for _v in version_info])
-
--import __m2crypto
-+import m2crypto
- import m2
- import ASN1
- import AuthCookie
-@@ -57,4 +57,4 @@ import util
- encrypt=1
- decrypt=0
-
--__m2crypto.lib_init()
-+m2crypto.lib_init()
-diff --git a/M2Crypto/m2.py b/M2Crypto/m2.py
-index e4bb695..516cadb 100644
---- a/M2Crypto/m2.py
-+++ b/M2Crypto/m2.py
-@@ -25,7 +25,5 @@ Portions created by Open Source Applications Foundation (OSAF) are
- Copyright (C) 2004 OSAF. All Rights Reserved.
- """
-
--from __m2crypto import *
-+from m2crypto import *
- lib_init()
--
--
-diff --git a/SWIG/Makefile b/SWIG/Makefile
-index 505b940..a840955 100644
---- a/SWIG/Makefile
-+++ b/SWIG/Makefile
-@@ -17,8 +17,8 @@ all: _m2crypto
- _m2crypto: _m2crypto.i
- swig -python -shadow _m2crypto.i
- cc -c -fpic $(CFLAGS) $(INCLUDE) $(PYINCLUDE) _m2crypto_wrap.c
-- ld -Bshareable -o __m2crypto.so _m2crypto_wrap.o $(LIBS)
-- cp _m2crypto.py __m2crypto.so ../M2Crypto
-+ ld -Bshareable -o _m2crypto.so _m2crypto_wrap.o $(LIBS)
-+ cp m2crypto.py _m2crypto.so ../M2Crypto
-
- clean:
- rm -f *_wrap* *.o *.so _*.py *.pyc
-diff --git a/SWIG/_m2crypto.def b/SWIG/_m2crypto.def
-index 753db2c..3e9d5bc 100644
---- a/SWIG/_m2crypto.def
-+++ b/SWIG/_m2crypto.def
-@@ -1,2 +1,2 @@
- EXPORTS
--init__m2crypto
-+init_m2crypto
-diff --git a/SWIG/_m2crypto.i b/SWIG/_m2crypto.i
-index 3d779a1..f236536 100644
---- a/SWIG/_m2crypto.i
-+++ b/SWIG/_m2crypto.i
-@@ -8,7 +8,7 @@
- *
- */
-
--%module(threads=1) _m2crypto
-+%module(threads=1) m2crypto
- /* We really don't need threadblock (PyGILState_Ensure() etc.) anywhere.
- Disable threadallow as well, only enable it for operations likely to
- block. */
-diff --git a/pack.py b/pack.py
-index 0005026..14b4961 100644
---- a/pack.py
-+++ b/pack.py
-@@ -17,9 +17,9 @@ if __name__ == "__main__":
- os.path.walk(start, zap, "/*.pyc")
-
- if os.name == 'nt':
-- zap_m2 = ("__m2cryptoc.pyd","_m2crypto.py")
-+ zap_m2 = ("_m2cryptoc.pyd","m2crypto.py")
- elif os.name == 'posix':
-- zap_m2 = ("__m2crypto.so","_m2crypto.py")
-+ zap_m2 = ("_m2crypto.so","m2crypto.py")
- for x in zap_m2:
- try:
- os.remove("%s/M2Crypto/%s" % (start, x))
-diff --git a/setup.py b/setup.py
-index e7c49eb..0967216 100644
---- a/setup.py
-+++ b/setup.py
-@@ -19,8 +19,21 @@ except ImportError:
- from distutils.core import setup
- from distutils.command import build_ext
-
-+from distutils.util import get_platform
- from distutils.core import Extension
-
-+from distutils.command.build import build
-+from setuptools.command.install import install
-+
-+class CustomBuild(build):
-+ def run(self):
-+ self.run_command('build_ext')
-+ build.run(self)
-+
-+class CustomInstall(install):
-+ def run(self):
-+ self.run_command('build_ext')
-+ self.do_egg_install()
-
- class _M2CryptoBuildExt(build_ext.build_ext):
- '''Specialization of build_ext to enable swig_opts to inherit any
-@@ -49,12 +62,17 @@ class _M2CryptoBuildExt(build_ext.build_ext):
-
- build_ext.build_ext.finalize_options(self)
-
-- opensslIncludeDir = os.path.join(self.openssl, 'include')
-+ includeDir = os.path.join(self.openssl, 'include')
-+ opensslIncludeDir = os.path.join(self.openssl, 'include', 'openssl')
- opensslLibraryDir = os.path.join(self.openssl, 'lib')
-
- self.swig_opts = ['-I%s' % i for i in self.include_dirs + \
-- [opensslIncludeDir]]
-- self.swig_opts.append('-includeall')
-+ [opensslIncludeDir, includeDir]]
-+ if get_platform() == 'linux-x86_64':
-+ self.swig_opts.append('-D__x86_64__')
-+ self.swig_opts.append('-outdir')
-+ self.swig_opts.append(os.path.join(os.getcwd(),'M2Crypto'))
-+ #self.swig_opts.append('-includeall')
- #self.swig_opts.append('-D__i386__') # Uncomment for early OpenSSL 0.9.7 versions, or on Fedora Core if build fails
- #self.swig_opts.append('-DOPENSSL_NO_EC') # Try uncommenting if you can't build with EC disabled
-
-@@ -127,7 +145,7 @@ if sys.version_info < (2,4):
- build_ext.build_ext.swig_sources = swig_sources
-
-
--m2crypto = Extension(name = 'M2Crypto.__m2crypto',
-+m2crypto = Extension(name = 'M2Crypto._m2crypto',
- sources = ['SWIG/_m2crypto.i'],
- extra_compile_args = ['-DTHREADING'],
- #extra_link_args = ['-Wl,-search_paths_first'], # Uncomment to build Universal Mac binaries
-@@ -164,5 +182,5 @@ used to provide SSL for Twisted.''',
-
- ext_modules = [m2crypto],
- test_suite='tests.alltests.suite',
-- cmdclass = {'build_ext': _M2CryptoBuildExt}
-+ cmdclass = {'build': CustomBuild, 'install': CustomInstall, 'build_ext': _M2CryptoBuildExt}
- )
---
-2.4.1
-