public Task <HandOverToPhase2> Phase1Async(HandOverToPhase1 fromPhaseOne) { if (this.Phase != PhaseState.Phase1) { throw new InvalidOperationException(); } this.Phase = PhaseState.Phase2; return(Task.Run(() => { if (!fromPhaseOne.Map.DeepEquals(this.parent.PrototypeMap)) { throw new ArgumentException("Using diferent Maps"); } var result = new HandOverToPhase2() { Nodes = new NodeToPhase2[fromPhaseOne.Nodes.Length] }; for (int i = 0; i < result.Nodes.Length; i++) { var item = fromPhaseOne.Nodes[i]; var cn = this.parent.prototypeIdLookup[item.PrototypeIdNode]; var ownExponented = cn.TrueNode.Initilize.Phase1(item.Value); result.Nodes[i] = new NodeToPhase2() { OtherExponented = ownExponented, PrototypeIdNode = cn.PrototypeNode.id }; } return result; })); }
public Task <HandOverToPhase1> Phase0Async() { //this.parent.Prime = CryptoHelper.GeneratePrime(); if (this.Phase != PhaseState.Phase0) { throw new InvalidOperationException(); } this.Phase = PhaseState.Phase1; return(Task.Run(() => { var result = new HandOverToPhase1() { Nodes = new NodeToPhase1[this.parent.generatedCryptoNodes.Length], Map = this.parent.PrototypeMap }; for (int i = 0; i < result.Nodes.Length; i++) { var item = this.parent.generatedCryptoNodes[i]; result.Nodes[i] = new NodeToPhase1() { Value = item.TrueNode.Initilize.Phase0(), PrototypeIdNode = item.PrototypeNode.id }; } return result; })); }