Bij een uitspraak uit april 2006 in een auteursrechtzaak over het boek The Da Vinci Code1 van Dan Brown2, schreef de Britse rechter Peter Smith3 een merkwaardig vonnis4. Kennelijk geïnspireerd door Browns boek had Smith er een boodschap in verborgen, zoals af te leiden viel uit de zin
The key to solving the conundrum posed by this judgment is in reading HBHG and DVC.
Een beetje context: Smith gebruikte deze afkortingen doorheen zijn vonnis om te verwijzen naar The Holy Blood and the Holy Grail5 (1982), het boek waaruit Brown volgens de beschuldiging zou geplagieerd hebben, en naar Browns eigen boek The Da Vinci Code (2005). Nadat hij het vonnis geveld had — waarin Brown onschuldig werd bevonden — liet Smith zich publiekelijk ontvallen
I can't discuss the judgement, but I don't see why a judgement should not be a matter of fun.
Hij beloofde te bevestigen wanneer de boodschap correct was ontcijferd. Diezelfde maand nog werd de code gekraakt6 door Daniel Tench — een advocaat die over mediagerelateerde zaken schrijft voor de Guardian — nadat hij via mail een reeks aanwijzingen had ontvangen van Smith. Derek Kravitz schreef daarover in de Seattle Post-Intelligencer
Het Hof van Beroep verklaarde later dat Smith
… was prompted by the extensive use in [The Da Vinci Code] of codes, and no doubt by his own interest in such things, to incorporate a coded message in his judgment, on which nothing turns. The judgment is not easy to read or to understand. It might have been preferable for him to have allowed himself more time for the preparation, checking and revision of the judgment.
Schrijf een bash shell script smithy waaraan een tekstbestand moet doorgegeven worden waarin cursieve fragmenten ingesloten zitten tussen opeenvolgende asterisks (*). Een cursief fragment kan uit meerdere karakters bestaan, maar begint en eindigt altijd op dezelfde regel (loopt dus nooit over meerdere regels en bevat geen newlines). Dezelfde regel kan meerdere cursieve fragmenten bevatten. Het script moet alle cursieve fragmenten uit het tekstbestand achter elkaar zetten en uitschrijven naar standaard uitvoer (stdout).
Dit zijn bijvoorbeeld enkele regels met cursieve fragmenten (geel gemarkeerd) die we geselecteerd hebben uit het originele vonnis9 van rechter Smith, dat in totaal 360 secties beslaat (document.txt10):
…
8. Mr Leigh was born in New *J*ersey *a*nd aft*e*r secondary educat*i*on compl*e*ted a BA in
English Literature at Tufts University Boston. He became interested in the Grail
…
believe them to be correct. Mr Baigent hypothesised that the way in which they
presented their research was not orthodo*x *and used techniques which had been
criticised by orthodox historians such as giving weight to folklore legends and using
…
12. *T*here were discussi*o*n*s* following publication about making a film but t*h*ese did not
come to any clear conclusion.
13. Publication of HBHG was preceded by the preparation of the book proposal (“The
Outline”) by Mr Bai*g*ent, Mr Leigh (under the *p*seudonym* *Bardmont) and Mr
Lincoln. The outline *s*t*a*rts with a proposition that Jesus was not a poor *c*arpenter
from* *Nazareth but a Jewish aristocrat who was in addition a priest-kin*g*, ma*r*ri*e*d* a*nd
he had children who after “the alleged crucifixion” were s*m*uggled to a Jewish
…
Voor dit bestand (document.txt11) moet het script deze aaneenschakeling van cursieve fragmenten uitschrijven:
Jaeiex Toshgp sac gre amq? Wfkadpmqzvz.
Dit is een cijfertekst die versleuteld werd met sleutel AAYCEHMU volgens een versleutingsmethode die de Smithycode genoemd wordt. Bij het ontsleutelen van een cijfertekst volgens de Smithycode blijven alle karakters die geen letter zijn gewoon staan. Hoofdletters worden ontsleuteld als hoofdletters, en kleine letters als kleine letters.
De letters hebben een waarde die correspondeert met hun positie in het alfabet, waarbij we beginnen te tellen vanaf nul (A=0, B=1, C=2, …, Z=25). Als $$c_i$$ de waarde is van de $$i$$-de letter in de cijfertekst en $$s_i$$ de waarde van de $$i$$-de letter in de sleutel (waarbij na de laatste letter van de sleutel terug de eerste letter volgt), dan heeft de $$i$$-de letter van de klare tekst een waarde $$k_i$$ die berekend wordt als \[ k_i = (c_i + s_i)\ \mathrm{mod}\ 26 \] Hierbij staat $$a\ \mathrm{mod}\ b$$ voor de rest na gehele deling (quotiënt) van $$a \in \mathbb{N}$$ door $$b \in \mathbb{N}_0$$ (modulo12). De ontsleuteling van de cijfertekst kan dus voorgesteld worden als

Aan het scipt moet optioneel een sleutel $$s$$ kunnen doorgegeven worden als tweede argument. Als dat het geval is, dan moet het script de aaneenschakeling van de cursieve fragmenten eerst ontsleutelen volgens de Smithycode met sleutel $$s$$, voor die wordt uitgeschreven naar standaard uitvoer (stdout).
Het script moet de volgende foutafhandeling voorzien:
als niet één of twee argumenten worden doorgegeven, dan moet het script een gepaste boodschap uitschrijven naar stderr en eindigen met exit status 1
als het eerste argument geen gewoon leesbaar bestand is, dan moet het script een gepaste boodschap uitschrijven naar stderr en eindigen met exit status 2
als er een tweede argument wordt doorgegeven dat niet uit één of meer letters bestaat (zowel hoofdletters als kleine letters zijn toegelaten), dan moet het script een gepaste boodschap uitschrijven naar stderr en eindigen met exit status 3
Hierbij hebben we de foutafhandeling in volgorde van prioriteit opgelijst. De foutboodschap die correspondeert met elke exit status vind je terug in onderstaand voorbeeld.
In deze interactieve sessie gaan we ervan uit dat het tekstbestand document.txt13 zich in de huidige directory bevindt.
$ smithy document.txt14
Jaeiex Toshgp sac gre amq? Wfkadpmqzvz.
$ smithy document.txt15 AAYCEHMU
Jackie Fisher who are you? Dreadnought.
$ smithy document.txt16 AAYCEHMU xxx
smithy <FILE> [<KEY>]
$ echo $?
1
$ smithy unknown
smithy: invalid file: unknown
$ echo $?
2
$ smithy document.txt17 R2D2
smithy: invalid key: R2D2
$ echo $?
3
John Arbuthnot "Jacky" Fisher was een Britse admiraal die door rechter Smith bewonderd werd.

Hij was een drijvende kracht achter de ontwikkeling van snelle slagschepen met grote kanonnen en voorzitter van de ontwerpcommissie die het schetsontwerp maakte voor het eerste moderne slagschip, de HMS Dreadnought19.
In lijn met het thema van deze opgave, hebben we ook in de opgave zelf een boodschap verborgen. Klik hier om de boodschap zichtbaar te maken.