[REBOL] Re: is this a xor bug?
From: carl:cybercraft at: 14-Sep-2002 9:46
On 14-Sep-02, Francesco De Napoli wrote:
> Hello,
> two week ago, I had developed a little tools to do Vernam's
> encoding/decoding. It is a cryptographic algorythm based on XOR.
> I had tested it for long time on my Rebol/View 1.2.1.3.1 (Windows)
> and it works fine! Today I had used it on my Rebol/View 1.2.1.1.1
> (AmigaOS) and it don't work any more!
> I had discovered that Rebol's XOR function behaves very different
> under AmigaOS, Windows 9x, and WinUAE/JIT:
> Amiga (1.2.1.1.1):
> c: xor to-binary "cane" to-binary "casa"
> == #{04001A1C}
> to-string xor c to-binary "casa"
> == "}w^F^]"
> Window (1.2.1.3.1):
> c: xor to-binary "cane" to-binary "casa"
> == #{00001D04}
> to-string xor c to-binary "casa"
> == "cane"
> WinUAE/JIT (1.2.1.1.1):
> c: xor to-binary "cane" to-binary "casa"
> == #{04000000}
> to-string xor c to-binary "casa"
> == "a^@20"
> It seems to me a bug of 1.2.1.1.1. How do I workaround fastly and
> cleanly?
Hi Francesco,
Yes, it does seem to be a bug in the Amiga versions of REBOL. And
with all the logic functions when combined with binary I suspect.
This from View...
>> xor #{0000} #{0000}
== #{2036}
>> xor #{0000} #{0000}
== #{6033}
>> xor #{0000} #{0000}
== #{6033}
>> xor #{0000} #{0000}
== #{2033}
>> xor #{0000} #{0000}
== #{2033}
>> xor #{0000} #{0000}
== #{E033}
>> xor #{0000} #{0000}
== #{E033}
>> xor #{0000} #{0000}
== #{2033}
>> 2#{00000000} xor 2#{00000000}
== #{60}
>> 2#{00000000} xor 2#{00000000}
== #{60}
>> 2#{00000000} xor 2#{00000000}
== #{20}
>> 2#{00000000} xor 2#{00000000}
== #{20}
>> 2#{00000000} xor 2#{00000000}
== #{E0}
>> #{0000} xor #{0000}
== #{E04C}
>> #{0000} xor #{0000}
== #{2034}
>> #{0000} xor #{0000}
== #{E033}
>> #{0000} xor #{0000}
== #{E033}
>> #{0000} and #{0000}
== #{9400}
>> #{0000} and #{0000}
== #{0400}
>> #{0000} and #{0000}
== #{9400}
>> #{0000} and #{0000}
== #{0400}
>> #{0000} and #{0000}
== #{1400}
>> #{0000} and #{0000}
== #{0400}
>> about
REBOL/View 1.2.1.1.1 21-Jun-2001
Very odd that the results are sort of random...
A possible solution would be to loop through your strings XORing them
at the char level, as that seems to give the right answer...
>> b: xor #"a" #"z"
== #"^["
>> xor b #"z"
== #"a"
HTH.
--
Carl Read