gchq/CyberChef · error · OperationError
Χ3 start must be between 1 and 29
Error message
Χ3 start must be between 1 and 29
What it means
Colossus simulates the Lorenz SZ cipher; the chi-3 (Χ3) wheel has exactly 29 cam positions. The start position is a 1-based index, enforced by `if (args[47]<1 || args[47]>29)`. Any value outside [1, 29] is rejected before the simulation runs.
Source
Thrown at src/core/operations/Colossus.mjs:442
throw new OperationError("Set Total must be between 0000 and 9999");
// null|fast|slow for each of S1-5,M1-2,X1-5
const control = {
fast: args[43],
slow: args[44]
};
// Start positions
if (args[52]<1 || args[52]>43) throw new OperationError("Ψ1 start must be between 1 and 43");
if (args[53]<1 || args[53]>47) throw new OperationError("Ψ2 start must be between 1 and 47");
if (args[54]<1 || args[54]>51) throw new OperationError("Ψ3 start must be between 1 and 51");
if (args[55]<1 || args[55]>53) throw new OperationError("Ψ4 start must be between 1 and 53");
if (args[56]<1 || args[57]>59) throw new OperationError("Ψ5 start must be between 1 and 59");
if (args[51]<1 || args[51]>37) throw new OperationError("Μ37 start must be between 1 and 37");
if (args[50]<1 || args[50]>61) throw new OperationError("Μ61 start must be between 1 and 61");
if (args[45]<1 || args[45]>41) throw new OperationError("Χ1 start must be between 1 and 41");
if (args[46]<1 || args[46]>31) throw new OperationError("Χ2 start must be between 1 and 31");
if (args[47]<1 || args[47]>29) throw new OperationError("Χ3 start must be between 1 and 29");
if (args[48]<1 || args[48]>26) throw new OperationError("Χ4 start must be between 1 and 26");
if (args[49]<1 || args[49]>23) throw new OperationError("Χ5 start must be between 1 and 23");
const starts = {
X1: args[45], X2: args[46], X3: args[47], X4: args[48], X5: args[49],
M61: args[50], M37: args[51],
S1: args[52], S2: args[53], S3: args[54], S4: args[55], S5: args[56]
};
const colossus = new ColossusComputer(input, pattern, qbusin, qbusswitches, control, starts, settotal, limit);
const result = colossus.run();
return result;
}
/**
* Select Program
*View on GitHub (pinned to 4290ea7539)
Solutions
- Set the Χ3 start argument to an integer in the inclusive range [1, 29].
- Verify the value against the Lorenz SZ chi-3 wheel length of 29.
- Validate all start positions programmatically against their per-wheel maximums before baking.
Example fix
// before args[47] = 30; // throws: Χ3 start must be between 1 and 29 // after args[47] = 29; // valid: chi-3 wheel has 29 positions
Defensive patterns
Strategy: validation
Validate before calling
const CHI3_START_MAX = 29;
function validChi3Start(v) {
return Number.isInteger(v) && v >= 1 && v <= CHI3_START_MAX;
}
if (!validChi3Start(starts.X3)) {
throw new Error(`Χ3 start ${starts.X3} out of range [1, ${CHI3_START_MAX}]`);
} Type guard
function isChi3Start(v) {
return Number.isInteger(v) && v >= 1 && v <= 29;
} Prevention
- Validate each wheel start against its fixed size before baking.
- Start positions are 1-based.
- Keep a per-wheel size lookup table next to your start vector to catch transpositions.
When it happens
Trigger: Setting the 'Χ3 start' argument (args[47]) to 0, a negative number, or an integer greater than 29. Also when a transcribed key setting uses the wrong wheel length for chi-3.
Common situations: Off-by-one (0-based assumption); mistaking Χ3's length (29) for another wheel's; bulk-pasting a start vector where columns are misaligned.
Related errors
- Χ2 start must be between 1 and 31
- Χ4 start must be between 1 and 26
- Error opening image. (${err})
- Unsupported QR code format.
- Unknown padding type: ${padding}
AI-assisted analysis of gchq/CyberChef@4290ea7539 (2026-08-13).
Data as JSON: /api/errors/309bbe7bf29d081a.
Report an issue: GitHub.