예제 #1
0
        private async void ButtonGetAssertion_Click(object sender, RoutedEventArgs e)
        {
            addLog("<getAssertion>");

            var rpid      = "test.com";
            var challenge = Encoding.ASCII.GetBytes("this is challenge");
            var creid     = g.FIDO2.Common.HexStringToBytes("4096E0A8CC913B60041C03C3979442599C55B63675D6B1924CA493A6538EBC67940B234ABF1AED171ABDCD442774A1AE369DFFDCF81160B4C150F685DE8C9AFE");

            var param = new g.FIDO2.CTAP.CTAPCommandGetAssertionParam(rpid, challenge, creid);

            param.Option_up = true;
            param.Option_uv = false;

            var res = await con.GetAssertionAsync(param, "1234");

            LogResponse(res.DeviceStatus, res.CTAPResponse);

            if (res?.CTAPResponse?.Assertion?.NumberOfCredentials > 0)
            {
                for (int intIc = 0; intIc < res.CTAPResponse.Assertion.NumberOfCredentials - 1; intIc++)
                {
                    var next = await con.GetNextAssertionAsync();

                    LogResponse(res.DeviceStatus, next.CTAPResponse);
                }
            }
        }
예제 #2
0
        public async Task <g.FIDO2.Assertion> Authenticate(g.FIDO2.CTAP.AuthenticatorConnector con, string rpid, byte[] challenge, byte[] credentialId, string pin)
        {
            return(await Task <g.FIDO2.Assertion> .Run(async() => {
                var assertion = new g.FIDO2.Assertion();
                {
                    var param = new g.FIDO2.CTAP.CTAPCommandGetAssertionParam(rpid, challenge, credentialId);
                    param.Option_up = true;
                    // pinが未設定であればUVはtrue
                    param.Option_uv = string.IsNullOrEmpty(pin);

                    var res = await con.GetAssertionAsync(param, pin);

                    if (res?.CTAPResponse?.Assertion != null)
                    {
                        assertion = res.CTAPResponse.Assertion;
                    }

                    if (res?.CTAPResponse?.Assertion?.NumberOfCredentials > 0)
                    {
                        for (int intIc = 0; intIc < res.CTAPResponse.Assertion.NumberOfCredentials - 1; intIc++)
                        {
                            var next = await con.GetNextAssertionAsync();
                        }
                    }
                }

                return assertion;
            }));
        }
예제 #3
0
        private async void ButtonGetAssertion_Click(object sender, RoutedEventArgs e)
        {
            GetFirstUSBDevice();
            var rpid      = "test.com";
            var challenge = AttestationVerifier.CreateChallenge();
            var param     = new g.FIDO2.CTAP.CTAPCommandGetAssertionParam(rpid, challenge, creid);

            param.Option_up = true;

            var res = await con.GetAssertionAsync(param, "1234");

            if (res.DeviceStatus == g.FIDO2.CTAP.DeviceStatus.NotConnected)
            {
                // FIDOキーが接続されていない場合
                return;
            }
            else if (res.DeviceStatus == g.FIDO2.CTAP.DeviceStatus.Timeout)
            {
                // FIDOキーのタッチ待ちでTimeoutした場合
                return;
            }
            else if (res.DeviceStatus == g.FIDO2.CTAP.DeviceStatus.Ok)
            {
                string verifyResult = "";
                if (res.CTAPResponse.Assertion != null)
                {
                    // verify
                    var v      = new AssertionVerifier();
                    var verify = v.Verify(rpid, pubkey, challenge, res.CTAPResponse.Assertion);
                    verifyResult = $"- Verify = {verify.IsSuccess}";
                }
                MessageBox.Show($"GetAssertionAsync\r\n- Status = {res.CTAPResponse.Status}\r\n- StatusMsg = {res.CTAPResponse.StatusMsg}\r\n{verifyResult}");
            }
        }
예제 #4
0
        private async void ButtonGetAssertion_Click(object sender, RoutedEventArgs e)
        {
            addLog("<getAssertion>");

            var rpid      = "BLEtest.com";
            var challenge = Encoding.ASCII.GetBytes("this is challenge");

            byte[] creid = null;

            //Get the credential id entered in the text box (or stored from make credential)
            if (!string.IsNullOrEmpty(textBoxCreID.Text))
            {
                creid = g.FIDO2.Common.HexStringToBytes(textBoxCreID.Text);
            }
            var param = new g.FIDO2.CTAP.CTAPCommandGetAssertionParam(rpid, challenge, creid);

            param.Option_up = false;
            param.Option_uv = true;

            //param.UseHmacExtension = true;

            //var res = await con.GetAssertion(param);
            var res = await con.GetAssertionAsync(param, "");

            LogResponse(res.DeviceStatus, res.CTAPResponse);

            if (res?.CTAPResponse?.Assertion?.NumberOfCredentials > 0)
            {
                for (int intIc = 0; intIc < res.CTAPResponse.Assertion.NumberOfCredentials - 1; intIc++)
                {
                    var next = await con.GetNextAssertionAsync();

                    LogResponse(next.DeviceStatus, next.CTAPResponse);
                }
            }

            if (res.DeviceStatus == g.FIDO2.CTAP.DeviceStatus.Ok)
            {
                if (res.CTAPResponse.Assertion != null)
                {
                    // verify
                    var v      = new AssertionVerifier();
                    var verify = v.Verify(rpid, pubkey, challenge, res.CTAPResponse.Assertion);
                    addLog($"- Verify = {verify.IsSuccess}");
                }
            }
        }
예제 #5
0
        private async void ButtonAuth_Click(object sender, RoutedEventArgs e)
        {
            // server
            var rpid      = "test.com";
            var challenge = g.FIDO2.Util.Verifier.CreateChallenge();
            //var credentialId = g.FIDO2.Util.Common.HexStringToBytes("8F3045BE18CC2076E4EC8E5D9BCDEB7977B4217AE7B0503F0F5DBCF965CE172B28BFF3EE169E9F17D305E4D4C1FF0F7662A909D7ECA6AE63702AC9FFFBBAC229E907A29D29EE57E59949B075408A4C97780A04354407E73CAC72B31888E3DD09");

            // client
            var assertion = new g.FIDO2.Assertion();

            {
                var fidoDevs = g.FIDO2.CTAP.HID.HIDAuthenticatorConnector.GetAllFIDODevicePaths();
                if (fidoDevs.Count > 0)
                {
                    var con = new g.FIDO2.CTAP.HID.HIDAuthenticatorConnector(fidoDevs[0]);  //we assume that the first USB FIDO device found is the one we should use

                    var param = new g.FIDO2.CTAP.CTAPCommandGetAssertionParam(rpid, challenge, this.credentialID);
                    param.Option_up = true;
                    param.Option_uv = false;

                    var res = await con.GetAssertionAsync(param, "1234");

                    if (res?.CTAPResponse?.Assertion != null)
                    {
                        assertion = res.CTAPResponse.Assertion;
                    }

                    if (res?.CTAPResponse?.Assertion?.NumberOfCredentials > 0)
                    {
                        for (int intIc = 0; intIc < res.CTAPResponse.Assertion.NumberOfCredentials - 1; intIc++)
                        {
                            var next = await con.GetNextAssertionAsync();
                        }
                    }
                }
            }

            //server
            if (assertion != null)
            {
                var v      = new g.FIDO2.Util.AssertionVerifier();
                var result = v.Verify(rpid, this.publicKey, challenge, assertion);
            }
        }
예제 #6
0
        private async void ButtonGetAssertion_Click(object sender, RoutedEventArgs e)
        {
            var con = GetCurrentConnector();

            if (con is null)
            {
                return;
            }
            addLog("<getAssertion>");

            var rpid      = this.textBoxRPID.Text;
            var challenge = System.Text.Encoding.ASCII.GetBytes("this is challenge");

            //var creid = g.FIDO2.Common.HexStringToBytes("99F946F5EAC7F8F9D56FF1F791626143DCBB9450AAA102F4EDBFF6D9913E44E9161B7AE113EFC482DA6C22A9037840757D8DA9922233BCB99F0473528E6DD7E8");
            byte[] creid = null;
            if (!string.IsNullOrEmpty(textBoxCreID.Text))
            {
                creid = g.FIDO2.Common.HexStringToBytes(textBoxCreID.Text);
            }

            var param = new g.FIDO2.CTAP.CTAPCommandGetAssertionParam(rpid, challenge, creid);

            param.Option_up = true;
            param.Option_uv = false;

            string pin = this.textBoxPIN.Text;

            var res = await con.GetAssertionAsync(param, pin);

            LogResponse(res.DeviceStatus, res.CTAPResponse);

            if (res?.CTAPResponse?.Assertion?.NumberOfCredentials > 0)
            {
                for (int intIc = 0; intIc < res.CTAPResponse.Assertion.NumberOfCredentials - 1; intIc++)
                {
                    var next = await con.GetNextAssertionAsync();

                    LogResponse(res.DeviceStatus, next.CTAPResponse);
                }
            }
        }