@@ -229,65 +229,69 @@ function TRALDigest.GetHeader: TStringList;
229229 vHa1, vHa2, vAux1, vNC: StringRAL;
230230 vHash: TRALHashBase;
231231begin
232- case FParams.Algorithm of
233- tdaMD5: begin
234- vHash := TRALMD5.Create;
235- end ;
236- tdaSHA2_256: begin
237- vHash := TRALSHA2_32.Create;
238- TRALSHA2_32(vHash).Version := rsv256;
239- end ;
240- tdaSHA2_512: begin
241- vHash := TRALSHA2_64.Create;
242- TRALSHA2_64(vHash).Version := rsv512_256;
232+ Result := TStringList.Create;
233+ try
234+ case FParams.Algorithm of
235+ tdaMD5: begin
236+ vHash := TRALMD5.Create;
237+ end ;
238+ tdaSHA2_256: begin
239+ vHash := TRALSHA2_32.Create;
240+ TRALSHA2_32(vHash).Version := rsv256;
241+ end ;
242+ tdaSHA2_512: begin
243+ vHash := TRALSHA2_64.Create;
244+ TRALSHA2_64(vHash).Version := rsv512_256;
245+ end ;
243246 end ;
244- end ;
245247
246- try
247- vNC := Format(' %.8d' , [FParams.NC]);
248- FParams.CNonce := vHash.HashAsString(vNC);
248+ try
249+ vNC := Format(' %.8d' , [FParams.NC]);
250+ FParams.CNonce := vHash.HashAsString(vNC);
249251
250- vHa1 := Format(' %s:%s:%s' , [FUserName, FParams.Realm, FPassword]);
251- vHa1 := vHash.HashAsString(vHa1);
252+ vHa1 := Format(' %s:%s:%s' , [FUserName, FParams.Realm, FPassword]);
253+ vHa1 := vHash.HashAsString(vHa1);
252254
253- if FParams.SessAlgorithm then
254- vHa1 := vHash.HashAsString(Format(' %s:%s:%s' ,
255- [vHa1, FParams.Nonce, FParams.CNonce]));
255+ if FParams.SessAlgorithm then
256+ vHa1 := vHash.HashAsString(Format(' %s:%s:%s' ,
257+ [vHa1, FParams.Nonce, FParams.CNonce]));
256258
257- if ((Pos(' auth' , LowerCase(FParams.Qop)) > 0 ) and
258- (Pos(' auth-int' , LowerCase(FParams.Qop)) = 0 )) or
259- (Trim(FParams.Qop) = ' ' ) then
260- begin
261- vHa2 := Format(' %s:%s' , [FMethod, FURL]);
262- vHa2 := vHash.HashAsString(vHa2);
263- end
264- else if (Pos(' auth-int' , LowerCase(FParams.Qop)) > 0 ) then
265- begin
266- vHa2 := vHash.HashAsString(FEntityBody);
267- vHa2 := Format(' %s:%s:%s' , [FMethod, FURL, vHa2]);
268- vHa2 := vHash.HashAsString(vHa2);
259+ if ((Pos(' auth' , LowerCase(FParams.Qop)) > 0 ) and
260+ (Pos(' auth-int' , LowerCase(FParams.Qop)) = 0 )) or
261+ (Trim(FParams.Qop) = ' ' ) then
262+ begin
263+ vHa2 := Format(' %s:%s' , [FMethod, FURL]);
264+ vHa2 := vHash.HashAsString(vHa2);
265+ end
266+ else if (Pos(' auth-int' , LowerCase(FParams.Qop)) > 0 ) then
267+ begin
268+ vHa2 := vHash.HashAsString(FEntityBody);
269+ vHa2 := Format(' %s:%s:%s' , [FMethod, FURL, vHa2]);
270+ vHa2 := vHash.HashAsString(vHa2);
271+ end ;
272+
273+ if (Pos(' auth' , LowerCase(FParams.Qop)) > 0 ) then
274+ vAux1 := Format(' %s:%s:%s:%s:%s:%s' , [vHa1, FParams.Nonce, vNC,
275+ FParams.CNonce, FParams.Qop, vHa2])
276+ else
277+ vAux1 := Format(' %s:%s:%s' , [vHa1, FParams.Nonce, vHa2]);
278+ vAux1 := vHash.HashAsString(vAux1);
279+ finally
280+ FreeAndNil(vHash);
269281 end ;
270282
271- if (Pos(' auth' , LowerCase(FParams.Qop)) > 0 ) then
272- vAux1 := Format(' %s:%s:%s:%s:%s:%s' , [vHa1, FParams.Nonce, vNC,
273- FParams.CNonce, FParams.Qop, vHa2])
274- else
275- vAux1 := Format(' %s:%s:%s' , [vHa1, FParams.Nonce, vHa2]);
276- vAux1 := vHash.HashAsString(vAux1);
277- finally
278- FreeAndNil(vHash);
283+ Result.Add(' realm=' + FParams.Realm);
284+ Result.Add(' username=' + FUserName);
285+ Result.Add(' nonce=' + FParams.Nonce);
286+ Result.Add(' uri=' + FURL);
287+ Result.Add(' qop=' + FParams.Qop);
288+ Result.Add(' nc=' + vNC); // nc=00000001,
289+ Result.Add(' cnonce=' + FParams.CNonce); // cnonce="0a4f113b",
290+ Result.Add(' response=' + vAux1);
291+ Result.Add(' opaque=' + FParams.Opaque);
292+ except
293+ Result.Free;
279294 end ;
280-
281- Result := TStringList.Create;
282- Result.Add(' realm=' + FParams.Realm);
283- Result.Add(' username=' + FUserName);
284- Result.Add(' nonce=' + FParams.Nonce);
285- Result.Add(' uri=' + FURL);
286- Result.Add(' qop=' + FParams.Qop);
287- Result.Add(' nc=' + vNC); // nc=00000001,
288- Result.Add(' cnonce=' + FParams.CNonce); // cnonce="0a4f113b",
289- Result.Add(' response=' + vAux1);
290- Result.Add(' opaque=' + FParams.Opaque);
291295end ;
292296
293297constructor TRALDigest.Create;
0 commit comments