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

Code:
[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
 
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
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
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
Back
Top