Beispiel #1
0
        private async void ButtonMakeCredential_Click(object sender, RoutedEventArgs e)
        {
            addLog("<makeCredential>");

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

            var param = new g.FIDO2.CTAP.CTAPCommandMakeCredentialParam(rpid, challenge, userid);

            param.Option_rk       = (bool)this.checkBoxRK.IsChecked;
            param.Option_uv       = false;
            param.UserName        = "******";
            param.UserDisplayName = "DispUser";

            //Request the hmac secret extension for this credential
            if (this.checkBoxHmacSecret.IsChecked.HasValue && this.checkBoxHmacSecret.IsChecked.Value)
            {
                param.Extensions = new Dictionary <string, bool> {
                    { "hmac-secret", true }
                };
            }

            string pin = this.textBoxPIN.Text;
            var    res = await con.MakeCredentialAsync(param, pin);

            LogResponse(res.DeviceStatus, res.CTAPResponse);

            if (res.DeviceStatus == g.FIDO2.CTAP.DeviceStatus.NotConnected)
            {
                addLog("FIDO Key Not Connected");
                return;
            }
            else if (res.DeviceStatus == g.FIDO2.CTAP.DeviceStatus.Timeout)
            {
                addLog("UP or UV timeout");
                return;
            }
            else if (res.DeviceStatus == g.FIDO2.CTAP.DeviceStatus.Ok)
            {
                if (res.CTAPResponse.Status == 0)
                {
                    if (res.CTAPResponse.Attestation != null)
                    {
                        addLog("Get CTAP Response");

                        // verify (g.FIDO2.Util.dll)
                        // var att = res.CTAPResponse.Attestation;
                        //var v = new AttestationVerifier();
                        //var verify = v.Verify(challenge, att);

                        var creid = g.FIDO2.Common.BytesToHexString(res.CTAPResponse.Attestation.CredentialId);
                        addLog($"- CredentialID = {creid}\r\n");
                        textBoxCreID.Text = creid;
                    }
                }
            }
        }
Beispiel #2
0
        private async void ButtonMakeCredential_Click(object sender, RoutedEventArgs e)
        {
            GetFirstUSBDevice();
            string rpid      = "test.com";
            var    challenge = AttestationVerifier.CreateChallenge();
            var    param     = new g.FIDO2.CTAP.CTAPCommandMakeCredentialParam(rpid, challenge);
            var    res       = await con.MakeCredentialAsync(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.Status == 0)
                {
                    if (res.CTAPResponse.Attestation != null)
                    {
                        // verify
                        var v      = new AttestationVerifier();
                        var verify = v.Verify(rpid, challenge, res.CTAPResponse.Attestation);
                        verifyResult = $"- Verify = {verify.IsSuccess}\r\n- CredentialID = {Common.BytesToHexString(verify.CredentialID)}\r\n- PublicKey = {verify.PublicKeyPem}";
                        if (verify.IsSuccess)
                        {
                            // store
                            creid  = verify.CredentialID.ToArray();
                            pubkey = verify.PublicKeyPem;
                        }
                    }
                }
                MessageBox.Show($"MakeCredentialAsync\r\n- Status = {res.CTAPResponse.Status}\r\n- StatusMsg = {res.CTAPResponse.StatusMsg}\r\n{verifyResult}");
            }
        }