{"record":{"id":"0dc9a38a46c735b1","repo":"pentaho/pentaho-kettle","slug":"symmetriccryptometa-couldnotfoundalgorithm","errorCode":"SymmetricCryptoMeta.CouldNotFoundAlgorithm","errorMessage":"SymmetricCryptoMeta.CouldNotFoundAlgorithm","messagePattern":"SymmetricCryptoMeta\\.CouldNotFoundAlgorithm","errorType":"exception","errorClass":"CryptoException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/steps/symmetriccrypto/symmetricalgorithm/SymmetricCryptoMeta.java","lineNumber":90,"sourceCode":"  /**\n   * Search for the right type of DatabaseInterface object and return it.\n   *\n   * @param databaseType\n   *          the type of DatabaseInterface to look for (description)\n   * @return The requested DatabaseInterface\n   *\n   * @throws CryptoException\n   *           when the type could not be found or referenced.\n   */\n  private static final synchronized SymmetricCryptoInterface findSymmetricCryptoInterface( String cryptograhname ) throws CryptoException {\n    SymmetricCryptoInterface[] di = getSymmetricCryptoInterfaces();\n    for ( int i = 0; i < di.length; i++ ) {\n      if ( di[i].getAlgorithm().equalsIgnoreCase( cryptograhname ) ) {\n        return di[i];\n      }\n    }\n\n    throw new CryptoException( BaseMessages.getString(\n      PKG, \"SymmetricCryptoMeta.CouldNotFoundAlgorithm\", cryptograhname ) );\n  }\n\n  public static final synchronized SymmetricCryptoInterface[] getSymmetricCryptoInterfaces() {\n    if ( allSymmetricCryptoInterface != null ) {\n      return allSymmetricCryptoInterface;\n    }\n\n    Class<?>[] ic = SymmetricCryptoInterface.implementingClasses;\n    allSymmetricCryptoInterface = new SymmetricCryptoInterface[ic.length];\n    for ( int i = 0; i < ic.length; i++ ) {\n      try {\n        Class.forName( ic[i].getName() );\n        allSymmetricCryptoInterface[i] = (SymmetricCryptoInterface) ic[i].newInstance();\n      } catch ( Exception e ) {\n        throw new RuntimeException( \"Error creating class for : \" + ic[i].getName(), e );\n      }\n    }","sourceCodeStart":72,"sourceCodeEnd":108,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/steps/symmetriccrypto/symmetricalgorithm/SymmetricCryptoMeta.java#L72-L108","documentation":"SymmetricCryptoMeta.findSymmetricCryptoInterface throws CryptoException 'SymmetricCryptoMeta.CouldNotFoundAlgorithm' when no registered SymmetricCryptoInterface's getAlgorithm() matches the given name (case-insensitive). The static registry contains only the built-in algorithm plugins found at class init.","triggerScenarios":"getSymmetricCryptoInterface(name) called with an algorithm name that no registered interface declares — e.g. 'Camellia' when only AES/DES/Twofish/etc. are registered, or a name differing from the plugin's declared algorithm string.","commonSituations":"Transformation metadata references an algorithm not present in this Kettle version; custom crypto plugin JAR missing from the classpath; scheme string saved with different spelling/whitespace than the plugin's algorithm name.","solutions":["Use one of the registered algorithms — list them via SymmetricCryptoMeta.getSymmetricCryptoInterfaces() and check getAlgorithm() values","Trim the algorithm name and retry; stray whitespace breaks equalsIgnoreCase","Add the custom algorithm plugin JAR to the classpath (lib/ or plugins dir)","Upgrade Pentaho if the algorithm was added in a newer version"],"exampleFix":"// before\nSymmetricCryptoInterface i = SymmetricCryptoMeta.getSymmetricCryptoInterface(\"Camellia\");\n// after\nSymmetricCryptoInterface i = SymmetricCryptoMeta.getSymmetricCryptoInterface(\"AES\");","handlingStrategy":"type-guard","validationCode":"boolean supported = java.util.Arrays.stream(SymmetricCryptoMeta.getSymmetricCryptoInterfaces())\n  .anyMatch(i -> i.getAlgorithm().equalsIgnoreCase(name.trim()));","typeGuard":"SymmetricCryptoInterface find(String name) {\n  for (SymmetricCryptoInterface i : SymmetricCryptoMeta.getSymmetricCryptoInterfaces()) {\n    if (i.getAlgorithm().equalsIgnoreCase(name.trim())) return i;\n  }\n  return null;\n}","tryCatchPattern":"try { iface = SymmetricCryptoMeta.getSymmetricCryptoInterface(name); } catch (CryptoException e) { log.error(\"Unknown algorithm \" + name, e); }","preventionTips":["Check the registered algorithm list before configuring","Trim algorithm names from user input/variables","Deploy plugin JARs for custom algorithms"],"tags":["crypto","algorithm-not-found","plugin","registry"],"backgroundTag":"invalid-enum-value","analyzedSha":"f3058517a153da500bf4551f46d79b91bf8ec552","analyzedAt":"2026-09-13T14:04:16.340Z","contentChangedAt":"2026-09-13T14:04:16.340Z","schemaVersion":2},"datasetVersion":"2026-09-20T23:17:15.980Z"}