XOR oriented cryptographic ciphers and utilities.

Introduced classes

abstract class Cipher

crypto :: Cipher

Base class to modelize cryptographic ciphers
class RepeatingKeyXorCipher

crypto :: RepeatingKeyXorCipher

XOR cipher where the key is repeated to match the length of the message.
class SingleByteXorCipher

crypto :: SingleByteXorCipher

Simple XOR cipher where the whole plaintext is XORed with a single byte.

Redefined classes

redef class Bytes

crypto :: xor_ciphers $ Bytes

A buffer containing Byte-manipulation facilities
redef extern class CString

crypto :: xor_ciphers $ CString

C string char *

All class definitions

redef class Bytes

crypto :: xor_ciphers $ Bytes

A buffer containing Byte-manipulation facilities
redef extern class CString

crypto :: xor_ciphers $ CString

C string char *
abstract class Cipher

crypto $ Cipher

Base class to modelize cryptographic ciphers
class RepeatingKeyXorCipher

crypto $ RepeatingKeyXorCipher

XOR cipher where the key is repeated to match the length of the message.
class SingleByteXorCipher

crypto $ SingleByteXorCipher

Simple XOR cipher where the whole plaintext is XORed with a single byte.
package_diagram crypto::xor_ciphers xor_ciphers core core crypto::xor_ciphers->core crypto::crypto crypto crypto::crypto->crypto::xor_ciphers crapto::xor xor crapto::xor->crypto::crypto websocket::websocket websocket websocket::websocket->crypto::crypto crapto::xor... ... crapto::xor...->crapto::xor websocket::websocket... ... websocket::websocket...->websocket::websocket

Ancestors

module abstract_collection

core :: abstract_collection

Abstract collection classes and services.
module abstract_text

core :: abstract_text

Abstract class for manipulation of sequences of characters
module array

core :: array

This module introduces the standard array structure.
module bitset

core :: bitset

Services to handle BitSet
module bytes

core :: bytes

Services for byte streams and arrays
module circular_array

core :: circular_array

Efficient data structure to access both end of the sequence.
module codec_base

core :: codec_base

Base for codecs to use with streams
module codecs

core :: codecs

Group module for all codec-related manipulations
module collection

core :: collection

This module define several collection classes.
module environ

core :: environ

Access to the environment variables of the process
module error

core :: error

Standard error-management infrastructure.
module exec

core :: exec

Invocation and management of operating system sub-processes.
module file

core :: file

File manipulations (create, read, write, etc.)
module fixed_ints

core :: fixed_ints

Basic integers of fixed-precision
module fixed_ints_text

core :: fixed_ints_text

Text services to complement fixed_ints
module flat

core :: flat

All the array-based text representations
module gc

core :: gc

Access to the Nit internal garbage collection mechanism
module hash_collection

core :: hash_collection

Introduce HashMap and HashSet.
module iso8859_1

core :: iso8859_1

Codec for ISO8859-1 I/O
module kernel

core :: kernel

Most basic classes and methods.
module list

core :: list

This module handle double linked lists
module math

core :: math

Mathematical operations
module native

core :: native

Native structures for text and bytes
module numeric

core :: numeric

Advanced services for Numeric types
module protocol

core :: protocol

module queue

core :: queue

Queuing data structures and wrappers
module range

core :: range

Module for range of discrete objects.
module re

core :: re

Regular expression support for all services based on Pattern
module ropes

core :: ropes

Tree-based representation of a String.
module sorter

core :: sorter

This module contains classes used to compare things and sorts arrays.
module stream

core :: stream

Input and output streams of characters
module text

core :: text

All the classes and methods related to the manipulation of text entities
module time

core :: time

Management of time and dates
module union_find

core :: union_find

union–find algorithm using an efficient disjoint-set data structure
module utf8

core :: utf8

Codec for UTF-8 I/O

Parents

module core

core :: core

Standard classes and methods used by default by Nit programs and libraries.

Children

module crypto

crypto :: crypto

Mix of all things cryptography-related

Descendants

module a_star-m

a_star-m

module crapto

crapto :: crapto

Cryptographic attacks and utilities.
module websocket

websocket :: websocket

Adds support for a websocket connection in Nit
module websocket_server

websocket :: websocket_server

Sample module for a minimal chat server using Websockets on port 8088
module xor

crapto :: xor

Cryptographic attacks and utilities for XOR-based algorithms.
# 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

redef class CString
	# In-place XOR `self` with `key`
	fun xor(key: CString, len: Int, key_length: Int, key_offset: nullable Int) do
		if key_offset == null then key_offset = 0

		var key_pos = key_offset % key_length

		for i in [0 .. len[ do
			self[i] = key[key_pos] ^ self[i]
			key_pos += 1
			if key_pos >= key_length then key_pos = 0
		end
	end
end

# Base class to modelize cryptographic ciphers
abstract class Cipher

	# Encrypted data
	var ciphertext = new Bytes.empty is writable

	# Unencrypted data
	var plaintext = new Bytes.empty is writable

	# Encrypt plaintext and populate `self.ciphertext`
	fun encrypt is abstract

	# Decrypt ciphertext and populate `self.plaintext`
	fun decrypt is abstract

end

# Simple XOR cipher where the whole plaintext is XORed with a single byte.
class SingleByteXorCipher
	super Cipher

	# Cryptographic key used in encryption and decryption.
	var key: Int = 0

	redef fun encrypt do
		var key_bytes = new Bytes.with_capacity(1)
		key_bytes.add(key)
		ciphertext = plaintext.xorcipher(key_bytes)
	end

	redef fun decrypt do
		var key_bytes = new Bytes.with_capacity(1)
		key_bytes.add(key)
		plaintext = ciphertext.xorcipher(key_bytes)
	end
end

# XOR cipher where the key is repeated to match the length of the message.
class RepeatingKeyXorCipher
	super Cipher

	# Cryptographic key used in encryption and decryption.
	var key = new Bytes.empty

	redef fun encrypt do
		assert key.length > 0
		ciphertext = plaintext.xorcipher(key)
	end

	redef fun decrypt do
		assert key.length > 0
		plaintext = ciphertext.xorcipher(key)
	end
end
lib/crypto/xor_ciphers.nit:15,1--103,3