diff --git a/makefile b/makefile index 2b86155b..33b1d61c 100644 --- a/makefile +++ b/makefile @@ -207,6 +207,7 @@ stage6: $(VOCSTATIC) -sP ulmSysConversions.Mod $(VOCSTATIC) -sP ulmSysStat.Mod $(VOCSTATIC) -sP ulmCiphers.Mod + $(VOCSTATIC) -sP ulmCipherOps.Mod #pow32 libs diff --git a/makefile.gnuc.armv6j b/makefile.gnuc.armv6j index d5373020..5d25fbbb 100644 --- a/makefile.gnuc.armv6j +++ b/makefile.gnuc.armv6j @@ -206,6 +206,7 @@ stage6: $(VOCSTATIC) -sP ulmSysConversions.Mod $(VOCSTATIC) -sP ulmSysStat.Mod $(VOCSTATIC) -sP ulmCiphers.Mod + $(VOCSTATIC) -sP ulmCipherOps.Mod #pow32 libs diff --git a/makefile.gnuc.armv6j_hardfp b/makefile.gnuc.armv6j_hardfp index 95e16fdd..682dcf5b 100644 --- a/makefile.gnuc.armv6j_hardfp +++ b/makefile.gnuc.armv6j_hardfp @@ -206,6 +206,7 @@ stage6: $(VOCSTATIC) -sP ulmSysConversions.Mod $(VOCSTATIC) -sP ulmSysStat.Mod $(VOCSTATIC) -sP ulmCiphers.Mod + $(VOCSTATIC) -sP ulmCipherOps.Mod #pow32 libs diff --git a/makefile.gnuc.armv7a_hardfp b/makefile.gnuc.armv7a_hardfp index 645f394c..d95f3474 100644 --- a/makefile.gnuc.armv7a_hardfp +++ b/makefile.gnuc.armv7a_hardfp @@ -206,6 +206,7 @@ stage6: $(VOCSTATIC) -sP ulmSysConversions.Mod $(VOCSTATIC) -sP ulmSysStat.Mod $(VOCSTATIC) -sP ulmCiphers.Mod + $(VOCSTATIC) -sP ulmCipherOps.Mod #pow32 libs diff --git a/makefile.gnuc.powerpc b/makefile.gnuc.powerpc index 47c17fdd..d0a03fd4 100644 --- a/makefile.gnuc.powerpc +++ b/makefile.gnuc.powerpc @@ -206,6 +206,7 @@ stage6: $(VOCSTATIC) -sP ulmSysConversions.Mod $(VOCSTATIC) -sP ulmSysStat.Mod $(VOCSTATIC) -sP ulmCiphers.Mod + $(VOCSTATIC) -sP ulmCipherOps.Mod #pow32 libs diff --git a/makefile.gnuc.x86 b/makefile.gnuc.x86 index 0ac63bb1..963479e9 100644 --- a/makefile.gnuc.x86 +++ b/makefile.gnuc.x86 @@ -206,6 +206,7 @@ stage6: $(VOCSTATIC) -sP ulmSysConversions.Mod $(VOCSTATIC) -sP ulmSysStat.Mod $(VOCSTATIC) -sP ulmCiphers.Mod + $(VOCSTATIC) -sP ulmCipherOps.Mod #pow32 libs diff --git a/makefile.gnuc.x86_64 b/makefile.gnuc.x86_64 index aa3261cb..8c36d47c 100644 --- a/makefile.gnuc.x86_64 +++ b/makefile.gnuc.x86_64 @@ -206,6 +206,7 @@ stage6: $(VOCSTATIC) -sP ulmSysConversions.Mod $(VOCSTATIC) -sP ulmSysStat.Mod $(VOCSTATIC) -sP ulmCiphers.Mod + $(VOCSTATIC) -sP ulmCipherOps.Mod #pow32 libs diff --git a/src/lib/ulm/ulmCipherOps.Mod b/src/lib/ulm/ulmCipherOps.Mod new file mode 100644 index 00000000..cf3318a7 --- /dev/null +++ b/src/lib/ulm/ulmCipherOps.Mod @@ -0,0 +1,67 @@ +(* Ulm's Oberon Library + Copyright (C) 1989-1997 by University of Ulm, SAI, D-89069 Ulm, Germany + ---------------------------------------------------------------------------- + Ulm's Oberon Library is free software; you can redistribute it + and/or modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either version + 2 of the License, or (at your option) any later version. + + Ulm's Oberon Library is distributed in the hope that it will be + useful, but WITHOUT ANY WARRANTY; without even the implied warranty + of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + ---------------------------------------------------------------------------- + E-mail contact: oberon@mathematik.uni-ulm.de + ---------------------------------------------------------------------------- + $Id: CipherOps.om,v 1.1 1997/04/02 11:53:20 borchert Exp borchert $ + ---------------------------------------------------------------------------- + $Log: CipherOps.om,v $ + Revision 1.1 1997/04/02 11:53:20 borchert + Initial revision + + ---------------------------------------------------------------------------- +*) + +MODULE ulmCipherOps; (* Michael Szczuka *) + + (* useful functions for stream ciphers *) + + IMPORT Streams := ulmStreams, SYS := SYSTEM, Write := ulmWrite; + + PROCEDURE XorByte* (b1, b2: SYS.BYTE) : SYS.BYTE; + (* adds two bytes bitwise modulo 2 *) + BEGIN + RETURN SYS.VAL(SYS.BYTE, SYS.VAL(SET, b1) / SYS.VAL(SET, b2)) + END XorByte; + + PROCEDURE XorStream* (in1, in2, out: Streams.Stream; + length: INTEGER) : BOOLEAN; + (* adds two streams bitwise modulo 2; restricted to length bytes *) + VAR + b1, b2, res : SYS.BYTE; + wholeStream : BOOLEAN; + BEGIN + IF length < 0 THEN + wholeStream := TRUE; + ELSE + wholeStream := FALSE; + END; + WHILE wholeStream OR (length > 0) DO + IF Streams.ReadByte(in1, b1) & Streams.ReadByte(in2, b2) THEN + res := XorByte(b1, b2); + IF ~Streams.WriteByte(out, res) THEN + RETURN FALSE + END; + ELSE + RETURN wholeStream + END; + DEC(length); + END; + RETURN TRUE + END XorStream; + +END ulmCipherOps.