public static WebAuthnResult AuthenticatorMakeCredential(IntPtr window, RelayingPartyInfo rp, UserInfo user, ICollection <CoseCredentialParameter> coseParams, ClientData clientData, AuthenticatorMakeCredentialOptions makeOptions, out CredentialAttestation credential) { //TODO: extensions credential = null; var rawUser = new RawUserInfo(user); var rawCredList = new RawCoseCredentialParameters(coseParams); var rawClientData = new RawClientData(clientData); var rawMakeCredOptions = makeOptions == null ? null : new RawAuthenticatorMakeCredentialOptions(makeOptions); var res = RawAuthenticatorMakeCredential(window, rp, rawUser, rawCredList, rawClientData, rawMakeCredOptions, out var rawCredPtr); if (rawCredPtr != IntPtr.Zero) { var rawCredObj = Marshal.PtrToStructure <RawCredentialAttestation>(rawCredPtr); credential = rawCredObj?.MarshalToPublic(); FreeRawCredentialAttestation(rawCredPtr); } rawUser.Dispose(); rawCredList.Dispose(); rawClientData.Dispose(); rawMakeCredOptions?.Dispose(); return(res); }
public RawAuthenticatorMakeCredentialOptions(AuthenticatorMakeCredentialOptions makeOptions) { ExcludeCredentialsList = new RawCredentialsList(makeOptions.ExcludeCredentials); if (makeOptions.ExcludeCredentialsEx?.Count > 0) { _excludeCredentialsExList = new RawCredentialExList(makeOptions.ExcludeCredentialsEx); ExcludeCredentialsExListPtr = Marshal.AllocHGlobal(Marshal.SizeOf<RawCredentialExList>()); Marshal.StructureToPtr(_excludeCredentialsExList, ExcludeCredentialsExListPtr, false); } CancellationId = IntPtr.Zero; if (makeOptions.CancellationId.HasValue) { CancellationId = Marshal.AllocHGlobal(Marshal.SizeOf<Guid>()); Marshal.StructureToPtr(makeOptions.CancellationId.Value, CancellationId, false); } TimeoutMilliseconds = makeOptions.TimeoutMilliseconds; AuthenticatorAttachment = makeOptions.AuthenticatorAttachment; UserVerificationRequirement = makeOptions.UserVerificationRequirement; AttestationConveyancePreference = makeOptions.AttestationConveyancePreference; RequireResidentKey = makeOptions.RequireResidentKey; Extensions = new RawWebauthnExtensions { Count = 0, Extensions = IntPtr.Zero }; //TODO }