Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
| playground:playground [2016/03/26 16:31] – 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 " | ||
| - | schon besser aus. Mittagessen! :-] | ||
| - | ====== 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. | ||
| - | Die folgende Datei | ||
| - | |||
| - | <WRAP center round box 100%> | ||
| - | < | ||
| - | #!hs2 | ||
| - | # | ||
| - | # | ||
| - | ################################################################################### | ||
| - | # | ||
| - | # 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%> | ||
| - | 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: | ||
| - | |||
| - | <WRAP center round info 100%> | ||
| - | < | ||
| - | #!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%> | ||
| - | 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 | ||
| - | |||
| - | <WRAP center round info 100%> | ||
| - | < | ||
| - | #!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(" | ||
| - | # | ||
| - | # break | ||
| - | # endif | ||
| - | # 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() | ||
| - | endif | ||
| - | | ||
| - | | ||
| - | if ( $Signature <> "" | ||
| - | break() | ||
| - | endif | ||
| - | 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( " | ||
| - | else | ||
| - | $headerLength = 6 | ||
| - | endif | ||
| - | | ||
| - | 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%> | ||
| - | 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. | ||
| - | |||
| - | 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! | ||