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; } } } }
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}"); } }