awygle / ipl3hasher Goto Github PK
View Code? Open in Web Editor NEWGPU-accelerated hash collision finder for the N64 IPL3 boot code
GPU-accelerated hash collision finder for the N64 IPL3 boot code
Several CICs have the same seed but different hashes. We can look for all of these hashes at once and terminate if we find any of them. This should be the default but we should still be able to target just one if we want.
I know what [ 0x0, 0x0 ] means, but nobody else does, or should. Make this clearer.
Someone on the N64Brew discord threatened to learn from this code - I should make it less of a Superfund site.
I already wrote this, I just need to pull it into this repo and make it a second binary.
From what I can tell, most of round 1007 is static when Y doesn't change. As data_next, X only impacts 5 words of the state.
So we could implement a truncated round 1007 that only calculates state[10:11]
and state[13-15]
. Round 1008 is already terminates early and only calculates state[0:9]
. Interestingly, state[12]
is actually fixed.
Currently every time you re-start the program it starts from y==0. This is obviously dumb, we should support resuming from a different Y value so we can partition the search space over multiple times/people.
In finalise, checksum_hi and checksum_lo are actually completely independent. It's wasteful to calculate both halves before checking.
Whatever half is cheaper should be calculated first and checked against target, only continuing when at least one lane matches.
Hard to tell which is cheaper without testing. checksum_hi
only requires 17 multiplies but each multiplies depends on both the previous multiply and the rotate + add. checksum_lo
's two chains might have 16 multiplies each but they are actually independent of each other.
This was sheer laziness when I was writing the thing, there's no reason this should be the case.
CPU hasher could use AVX2 to do 8 hashes at once.
Currently big-endian is assumed, but all the mechanics are in place to handle little endian except hooking it up to the CLI options.
We can't really support middle-ended with byteorder, but oh well.
How's anybody gonna know how great this is if I don't tell 'em?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.