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