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: http://java.sun.com/developer/technicalArticles/xml/dig_signature_api/ 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, -- -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
On 6 December 2011 15:12, gs84 <salimatag2-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> 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: > http://java.sun.com/developer/technicalArticles/xml/dig_signature_api/ > > 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.newI don''t really know what I am talking about here, but that line tries to call method PrivateKeyEntry on class KeyStore. Is PrivateKeyEntry not in fact a class? Should it be KeyStore::PrivateKeyEntry or something along those lines? Colin> 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, > -- > > -- > You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. > To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. > For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en. >-- gplus.to/clanlaw -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
> > I don''t really know what I am talking about here, but that line tries > to call method PrivateKeyEntry on class KeyStore. Is PrivateKeyEntry > not in fact a class? Should it be KeyStore::PrivateKeyEntry or > something along those lines? > > Colin >HI, Thanks for your answer. KeyStore.PrivateKeyEntry is a java static class: http://docs.oracle.com/javase/1.5.0/docs/api/java/security/KeyStore.PrivateKeyEntry.html Still getting the same error gsaly -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
On 6 December 2011 15:55, gs84 <salimatag2-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> >> >> I don''t really know what I am talking about here, but that line tries >> to call method PrivateKeyEntry on class KeyStore. Is PrivateKeyEntry >> not in fact a class? Should it be KeyStore::PrivateKeyEntry or >> something along those lines? >> >> Colin >> > > > HI, > Thanks for your answer. > KeyStore.PrivateKeyEntry is a java static class: > http://docs.oracle.com/javase/1.5.0/docs/api/java/security/KeyStore.PrivateKeyEntry.html > > Still getting the same errorWhat? You get exactly the same error if you replace the . with :: The question is what is the right syntax in jruby for referencing that class? I don''t know the answer to that question, but I think that may be where the problem lies. Colin -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Thank you fro your help. I ve used the :: unless of . and it seem to work so i have the following lines now: password = JString.new("changeit") ks = KeyStore.getInstance("JKS") ks.load(FileInputStream.new("keys/keystoreCps.jks"), password.toCharArray()) keyEntry = ks.getEntry("mykey", KeyStore::PasswordProtection.new(password.toCharArray())) cert = keyEntry.getCertificate Then i am now getting the following error for the last line: "NoMethodError: undefined method `getCertificate'' for nil:NilClass" Then i tried cert = X509Certificate.new cert = keyEntry.getCertificate Then i am getting the following error:" TypeError: no public constructors for Java::JavaSecurityCert::X509Certificate" Thanks -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
On 7 December 2011 00:17, gs84 <salimatag2-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> Thank you fro your help. > > I ve used the :: unless of . and it seem to work so i have the > following lines now: > > password = JString.new("changeit") > ks = KeyStore.getInstance("JKS") > ks.load(FileInputStream.new("keys/keystoreCps.jks"), > password.toCharArray()) > keyEntry = ks.getEntry("mykey", > KeyStore::PasswordProtection.new(password.toCharArray())) > cert = keyEntry.getCertificate > > Then i am now getting the following error for the last line: > "NoMethodError: undefined method `getCertificate'' for nil:NilClass"That means that keyEntry is nil, so presumably your getEntry call failed.> > Then i tried > cert = X509Certificate.new > cert = keyEntry.getCertificate > Then i am getting the following error:" TypeError: no public > constructors for Java::JavaSecurityCert::X509Certificate"Well that error is pretty self explanatory. But that line is not achieving anything anyway as you are immediately overwriting cert with something else. Colin -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
> Well that error is pretty self explanatory. But that line is not > achieving anything anyway as you are immediately overwriting cert with > something else. > > ColinThe complete code is now: ks = KeyStore.getInstance("JKS") charsPass = "changeit".to_java_string.toCharArray ks.load(FileInputStream.new("keys/truststore.jks"), charsPass) keyEntry = ks.getEntry("mykey", KeyStore::PasswordProtection.new(charsPass)) 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)) But i am getting "NoMethodError: undefined method `getCertificate'' for nil:NilClass" error for this line: cert = keyEntry.getCertificate Am i missing something? do you know for which reason my getEntry call failed ? because i am doing exactly the same... Thanks -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.