class sun.security.provider.NativePRNG$RandomIO
  minor version: 0
  major version: 59
  flags: flags: (0x0020) ACC_SUPER
  this_class: sun.security.provider.NativePRNG$RandomIO
  super_class: java.lang.Object
{
  private static final long MAX_BUFFER_TIME;
    descriptor: J
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 100

  private static final int BUFFER_SIZE;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 32

  private final java.io.InputStream randomIn;
    descriptor: Ljava/io/InputStream;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final java.io.InputStream urandomIn;
    descriptor: Ljava/io/InputStream;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private java.io.OutputStream randomOut;
    descriptor: Ljava/io/OutputStream;
    flags: (0x0002) ACC_PRIVATE

  private boolean randomOutInitialized;
    descriptor: Z
    flags: (0x0002) ACC_PRIVATE

  private volatile sun.security.provider.SecureRandom mixRandom;
    descriptor: Lsun/security/provider/SecureRandom;
    flags: (0x0042) ACC_PRIVATE, ACC_VOLATILE

  private final byte[] urandomBuffer;
    descriptor: [B
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private int buffered;
    descriptor: I
    flags: (0x0002) ACC_PRIVATE

  private long lastRead;
    descriptor: J
    flags: (0x0002) ACC_PRIVATE

  private final java.lang.Object LOCK_GET_BYTES;
    descriptor: Ljava/lang/Object;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final java.lang.Object LOCK_GET_SEED;
    descriptor: Ljava/lang/Object;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final java.lang.Object LOCK_SET_SEED;
    descriptor: Ljava/lang/Object;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private void <init>(java.io.File, java.io.File);
    descriptor: (Ljava/io/File;Ljava/io/File;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=3, args_size=3
        start local 0 // sun.security.provider.NativePRNG$RandomIO this
        start local 1 // java.io.File randomFile
        start local 2 // java.io.File urandomFile
         0: .line 165
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 156
            aload 0 /* this */
            new java.lang.Object
            dup
            invokespecial java.lang.Object.<init>:()V
            putfield sun.security.provider.NativePRNG$RandomIO.LOCK_GET_BYTES:Ljava/lang/Object;
         2: .line 159
            aload 0 /* this */
            new java.lang.Object
            dup
            invokespecial java.lang.Object.<init>:()V
            putfield sun.security.provider.NativePRNG$RandomIO.LOCK_GET_SEED:Ljava/lang/Object;
         3: .line 162
            aload 0 /* this */
            new java.lang.Object
            dup
            invokespecial java.lang.Object.<init>:()V
            putfield sun.security.provider.NativePRNG$RandomIO.LOCK_SET_SEED:Ljava/lang/Object;
         4: .line 166
            aload 0 /* this */
            new java.io.FileInputStream
            dup
            aload 1 /* randomFile */
            invokespecial java.io.FileInputStream.<init>:(Ljava/io/File;)V
            putfield sun.security.provider.NativePRNG$RandomIO.randomIn:Ljava/io/InputStream;
         5: .line 167
            aload 0 /* this */
            new java.io.FileInputStream
            dup
            aload 2 /* urandomFile */
            invokespecial java.io.FileInputStream.<init>:(Ljava/io/File;)V
            putfield sun.security.provider.NativePRNG$RandomIO.urandomIn:Ljava/io/InputStream;
         6: .line 168
            aload 0 /* this */
            bipush 32
            newarray 8
            putfield sun.security.provider.NativePRNG$RandomIO.urandomBuffer:[B
         7: .line 169
            return
        end local 2 // java.io.File urandomFile
        end local 1 // java.io.File randomFile
        end local 0 // sun.security.provider.NativePRNG$RandomIO this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    8     0         this  Lsun/security/provider/NativePRNG$RandomIO;
            0    8     1   randomFile  Ljava/io/File;
            0    8     2  urandomFile  Ljava/io/File;
    Exceptions:
      throws java.io.IOException
    MethodParameters:
             Name  Flags
      randomFile   
      urandomFile  

  private sun.security.provider.SecureRandom getMixRandom();
    descriptor: ()Lsun/security/provider/SecureRandom;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=4, args_size=1
        start local 0 // sun.security.provider.NativePRNG$RandomIO this
         0: .line 174
            aload 0 /* this */
            getfield sun.security.provider.NativePRNG$RandomIO.mixRandom:Lsun/security/provider/SecureRandom;
            astore 1 /* r */
        start local 1 // sun.security.provider.SecureRandom r
         1: .line 175
            aload 1 /* r */
            ifnonnull 17
         2: .line 176
            aload 0 /* this */
            getfield sun.security.provider.NativePRNG$RandomIO.LOCK_GET_BYTES:Ljava/lang/Object;
            dup
            astore 2
            monitorenter
         3: .line 177
            aload 0 /* this */
            getfield sun.security.provider.NativePRNG$RandomIO.mixRandom:Lsun/security/provider/SecureRandom;
            astore 1 /* r */
         4: .line 178
            aload 1 /* r */
            ifnonnull 13
         5: .line 179
            new sun.security.provider.SecureRandom
            dup
            invokespecial sun.security.provider.SecureRandom.<init>:()V
            astore 1 /* r */
         6: .line 181
            bipush 20
            newarray 8
            astore 3 /* b */
        start local 3 // byte[] b
         7: .line 182
            aload 0 /* this */
            getfield sun.security.provider.NativePRNG$RandomIO.urandomIn:Ljava/io/InputStream;
            aload 3 /* b */
            invokestatic sun.security.provider.NativePRNG$RandomIO.readFully:(Ljava/io/InputStream;[B)V
         8: .line 183
            aload 1 /* r */
            aload 3 /* b */
            invokevirtual sun.security.provider.SecureRandom.engineSetSeed:([B)V
        end local 3 // byte[] b
         9: .line 184
            goto 12
      StackMap locals: sun.security.provider.NativePRNG$RandomIO sun.security.provider.SecureRandom java.lang.Object
      StackMap stack: java.io.IOException
        10: astore 3 /* e */
        start local 3 // java.io.IOException e
        11: .line 185
            new java.security.ProviderException
            dup
            ldc "init failed"
            aload 3 /* e */
            invokespecial java.security.ProviderException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 3 // java.io.IOException e
        12: .line 187
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* r */
            putfield sun.security.provider.NativePRNG$RandomIO.mixRandom:Lsun/security/provider/SecureRandom;
        13: .line 176
      StackMap locals:
      StackMap stack:
            aload 2
            monitorexit
        14: goto 17
      StackMap locals:
      StackMap stack: java.lang.Throwable
        15: aload 2
            monitorexit
        16: athrow
        17: .line 191
      StackMap locals:
      StackMap stack:
            aload 1 /* r */
            areturn
        end local 1 // sun.security.provider.SecureRandom r
        end local 0 // sun.security.provider.NativePRNG$RandomIO this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   18     0  this  Lsun/security/provider/NativePRNG$RandomIO;
            1   18     1     r  Lsun/security/provider/SecureRandom;
            7    9     3     b  [B
           11   12     3     e  Ljava/io/IOException;
      Exception table:
        from    to  target  type
           6     9      10  Class java.io.IOException
           3    14      15  any
          15    16      15  any

  private static void readFully(java.io.InputStream, byte[]);
    descriptor: (Ljava/io/InputStream;[B)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=4, locals=5, args_size=2
        start local 0 // java.io.InputStream in
        start local 1 // byte[] data
         0: .line 199
            aload 1 /* data */
            arraylength
            istore 2 /* len */
        start local 2 // int len
         1: .line 200
            iconst_0
            istore 3 /* ofs */
        start local 3 // int ofs
         2: .line 201
            goto 8
         3: .line 202
      StackMap locals: int int
      StackMap stack:
            aload 0 /* in */
            aload 1 /* data */
            iload 3 /* ofs */
            iload 2 /* len */
            invokevirtual java.io.InputStream.read:([BII)I
            istore 4 /* k */
        start local 4 // int k
         4: .line 203
            iload 4 /* k */
            ifgt 6
         5: .line 204
            new java.io.EOFException
            dup
            ldc "/dev/[u]random closed?"
            invokespecial java.io.EOFException.<init>:(Ljava/lang/String;)V
            athrow
         6: .line 206
      StackMap locals: int
      StackMap stack:
            iload 3 /* ofs */
            iload 4 /* k */
            iadd
            istore 3 /* ofs */
         7: .line 207
            iload 2 /* len */
            iload 4 /* k */
            isub
            istore 2 /* len */
        end local 4 // int k
         8: .line 201
      StackMap locals:
      StackMap stack:
            iload 2 /* len */
            ifgt 3
         9: .line 209
            iload 2 /* len */
            ifle 11
        10: .line 210
            new java.io.IOException
            dup
            ldc "Could not read from /dev/[u]random"
            invokespecial java.io.IOException.<init>:(Ljava/lang/String;)V
            athrow
        11: .line 212
      StackMap locals:
      StackMap stack:
            return
        end local 3 // int ofs
        end local 2 // int len
        end local 1 // byte[] data
        end local 0 // java.io.InputStream in
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   12     0    in  Ljava/io/InputStream;
            0   12     1  data  [B
            1   12     2   len  I
            2   12     3   ofs  I
            4    8     4     k  I
    Exceptions:
      throws java.io.IOException
    MethodParameters:
      Name  Flags
      in    
      data  

  private byte[] implGenerateSeed(int);
    descriptor: (I)[B
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=4, args_size=2
        start local 0 // sun.security.provider.NativePRNG$RandomIO this
        start local 1 // int numBytes
         0: .line 216
            aload 0 /* this */
            getfield sun.security.provider.NativePRNG$RandomIO.LOCK_GET_SEED:Ljava/lang/Object;
            dup
            astore 2
            monitorenter
         1: .line 218
            iload 1 /* numBytes */
            newarray 8
            astore 3 /* b */
        start local 3 // byte[] b
         2: .line 219
            aload 0 /* this */
            getfield sun.security.provider.NativePRNG$RandomIO.randomIn:Ljava/io/InputStream;
            aload 3 /* b */
            invokestatic sun.security.provider.NativePRNG$RandomIO.readFully:(Ljava/io/InputStream;[B)V
         3: .line 220
            aload 3 /* b */
         4: aload 2
            monitorexit
         5: areturn
        end local 3 // byte[] b
         6: .line 221
      StackMap locals: sun.security.provider.NativePRNG$RandomIO int java.lang.Object
      StackMap stack: java.io.IOException
            astore 3 /* e */
        start local 3 // java.io.IOException e
         7: .line 222
            new java.security.ProviderException
            dup
            ldc "generateSeed() failed"
            aload 3 /* e */
            invokespecial java.security.ProviderException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 3 // java.io.IOException e
         8: .line 216
      StackMap locals:
      StackMap stack: java.lang.Throwable
            aload 2
            monitorexit
         9: athrow
        end local 1 // int numBytes
        end local 0 // sun.security.provider.NativePRNG$RandomIO this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   10     0      this  Lsun/security/provider/NativePRNG$RandomIO;
            0   10     1  numBytes  I
            2    6     3         b  [B
            7    8     3         e  Ljava/io/IOException;
      Exception table:
        from    to  target  type
           1     4       6  Class java.io.IOException
           1     5       8  any
           6     9       8  any
    MethodParameters:
          Name  Flags
      numBytes  

  private void implSetSeed(byte[]);
    descriptor: ([B)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=4, args_size=2
        start local 0 // sun.security.provider.NativePRNG$RandomIO this
        start local 1 // byte[] seed
         0: .line 231
            aload 0 /* this */
            getfield sun.security.provider.NativePRNG$RandomIO.LOCK_SET_SEED:Ljava/lang/Object;
            dup
            astore 2
            monitorenter
         1: .line 232
            aload 0 /* this */
            getfield sun.security.provider.NativePRNG$RandomIO.randomOutInitialized:Z
            ifne 6
         2: .line 233
            aload 0 /* this */
            iconst_1
            putfield sun.security.provider.NativePRNG$RandomIO.randomOutInitialized:Z
         3: .line 234
            aload 0 /* this */
         4: .line 235
            new sun.security.provider.NativePRNG$RandomIO$1
            dup
            aload 0 /* this */
            invokespecial sun.security.provider.NativePRNG$RandomIO$1.<init>:(Lsun/security/provider/NativePRNG$RandomIO;)V
         5: .line 234
            invokestatic java.security.AccessController.doPrivileged:(Ljava/security/PrivilegedAction;)Ljava/lang/Object;
            checkcast java.io.OutputStream
            putfield sun.security.provider.NativePRNG$RandomIO.randomOut:Ljava/io/OutputStream;
         6: .line 245
      StackMap locals: java.lang.Object
      StackMap stack:
            aload 0 /* this */
            getfield sun.security.provider.NativePRNG$RandomIO.randomOut:Ljava/io/OutputStream;
            ifnull 11
         7: .line 247
            aload 0 /* this */
            getfield sun.security.provider.NativePRNG$RandomIO.randomOut:Ljava/io/OutputStream;
            aload 1 /* seed */
            invokevirtual java.io.OutputStream.write:([B)V
         8: .line 248
            goto 11
      StackMap locals:
      StackMap stack: java.io.IOException
         9: astore 3 /* e */
        start local 3 // java.io.IOException e
        10: .line 249
            new java.security.ProviderException
            dup
            ldc "setSeed() failed"
            aload 3 /* e */
            invokespecial java.security.ProviderException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 3 // java.io.IOException e
        11: .line 252
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual sun.security.provider.NativePRNG$RandomIO.getMixRandom:()Lsun/security/provider/SecureRandom;
            aload 1 /* seed */
            invokevirtual sun.security.provider.SecureRandom.engineSetSeed:([B)V
        12: .line 231
            aload 2
            monitorexit
        13: goto 16
      StackMap locals:
      StackMap stack: java.lang.Throwable
        14: aload 2
            monitorexit
        15: athrow
        16: .line 254
      StackMap locals:
      StackMap stack:
            return
        end local 1 // byte[] seed
        end local 0 // sun.security.provider.NativePRNG$RandomIO this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   17     0  this  Lsun/security/provider/NativePRNG$RandomIO;
            0   17     1  seed  [B
           10   11     3     e  Ljava/io/IOException;
      Exception table:
        from    to  target  type
           7     8       9  Class java.io.IOException
           1    13      14  any
          14    15      14  any
    MethodParameters:
      Name  Flags
      seed  

  private void ensureBufferValid();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=3, args_size=1
        start local 0 // sun.security.provider.NativePRNG$RandomIO this
         0: .line 259
            invokestatic java.lang.System.currentTimeMillis:()J
            lstore 1 /* time */
        start local 1 // long time
         1: .line 260
            aload 0 /* this */
            getfield sun.security.provider.NativePRNG$RandomIO.buffered:I
            ifle 3
            lload 1 /* time */
            aload 0 /* this */
            getfield sun.security.provider.NativePRNG$RandomIO.lastRead:J
            lsub
            ldc 100
            lcmp
            ifge 3
         2: .line 261
            return
         3: .line 263
      StackMap locals: long
      StackMap stack:
            aload 0 /* this */
            lload 1 /* time */
            putfield sun.security.provider.NativePRNG$RandomIO.lastRead:J
         4: .line 264
            aload 0 /* this */
            getfield sun.security.provider.NativePRNG$RandomIO.urandomIn:Ljava/io/InputStream;
            aload 0 /* this */
            getfield sun.security.provider.NativePRNG$RandomIO.urandomBuffer:[B
            invokestatic sun.security.provider.NativePRNG$RandomIO.readFully:(Ljava/io/InputStream;[B)V
         5: .line 265
            aload 0 /* this */
            aload 0 /* this */
            getfield sun.security.provider.NativePRNG$RandomIO.urandomBuffer:[B
            arraylength
            putfield sun.security.provider.NativePRNG$RandomIO.buffered:I
         6: .line 266
            return
        end local 1 // long time
        end local 0 // sun.security.provider.NativePRNG$RandomIO this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    7     0  this  Lsun/security/provider/NativePRNG$RandomIO;
            1    7     1  time  J
    Exceptions:
      throws java.io.IOException

  private void implNextBytes(byte[]);
    descriptor: ([B)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=6, args_size=2
        start local 0 // sun.security.provider.NativePRNG$RandomIO this
        start local 1 // byte[] data
         0: .line 272
            aload 0 /* this */
            getfield sun.security.provider.NativePRNG$RandomIO.LOCK_GET_BYTES:Ljava/lang/Object;
            dup
            astore 2
            monitorenter
         1: .line 274
            aload 0 /* this */
            invokevirtual sun.security.provider.NativePRNG$RandomIO.getMixRandom:()Lsun/security/provider/SecureRandom;
            aload 1 /* data */
            invokevirtual sun.security.provider.SecureRandom.engineNextBytes:([B)V
         2: .line 275
            aload 1 /* data */
            arraylength
            istore 3 /* len */
        start local 3 // int len
         3: .line 276
            iconst_0
            istore 4 /* ofs */
        start local 4 // int ofs
         4: .line 277
            goto 12
         5: .line 278
      StackMap locals: java.lang.Object int int
      StackMap stack:
            aload 0 /* this */
            invokevirtual sun.security.provider.NativePRNG$RandomIO.ensureBufferValid:()V
         6: .line 279
            aload 0 /* this */
            getfield sun.security.provider.NativePRNG$RandomIO.urandomBuffer:[B
            arraylength
            aload 0 /* this */
            getfield sun.security.provider.NativePRNG$RandomIO.buffered:I
            isub
            istore 5 /* bufferOfs */
        start local 5 // int bufferOfs
         7: .line 280
            goto 11
         8: .line 281
      StackMap locals: int
      StackMap stack:
            aload 1 /* data */
            iload 4 /* ofs */
            iinc 4 /* ofs */ 1
            dup2
            baload
            aload 0 /* this */
            getfield sun.security.provider.NativePRNG$RandomIO.urandomBuffer:[B
            iload 5 /* bufferOfs */
            iinc 5 /* bufferOfs */ 1
            baload
            ixor
            i2b
            bastore
         9: .line 282
            iinc 3 /* len */ -1
        10: .line 283
            aload 0 /* this */
            dup
            getfield sun.security.provider.NativePRNG$RandomIO.buffered:I
            iconst_1
            isub
            putfield sun.security.provider.NativePRNG$RandomIO.buffered:I
        11: .line 280
      StackMap locals:
      StackMap stack:
            iload 3 /* len */
            ifle 12
            aload 0 /* this */
            getfield sun.security.provider.NativePRNG$RandomIO.buffered:I
            ifgt 8
        end local 5 // int bufferOfs
        12: .line 277
      StackMap locals:
      StackMap stack:
            iload 3 /* len */
            ifgt 5
        end local 4 // int ofs
        end local 3 // int len
        13: .line 286
            goto 16
      StackMap locals: sun.security.provider.NativePRNG$RandomIO byte[] java.lang.Object
      StackMap stack: java.io.IOException
        14: astore 3 /* e */
        start local 3 // java.io.IOException e
        15: .line 287
            new java.security.ProviderException
            dup
            ldc "nextBytes() failed"
            aload 3 /* e */
            invokespecial java.security.ProviderException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 3 // java.io.IOException e
        16: .line 272
      StackMap locals:
      StackMap stack:
            aload 2
            monitorexit
        17: goto 20
      StackMap locals:
      StackMap stack: java.lang.Throwable
        18: aload 2
            monitorexit
        19: athrow
        20: .line 290
      StackMap locals:
      StackMap stack:
            return
        end local 1 // byte[] data
        end local 0 // sun.security.provider.NativePRNG$RandomIO this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   21     0       this  Lsun/security/provider/NativePRNG$RandomIO;
            0   21     1       data  [B
            3   13     3        len  I
            4   13     4        ofs  I
            7   12     5  bufferOfs  I
           15   16     3          e  Ljava/io/IOException;
      Exception table:
        from    to  target  type
           1    13      14  Class java.io.IOException
           1    17      18  any
          18    19      18  any
    MethodParameters:
      Name  Flags
      data  
}
SourceFile: "NativePRNG.java"
NestHost: sun.security.provider.NativePRNG
InnerClasses:
  private RandomIO = sun.security.provider.NativePRNG$RandomIO of sun.security.provider.NativePRNG
  sun.security.provider.NativePRNG$RandomIO$1