aTalk supports XEP-0234: Jingle File Transfer. During jingle file transfer protocol, it requires a ‘Hash’ element to be defined. However when execute the function call below in JingleFile class (algorithm = HashManager.ALGORITHM.SHA3_256), the system throws java.security.NoSuchAlgorithmException: SHA3-256 MessageDigest not available. It happend in both sending and receiving jinglefile.
HashManager.getMessageDigest(algorithm)
This problem only happens in aTalk ported to use smack4.5.0-beta9. The problem does not happen in smack-4.4.8; this holds true even after aTalk build.gradle is updated to match the one for smack-4.5.0-beta9 e.g.
a. sourceCompatibility JavaVersion.VERSION_11
b. minSdkVersion 26
I am still not sure why this happen, as the above function is calling the same android-sdk (api-36) library i.e. java.security.MessageDigest class. I am unable to trace beyond that point.
Any help is much appreciated.
MessageDigest.getInstance("SHA3-384"); the exception happens at statement
@ Security.getImpl(algorithm, "MessageDigest", (String)null)
//=================
public static MessageDigest getInstance(String algorithm)
throws NoSuchAlgorithmException {
Objects.requireNonNull(algorithm, "null algorithm name");
try {
MessageDigest md;
Object[] objs = Security.getImpl(algorithm, "MessageDigest", (String)null);
if (objs[0] instanceof MessageDigest) {
md = (MessageDigest)objs[0];
} else {
md = new Delegate((MessageDigestSpi)objs[0], algorithm);
}
md.provider = (Provider)objs[1];
// Android-removed: this debugging mechanism is not used in Android.
/*
if (!skipDebug && pdebug != null) {
pdebug.println("MessageDigest." + algorithm +
" algorithm from: " + md.provider.getName());
}
*/
return md;
} catch(NoSuchProviderException e) {
throw new NoSuchAlgorithmException(algorithm + " not found");
}
}
Following is the aTalk logcat:
//=== Jingle File sending ===
An uncaught exception occurred in thread = Thread[pool-8-thread-1,5,main] and message was: java.security.NoSuchAlgorithmException: SHA3-256 MessageDigest not available
java.lang.AssertionError: java.security.NoSuchAlgorithmException: SHA3-256 MessageDigest not available
at org.jivesoftware.smackx.hashes.HashManager.getMessageDigest(HashManager.java:264)
at org.jivesoftware.smackx.jingle_filetransfer.component.JingleFile.calculateHash(JingleFile.java:66)
at org.jivesoftware.smackx.jingle_filetransfer.component.JingleFile.fromFile(JingleFile.java:55)
at org.atalk.android.gui.chat.MetaContactChatTransport.createJingleFile(MetaContactChatTransport.java:771)
at org.atalk.android.gui.chat.MetaContactChatTransport.jingleFileSend(MetaContactChatTransport.java:727)
at org.atalk.android.gui.chat.MetaContactChatTransport.getFileTransferTransport(MetaContactChatTransport.java:677)
at org.atalk.android.gui.chat.MetaContactChatTransport.sendFile(MetaContactChatTransport.java:643)
at org.atalk.android.gui.chat.MetaContactChatTransport.sendFile(MetaContactChatTransport.java:608)
at org.atalk.android.gui.chat.ChatFragment$SendFile.doInBackground(ChatFragment.java:2682)
at org.atalk.android.gui.chat.ChatFragment$SendFile.lambda$execute$1$org-atalk-android-gui-chat-ChatFragment$SendFile(ChatFragment.java:2655)
at org.atalk.android.gui.chat.ChatFragment$SendFile$$ExternalSyntheticLambda0.run(D8$$SyntheticClass:0)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644)
at java.lang.Thread.run(Thread.java:1012)
Caused by: java.security.NoSuchAlgorithmException: SHA3-256 MessageDigest not available
at sun.security.jca.GetInstance.getInstance(GetInstance.java:159)
at java.security.Security.getImpl(Security.java:628)
at java.security.MessageDigest.getInstance(MessageDigest.java:211)
at org.jivesoftware.smackx.hashes.HashManager.getMessageDigest(HashManager.java:239)
at org.jivesoftware.smackx.jingle_filetransfer.component.JingleFile.calculateHash(JingleFile.java:66)
at org.jivesoftware.smackx.jingle_filetransfer.component.JingleFile.fromFile(JingleFile.java:55)
at org.atalk.android.gui.chat.MetaContactChatTransport.createJingleFile(MetaContactChatTransport.java:771)
at org.atalk.android.gui.chat.MetaContactChatTransport.jingleFileSend(MetaContactChatTransport.java:727)
at org.atalk.android.gui.chat.MetaContactChatTransport.getFileTransferTransport(MetaContactChatTransport.java:677)
at org.atalk.android.gui.chat.MetaContactChatTransport.sendFile(MetaContactChatTransport.java:643)
at org.atalk.android.gui.chat.MetaContactChatTransport.sendFile(MetaContactChatTransport.java:608)
at org.atalk.android.gui.chat.ChatFragment$SendFile.doInBackground(ChatFragment.java:2682)
at org.atalk.android.gui.chat.ChatFragment$SendFile.lambda$execute$1$org-atalk-android-gui-chat-ChatFragment$SendFile(ChatFragment.java:2655)
at org.atalk.android.gui.chat.ChatFragment$SendFile$$ExternalSyntheticLambda0.run(D8$$SyntheticClass:0)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644)
at java.lang.Thread.run(Thread.java:1012)
//=== Jingle File receiving ===
--------- beginning of crash
08:08:58.959 E FATAL EXCEPTION: Thread-77
Process: org.atalk.android, PID: 4440
java.lang.AssertionError: java.security.NoSuchAlgorithmException: SHA3-256 MessageDigest not available
at org.jivesoftware.smackx.hashes.HashManager.getMessageDigest(HashManager.java:264)
at org.jivesoftware.smackx.jingle_filetransfer.component.JingleIncomingFileOffer.onBytestreamReady(JingleIncomingFileOffer.java:78)
at org.jivesoftware.smackx.jingle.component.JingleContentImpl.onSecurityReady(JingleContentImpl.java:484)
at org.jivesoftware.smackx.jet.component.JetSecurityImpl.decryptIncomingBytestream(JetSecurityImpl.java:107)
at org.jivesoftware.smackx.jingle.component.JingleContentImpl.lambda$onTransportReady$5$org-jivesoftware-smackx-jingle-component-JingleContentImpl(JingleContentImpl.java:454)
at org.jivesoftware.smackx.jingle.component.JingleContentImpl$$ExternalSyntheticLambda0.run(D8$$SyntheticClass:0)
at java.lang.Thread.run(Thread.java:1012)
Caused by: java.security.NoSuchAlgorithmException: SHA3-256 MessageDigest not available
at sun.security.jca.GetInstance.getInstance(GetInstance.java:159)
at java.security.Security.getImpl(Security.java:628)
at java.security.MessageDigest.getInstance(MessageDigest.java:211)
at org.jivesoftware.smackx.hashes.HashManager.getMessageDigest(HashManager.java:239)
at org.jivesoftware.smackx.jingle_filetransfer.component.JingleIncomingFileOffer.onBytestreamReady(JingleIncomingFileOffer.java:78)
at org.jivesoftware.smackx.jingle.component.JingleContentImpl.onSecurityReady(JingleContentImpl.java:484)
at org.jivesoftware.smackx.jet.component.JetSecurityImpl.decryptIncomingBytestream(JetSecurityImpl.java:107)
at org.jivesoftware.smackx.jingle.component.JingleContentImpl.lambda$onTransportReady$5$org-jivesoftware-smackx-jingle-component-JingleContentImpl(JingleContentImpl.java:454)
at org.jivesoftware.smackx.jingle.component.JingleContentImpl$$ExternalSyntheticLambda0.run(D8$$SyntheticClass:0)
at java.lang.Thread.run(Thread.java:1012)
08:08:58.961 E An uncaught exception occurred in thread = Thread[Thread-77,5,main] and message was: java.security.NoSuchAlgorithmException: SHA3-256 MessageDigest not available
java.lang.AssertionError: java.security.NoSuchAlgorithmException: SHA3-256 MessageDigest not available
at org.jivesoftware.smackx.hashes.HashManager.getMessageDigest(HashManager.java:264)
at org.jivesoftware.smackx.jingle_filetransfer.component.JingleIncomingFileOffer.onBytestreamReady(JingleIncomingFileOffer.java:78)
at org.jivesoftware.smackx.jingle.component.JingleContentImpl.onSecurityReady(JingleContentImpl.java:484)
at org.jivesoftware.smackx.jet.component.JetSecurityImpl.decryptIncomingBytestream(JetSecurityImpl.java:107)
at org.jivesoftware.smackx.jingle.component.JingleContentImpl.lambda$onTransportReady$5$org-jivesoftware-smackx-jingle-component-JingleContentImpl(JingleContentImpl.java:454)
at org.jivesoftware.smackx.jingle.component.JingleContentImpl$$ExternalSyntheticLambda0.run(D8$$SyntheticClass:0)
at java.lang.Thread.run(Thread.java:1012)
Caused by: java.security.NoSuchAlgorithmException: SHA3-256 MessageDigest not available
at sun.security.jca.GetInstance.getInstance(GetInstance.java:159)
at java.security.Security.getImpl(Security.java:628)
at java.security.MessageDigest.getInstance(MessageDigest.java:211)
at org.jivesoftware.smackx.hashes.HashManager.getMessageDigest(HashManager.java:239)
at org.jivesoftware.smackx.jingle_filetransfer.component.JingleIncomingFileOffer.onBytestreamReady(JingleIncomingFileOffer.java:78)
at org.jivesoftware.smackx.jingle.component.JingleContentImpl.onSecurityReady(JingleContentImpl.java:484)
at org.jivesoftware.smackx.jet.component.JetSecurityImpl.decryptIncomingBytestream(JetSecurityImpl.java:107)
at org.jivesoftware.smackx.jingle.component.JingleContentImpl.lambda$onTransportReady$5$org-jivesoftware-smackx-jingle-component-JingleContentImpl(JingleContentImpl.java:454)
at org.jivesoftware.smackx.jingle.component.JingleContentImpl$$ExternalSyntheticLambda0.run(D8$$SyntheticClass:0)
at java.lang.Thread.run(Thread.java:1012)