Skip to content

Java.Lang.UnsupportedOperationException: 'For encrypted files, please open the relevant FileInput/FileOutputStream.' #405

@AlexanderVolkovDA

Description

@AlexanderVolkovDA

Version Information

  • Visual Studio version (eg. 16.8 or 8.8): 16.11.3
  • Xamarin.Android version (eg. 11.1): 11.4.0.5
  • Using AndroidX or Support Libraries:
    Xamarin.Android.Support.Design 27.0.2.1
    Xamarin.Android.Support.v4 27.0.2.1
    Xamarin.Android.Support.v7.AppCompat 27.0.2.1
    Xamarin.Android.Support.v7.CardView 27.0.2.1
    Xamarin.Android.Support.v7.MediaRouter 27.0.2.1
    Xamarin.AndroidX.AppCompat.Resources 1.1.0
    Xamarin.AndroidX.Arch.Core.Runtime 2.1.0.8
    Xamarin.AndroidX.Legacy.Support.V4 1.0.0.7
    Xamarin.AndroidX.MediaRouter 1.2.4
    Xamarin.AndroidX.Palette 1.0.07
    Xamarin.AndroidX.Security.SecurityCrypto 1.0.0.3
  • If Support Libraries, version (eg 28.0.0): 27.0.2.1

Describe your Issue:

When trying to open encrypted stream to read file with AndroidX.Security.Crypto.EncryptedFile.OpenFileInput() exception Java.Lang.UnsupportedOperationException with message: 'For encrypted files, please open the relevant FileInput/FileOutputStream.' is thrown

Steps to Reproduce (with link to sample solution if possible):

        string masterKeyAlias = MasterKeys.GetOrCreate(MasterKeys.Aes256GcmSpec);
        Java.IO.File file = new File(Android.App.Application.Context.FilesDir, Settings.Settings.DataFileName);
        bool fileExists = file.Exists();
        if (fileExists)
        {
            file.Delete();
        }

        AndroidX.Security.Crypto.EncryptedFile.Builder builder = new EncryptedFile.Builder(
            file,
            Android.App.Application.Context,
            masterKeyAlias,
            EncryptedFile.FileEncryptionScheme.Aes256GcmHkdf4kb);
        AndroidX.Security.Crypto.EncryptedFile encryptedFile = builder.Build();

        using (System.IO.Stream output = encryptedFile.OpenFileOutput())
        {
            await output.WriteAsync(Encoding.UTF8.GetBytes("Just sample text"));
        }

        using (System.IO.Stream input = encryptedFile.OpenFileInput())
        {
            int notReachable = input.ReadByte();
        }

Include any relevant Exception Stack traces, build logs, adb logs:

  at Java.Interop.JniEnvironment+InstanceMethods.CallObjectMethod (Java.Interop.JniObjectReference instance, Java.Interop.JniMethodInfo method, Java.Interop.JniArgumentValue* args) [0x0006e] in <bd6bd528a8784b7caf03e9f25c9f0d7b>:0 
  at Java.Interop.JniPeerMembers+JniInstanceMethods.InvokeVirtualObjectMethod (System.String encodedMember, Java.Interop.IJavaPeerable self, Java.Interop.JniArgumentValue* parameters) [0x0002a] in <bd6bd528a8784b7caf03e9f25c9f0d7b>:0 
  at Java.IO.FileInputStream.get_Channel () [0x00000] in /Users/builder/azdo/_work/1/s/xamarin-android/src/Mono.Android/obj/Release/monoandroid10/android-30/mcw/Java.IO.FileInputStream.cs:160 
  at Android.Runtime.InputStreamInvoker..ctor (Java.IO.InputStream stream) [0x00025] in /Users/builder/azdo/_work/1/s/xamarin-android/src/Mono.Android/Android.Runtime/InputStreamInvoker.cs:21 
  at (wrapper remoting-invoke-with-check) Android.Runtime.InputStreamInvoker..ctor(Java.IO.InputStream)
  at Android.Runtime.InputStreamInvoker.FromJniHandle (System.IntPtr handle, Android.Runtime.JniHandleOwnership transfer) [0x00035] in /Users/builder/azdo/_work/1/s/xamarin-android/src/Mono.Android/Android.Runtime/InputStreamInvoker.cs:168 
  at AndroidX.Security.Crypto.EncryptedFile.OpenFileInput () [0x00018] in D:\a\1\s\generated\androidx.security.security-crypto\obj\Release\monoandroid9.0\generated\src\AndroidX.Security.Crypto.EncryptedFile.cs:223 
  at ProactisMobileApp.Data.ExpenseData.WriteDataFile (System.String text) [0x00227] in D:\Work\Projects\Proactis\MobileApp\ProactisMobileApp\ProactisMobileApp\ProactisMobileApp\Data\ExpenseData.cs:324 
  --- End of managed Java.Lang.UnsupportedOperationException stack trace ---
java.lang.UnsupportedOperationException: For encrypted files, please open the relevant FileInput/FileOutputStream.
    at androidx.security.crypto.EncryptedFile$EncryptedFileInputStream.getChannel(EncryptedFile.java:319)
    at mono.java.lang.RunnableImplementor.n_run(Native Method)
    at mono.java.lang.RunnableImplementor.run(RunnableImplementor.java:30)
    at android.os.Handler.handleCallback(Handler.java:883)
    at android.os.Handler.dispatchMessage(Handler.java:100)
    at android.os.Looper.loop(Looper.java:235)
    at android.app.ActivityThread.main(ActivityThread.java:7441)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)

Metadata

Metadata

Assignees

No one assigned

    Labels

    binding-issueJava error when attempting to use bound type/method

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions