public override bool Equals(object obj)
        {
            Credentials credentialsObj = obj as Credentials;

            if (credentialsObj == null)
            {
                return(false);
            }
            else
            {
                return(this.Mail == credentialsObj.Mail && (
                           HashingEncryption.VerifyWithBCrypt(credentialsObj.Password ?? "", this.HashedPwd) ||
                           HashingEncryption.VerifyWithBCrypt(this.Password ?? "", credentialsObj.HashedPwd)
                           ));
            }
        }
        public static Credentials Create(string mail, string password)
        {
            var credentials = new Credentials();

            if (!MailValidation.IsValid(mail))
            {
                throw UserException.InvalidMailException(mail);
            }

            if (!credentials.IsPasswordValid(password))
            {
                throw UserException.InvalidPasswordException(password);
            }

            credentials.Mail      = mail;
            credentials.Password  = password;
            credentials.HashedPwd = HashingEncryption.EncryptWithBCrypt(password);

            return(credentials);
        }