cffi's architecture unfortunately imposes some limitations on support for
memoryviews (specifically, no support for them with bytes/bytearray) when
passing data. You can get some information about the challenges from these
pages:
* https://bitbucket.org/cffi/cffi/issues/47/creating-a-cdata-from-a-buffer
*
https://bitbucket.org/cffi/cffi/issues/65/support-memoryview-to-char-conversion
Here's an example of how we currently encrypt/decrypt in the OpenSSL backend:
def update(self, data):
<snip>
buf = self._backend._ffi.new("unsigned char[]",
len(data) + self._block_size - 1)
outlen = self._backend._ffi.new("int *")
res = self._backend._lib.EVP_CipherUpdate(self._ctx, buf, outlen, data,
len(data))
self._backend.openssl_assert(res != 0)
return self._backend._ffi.buffer(buf)[:outlen[0]]
There are a few potential wins that are available here (see:
https://github.com/pyca/cryptography/pull/2163#issuecomment-123878138 and the
resulting branch
https://github.com/reaperhulk/cryptography/blob/cipher-optimizations-that-are-probably-a-bad-idea/src/cryptography/hazmat/backends/openssl/ciphers.py#L118),
but without support for bytearray/bytes in memoryviews it's unclear to me how
we can improve above and beyond what's in that branch. If you have some ideas
we'd be happy to hear them!
-Paul Kehrer (reaperhulk)
On December 13, 2015 at 9:56:09 AM, Jesus Cea ([email protected]) wrote:
When calling Cryptography with a memoryview I get this error:
"""
TypeError: initializer for ctype 'unsigned char *' must be a cdata
pointer, not memoryview
"""
Memory view are useful to avoid copies, eating memory and CPU for no reason.
In my personal situation, I have 4 MB blocks, each divided in 16 pieces
of 256Kbytes independently encrypted. I must extract those 256Kbytes
fragments to call cryptography, instead of just passing a memory view
with the appropriate slice.
A secondary request would be to provide a different option for output,
for the same reason: provide a target for output: a bytearray/writable
memory view, or a file-like object. For the same reason: avoiding copies
and ease concatenation.
Hope you find these suggestions useful.
--
Jesús Cea Avión _/_/ _/_/_/ _/_/_/
[email protected] - http://www.jcea.es/ _/_/ _/_/ _/_/ _/_/ _/_/
Twitter: @jcea _/_/ _/_/ _/_/_/_/_/
jabber / xmpp:[email protected] _/_/ _/_/ _/_/ _/_/ _/_/
"Things are not so easy" _/_/ _/_/ _/_/ _/_/ _/_/ _/_/
"My name is Dump, Core Dump" _/_/_/ _/_/_/ _/_/ _/_/
"El amor es poner tu felicidad en la felicidad de otro" - Leibniz
_______________________________________________
Cryptography-dev mailing list
[email protected]
https://mail.python.org/mailman/listinfo/cryptography-dev
_______________________________________________
Cryptography-dev mailing list
[email protected]
https://mail.python.org/mailman/listinfo/cryptography-dev