Re: Got exception when new BouncyCastleJsseProvider("FIPS:BCFIPS");
Jeff Huang <jeff.huang-/Il8SMrEplgS/6/[email protected]> Wed, 28 Aug 2019 20:48:59 -0700
| Newsgroups | gmane.comp.encryption.bouncy-castle.devel |
|---|---|
| Message-ID | <CAGgY0agXSO+LjX1-ON4r-2c0XiJvF+huD=43Ex3yaQnzA8hrzw@mail.gmail.com> |
That works! I got now. BouncyCastleJsseProvider use BouncyCastleFipsProvider as BCFIPS provider. thanks lot! Jeff. On Wed, Aug 28, 2019 at 6:35 PM David Hook <dgh-rTAZ0PM/[email protected]> wrote: > > Try doing: > > Security.addProvider(new BouncyCastleFipsProvider()); > > first. > > Regards, > > David > > On 29/8/19 2:12 am, Jeff Huang wrote: > > I am using the BCFIPS provider(version 1.0.9). I have downloaded > bc-fips-1.0.2.jar and bctls-fips-1.0.9.jar. I am trying to install BCFIPS > provider at *RUNTIME *that means I do *NOT* modify java.security file to > statically add BCFIPS provider. > > I did following to install BCFIPS provider at runtime based on *page 7 *in > BC-FJA-(D)TLSUserGuide-1.0.9.pdf > ... > Security.addProvider(new BouncyCastleJsseProvider("FIPS:BCFIPS")); > ... > > Above call get following exceptions: > Exception in thread "main" java.lang.IllegalArgumentException: unable to > find Provider/TlsCrypto class: BCFIPS > at > org.bouncycastle.jsse.provider.BouncyCastleJsseProvider.createCryptoProvider(BouncyCastleJsseProvider.java:130) > at > org.bouncycastle.jsse.provider.BouncyCastleJsseProvider.<init>(BouncyCastleJsseProvider.java:72) > > I read the source code org.bouncycastle.jsse.provider.BouncyCastleJsseProvider.java, > following is execution sequence: > 1. I passed "FIPS:BCFIPS" to constructor of BouncyCastleJsseProvider *LINE > 50* > 2. After parsing String "FIPS:BCFIPS", second part String is cryptoName = > "BCFIPS" . *LINE 66* > 3. Called createCryptoProvider(cryptoName); *LINE 72, then LINE 95* > 4. Because I do not statically install BCFIPS provider, so LINE 103 return > null, LINE 104 to LINE 107 will be skipped, so code go to *LINE 111 * > Class<?> cryptoProviderClass = Class.forName(cryptoName); // here > cryptoName = "BCFIPS" > Above code throw exception due to we know that there is no Java class > BCFIPS, so then *LINE 130 exception*. > > It seems there is a bug? > > I played around, there are two work arounds: > 1. Passing > "FIPS:org.bouncycastle.tls.crypto.impl.jcajce.JcaTlsCryptoProvider" will > work. Actually also make sense JcaTlsCryptoProvider is Java class. > 2. Modify java.security and add following entry: > security.provider.15=org.bouncycastle.jsse.provider.BouncyCastleJsseProvider > FIPS:BCFIPS > Above mean statically install BCFIPS provider first, then call > Security.addProvider(new BouncyCastleJsseProvider("FIPS:BCFIPS")); will > work. > But the issue is we want to install BCFIPS provider at runtime without > need modify java.security file. > > Please advise this. > > Thanks! > > Jeff. > > > > > > On Wed, Aug 28, 2019 at 3:38 AM David Hook <dgh-rTAZ0PM/[email protected]> wrote: > >> >> It's not clear that the BCFIPS provider is installed. Which provider are >> you using "BC" or "BCFIPS"? >> >> Regards, >> >> David >> On 28/8/19 7:23 am, Jeff Huang wrote: >> > Hello, >> > >> > I downloaded latest fips jars from BC. After compiled code and run it, >> > I got the following exception: >> > >> > Provider provider1 = new BouncyCastleJsseProvider("FIPS:BCFIPS"); >> > >> > Exception in thread "main" java.lang.IllegalArgumentException: unable >> > to find Provider/TlsCrypto class: BCFIPS >> > at >> > >> org.bouncycastle.jsse.provider.BouncyCastleJsseProvider.createCryptoProvider(BouncyCastleJsseProvider.java:130) >> > >> > >> > Jeff. >> >> >> >> >