Good morning,
I am trying to use the Java's Xades signature with JRuby in my Ruby on Rails application. But since two days now, i am facing the following errors without getting any response to solve them.
This is the corresponding java code from this page:
Load the KeyStore and get the signing key and certificate. KeyStore ks = KeyStore.getInstance("JKS"); ks.load(new FileInputStream("mykeystore.jks"), "changeit".toCharArray()); KeyStore.PrivateKeyEntry keyEntry = (KeyStore.PrivateKeyEntry) ks.getEntry ("mykey", new KeyStore.PasswordProtection("changeit".toCharArray())); X509Certificate cert = (X509Certificate) keyEntry.getCertificate();
// Create the KeyInfo containing the X509Data. KeyInfoFactory kif = fac.getKeyInfoFactory(); List x509Content = new ArrayList(); x509Content.add(cert.getSubjectX500Principal().getName()); x509Content.add(cert); X509Data xd = kif.newX509Data(x509Content); KeyInfo ki = kif.newKeyInfo(Collections.singletonList(xd));
My corresponding JRuby code is the following:
require 'java'
include_class 'java.lang.System' include_class 'java.lang.Object' include_class('java.lang.String'){|package,name| "J#{name}"} include_class 'java.io.IOException' include_class 'java.io.InputStream' include_class 'java.io.FileOutputStream' include_class 'java.io.FileInputStream' include_class 'java.security.KeyStore' include_class 'java.security.KeyStoreException'
password = JString.new("changeit") ks = KeyStore.getInstance("JKS") ks.load(FileInputStream.new("keys/keystoreCps.jks"), password.toCharArray())
keyEntry = KeyStore.PrivateKeyEntry.new keyEntry = ks.getEntry("mykey", KeyStore.PasswordProtection.new(password.toCharArray())) cert = keyEntry.getCertificate()
#Create the KeyInfo containing the X509Data. kif = sigFactory.getKeyInfoFactory() x509Content = ArrayList.new x509Content.add(cert.getSubjectX500Principal().getName()) x509Content.add(cert) xd = kif.newX509Data(x509Content) ki = kif.newKeyInfo(Collections.singletonList(xd))
So i am getting these errors with these 2 lines: keyEntry = KeyStore.PrivateKeyEntry.new keyEntry = ks.getEntry("mykey", KeyStore.PasswordProtection.new(password.toCharArray())):
1) NoMethodError: undefined method `PrivateKeyEntry' for Java::JavaSecurity::KeyStore:Class 2) undefined method `PasswordProtection' for Java::JavaSecurity::KeyStore:Class
I have visited this javadoc site, but still don't know how to solve those problems
Kindly help me solve these errors. Thanks in advance for your responses
Regards,