Sha256: 35ceaad790c2621a538e44cd72939a407ca4cdf8ae4f27063cdac0ad17a36a78

Contents?: true

Size: 1.44 KB

Versions: 2

Compression:

Stored size: 1.44 KB

Contents

require_relative '../data_conversion'

module Ccrypto
  module Java
    class ManagedMemoryBuffer
      include DataConversion

      def initialize(*args, &block)
        @raf = java.io.RandomAccessFile.new(java.nio.file.Files.createTempFile(nil,".ccl").toFile, "rw")
      end

      def bytes
        buf = ::Java::byte[@raf.length].new
        @raf.seek(0)
        @raf.read_fully(buf)
        buf
      end

      # Return current cursor position
      def pos
        @raf.getFilePointer
      end

      def length
        @raf.length
      end

      def rewind
        @raf.seek(0)
      end

      def dispose(wcnt = 32)
        len = @raf.length
        @raf.seek(0)
       
        cnt = 0
        loop do
          @raf.write(SecureRandomEngine.random_bytes(len))
          @raf.seek(0)

          cnt += 1
          break if cnt >= wcnt
        end

        @raf = nil
        GC.start
      end

      def write(val)
        @raf.write(to_java_bytes(val))
      end

      def read(len)
        buf = ::Java::byte[len].new
        @raf.read(buf,0,len)
        buf
      end

      def respond_to_missing?(mtd, *args, &block)
        @raf.respond_to?(mtd, *args, &block)
      end

      def equals?(val)
        case val
        when ::Java::byte[]
          bytes == val
        when String
          bytes == to_java_bytes(val)
        else
          raise MemoryBufferException, "Unknown how to compare with #{val}"
        end
      end

    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
ccrypto-java-0.2.0 lib/ccrypto/java/utils/memory_buffer.rb
ccrypto-java-0.1.0 lib/ccrypto/java/utils/memory_buffer.rb