Exemple #1
0
        private void OnExecute()
        {
            Fido2Settings.Flags = FidoFlags.Debug;
            var ext = FidoExtensions.None;

            if (HMACSalt != null)
            {
                ext |= FidoExtensions.HmacSecret;
            }
            if (BlobKey != null)
            {
                ext |= FidoExtensions.LargeBlobKey;
            }

            using (var assert = new FidoAssertion()) {
                using (var dev = new FidoDevice()) {
                    dev.Open(Device);
                    if (ForceU2F)
                    {
                        dev.ForceU2F();
                    }

                    assert.SetClientData(Cd);
                    assert.Rp = "localhost";
                    assert.SetExtensions(ext);
                    if (UserPresenceRequired)
                    {
                        assert.SetUserPresenceRequired(true);
                    }

                    if (UserVerificationRequired)
                    {
                        assert.SetUserVerificationRequired(true);
                    }

                    if (Timeout != 0)
                    {
                        dev.SetTimeout(TimeSpan.FromSeconds(Timeout));
                    }

                    if (CredentialId != null)
                    {
                        var credId = File.ReadAllBytes(CredentialId);
                        assert.AllowCredential(credId);
                    }

                    dev.GetAssert(assert, Pin);
                    dev.Close();
                }

                if (assert.Count != 1)
                {
                    throw new Exception($"{assert.Count} signatures required");
                }

                if (Pin != null)
                {
                    UserVerificationRequired = true;
                }

                VerifyAssert(assert[0].AuthData, assert[0].Signature, ext);

                if (HMACSecret != null)
                {
                    File.WriteAllBytes(HMACSecret, assert[0].HmacSecret.ToArray());
                }
            }
        }
Exemple #2
0
        private void OnExecute()
        {
            Fido2Settings.Flags = FidoFlags.Debug;
            var ext = FidoExtensions.None;

            if (UseHmac)
            {
                ext |= FidoExtensions.HmacSecret;
            }

            if (BlobKey != null)
            {
                ext |= FidoExtensions.LargeBlobKey;
            }

            using (var cred = new FidoCredential()) {
                using (var dev = new FidoDevice()) {
                    dev.Open(Device);
                    if (ForceU2F)
                    {
                        dev.ForceU2F();
                    }

                    if (Exclude != null)
                    {
                        var credId = File.ReadAllBytes(Exclude);
                        cred.Exclude(credId);
                    }

                    cred.SetType(FromKeyType(Type));
                    cred.SetClientData(Cd);
                    cred.Rp = new FidoCredentialRp
                    {
                        Id   = "localhost",
                        Name = "sweet home localhost"
                    };

                    cred.SetUser(new FidoCredentialUser
                    {
                        Id          = UserId,
                        DisplayName = "john smith",
                        Name        = "jsmith"
                    });

                    cred.SetExtensions(ext);

                    if (ResidentKey)
                    {
                        cred.SetResidentKeyRequired(true);
                    }

                    if (UserVerificationRequired)
                    {
                        cred.SetUserVerificationRequried(true);
                    }

                    if (Timeout > 0)
                    {
                        dev.SetTimeout(TimeSpan.FromSeconds(Timeout));
                    }

                    dev.MakeCredential(cred, Pin);
                    dev.Close();
                }

                if (Pin != null)
                {
                    UserVerificationRequired = true;
                }

                VerifyCred(cred.Format, cred.AuthData, cred.X5C, cred.Signature);
            }
        }