private bool validateRegisteredClaims(JwtSecurityToken jwtToken, JWTOptions options)
 {
     // Adding registered claims
     if (options.hasRegisteredClaims())
     {
         RegisteredClaims registeredClaims = options.getAllRegisteredClaims();
         List <Claim>     registeredC      = registeredClaims.getAllClaims();
         foreach (Claim registeredClaim in registeredC)
         {
             string registeredClaimKey   = registeredClaim.getKey();
             object registeredClaimValue = registeredClaim.getValue();
             if (RegisteredClaimUtils.exists(registeredClaimKey))
             {
                 if (!RegisteredClaimUtils.isTimeValidatingClaim(registeredClaimKey))
                 {
                     if (!RegisteredClaimUtils.validateClaim(registeredClaimKey, (string)registeredClaimValue, 0, jwtToken, this.error))
                     {
                         return(false);
                     }
                 }
                 else
                 {
                     long customValidationTime = registeredClaims.getClaimCustomValidationTime(registeredClaimKey);
                     //int value = (int)registeredClaimValue;
                     if (!RegisteredClaimUtils.validateClaim(registeredClaimKey, (string)registeredClaimValue, customValidationTime, jwtToken, this.error))
                     {
                         return(false);
                     }
                 }
                 if (this.HasError())
                 {
                     return(false);
                 }
             }
             else
             {
                 error.setError("JW002", registeredClaimKey + " wrong registered claim key");
                 return(false);
             }
         }
     }
     return(true);
 }
        private JwtPayload doBuildPayload(PrivateClaims privateClaims, JWTOptions options)
        {
            JwtPayload payload = new JwtPayload();
            // ****START BUILD PAYLOAD****//
            // Adding private claims
            List <Claim> privateC = privateClaims.getAllClaims();

            foreach (Claim privateClaim in privateC)
            {
                if (privateClaim.getNestedClaims() != null)
                {
                    payload.Add(privateClaim.getKey(), privateClaim.getNestedClaims().getNestedMap());
                }
                else
                {
                    System.Security.Claims.Claim netPrivateClaim = null;
                    object obj = privateClaim.getValue();
                    if (obj.GetType() == typeof(string))
                    {
                        netPrivateClaim = new System.Security.Claims.Claim(privateClaim.getKey(), (string)privateClaim.getValue());
                    }
                    else if (obj.GetType() == typeof(int))
                    {
                        int value = (int)obj;
                        netPrivateClaim = new System.Security.Claims.Claim(privateClaim.getKey(), value.ToString(), System.Security.Claims.ClaimValueTypes.Integer32);
                    }
                    else if (obj.GetType() == typeof(long))
                    {
                        long value = (long)obj;
                        netPrivateClaim = new System.Security.Claims.Claim(privateClaim.getKey(), value.ToString(), System.Security.Claims.ClaimValueTypes.Integer64);
                    }
                    else if (obj.GetType() == typeof(double))
                    {
                        double value = (double)obj;
                        netPrivateClaim = new System.Security.Claims.Claim(privateClaim.getKey(), value.ToString(), System.Security.Claims.ClaimValueTypes.Double);
                    }
                    else if (obj.GetType() == typeof(bool))
                    {
                        bool value = (bool)obj;
                        netPrivateClaim = new System.Security.Claims.Claim(privateClaim.getKey(), value.ToString(), System.Security.Claims.ClaimValueTypes.Boolean);
                    }
                    else
                    {
                        this.error.setError("JW012", "Unrecognized data type");
                    }

                    //System.Security.Claims.Claim netPrivateClaim = new System.Security.Claims.Claim(privateClaim.getKey(), privateClaim.getValue());

                    payload.AddClaim(netPrivateClaim);
                }
            }
            // Adding public claims
            if (options.hasPublicClaims())
            {
                PublicClaims publicClaims = options.getAllPublicClaims();
                List <Claim> publicC      = publicClaims.getAllClaims();
                foreach (Claim publicClaim in publicC)
                {
                    System.Security.Claims.Claim netPublicClaim = new System.Security.Claims.Claim(publicClaim.getKey(), (string)publicClaim.getValue());
                    payload.AddClaim(netPublicClaim);
                }
            }
            // Adding registered claims
            if (options.hasRegisteredClaims())
            {
                RegisteredClaims registeredClaims = options.getAllRegisteredClaims();
                List <Claim>     registeredC      = registeredClaims.getAllClaims();
                foreach (Claim registeredClaim in registeredC)
                {
                    System.Security.Claims.Claim netRegisteredClaim;

                    if (RegisteredClaimUtils.isTimeValidatingClaim(registeredClaim.getKey()))
                    {
                        netRegisteredClaim = new System.Security.Claims.Claim(registeredClaim.getKey(), (string)registeredClaim.getValue(), System.Security.Claims.ClaimValueTypes.Integer32);
                    }
                    else
                    {
                        netRegisteredClaim = new System.Security.Claims.Claim(registeredClaim.getKey(), (string)registeredClaim.getValue());
                    }

                    payload.AddClaim(netRegisteredClaim);
                }
            }
            // ****END BUILD PAYLOAD****//
            return(payload);
        }