add mode: cmiyc ($cmiyc$2026$) - #35
Merged
Merged
Conversation
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.
Adds support for the custom memory-hard KDF hash algo used in CMIYC 2026. This algo was created by KoreLogic for CMIYC 2026 and at this time has no other practical purpose outside of the contest.
Parameters
Example
Algorithm overview from reverse engineered CMIYC 2026 Challenge 3 binary:
cmiyc_2026_challenge_3CMIYC 2026 Memory-Hard SHA-512 KDF
Parameters and encoding:
rounds: decimal integer, valid range 1..32.memlog: decimal integer, valid range 10..24.salt: exactly 16 bytes, unpadded RFC 4648 Base64URL.digest: exactly 32 bytes, unpadded RFC 4648 Base64URL.N = 1 << memlog.64 * 2^memlogbytes.2026is part of the modular hash format/version check, but it is not hashed by the KDF.KDF
Important implementation details:
cmiyc-fill, with no NUL terminator.M[j]therefore observes whatever value is currently in that slot at that point in the pass.A; reverse separator is one byteB.Default-cost example
For
rounds=4,memlog=16:N = 65,536blocks.2 * 4 * 65,536 = 524,288SHA-512 hashes.Known test vectors
Password
Always, salt hex000102030405060708090a0b0c0d0e0f:Using the same password/salt with
rounds=4,memlog=16: