public IEnumerable<Instruction> EmitDecrypt(MethodDef init, CEContext ctx, Local block, Local key) { StatementBlock encrypt, decrypt; ctx.DynCipher.GenerateCipherPair(ctx.Random, out encrypt, out decrypt); var ret = new List<Instruction>(); var codeGen = new CipherCodeGen(block, key, init, ret); codeGen.GenerateCIL(decrypt); codeGen.Commit(init.Body); var dmCodeGen = new DMCodeGen(typeof(void), new[] { Tuple.Create("{BUFFER}", typeof(uint[])), Tuple.Create("{KEY}", typeof(uint[])) }); dmCodeGen.GenerateCIL(encrypt); encryptFunc = dmCodeGen.Compile<Action<uint[], uint[]>>(); return ret; }
public IEnumerable <Instruction> EmitDecrypt(MethodDef init, CEContext ctx, Local block, Local key) { ctx.DynCipher.GenerateCipherPair(ctx.Random, out var encrypt, out var decrypt); var ret = new List <Instruction>(); var codeGen = new CipherCodeGen(block, key, init, ret); codeGen.GenerateCIL(decrypt); codeGen.Commit(init.Body); var dmCodeGen = new DMCodeGen(typeof(void), new[] { Tuple.Create("{BUFFER}", typeof(uint[])), Tuple.Create("{KEY}", typeof(uint[])) }); dmCodeGen.GenerateCIL(encrypt); encryptFunc = dmCodeGen.Compile <Action <uint[], uint[]> >(); return(ret); }