2222import java .util .ArrayList ;
2323import java .util .Arrays ;
2424import java .util .Collections ;
25- import java .util .EnumMap ;
2625import java .util .EnumSet ;
26+ import java .util .IdentityHashMap ;
2727import java .util .Iterator ;
2828import java .util .List ;
2929import java .util .Locale ;
@@ -286,15 +286,15 @@ public List<Package> getPackages(int version, OS os, Distro distro, Arch arch) {
286286 }
287287
288288 public @ Nullable File download (Package pkg ) {
289- Map <HashFunction , String > checksums = new EnumMap <>(HashFunction . class );
289+ Map <HashFunction , String > checksums = new IdentityHashMap <>();
290290 String download = pkg .links .pkg_download_redirect ;
291291
292292 //debug("Downloading " + pkg.filename);
293293 try {
294294 PackageInfo info = getInfo (pkg );
295295
296296 if (info .checksum != null && info .checksum_type != null ) {
297- HashFunction func = HashFunction .find (info .checksum_type );
297+ HashFunction func = HashFunction .byName (info .checksum_type );
298298 if (func != null )
299299 checksums .put (func , info .checksum );
300300 else
@@ -304,7 +304,7 @@ public List<Package> getPackages(int version, OS os, Distro distro, Arch arch) {
304304 String raw = DownloadUtils .downloadString (info .checksum_uri );
305305
306306 String checksum = raw .split (" " )[0 ];
307- HashFunction func = HashFunction . findByHash (checksum );
307+ HashFunction func = findByHash (checksum );
308308 if (func != null )
309309 checksums .put (func , checksum );
310310 else
@@ -349,15 +349,15 @@ public List<Package> getPackages(int version, OS os, Distro distro, Arch arch) {
349349 String actual = func .hash (archive );
350350 String expected = entry .getValue ();
351351 if (expected .equals (actual )) {
352- debug (" " + func .name () + " Validated" );
352+ debug (" " + func .extension () + " Validated" );
353353 } else {
354- debug (" " + func .name () + " Invalid" );
354+ debug (" " + func .extension () + " Invalid" );
355355 debug (" Expected: " + expected );
356356 debug (" Actual: " + actual );
357357 return null ;
358358 }
359359 } catch (Exception e ) {
360- error ("Failed to calculate " + func .name () + " checksum" );
360+ error ("Failed to calculate " + func .extension () + " checksum" );
361361 error (e );
362362 return null ;
363363 }
@@ -369,6 +369,15 @@ public List<Package> getPackages(int version, OS os, Distro distro, Arch arch) {
369369 return archive ;
370370 }
371371
372+ private HashFunction findByHash (String checksum ) {
373+ int len = checksum .length ();
374+ if (len == 32 ) return HashFunction .md5 ();
375+ if (len == 40 ) return HashFunction .sha1 ();
376+ if (len == 64 ) return HashFunction .sha256 ();
377+ if (len == 128 ) return HashFunction .sha512 ();
378+ return null ;
379+ }
380+
372381 private File getExtractedDir (Package pkg ) {
373382 String filename = pkg .filename ;
374383 Archive format = pkg .archive ();
0 commit comments