B4J Question Error SSHClient schmizz

Pesciolina

Active Member
Licensed User
Longtime User
I'm creating an app with ftp ssh and in development mode it works correctly, when I compile it it gives me a series of errors, where am I going wrong?

B4X:
#AdditionalJar: bcprov-jdk15on-1.54
#AdditionalJar: bcpkix-jdk18on-1.84

#AdditionalJar: slf4j-api-1.7.7
#AdditionalJar: slf4j-simple-1.7.30
#AdditionalJar: eddsa-0.3.0
#AdditionalJar: sshj-0.37.0


Sub SFTP_Connect_SSHJ(Host As String, User As String, Password As String) As Boolean
    Try
        Dim ssh As JavaObject
        ssh.InitializeNewInstance("net.schmizz.sshj.SSHClient", Null)
        
        ' Accetta tutte le chiavi host (equivalente StrictHostKeyChecking=no)
        Dim verifier As JavaObject
        verifier.InitializeNewInstance("net.schmizz.sshj.transport.verification.PromiscuousVerifier", Null)
        ssh.RunMethod("addHostKeyVerifier", Array(verifier))
        
        ' Connessione
        ssh.RunMethod("connect", Array(Host))
        
        ' Autenticazione
        ssh.RunMethod("authPassword", Array(User, Password))
        
        ' Apertura SFTP
        Dim sftpClient As JavaObject = ssh.RunMethod("newSFTPClient", Null)
        
        ' Salva riferimento globale
        sFTP = sftpClient
        sshClient = ssh
        
        Return True
        
    Catch
        Log("Errore SSHJ: " & LastException)
        Return False
    End Try
End Sub


Sub SFTP_Upload(localFile As String, remoteDir As String, remoteFile As String) As ResumableSub
    Try
        Dim remotePath As String = _
    IIf(remoteDir.EndsWith("/"), remoteDir.SubString2(0, remoteDir.Length - 1), remoteDir) _
    & "/" & remoteFile
        
        ' opzionale: crea cartella
        ' SFTP_Mkdir(remoteDir)
        
        sFTP.RunMethod("put", Array(localFile, remotePath))
        
        Return True
    Catch
        Log("Errore upload: " & LastException)
        Return False
    End Try
End Sub


Sub SFTP_Disconnect
    Try
        If sFTP.IsInitialized Then
            sFTP.RunMethod("close", Null)
        End If
        
        If sshClient.IsInitialized Then
            sshClient.RunMethod("disconnect", Null)
        End If
    Catch
        Log("Errore disconnect: " & LastException)
    End Try

Error:
[JavaFX Application Thread] INFO net.schmizz.sshj.transport.random.JCERandom - Creating new SecureRandom.
[JavaFX Application Thread] INFO net.schmizz.sshj.common.SecurityUtils - Security Provider 'org.bouncycastle.jce.provider.BouncyCastleProvider' does not support necessary algorithm
java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: MD5, provider: BC, class: org.bouncycastle.jcajce.provider.digest.MD5$Digest)
        at java.base/java.security.Provider$Service.newInstance(Unknown Source)
        at java.base/sun.security.jca.GetInstance.getInstance(Unknown Source)
        at java.base/sun.security.jca.GetInstance.getInstance(Unknown Source)
        at java.base/java.security.Security.getImpl(Unknown Source)
        at java.base/java.security.MessageDigest.getInstance(Unknown Source)
        at b4j/net.schmizz.sshj.common.SecurityUtils.registerSecurityProvider(Unknown Source)
        at b4j/net.schmizz.sshj.common.SecurityUtils.register(Unknown Source)
        at b4j/net.schmizz.sshj.common.SecurityUtils.getCipher(Unknown Source)
        at b4j/net.schmizz.sshj.transport.cipher.BaseCipher.init(Unknown Source)
        at b4j/net.schmizz.sshj.DefaultConfig.initCipherFactories(Unknown Source)
        at b4j/net.schmizz.sshj.DefaultConfig.<init>(Unknown Source)
        at b4j/net.schmizz.sshj.SSHClient.<init>(Unknown Source)
        at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
        at java.base/java.lang.reflect.Constructor.newInstance(Unknown Source)
        at java.base/java.lang.Class.newInstance(Unknown Source)
        at b4j/anywheresoftware.b4j.object.JavaObject.InitializeNewInstance(Unknown Source)
        at b4j/b4j.ClientsFtpFicr.main._sftp_connect_sshj(Unknown Source)
        at b4j/b4j.ClientsFtpFicr.main._attivaconnessioni(Unknown Source)
        at b4j/b4j.ClientsFtpFicr.main._appstart(Unknown Source)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at b4j/anywheresoftware.b4a.BA.raiseEvent2(Unknown Source)
        at b4j/anywheresoftware.b4a.BA.raiseEvent(Unknown Source)
        at b4j/b4j.ClientsFtpFicr.main.start(Unknown Source)
        at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(Unknown Source)
        at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(Unknown Source)
        at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(Unknown Source)
        at java.base/java.security.AccessController.doPrivileged(Native Method)
        at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(Unknown Source)
        at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source)
        at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
        at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(Unknown Source)
        at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IllegalAccessException: class java.security.Provider (in module java.base) cannot access class org.bouncycastle.jcajce.provider.digest.MD5$Digest (in module b4j) because module b4j does not export org.bouncycastle.jcajce.provider.digest to module java.base
        at java.base/jdk.internal.reflect.Reflection.newIllegalAccessException(Unknown Source)
        at java.base/java.lang.reflect.AccessibleObject.checkAccess(Unknown Source)
        at java.base/java.lang.reflect.Constructor.newInstance(Unknown Source)
        at java.base/java.security.Provider.newInstanceUtil(Unknown Source)
        ... 37 more
[JavaFX Application Thread] INFO net.schmizz.sshj.common.SecurityUtils - BouncyCastle not registered, using the default JCE provider
[JavaFX Application Thread] INFO net.schmizz.sshj.DefaultConfig - Cipher [[email protected]] disabled: No installed provider supports this key: javax.crypto.spec.SecretKeySpec
[JavaFX Application Thread] INFO net.schmizz.sshj.DefaultConfig - Cipher [cast128-cbc] disabled: Cannot find any provider supporting CAST5/CBC/NoPadding
[JavaFX Application Thread] INFO net.schmizz.sshj.DefaultConfig - Cipher [cast128-ctr] disabled: Cannot find any provider supporting CAST5/CTR/NoPadding
[JavaFX Application Thread] INFO net.schmizz.sshj.DefaultConfig - Cipher [idea-cbc] disabled: Cannot find any provider supporting IDEA/CBC/NoPadding
[JavaFX Application Thread] INFO net.schmizz.sshj.DefaultConfig - Cipher [idea-ctr] disabled: Cannot find any provider supporting IDEA/CTR/NoPadding
[JavaFX Application Thread] INFO net.schmizz.sshj.DefaultConfig - Cipher [serpent128-cbc] disabled: Cannot find any provider supporting Serpent/CBC/NoPadding
[JavaFX Application Thread] INFO net.schmizz.sshj.DefaultConfig - Cipher [serpent128-ctr] disabled: Cannot find any provider supporting Serpent/CTR/NoPadding
[JavaFX Application Thread] INFO net.schmizz.sshj.DefaultConfig - Cipher [serpent192-cbc] disabled: Cannot find any provider supporting Serpent/CBC/NoPadding
[JavaFX Application Thread] INFO net.schmizz.sshj.DefaultConfig - Cipher [serpent192-ctr] disabled: Cannot find any provider supporting Serpent/CTR/NoPadding
[JavaFX Application Thread] INFO net.schmizz.sshj.DefaultConfig - Cipher [serpent256-cbc] disabled: Cannot find any provider supporting Serpent/CBC/NoPadding
[JavaFX Application Thread] INFO net.schmizz.sshj.DefaultConfig - Cipher [serpent256-ctr] disabled: Cannot find any provider supporting Serpent/CTR/NoPadding
[JavaFX Application Thread] INFO net.schmizz.sshj.DefaultConfig - Cipher [twofish128-cbc] disabled: Cannot find any provider supporting Twofish/CBC/NoPadding
[JavaFX Application Thread] INFO net.schmizz.sshj.DefaultConfig - Cipher [twofish128-ctr] disabled: Cannot find any provider supporting Twofish/CTR/NoPadding
[JavaFX Application Thread] INFO net.schmizz.sshj.DefaultConfig - Cipher [twofish192-cbc] disabled: Cannot find any provider supporting Twofish/CBC/NoPadding
[JavaFX Application Thread] INFO net.schmizz.sshj.DefaultConfig - Cipher [twofish192-ctr] disabled: Cannot find any provider supporting Twofish/CTR/NoPadding
[JavaFX Application Thread] INFO net.schmizz.sshj.DefaultConfig - Cipher [twofish256-cbc] disabled: Cannot find any provider supporting Twofish/CBC/NoPadding
[JavaFX Application Thread] INFO net.schmizz.sshj.DefaultConfig - Cipher [twofish256-ctr] disabled: Cannot find any provider supporting Twofish/CTR/NoPadding
[JavaFX Application Thread] INFO net.schmizz.sshj.DefaultConfig - Cipher [twofish-cbc] disabled: Cannot find any provider supporting Twofish/CBC/NoPadding
[JavaFX Application Thread] INFO net.schmizz.sshj.transport.TransportImpl - Client identity string: SSH-2.0-SSHJ_0.37.0
[JavaFX Application Thread] INFO net.schmizz.sshj.transport.TransportImpl - Server identity string: SSH-2.0-OpenSSH_for_Windows_9.5
[sshj-Reader-pubblica.ficr.it/195.231.69.170:22-1776462808823] ERROR net.schmizz.sshj.transport.TransportImpl - Dying because - Error constructing implementation (algorithm: X25519, provider: BC, class: org.bouncycastle.jcajce.provider.asymmetric.edec.KeyPairGeneratorSpi$X25519)
net.schmizz.sshj.common.SSHRuntimeException: Error constructing implementation (algorithm: X25519, provider: BC, class: org.bouncycastle.jcajce.provider.asymmetric.edec.KeyPairGeneratorSpi$X25519)
        at b4j/net.schmizz.sshj.transport.kex.DHBase.<init>(Unknown Source)
        at b4j/net.schmizz.sshj.transport.kex.Curve25519DH.<init>(Unknown Source)
        at b4j/net.schmizz.sshj.transport.kex.Curve25519SHA256.<init>(Unknown Source)
        at b4j/net.schmizz.sshj.transport.kex.Curve25519SHA256$Factory.create(Unknown Source)
        at b4j/net.schmizz.sshj.transport.kex.Curve25519SHA256$Factory.create(Unknown Source)
        at b4j/net.schmizz.sshj.common.Factory$Named$Util.create(Unknown Source)
        at b4j/net.schmizz.sshj.transport.KeyExchanger.gotKexInit(Unknown Source)
        at b4j/net.schmizz.sshj.transport.KeyExchanger.handle(Unknown Source)
        at b4j/net.schmizz.sshj.transport.TransportImpl.handle(Unknown Source)
        at b4j/net.schmizz.sshj.transport.Decoder.decode(Unknown Source)
        at b4j/net.schmizz.sshj.transport.Decoder.received(Unknown Source)
        at b4j/net.schmizz.sshj.transport.Reader.run(Unknown Source)
Caused by: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: X25519, provider: BC, class: org.bouncycastle.jcajce.provider.asymmetric.edec.KeyPairGeneratorSpi$X25519)
        at java.base/java.security.Provider$Service.newInstance(Unknown Source)
        at java.base/sun.security.jca.GetInstance.getInstance(Unknown Source)
        at java.base/java.security.KeyPairGenerator.getInstance(Unknown Source)
        at b4j/net.schmizz.sshj.common.SecurityUtils.getKeyPairGenerator(Unknown Source)
        ... 12 more
Caused by: java.lang.IllegalAccessException: class java.security.Provider (in module java.base) cannot access class org.bouncycastle.jcajce.provider.asymmetric.edec.KeyPairGeneratorSpi$X25519 (in module b4j) because module b4j does not export org.bouncycastle.jcajce.provider.asymmetric.edec to module java.base
        at java.base/jdk.internal.reflect.Reflection.newIllegalAccessException(Unknown Source)
        at java.base/java.lang.reflect.AccessibleObject.checkAccess(Unknown Source)
        at java.base/java.lang.reflect.Constructor.newInstance(Unknown Source)
        at java.base/java.security.Provider.newInstanceUtil(Unknown Source)
        ... 16 more
[sshj-Reader-pubblica.ficr.it/195.231.69.170:22-1776462808823] INFO net.schmizz.sshj.transport.TransportImpl - Disconnected - UNKNOWN
[JavaFX Application Thread] ERROR net.schmizz.concurrent.Promise - <<kex done>> woke to: net.schmizz.sshj.transport.TransportException: Error constructing implementation (algorithm: X25519, provider: BC, class: org.bouncycastle.jcajce.provider.asymmetric.edec.KeyPairGeneratorSpi$X25519)
Errore SSHJ: (IllegalAccessException) java.lang.IllegalAccessException: class java.security.Provider (in module java.base) cannot access class org.bouncycastle.jcajce.provider.asymmetric.edec.KeyPairGeneratorSpi$X25519 (in module b4j) because module b4j does not export org.bouncycastle.jcajce.provider.asymmetric.edec to module java.base
Errore connessione SFTP
 

teddybear

Well-Known Member
Licensed User
I'm creating an app with ftp ssh and in development mode it works correctly, when I compile it it gives me a series of errors, where am I going wrong?
What do you mean it works correctly in development mode? the log looks like a runtime error rather than a compiling error.
 
Upvote 0

Pesciolina

Active Member
Licensed User
Longtime User
In debug mode it works correctly, the errors occur when I run the exe, did I perhaps compile the package incorrectly?

In the same project I also use ucanaccess to access a database, is it possible that this conflicts?

B4X:
#AdditionalJar: ucanaccess-5.0.0
#AdditionalJar: hsqldb-2.6.1
#AdditionalJar: jackcess-3.0.1-B4J
#AdditionalJar: jackcess-encrypt-3.0.0
#AdditionalJar: commons-logging-1.2
#AdditionalJar: commons-lang3-3.8.1
#AdditionalJar: bcprov-jdk15on-1.68
 
Last edited:
Upvote 0

teddybear

Well-Known Member
Licensed User
In debug mode it works correctly, the errors occur when I run the exe, did I perhaps compile the package incorrectly?
To build standalone package, try adding this property
B4X:
#PackagerProperty: VMArgs = --add-opens b4j/org.bouncycastle.jcajce.provider.asymmetric.ec=java.base
 
Upvote 0
Top