Пример #1
0
 protected void Evaluate(IntermediateCode code)
 {
     //System.Diagnostics.Debug.WriteLine("KH: " + code);
     if (code is ICAssignment)
     {
         ICAssignment ica = (ICAssignment)code;
         // create Operation instance
         ObjectHandle handle = Activator.CreateInstance("JOSPrototype", "JOSPrototype.Runtime.Operation." + ica.op + "OnKH", false, 0, null, new object[] { party, code, program, this }, null, null);
         Operation    op     = (Operation)handle.Unwrap();
         // execute the operation on EVH
         op.Run();
     }
     else if (code is ICWhile)
     {
         ICWhile   icw = (ICWhile)code;
         WhileOnKH op  = new WhileOnKH(party, icw, program, this);
         op.Run();
     }
     else
     {
         ICIfElse   icie = (ICIfElse)code;
         IfElseOnKH op   = new IfElseOnKH(party, icie, program, this);
         op.Run();
     }
 }
Пример #2
0
        private void Evaluate(object obj)
        {
            var code = (IntermediateCode)obj;

            if (code is ICAssignment)
            {
                ICAssignment ica = (ICAssignment)code;
                // create OperationImpl instance
                ObjectHandle        handle = Activator.CreateInstance("JOSPrototype", "JOSPrototype.Runtime.Operation." + ica.op + "OnKH", false, 0, null, new object[] { this, code, program }, null, null);
                Operation.Operation opImpl = (Operation.Operation)handle.Unwrap();
                // execute the operation on KH
                opImpl.Run();
            }
            else if (code is ICWhile)
            {
                ICWhile   icw = (ICWhile)code;
                WhileOnKH op  = new WhileOnKH(this, icw, program);
                op.Run();
            }
            else
            {
                ICIfElse   icie = (ICIfElse)code;
                IfElseOnKH op   = new IfElseOnKH(this, icie, program);
                op.Run();
            }
        }
Пример #3
0
 public EqualZeroOnEVH(Party party, ICAssignment code, Program program)
     : base(party, code, program, EncryptionType.Any, EncryptionType.XOR, OperationType.EqualZero)
 {
     // since EqualZero does not care about the input operand encrption type,
     // it will not call TransformEncType function. So we need to assign value to encVal/key explicitly here
     encVal = new NumericArray(program.GetValue(code.operand1));
 }
Пример #4
0
 // operation is created by a while loop or a if-else statement
 protected OperationOnEVH(Party party, ICAssignment code, Program program, EncryptionType operandEncType, EncryptionType resultEncType, Operation caller, OperationType opType)
     : base(party, code.index, caller, null, opType)
 {
     //isCalledByParty = true;
     this.code           = code;
     this.program        = program;
     this.operandEncType = operandEncType;
     this.resultEncType  = resultEncType;
 }
Пример #5
0
 public InverseOnEVH(Party party, ICAssignment code, Program program, Operation caller)
     : base(party, code, program, EncryptionType.AddMod, EncryptionType.AddMod, caller, OperationType.Inverse)
 {
 }
Пример #6
0
 public ReturnOnKH(Party party, ICAssignment code, Program program)
     : base(party, code, program, EncryptionType.Any, EncryptionType.Any, OperationType.Return)
 {
 }
Пример #7
0
 public NOTOnKH(Party party, ICAssignment code, Program program, Operation caller)
     : base(party, code, program, EncryptionType.XOR, EncryptionType.XOR, caller, OperationType.NOT)
 {
 }
Пример #8
0
 public NoneOnKH(Party party, ICAssignment code, Program program, Operation caller)
     : base(party, code, program, EncryptionType.Any, EncryptionType.Any, caller, OperationType.None)
 {
 }
Пример #9
0
 public AdditionOnEVH(Party party, ICAssignment code, Program program)
     : base(party, code, program, EncryptionType.AddMod, EncryptionType.AddMod, OperationType.Addition)
 {
 }
Пример #10
0
 private bool IsDependent(IntermediateCode codei, IntermediateCode codej)
 {
     if (codei is ICAssignment && codej is ICAssignment)
     {
         ICAssignment assignmenti = (ICAssignment)codei, assignmentj = (ICAssignment)codej;
         if (ETerminal.IsEqual(assignmenti.result, assignmentj.result) ||
             ETerminal.IsEqual(assignmentj.result, assignmenti.operand1) ||
             ETerminal.IsEqual(assignmentj.result, assignmenti.operand2) ||
             ETerminal.IsEqual(assignmenti.result, assignmentj.operand1) ||
             ETerminal.IsEqual(assignmenti.result, assignmentj.operand2))
         {
             return(true);
         }
         return(false);
     }
     else if (codei is ICAssignment && codej is ICWhile)
     {
         ICAssignment assignmenti = (ICAssignment)codei;
         ICWhile      whilej      = (ICWhile)codej;
         if (ETerminal.IsEqual(assignmenti.result, whilej.condition))
         {
             return(true);
         }
         foreach (var entry in whilej.conditionCodes.GetCodes())
         {
             if (IsDependent(assignmenti, entry))
             {
                 return(true);
             }
         }
         foreach (var entry in whilej.codes.GetCodes())
         {
             if (IsDependent(assignmenti, entry))
             {
                 return(true);
             }
         }
         return(false);
     }
     else if (codei is ICWhile && codej is ICAssignment)
     {
         ICWhile      whilei      = (ICWhile)codei;
         ICAssignment assignmentj = (ICAssignment)codej;
         if (ETerminal.IsEqual(assignmentj.result, whilei.condition))
         {
             return(true);
         }
         foreach (var entry in whilei.conditionCodes.GetCodes())
         {
             if (IsDependent(entry, assignmentj))
             {
                 return(true);
             }
         }
         foreach (var entry in whilei.codes.GetCodes())
         {
             if (IsDependent(entry, assignmentj))
             {
                 return(true);
             }
         }
         return(false);
     }
     else if (codei is ICWhile && codej is ICWhile)
     {
         ICWhile whilei = (ICWhile)codei, whilej = (ICWhile)codej;
         List <IntermediateCode>
         codesi     = new List <IntermediateCode>(),
             codesj = new List <IntermediateCode>();
         codesi.AddRange(whilei.conditionCodes.GetCodes());
         codesi.AddRange(whilei.codes.GetCodes());
         codesj.AddRange(whilej.conditionCodes.GetCodes());
         codesj.AddRange(whilej.codes.GetCodes());
         foreach (var entryi in codesi)
         {
             foreach (var entryj in codesj)
             {
                 if (IsDependent(entryi, entryj))
                 {
                     return(true);
                 }
             }
         }
         return(false);
     }
     else if (codei is ICAssignment && codej is ICIfElse)
     {
         ICAssignment assignmenti = (ICAssignment)codei;
         ICIfElse     ifelsej     = (ICIfElse)codej;
         if (ETerminal.IsEqual(assignmenti.result, ifelsej.condition))
         {
             return(true);
         }
         List <IntermediateCode> codesj = new List <IntermediateCode>();
         codesj.AddRange(ifelsej.conditionCodes.GetCodes());
         codesj.AddRange(ifelsej.codesIf.GetCodes());
         codesj.AddRange(ifelsej.codesElse.GetCodes());
         foreach (var entry in codesj)
         {
             if (IsDependent(assignmenti, entry))
             {
                 return(true);
             }
         }
         return(false);
     }
     else if (codei is ICIfElse && codej is ICAssignment)
     {
         ICIfElse     ifelsei     = (ICIfElse)codei;
         ICAssignment assignmentj = (ICAssignment)codej;
         if (ETerminal.IsEqual(assignmentj.result, ifelsei.condition))
         {
             return(true);
         }
         List <IntermediateCode> codesi = new List <IntermediateCode>();
         codesi.AddRange(ifelsei.conditionCodes.GetCodes());
         codesi.AddRange(ifelsei.codesIf.GetCodes());
         codesi.AddRange(ifelsei.codesElse.GetCodes());
         foreach (var entry in codesi)
         {
             if (IsDependent(entry, assignmentj))
             {
                 return(true);
             }
         }
         return(false);
     }
     else if (codei is ICWhile && codej is ICIfElse)
     {
         ICWhile  whilei  = (ICWhile)codei;
         ICIfElse ifelsej = (ICIfElse)codej;
         List <IntermediateCode>
         codesi     = new List <IntermediateCode>(),
             codesj = new List <IntermediateCode>();
         codesi.AddRange(whilei.conditionCodes.GetCodes());
         codesi.AddRange(whilei.codes.GetCodes());
         codesj.AddRange(ifelsej.conditionCodes.GetCodes());
         codesj.AddRange(ifelsej.codesIf.GetCodes());
         codesj.AddRange(ifelsej.codesElse.GetCodes());
         foreach (var entryi in codesi)
         {
             foreach (var entryj in codesj)
             {
                 if (IsDependent(entryi, entryj))
                 {
                     return(true);
                 }
             }
         }
         return(false);
     }
     else if (codei is ICIfElse && codej is ICWhile)
     {
         ICIfElse ifelsei = (ICIfElse)codei;
         ICWhile  whilej  = (ICWhile)codej;
         List <IntermediateCode>
         codesi     = new List <IntermediateCode>(),
             codesj = new List <IntermediateCode>();
         codesi.AddRange(ifelsei.conditionCodes.GetCodes());
         codesi.AddRange(ifelsei.codesIf.GetCodes());
         codesi.AddRange(ifelsei.codesElse.GetCodes());
         codesj.AddRange(whilej.conditionCodes.GetCodes());
         codesj.AddRange(whilej.codes.GetCodes());
         foreach (var entryi in codesi)
         {
             foreach (var entryj in codesj)
             {
                 if (IsDependent(entryi, entryj))
                 {
                     return(true);
                 }
             }
         }
         return(false);
     }
     else
     {
         ICIfElse ifelsei = (ICIfElse)codei;
         ICIfElse ifelsej = (ICIfElse)codej;
         List <IntermediateCode>
         codesi     = new List <IntermediateCode>(),
             codesj = new List <IntermediateCode>();
         codesi.AddRange(ifelsei.conditionCodes.GetCodes());
         codesi.AddRange(ifelsei.codesIf.GetCodes());
         codesi.AddRange(ifelsei.codesElse.GetCodes());
         codesj.AddRange(ifelsej.conditionCodes.GetCodes());
         codesj.AddRange(ifelsej.codesIf.GetCodes());
         codesj.AddRange(ifelsej.codesElse.GetCodes());
         foreach (var entryi in codesi)
         {
             foreach (var entryj in codesj)
             {
                 if (IsDependent(entryi, entryj))
                 {
                     return(true);
                 }
             }
         }
         return(false);
     }
 }
Пример #11
0
 public EqualZeroOnEVH(Party party, ICAssignment code, Program program, Operation caller)
     : base(party, code, program, EncryptionType.Any, EncryptionType.XOR, caller, OperationType.EqualZero)
 {
     encVal = new NumericArray(program.GetValue(code.operand1));
 }
Пример #12
0
 public EqualZeroOnKH(Party party, ICAssignment code, Program program)
     : base(party, code, program, EncryptionType.Any, EncryptionType.XOR, OperationType.EqualZero)
 {
     key = new NumericArray(program.GetValue(code.operand1));
 }
Пример #13
0
 public MultiplicationOnKH(Party party, ICAssignment code, Program program)
     : base(party, code, program, EncryptionType.AddMod, EncryptionType.AddMod, OperationType.Multiplication)
 {
 }
Пример #14
0
 public ANDOnEVH(Party party, ICAssignment code, Program program, Operation caller)
     : base(party, code, program, EncryptionType.XOR, EncryptionType.XOR, caller, OperationType.AND)
 {
 }
Пример #15
0
 public SubstractionOnKH(Party party, ICAssignment code, Program program)
     : base(party, code, program, EncryptionType.AddMod, EncryptionType.AddMod, OperationType.Substraction)
 {
 }
Пример #16
0
 public LessZeroOnEVH(Party party, ICAssignment code, Program program, Operation caller)
     : base(party, code, program, EncryptionType.AddMod, EncryptionType.XOR, caller, OperationType.LessZero)
 {
 }
Пример #17
0
 public AdditionOnKH(Party party, ICAssignment code, Program program, Operation caller)
     : base(party, code, program, EncryptionType.AddMod, EncryptionType.AddMod, caller, OperationType.Addition)
 {
 }
Пример #18
0
 public XOROnKH(Party party, ICAssignment code, Program program)
     : base(party, code, program, EncryptionType.XOR, EncryptionType.XOR, OperationType.XOR)
 {
 }
Пример #19
0
 public NOTOnEVH(Party party, ICAssignment code, Program program)
     : base(party, code, program, EncryptionType.XOR, EncryptionType.XOR, OperationType.NOT)
 {
 }
Пример #20
0
 public MultiLessZeroOnEVH(Party party, ICAssignment code, Program program, Operation caller)
     : base(party, code, program, EncryptionType.AddMod, EncryptionType.XOR, caller, OperationType.MultiLessZero)
 {
     length = Config.KeyBits;
 }