Cannot create a X509Certificate in Java

105 Views Asked by At

java.security.NoSuchAlgorithmException: no such algorithm: SHA256WITHRSA for provider SC

I am getting the error only in the release build of my android app

My code

fun createCertificate(
        provider : Provider = BouncyCastleProvider()
    ): X509Certificate {
        val keyPair = KeyPairGenerator.getInstance("RSA").genKeyPair()
        val subPubKeyInfo = SubjectPublicKeyInfo.getInstance(keyPair.public.encoded)
        val now = Instant.now()
        val validFrom = Date.from(now)
        val validTo = Date.from(now.plusSeconds(60L * 60 * 24 * 365))
        val certBuilder = X509v3CertificateBuilder(
            X500Name("CN=ZANTA,O=QANTA,L=NewYork,C=DE"),
            BigInteger.ONE,
            validFrom,
            validTo,
            X500Name("CN=ZANTA,O=QANTA,L=NewYork,C=DE"),
            subPubKeyInfo
        )
        val signer = JcaContentSignerBuilder("SHA256WithRSA")
            .setProvider(provider)
            .build(keyPair.private)
        return JcaX509CertificateConverter().setProvider(provider)
            .getCertificate(certBuilder.build(signer))
    }

The Stacktrace

E/ERRRR: GONNNPRJ T
java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:566)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1038)
 Caused by: java.lang.reflect.InvocationTargetException
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:556)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1038) 
 Caused by: org.spongycastle.operator.OperatorCreationException: cannot create signer: no such algorithm: SHA256WITHRSA for provider SC
    at org.spongycastle.operator.jcajce.JcaContentSignerBuilder.build(JcaContentSignerBuilder.java:102)
    at com.shalimart22.xferrr.util.SecurityUtil.createCertificate(SecurityUtil.kt:40)
    at com.shalimart22.xferrr.data.UserDataRepository$certificate$2.invoke(UserDataRepository.kt:116)
    at com.shalimart22.xferrr.data.UserDataRepository$certificate$2.invoke(UserDataRepository.kt:69)
    at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
    at com.shalimart22.xferrr.data.UserDataRepository.getCertificate(UserDataRepository.kt:69)
    at com.shalimart22.xferrr.data.UserDataRepository.getClientStatic(UserDataRepository.kt:143)
    at com.shalimart22.xferrr.data.UserDataRepository$client$2.invoke(UserDataRepository.kt:147)
    at com.shalimart22.xferrr.data.UserDataRepository$client$2.invoke(UserDataRepository.kt:146)
    at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
    at com.shalimart22.xferrr.data.UserDataRepository.getClient(UserDataRepository.kt:146)
    at com.shalimart22.xferrr.viewmodel.UserProfileViewModel.<init>(UserProfileViewModel.kt:40)
    at com.shalimart22.xferrr.DaggerApp_HiltComponents_SingletonC$ViewModelCImpl$SwitchingProvider.get(DaggerApp_HiltComponents_SingletonC.java:1106)
    at dagger.hilt.android.internal.lifecycle.HiltViewModelFactory$1.create(HiltViewModelFactory.java:104)
    at androidx.lifecycle.AbstractSavedStateViewModelFactory.create(AbstractSavedStateViewModelFactory.java:89)
    at dagger.hilt.android.internal.lifecycle.HiltViewModelFactory.create(HiltViewModelFactory.java:116)
    at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.kt:187)
    at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.kt:153)
    at androidx.lifecycle.ViewModelLazy.getValue(ViewModelLazy.kt:53)
    at androidx.lifecycle.ViewModelLazy.getValue(ViewModelLazy.kt:35)
    at com.shalimart22.xferrr.activity.IntroductionProfileFragment.getViewModel(WelcomeActivity.kt:239)
    at com.shalimart22.xferrr.activity.IntroductionProfileFragment.onViewCreated(WelcomeActivity.kt:251)
    at androidx.fragment.app.Fragment.performViewCreated(Fragment.java:3128)
    at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:552)
    at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:261)
    at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1899)
    at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1817)
    at androidx.fragment.app.FragmentManager.execSingleAction(FragmentManager.java:1729)
    at androidx.fragment.app.BackStackRecord.commitNow(BackStackRecord.java:317)
    at androidx.viewpager2.adapter.FragmentStateAdapter.placeFragmentInViewHolder(FragmentStateAdapter.java:341)
    at androidx.viewpager2.adapter.FragmentStateAdapter.onViewAttachedToWindow(FragmentStateAdapter.java:276)
    at androidx.viewpager2.adapter.FragmentStateAdapter.onViewAttachedToWindow(FragmentStateAdapter.java:67)
    at androidx.recyclerview.widget.RecyclerView.dispatchChildAttached(RecyclerView.java:7867)
    at androidx.recyclerview.widget.RecyclerView$5.addView(RecyclerView.java:893)
    at androidx.recyclerview.widget.ChildHelper.addView(ChildHelper.java:107)
    at androidx.recyclerview.widget.RecyclerView$LayoutManager.addViewInt(RecyclerView.java:8902)
    at androidx.recyclerview.widget.RecyclerView$LayoutManager.addView(RecyclerView.java:8860)
    E/ERRRR:     at androidx.recyclerview.widget.RecyclerView$LayoutManager.addView(RecyclerView.java:8848)
    at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1645)
    at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1591)
    at androidx.recyclerview.widget.LinearLayoutManager.scrollBy(LinearLayoutManager.java:1395)
    at androidx.recyclerview.widget.LinearLayoutManager.scrollHorizontallyBy(LinearLayoutManager.java:1124)
    at androidx.recyclerview.widget.RecyclerView.scrollStep(RecyclerView.java:1969)
    at androidx.recyclerview.widget.RecyclerView$SmoothScroller.onAnimation(RecyclerView.java:12316)
    at androidx.recyclerview.widget.RecyclerView$ViewFlinger.run(RecyclerView.java:5564)
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1160)
    at android.view.Choreographer.doCallbacks(Choreographer.java:950)
    at android.view.Choreographer.doFrame(Choreographer.java:874)
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1142)
    at android.os.Handler.handleCallback(Handler.java:938)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loopOnce(Looper.java:210)
    at android.os.Looper.loop(Looper.java:299)
    at android.app.ActivityThread.main(ActivityThread.java:8309)
        ... 3 more
    Caused by: java.security.NoSuchAlgorithmException: no such algorithm: SHA256WITHRSA for provider SC
    at sun.security.jca.GetInstance.getService(GetInstance.java:101)
    at sun.security.jca.GetInstance.getInstance(GetInstance.java:218)
    at java.security.Signature.getInstance(Signature.java:549)
    at org.spongycastle.jcajce.util.ProviderJcaJceHelper.createSignature(ProviderJcaJceHelper.java:99)
    at org.spongycastle.operator.jcajce.OperatorHelper.createSignature(OperatorHelper.java:314)
    at org.spongycastle.operator.jcajce.JcaContentSignerBuilder.build(JcaContentSignerBuilder.java:61)
        ... 56 more
0

There are 0 best solutions below