Login   Register  
PHP Classes
elePHPant
Icontem

File: core/Enigma.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of david kargl  >  Enigma  >  core/Enigma.php  >  Download  
File: core/Enigma.php
Role: Configuration script
Content type: text/plain
Description: Defines, includes and some data
Class: Enigma
Encrypt and decrypt data emulating Enigma machine
Author: By
Last change: removed documentation, moved to seperate file
Date: 2007-11-18 15:02
Size: 6,889 bytes
 

Contents

Class file image Download
<?
/**
 * @author David Kargl <davidkargl@yahoo.de>
 * @copyright Copyright (c) 2007, David Kargl
 * @version 1.0
 * @package Enigma
 */

/**
 * Wehrmacht/Luftwaffe (3-rotor model)
 */
define("ENIGMA_MODEL_WMLW"0);
/**
 * Kriegsmarine M3 (3-rotor model)
 */
define("ENIGMA_MODEL_KMM3"1);
/**
 * Kriegsmarine M4 (4-rotor model)
 */
define("ENIGMA_MODEL_KMM4"2);


/**
 * ID Rotorposition 1
 */
define("ENIGMA_ROTOR_1",     0);
/**
 * ID Rotorposition 2
 */
define("ENIGMA_ROTOR_2",     1);
/**
 * ID Rotorposition 3
 */
define("ENIGMA_ROTOR_3",     2);
/**
 * ID Rotorposition 4
 * only available in model Kriegsmarine M4, also call 'Greek rotor'
 * this rotor never turns
 */
define("ENIGMA_ROTOR_GREEK"3);


/**
 * ID Rotor I
 */
define("ENIGMA_ROTOR_I",     0);
/**
 * ID Rotor II
 */
define("ENIGMA_ROTOR_II",    1);
/**
 * ID Rotor III
 */
define("ENIGMA_ROTOR_III",   2);
/**
 * ID Rotor IV
 */
define("ENIGMA_ROTOR_IV",    3);
/**
 * ID Rotor V
 */
define("ENIGMA_ROTOR_V",     4);
/**
 * ID Rotor VI
 * only available in model Kriegsmarine M3 and M4
 */
define("ENIGMA_ROTOR_VI",    5);
/**
 * ID Rotor VII
 * only available in model Kriegsmarine M3 and M4
 */
define("ENIGMA_ROTOR_VII",   6);
/**
 * ID Rotor VII
 * only available in model Kriegsmarine M3 and M4
 */
define("ENIGMA_ROTOR_VIII",   7);
/**
 * ID Rotor BETA
 * only available in model Kriegsmarine M4 as 'Greek rotor'
 */
define("ENIGMA_ROTOR_BETA",  8);
/**
 * ID Rotor GAMMA
 * only available in model Kriegsmarine M4 as 'Greek rotor'
 */
define("ENIGMA_ROTOR_GAMMA"9);


/**
 * ID Reflector B
 */
define("ENIGMA_REFLECTOR_B",     0);
/**
 * ID Reflector C
 */
define("ENIGMA_REFLECTOR_C",     1);
/**
 * ID Reflector B Thin
 * only available in model Kriegsmarine M4
 */
define("ENIGMA_REFLECTOR_BTHIN"2);
/**
 * ID Reflector C Tthin
 * only available in model Kriegsmarine M4
 */
define("ENIGMA_REFLECTOR_CTHIN"3);


define("ENIGMA_KEY_A"0);
define("ENIGMA_KEY_B"1);
define("ENIGMA_KEY_C"2);
define("ENIGMA_KEY_D"3);
define("ENIGMA_KEY_E"4);
define("ENIGMA_KEY_F"5);
define("ENIGMA_KEY_G"6);
define("ENIGMA_KEY_H"7);
define("ENIGMA_KEY_I"8);
define("ENIGMA_KEY_J"9);
define("ENIGMA_KEY_K"10);
define("ENIGMA_KEY_L"11);
define("ENIGMA_KEY_M"12);
define("ENIGMA_KEY_N"13);
define("ENIGMA_KEY_O"14);
define("ENIGMA_KEY_P"15);
define("ENIGMA_KEY_Q"16);
define("ENIGMA_KEY_R"17);
define("ENIGMA_KEY_S"18);
define("ENIGMA_KEY_T"19);
define("ENIGMA_KEY_U"20);
define("ENIGMA_KEY_V"21);
define("ENIGMA_KEY_W"22);
define("ENIGMA_KEY_X"23);
define("ENIGMA_KEY_Y"24);
define("ENIGMA_KEY_Z"25);

/**
 * encoding table
 * eg.: ENIGMA_KEY_A=>"A", ENIGMA_KEY_B=>"B", ...
 * @global array $ENIGMA_ALPHABET
 */
$ENIGMA_ALPHABET = array(
ENIGMA_KEY_A=>"A"ENIGMA_KEY_B=>"B"ENIGMA_KEY_C=>"C"ENIGMA_KEY_D=>"D"ENIGMA_KEY_E=>"E",
ENIGMA_KEY_F=>"F"ENIGMA_KEY_G=>"G"ENIGMA_KEY_H=>"H"ENIGMA_KEY_I=>"I"ENIGMA_KEY_J=>"J",
ENIGMA_KEY_K=>"K"ENIGMA_KEY_L=>"L"ENIGMA_KEY_M=>"M"ENIGMA_KEY_N=>"N"ENIGMA_KEY_O=>"O",
ENIGMA_KEY_P=>"P"ENIGMA_KEY_Q=>"Q"ENIGMA_KEY_R=>"R"ENIGMA_KEY_S=>"S"ENIGMA_KEY_T=>"T",
ENIGMA_KEY_U=>"U"ENIGMA_KEY_V=>"V"ENIGMA_KEY_W=>"W"ENIGMA_KEY_X=>"X"ENIGMA_KEY_Y=>"Y",
ENIGMA_KEY_Z=>"Z"
);

/**
 * Size of the Enigma alphabet
 */
define("ENIGMA_ALPHABET_SIZE"sizeof($ENIGMA_ALPHABET));


/**
 * stores the setup for all available rotors
 * fields are
 * key: ID of the rotor
 * wiring: the setup for the wiring of a rotor
 * used: IDs of models, this rotos can be used in
 * notches: the turnover positions of a rotor
 * @global array $ENIGMA_ROTORS
 */
$ENIGMA_ROTORS = array(
array(
"key"=>ENIGMA_ROTOR_I,     "wiring"=>"EKMFLGDQVZNTOWYHXUSPAIBRCJ""used"=>array(ENIGMA_WMENIGMA_KM_M3ENIGMA_KM_M4), "notches"=>array(ENIGMA_KEY_Q)),
array(
"key"=>ENIGMA_ROTOR_II,    "wiring"=>"AJDKSIRUXBLHWTMCQGZNPYFVOE""used"=>array(ENIGMA_WMENIGMA_KM_M3ENIGMA_KM_M4), "notches"=>array(ENIGMA_KEY_E)),
array(
"key"=>ENIGMA_ROTOR_III,   "wiring"=>"BDFHJLCPRTXVZNYEIWGAKMUSQO""used"=>array(ENIGMA_WMENIGMA_KM_M3ENIGMA_KM_M4), "notches"=>array(ENIGMA_KEY_V)),
array(
"key"=>ENIGMA_ROTOR_IV,    "wiring"=>"ESOVPZJAYQUIRHXLNFTGKDCMWB""used"=>array(ENIGMA_WMENIGMA_KM_M3ENIGMA_KM_M4), "notches"=>array(ENIGMA_KEY_J)),
array(
"key"=>ENIGMA_ROTOR_V,     "wiring"=>"VZBRGITYUPSDNHLXAWMJQOFECK""used"=>array(ENIGMA_WMENIGMA_KM_M3ENIGMA_KM_M4), "notches"=>array(ENIGMA_KEY_Z)),
array(
"key"=>ENIGMA_ROTOR_VI,    "wiring"=>"JPGVOUMFYQBENHZRDKASXLICTW""used"=>array(ENIGMA_KM_M3ENIGMA_KM_M4), "notches"=>array(ENIGMA_KEY_MENIGMA_KEY_Z)),
array(
"key"=>ENIGMA_ROTOR_VII,   "wiring"=>"NZJHGRCXMYSWBOUFAIVLPEKQDT""used"=>array(ENIGMA_KM_M3ENIGMA_KM_M4), "notches"=>array(ENIGMA_KEY_MENIGMA_KEY_Z)),
array(
"key"=>ENIGMA_ROTOR_VIII,  "wiring"=>"FKQHTLXOCBJSPDZRAMEWNIUYGV""used"=>array(ENIGMA_KM_M3ENIGMA_KM_M4), "notches"=>array(ENIGMA_KEY_MENIGMA_KEY_Z)),
array(
"key"=>ENIGMA_ROTOR_BETA,  "wiring"=>"LEYJVCNIXWPBQMDRTAKZGFUHOS""used"=>array(ENIGMA_KM_M4), "notches"=>array()),
array(
"key"=>ENIGMA_ROTOR_GAMMA"wiring"=>"FSOKANUERHMBTIYCWLQPZXVGJD""used"=>array(ENIGMA_KM_M4), "notches"=>array()),
);


/**
 * stores the setup for all available reflectors
 * fields are
 * key: ID of the reflector
 * wiring: the setup for the wiring of a reflector
 * used: IDs of models, this rotos can be used in
 * @global array $ENIGMA_REFLECTORS
 */
$ENIGMA_REFLECTORS = array(
array(
"key"=>ENIGMA_REFLECTOR_B,     "wiring"=>"YRUHQSLDPXNGOKMIEBFZCWVJAT""used"=>array(ENIGMA_WMENIGMA_KM_M3)),
array(
"key"=>ENIGMA_REFLECTOR_C,     "wiring"=>"FVPJIAOYEDRZXWGCTKUQSBNMHL""used"=>array(ENIGMA_WMENIGMA_KM_M3)),
array(
"key"=>ENIGMA_REFLECTOR_BTHIN"wiring"=>"ENKQAUYWJICOPBLMDXZVFTHRGS""used"=>array(ENIGMA_KM_M4)),
array(
"key"=>ENIGMA_REFLECTOR_CTHIN"wiring"=>"RDOBJNTKVEHMLFCWZAXGYIPSUQ""used"=>array(ENIGMA_KM_M4))
);


/**
 * converts a character into its pendant in the Enigma alphabet
 * @param string character to convert
 * @return integer represention of a character in the Enigma alphabet
 * @uses $ENIGMA_ALPHABET
 */
function enigma_l2p($l) {
    global 
$ENIGMA_ALPHABET;
    return 
array_search(strtoupper($l), $ENIGMA_ALPHABET);
}


/**
 * converts an element of the Enigma alphabet to 'our' alphabet
 * @param integer element to be converted
 * @return string resulting character
 * @uses $ENIGMA_ALPHABET
 */
function enigma_p2l($p) {
    global 
$ENIGMA_ALPHABET;
    return 
$ENIGMA_ALPHABET[$p];
}

require_once(
"wiring.class.php");
require_once(
"plugboard.class.php");
require_once(
"reflector.class.php");
require_once(
"rotor.class.php");
require_once(
"enigma.class.php");

?>