Exemplo n.º 1
0
		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;
		}
Exemplo n.º 2
0
        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);
        }