Class FileEncrypt

  • All Implemented Interfaces:
    java.io.Closeable, java.lang.AutoCloseable, java.nio.channels.ByteChannel, java.nio.channels.Channel, java.nio.channels.GatheringByteChannel, java.nio.channels.InterruptibleChannel, java.nio.channels.ReadableByteChannel, java.nio.channels.ScatteringByteChannel, java.nio.channels.SeekableByteChannel, java.nio.channels.WritableByteChannel

    public class FileEncrypt
    extends FileBaseDefault
    An encrypted file with a read cache.
    • Nested Class Summary

      • Nested classes/interfaces inherited from class java.nio.channels.FileChannel

        java.nio.channels.FileChannel.MapMode
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private java.nio.channels.FileChannel base  
      static int BLOCK_SIZE
      The block size.
      (package private) static int BLOCK_SIZE_MASK
      The block size bit mask.
      private byte[] encryptionKey  
      private static int HASH_ITERATIONS
      The number of iterations.
      private static byte[] HEADER  
      (package private) static int HEADER_LENGTH
      The length of the file header.
      private java.lang.String name  
      private static int SALT_LENGTH
      The length of the salt, in bytes.
      private static int SALT_POS  
      private long size
      The current file size, from a user perspective.
      private XTS xts  
    • Constructor Summary

      Constructors 
      Constructor Description
      FileEncrypt​(java.lang.String name, byte[] encryptionKey, java.nio.channels.FileChannel base)  
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      private XTS createXTS()  
      void force​(boolean metaData)  
      protected void implCloseChannel()  
      protected void implTruncate​(long newSize)
      The truncate implementation.
      private XTS init()  
      int read​(java.nio.ByteBuffer dst, long position)  
      private static void readFully​(java.nio.channels.FileChannel file, long pos, java.nio.ByteBuffer dst)  
      private void readInternal​(java.nio.ByteBuffer dst, long position, int len, XTS xts)  
      long size()  
      java.lang.String toString()  
      java.nio.channels.FileLock tryLock​(long position, long size, boolean shared)  
      int write​(java.nio.ByteBuffer src, long position)  
      private static void writeFully​(java.nio.channels.FileChannel file, long pos, java.nio.ByteBuffer src)  
      private void writeInternal​(java.nio.ByteBuffer src, long position, int len, XTS xts)  
      • Methods inherited from class java.nio.channels.FileChannel

        lock, open, open, read, tryLock, write
      • Methods inherited from class java.nio.channels.spi.AbstractInterruptibleChannel

        begin, close, end, isOpen
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
      • Methods inherited from interface java.nio.channels.Channel

        isOpen
    • Field Detail

      • BLOCK_SIZE_MASK

        static final int BLOCK_SIZE_MASK
        The block size bit mask.
        See Also:
        Constant Field Values
      • HEADER_LENGTH

        static final int HEADER_LENGTH
        The length of the file header. Using a smaller header is possible, but would mean reads and writes are not aligned to the block size.
        See Also:
        Constant Field Values
      • HEADER

        private static final byte[] HEADER
      • SALT_POS

        private static final int SALT_POS
      • SALT_LENGTH

        private static final int SALT_LENGTH
        The length of the salt, in bytes.
        See Also:
        Constant Field Values
      • HASH_ITERATIONS

        private static final int HASH_ITERATIONS
        The number of iterations. It is relatively low; a higher value would slow down opening files on Android too much.
        See Also:
        Constant Field Values
      • base

        private final java.nio.channels.FileChannel base
      • size

        private volatile long size
        The current file size, from a user perspective.
      • name

        private final java.lang.String name
      • xts

        private volatile XTS xts
      • encryptionKey

        private byte[] encryptionKey
    • Constructor Detail

      • FileEncrypt

        public FileEncrypt​(java.lang.String name,
                           byte[] encryptionKey,
                           java.nio.channels.FileChannel base)
    • Method Detail

      • init

        private XTS init()
                  throws java.io.IOException
        Throws:
        java.io.IOException
      • createXTS

        private XTS createXTS()
                       throws java.io.IOException
        Throws:
        java.io.IOException
      • implCloseChannel

        protected void implCloseChannel()
                                 throws java.io.IOException
        Overrides:
        implCloseChannel in class FileBase
        Throws:
        java.io.IOException
      • read

        public int read​(java.nio.ByteBuffer dst,
                        long position)
                 throws java.io.IOException
        Overrides:
        read in class FileBase
        Throws:
        java.io.IOException
      • readInternal

        private void readInternal​(java.nio.ByteBuffer dst,
                                  long position,
                                  int len,
                                  XTS xts)
                           throws java.io.IOException
        Throws:
        java.io.IOException
      • readFully

        private static void readFully​(java.nio.channels.FileChannel file,
                                      long pos,
                                      java.nio.ByteBuffer dst)
                               throws java.io.IOException
        Throws:
        java.io.IOException
      • write

        public int write​(java.nio.ByteBuffer src,
                         long position)
                  throws java.io.IOException
        Overrides:
        write in class FileBase
        Throws:
        java.io.IOException
      • writeInternal

        private void writeInternal​(java.nio.ByteBuffer src,
                                   long position,
                                   int len,
                                   XTS xts)
                            throws java.io.IOException
        Throws:
        java.io.IOException
      • writeFully

        private static void writeFully​(java.nio.channels.FileChannel file,
                                       long pos,
                                       java.nio.ByteBuffer src)
                                throws java.io.IOException
        Throws:
        java.io.IOException
      • size

        public long size()
                  throws java.io.IOException
        Specified by:
        size in interface java.nio.channels.SeekableByteChannel
        Specified by:
        size in class java.nio.channels.FileChannel
        Throws:
        java.io.IOException
      • implTruncate

        protected void implTruncate​(long newSize)
                             throws java.io.IOException
        Description copied from class: FileBaseDefault
        The truncate implementation.
        Specified by:
        implTruncate in class FileBaseDefault
        Parameters:
        newSize - the new size
        Throws:
        java.io.IOException - on failure
      • force

        public void force​(boolean metaData)
                   throws java.io.IOException
        Overrides:
        force in class FileBase
        Throws:
        java.io.IOException
      • tryLock

        public java.nio.channels.FileLock tryLock​(long position,
                                                  long size,
                                                  boolean shared)
                                           throws java.io.IOException
        Overrides:
        tryLock in class FileBase
        Throws:
        java.io.IOException
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object