Пример #1
0
        public void PingSendCorrectBytes()
        {
            // Setup
            var         scenario = HidScenario.Build();
            BytesHolder holder   = null;

            scenario.Write(report =>
            {
                var sizeHi = report.Data.Array[report.Data.Offset + 5];
                var sizeLo = report.Data.Array[report.Data.Offset + 6];
                var size   = (sizeHi << 8) | sizeLo;
                holder     = new BytesHolder(size);
                AssertWriteInitPacket(report.Data, TestChannel, U2FHidCommand.Ping, holder);
            });
            scenario.Read(() => new HidInputReport(BuildInitPacket(TestChannel, U2FHidCommand.Ping, holder)));

            var hid    = CreateHidMock();
            var device = new U2FHidKey(hid.Object, false);

            InitDevice(hid, device);

            scenario.Run(hid);

            // Act
            device.Ping().Wait();

            // Assert
            scenario.End();
        }
Пример #2
0
        public async Task PingWithContinuation()
        {
            // Setup
            var pingData = new byte[100];

            new Random().NextBytes(pingData);
            var writeInitData = pingData.Take(63 - 7).ToArray();
            var writeContData = pingData.Skip(63 - 7).Take(63 - 5).ToArray();

            var scenario = HidScenario.Build();

            scenario.Write(report => AssertWriteInitPacketSized(report.Data, TestChannel, U2FHidCommand.Ping, pingData.Length, writeInitData));
            scenario.Write(report => AssertWriteContinuation(report.Data, TestChannel, 0, writeContData));
            scenario.Read(() => new HidInputReport(BuildInitPacketSized(TestChannel, U2FHidCommand.Ping, pingData.Length, writeInitData)));
            scenario.Read(() => new HidInputReport(BuildContinuationPacket(TestChannel, 0, writeContData)));

            var hid    = CreateHidMock();
            var device = new U2FHidKey(hid.Object, false);

            InitDevice(hid, device);

            scenario.Run(hid);

            // Act
            var returnedResponse = await device.Ping(pingData.Segment());

            // Assert
            scenario.End();
            Check.That(returnedResponse.ContentEquals(pingData.Segment()));
        }
Пример #3
0
        public U2FDeviceKey([NotNull] U2FHidKey key)
        {
            if (key == null)
            {
                throw new ArgumentNullException(nameof(key));
            }

            this.key = key;
        }
Пример #4
0
        private static void TestHardwareOnly()
        {
            var factory  = (IHidDeviceFactory)Win32HidDeviceFactory.Instance;
            var devices  = factory.FindAllAsync().Result;
            var fidoInfo = devices.Where(FidoU2FIdentification.IsFidoU2F).FirstOrDefault();

            Console.WriteLine("Devices found:");
            ShowDevices(devices);
            Console.WriteLine();

            if (fidoInfo == null)
            {
                Console.WriteLine("Can't find FIDO device :-(");
                Console.ReadLine();
                return;
            }

            Console.WriteLine(fidoInfo.Id);
            Console.WriteLine(fidoInfo.Manufacturer);
            Console.WriteLine(fidoInfo.Product);
            Console.WriteLine(fidoInfo.SerialNumber);
            Console.WriteLine("VID = 0x{0:X4}", fidoInfo.VendorId);
            Console.WriteLine("PID = 0x{0:X4}", fidoInfo.ProductId);

            using (var device = (Win32HidDevice)fidoInfo.OpenDeviceAsync().Result)
            {
                device.SetNumInputBuffers(64);
                var caps = device.Information.Capabilities;
                Console.WriteLine(caps.NumberFeatureButtonCaps);

                //Test(device);

                Console.WriteLine("Using high level API");

                var u2f = new U2FHidKey(device, false);

                var init = u2f.InitAsync().Result;

                var pongShort = u2f.Ping(Encoding.UTF8.GetBytes("Pong !!").Segment()).Result;
                WriteBuffer(pongShort);

                var pong =
                    u2f.Ping(
                        Encoding.UTF8.GetBytes(
                            "abcdefgh1-abcdefgh2-abcdefgh3-abcdefgh4-abcdefgh5-abcdefgh6-abcdefgh7-abcdefgh8-").Segment())
                    .Result;

                WriteBuffer(pong);

                if (init.Capabilities.HasFlag(U2FDeviceCapabilities.Wink))
                {
                    Console.WriteLine("Winking");
                    u2f.WinkAsync().Wait();
                }
                Console.ReadLine();
            }
        }
Пример #5
0
        public void InitSendCorrectBytes()
        {
            // Setup
            var hid    = CreateHidMock();
            var device = new U2FHidKey(hid.Object, false);

            // Act
            var init = InitDevice(hid, device);

            // Assert
            Check.That(init.Channel).IsEqualTo(0xCAFEBABE);
            Check.That(init.ProtocolVersion).IsEqualTo((byte)1);
            Check.That(init.Version).IsEqualTo(new Version(2, 3, 4));
            Check.That(init.Capabilities).IsEqualTo(U2FDeviceCapabilities.Wink);
        }
Пример #6
0
        public void WinkSendCorrectBytes()
        {
            // Setup
            var scenario = HidScenario.Build();

            scenario.Write(report => AssertWriteInitPacket(report.Data, TestChannel, U2FHidCommand.Wink));
            scenario.Read(() => new HidInputReport(BuildInitPacket(TestChannel, U2FHidCommand.Wink)));

            var hid    = CreateHidMock();
            var device = new U2FHidKey(hid.Object, false);

            InitDevice(hid, device);

            scenario.Run(hid);

            // Act
            device.WinkAsync().Wait();

            // Assert
            scenario.End();
        }
Пример #7
0
        public void PingWithDataSendCorrectBytes()
        {
            // Setup
            var pingData = Encoding.UTF8.GetBytes("Testing !");
            var scenario = HidScenario.Build();

            scenario.Write(report => AssertWriteInitPacket(report.Data, TestChannel, U2FHidCommand.Ping, pingData));
            scenario.Read(() => new HidInputReport(BuildInitPacket(TestChannel, U2FHidCommand.Ping, pingData)));

            var hid    = CreateHidMock();
            var device = new U2FHidKey(hid.Object, false);

            InitDevice(hid, device);

            scenario.Run(hid);

            // Act
            var returnedResponse = device.Ping(pingData.Segment()).Result;

            // Assert
            scenario.End();
            Check.That(returnedResponse.ContentEquals(pingData.Segment()));
        }
Пример #8
0
        static U2FHidDeviceInfo InitDevice(Mock <IHidDevice> hid, U2FHidKey device)
        {
            // Setup
            var scenario = HidScenario.Build();
            var nonce    = new BytesHolder(8);

            scenario.Write(report => AssertWriteInitPacket(report.Data, 0xffffffff, U2FHidCommand.Init, nonce));
            scenario.Read(() => new HidInputReport(BuildInitPacket(
                                                       0xffffffff,
                                                       U2FHidCommand.Init,
                                                       nonce,
                                                       (uint)TestChannel,
                                                       (byte)1,
                                                       (byte)2,
                                                       (byte)3,
                                                       (byte)4,
                                                       (byte)U2FDeviceCapabilities.Wink)));

            scenario.Run(hid);
            var init = device.InitAsync().Result;

            scenario.End();
            return(init);
        }