From eb736283606fa5120f47012f917b945141a722f4 Mon Sep 17 00:00:00 2001 From: Jarrod Johnson Date: Fri, 26 Jul 2019 11:38:19 -0400 Subject: [PATCH] Support HMAC SHA256 in IPMI While SHA1 is technically secure in an HMAC, some implementations no longer allow it by default. Try for SHA256, and if that should fail, fallback to SHA1 for implementations lacking support. Change-Id: I6380e042fbe959af4059e63a5620f6289263737c --- pyghmi/ipmi/private/session.py | 54 ++++++++++++++++++++++++---------- 1 file changed, 38 insertions(+), 16 deletions(-) diff --git a/pyghmi/ipmi/private/session.py b/pyghmi/ipmi/private/session.py index 41ce54aa..7745c131 100644 --- a/pyghmi/ipmi/private/session.py +++ b/pyghmi/ipmi/private/session.py @@ -583,6 +583,9 @@ class Session(object): self.confalgo = 0 self.aeskey = None self.integrityalgo = 0 + self.attemptedhash = 256 + self.currhashlib = None + self.currhashlen = 0 self.k1 = None self.rmcptag = 1 self.lastpayload = None @@ -905,7 +908,7 @@ class Session(object): # specification followed message += hmac.new(self.k1, bytes(message[4:]), - hashlib.sha1).digest()[:12] # SHA1-96 + self.currhashlib).digest()[:self.currhashlen] # per RFC2404 truncates to 96 bits self.netpacket = message # advance idle timer since we don't need keepalive while sending @@ -1049,13 +1052,28 @@ class Session(object): 0, 0, # reserved ]) data += struct.pack("