JavaLoader icon indicating copy to clipboard operation
JavaLoader copied to clipboard

DLL not found in jar - java.lang.UnsatisfiedLinkError

Open ebreeze opened this issue 3 years ago • 0 comments

Hi,

I am having the following problem when trying to use this Java Library https://github.com/kosprov/jargon2-api in Coldfusion 2018 with the JavaLoader:


Typ | java.lang.UnsatisfiedLinkError
Diagnose | Unable to load library 'argon2': Das angegebene Modul wurde nicht gefunden. Das angegebene Modul wurde nicht gefunden. Das angegebene Modul wurde nicht gefunden. Native library (win32-x86-64/argon2.dll) not found in resource path ([file:/D:/ColdFusion2018/cfusion/lib/updates/chf20180010.jar,

The code looks like this:

component name="Argon2Kosprov" output="false" {
	public function init(string pepper = "mySecretIngredient") {

		getJavaLoader();
		
		// More info about the API: https://github.com/kosprov/jargon2-api

		local.jargon2 = variables.javaLoader.create("com.kosprov.jargon2.api.Jargon2");
	
		variables.hasher = local.jargon2.jargon2Hasher();
		
		initConstants();

		variables.hasher.type(variables.argon2Type); 
		
		// Parameters
        variables.hasher.memoryCost(65536);  		// 64MB memory cost
        variables.hasher.timeCost(3);        		// 3 passes through memory
        variables.hasher.parallelism(4);     		// use 4 lanes and 4 threads
        variables.hasher.saltLength(16);     		// 16 random bytes salt
        variables.hasher.hashLength(16);    		// 16 bytes output hash		
		applyPepper(arguments.pepper);
		
		// Just get a hold on the verifier. No special configuration needed.
        variables.verifier = local.jargon2.jargon2Verifier();

		return this;
	}


	public void function applyPepper(required string pepper) {
		
		local.binaryValue = stringToBinary(arguments.pepper);		
		variables.hasher.secret(local.binaryValue);
		
	}


	public string function hashString(required string string) {		
	
		// Set the password and calculate the encoded hash		
		local.binaryValue = stringToBinary(arguments.string);
		
	        local.encodedHash = variables.hasher.password(local.binaryValue).encodedHash();

		return local.encodedHash;		
	}


	public boolean function checkString(required string string, required string hash) {
		// Set the encoded hash, the password and verify
        return variables.verifier.hash(arguments.hash).password(arguments.string).verifyEncoded();
	}


	// private functions	
	private void function initConstants() {		
		local.argon2Types = variables.javaLoader.create("com.kosprov.jargon2.api.Jargon2$Type");				
		final variables.argon2Type = local.argon2Types.ARGON2id
	}
	
		
	/**
	* @hint Load specific .jar files using JavaLoader
	* */
	private component function getJavaLoader() {

		if (NOT StructKeyExists(variables, "javaLoader")) {	
			local.jarArray = [								
				ExpandPath("/jars/net/java/dev/jna/jna/5.6.0/jna-5.6.0.jar"),
				ExpandPath("/jars/com/nativelibs4java/ochafik-util/0.12/ochafik-util-0.12.jar"),
				ExpandPath("/jars/com/nativelibs4java/jnaerator-runtime/0.12/jnaerator-runtime-0.12.jar"),
				ExpandPath("/jars/com/kosprov/jargon2/jargon2-native-ri-backend/1.1.1/jargon2-native-ri-backend-1.1.1.jar"),
				ExpandPath("/jars/com/kosprov/jargon2/jargon2-native-ri-binaries-generic/1.1.1/jargon2-native-ri-binaries-generic-1.1.1.jar"),				
				ExpandPath("/jars/com/kosprov/jargon2/jargon2-api/1.1.1/jargon2-api-1.1.1.jar")
			];
			
			variables.javaLoader = CreateObject("component", "lib.shared.javaloader.JavaLoader").init(local.jarArray);
		
		}

		return variables.javaLoader;
	}


	private any function stringToBinary(required string) {		
		local.base64Value = toBase64(arguments.string);
		local.binaryValue = toBinary(base64Value);
		return local.binaryValue;
	}
	
}

and it is called like this:

 <cfset local.argon = new lib.shared.argon2.Argon2Kosprov()>
 <cfset local.password = "alabala"> 
 <cfset local.hash = local.argon.hashString(local.password).encodedHash()>

Then comes the exception saying the the DLL is not found. The DLL is in the JAR and should not be separately loaded.

Any help would be appreciated. Thanks.

ebreeze avatar Mar 30 '21 09:03 ebreeze