docs: private void processKeyUpdateDirective(String issuer, String ssd)
    {
      try
      {
        /**
         * Get unverified part of the JWT to extract issuer.
         *
         */
        //PlainJWT jwt_unverified = PlainJWT.parse(ssd);
        SignedJWT jwt_signed = SignedJWT.parse(ssd);
        String jwt_issuer = (String) jwt_signed.getHeader().getCustomParam("ssd_iss");
        String ssd_pubKey;
  
        if (!jwt_issuer.equals(issuer))
        {
          LOGGER.debug("Issuer mismatch. Invalid SSD");
          return;
        }
  
        if (jwt_issuer.equals("dep1"))
        {
          ssd_pubKey = ssdManager.getPubKey("dep1");
        }
        else
        {
          ssd_pubKey = ssdManager.getPubKey("dep2");
        }
  
        if (ssd_pubKey == null)
        {
          LOGGER.debug("Invalid SSD");
          return;
        }
  
        String publicKeyContent =
            ssd_pubKey.replaceAll("\\n", "").replace("-----BEGIN PUBLIC KEY-----", "").replace("-----END PUBLIC KEY-----", "");
        KeyFactory kf = KeyFactory.getInstance("RSA");
        X509EncodedKeySpec keySpecX509 = new X509EncodedKeySpec(Base64.decodeBase64(publicKeyContent));
        RSAPublicKey rsaPubKey = (RSAPublicKey) kf.generatePublic(keySpecX509);
  
        /**
         * Verify signature of the JWT Token
         */
        SignedJWT jwt_token_verified = SignedJWT.parse(ssd);
        JWSVerifier jwsVerifier = new RSASSAVerifier(rsaPubKey);
        try
        {
          if (jwt_token_verified.verify(jwsVerifier))
          {
            /**
             * verify nbf time
             */
            long cur_time = System.currentTimeMillis();
            Date nbf = jwt_token_verified.getJWTClaimsSet().getNotBeforeTime();
            //long nbf = jwt_token_verified.getJWTClaimsSet().getLongClaim("nbf");
            //double nbf = jwt_token_verified.getJWTClaimsSet().getDoubleClaim("nbf");
            if (cur_time < nbf.getTime())
            {
              LOGGER.debug("The SSD token is not yet valid. Current time less than Not Before Time");
              return;
            }
            float key_ver = Float.parseFloat(jwt_token_verified.getJWTClaimsSet().getStringClaim("keyVer"));
            if (key_ver <= ssdManager.getPubKeyVer(jwt_issuer))
            {
              return;
            }
            ssdManager.updateKey(jwt_issuer,
                                 jwt_token_verified.getJWTClaimsSet().getStringClaim("pubKey"),
                                 key_ver);
          }
        }
        catch (Throwable ex)
        {
          LOGGER.debug("Failed to verify JWT Token");
          throw ex;
        }
      }
      catch (Throwable ex)
      {
        LOGGER.debug("Failed to parse JWT Token, aborting");
      }
    }