From 9ebd12517af0d77bbfd58c1236c245e04b7902f8 Mon Sep 17 00:00:00 2001 From: Philippe Pepos Petitclerc Date: Sat, 14 May 2016 10:59:08 -0400 Subject: [PATCH] lib/crypto: Explode crypto.nit into package Basic ciphers and utils are in basic_ciphers.nit XOR-focused algorithms are in xor_ciphers.nit Signed-off-by: Philippe Pepos Petitclerc --- lib/{crypto.nit => crypto/basic_ciphers.nit} | 21 ++-------------- lib/crypto/crypto.nit | 19 +++++++++++++++ lib/{crypto.ini => crypto/package.ini} | 2 +- lib/crypto/xor_ciphers.nit | 33 ++++++++++++++++++++++++++ 4 files changed, 55 insertions(+), 20 deletions(-) rename lib/{crypto.nit => crypto/basic_ciphers.nit} (93%) create mode 100644 lib/crypto/crypto.nit rename lib/{crypto.ini => crypto/package.ini} (89%) create mode 100644 lib/crypto/xor_ciphers.nit diff --git a/lib/crypto.nit b/lib/crypto/basic_ciphers.nit similarity index 93% rename from lib/crypto.nit rename to lib/crypto/basic_ciphers.nit index 0b52c99..e4a133c 100644 --- a/lib/crypto.nit +++ b/lib/crypto/basic_ciphers.nit @@ -12,8 +12,8 @@ # See the License for the specific language governing permissions and # limitations under the License. -# Mix of all things cryptography-related -module crypto +# Basic cryptographic ciphers and utilities. +module basic_ciphers redef class Char # Rotates self of `x` @@ -157,22 +157,6 @@ redef class Text end redef class Bytes - - # Returns `self` xored with `key` - # - # The key is cycled through until the `self` has been completely xored. - # - # assert "goodmorning".to_bytes.xorcipher(" ".to_bytes) == "GOODMORNING".bytes - fun xorcipher(key: Bytes): Bytes do - var xored = new Bytes.with_capacity(self.length) - - for i in self.length.times do - xored.add(self[i] ^ key[i % key.length]) - end - - return xored - end - # Computes the edit/hamming distance of two sequences of bytes. # # assert "this is a test".to_bytes.hamming_distance("wokka wokka!!!".bytes) == 37 @@ -189,7 +173,6 @@ redef class Bytes end return diff end - end redef class Int diff --git a/lib/crypto/crypto.nit b/lib/crypto/crypto.nit new file mode 100644 index 0000000..4709403 --- /dev/null +++ b/lib/crypto/crypto.nit @@ -0,0 +1,19 @@ +# This file is part of NIT ( http://www.nitlanguage.org ). +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Mix of all things cryptography-related +module crypto + +import basic_ciphers +import xor_ciphers diff --git a/lib/crypto.ini b/lib/crypto/package.ini similarity index 89% rename from lib/crypto.ini rename to lib/crypto/package.ini index e8b4cf1..24f6b14 100644 --- a/lib/crypto.ini +++ b/lib/crypto/package.ini @@ -6,6 +6,6 @@ license=Apache-2.0 [upstream] browse=https://github.com/nitlang/nit/tree/master/lib/crypto.nit git=https://github.com/nitlang/nit.git -git.directory=lib/crypto.nit +git.directory=lib/crypto/crypto.nit homepage=http://nitlanguage.org issues=https://github.com/nitlang/nit/issues diff --git a/lib/crypto/xor_ciphers.nit b/lib/crypto/xor_ciphers.nit new file mode 100644 index 0000000..fefae4b --- /dev/null +++ b/lib/crypto/xor_ciphers.nit @@ -0,0 +1,33 @@ +# This file is part of NIT ( http://www.nitlanguage.org ). +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# XOR oriented cryptographic ciphers and utilities. +module xor_ciphers + +redef class Bytes + # Returns `self` xored with `key` + # + # The key is cycled through until the `self` has been completely xored. + # + # assert "goodmorning".to_bytes.xorcipher(" ".to_bytes) == "GOODMORNING".bytes + fun xorcipher(key: Bytes): Bytes do + var xored = new Bytes.with_capacity(self.length) + + for i in self.length.times do + xored.add(self[i] ^ key[i % key.length]) + end + + return xored + end +end -- 1.7.9.5