Пример #1
0
            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;
                }));
            }
Пример #2
0
            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;
                }));
            }