pentaho/pentaho-kettle · error · KettleException

CheckSum.Error.Digest

CheckSum.Error.Digest

Error message

CheckSum.Error.Digest

What it means

CheckSum step wraps any unexpected failure while initializing the message digest / checksum calculator into a KettleException with key 'CheckSum.Error.Digest'. It is a catch-all around checksum-type resolution and MessageDigest.getInstance/initialization, so any unrecognized algorithm or provider failure surfaces here.

Solutions

  1. Use the exact JDK algorithm name (e.g. 'MD5', 'SHA-1', 'SHA-256') in the CheckSum step's checksum type
  2. Check java.security providers (Security.getProviders()) on the runtime JVM; add BouncyCastle or the missing provider if the algorithm is absent
  3. Re-open the transformation and re-select the checksum type from the dropdown so meta stores a valid value
  4. Read the chained cause ('cause by') of the KettleException for the underlying digest error

Example fix

// before
checksumType = "SHA256";
// after
checksumType = "SHA-256";
Defensive patterns

Strategy: validation

Validate before calling

String type = meta.getCheckSumType();
try {
  javax.crypto.Mac.getInstance(type); // or MessageDigest.getInstance for digest types
} catch (java.security.NoSuchAlgorithmException e) {
  throw new IllegalArgumentException("Unsupported checksum type: " + type);
}

Try / catch

try { step.processRow(); } catch (KettleException e) { if (e.getMessage().contains("CheckSum.Error.Digest")) { /* fix algorithm name/provider */ } throw e; }

Prevention

When it happens

Trigger: processRow -> initializeChecksumCalculator called with meta.getCheckSumType() naming a checksum algorithm for which MessageDigest/Checksum instantiation throws (e.g. unsupported or misspelled algorithm, security provider unavailable, KettleException rethrown).

Common situations: Typing an algorithm name like 'SHA256' when the JVM only offers 'SHA-256'; running on a stripped JRE without the needed crypto provider; corrupted transformation metadata passing a null/invalid checksum type.

Understand the failure class

Background: Checksum mismatch errors: "checksum verification failed", "digest mismatch", "expected vs actual checksum" — what they mean and how to fix them — this error's family across 41 libraries.

Related errors


AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13). Data as JSON: /api/errors/73377a584d67df3d. Report an issue: GitHub.

Appendix: source

Thrown at plugins/core/impl/src/main/java/org/pentaho/di/trans/steps/checksum/CheckSum.java:195

        case CheckSumMeta.TYPE_SHA256:
          data.checksumCalculator =
              new DigestChecksumCalculator( MessageDigest.getInstance( meta.getCheckSumType() ) );
          break;
        case CheckSumMeta.TYPE_ADLER32:
          data.checksumCalculator = new ChecksumChecksumCalculator( new Adler32() );
          break;
        case CheckSumMeta.TYPE_CRC32:
          data.checksumCalculator = new ChecksumChecksumCalculator( new CRC32() );
          break;
        default:
          throw new KettleException(
          BaseMessages.getString( PKG, "CheckSum.Error.UnknownChecksumType", meta.getCheckSumType() ) );
      }
    } catch ( KettleException e ) {
      // Rethrow it
      throw e;
    } catch ( Exception e ) {
      throw new KettleException( BaseMessages.getString( PKG, "CheckSum.Error.Digest" ), e );
    }
  }

  private void initializeFieldConverters( RowMetaInterface inputRowMeta, int[] fieldIndexMapping ) throws KettleException {
    data.fieldConverters = new FieldToBytesConverter[ fieldIndexMapping.length ];
    for ( int i = 0; i < fieldIndexMapping.length; i++ ) {
      switch ( meta.getEvaluationMethod() ) {
        case CheckSumMeta.EVALUATION_METHOD_BYTES:
          data.fieldConverters[ i ] = new BytesToBytesConverter( inputRowMeta, fieldIndexMapping[ i ] );
          break;
        case CheckSumMeta.EVALUATION_METHOD_PENTAHO_STRINGS:
          data.fieldConverters[ i ] = new PentahoStringsToBytesConverter( inputRowMeta, fieldIndexMapping[ i ] );
          break;
        case CheckSumMeta.EVALUATION_METHOD_NATIVE_STRINGS:
          data.fieldConverters[ i ] = new NativeStringsToBytesConverter( inputRowMeta, fieldIndexMapping[ i ] );
          break;
        default:
          throw new KettleException(

View on GitHub (pinned to f3058517a1)