public static string valueOf(RegisteredClaim registeredClaim, Error error)
        {
            switch (registeredClaim)
            {
            case RegisteredClaim.iss:
                return("iss");

            case RegisteredClaim.exp:
                return("exp");

            case RegisteredClaim.sub:
                return("sub");

            case RegisteredClaim.aud:
                return("aud");

            case RegisteredClaim.nbf:
                return("nbf");

            case RegisteredClaim.iat:
                return("iat");

            case RegisteredClaim.jti:
                return("jti");

            default:
                error.setError("RC001", "Unknown registered Claim");
                return("Unknown registered claim");
            }
        }
        public static bool validateClaim(string registeredClaimKey, string registeredClaimValue, long registeredClaimCustomTime, JwtSecurityToken token, Error error)
        {
            RegisteredClaim claim = RegisteredClaimUtils.getRegisteredClaim(registeredClaimKey, error);

            if (error.existsError())
            {
                return(false);
            }
            Int32 newTime = 0;

            switch (claim)
            {
            case RegisteredClaim.iss:
                return(SecurityUtils.compareStrings(token.Payload.Iss, registeredClaimValue));

            case RegisteredClaim.exp:
                int?exp = token.Payload.Exp;
                if (exp == null)
                {
                    return(false);
                }

                if (registeredClaimCustomTime != 0)
                {
                    newTime = (Int32)(DateTime.UtcNow.AddSeconds(-1 * registeredClaimCustomTime).Subtract(new DateTime(1970, 1, 1))).TotalSeconds;
                }
                else
                {
                    newTime = (Int32)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;
                }
                return((Int32)exp >= newTime);

            case RegisteredClaim.sub:
                return(SecurityUtils.compareStrings(token.Payload.Sub, registeredClaimValue));

            case RegisteredClaim.aud:
                IList <string> audience = token.Payload.Aud;
                return(SecurityUtils.compareStrings(audience[0], registeredClaimValue));

            case RegisteredClaim.nbf:
                int?nbf = token.Payload.Nbf;
                if (nbf == null)
                {
                    return(false);
                }

                if (registeredClaimCustomTime != 0)
                {
                    newTime = (Int32)(DateTime.UtcNow.AddSeconds(-(double)registeredClaimCustomTime).Subtract(new DateTime(1970, 1, 1))).TotalSeconds;
                }
                else
                {
                    newTime = (Int32)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;
                }
                return((Int32)nbf >= newTime);

            case RegisteredClaim.iat:
                int?iat = token.Payload.Iat;
                if (iat == null)
                {
                    return(false);
                }
                return(SecurityUtils.compareStrings(iat.ToString(), registeredClaimValue));

            case RegisteredClaim.jti:
                return(SecurityUtils.compareStrings(token.Payload.Jti, registeredClaimValue));

            default:
                error.setError("RC003", "Unknown registered Claim");
                return(false);
            }
        }