Alright, so if I wish to get anywhere with this, I should probably use the tools VW provide. I would be a fool not to.
I barely looked at the Java library, it doesn't seem to include the functions for authenticating the MCD kernel, a.k.a. the first thing you need to do in order to use it. I have close to no experience with it, so I knew I had to go down the C++ route.
I wasted way too much time with my beloved IDE, Codeblocks. For the life of me, I cant figure out how to make it accept the .lib, it just wasn't solving the imports. Eventually, I installed Visual Studio, and it's way less scary than it seems. I was able to get everything error-free very quickly.
So to start using the Kernel, you first need to request a seed, then apply a "secret" procedure to it (exactly what the docs say), then you send it back, check that it was accepted and then create an instance of the MCDSystem.
I tried reverse engineering the secret function from the included Client app, but I already wasted too much time on this for today. I saw that it uses a constant table stored in the exe, which it XORs with bytes 0x36 and 0x5C, then it clearly uses the SHA-512 algorithm, just like the docs say. Maybe I'll continue some other time.
So I got an idea for a temporary solution. I start my app, which spits out the seed in the console. Then I start up the Client app, attach the debugger, make it stop at a breakpoint right after it requests the seed from its instance, I go in its memory and edit the 64 bytes, pasting the ones my program gave me. Then I set another breakpoint just before it gives the secretly-calculated MAC, I copy that and paste it in my program's console, it parses the string as hex bytes, gives it to the Kernel and it succeeds. Then asam::mcd::MCDSystem.createInstance() executes without throwing an exception
![Cheesy](http://nefariousmotorsports.com/forum/Smileys/default/cheesy.gif)
Baby's first steps.