Repository navigation
Implement MD5-128 integrity (suites 11 and 12), keep xRC4 out by decision - #196
Merged
bertysentry merged 2 commits intoOct 18, 2026
Conversation
…sion
IPMI 2.0 section 13.28.4 defines MD5-128 as a plain MD5 of the user's
key around the message: AuthCode = MD5(password + AuthType/Format ...
Next Header + password), the password zero-padded to 20 bytes as the BMC
stores it (FreeIPMI does the same). New IntegrityMd5_128 implements it;
unlike the HMAC algorithms it is keyed with the password, not the SIK, so
CipherSuite gains initializeAlgorithms(sik, password), which Connection
calls after RAKP 4; the one-argument form keeps working for every other
suite.
Suites 11 and 12 are now supported (isSupported() true, ipmicli probe
says so), and the default preference of IpmiClient and ipmicli -C ends
with 12, 11 after the six HMAC suites, so a BMC that offers one of the
six still gets the same suite as before.
xRC4 (suites 4, 5, 9, 10, 13, 14, 18, 19) stays unimplemented: the
specification deprecates it and no BMC requires it; the exception no
longer says "not yet".
Live: suite 12 opens a session on a Cisco IMC (chassis status and a
25 s sensors walk, every reply passing the integrity check). The same
IMC refuses suite 11 and a Lenovo XCC refuses suite 12 at Open Session
("No Cipher Suite match"), as ipmiutil -J 11 / -J 12 does too: BMC
policy, not the library. The fake BMC of the tests accepts suite 12 with
its own MD5 of the password around the packet.
Closes #106
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 76bcf4af7e
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…equired The one-argument initializer treated the missing password as an empty one and signed with twenty zero bytes, so a low-level caller using suite 11 or 12 with the old API got invalid AuthCodes instead of an error (Codex review). It now throws IllegalArgumentException pointing at initializeAlgorithms(sik, password). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
bertysentry
deleted the
106-implement-md5-128-integrity-cipher-suites-1112-decide-on-xrc4-suites-459101314
branch
October 18, 2026 23:10
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #106.
What changed
IntegrityMd5_128): IPMI 2.0 section 13.28.4 defines it as a plain MD5 of the user's key around the message,AuthCode = MD5(password + AuthType/Format ... Next Header + password), the password zero-padded to 20 bytes as the BMC stores it (FreeIPMI does the same; ipmitool does not implement MD5-128). Unlike the HMAC algorithms it is keyed with the password, not the SIK, soCipherSuitegainsinitializeAlgorithms(sik, password), whichConnectioncalls after RAKP 4; the one-argument form keeps working for every other suite.isSupported()istrue,ipmicli probesayssupported, and the default preference ofIpmiClientandipmicli -Cbecomes17, 3, 8, 16, 2, 7, 12, 11. A BMC that offers one of the six HMAC suites gets the same suite as before; one that offers only MD5-128 suites with integrity now connects instead of failing with offers none of the cipher suites.isSupported()and the default preference; the exception now saysis not implemented.rather thanis not yet implemented..preparing-the-bmc.md(suite table and preference),supported-commands.md,configuration.md,cli.md,low-level-api.md,troubleshooting.md,migrating-from-verax.md,upgrading.md.Tests
IntegrityMd5_128Test: a vector computed independently with Python'shashlib, the integrity-pad injection, the empty password (20 zero bytes), and the suite keying (11 with the password, 7 with the SIK).FakeRmcpPlusBmcaccepts suite 12 with its own MD5 of the password around the packet;IpmiClientTestopens a suite 12 session against it.CipherSuiteTestand theprobegolden files list 11 and 12 as supported.Live check
No Cipher Suite match);ipmiutil -J 11/-J 12get the same refusal, so this is BMC policy, not the library. Suite 11 is therefore covered by the unit tests only.mvn verify siteis green: 359 tests, 0 Checkstyle violations, PMD, CPD and SpotBugs gates pass.🤖 Generated with Claude Code