Git Product home page Git Product logo

ipl3hasher's People

Contributors

awygle avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

Forkers

hcs64 phire rasky

ipl3hasher's Issues

Write a README

How's anybody gonna know how great this is if I don't tell 'em?

Potential Optimisation: Most of round 1007 can be cached when X doesn't change.

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.

Support resuming from a particular Y value

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.

Look for more than one hash at a time

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.

Clean up the code!

Someone on the N64Brew discord threatened to learn from this code - I should make it less of a Superfund site.

Clearer output

I know what [ 0x0, 0x0 ] means, but nobody else does, or should. Make this clearer.

Support multiple endiannesses

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.

Potential Optimisation: Early exit after calculating half the checksum

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.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.