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
- Use the exact JDK algorithm name (e.g. 'MD5', 'SHA-1', 'SHA-256') in the CheckSum step's checksum type
- Check java.security providers (Security.getProviders()) on the runtime JVM; add BouncyCastle or the missing provider if the algorithm is absent
- Re-open the transformation and re-select the checksum type from the dropdown so meta stores a valid value
- 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
- Use exact JDK algorithm names (SHA-256, not SHA256)
- Preview the step in Spoon before running the full transformation
- Log Security.getProviders() when deploying to a new JVM
- Never hand-edit checksum-type values in .ktr XML
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
- CheckSum.Error.UnknownChecksumType
- CheckSum.Error.UnknownEvaluationMethod
- CheckSum.Log.CanNotFindField
- SecretKeyGenerator.KeyGenerationError
- Unable to obtain checksum of UDJC -
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)