Пример #1
0
        static void Main(string[] args)
        {
            //INICJALIZACJA SYSTEMU
            var alreadyAgreedKeys = GetKeyStream(32768, 2);
            var initiator         = GetInitiator(alreadyAgreedKeys);
            var service           = GetService(CopyKeys(alreadyAgreedKeys));
            var bus = new ClientServerMessageBus()
            {
                Initiator = initiator, Service = service
            };
            var keyLength  = 32768;
            var aliceBits  = GetBits(keyLength);
            var bobBits    = Distortion(aliceBits, 0.05);
            var aliceBytes = new byte[aliceBits.Length / 4];
            var bobBytes   = new byte[aliceBits.Length / 4];

            new BitArray(aliceBits).CopyTo(aliceBytes, 0);
            new BitArray(bobBits).CopyTo(bobBytes, 0);

            bus.Send(initiator, new MoreUndestiledBitsArrived(aliceBytes));
            bus.Send(service, new MoreUndestiledBitsArrived(bobBytes));

            //INICJACJA PROCEDURY DESTYLACJI

            bus.Send(initiator, new InitiateDestilation());

            //FAZA ESTYMACJI BŁĘDÓW

            bus.Send(initiator, new EstimateQBER(0, 4048 / 2 / 2 / 2));

            //FAZA KOREKCJI BŁĘDÓW (3 iteracje)

            for (int i = 0; i < 3; i++)
            {
                bus.Send(initiator, new InitiateCascade()
                {
                    Service = service, Bus = bus
                });

                initiator.DestilationBuffer.Permute(initiator.CommonKeyStore.ServiceKeyBuffer.GetKey().GetBytes());
                service.DestilationBuffer.Permute(service.CommonKeyStore.ServiceKeyBuffer.GetKey().GetBytes());
                initiator.DestilationBuffer.SetEstimatedQBER(initiator.DestilationBuffer.GetEstimatedQBER() / 2);
            }

            //FAZA POTWIERDZENIA

            bus.Send(initiator, new EstimateQBER(0, 256));
            if (Cascade.EstimateQBER(initiator.DestilationBuffer._bits, service.DestilationBuffer._bits) != 0)
            {
                throw new ErrorCorrectionFailException();
            }

            //FAZA AMPLIFIKACJA PRYWATNOŚCI

            var privacyLevel = 0.1;

            bus.Send(initiator, new AmplifiePrivacy()
            {
                PrivacyLevel = privacyLevel
            });
            bus.Send(service, new AmplifiePrivacy()
            {
                PrivacyLevel = privacyLevel
            });

            //DODANIE KLUCZA DO SYSTEMU
            var klucz = initiator.DestilationBuffer.FlushBuffer();

            bus.Send(initiator, new MoreBitsArrived(new List <Key>()
            {
                new Key(klucz)
            }));
            bus.Send(service, new MoreBitsArrived(new List <Key>()
            {
                new Key(service.DestilationBuffer.FlushBuffer())
            }));
        }
Пример #2
0
        private static void BufferUsageExample(Initiator initiator, Service service, QualityOfService qualityOfService, ClientServerMessageBus bus, List <Key> newKeys)
        {
            bus.Send(initiator, new MoreBitsArrived(newKeys));
            bus.Send(service, new MoreBitsArrived(newKeys));

            bus.Send(initiator, new Initiate());

            bus.Send(initiator, new CreateKeyBuffer("app1.in", qualityOfService));
            bus.Send(initiator, new CreateKeyBuffer("app1.out", qualityOfService));

            bus.Send(service, new CreateKeyBuffer("app1.in", qualityOfService));
            bus.Send(service, new CreateKeyBuffer("app1.out", qualityOfService));

            bus.Send(initiator, new MoreBitsArrived(newKeys));
            bus.Send(service, new MoreBitsArrived(newKeys));

            bus.Send(initiator, new Initiate());

            bus.Send(initiator, new CloseKeyBuffer("app1.in"));
            bus.Send(service, new CloseKeyBuffer("app1.in"));

            bus.Send(initiator, new GetOutBufferKey("app1.out", 128));


            bus.Send(service, new GetOutBufferKey("app1.out", 128));
        }