2019-01-04 13:33:31 +00:00
|
|
|
/**
|
|
|
|
* Bombe machine tests.
|
|
|
|
* @author s2224834
|
|
|
|
* @copyright Crown Copyright 2019
|
|
|
|
* @license Apache-2.0
|
|
|
|
*/
|
|
|
|
import TestRegister from "../TestRegister";
|
|
|
|
|
|
|
|
TestRegister.addTests([
|
|
|
|
{
|
2019-01-08 19:37:34 +00:00
|
|
|
// Plugboard for this test is BO LC KE GA
|
2019-01-04 13:33:31 +00:00
|
|
|
name: "Bombe: 3 rotor (self-stecker)",
|
|
|
|
input: "BBYFLTHHYIJQAYBBYS",
|
2019-01-08 19:37:34 +00:00
|
|
|
expectedMatch: /LGA \(plugboard: SS\): VFISUSGTKSTMPSUNAK/,
|
2019-01-04 13:33:31 +00:00
|
|
|
recipeConfig: [
|
|
|
|
{
|
|
|
|
"op": "Bombe",
|
|
|
|
"args": [
|
|
|
|
"BDFHJLCPRTXVZNYEIWGAKMUSQO<W", // III
|
|
|
|
"AJDKSIRUXBLHWTMCQGZNPYFVOE<F", // II
|
|
|
|
"EKMFLGDQVZNTOWYHXUSPAIBRCJ<R", // I
|
|
|
|
"",
|
|
|
|
"AY BR CU DH EQ FS GL IP JX KN MO TZ VW", // B
|
|
|
|
"THISISATESTMESSAGE", 0,
|
|
|
|
]
|
|
|
|
}
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "Bombe: 3 rotor (other stecker)",
|
|
|
|
input: "JBYALIHDYNUAAVKBYM",
|
2019-01-08 19:37:34 +00:00
|
|
|
expectedMatch: /LGA \(plugboard: AG\): QFIMUMAFKMQSKMYNGW/,
|
2019-01-04 13:33:31 +00:00
|
|
|
recipeConfig: [
|
|
|
|
{
|
|
|
|
"op": "Bombe",
|
|
|
|
"args": [
|
|
|
|
"BDFHJLCPRTXVZNYEIWGAKMUSQO<W", // III
|
|
|
|
"AJDKSIRUXBLHWTMCQGZNPYFVOE<F", // II
|
|
|
|
"EKMFLGDQVZNTOWYHXUSPAIBRCJ<R", // I
|
|
|
|
"",
|
|
|
|
"AY BR CU DH EQ FS GL IP JX KN MO TZ VW", // B
|
|
|
|
"THISISATESTMESSAGE", 0,
|
|
|
|
]
|
|
|
|
}
|
|
|
|
]
|
|
|
|
},
|
2019-01-08 18:25:42 +00:00
|
|
|
{
|
|
|
|
name: "Bombe: crib offset",
|
|
|
|
input: "AAABBYFLTHHYIJQAYBBYS", // first three chars here are faked
|
2019-01-08 19:37:34 +00:00
|
|
|
expectedMatch: /LGA \(plugboard: SS\): VFISUSGTKSTMPSUNAK/,
|
2019-01-08 18:25:42 +00:00
|
|
|
recipeConfig: [
|
|
|
|
{
|
|
|
|
"op": "Bombe",
|
|
|
|
"args": [
|
|
|
|
"BDFHJLCPRTXVZNYEIWGAKMUSQO<W", // III
|
|
|
|
"AJDKSIRUXBLHWTMCQGZNPYFVOE<F", // II
|
|
|
|
"EKMFLGDQVZNTOWYHXUSPAIBRCJ<R", // I
|
|
|
|
"",
|
|
|
|
"AY BR CU DH EQ FS GL IP JX KN MO TZ VW", // B
|
|
|
|
"THISISATESTMESSAGE", 3,
|
|
|
|
]
|
|
|
|
}
|
|
|
|
]
|
|
|
|
},
|
2019-01-08 19:37:34 +00:00
|
|
|
{
|
|
|
|
name: "Bombe: multiple stops",
|
|
|
|
input: "BBYFLTHHYIJQAYBBYS",
|
|
|
|
expectedMatch: /LGA \(plugboard: TT\): VFISUSGTKSTMPSUNAK/,
|
|
|
|
recipeConfig: [
|
|
|
|
{
|
|
|
|
"op": "Bombe",
|
|
|
|
"args": [
|
|
|
|
"BDFHJLCPRTXVZNYEIWGAKMUSQO<W", // III
|
|
|
|
"AJDKSIRUXBLHWTMCQGZNPYFVOE<F", // II
|
|
|
|
"EKMFLGDQVZNTOWYHXUSPAIBRCJ<R", // I
|
|
|
|
"",
|
|
|
|
"AY BR CU DH EQ FS GL IP JX KN MO TZ VW", // B
|
|
|
|
"THISISATESTM", 0,
|
|
|
|
]
|
|
|
|
}
|
|
|
|
]
|
|
|
|
},
|
2019-01-04 13:33:31 +00:00
|
|
|
/*
|
|
|
|
* Long test is long
|
|
|
|
{
|
|
|
|
name: "Bombe: 4 rotor",
|
|
|
|
input: "LUOXGJSHGEDSRDOQQX",
|
2019-01-08 19:37:34 +00:00
|
|
|
expectedMatch: /LHSC \(plugboard: SS\)/,
|
2019-01-04 13:33:31 +00:00
|
|
|
recipeConfig: [
|
|
|
|
{
|
|
|
|
"op": "Bombe",
|
|
|
|
"args": [
|
|
|
|
"BDFHJLCPRTXVZNYEIWGAKMUSQO<W", // III
|
|
|
|
"AJDKSIRUXBLHWTMCQGZNPYFVOE<F", // II
|
|
|
|
"EKMFLGDQVZNTOWYHXUSPAIBRCJ<R", // I
|
|
|
|
"LEYJVCNIXWPBQMDRTAKZGFUHOS", // Beta
|
|
|
|
"AE BN CK DQ FU GY HW IJ LO MP RX SZ TV", // B thin
|
|
|
|
"THISISATESTMESSAGE", 0,
|
|
|
|
]
|
|
|
|
}
|
|
|
|
]
|
|
|
|
},
|
|
|
|
*/
|
2019-01-08 18:25:42 +00:00
|
|
|
{
|
|
|
|
name: "Bombe: no crib",
|
|
|
|
input: "JBYALIHDYNUAAVKBYM",
|
|
|
|
expectedMatch: /Crib cannot be empty/,
|
|
|
|
recipeConfig: [
|
|
|
|
{
|
|
|
|
"op": "Bombe",
|
|
|
|
"args": [
|
|
|
|
"BDFHJLCPRTXVZNYEIWGAKMUSQO<W", // III
|
|
|
|
"AJDKSIRUXBLHWTMCQGZNPYFVOE<F", // II
|
|
|
|
"EKMFLGDQVZNTOWYHXUSPAIBRCJ<R", // I
|
|
|
|
"",
|
|
|
|
"AY BR CU DH EQ FS GL IP JX KN MO TZ VW", // B
|
|
|
|
"", 0,
|
|
|
|
]
|
|
|
|
}
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "Bombe: short crib",
|
|
|
|
input: "JBYALIHDYNUAAVKBYM",
|
|
|
|
expectedMatch: /Crib is too short/,
|
|
|
|
recipeConfig: [
|
|
|
|
{
|
|
|
|
"op": "Bombe",
|
|
|
|
"args": [
|
|
|
|
"BDFHJLCPRTXVZNYEIWGAKMUSQO<W", // III
|
|
|
|
"AJDKSIRUXBLHWTMCQGZNPYFVOE<F", // II
|
|
|
|
"EKMFLGDQVZNTOWYHXUSPAIBRCJ<R", // I
|
|
|
|
"",
|
|
|
|
"AY BR CU DH EQ FS GL IP JX KN MO TZ VW", // B
|
|
|
|
"A", 0,
|
|
|
|
]
|
|
|
|
}
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "Bombe: invalid crib",
|
|
|
|
input: "JBYALIHDYNUAAVKBYM",
|
|
|
|
expectedMatch: /Invalid crib: .* in both ciphertext and crib/,
|
|
|
|
recipeConfig: [
|
|
|
|
{
|
|
|
|
"op": "Bombe",
|
|
|
|
"args": [
|
|
|
|
"BDFHJLCPRTXVZNYEIWGAKMUSQO<W", // III
|
|
|
|
"AJDKSIRUXBLHWTMCQGZNPYFVOE<F", // II
|
|
|
|
"EKMFLGDQVZNTOWYHXUSPAIBRCJ<R", // I
|
|
|
|
"",
|
|
|
|
"AY BR CU DH EQ FS GL IP JX KN MO TZ VW", // B
|
|
|
|
"AAAAAAAA", 0,
|
|
|
|
]
|
|
|
|
}
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "Bombe: long crib",
|
|
|
|
input: "JBYALIHDYNUAAVKBYM",
|
|
|
|
expectedMatch: /Crib overruns supplied ciphertext/,
|
|
|
|
recipeConfig: [
|
|
|
|
{
|
|
|
|
"op": "Bombe",
|
|
|
|
"args": [
|
|
|
|
"BDFHJLCPRTXVZNYEIWGAKMUSQO<W", // III
|
|
|
|
"AJDKSIRUXBLHWTMCQGZNPYFVOE<F", // II
|
|
|
|
"EKMFLGDQVZNTOWYHXUSPAIBRCJ<R", // I
|
|
|
|
"",
|
|
|
|
"AY BR CU DH EQ FS GL IP JX KN MO TZ VW", // B
|
|
|
|
"CCCCCCCCCCCCCCCCCCCCCC", 0,
|
|
|
|
]
|
|
|
|
}
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "Bombe: really long crib",
|
|
|
|
input: "BBBBBBBBBBBBBBBBBBBBBBBBBB",
|
|
|
|
expectedMatch: /Crib is too long/,
|
|
|
|
recipeConfig: [
|
|
|
|
{
|
|
|
|
"op": "Bombe",
|
|
|
|
"args": [
|
|
|
|
"BDFHJLCPRTXVZNYEIWGAKMUSQO<W", // III
|
|
|
|
"AJDKSIRUXBLHWTMCQGZNPYFVOE<F", // II
|
|
|
|
"EKMFLGDQVZNTOWYHXUSPAIBRCJ<R", // I
|
|
|
|
"",
|
|
|
|
"AY BR CU DH EQ FS GL IP JX KN MO TZ VW", // B
|
|
|
|
"AAAAAAAAAAAAAAAAAAAAAAAAAA", 0,
|
|
|
|
]
|
|
|
|
}
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "Bombe: negative offset",
|
|
|
|
input: "AAAAA",
|
|
|
|
expectedMatch: /Offset cannot be negative/,
|
|
|
|
recipeConfig: [
|
|
|
|
{
|
|
|
|
"op": "Bombe",
|
|
|
|
"args": [
|
|
|
|
"BDFHJLCPRTXVZNYEIWGAKMUSQO<W", // III
|
|
|
|
"AJDKSIRUXBLHWTMCQGZNPYFVOE<F", // II
|
|
|
|
"EKMFLGDQVZNTOWYHXUSPAIBRCJ<R", // I
|
|
|
|
"",
|
|
|
|
"AY BR CU DH EQ FS GL IP JX KN MO TZ VW", // B
|
|
|
|
"BBBBB", -1,
|
|
|
|
]
|
|
|
|
}
|
|
|
|
]
|
|
|
|
},
|
|
|
|
// Enigma tests cover validation of rotors and reflector
|
2019-01-04 13:33:31 +00:00
|
|
|
]);
|