示例#1
0
        /// <summary>
        /// Build the request for Regist a New FIDO2 Key using FIDO2
        /// </summary>
        public static PublicKeyCredentialCreationOptions ParsePublicKeyCredentialCreationOptions(Fido2RegistrationChallengeResponse data)
        {
            if (data == null)
            {
                return(null);
            }

            PublicKeyCredentialCreationOptions.Builder builder = new PublicKeyCredentialCreationOptions.Builder();
            if (data.Challenge != null && data.Challenge.Length > 0)
            {
                // Challenge to be sign
                builder.SetChallenge(CoreHelpers.Base64UrlDecode(data.Challenge));
            }
            if (data.ExcludeCredentials != null && data.ExcludeCredentials.Count > 0)
            {
                // List of FIDO2 Keys that already are registered to the user and shouldn't be excluded of registering again
                builder.SetExcludeList(ParseCredentialDescriptors(data.ExcludeCredentials));
            }
            if (data.Timeout > 0)
            {
                // temp limit to regist a new key
                builder.SetTimeoutSeconds((Java.Lang.Double)data.Timeout);
            }
            if (data.User != null)
            {
                // User information
                builder.SetUser(ParseUser(data.User));
            }
            if (data.Rp != null)
            {
                // Server information
                builder.SetRp(ParseRp(data.Rp));
            }
            if (data.PubKeyCredParams != null)
            {
                //Algorithm information
                builder.SetParameters(ParseParameters(data.PubKeyCredParams));
            }
            if (data.AuthenticatorSelection != null)
            {
                // Options of regist selected
                builder.SetAuthenticatorSelection(ParseSelection(data.AuthenticatorSelection));
            }
            if (data.attestation != null)
            {
                // It is how the signature is given, anonymously or direct.
                //Skip
            }
            if (data.Extensions != null)
            {
                // Adicional parameter to improve even more the security
                //Skip
            }
            return(builder.Build());
        }
        /// <summary>
        /// Build the request for Regist a New FIDO2 Key using FIDO2
        /// </summary>
        public static PublicKeyCredentialCreationOptions ParsePublicKeyCredentialCreationOptions(Dictionary <string, object> data)
        {
            PublicKeyCredentialCreationOptions.Builder builder = new PublicKeyCredentialCreationOptions.Builder();
            foreach (KeyValuePair <string, object> entry in data)
            {
                switch (entry.Key)
                {
                case "user":     // User information
                    builder.SetUser(ParseUser((Dictionary <string, string>)entry.Value));
                    break;

                case "challenge":     // Challenge to be sign
                    builder.SetChallenge(CoreHelpers.Base64UrlDecode((string)entry.Value));
                    break;

                case "pubKeyCredParams":     //Algorithm information
                    builder.SetParameters(ParseParameters((List <Dictionary <string, object> >)entry.Value));
                    break;

                case "authenticatorSelection":     // Options of regist selected
                    builder.SetAuthenticatorSelection(ParseSelection((Dictionary <string, string>)entry.Value));
                    break;

                case "excludeCredentials":     // List of FIDO2 Keys that already are registered to the user and shouldn't be excluded of registering again
                    builder.SetExcludeList(ParseCredentialDescriptors((List <Dictionary <string, object> >)entry.Value));
                    break;

                case "rpId":     // Server ID information
                    builder.SetRp(new PublicKeyCredentialRpEntity((string)entry.Value, null, null));
                    break;

                case "rp":     // Server information
                    builder.SetRp(ParseRp((Dictionary <string, string>)entry.Value));
                    break;

                case "timeout":     // temp limit to regist a new key
                    builder.SetTimeoutSeconds((Java.Lang.Double)(double) entry.Value);
                    break;

                case "userVerification":     // Require that user has to verify before using FIDO2
                    //Skip
                    break;

                case "attestation":     //It is how the signature is given, anonymously or direct.
                    //Skip
                    break;
                }
            }
            return(builder.Build());
        }