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