code: static PublicKey makeInheritedParamsKey(PublicKey keyValueKey,
          PublicKey keyParamsKey) throws CertPathValidatorException
      {
          if (!(keyValueKey instanceof DSAPublicKey) ||
              !(keyParamsKey instanceof DSAPublicKey))
              throw new CertPathValidatorException("Input key is not " +
                                                   "appropriate type for " +
                                                   "inheriting parameters");
          DSAParams params = ((DSAPublicKey)keyParamsKey).getParams();
          if (params == null)
              throw new CertPathValidatorException("Key parameters missing");
          try {
              BigInteger y = ((DSAPublicKey)keyValueKey).getY();
              KeyFactory kf = KeyFactory.getInstance("DSA");
              DSAPublicKeySpec ks = new DSAPublicKeySpec(y,
                                                         params.getP(),
                                                         params.getQ(),
                                                         params.getG());
              return kf.generatePublic(ks);
          } catch (GeneralSecurityException e) {
              throw new CertPathValidatorException("Unable to generate key with" +
                                                   " inherited parameters: " +
                                                   e.getMessage(), e);
          }
      }
docs: Internal method to create a new key with inherited key parameters.
  
  @param keyValueKey key from which to obtain key value
  @param keyParamsKey key from which to obtain key parameters
  @return new public key having value and parameters
  @throws CertPathValidatorException if keys are not appropriate types
  for this operation