nntp2http.com
Posting
Suche
Optionen
Hilfe & Kontakt

Cancel-Lock und Perl

Von: Alexander Bartolich (alexander.bartolich@gmx.at) [Profil]
Datum: 30.06.2007 13:00
Message-ID: <f65d4e$kci$1@news.albasani.net>
Newsgroup: de.comm.software.newsserver
Am Ende von draft-ietf-usefor-cancel-lock-01.txt finden sich Beispiele:

Cancel-Lock: sha1:bNXHc6ohSmeHaRHHW56BIWZJt+4
Cancel-Key: sha1:aaaBBBcccDDDeeeFFF

Cancel-Lock: SHA1:H7/zsCUemvbvSDyARDaMs6AQu5s
Cancel-Key: sha1:chW8hNeDx3iNUsGBU6/ezDk88P4=  sha1:4srkWaRIzvK51ArAP

Cancel-Lock: sha1:JyEBL4w9/abCBuzCxMIE/E73GM4
sha1:2Bmg+zWaY1noRiCdy8k3IapwSDU
Cancel-Key: sha1:K4rkWRjRcXmIzvK51ArAP

Eine Überprüfung dieser Beispiele, d.h. die Berechnung der jeweiligen
Cancel-Lock anhand des Cancel-Key, sieht so aus:

#!/usr/bin/perl -w
use MIME::Base64();
use Digest::SHA1();
for my $key(
'aaaBBBcccDDDeeeFFF',
'chW8hNeDx3iNUsGBU6/ezDk88P4=',
'4srkWaRIzvK51ArAP',
'K4rkWRjRcXmIzvK51ArAP' )
{
my $lock = MIME::Base64::encode_base64(Digest::SHA1::sha1($key), '');
printf "\nCancel-Lock: sha1:%s\n", $lock;
printf "Cancel-Key: sha1:%s\n", $key;
}

Der Newsreader slrn implementiert Cancel-Locks mit Hilfe der Bibliothek
"canlock". Die Berechnung des Cancel-Key hängt dabei nur von Message-ID
und dem Inhalt einer Datei ab.

Ein Beispiel (mit kaputter Message-ID, örks):

http://groups.google.at/group/de.comm.provider.usenet/msg/e862290d5d0602eb
# Message-ID: <slrnf8b1hh.fj2.alexander.bartolich@esther.asyl>
# Cancel-Lock: sha1:1ZGxrKCMfOrk+l4F6Ho2xoyu2eo

Dieses hab ich später ersetzt:

http://groups.google.at/group/de.comm.provider.usenet/msg/2f212b0c62b59276
# Message-ID: <f640sp$dmp$1@news.albasani.net>
# Supersedes: <slrnf8b1hh.fj2.alexander.bartolich@esther.asyl>
# Cancel-Key: sha1:jAj7NiUc0rXh9tnKgY4VFdkOz/k

Der Cancel-Lock lässt sich wieder aus Cancel-Key berechnen, siehe erstes
Programm. Interessant ist aber, wie slrn den Cancel-Key bestimmt.

Die durch "cansecret_file" definierte Datei schrieb ich ein Wort
mit vier Buchstaben. Allerdings nimmt slrn jedes Byte der Datei,
inklusive dem Zeilenwechsel.

$ od -c ~/.cansecret
0000000   h   u   h   u  \n
0000005

Die Message-ID beinhaltet die spitzen Klammern.

MIME::Base64::encode hängt in der Voreinstellung eine Zeilenwechsel
an, dies muss man durch den zweiten Parameter ausschalten.

#!/usr/bin/perl -w
use MIME::Base64();
use Digest::SHA1();
use Digest::HMAC_SHA1();

my $key = "huhu\n";
my $data = '<slrnf8b1hh.fj2.alexander.bartolich@esther.asyl>';
my $digest = Digest::HMAC_SHA1::hmac_sha1($data, $key);
my $cancel_key = MIME::Base64::encode($digest, '');
my $cancel_lock = MIME::Base64::encode(Digest::SHA1::sha1(
$cancel_key, ''
));
printf "Cancel-Key: sha1:%s\n", $cancel_key;
printf "Cancel-Lock: sha1:%s\n", $cancel_lock;

--
news.albasani.net

[ Auf dieses Posting antworten ]

Antworten