Re: [Python-Dev] bitwise operations for bytes and bytearray
A little update, I got ^, &, and | working for bytearrays. You can view the diff here: https://github.com/python/cpython/compare/master...cowlicks:bitwise-bytes?expand=1 How does it look? Joe, is this how I should allocate the arrays? Am I freeing them properly? Am I checking the input enough? After some feedback, I'll probably add bitshifting and negation. Then work on bytes objects. Does this warrant a pep? On Fri, Jan 8, 2016 at 2:08 AM, Cameron Simpson wrote: > On 07Jan2016 16:12, Python-Dev wrote: > >> On Jan 7, 2016, at 15:57, Martin Panter wrote: >> >>> On 7 January 2016 at 22:26, Blake Griffith >>>> wrote: >>>> I'm interested in adding the functionality to do something like: >>>> >>>>> b'a' ^ b'b' >>>>>>> >>>>>> b'\x03' >>>> Instead of the good ol' TypeError. >>>> >>>> I think both bytes and bytearray should support all the bitwise >>>> operations. >>>> >>> >>> There is a bug open about adding this kind of functionality: >>> <https://bugs.python.org/issue19251>. >>> >> >> And it's in the needs patch stage, which makes it perfect for the OP: in >> addition to learning how to hack on builtin types, he can also learn the >> other parts of the dev process. (Even if the bug is eventually rejected, as >> seems likely given that it sat around for three years with no compelling >> use case and then Guido added a "very skeptical" comment.) >> > > The use case which springs immediately to my mind is cryptography. To > encrypt a stream symmetrically you can go: > > cleartext-bytes ^ cryptographicly-random-bytes-from-cipher > > so with this one could write: > > def crypted(byteses, crypto_source): >''' Accept an iterable source of bytes objects and a preprimed source > ofcrypto bytes, yield encrypted versions of the bytes objects. >''' >for bs in byteses: > cbs = crypto_source.next_bytes(len(bs)) > yield bs ^ cbs > > Cheers, > Cameron Simpson > ___ > Python-Dev mailing list > Python-Dev@python.org > https://mail.python.org/mailman/listinfo/python-dev > Unsubscribe: > https://mail.python.org/mailman/options/python-dev/blake.a.griffith%40gmail.com > ___ Python-Dev mailing list Python-Dev@python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com
Re: [Python-Dev] bitwise operations for bytes and bytearray
Thanks for the quick responses y'all. I have something compiling on my branch, which is enough for me tonight. I asked a question about this on stackoverflow a while ago, it wasn't very popular https://stackoverflow.com/questions/32658420/why-cant-you-xor-bytes-objects-in-python Someone there pointed out this feature was suggested on the mailing list a while back (2006) https://mail.python.org/pipermail/python-dev/2006-March/061980.html On Fri, Jan 8, 2016 at 1:12 AM, Andrew Barnert wrote: > On Jan 7, 2016, at 15:57, Martin Panter wrote: > > > >> On 7 January 2016 at 22:26, Blake Griffith > wrote: > >> I'm interested in adding the functionality to do something like: > >> > >>>>> b'a' ^ b'b' > >> b'\x03' > >> > >> > >> Instead of the good ol' TypeError. > >> > >> I think both bytes and bytearray should support all the bitwise > operations. > > > > There is a bug open about adding this kind of functionality: > > <https://bugs.python.org/issue19251>. > > And it's in the needs patch stage, which makes it perfect for the OP: in > addition to learning how to hack on builtin types, he can also learn the > other parts of the dev process. (Even if the bug is eventually rejected, as > seems likely given that it sat around for three years with no compelling > use case and then Guido added a "very skeptical" comment.) ___ Python-Dev mailing list Python-Dev@python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com
[Python-Dev] bitwise operations for bytes and bytearray
Hi! I'm interested in adding the functionality to do something like: >>> b'a' ^ b'b' b'\x03' Instead of the good ol' TypeError. I think both bytes and bytearray should support all the bitwise operations. I've never hacked on cpython before. I'm starting by just trying to add xor to bytearray. I have a ByteArray_Xor function that I think should do this here https://github.com/cowlicks/cpython/commit/d6dddb11cdb33032b39dcb9dfdaa7b10d4377b5f But I'm not sure how to hook this in to the rest of cypython. I tried adding it where bytearray_as_sequence is declared in this bytearrayobject.c file. But that gave me compiler warnings and broke things. So now that I have this ByteArray_Xor function, how do I make it be bytearray.__xor___? Thanks! Blake ___ Python-Dev mailing list Python-Dev@python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com