mirror of
https://github.com/gchq/CyberChef.git
synced 2025-04-21 23:36:16 -04:00
Modified control rotor stepping so the next control rotor steps once the previous rotor reaches "O" and added tests
This commit is contained in:
parent
e2b3389da6
commit
3c68ad1302
3 changed files with 56 additions and 32 deletions
|
@ -216,7 +216,6 @@ export class ControlBank {
|
||||||
*/
|
*/
|
||||||
constructor(rotors) {
|
constructor(rotors) {
|
||||||
this.rotors = [...rotors].reverse();
|
this.rotors = [...rotors].reverse();
|
||||||
this.numberOfMoves = 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -258,14 +257,14 @@ export class ControlBank {
|
||||||
*/
|
*/
|
||||||
step() {
|
step() {
|
||||||
const MRotor = this.rotors[1], FRotor = this.rotors[2], SRotor = this.rotors[3];
|
const MRotor = this.rotors[1], FRotor = this.rotors[2], SRotor = this.rotors[3];
|
||||||
this.numberOfMoves ++;
|
// 14 is the offset of "O" from "A" - the next rotor steps once the previous rotor reaches "O"
|
||||||
FRotor.step();
|
if (FRotor.state === 14) {
|
||||||
if (this.numberOfMoves%26 === 0) {
|
if (MRotor.state === 14) {
|
||||||
MRotor.step();
|
|
||||||
}
|
|
||||||
if (this.numberOfMoves%(26*26) === 0) {
|
|
||||||
SRotor.step();
|
SRotor.step();
|
||||||
}
|
}
|
||||||
|
MRotor.step();
|
||||||
|
}
|
||||||
|
FRotor.step();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -101,6 +101,7 @@ import "./tests/LuhnChecksum.mjs";
|
||||||
import "./tests/CipherSaber2.mjs";
|
import "./tests/CipherSaber2.mjs";
|
||||||
import "./tests/Colossus.mjs";
|
import "./tests/Colossus.mjs";
|
||||||
import "./tests/ParseObjectIDTimestamp.mjs";
|
import "./tests/ParseObjectIDTimestamp.mjs";
|
||||||
|
import "./tests/SIGABA.mjs";
|
||||||
|
|
||||||
|
|
||||||
// Cannot test operations that use the File type yet
|
// Cannot test operations that use the File type yet
|
||||||
|
|
|
@ -9,9 +9,9 @@ import TestRegister from "../../lib/TestRegister.mjs";
|
||||||
|
|
||||||
TestRegister.addTests([
|
TestRegister.addTests([
|
||||||
{
|
{
|
||||||
name: "SIGABA: encrypt",
|
name: "SIGABA: encrypt test 1",
|
||||||
input: "hello world testing the sigaba machine",
|
input: "HELLO WORLD TESTING THE SIGABA MACHINE",
|
||||||
expectedOutput: "ULBECJCZJBJFVUDLIXGLGIVXSYGMFRJVCERGOX",
|
expectedOutput: "ULBECJCZJBJFVUDWAVRGRBMPSQHOTTNVQEESKN",
|
||||||
recipeConfig: [
|
recipeConfig: [
|
||||||
{
|
{
|
||||||
"op": "SIGABA",
|
"op": "SIGABA",
|
||||||
|
@ -37,30 +37,54 @@ TestRegister.addTests([
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "SIGABA: decrypt",
|
name: "SIGABA: encrypt test 2",
|
||||||
input: "helloxworldxtestingxthexsigabaxmachine",
|
input: "PCRPJZWSPNOHMWANBFBEIVZOXDQESPYDEFBNTHXLSICIRPKUATJVDUQFLZOKGHHHDUDIBRKUHVCGAGLBWVGFFXNDHKPFSPSCIIPCXUFRRHNYWIJFEJWQSGMSNJHWSLPKVXHUQUWIURHDIHIUTWGQFIYLTKEZAUESWYEKIWXUSSXWXBEHCXCUDQWKCISVPKXJVPOIJZWTUGKAORBMKBAQUZOPTSUSYZRROWQUYKNCLHVIHEGWCCONGVHEKCEXVYIPNILIXTXDELNGLJGMEQKKQJWZLPNXPOGIOSVAEAJYKWYJXXGKKPLVYAZGDCMNHMPLCYWDQSRBEMVVVZVFYJMRYGHJOTDOEQVRQOVXOGOVYGTXETFHAYELRYVDGWOFVGAOWPMHQYRZMNXVTAHWSKZLJDFVQPZGMHZWFNOBHSZHEDAEXIFCEEJYZDOEFOQWCXTKPJRUEITKHVCITCLKBUFNAFBYXELAYPBRGGGOCCAGLXXJXTSWCJHMHQPVUIBAGBDKAGEEEPKRGGICJQXSYHBNNAKGYODRAUWAEYHWCKHEQIBAONWQJYQCIFKDTOCTJMBJULWKMSNNMPXINHZQWUMJQLQKIPVZVRGYPCJJZMENWTFTUSPCSPRXHMZPCHCNQTUDCOUJHRKYQIUWWVEVVRYFDIYRQISNGPMQLNMCNMVBEWHNCUODHAGEVEUMKVZLEIKYAMPGVVSBYNRJMFCATDXTQCYXIBCXXKYEYHHYERQGQWZTWCEJBFQLRFFCIVVSZUKGLOTLNGLQNTIKTBBWVFMONUFKRLCJASEKUEEDDQDIVQMFRSJRNHYZJODFHSCJSDAIRUXOSDNFUFUFMNZYQIEGRUXKUPCHENUEZHRKYHDRJYSHLZNYRBWVXORMJMJRIRNSAJQRUMPCXUDFYRGKEAXQXJHPEWNIYIDURDGWIFEMSOFYYCFRZGMZXJNTLTJBBSZIULQSOMEVGCTCVXUHTIEHSPOPQYCJLPAJAPQPAQXE",
|
||||||
expectedOutput: "XWCIWSAIQKNPBUKAP QXVYW RRNYAWXKRBGCQS",
|
expectedOutput: "GMEXPPCMFGKUVGXZHVTCKXRSTJUYWNOKFVELWAHHSJBXGOEXCMLOVSIMCDMGEYMWWTFDUMCDUJEZITNPVVBGQDJEVHJXSKJAAUZWBELMSPUTXCUYPDTJCQXEBGWPWRSQLSNFMASCTJZDSFNKDDTAXLRGUPKCBNXMZPADJSFGGNYKRPYBNTYPTGVPACBEINILNACWFVKMJPGCEZFROEYYKTGYSQYMFSGVDOJJONNYEYSCCIXWLKUSJZDRVAQSNUWHMDJVDNNMPGOYRGQRSBGSPQKGCTFZQWSOXBWSQZDCRQJQAWZDPQEILGMMABIMCDPNSKAFCLPQGIRJCMGQREBEUHBYREXFABFMVZTZBDUMASVNUMHIYRSZLGNZFMVAIABLCUZLJLKKZPWEXDHYZFVSNRLCLNDRKLKSWRHQVQJRTHCNFZXDEXSLAXXOGMFVSGCJGAWOLGDMTLWSFNTCUVCCEACINRZAZZOGLEHHXLPHVKILBBJDPOOCILQKKGODSXOBDPZZDXHJLLBOBVFCHJVMUBUZZIKGCWGCYGXVEHHIJGPEQERWEZLILQNHPHALFKFMGADNELGBKILKIUETGDCBQUEOECWVFNOXTJKUYPWBNEKYSIKMVSAMBZGLIKDAOELRSTKFASEKABTUCPSFEGXXQGDFPSPVOLBHGLZSLLWCABSRKZDQQRKVCKXDGTIHPDNMPDZEXYFYKXZTPJPLYOFNLWAGKJEOHOYLMZELXIDWWNXPKEPUCKNNNHJLFYHPQNHMMCGMUPHSUSYYIVWTIMFKKKTFPGFTLTWWSQBRBMGBTZXPVULKNZIIKVTYLJFISGPTLZFTCLGNZOMVKZOIMUDGXRDDSVFRHRYWBEWHYLCUISYMRWAZZAQPJYXZQQKZLILOSHXUTQJFPTXQSREKSUDZTLGUDLUGOJMQHJRJHXCHQTKJULTWWQOXIRFRQEYBPJPEKXFIRMNATWNFBADOSIJVZYRYDBHDAEDJUVDHLDAU",
|
||||||
recipeConfig: [
|
recipeConfig: [
|
||||||
{
|
{ "op": "SIGABA",
|
||||||
"op": "SIGABA",
|
|
||||||
"args": [
|
"args": [
|
||||||
"ZECIPSQVBYKJTNRLOXUFGAWHMD", false, "C",
|
"YCHLQSUGBDIXNZKERPVJTAWFOM", true, "A",
|
||||||
"IPHECDYSZTRXQUKWNVGOBLFJAM", true, "J",
|
"INPXBWETGUYSAOCHVLDMQKZJFR", false, "B",
|
||||||
"YHXUSRKIJVQWTPLAZOMDCGNEFB", true, "Z",
|
"WNDRIOZPTAXHFJYQBMSVEKUCGL", false, "C",
|
||||||
"TDPVSOBXULANZQYEHIGFMCRWJK", false, "W",
|
"TZGHOBKRVUXLQDMPNFWCJYEIAS", false, "D",
|
||||||
"THZGFXQRVBSDUICNYJWPAEMOKL", false, "F",
|
"YWTAHRQJVLCEXUNGBIPZMSDFOK", true, "E",
|
||||||
"KOVUTBMZQWGYDNAICSPHERXJLF", false, "F",
|
"QSLRBTEKOGAICFWYVMHJNXZUDP", false, "F",
|
||||||
"DSTRLAUFXGWCEOKQPVMBZNIYJH", true, "A",
|
"CHJDQIGNBSAKVTUOXFWLEPRMZY", false, "G",
|
||||||
"KCULNSIXJDPEHGQYRTFZVWOBAM", false, "H",
|
"CDFAJXTIMNBEQHSUGRYLWZKVPO", true, "H",
|
||||||
"DZANEQLOWYRXKGUSIVJFMPBCHT", true, "M",
|
"XHFESZDNRBCGKQIJLTVMUOYAPW", false, "I",
|
||||||
"MVRLHTPFWCAOKEGXZBJYIQUNSD", false, "E",
|
"EZJQXMOGYTCSFRIUPVNADLHWBK", false, "J",
|
||||||
"9421765830", "3",
|
"7591482630", "0",
|
||||||
"3476815902", "2",
|
"3810592764", "1",
|
||||||
"5701842693", "7",
|
"4086153297", "2",
|
||||||
"4178920536", "0",
|
"3980526174", "3",
|
||||||
"5243709861", "1",
|
"6497135280", "4",
|
||||||
"Decrypt"
|
"Encrypt"]
|
||||||
|
}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "SIGABA: decrypt test",
|
||||||
|
input: "AKDHFWAYSLHJDKXEVMJJHGKFTQBZPJPJILOVHMBYOAGBZVLLTQUOIKXFPUFNILBDPCAELMAPSXTLMUEGSDTNUDWGZDADBFELWWHKVPRZNDATDPYEHIDMTGAGPDEZYXFSASVKSBMXVOJQXRMHDBWUNZDTIIIVKHJYPIEUHAJCNBXNLGVFADEWIKXDJZBUTGOQBCQZWYKRVEENWRWWRYDNOAPGMODTPTUJZCLUCRDILJABNTBTWUEIJSJRQBUVCOUJJDWFMNNUHXBDFYXLGUMXQEAWSVHBXQGEOOGPYRVOAJLAIYIOHHEXACDTAWWCBGQRNPERSIKHTXPXKBUNACZLFZTRBMBBDDGKNBIQMFHZROCZZBGNZSJKDRRWPEQHLCFADNPWPWSLPIFNKBWQPMARUERGWUUODXSCOJQECGHIZRFRNRSXWSFWKISHHTUFRVXLHCQWGBMRDHCYDSVNIDDRSTODCGJSSBLUYOBGEWFOVKOZBJTYCAKMZECUGLJGTSZJNBOLTMUZRRSIGGRQHLRPMGLINASSMZOBNACKUMSFNIZAUFCPFXXOOTJQWWLZOFLGZLHJCWZJCRJKVOUDLNMKQATGVTOFHACAEKFLRWRTTMVRXHYGOTYPNBMUSKDAKXFCICUOVSWXGPQOYUUWTWRPQMEQCSDJMMJKELIHGEDYKWOVHVPUAIBFGAODXODXVFIIZIGWRZSBTIGXVHFABMMOPGVMLGHQQXNOEJRDLOBGUOWSELBHERZFSBLUODMOGIBNVGVGQYDBTKLOPNKZZNGLTTGZYYXIBAHZJDCILZXKNSJDHXWTYQLFHTUINTYSBPIXOPLOQHSAHGQPYUWYNPKMRBBBYIICCBBJRKWVLBIDBBEKJCXHLPUBMIGBUFYDPOCSRUNZOKMKJHMYFJZWFNHQZOGGRTNNUVLMRLDSAJIECTYCJKBYVNAXGCMGNVFJEDSATZQDQTYRBPLZKHAXMOVJZEDKINXKBUVWXXHTYUFO",
|
||||||
|
expectedOutput: "KTSOYDGMLPMVXEAJIATXCNQFXHBNCBXIJOCQGCQBRQSBYFOOEVPVXACBMIUIRNVMJHREKRHBSXJFSMWCKTTCYXJOFSJCQECXXCHTEGPEYSMYDHCSMODUAVBNLILYUIBBIXJCXXNQPCERRSMJTPQLMOXSKTRPWOFUSWXOYRJLBIJGIOYTEAEJEGGYAGSXNHNQTETANPWEGATHSBFLHCVHVIJUAKDVGQCWUSIFFFVAJYPJAFUYDXSLGPGESOUAYXBQIIOXWTXNOXLNCGWSUKVIBMOUGNHORYLSNVNNJLKKFDUAEISOLBLCXYHMDGVBVVVIKDLTMTDVWWJBXWXROVTJBXXKXLEWTTISKIUMYSACVUGGNANMCGUMFNQUXDLTHJNYTFIQEPKQQQSSROYJOILJYQXICXACWGOHCSHENXJILOMIIFCIOUDXDCINIVKIRJCVHWXSFQXMNRBJJWTPXNJADEOPEJBLKHKXNTORIRVRLXUXXAMKMODBXNLQCVJXVOTBRHXBBVJHPFEQFCRXYRRXHXPTXXSUESUTHUGOWQYQPQFPXQPVGEIRPQNKXXMBHIPECRUWFEWJUTYIKSMJSRQIQAIAMXTGDXSJIABHIGKUPJBCHWMVYTMQNQYGDHCNMBSVTPXNFRELFXXQYIOLCDEXDXDVSINICOXRMNSPICPQMOBIDJCNBJKXFAVMUXOXHERJIBIXLMXXULDXKXXHAQDXEXIWXOEEUGKSUGCMRWJDPYCYKXTPCOXMURAJCPRXKFJAJALERWRHVMFHOGMFHXGSXQDPJCJNXRQFGHKRCYTEBJDHPCMYFEAPWSVVMMBVUJJMCAAYURHUPVQVJYDCSNMQEMNIFEXYXIIXBVRVILXAUCBDXRJHGPKPYXHPPPNVSBBCDRLVVIYPKAKYIXTJVYDGVPHXULWMADBEICNIFKWUOOHEFNANDKOXMCVBVORLQYNXLULOEGVGWNKNMOHYVRSYSOVYGAKCGAWKGAIAQNQR",
|
||||||
|
recipeConfig: [
|
||||||
|
{ "op": "SIGABA",
|
||||||
|
"args": [
|
||||||
|
"YCHLQSUGBDIXNZKERPVJTAWFOM", true, "A",
|
||||||
|
"INPXBWETGUYSAOCHVLDMQKZJFR", false, "B",
|
||||||
|
"WNDRIOZPTAXHFJYQBMSVEKUCGL", false, "C",
|
||||||
|
"TZGHOBKRVUXLQDMPNFWCJYEIAS", false, "D",
|
||||||
|
"YWTAHRQJVLCEXUNGBIPZMSDFOK", true, "E",
|
||||||
|
"QSLRBTEKOGAICFWYVMHJNXZUDP", false, "F",
|
||||||
|
"CHJDQIGNBSAKVTUOXFWLEPRMZY", false, "G",
|
||||||
|
"CDFAJXTIMNBEQHSUGRYLWZKVPO", true, "H",
|
||||||
|
"XHFESZDNRBCGKQIJLTVMUOYAPW", false, "I",
|
||||||
|
"EZJQXMOGYTCSFRIUPVNADLHWBK", false, "J",
|
||||||
|
"7591482630", "0",
|
||||||
|
"3810592764", "1",
|
||||||
|
"4086153297", "2",
|
||||||
|
"3980526174", "3",
|
||||||
|
"6497135280", "4",
|
||||||
|
"Decrypt"]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue