Вверх ↑
Ответов: 65
Рейтинг: 2
#1: 2012-02-14 01:06:44 ЛС | профиль | цитата
Tad, Спасибо)))))
------------ Дoбавленo в 01.06:
Ладно вопрос подругому,
Возможно ли вообще повторить
#pas
function GenResponse(UserName, realm, digest_uri, Pass, nonce, cnonce : String) : string;
const
nc = '00000001';
gop = 'auth';
var
A2, HA1, HA2,
sJID : String;
Razdel : Byte;
Context : TMD5Context;
DigestJID : TMD5Digest;
DigestHA1 : TMD5Digest;
DigestHA2 : TMD5Digest;
DigestResponse : TMD5Digest;
begin
Razdel := Ord(':');
// ВЫЧИСЛЯЕМ А1 по формуле RFC 2831
// A1 = { H( { username-value, ":", realm-value, ":", passwd } ),
// ":", nonce-value, ":", cnonce-value, ":", authzid-value }
sJID := format('%S:%S:%S', [username, realm, Pass]);
MD5Init(Context);
MD5UpdateBuffer(Context, PByteArray(@sJID[1]) , Length(sJID));
MD5Final(DigestJID, Context);

MD5Init(Context);
MD5UpdateBuffer(Context, PByteArray(@DigestJID),SizeOf(TMD5Digest));
MD5UpdateBuffer(Context, @Razdel , SizeOf(Razdel));
MD5UpdateBuffer(Context, PByteArray(@nonce[1]) , Length(nonce));
MD5UpdateBuffer(Context, @Razdel , SizeOf(Razdel));
MD5UpdateBuffer(Context, PByteArray(@cnonce[1]) , Length(cnonce));
MD5Final(DigestHA1, Context);

// ВЫЧИСЛЯЕМ А2 по формуле RFC 2831
// A2 = { "AUTHENTICATE:", digest-uri-value }
A2 := format('AUTHENTICATE:%S', [digest_uri]);
MD5Init(Context);
MD5UpdateBuffer(Context, PByteArray(@A2[1]) , Length(A2));
MD5Final(DigestHA2, Context);

// ВЫЧИСЛЯЕМ RESPONSE по формуле RFC 2831
// HEX( KD ( HEX(H(A1)),
// { nonce-value, ":" nc-value, ":",
// cnonce-value, ":", qop-value, ":", HEX(H(A2)) }))
HA1 := LowerCase( PacketToHex(@DigestHA1, SizeOf(TMD5Digest)));
HA2 := LowerCase( PacketToHex(@DigestHA2, SizeOf(TMD5Digest)));
MD5Init(Context);
MD5UpdateBuffer(Context, PByteArray(@HA1[1]),Length(HA1));
MD5UpdateBuffer(Context, @Razdel , SizeOf(Razdel));
MD5UpdateBuffer(Context, PByteArray(@nonce[1]) , Length(nonce));
MD5UpdateBuffer(Context, @Razdel , SizeOf(Razdel));
MD5UpdateBuffer(Context, PByteArray(@nc[1]) , Length(nc));
MD5UpdateBuffer(Context, @Razdel , SizeOf(Razdel));
MD5UpdateBuffer(Context, PByteArray(@cnonce[1]) , Length(cnonce));
MD5UpdateBuffer(Context, @Razdel , SizeOf(Razdel));
MD5UpdateBuffer(Context, PByteArray(@gop[1]) , Length(gop));
MD5UpdateBuffer(Context, @Razdel , SizeOf(Razdel));
MD5UpdateBuffer(Context, PByteArray(@HA2[1]),Length(HA2));
MD5Final(DigestResponse, Context);
Result := LowerCase( PacketToHex(@DigestResponse, SizeOf(TMD5Digest)) )
end;
тоже самое в hiasm или запихать это в IC?
карма: 1

0