Example #1
0
        public async Task Sign()
        {
            var keySignRequests = new[]
            {
                new KeySignRequest(U2FVersion.V2, BROWSER_DATA_SIGN_SHA256, APP_ID_SIGN_SHA256, KEY_HANDLE)
            };

            keyOperations
            .Setup(
                x => x.Sign(
                    It.Is <ICollection <KeySignRequest> >(reqs => reqs.SequenceEqual(keySignRequests)),
                    It.IsAny <CancellationToken>(),
                    false))
            .Returns(
                (ICollection <KeySignRequest> reqs, CancellationToken ct, bool individualAttest) =>
                Task.FromResult(
                    SignOperationResult.Success(
                        reqs.Single(),
                        new KeySignResponse(
                            UserPresenceVerifierConstants.UserPresentFlag,
                            COUNTER_VALUE,
                            SIGNATURE_AUTHENTICATE))));

            var signRequest = new SignRequest(U2FConsts.U2Fv2, SERVER_CHALLENGE_SIGN_BASE64, APP_ID_SIGN, KEY_HANDLE_BASE64, SESSION_ID);

            var result = await u2FClient.Sign(new[] { signRequest }, CancellationToken.None);

            Assert.AreEqual(new SignResponse
                                (BROWSER_DATA_SIGN_BASE64, SIGN_RESPONSE_DATA_BASE64, SERVER_CHALLENGE_SIGN_BASE64
                                , SESSION_ID, APP_ID_SIGN), result);
        }
Example #2
0
        private static async Task TestNew2()
        {
            var hidFactory = Win32HidDeviceFactory.Instance;
            var keyFactory = new U2FHidKeyFactory(hidFactory);

            var dataStore = new InMemoryServerDataStore(new GuidSessionIdGenerator());

            LoadDataStore(dataStore);
            var server = new U2FServerReferenceImpl(
                new ChallengeGenerator(),
                dataStore,
                new BouncyCastleServerCrypto(),
                new[] { "http://example.com", "https://example.com" });

            var myClient = new U2FClient(
                new DummySender("http://example.com", new JObject()),
                keyFactory);

            Console.WriteLine("Register or Sign ? (r/s)");
            var mode = Console.ReadLine();

            if (mode == "s")
            {
                var signRequests = server.GetSignRequests("vbfox", "http://example.com");
                Console.WriteLine("Sign requests obtained ({0})", signRequests.Count);
                var cts = new CancellationTokenSource(TimeSpan.FromMinutes(10));
                var x   = await myClient.Sign(signRequests, cts.Token);

                Console.WriteLine("Signature done {0}", x);
                if (x != null)
                {
                    var serverResp = server.ProcessSignResponse(x);
                    Console.WriteLine("Server ok: {0}", serverResp);
                    SaveDataStore(dataStore);
                }
            }
            else if (mode == "r")
            {
                var signRequests = server.GetSignRequests("vbfox", "http://example.com");
                var regRequest   = server.GetRegistrationRequest("vbfox", "http://example.com");
                var cts          = new CancellationTokenSource(TimeSpan.FromMinutes(10));
                var x            = await myClient.Register(new[] { regRequest }, signRequests, cts.Token);

                Console.WriteLine("Authentication done {0}", x);
                if (x != null)
                {
                    var serverResp = server.ProcessRegistrationResponse(x, ToUnixTimeMilliseconds(SystemClock.Instance.Now));
                    Console.WriteLine("Server ok: {0}", serverResp);
                    SaveDataStore(dataStore);
                }
            }
            else
            {
                Console.WriteLine("???");
            }

            Console.ReadLine();
            return;
        }
Example #3
0
        private static async Task TestNew()
        {
            var hidFactory = Win32HidDeviceFactory.Instance;
            var keyFactory = new U2FHidKeyFactory(hidFactory);
            var keyIds     = await keyFactory.FindAllAsync();

            var keyId = keyIds.First();

            var dataStore = new InMemoryServerDataStore(new GuidSessionIdGenerator());

            LoadDataStore(dataStore);
            var server = new U2FServerReferenceImpl(
                new ChallengeGenerator(),
                dataStore,
                new BouncyCastleServerCrypto(),
                new[] { "http://example.com", "https://example.com" });

            var myClient = new U2FClient(
                new DummySender("http://example.com", new JObject()),
                (o, a, ct) => Task.FromResult(true),
                (o, a, ct) => Task.FromResult(true),
                keyFactory,
                BouncyCastleClientCrypto.Instance);

            var signRequests = server.GetSignRequests("vbfox", "http://example.com");

            var x = await myClient.Sign(signRequests, CancellationToken.None);

            return;


            var origin    = "http://example.com";
            var channelId = new JObject();



            var requestAndClientDatas = signRequests
                                        .Select(signRequest =>
            {
                string clientDataB64;
                var authRequest = U2FClientReferenceImpl.SignRequestToAuthenticateRequest("http://example.com", signRequest, new JObject(),
                                                                                          out clientDataB64, BouncyCastleClientCrypto.Instance);
                return(Tuple.Create(signRequest, clientDataB64, authRequest));
            })
                                        .ToList();

            new U2FClient(
                new DummySender("http://example.com", new JObject()),
                (o, a, ct) => Task.FromResult(true),
                (o, a, ct) => Task.FromResult(true),
                keyFactory,
                BouncyCastleClientCrypto.Instance);



            using (var u2f = await keyId.OpenAsync())
            {
                var key = new U2FDeviceKey(u2f);



                var client = new U2FClientReferenceImpl(
                    BouncyCastleClientCrypto.Instance,
                    new SimpleOriginVerifier(new[] { "http://example.com", "https://example.com" }),
                    new ChannelProvider(),
                    server,
                    key,
                    SystemClock.Instance);


                //client.Register("http://example.com", "vbfox");
                //SaveDataStore(dataStore);

                client.Authenticate("http://example.com", "vbfox");
                SaveDataStore(dataStore);
            }

            Console.WriteLine("Done.");
            Console.ReadLine();
        }