Difference between revisions of "Enigma/wheels.h"
From Teknologisk videncenter
< Enigma
m (New page: <Source lang=c> </source> Category:CCategory:ProgrammingCategory:CoE) |
m |
||
Line 1: | Line 1: | ||
<Source lang=c> | <Source lang=c> | ||
+ | /* Header file for enigma-like wheels | ||
+ | contact: heth@mercantec.dk | ||
+ | */ | ||
+ | #define WHEELS 5 | ||
+ | typedef unsigned char byte; | ||
+ | byte wheel[5][256] = { | ||
+ | /* Wheel 1 */ | ||
+ | {133, 208, 22, 138, 113, 243, 224, 134, 107, 59, 130, 245, 186, 76, 47, 185, | ||
+ | 89, 3, 142, 13, 200, 87, 26, 81, 72, 213, 171, 156, 23, 184, 90, 247, | ||
+ | 252, 225, 82, 40, 197, 31, 226, 63, 41, 216, 7, 108, 151, 149, 115, 158, | ||
+ | 255, 128, 178, 238, 62, 80, 46, 18, 140, 9, 21, 161, 164, 35, 187, 34, | ||
+ | 189, 194, 44, 205, 157, 101, 88, 234, 179, 118, 70, 207, 148, 233, 95, 99, | ||
+ | 56, 191, 109, 159, 204, 199, 27, 228, 153, 15, 17, 100, 188, 86, 170, 55, | ||
+ | 45, 51, 123, 93, 223, 42, 75, 33, 61, 114, 68, 5, 111, 231, 97, 112, | ||
+ | 121, 105, 136, 173, 66, 0, 202, 38, 78, 196, 103, 155, 251, 49, 182, 206, | ||
+ | 92, 54, 74, 60, 65, 193, 214, 227, 198, 212, 145, 240, 221, 192, 242, 219, | ||
+ | 150, 19, 131, 217, 147, 183, 154, 232, 4, 190, 236, 253, 239, 57, 24, 210, | ||
+ | 71, 249, 248, 20, 50, 175, 39, 139, 53, 152, 6, 67, 215, 85, 25, 32, | ||
+ | 129, 2, 73, 143, 246, 229, 116, 126, 30, 12, 58, 167, 250, 177, 28, 127, | ||
+ | 10, 209, 48, 11, 77, 52, 84, 172, 125, 122, 1, 181, 16, 91, 237, 117, | ||
+ | 79, 195, 8, 174, 64, 124, 36, 110, 220, 241, 141, 230, 203, 106, 168, 254, | ||
+ | 144, 120, 201, 43, 222, 96, 29, 166, 146, 162, 169, 137, 235, 69, 180, 37, | ||
+ | 218, 211, 163, 102, 165, 135, 244, 160, 132, 176, 98, 104, 94, 14, 119, 83}, | ||
+ | /* Wheel 2 */ | ||
+ | {196, 239, 107, 99, 179, 183, 201, 209, 0, 94, 77, 118, 231, 233, 74, 91, | ||
+ | 142, 147, 154, 139, 64, 59, 13, 86, 2, 114, 219, 152, 51, 38, 226, 40, | ||
+ | 83, 218, 39, 167, 50, 120, 14, 189, 184, 78, 24, 66, 159, 243, 48, 145, | ||
+ | 177, 17, 172, 35, 206, 113, 141, 241, 117, 9, 170, 97, 255, 87, 93, 238, | ||
+ | 181, 36, 247, 200, 158, 49, 197, 92, 166, 68, 18, 60, 212, 235, 101, 76, | ||
+ | 6, 137, 69, 230, 73, 173, 15, 205, 106, 81, 80, 85, 22, 191, 119, 90, | ||
+ | 204, 56, 61, 131, 248, 67, 217, 57, 216, 95, 224, 250, 227, 193, 156, 65, | ||
+ | 127, 47, 236, 71, 121, 122, 130, 150, 148, 123, 102, 211, 21, 136, 242, 144, | ||
+ | 254, 225, 12, 222, 214, 10, 125, 203, 215, 223, 53, 70, 34, 79, 23, 109, | ||
+ | 105, 110, 176, 5, 208, 165, 4, 220, 30, 162, 234, 103, 146, 116, 100, 195, | ||
+ | 174, 108, 187, 151, 163, 43, 160, 213, 41, 32, 11, 182, 129, 16, 135, 104, | ||
+ | 164, 149, 82, 54, 138, 96, 26, 175, 33, 1, 28, 19, 124, 188, 246, 202, | ||
+ | 161, 3, 75, 185, 88, 44, 128, 198, 52, 31, 58, 98, 228, 115, 143, 42, | ||
+ | 171, 27, 178, 237, 190, 25, 252, 155, 8, 126, 249, 37, 240, 244, 84, 186, | ||
+ | 140, 62, 180, 7, 229, 112, 253, 89, 153, 168, 20, 29, 133, 199, 192, 207, | ||
+ | 232, 157, 251, 63, 210, 55, 221, 46, 134, 111, 169, 72, 45, 245, 132, 194}, | ||
+ | /* Wheel 3 */ | ||
+ | {255, 171, 198, 192, 234, 128, 162, 187, 221, 53, 81, 4, 49, 114, 173, 219, | ||
+ | 19, 64, 66, 138, 16, 140, 84, 144, 34, 104, 179, 230, 228, 166, 12, 186, | ||
+ | 249, 92, 77, 242, 105, 7, 252, 148, 254, 169, 203, 80, 95, 161, 238, 110, | ||
+ | 215, 180, 207, 170, 86, 213, 201, 100, 218, 137, 236, 133, 131, 2, 141, 220, | ||
+ | 108, 117, 121, 184, 204, 223, 18, 132, 32, 210, 253, 214, 188, 30, 116, 209, | ||
+ | 125, 35, 26, 5, 51, 74, 135, 136, 59, 147, 149, 58, 42, 101, 172, 164, | ||
+ | 15, 217, 111, 245, 195, 247, 40, 72, 208, 130, 127, 38, 155, 88, 25, 175, | ||
+ | 85, 241, 70, 250, 79, 225, 23, 56, 118, 22, 106, 78, 69, 68, 33, 43, | ||
+ | 87, 55, 6, 44, 227, 89, 21, 139, 31, 205, 153, 96, 60, 206, 152, 211, | ||
+ | 3, 20, 160, 29, 10, 37, 52, 237, 103, 47, 239, 13, 122, 199, 194, 202, | ||
+ | 244, 226, 61, 229, 50, 14, 185, 39, 196, 0, 93, 119, 157, 167, 233, 197, | ||
+ | 76, 154, 181, 1, 83, 248, 82, 94, 54, 183, 11, 178, 120, 73, 36, 48, | ||
+ | 107, 97, 134, 243, 165, 232, 158, 63, 163, 67, 216, 90, 200, 191, 156, 46, | ||
+ | 17, 240, 9, 159, 102, 123, 71, 62, 222, 190, 177, 27, 124, 151, 113, 193, | ||
+ | 109, 189, 142, 231, 75, 8, 224, 28, 112, 146, 129, 65, 251, 145, 246, 91, | ||
+ | 98, 182, 45, 24, 41, 212, 143, 115, 174, 176, 168, 150, 126, 57, 235, 99}, | ||
+ | /* Wheel 4 */ | ||
+ | {115, 14, 139, 68, 144, 150, 223, 222, 77, 229, 165, 9, 157, 25, 117, 137, | ||
+ | 6, 208, 91, 191, 42, 16, 58, 45, 168, 75, 255, 60, 105, 182, 81, 221, | ||
+ | 201, 93, 155, 97, 22, 46, 184, 108, 190, 232, 230, 250, 159, 28, 161, 86, | ||
+ | 11, 18, 34, 125, 12, 236, 27, 253, 57, 197, 237, 180, 207, 50, 247, 249, | ||
+ | 102, 38, 7, 141, 216, 131, 36, 179, 37, 209, 246, 92, 89, 202, 3, 83, | ||
+ | 239, 243, 211, 220, 54, 173, 40, 71, 103, 110, 177, 128, 49, 129, 163, 109, | ||
+ | 120, 241, 252, 198, 53, 80, 32, 227, 248, 160, 135, 82, 140, 10, 145, 174, | ||
+ | 152, 72, 162, 56, 234, 194, 19, 106, 204, 130, 233, 107, 104, 112, 119, 225, | ||
+ | 210, 178, 148, 154, 240, 1, 84, 116, 66, 189, 63, 171, 181, 62, 43, 147, | ||
+ | 51, 126, 111, 21, 121, 142, 127, 122, 4, 101, 90, 134, 15, 245, 193, 231, | ||
+ | 94, 213, 153, 64, 195, 5, 242, 185, 33, 59, 235, 8, 123, 196, 226, 183, | ||
+ | 169, 44, 41, 20, 188, 124, 0, 133, 158, 192, 228, 251, 205, 65, 85, 224, | ||
+ | 2, 167, 170, 69, 17, 176, 199, 254, 113, 166, 23, 47, 206, 70, 217, 98, | ||
+ | 186, 212, 203, 156, 136, 151, 114, 238, 79, 48, 149, 96, 55, 74, 30, 67, | ||
+ | 73, 78, 99, 26, 29, 138, 200, 31, 39, 100, 164, 143, 95, 146, 52, 172, | ||
+ | 219, 132, 175, 218, 87, 118, 215, 24, 88, 214, 244, 61, 187, 35, 13, 76}, | ||
+ | /* Wheel 5 */ | ||
+ | {156, 199, 154, 221, 71, 105, 249, 223, 229, 83, 62, 252, 5, 155, 140, 23, | ||
+ | 206, 173, 99, 112, 134, 243, 32, 25, 102, 149, 212, 44, 164, 168, 182, 78, | ||
+ | 110, 185, 166, 143, 107, 27, 88, 12, 100, 69, 128, 247, 159, 125, 171, 87, | ||
+ | 227, 82, 123, 66, 202, 230, 7, 95, 135, 222, 51, 92, 70, 231, 239, 14, | ||
+ | 218, 127, 54, 193, 60, 68, 178, 160, 224, 9, 198, 179, 33, 207, 244, 31, | ||
+ | 84, 113, 158, 211, 174, 80, 203, 16, 255, 138, 130, 131, 67, 209, 36, 208, | ||
+ | 251, 122, 22, 233, 77, 48, 126, 63, 200, 145, 157, 219, 254, 115, 41, 108, | ||
+ | 10, 50, 106, 245, 2, 220, 0, 46, 91, 26, 37, 133, 85, 47, 176, 124, | ||
+ | 150, 117, 170, 141, 136, 3, 169, 121, 217, 8, 205, 137, 89, 188, 18, 162, | ||
+ | 1, 15, 81, 146, 104, 98, 147, 17, 242, 109, 234, 183, 250, 29, 72, 118, | ||
+ | 241, 184, 187, 42, 167, 152, 192, 210, 142, 165, 76, 186, 237, 132, 55, 6, | ||
+ | 161, 235, 75, 215, 61, 86, 4, 195, 57, 13, 52, 111, 11, 213, 175, 59, | ||
+ | 40, 103, 226, 101, 181, 190, 253, 194, 21, 116, 114, 246, 201, 53, 144, 34, | ||
+ | 73, 96, 35, 191, 232, 58, 94, 45, 153, 151, 20, 65, 148, 228, 204, 177, | ||
+ | 39, 216, 28, 236, 56, 30, 214, 139, 196, 197, 43, 129, 90, 119, 248, 74, | ||
+ | 189, 24, 163, 225, 172, 19, 49, 180, 93, 238, 120, 240, 79, 64, 38, 97} | ||
+ | }; | ||
+ | |||
+ | /* Notch array for wheels*/ | ||
+ | byte wheel_notch[5] = { | ||
+ | 184, 41, 3, 181, 194}; | ||
+ | |||
+ | byte rwheel[5][256] = { | ||
+ | /* Reverse wheel 1 */ | ||
+ | {117, 202, 177, 17, 152, 107, 170, 42, 210, 57, 192, 195, 185, 19, 253, 89, | ||
+ | 204, 90, 55, 145, 163, 58, 2, 28, 158, 174, 22, 86, 190, 230, 184, 37, | ||
+ | 175, 103, 63, 61, 214, 239, 119, 166, 35, 40, 101, 227, 66, 96, 54, 14, | ||
+ | 194, 125, 164, 97, 197, 168, 129, 95, 80, 157, 186, 9, 131, 104, 52, 39, | ||
+ | 212, 132, 116, 171, 106, 237, 74, 160, 24, 178, 130, 102, 13, 196, 120, 208, | ||
+ | 53, 23, 34, 255, 198, 173, 93, 21, 70, 16, 30, 205, 128, 99, 252, 78, | ||
+ | 229, 110, 250, 79, 91, 69, 243, 122, 251, 113, 221, 8, 43, 82, 215, 108, | ||
+ | 111, 4, 105, 46, 182, 207, 73, 254, 225, 112, 201, 98, 213, 200, 183, 191, | ||
+ | 49, 176, 10, 146, 248, 0, 7, 245, 114, 235, 3, 167, 56, 218, 18, 179, | ||
+ | 224, 138, 232, 148, 76, 45, 144, 44, 169, 88, 150, 123, 27, 68, 47, 83, | ||
+ | 247, 59, 233, 242, 60, 244, 231, 187, 222, 234, 94, 26, 199, 115, 211, 165, | ||
+ | 249, 189, 50, 72, 238, 203, 126, 149, 29, 15, 12, 62, 92, 64, 153, 81, | ||
+ | 141, 133, 65, 209, 121, 36, 136, 85, 20, 226, 118, 220, 84, 67, 127, 75, | ||
+ | 1, 193, 159, 241, 137, 25, 134, 172, 41, 147, 240, 143, 216, 140, 228, 100, | ||
+ | 6, 33, 38, 135, 87, 181, 219, 109, 151, 77, 71, 236, 154, 206, 51, 156, | ||
+ | 139, 217, 142, 5, 246, 11, 180, 31, 162, 161, 188, 124, 32, 155, 223, 48}, | ||
+ | /* Reverse wheel 2 */ | ||
+ | { 8, 185, 24, 193, 150, 147, 80, 227, 216, 57, 133, 170, 130, 22, 38, 86, | ||
+ | 173, 49, 74, 187, 234, 124, 92, 142, 42, 213, 182, 209, 186, 235, 152, 201, | ||
+ | 169, 184, 140, 51, 65, 219, 29, 34, 31, 168, 207, 165, 197, 252, 247, 113, | ||
+ | 46, 69, 36, 28, 200, 138, 179, 245, 97, 103, 202, 21, 75, 98, 225, 243, | ||
+ | 20, 111, 43, 101, 73, 82, 139, 115, 251, 84, 14, 194, 79, 10, 41, 141, | ||
+ | 90, 89, 178, 32, 222, 91, 23, 61, 196, 231, 95, 15, 71, 62, 9, 105, | ||
+ | 181, 59, 203, 3, 158, 78, 122, 155, 175, 144, 88, 2, 161, 143, 145, 249, | ||
+ | 229, 53, 25, 205, 157, 56, 11, 94, 37, 116, 117, 121, 188, 134, 217, 112, | ||
+ | 198, 172, 118, 99, 254, 236, 248, 174, 125, 81, 180, 19, 224, 54, 16, 206, | ||
+ | 127, 47, 156, 17, 120, 177, 119, 163, 27, 232, 18, 215, 110, 241, 68, 44, | ||
+ | 166, 192, 153, 164, 176, 149, 72, 35, 233, 250, 58, 208, 50, 85, 160, 183, | ||
+ | 146, 48, 210, 4, 226, 64, 171, 5, 40, 195, 223, 162, 189, 39, 212, 93, | ||
+ | 238, 109, 255, 159, 0, 70, 199, 237, 67, 6, 191, 135, 96, 87, 52, 239, | ||
+ | 148, 7, 244, 123, 76, 167, 132, 136, 104, 102, 33, 26, 151, 246, 131, 137, | ||
+ | 106, 129, 30, 108, 204, 228, 83, 12, 240, 13, 154, 77, 114, 211, 63, 1, | ||
+ | 220, 55, 126, 45, 221, 253, 190, 66, 100, 218, 107, 242, 214, 230, 128, 60}, | ||
+ | /* Reverse wheel 3 */ | ||
+ | {169, 179, 61, 144, 11, 83, 130, 37, 229, 210, 148, 186, 30, 155, 165, 96, | ||
+ | 20, 208, 70, 16, 145, 134, 121, 118, 243, 110, 82, 219, 231, 147, 77, 136, | ||
+ | 72, 126, 24, 81, 190, 149, 107, 167, 102, 244, 92, 127, 131, 242, 207, 153, | ||
+ | 191, 12, 164, 84, 150, 9, 184, 129, 119, 253, 91, 88, 140, 162, 215, 199, | ||
+ | 17, 235, 18, 201, 125, 124, 114, 214, 103, 189, 85, 228, 176, 34, 123, 116, | ||
+ | 43, 10, 182, 180, 22, 112, 52, 128, 109, 133, 203, 239, 33, 170, 183, 44, | ||
+ | 139, 193, 240, 255, 55, 93, 212, 152, 25, 36, 122, 192, 64, 224, 47, 98, | ||
+ | 232, 222, 13, 247, 78, 65, 120, 171, 188, 66, 156, 213, 220, 80, 252, 106, | ||
+ | 5, 234, 105, 60, 71, 59, 194, 86, 87, 57, 19, 135, 21, 62, 226, 246, | ||
+ | 23, 237, 233, 89, 39, 90, 251, 221, 142, 138, 177, 108, 206, 172, 198, 211, | ||
+ | 146, 45, 6, 200, 95, 196, 29, 173, 250, 41, 51, 1, 94, 14, 248, 111, | ||
+ | 249, 218, 187, 26, 49, 178, 241, 185, 67, 166, 31, 7, 76, 225, 217, 205, | ||
+ | 3, 223, 158, 100, 168, 175, 2, 157, 204, 54, 159, 42, 68, 137, 141, 50, | ||
+ | 104, 79, 73, 143, 245, 53, 75, 48, 202, 97, 56, 15, 63, 8, 216, 69, | ||
+ | 230, 117, 161, 132, 28, 163, 27, 227, 197, 174, 4, 254, 58, 151, 46, 154, | ||
+ | 209, 113, 35, 195, 160, 99, 238, 101, 181, 32, 115, 236, 38, 74, 40, 0}, | ||
+ | /* Reverse wheel 4 */ | ||
+ | {182, 133, 192, 78, 152, 165, 16, 66, 171, 11, 109, 48, 52, 254, 1, 156, | ||
+ | 21, 196, 49, 118, 179, 147, 36, 202, 247, 13, 227, 54, 45, 228, 222, 231, | ||
+ | 102, 168, 50, 253, 70, 72, 65, 232, 86, 178, 20, 142, 177, 23, 37, 203, | ||
+ | 217, 92, 61, 144, 238, 100, 84, 220, 115, 56, 22, 169, 27, 251, 141, 138, | ||
+ | 163, 189, 136, 223, 3, 195, 205, 87, 113, 224, 221, 25, 255, 8, 225, 216, | ||
+ | 101, 30, 107, 79, 134, 190, 47, 244, 248, 76, 154, 18, 75, 33, 160, 236, | ||
+ | 219, 35, 207, 226, 233, 153, 64, 88, 124, 28, 119, 123, 39, 95, 89, 146, | ||
+ | 125, 200, 214, 0, 135, 14, 245, 126, 96, 148, 151, 172, 181, 51, 145, 150, | ||
+ | 91, 93, 121, 69, 241, 183, 155, 106, 212, 15, 229, 2, 108, 67, 149, 235, | ||
+ | 4, 110, 237, 143, 130, 218, 5, 213, 112, 162, 131, 34, 211, 12, 184, 44, | ||
+ | 105, 46, 114, 94, 234, 10, 201, 193, 24, 176, 194, 139, 239, 85, 111, 242, | ||
+ | 197, 90, 129, 71, 59, 140, 29, 175, 38, 167, 208, 252, 180, 137, 40, 19, | ||
+ | 185, 158, 117, 164, 173, 57, 99, 198, 230, 32, 77, 210, 120, 188, 204, 60, | ||
+ | 17, 73, 128, 82, 209, 161, 249, 246, 68, 206, 243, 240, 83, 31, 7, 6, | ||
+ | 191, 127, 174, 103, 186, 9, 42, 159, 41, 122, 116, 170, 53, 58, 215, 80, | ||
+ | 132, 97, 166, 81, 250, 157, 74, 62, 104, 63, 43, 187, 98, 55, 199, 26}, | ||
+ | /* Reverse wheel 5 */ | ||
+ | {118, 144, 116, 133, 182, 12, 175, 54, 137, 73, 112, 188, 39, 185, 63, 145, | ||
+ | 87, 151, 142, 245, 218, 200, 98, 15, 241, 23, 121, 37, 226, 157, 229, 79, | ||
+ | 22, 76, 207, 210, 94, 122, 254, 224, 192, 110, 163, 234, 27, 215, 119, 125, | ||
+ | 101, 246, 113, 58, 186, 205, 66, 174, 228, 184, 213, 191, 68, 180, 10, 103, | ||
+ | 253, 219, 51, 92, 69, 41, 60, 4, 158, 208, 239, 178, 170, 100, 31, 252, | ||
+ | 85, 146, 49, 9, 80, 124, 181, 47, 38, 140, 236, 120, 59, 248, 214, 55, | ||
+ | 209, 255, 149, 18, 40, 195, 24, 193, 148, 5, 114, 36, 111, 153, 32, 187, | ||
+ | 19, 81, 202, 109, 201, 129, 159, 237, 250, 135, 97, 50, 127, 45, 102, 65, | ||
+ | 42, 235, 90, 91, 173, 123, 20, 56, 132, 139, 89, 231, 14, 131, 168, 35, | ||
+ | 206, 105, 147, 150, 220, 25, 128, 217, 165, 216, 2, 13, 0, 106, 82, 44, | ||
+ | 71, 176, 143, 242, 28, 169, 34, 164, 29, 134, 130, 46, 244, 17, 84, 190, | ||
+ | 126, 223, 70, 75, 247, 196, 30, 155, 161, 33, 171, 162, 141, 240, 197, 211, | ||
+ | 166, 67, 199, 183, 232, 233, 74, 1, 104, 204, 52, 86, 222, 138, 16, 77, | ||
+ | 95, 93, 167, 83, 26, 189, 230, 179, 225, 136, 64, 107, 117, 3, 57, 7, | ||
+ | 72, 243, 194, 48, 221, 8, 53, 61, 212, 99, 154, 177, 227, 172, 249, 62, | ||
+ | 251, 160, 152, 21, 78, 115, 203, 43, 238, 6, 156, 96, 11, 198, 108, 88} | ||
+ | |||
+ | }; | ||
+ | |||
+ | /* Rotor reflector*/ | ||
+ | byte rr[256] = { | ||
+ | 90, 56, 213, 118, 121, 36, 114, 17, 139, 68, 51, 168, 104, 116, 22, 48, | ||
+ | 163, 7, 113, 109, 148, 49, 14, 176, 218, 72, 188, 195, 82, 37, 34, 66, | ||
+ | 187, 225, 30, 100, 5, 29, 233, 180, 54, 87, 98, 179, 160, 223, 178, 232, | ||
+ | 15, 21, 250, 10, 241, 167, 40, 244, 1, 95, 215, 61, 130, 59, 170, 184, | ||
+ | 79, 231, 31, 120, 9, 172, 150, 224, 25, 226, 92, 217, 212, 222, 207, 64, | ||
+ | 198, 206, 28, 200, 107, 151, 193, 41, 243, 240, 0, 146, 74, 138, 149, 57, | ||
+ | 177, 152, 42, 192, 35, 142, 144, 245, 12, 185, 132, 84, 216, 19, 246, 112, | ||
+ | 111, 18, 6, 122, 13, 147, 3, 135, 67, 4, 115, 162, 136, 220, 253, 145, | ||
+ | 234, 131, 60, 129, 106, 182, 214, 119, 124, 228, 93, 8, 219, 166, 101, 202, | ||
+ | 102, 127, 91, 117, 20, 94, 70, 85, 97, 165, 156, 229, 154, 174, 196, 248, | ||
+ | 44, 235, 123, 16, 247, 153, 141, 53, 11, 173, 62, 249, 69, 169, 157, 181, | ||
+ | 23, 96, 46, 43, 39, 175, 133, 238, 63, 105, 197, 32, 26, 190, 189, 194, | ||
+ | 99, 86, 191, 27, 158, 186, 80, 203, 83, 208, 143, 199, 205, 204, 81, 78, | ||
+ | 201, 210, 209, 227, 76, 2, 134, 58, 108, 75, 24, 140, 125, 236, 77, 45, | ||
+ | 71, 33, 73, 211, 137, 155, 255, 65, 47, 38, 128, 161, 221, 239, 183, 237, | ||
+ | 89, 52, 251, 88, 55, 103, 110, 164, 159, 171, 50, 242, 254, 126, 252, 230}; | ||
+ | |||
</source> | </source> | ||
[[Category:C]][[Category:Programming]][[Category:CoE]] | [[Category:C]][[Category:Programming]][[Category:CoE]] |
Revision as of 11:10, 5 December 2010
/* Header file for enigma-like wheels
contact: heth@mercantec.dk
*/
#define WHEELS 5
typedef unsigned char byte;
byte wheel[5][256] = {
/* Wheel 1 */
{133, 208, 22, 138, 113, 243, 224, 134, 107, 59, 130, 245, 186, 76, 47, 185,
89, 3, 142, 13, 200, 87, 26, 81, 72, 213, 171, 156, 23, 184, 90, 247,
252, 225, 82, 40, 197, 31, 226, 63, 41, 216, 7, 108, 151, 149, 115, 158,
255, 128, 178, 238, 62, 80, 46, 18, 140, 9, 21, 161, 164, 35, 187, 34,
189, 194, 44, 205, 157, 101, 88, 234, 179, 118, 70, 207, 148, 233, 95, 99,
56, 191, 109, 159, 204, 199, 27, 228, 153, 15, 17, 100, 188, 86, 170, 55,
45, 51, 123, 93, 223, 42, 75, 33, 61, 114, 68, 5, 111, 231, 97, 112,
121, 105, 136, 173, 66, 0, 202, 38, 78, 196, 103, 155, 251, 49, 182, 206,
92, 54, 74, 60, 65, 193, 214, 227, 198, 212, 145, 240, 221, 192, 242, 219,
150, 19, 131, 217, 147, 183, 154, 232, 4, 190, 236, 253, 239, 57, 24, 210,
71, 249, 248, 20, 50, 175, 39, 139, 53, 152, 6, 67, 215, 85, 25, 32,
129, 2, 73, 143, 246, 229, 116, 126, 30, 12, 58, 167, 250, 177, 28, 127,
10, 209, 48, 11, 77, 52, 84, 172, 125, 122, 1, 181, 16, 91, 237, 117,
79, 195, 8, 174, 64, 124, 36, 110, 220, 241, 141, 230, 203, 106, 168, 254,
144, 120, 201, 43, 222, 96, 29, 166, 146, 162, 169, 137, 235, 69, 180, 37,
218, 211, 163, 102, 165, 135, 244, 160, 132, 176, 98, 104, 94, 14, 119, 83},
/* Wheel 2 */
{196, 239, 107, 99, 179, 183, 201, 209, 0, 94, 77, 118, 231, 233, 74, 91,
142, 147, 154, 139, 64, 59, 13, 86, 2, 114, 219, 152, 51, 38, 226, 40,
83, 218, 39, 167, 50, 120, 14, 189, 184, 78, 24, 66, 159, 243, 48, 145,
177, 17, 172, 35, 206, 113, 141, 241, 117, 9, 170, 97, 255, 87, 93, 238,
181, 36, 247, 200, 158, 49, 197, 92, 166, 68, 18, 60, 212, 235, 101, 76,
6, 137, 69, 230, 73, 173, 15, 205, 106, 81, 80, 85, 22, 191, 119, 90,
204, 56, 61, 131, 248, 67, 217, 57, 216, 95, 224, 250, 227, 193, 156, 65,
127, 47, 236, 71, 121, 122, 130, 150, 148, 123, 102, 211, 21, 136, 242, 144,
254, 225, 12, 222, 214, 10, 125, 203, 215, 223, 53, 70, 34, 79, 23, 109,
105, 110, 176, 5, 208, 165, 4, 220, 30, 162, 234, 103, 146, 116, 100, 195,
174, 108, 187, 151, 163, 43, 160, 213, 41, 32, 11, 182, 129, 16, 135, 104,
164, 149, 82, 54, 138, 96, 26, 175, 33, 1, 28, 19, 124, 188, 246, 202,
161, 3, 75, 185, 88, 44, 128, 198, 52, 31, 58, 98, 228, 115, 143, 42,
171, 27, 178, 237, 190, 25, 252, 155, 8, 126, 249, 37, 240, 244, 84, 186,
140, 62, 180, 7, 229, 112, 253, 89, 153, 168, 20, 29, 133, 199, 192, 207,
232, 157, 251, 63, 210, 55, 221, 46, 134, 111, 169, 72, 45, 245, 132, 194},
/* Wheel 3 */
{255, 171, 198, 192, 234, 128, 162, 187, 221, 53, 81, 4, 49, 114, 173, 219,
19, 64, 66, 138, 16, 140, 84, 144, 34, 104, 179, 230, 228, 166, 12, 186,
249, 92, 77, 242, 105, 7, 252, 148, 254, 169, 203, 80, 95, 161, 238, 110,
215, 180, 207, 170, 86, 213, 201, 100, 218, 137, 236, 133, 131, 2, 141, 220,
108, 117, 121, 184, 204, 223, 18, 132, 32, 210, 253, 214, 188, 30, 116, 209,
125, 35, 26, 5, 51, 74, 135, 136, 59, 147, 149, 58, 42, 101, 172, 164,
15, 217, 111, 245, 195, 247, 40, 72, 208, 130, 127, 38, 155, 88, 25, 175,
85, 241, 70, 250, 79, 225, 23, 56, 118, 22, 106, 78, 69, 68, 33, 43,
87, 55, 6, 44, 227, 89, 21, 139, 31, 205, 153, 96, 60, 206, 152, 211,
3, 20, 160, 29, 10, 37, 52, 237, 103, 47, 239, 13, 122, 199, 194, 202,
244, 226, 61, 229, 50, 14, 185, 39, 196, 0, 93, 119, 157, 167, 233, 197,
76, 154, 181, 1, 83, 248, 82, 94, 54, 183, 11, 178, 120, 73, 36, 48,
107, 97, 134, 243, 165, 232, 158, 63, 163, 67, 216, 90, 200, 191, 156, 46,
17, 240, 9, 159, 102, 123, 71, 62, 222, 190, 177, 27, 124, 151, 113, 193,
109, 189, 142, 231, 75, 8, 224, 28, 112, 146, 129, 65, 251, 145, 246, 91,
98, 182, 45, 24, 41, 212, 143, 115, 174, 176, 168, 150, 126, 57, 235, 99},
/* Wheel 4 */
{115, 14, 139, 68, 144, 150, 223, 222, 77, 229, 165, 9, 157, 25, 117, 137,
6, 208, 91, 191, 42, 16, 58, 45, 168, 75, 255, 60, 105, 182, 81, 221,
201, 93, 155, 97, 22, 46, 184, 108, 190, 232, 230, 250, 159, 28, 161, 86,
11, 18, 34, 125, 12, 236, 27, 253, 57, 197, 237, 180, 207, 50, 247, 249,
102, 38, 7, 141, 216, 131, 36, 179, 37, 209, 246, 92, 89, 202, 3, 83,
239, 243, 211, 220, 54, 173, 40, 71, 103, 110, 177, 128, 49, 129, 163, 109,
120, 241, 252, 198, 53, 80, 32, 227, 248, 160, 135, 82, 140, 10, 145, 174,
152, 72, 162, 56, 234, 194, 19, 106, 204, 130, 233, 107, 104, 112, 119, 225,
210, 178, 148, 154, 240, 1, 84, 116, 66, 189, 63, 171, 181, 62, 43, 147,
51, 126, 111, 21, 121, 142, 127, 122, 4, 101, 90, 134, 15, 245, 193, 231,
94, 213, 153, 64, 195, 5, 242, 185, 33, 59, 235, 8, 123, 196, 226, 183,
169, 44, 41, 20, 188, 124, 0, 133, 158, 192, 228, 251, 205, 65, 85, 224,
2, 167, 170, 69, 17, 176, 199, 254, 113, 166, 23, 47, 206, 70, 217, 98,
186, 212, 203, 156, 136, 151, 114, 238, 79, 48, 149, 96, 55, 74, 30, 67,
73, 78, 99, 26, 29, 138, 200, 31, 39, 100, 164, 143, 95, 146, 52, 172,
219, 132, 175, 218, 87, 118, 215, 24, 88, 214, 244, 61, 187, 35, 13, 76},
/* Wheel 5 */
{156, 199, 154, 221, 71, 105, 249, 223, 229, 83, 62, 252, 5, 155, 140, 23,
206, 173, 99, 112, 134, 243, 32, 25, 102, 149, 212, 44, 164, 168, 182, 78,
110, 185, 166, 143, 107, 27, 88, 12, 100, 69, 128, 247, 159, 125, 171, 87,
227, 82, 123, 66, 202, 230, 7, 95, 135, 222, 51, 92, 70, 231, 239, 14,
218, 127, 54, 193, 60, 68, 178, 160, 224, 9, 198, 179, 33, 207, 244, 31,
84, 113, 158, 211, 174, 80, 203, 16, 255, 138, 130, 131, 67, 209, 36, 208,
251, 122, 22, 233, 77, 48, 126, 63, 200, 145, 157, 219, 254, 115, 41, 108,
10, 50, 106, 245, 2, 220, 0, 46, 91, 26, 37, 133, 85, 47, 176, 124,
150, 117, 170, 141, 136, 3, 169, 121, 217, 8, 205, 137, 89, 188, 18, 162,
1, 15, 81, 146, 104, 98, 147, 17, 242, 109, 234, 183, 250, 29, 72, 118,
241, 184, 187, 42, 167, 152, 192, 210, 142, 165, 76, 186, 237, 132, 55, 6,
161, 235, 75, 215, 61, 86, 4, 195, 57, 13, 52, 111, 11, 213, 175, 59,
40, 103, 226, 101, 181, 190, 253, 194, 21, 116, 114, 246, 201, 53, 144, 34,
73, 96, 35, 191, 232, 58, 94, 45, 153, 151, 20, 65, 148, 228, 204, 177,
39, 216, 28, 236, 56, 30, 214, 139, 196, 197, 43, 129, 90, 119, 248, 74,
189, 24, 163, 225, 172, 19, 49, 180, 93, 238, 120, 240, 79, 64, 38, 97}
};
/* Notch array for wheels*/
byte wheel_notch[5] = {
184, 41, 3, 181, 194};
byte rwheel[5][256] = {
/* Reverse wheel 1 */
{117, 202, 177, 17, 152, 107, 170, 42, 210, 57, 192, 195, 185, 19, 253, 89,
204, 90, 55, 145, 163, 58, 2, 28, 158, 174, 22, 86, 190, 230, 184, 37,
175, 103, 63, 61, 214, 239, 119, 166, 35, 40, 101, 227, 66, 96, 54, 14,
194, 125, 164, 97, 197, 168, 129, 95, 80, 157, 186, 9, 131, 104, 52, 39,
212, 132, 116, 171, 106, 237, 74, 160, 24, 178, 130, 102, 13, 196, 120, 208,
53, 23, 34, 255, 198, 173, 93, 21, 70, 16, 30, 205, 128, 99, 252, 78,
229, 110, 250, 79, 91, 69, 243, 122, 251, 113, 221, 8, 43, 82, 215, 108,
111, 4, 105, 46, 182, 207, 73, 254, 225, 112, 201, 98, 213, 200, 183, 191,
49, 176, 10, 146, 248, 0, 7, 245, 114, 235, 3, 167, 56, 218, 18, 179,
224, 138, 232, 148, 76, 45, 144, 44, 169, 88, 150, 123, 27, 68, 47, 83,
247, 59, 233, 242, 60, 244, 231, 187, 222, 234, 94, 26, 199, 115, 211, 165,
249, 189, 50, 72, 238, 203, 126, 149, 29, 15, 12, 62, 92, 64, 153, 81,
141, 133, 65, 209, 121, 36, 136, 85, 20, 226, 118, 220, 84, 67, 127, 75,
1, 193, 159, 241, 137, 25, 134, 172, 41, 147, 240, 143, 216, 140, 228, 100,
6, 33, 38, 135, 87, 181, 219, 109, 151, 77, 71, 236, 154, 206, 51, 156,
139, 217, 142, 5, 246, 11, 180, 31, 162, 161, 188, 124, 32, 155, 223, 48},
/* Reverse wheel 2 */
{ 8, 185, 24, 193, 150, 147, 80, 227, 216, 57, 133, 170, 130, 22, 38, 86,
173, 49, 74, 187, 234, 124, 92, 142, 42, 213, 182, 209, 186, 235, 152, 201,
169, 184, 140, 51, 65, 219, 29, 34, 31, 168, 207, 165, 197, 252, 247, 113,
46, 69, 36, 28, 200, 138, 179, 245, 97, 103, 202, 21, 75, 98, 225, 243,
20, 111, 43, 101, 73, 82, 139, 115, 251, 84, 14, 194, 79, 10, 41, 141,
90, 89, 178, 32, 222, 91, 23, 61, 196, 231, 95, 15, 71, 62, 9, 105,
181, 59, 203, 3, 158, 78, 122, 155, 175, 144, 88, 2, 161, 143, 145, 249,
229, 53, 25, 205, 157, 56, 11, 94, 37, 116, 117, 121, 188, 134, 217, 112,
198, 172, 118, 99, 254, 236, 248, 174, 125, 81, 180, 19, 224, 54, 16, 206,
127, 47, 156, 17, 120, 177, 119, 163, 27, 232, 18, 215, 110, 241, 68, 44,
166, 192, 153, 164, 176, 149, 72, 35, 233, 250, 58, 208, 50, 85, 160, 183,
146, 48, 210, 4, 226, 64, 171, 5, 40, 195, 223, 162, 189, 39, 212, 93,
238, 109, 255, 159, 0, 70, 199, 237, 67, 6, 191, 135, 96, 87, 52, 239,
148, 7, 244, 123, 76, 167, 132, 136, 104, 102, 33, 26, 151, 246, 131, 137,
106, 129, 30, 108, 204, 228, 83, 12, 240, 13, 154, 77, 114, 211, 63, 1,
220, 55, 126, 45, 221, 253, 190, 66, 100, 218, 107, 242, 214, 230, 128, 60},
/* Reverse wheel 3 */
{169, 179, 61, 144, 11, 83, 130, 37, 229, 210, 148, 186, 30, 155, 165, 96,
20, 208, 70, 16, 145, 134, 121, 118, 243, 110, 82, 219, 231, 147, 77, 136,
72, 126, 24, 81, 190, 149, 107, 167, 102, 244, 92, 127, 131, 242, 207, 153,
191, 12, 164, 84, 150, 9, 184, 129, 119, 253, 91, 88, 140, 162, 215, 199,
17, 235, 18, 201, 125, 124, 114, 214, 103, 189, 85, 228, 176, 34, 123, 116,
43, 10, 182, 180, 22, 112, 52, 128, 109, 133, 203, 239, 33, 170, 183, 44,
139, 193, 240, 255, 55, 93, 212, 152, 25, 36, 122, 192, 64, 224, 47, 98,
232, 222, 13, 247, 78, 65, 120, 171, 188, 66, 156, 213, 220, 80, 252, 106,
5, 234, 105, 60, 71, 59, 194, 86, 87, 57, 19, 135, 21, 62, 226, 246,
23, 237, 233, 89, 39, 90, 251, 221, 142, 138, 177, 108, 206, 172, 198, 211,
146, 45, 6, 200, 95, 196, 29, 173, 250, 41, 51, 1, 94, 14, 248, 111,
249, 218, 187, 26, 49, 178, 241, 185, 67, 166, 31, 7, 76, 225, 217, 205,
3, 223, 158, 100, 168, 175, 2, 157, 204, 54, 159, 42, 68, 137, 141, 50,
104, 79, 73, 143, 245, 53, 75, 48, 202, 97, 56, 15, 63, 8, 216, 69,
230, 117, 161, 132, 28, 163, 27, 227, 197, 174, 4, 254, 58, 151, 46, 154,
209, 113, 35, 195, 160, 99, 238, 101, 181, 32, 115, 236, 38, 74, 40, 0},
/* Reverse wheel 4 */
{182, 133, 192, 78, 152, 165, 16, 66, 171, 11, 109, 48, 52, 254, 1, 156,
21, 196, 49, 118, 179, 147, 36, 202, 247, 13, 227, 54, 45, 228, 222, 231,
102, 168, 50, 253, 70, 72, 65, 232, 86, 178, 20, 142, 177, 23, 37, 203,
217, 92, 61, 144, 238, 100, 84, 220, 115, 56, 22, 169, 27, 251, 141, 138,
163, 189, 136, 223, 3, 195, 205, 87, 113, 224, 221, 25, 255, 8, 225, 216,
101, 30, 107, 79, 134, 190, 47, 244, 248, 76, 154, 18, 75, 33, 160, 236,
219, 35, 207, 226, 233, 153, 64, 88, 124, 28, 119, 123, 39, 95, 89, 146,
125, 200, 214, 0, 135, 14, 245, 126, 96, 148, 151, 172, 181, 51, 145, 150,
91, 93, 121, 69, 241, 183, 155, 106, 212, 15, 229, 2, 108, 67, 149, 235,
4, 110, 237, 143, 130, 218, 5, 213, 112, 162, 131, 34, 211, 12, 184, 44,
105, 46, 114, 94, 234, 10, 201, 193, 24, 176, 194, 139, 239, 85, 111, 242,
197, 90, 129, 71, 59, 140, 29, 175, 38, 167, 208, 252, 180, 137, 40, 19,
185, 158, 117, 164, 173, 57, 99, 198, 230, 32, 77, 210, 120, 188, 204, 60,
17, 73, 128, 82, 209, 161, 249, 246, 68, 206, 243, 240, 83, 31, 7, 6,
191, 127, 174, 103, 186, 9, 42, 159, 41, 122, 116, 170, 53, 58, 215, 80,
132, 97, 166, 81, 250, 157, 74, 62, 104, 63, 43, 187, 98, 55, 199, 26},
/* Reverse wheel 5 */
{118, 144, 116, 133, 182, 12, 175, 54, 137, 73, 112, 188, 39, 185, 63, 145,
87, 151, 142, 245, 218, 200, 98, 15, 241, 23, 121, 37, 226, 157, 229, 79,
22, 76, 207, 210, 94, 122, 254, 224, 192, 110, 163, 234, 27, 215, 119, 125,
101, 246, 113, 58, 186, 205, 66, 174, 228, 184, 213, 191, 68, 180, 10, 103,
253, 219, 51, 92, 69, 41, 60, 4, 158, 208, 239, 178, 170, 100, 31, 252,
85, 146, 49, 9, 80, 124, 181, 47, 38, 140, 236, 120, 59, 248, 214, 55,
209, 255, 149, 18, 40, 195, 24, 193, 148, 5, 114, 36, 111, 153, 32, 187,
19, 81, 202, 109, 201, 129, 159, 237, 250, 135, 97, 50, 127, 45, 102, 65,
42, 235, 90, 91, 173, 123, 20, 56, 132, 139, 89, 231, 14, 131, 168, 35,
206, 105, 147, 150, 220, 25, 128, 217, 165, 216, 2, 13, 0, 106, 82, 44,
71, 176, 143, 242, 28, 169, 34, 164, 29, 134, 130, 46, 244, 17, 84, 190,
126, 223, 70, 75, 247, 196, 30, 155, 161, 33, 171, 162, 141, 240, 197, 211,
166, 67, 199, 183, 232, 233, 74, 1, 104, 204, 52, 86, 222, 138, 16, 77,
95, 93, 167, 83, 26, 189, 230, 179, 225, 136, 64, 107, 117, 3, 57, 7,
72, 243, 194, 48, 221, 8, 53, 61, 212, 99, 154, 177, 227, 172, 249, 62,
251, 160, 152, 21, 78, 115, 203, 43, 238, 6, 156, 96, 11, 198, 108, 88}
};
/* Rotor reflector*/
byte rr[256] = {
90, 56, 213, 118, 121, 36, 114, 17, 139, 68, 51, 168, 104, 116, 22, 48,
163, 7, 113, 109, 148, 49, 14, 176, 218, 72, 188, 195, 82, 37, 34, 66,
187, 225, 30, 100, 5, 29, 233, 180, 54, 87, 98, 179, 160, 223, 178, 232,
15, 21, 250, 10, 241, 167, 40, 244, 1, 95, 215, 61, 130, 59, 170, 184,
79, 231, 31, 120, 9, 172, 150, 224, 25, 226, 92, 217, 212, 222, 207, 64,
198, 206, 28, 200, 107, 151, 193, 41, 243, 240, 0, 146, 74, 138, 149, 57,
177, 152, 42, 192, 35, 142, 144, 245, 12, 185, 132, 84, 216, 19, 246, 112,
111, 18, 6, 122, 13, 147, 3, 135, 67, 4, 115, 162, 136, 220, 253, 145,
234, 131, 60, 129, 106, 182, 214, 119, 124, 228, 93, 8, 219, 166, 101, 202,
102, 127, 91, 117, 20, 94, 70, 85, 97, 165, 156, 229, 154, 174, 196, 248,
44, 235, 123, 16, 247, 153, 141, 53, 11, 173, 62, 249, 69, 169, 157, 181,
23, 96, 46, 43, 39, 175, 133, 238, 63, 105, 197, 32, 26, 190, 189, 194,
99, 86, 191, 27, 158, 186, 80, 203, 83, 208, 143, 199, 205, 204, 81, 78,
201, 210, 209, 227, 76, 2, 134, 58, 108, 75, 24, 140, 125, 236, 77, 45,
71, 33, 73, 211, 137, 155, 255, 65, 47, 38, 128, 161, 221, 239, 183, 237,
89, 52, 251, 88, 55, 103, 110, 164, 159, 171, 50, 242, 254, 126, 252, 230};