Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
| playground:playground [2016/03/27 23:07] – Peter Faust (PFloodie) | playground:playground [2025/05/26 13:34] (aktuell) – Externe Bearbeitung 127.0.0.1 | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| - | ===== PlayGround ====== | + | ====== PlayGround ====== |
| - | [SN: Vorläufige Testversion 25.März 2016; Links zu aufgeführten Dateien und erklärenden Bildern | + | |
| - | | + | |
| - | - UPDATE: 26.März 2016 / 11:00 Winterzeit ;-> Heureka! Ich habe das mit den boxen gefunden! Aber die Formatierung der Boxen gefällt mir nicht: Alles irgendwie tota'l vermurkst. :-] | + | |
| - | - UPDATE: 26.März 2016 / 11:40 Winterzeit ;-> Der Hinweis auf " | + | |
| - | - UPDATE: 26.März 2016 / 17:45 Winterzeit ;-> Die Auflistung der benötigten Software und Scripte gefällt mir nicht. Auch kriege ich ein Inhaltsverzeichnis nicht hin. Egal. Heute Abend schaue ich nochmal drüber. | + | |
| - | - Update: 27.März 2016 / 13:00 Sommerzeit ;-> Die Scripte sind jetzt downloadbar, | + | |
| - | - UPDATE: 27.März 2016 / 13:15 Sommerzeit ;-> Info zu Mnenhy für Thunderbird/ | + | |
| - | - UPDATE: 27.März 2016 / 19:00 Sommerzeit ;-> Ein wenig Kosmetik in den Boxen und Danksagung hinzgefügt. Im Augenblick fällt mir nichts ein, was noch fehlen könnte. Tipps und Verbesserungsvorschläge sind natürlich willkommen, können aber erst in ein paar Tagen von mir erledigt werden: Mir raucht gerade der KoPF ... Nochmal vielen Dank für die bisherige Hilfe und die Tipps! :-) | + | |
| - | - UPDATE: 28.März 2016 / 1:05 Sommerzeit ;-> Boxen für die Dateien entfernt - das sieht wirklich besser aus. :-) Feierabend, Bettchen ruft! | + | |
| - | ====== Anleitung zur Headersignierung mit dem Hamster ====== | + | |
| - | + | ||
| - | Benötigt wird folgendes: | + | |
| - | + | ||
| - | - GPG4win [[https:// | + | |
| - | - Hamster http:// | + | |
| - | - Diverse Scripte: | + | |
| - | - hmessage_casesensitiv.hsm -> [[http:// | + | |
| - | - GnuPG_Usenet_Header.hsc | + | |
| - | - Autorun-Mail-News.hsc | + | |
| - | - AutoVerify_newsin_new.hsc | + | |
| - | + | ||
| - | Wenn GPG4win installiert wurde, sollte man sich zuerst gründlich einlesen. | + | |
| - | Die Dokumentation von GPG4win ist hier erhältlich -> [[https:// | + | |
| - | + | ||
| - | Nach dieser Anleitung einen PGP-Key erstellen, den wir später im Script zum signieren benötigen. | + | |
| - | + | ||
| - | Dieser (öffentliche) Key sollte natürlich auch auf einen Keyserver hochgeladen werden, damit andere die damit signierten Header auch überprüfen können. | + | |
| - | + | ||
| - | GPG4win bietet mit dem Programm " | + | |
| - | + | ||
| - | Als nächstes bringen wir dem Hamster das signieren bei. | + | |
| - | + | ||
| - | <WRAP center round alert 100%> | + | |
| - | + | ||
| - | Achtung! | + | |
| - | Das folgende Script erfordert das erstellen einer Textdatei, die das geheime Passwort zu dem zum signieren verwendeten PGP-Key in Klartext, also unverschlüsselt, | + | |
| - | + | ||
| - | </ | + | |
| - | + | ||
| - | + | ||
| - | <code - GnuPG_Usenet_Header.hsc> | + | |
| - | # | + | |
| - | # | + | |
| - | # | + | |
| - | ################################################################################### | + | |
| - | # | + | |
| - | # GnuPG_Usenet_Header.hsc | + | |
| - | # Autor: Michael Jaritz | + | |
| - | # Version vom 20.11.2010 | + | |
| - | # Abgeleitet von XPGPSig_GnuPG_Sign.hsc / Michael Jaritz | + | |
| - | # Signiert ein Posting in Hamster\NewsOut mit einem | + | |
| - | # X-PGP-Sig-Header mittels GnuPG (gpg.exe) | + | |
| - | # und setzt einen X-PGP-Hash-Header SHA1 (oder auch wahlweise MD5) | + | |
| - | # | + | |
| - | #################################################################################### | + | |
| - | + | ||
| - | # Falls der Hamster ein Playground ist: | + | |
| - | # #!load hclassic.hsm | + | |
| - | + | ||
| - | ################ | + | |
| - | + | ||
| - | # Ob das Script per Action oder per RunScript aufgerufen wird ist egal, | + | |
| - | # es wird immer das richtige ParamStr(x) genommen. | + | |
| - | varset( $sign_this, ParamStr(paramcount) ) | + | |
| - | + | ||
| - | # Test-Eintrage - nach kurzem Test deaktivieren | + | |
| - | # print(" | + | |
| - | # print(" | + | |
| - | # print(" | + | |
| - | # print(" | + | |
| - | # print(" | + | |
| - | # Test-Eintraege | + | |
| - | + | ||
| - | # zur Erzeugung von eindeutigen temporären Dateinamen | + | |
| - | var( $msg_number ) | + | |
| - | RE_Parse( $sign_this, " | + | |
| - | # fuer lokale Newsgruppen: | + | |
| - | if( $msg_number == "" | + | |
| - | $msg_number = ticks | + | |
| - | endif | + | |
| - | + | ||
| - | # Wie sollen die temporären Dateien heissen? | + | |
| - | varset( $pgp_tmp_to_sign, | + | |
| - | varset( $pgp_tmp_signed, | + | |
| - | + | ||
| - | # Test-Eintrage - nach kurzem Test deaktivieren | + | |
| - | # print(" | + | |
| - | # print(" | + | |
| - | # Test-Eintraege | + | |
| - | + | ||
| - | ########## Anfang individuelle Änderungen ########################################## | + | |
| - | + | ||
| - | # welche Header sollen signiert werden: | + | |
| - | varset( $x_signed_headers, | + | |
| - | + | ||
| - | # GnuPG-spezifisches | + | |
| - | varset( $pgppath, " | + | |
| - | # | + | |
| - | varset( $PGP_Command, | + | |
| - | # | + | |
| - | + | ||
| - | # Key-spezifisches | + | |
| - | # varset( $my_key, " | + | |
| - | # | + | |
| - | varset( $my_key, " | + | |
| - | # ^^^^^^^^^^^^^^^^ # hier den eigenen Key eintragen! RSA oder DSA | + | |
| - | # für RSA-Keys zB # varset( $my_key, " | + | |
| - | # für DSA-Keys zB # varset( $my_key, " | + | |
| - | + | ||
| - | var( $rsa_dsa, $my_ID ) | + | |
| - | RE_Parse( $my_key, " | + | |
| - | # ^^^^^^^^ | + | |
| - | # in $rsa_dsa steht nur " | + | |
| - | # in $my_ID steht der eigentliche Key (zur Angabe fuer --local-user | + | |
| - | + | ||
| - | if( $rsa_dsa == " | + | |
| - | varset( $PGP_clearsign, | + | |
| - | # varset( $PGP_clearsign, | + | |
| - | # | + | |
| - | elseif( $rsa_dsa == " | + | |
| - | + | ||
| - | varset( $PGP_clearsign, | + | |
| - | + | ||
| - | else | + | |
| - | print( "Der Key ist kein RSA- oder DSA-Key! Geht nicht." | + | |
| - | quit | + | |
| - | endif | + | |
| - | + | ||
| - | ########## Ende individuelle Änderungen ############################################ | + | |
| - | + | ||
| - | varset( $posting_to_sign, | + | |
| - | ArtLoad( $posting_to_sign, | + | |
| - | + | ||
| - | varset( $header_list, | + | |
| - | ListSetText( $header_list, | + | |
| - | + | ||
| - | varset( $body_list, ListAlloc() ) | + | |
| - | ListSetText( $body_list, ArtGetBody( $posting_to_sign) ) | + | |
| - | + | ||
| - | var( $i, $j, $line, $version, $hdrtmp0, $hdrtmp1, $hdrtmp2, $erg, $exitcode ) | + | |
| - | var($signedmessageflag, | + | |
| - | + | ||
| - | varset( $to_sign_list, | + | |
| - | ListAdd( $to_sign_list, | + | |
| - | + | ||
| - | $hdrtmp0 = $x_signed_headers | + | |
| - | while( RE_Extract( $hdrtmp0, " | + | |
| - | RE_Split( $hdrtmp0, ",", | + | |
| - | ListAdd( $to_sign_list, | + | |
| - | $hdrtmp0 = $hdrtmp2 | + | |
| - | endwhile | + | |
| - | ListAdd( $to_sign_list, | + | |
| - | ListAdd( $to_sign_list, | + | |
| - | + | ||
| - | $i = 0 | + | |
| - | while( $i < ListCount($body_list) ) | + | |
| - | ListAdd( $to_sign_list, | + | |
| - | inc($i) | + | |
| - | endwhile | + | |
| - | ListAdd( $to_sign_list, | + | |
| - | + | ||
| - | ListSave( $to_sign_list, | + | |
| - | + | ||
| - | print( $PGP_Command + $PGP_clearsign ) # nur zum testen | + | |
| - | $erg = Execute( $PGP_Command + $PGP_clearsign, | + | |
| - | print(" | + | |
| - | + | ||
| - | varset( $signed_list, | + | |
| - | varset( $h_count, 2 ) | + | |
| - | varset( $signhash, " | + | |
| - | # varset( $signhash, " | + | |
| - | ListLoad( $signed_list, | + | |
| - | $i = 0 | + | |
| - | $signedmessageflag = false | + | |
| - | $beginsignatureflag = false | + | |
| - | $endsignatureflag = false | + | |
| - | $versionflag = false | + | |
| - | while( $i < ListCount($signed_list) ) | + | |
| - | $line = ListGet( $signed_list, | + | |
| - | if( $i == 0 ) | + | |
| - | if( RE_Match( $line, " | + | |
| - | inc($i) | + | |
| - | if( RE_Match( ListGet( $signed_list, | + | |
| - | $signedmessageflag = true | + | |
| - | endif | + | |
| - | if( RE_Match( ListGet( $signed_list, | + | |
| - | RE_Parse( ListGet( $signed_list, | + | |
| - | inc($i) | + | |
| - | inc($h_count) | + | |
| - | if( RE_Match( ListGet( $signed_list, | + | |
| - | $signedmessageflag = true | + | |
| - | endif | + | |
| - | endif | + | |
| - | endif | + | |
| - | endif | + | |
| - | if( $i > $h_count ) | + | |
| - | if( RE_Match( $line, " | + | |
| - | $beginsignatureflag = true | + | |
| - | inc($i) | + | |
| - | if( RE_Match( ListGet( $signed_list, | + | |
| - | $versionflag = true | + | |
| - | $version = Replace( ListGet( $signed_list, | + | |
| - | $version = Replace( $version, " ", " | + | |
| - | inc($i) | + | |
| - | if( RE_Match( ListGet( $signed_list, | + | |
| - | $j = $i + 1 | + | |
| - | if( RE_Match( ListGet( $signed_list, | + | |
| - | $endsignatureflag = true | + | |
| - | endif | + | |
| - | endif | + | |
| - | endif | + | |
| - | endif | + | |
| - | endif | + | |
| - | inc($i) | + | |
| - | endwhile | + | |
| - | + | ||
| - | if( $signedmessageflag && $beginsignatureflag && $endsignatureflag && $versionflag ) | + | |
| - | if( $signhash != " | + | |
| - | ListAdd( $header_list, | + | |
| - | endif | + | |
| - | ListAdd( $header_list, | + | |
| - | for( $i, $j, ListCount($signed_list) - 2, 1 ) | + | |
| - | ListAdd( $header_list, | + | |
| - | endfor | + | |
| - | ListAdd( $header_list, | + | |
| - | for( $i, 0, ListCount($body_list) - 1, 1 ) | + | |
| - | ListAdd( $header_list, | + | |
| - | endfor | + | |
| - | ListSave( $header_list, | + | |
| - | endif | + | |
| - | + | ||
| - | ListFree( $to_sign_list ) | + | |
| - | ListFree( $body_list ) | + | |
| - | ListFree( $header_list ) | + | |
| - | ArtFree( $posting_to_sign ) | + | |
| - | ListFree( $signed_list ) | + | |
| - | + | ||
| - | # löschen der temporären Dateien | + | |
| - | if( FileExists( $pgp_tmp_to_sign ) ) | + | |
| - | FileDelete( $pgp_tmp_to_sign ) | + | |
| - | endif | + | |
| - | if( FileExists( $pgp_tmp_signed ) ) | + | |
| - | FileDelete( $pgp_tmp_signed ) | + | |
| - | endif | + | |
| - | + | ||
| - | quit | + | |
| - | </ | + | |
| - | + | ||
| - | markieren, kopieren und in einem Editor als GnuPG_Usenet_Header.hsc abspeichern. | + | |
| - | <WRAP center round important 100%> | + | |
| - | Achtung! Unbedingt auf die Dateiendung achten! Sie muss .hsc lauten! Manche Editoren vergeben automatisch ein .txt als Endung, was dann GnuPG_Usenet_Header.hsc.txt ergibt! | + | |
| - | </ | + | |
| - | + | ||
| - | Diese Datei wird im Hamster im Menü " | + | |
| - | http:// | + | |
| - | + | ||
| - | Anschließend benötigt der Hamster noch einen Eintrag in der Datei, welche den automatischen Versand und | + | |
| - | Empfang von Mail und News regelt. Folgendes kurzes Script soll als Beispiel dienen: | + | |
| - | + | ||
| - | <code - Autorun-Mail-News.hsc> | + | |
| - | #!load hamster.hsm | + | |
| - | + | ||
| - | AtClear | + | |
| - | + | ||
| - | # AtAdd Beispile-Eintrag: | + | |
| - | # AtAdd ( Mail, " | + | |
| - | # Der Eintrag bewirkt ein automatisches abholen und versenden | + | |
| - | # aller eMail ueber die im Menue eingetragenen Mailserver. | + | |
| - | # Dies geschieht 24 Stunden lang, alle 15 Minuten. | + | |
| - | # Gleiches gilt fuer den Eintrag AtAdd ( News, ...) alle 5 Minuten. | + | |
| - | # Nutzungsbedingungen des Providers beachten und ggfls. anpassen! | + | |
| - | # Auch sind die Anzahl der Threads im Hamster nach den Vorgaben des | + | |
| - | # Newsproviders zu bachten! 2 Threads reichen im allgemeinen aus. | + | |
| - | + | ||
| - | AtAdd ( Mail, " | + | |
| - | AtAdd ( News, " | + | |
| - | # AtAdd ( Purge, " | + | |
| - | AtExecute | + | |
| - | # Quit | + | |
| - | + | ||
| - | # Anfang Sub-News | + | |
| - | Sub News | + | |
| - | HamWaitIdle | + | |
| - | + | ||
| - | # HamNewsPull Beispiel-Eintrag: | + | |
| - | # HamNewsPull (" | + | |
| - | + | ||
| - | HamNewsPull(" | + | |
| - | HamNewsPull(" | + | |
| - | + | ||
| - | # HamNewsPost Beispiel-Eintrag: | + | |
| - | # HamNewsPost (" | + | |
| - | + | ||
| - | HamNewsPost(" | + | |
| - | HamNewsPost(" | + | |
| - | + | ||
| - | HamWaitIdle | + | |
| - | EndSub | + | |
| - | # Ende Sub-News | + | |
| - | + | ||
| - | HamNewsJobsClear | + | |
| - | HamNewsJobsPostDef | + | |
| - | HamNewsJobsPullDef | + | |
| - | HamNewsJobsStart | + | |
| - | + | ||
| - | HamWaitIdle | + | |
| - | + | ||
| - | # Anfang Sub-Mail | + | |
| - | # Im Beispiel ist nur jeweils ein Server fuer POP3 und SMTP | + | |
| - | # eingerichtet. Wenn mehrere Postfaecher gewuenscht sind, oder | + | |
| - | # bei mehreren genutzten Absender-Adressen die jeweiligen Post- | + | |
| - | # faecher genutzt werden sollen, dann bitte in den Hamsterguppen | + | |
| - | # nach einer speziellen Loesung fragen! Dies hier ist lediglich | + | |
| - | # ein einfaches Beispiel zur Demonstration und Fehlersuche! | + | |
| - | + | ||
| - | Sub Mail | + | |
| - | HamWaitIdle | + | |
| - | + | ||
| - | HamFetchMail (" | + | |
| - | HamSendMailAuth (" | + | |
| - | + | ||
| - | HamWaitIdle | + | |
| - | Endsub | + | |
| - | # Ende Sub-Mail | + | |
| - | + | ||
| - | # Anfang Aufruf des Scriptes zur Headersignierung | + | |
| - | # Aktuelles und funktionierendes Script: | + | |
| - | + | ||
| - | RunScript( " | + | |
| - | + | ||
| - | # Ende Aufruf des Scriptes zur Headersignierung | + | |
| - | + | ||
| - | quit | + | |
| - | </ | + | |
| - | + | ||
| - | Wie schon oben angemerkt: Markieren, kopieren und in einem Editor als Autorun-Mail-News.hsc abspeichern. | + | |
| - | <WRAP center round important 100%> | + | |
| - | Achtung! Unbedingt auf die Dateiendung achten! Sie muss .hsc lauten! Manche Editoren vergeben automatisch ein .txt als Endung, was dann Autorun-Mail-News.hsc.txt ergibt! | + | |
| - | </ | + | |
| - | + | ||
| - | Zum signieren der Header war es das eigentlich schon. | + | |
| - | + | ||
| - | Jetzt geht es an die Überprüfung signierter Header: | + | |
| - | Dazu werden einfach nur die folgenden Zeilen | + | |
| - | + | ||
| - | <code - AutoVerify_newsin_new.hsc> | + | |
| - | #!hs2 | + | |
| - | #!load hstrings.hsm | + | |
| - | #!load hmessage_casesensitiv.hsm | + | |
| - | + | ||
| - | #################################################################################### | + | |
| - | # | + | |
| - | # AutoVerify_newsin_new.hsc | + | |
| - | # Autor: Michael Jaritz (sub getAlgoFormHash von Alfred Peters) | + | |
| - | # Version vom 31.12.2012 | + | |
| - | # Stand: 29.07.2015 | + | |
| - | # | + | |
| - | # Schaut sich Postings waehrend der Newsin-Action an. | + | |
| - | # Falls ein Header X-PGP-Sig existent ist wird versucht diesen zu verifizieren. | + | |
| - | # Der eventuell vom Signierenden gesetzte Header X-PGP-Hash wird dabei nicht beachtet. | + | |
| - | # Der benutzte Hash (MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224) wird aus der | + | |
| - | # Signatur ermittelt und in einem Header X-PGP-Hash-Info notiert. | + | |
| - | # Das Ergebnis wird in einem Header X-MyCheck-PGP im Klartext notiert. | + | |
| - | # Das Ergebnis wird in einem Header X-PGP-V utf8-codiert notiert. | + | |
| - | # Ob man sich im Newsreader X-MyCheck-PGP oder X-PGP-V anzeigen laesst, hängt vom | + | |
| - | # benutzten Newsreader ab. | + | |
| - | # | + | |
| - | # Was braucht das Script? | + | |
| - | # | + | |
| - | # 1. HamsterClassic | + | |
| - | # | + | |
| - | # 2. GnuPG, siehe http:// | + | |
| - | # | + | |
| - | # 3. Das Modul hmessage_casesensitiv.hsm, | + | |
| - | # siehe http:// | + | |
| - | # das ist die hmessage.hsm die beim Hamster dabei ist, nur sind die | + | |
| - | # | + | |
| - | # | + | |
| - | # 4. Ein Unterverzeichnis namens " | + | |
| - | # | + | |
| - | # | + | |
| - | #################################################################################### | + | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | ########## BEGINN individuelle Aenderungen ########################################## | + | |
| - | + | ||
| - | # Wie muss GnuPG aufgerufen werden? | + | |
| - | + | ||
| - | # fuer GnuPG1.4.x, zB | + | |
| - | #varset( $PGP_Command, | + | |
| - | # fuer GnuPG2.0.x, zB | + | |
| - | #varset( $PGP_Command, | + | |
| - | + | ||
| - | # fuer GnuPG2.0.x unter Win7 (x64) und höher | + | |
| - | # varset( $PGP_Command, | + | |
| - | + | ||
| - | # fuer GnuPG2.0.x unter Vista | + | |
| - | varset( $PGP_Command, | + | |
| - | + | ||
| - | #varset( $PGP_Command, | + | |
| - | #print( ParamStr( ParamCount ) ) # nur zum testen | + | |
| - | + | ||
| - | ########## ENDE individuelle Aenderungen ############################################ | + | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | # Allerlei andere Variablen: | + | |
| - | varset( $hdrtmp0, $hdrtmp1, $hdrtmp2, " | + | |
| - | var( $xpgpsig_all, | + | |
| - | var( $i, $j, $k, $line, $erg, $exitcode, $act_hash, $x_pgp_hash, | + | |
| - | varset( $dummy, $errsig, " | + | |
| - | var( $art, $artall, $artheader, $artbody, $set_resultQP, | + | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | $art = ArtAlloc | + | |
| - | ArtLoad( $art, ParamStr( ParamCount ) ) | + | |
| - | $artheader = ArtGetHeaders( $art ) | + | |
| - | # Falls Artikel einen X-PGP-Sig-Header enthaelt... | + | |
| - | if( RE_Match( $artheader, " | + | |
| - | # ...und noch keinen X-MyCheck-PGP-Header enthaelt | + | |
| - | if( ! RE_Match( $artheader, " | + | |
| - | + | ||
| - | $Xref = ArtGetHeader( $art, " | + | |
| - | $Xref = Replace( $Xref, " ", "", | + | |
| - | $Xref = Replace( $Xref, " | + | |
| - | $Xref = Replace( $Xref, ":", | + | |
| - | + | ||
| - | # Mit welchen temporaeren Dateien soll GnuPG arbeiten? | + | |
| - | varset( $pgp_tmp_signed, | + | |
| - | varset( $pgp_tmp_log, | + | |
| - | varset( $pgp_tmp_status, | + | |
| - | # varset( $pgp_tmp_ready, | + | |
| - | + | ||
| - | # die Optionen und Files mit denen GnuPG aufgerufen wird | + | |
| - | varset( $PGP_verify, | + | |
| - | + | ||
| - | # Die folgende Zeile maskiert die Pfade, welche Leerzeichen enthalten, zu den temporären Dateien. | + | |
| - | # Beispiel: " | + | |
| - | # Das Ergebnis funktioniert über die Konsole(!) - jedoch *nicht* aus diesem Script! " | + | |
| - | # | + | |
| - | + | ||
| - | $artall = ArtGetText( $art ) | + | |
| - | $artbody = ArtGetBody( $art ) | + | |
| - | # Liste mit den moeglichen Hashes erstellen | + | |
| - | varset( $hash_list, ListAlloc() ) | + | |
| - | ListAdd( $hash_list, " | + | |
| - | ListAdd( $hash_list, " | + | |
| - | ListAdd( $hash_list, " | + | |
| - | ListAdd( $hash_list, " | + | |
| - | ListAdd( $hash_list, " | + | |
| - | ListAdd( $hash_list, " | + | |
| - | ListAdd( $hash_list, " | + | |
| - | + | ||
| - | # Das Flag $is_verified wird true wenn | + | |
| - | # GnuPG eine brauchbare Meldung entlockt werden konnte | + | |
| - | varset( $is_verified, | + | |
| - | + | ||
| - | # In der Liste $sig_list wird die Signatur eingelesen | + | |
| - | # Beispiel: | + | |
| - | # X-PGP-Sig: 2.6.3ia From, | + | |
| - | # | + | |
| - | # | + | |
| - | # | + | |
| - | # | + | |
| - | # =jPEf | + | |
| - | varset( $sig_list, ListAlloc() ) | + | |
| - | + | ||
| - | # In $body_list kommt der Text des Postings | + | |
| - | varset( $body_list, ListAlloc() ) | + | |
| - | + | ||
| - | # In $test_asc wird die Datei gebaut, die | + | |
| - | # letztendlich GnuPG zum verifizieren gegeben wird | + | |
| - | varset( $test_asc, ListAlloc() ) | + | |
| - | + | ||
| - | # in $result_list wird der GnuPG-Output eingelesen | + | |
| - | varset( $result_list, | + | |
| - | + | ||
| - | # in $status_list wird der GnuPG-Status eingelesen | + | |
| - | varset( $status_list, | + | |
| - | + | ||
| - | # Je Posting werden zwei Listen gebraucht, weil es | + | |
| - | # zwar ArtGetBody gibt aber nicht ListGetbody, | + | |
| - | # wird gebraucht um Casesensitiv zu bleiben | + | |
| - | varset( $signed_posting_art, | + | |
| - | varset( $signed_posting_list, | + | |
| - | + | ||
| - | # das Posting in die zwei Listen packen | + | |
| - | ListSetText( $signed_posting_list, | + | |
| - | ArtSetText( $signed_posting_art, | + | |
| - | + | ||
| - | # Inhalte des Headers X-PGP-Sig einlesen | + | |
| - | $xpgpsig_all = MsgGetHeader( $signed_posting_list, | + | |
| - | + | ||
| - | # Inhalte des Header X-PGP-Sig in $sig_list schreiben | + | |
| - | ListSetText( $sig_list, $xpgpsig_all ) | + | |
| - | # 1.Zeile der Signatur, zB " | + | |
| - | # in $xpgpsig_line1 packen | + | |
| - | $xpgpsig_line1 = ListGet( $sig_list, 0 ) | + | |
| - | + | ||
| - | + | ||
| - | varset( $getAlgoFormHash_Info_str, | + | |
| - | # von Alfred: | + | |
| - | varset( $trueHash, getAlgoFormHash( $sig_list ) ) | + | |
| - | # Print( " | + | |
| - | # von Alfred: | + | |
| - | + | ||
| - | + | ||
| - | # Version und signierte Header trennen und in $version bzw. $x_signed_headers packen | + | |
| - | RE_Parse( $xpgpsig_line1, | + | |
| - | + | ||
| - | # die Datei zum Verifizieren: | + | |
| - | ListAdd( $test_asc, " | + | |
| - | ListAdd( $test_asc, "Hash: " + $trueHash ) | + | |
| - | # ListAdd( $test_asc, "" | + | |
| - | ListAdd( $test_asc, "" | + | |
| - | ListAdd( $test_asc, " | + | |
| - | + | ||
| - | # Die Einzelheader aus X-Signed-Headers holen | + | |
| - | $hdrtmp0 = $x_signed_headers | + | |
| - | while( RE_Extract( $hdrtmp0, " | + | |
| - | RE_Split( $hdrtmp0, ",", | + | |
| - | ListAdd( $test_asc, $hdrtmp1 + ": " + MsgGetHeader( $signed_posting_list, | + | |
| - | $hdrtmp0 = $hdrtmp2 | + | |
| - | endwhile | + | |
| - | + | ||
| - | # den letzten Header setzen | + | |
| - | if( $hdrtmp2 != "" | + | |
| - | ListAdd( $test_asc, $hdrtmp2 + ": " + MsgGetHeader( $signed_posting_list, | + | |
| - | endif | + | |
| - | + | ||
| - | # Leerzeile vor den Bodytext setzen | + | |
| - | ListAdd( $test_asc, "" | + | |
| - | + | ||
| - | # Den Bodytext einsetzen | + | |
| - | ListSetText( $body_list, ArtGetBody( $signed_posting_art ) ) | + | |
| - | $k = 0 | + | |
| - | while( $k < ListCount($body_list) ) | + | |
| - | $line = ListGet( $body_list, $k ) | + | |
| - | if( RE_Match( $line, " | + | |
| - | $line = replace( $line, " | + | |
| - | endif | + | |
| - | ListAdd( $test_asc, $line ) | + | |
| - | inc( $k ) | + | |
| - | endwhile | + | |
| - | + | ||
| - | # Leerzeile hinter den Bodytext setzen | + | |
| - | ListAdd( $test_asc, "" | + | |
| - | ListAdd( $test_asc, " | + | |
| - | ListAdd( $test_asc, " | + | |
| - | ListAdd( $test_asc, "" | + | |
| - | + | ||
| - | # Die Signatur selbst einsetzen | + | |
| - | # | + | |
| - | # | + | |
| - | # | + | |
| - | # | + | |
| - | # =jPEf | + | |
| - | $k = 1 | + | |
| - | while( $k < ListCount($sig_list) ) | + | |
| - | $line = ListGet( $sig_list, $k ) | + | |
| - | RE_Parse( $line, " | + | |
| - | ListAdd( $test_asc, $sigline ) | + | |
| - | inc( $k ) | + | |
| - | endwhile | + | |
| - | ListAdd( $test_asc, " | + | |
| - | + | ||
| - | # die Datei zum Verifizieren fertig gebaut: | + | |
| - | #-----BEGIN PGP SIGNED MESSAGE----- | + | |
| - | #Hash: MD5 | + | |
| - | # | + | |
| - | # | + | |
| - | #From: Klaus Fischer < | + | |
| - | # | + | |
| - | #Subject: Datum und Uhrzeit im Posting | + | |
| - | #Approved: contact-2008-17@dnqmail.priggish.de | + | |
| - | # | + | |
| - | #Date: Sat, 03 May 2008 18:54:43 +0200 | + | |
| - | # | + | |
| - | #Hallo, | + | |
| - | # | + | |
| - | #kann mir jemand erkl?n, wie ich es hinbekomme, da?sowohl das Datum | + | |
| - | #als auch die Uhrzeit in meinem Posting erscheint? Bei mir ist nur die | + | |
| - | #Uhrzeit zu sehen. | + | |
| - | #Ich benutze den Thunderbird. | + | |
| - | # | + | |
| - | #Gru? | + | |
| - | # | + | |
| - | #Klaus Fischer | + | |
| - | # | + | |
| - | #-----BEGIN PGP SIGNATURE----- | + | |
| - | #Version: 2.6.3ia | + | |
| - | # | + | |
| - | # | + | |
| - | # | + | |
| - | # | + | |
| - | # | + | |
| - | #=jPEf | + | |
| - | #-----END PGP SIGNATURE----- | + | |
| - | + | ||
| - | # Jetzt verifizieren | + | |
| - | VerifyWithGnuPG_new # siehe Sub | + | |
| - | + | ||
| - | # Falls verifiziert ist Ergebnis ins HamsterLog schreiben | + | |
| - | if( $is_verified ) | + | |
| - | print( $set_result ) | + | |
| - | else | + | |
| - | $set_result = $pgp_tmp_signed + " konnte kein Ergebnis erzielen, Sorry" | + | |
| - | print( $set_result ) | + | |
| - | $set_resultB64 = " | + | |
| - | endif | + | |
| - | + | ||
| - | ArtAddHeader( $art, " | + | |
| - | ArtAddHeader( $art, " | + | |
| - | ArtAddHeader( $art, " | + | |
| - | ArtSave( $art, ParamStr( ParamCount ) ) | + | |
| - | + | ||
| - | # Listen freigeben | + | |
| - | ArtFree( $signed_posting_art ) | + | |
| - | ListFree( $signed_posting_list ) | + | |
| - | ListFree( $hash_list ) | + | |
| - | ListFree( $test_asc ) | + | |
| - | ListFree( $sig_list ) | + | |
| - | ListFree( $body_list ) | + | |
| - | ListFree( $result_list ) | + | |
| - | ListFree( $status_list ) | + | |
| - | + | ||
| - | + | ||
| - | # temporaere Dateien loeschen | + | |
| - | if( FileExists( $pgp_tmp_signed ) ) | + | |
| - | FileDelete( $pgp_tmp_signed ) # zum testen auskommentiert | + | |
| - | endif | + | |
| - | if( FileExists( $pgp_tmp_log ) ) | + | |
| - | FileDelete( $pgp_tmp_log ) # zum testen auskommentiert | + | |
| - | endif | + | |
| - | if( FileExists( $pgp_tmp_status ) ) | + | |
| - | FileDelete( $pgp_tmp_status ) # zum testen auskommentiert | + | |
| - | endif | + | |
| - | endif | + | |
| - | endif | + | |
| - | + | ||
| - | ArtFree( $art ) | + | |
| - | + | ||
| - | quit | + | |
| - | + | ||
| - | + | ||
| - | sub VerifyWithGnuPG_new | + | |
| - | ListSave( $test_asc, $pgp_tmp_signed ) | + | |
| - | # GnuPG-Aufruf | + | |
| - | print( $PGP_Command + " " + $pgp_verify ) # nur zum testen | + | |
| - | # Execute( $PGP_Command + " " + $pgp_verify, | + | |
| - | $exec_return = Execute( $PGP_Command + " " + $pgp_verify, | + | |
| - | print(" | + | |
| - | + | ||
| - | # Ergebnis von $gpg_return = 0 --> korrekte Signatur | + | |
| - | # Ergebnis von $gpg_return = 1 --> FALSCHE oder unkorrekte Signatur | + | |
| - | + | ||
| - | # ########### Original Michael ############## | + | |
| - | # do # ***** <--- In dieser Schleife bleibt der Hamster " | + | |
| - | # if( FileExists( $pgp_tmp_ready ) ) # ***** <--- Diese Datei wird in disem Script *nicht* erstellt! | + | |
| - | # print(" | + | |
| - | # | + | |
| - | # | + | |
| - | # | + | |
| - | # print(" | + | |
| - | # sleep(10) | + | |
| - | # continue | + | |
| - | # loop # ***** <--- In dieser Schleife bleibt der Hamster " | + | |
| - | # $gpg_returncode = read_gpg_returncode | + | |
| - | # ########### Original Michael ############## | + | |
| - | + | ||
| - | $gpg_returncode = $gpg_return | + | |
| - | print $gpg_returncode + " ******************************** $gpg_returncode **************" | + | |
| - | if( $gpg_returncode == 0 || $gpg_returncode == 1 ) | + | |
| - | $is_verified = true | + | |
| - | SetTheHeader_new | + | |
| - | endif | + | |
| - | print $is_verified + " **** HIER BIN ICH! *** !HALLO! *** HIER GUCKEN! ****" | + | |
| - | + | ||
| - | endsub | + | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | sub SetTheHeader_new | + | |
| - | # Das Log von GnuPG in Liste laden | + | |
| - | ListLoad( $result_list, | + | |
| - | varset( $subi, 0 ) | + | |
| - | var( $var1, $var2, $var3, $var4, $var5 ) | + | |
| - | varset( $date_regexp, | + | |
| - | # var `-1-? | + | |
| - | + | ||
| - | # gpg: WARNING: digest algorithm MD5 is deprecated | + | |
| - | # gpg: please see http:// | + | |
| - | # gpg: WARNING: This key is not certified with a trusted signature! | + | |
| - | # gpg: There is no indication that the signature belongs to the owner. | + | |
| - | + | ||
| - | varset( $dont_want_to_see, | + | |
| - | + | ||
| - | + | ||
| - | # | + | |
| - | # Korrekte Unterschrift von "Peter Faust < | + | |
| - | # WARNUNG: Dieser Schlüssel trägt keine vertrauenswürdige Signatur! | + | |
| - | # Es gibt keinen Hinweis, daß die Signatur wirklich dem vorgeblichen Besitzer gehört. | + | |
| - | # Haupt-Fingerabdruck | + | |
| - | + | ||
| - | $dont_want_to_see = $dont_want_to_see + " | + | |
| - | + | ||
| - | + | ||
| - | # GnuPG-Log durchlaufen | + | |
| - | while( $subi < ListCount( $result_list ) ) | + | |
| - | $line = ListGet( $result_list, | + | |
| - | $line = Replace( $line, "gpg: ", "", | + | |
| - | if( $subi == 0 ) | + | |
| - | # $is_verified = true | + | |
| - | if( RE_Match( $line, $date_regexp ) ) | + | |
| - | RE_Parse( $line, $date_regexp, | + | |
| - | $line = $var1 + $var3 + " | + | |
| - | endif | + | |
| - | $set_result = $line | + | |
| - | $set_resultB64 = " | + | |
| - | else | + | |
| - | if( ! RE_Match( $line , $dont_want_to_see ) ) | + | |
| - | if( RE_Match( $line, " | + | |
| - | if( ! RE_Match( $line , $dont_want_to_see ) ) | + | |
| - | $set_result = $set_result + $CRLF + " | + | |
| - | $set_resultB64 = $set_resultB64 + " ->" + $CRLF + " | + | |
| - | endif | + | |
| - | else | + | |
| - | $set_result = $set_result + $CRLF + " | + | |
| - | $set_resultB64 = $set_resultB64 + " ->" + $CRLF + " | + | |
| - | endif | + | |
| - | endif | + | |
| - | endif | + | |
| - | inc( $subi ) | + | |
| - | endwhile | + | |
| - | endsub | + | |
| - | + | ||
| - | + | ||
| - | sub read_gpg_returncode | + | |
| - | # Das Statusfile von GnuPG ($pgp_tmp_status) in Liste laden | + | |
| - | ListLoad( $status_list, | + | |
| - | return( ListGet( $status_list, | + | |
| - | endsub | + | |
| - | + | ||
| - | sub read_gpg_status_line( $line_nr ) | + | |
| - | return( ListGet( $status_list, | + | |
| - | endsub | + | |
| - | + | ||
| - | + | ||
| - | sub getAlgoFormHash( $lPGP ) | + | |
| - | varset $i, 1 | + | |
| - | varset $Signature, $line, "" | + | |
| - | varset $hash, "< | + | |
| - | while( $i < ListCount($lPGP) ) | + | |
| - | $line = ListGet( $lPGP, $i ) | + | |
| - | inc( $i ) | + | |
| - | if ( Re_Match( $line, " | + | |
| - | continue() | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | if ( $Signature <> "" | + | |
| - | break() | + | |
| - | | + | |
| - | endwhile | + | |
| - | $i= 1 | + | |
| - | varset $PacketTag, ord( copy( $Signature, $i, 1 ) ) | + | |
| - | if( 0=($PacketTag & 0x80) ) | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | endif | + | |
| - | varset $headerLength, | + | |
| - | if( 0=($PacketTag & 0x40) ) | + | |
| - | # | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | else | + | |
| - | # | + | |
| - | | + | |
| - | | + | |
| - | if $packetLength < 192 | + | |
| - | $headerLength = 2 | + | |
| - | | + | |
| - | $headerLength = 3 | + | |
| - | | + | |
| - | $headerLength = 2 | + | |
| - | warning( " | + | |
| - | | + | |
| - | $headerLength = 6 | + | |
| - | | + | |
| - | | + | |
| - | endif | + | |
| - | $i = $i + $headerLength | + | |
| - | + | ||
| - | if( $PacketTag = 2 ) | + | |
| - | | + | |
| - | else | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | endif | + | |
| - | + | ||
| - | if( $PacketTag = 3 ) | + | |
| - | # | + | |
| - | | + | |
| - | | + | |
| - | elseif( $PacketTag = 4 ) | + | |
| - | # | + | |
| - | | + | |
| - | | + | |
| - | else | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | endif | + | |
| - | + | ||
| - | $hash = iCase( $PacketTag, 1, " | + | |
| - | 4, " | + | |
| - | 8, " | + | |
| - | + | ||
| - | $getAlgoFormHash_Info_str = $getAlgoFormHash_Info_str + $hash | + | |
| - | return $hash | + | |
| - | endsub | + | |
| - | </ | + | |
| - | + | ||
| - | markiert, kopiert und in einem Editor als AutoVerify_newsin_new.hsc abgespeichert. | + | |
| - | <WRAP center round important 100%> | + | |
| - | Achtung! Unbedingt auf die Dateiendung achten! Sie muss .hsc lauten! Manche Editoren vergeben automatisch ein .txt als Endung, was dann AutoVerify_newsin_new.hsc.txt ergibt! | + | |
| - | </ | + | |
| - | + | ||
| - | Diese Datei wird nun ebenfalls in den automatischen Abläufen, diesmal jedoch beim Feld " | + | |
| - | http:// | + | |
| - | + | ||
| - | Fertig. | + | |
| - | + | ||
| - | Beim nächsten laden von neuen Newsbeiträgen wird der Hamster die Header überprüfen und ein paar zusätzliche | + | |
| - | Header in die Beiträge schreiben. Diese kann man sich dann mit einem passenden Newsreader anzeigen lassen. | + | |
| - | + | ||
| - | Als Beispiel soll hier Thunderbird genannt werden, der mit der Erweiterung Mnenhy genau das (und noch mehr) leistet. | + | |
| - | Weiter sind Claws Mail und Gnus/Emacs (jeweils für Windows) zu nennen, die es leicht machen diese Header anzuzeigen. | + | |
| - | + | ||
| - | Wenn alle geforderten Einträge korrekt gemacht wurden, dann sollte der Hamster ab sofort jeden an ihn geschickten Beitrag | + | |
| - | mit signierten Headern ins weltweite Nutznetz verschicken und jeden empfangenen signierten Beitrag mit den Headern versehen: | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | Diese kann man sich dann in den oben genannten Newsreadern anzeigen lassen. | + | |
| - | + | ||
| - | <WRAP center round tip 100%> | + | |
| - | Die Newsreader Thunderbird und Seamonkey können das AddOn Mnenhy nutzen, um diese Header anzuzeigen: | + | |
| - | | + | |
| - | | + | |
| - | + | ||
| - | + | ||
| - | Für Gnus/Emacs sorgt folgender Eintrag in der Datei gnus.el für die Darstellung der Headereinträge: | + | |
| - | ;;;; Angezeigte Header beim Lesen | + | |
| - | (setq gnus-visible-headers | + | |
| - | " | + | |
| - | </ | + | |
| - | + | ||
| - | + | ||
| - | Bei Problemen, Fragen oder sonstigen Hinweisen sollte die Gruppe hamster.de.misc genutzt werden. | + | |
| - | + | ||
| - | Erfolgreich getestet wurden alle Scripte von mir auf mehreren Computern mit Windows XP Prof. und Windows Vista Business. | + | |
| - | Allerdings haben weitere Nutzer mit Windows 7, 8, 8.1 und 10 ebenfalls keine Probleme gemeldet. | + | |
| - | + | ||
| - | Abschließend sei noch mal eindringlich zu einem gewissenhaften editieren der persönlichen Eintragungen geraten! | + | |
| - | In den Scripten befinden sich meine persönlichen PGP-Keys, die natürlich angepasst werden müssen: Mit meinen Keys | + | |
| - | kann schließlich nur ich signieren. LOL | + | |
| - | + | ||
| - | In diesem Sinne: Viel Spaß beim signieren und verifizieren von Headern! | + | |
| - | + | ||
| - | <WRAP center round tip 60%> | + | |
| - | Zum Schluß noch ein paar Danksagungen an die vielen Helfer, die an den diversen Scripten mitgewirkt haben: Michael Jaritz, Alfred Peters, Wolfgang Jäth, Ulrich F. Heidenreich, | + | |
| - | </ | + | |