File hplip-utils-Fix-plugin-verification-with-sha256.patch of Package hplip

From 8d14912a48e589bee05e0c377c29218132083145 Mon Sep 17 00:00:00 2001
From: Martin Wilck <mwilck@suse.com>
Date: Wed, 7 May 2025 15:23:17 +0200
Subject: [PATCH] hplip/utils: Fix plugin verification with sha256

https://bugs.launchpad.net/hplip/+bug/2110100
---
 base/smart_install.py      |  2 +-
 base/utils.py              | 12 +++++++++++-
 installer/pluginhandler.py |  4 ++--
 3 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/base/smart_install.py b/base/smart_install.py
index cff5924..699f70f 100755
--- a/base/smart_install.py
+++ b/base/smart_install.py
@@ -155,7 +155,7 @@ def validate(mode, smart_install_run, smart_install_asc, req_checksum=''):
     calc_checksum = utils.get_checksum(open(smart_install_run, 'r').read())
     log.debug("File checksum=%s" % calc_checksum)
 
-    if req_checksum and req_checksum != calc_checksum:
+    if utils.sha256_checksum(req_checksum) != calc_checksum:
         return ERROR_FILE_CHECKSUM, queryString(ERROR_CHECKSUM_ERROR, 0, plugin_file)
 
     #Validate Digital Signature
diff --git a/base/utils.py b/base/utils.py
index d5b3a49..f9de94e 100644
--- a/base/utils.py
+++ b/base/utils.py
@@ -72,8 +72,18 @@ import hashlib
 def get_checksum(s):
     return hashlib.sha256(s).hexdigest()
 
+__sha1_sha256_map = {
+    "bd99405113d43447e7a37ed46d75187785774cff":
+    "9a2cf8d5661e846548dbbb595231a5448a5cb63729cc93df8d1f652dfd167a54"
+}
 
-
+def sha256_checksum(s):
+    if not s:
+        return ""
+    elif s in __sha1_sha256_map:
+        return __sha1_sha256_map[s]
+    else:
+        return s
 
 # Local
 from .g import *
diff --git a/installer/pluginhandler.py b/installer/pluginhandler.py
index a37db39..26b0033 100755
--- a/installer/pluginhandler.py
+++ b/installer/pluginhandler.py
@@ -217,9 +217,9 @@ class PluginHandle(object):
     def __validatePlugin(self,plugin_file, digsig_file, req_checksum):
 
         #Validate Checksum
-        calc_checksum = get_checksum(open(plugin_file, 'rb').read())
+        calc_checksum = utils.get_checksum(open(plugin_file, 'rb').read())
         log.debug("D/L file checksum=%s" % calc_checksum)
-        if req_checksum and req_checksum != calc_checksum:
+        if utils.sha256_checksum(req_checksum) != calc_checksum:
             return ERROR_CHECKSUM_ERROR, queryString(ERROR_CHECKSUM_ERROR, 0, plugin_file)
 
         #Validate Digital Signatures
-- 
2.49.0

openSUSE Build Service is sponsored by