require 'ffi'
module PEA256Dll
extend FFI::Library
ffi_lib "D:\\libpea256x64\\libpea256x64.dll"
attach_function :PEA256Init, [], :bool
attach_function :PEA256Open, [], :pointer
attach_function :PEA256Close, [:pointer], :void
attach_function :PEA256EncryptUserKey, [:pointer, :string, :string, :string], :uint
attach_function :PEA256DecryptUserKey, [:pointer, :string, :string, :string], :uint
attach_function :PEA256EncryptBytes, [:pointer, :pointer, :uint, :uint], :uint
attach_function :PEA256DecryptBytes, [:pointer, :pointer, :uint, :uint], :uint
attach_function :PEA256EncryptBytesEx, [:pointer, :pointer, :pointer, :uint, :uint], :uint
attach_function :PEA256DecryptBytesEx, [:pointer, :pointer, :pointer, :uint, :uint], :uint
attach_function :PEA256EncryptArrayEx, [:pointer, :pointer, :pointer, :uint, :uint, :uint], :uint
attach_function :PEA256DecryptArrayEx, [:pointer, :pointer, :pointer, :uint, :uint, :uint], :uint
attach_function :PEA256EncryptBufferEx, [:pointer, :pointer, :uint, :pointer, :uint, :uint, :uint], :uint
attach_function :PEA256DecryptBufferEx, [:pointer, :pointer, :uint, :pointer, :uint, :uint, :uint], :uint
attach_function :PEA256Test, [], :bool
attach_function :PEA256Error, [], :int
attach_function :PEA256Version, [], :uint
end
if PEA256Dll.PEA256Init()
puts "PEA256Version = #{PEA256Dll.PEA256Version().to_s(16).upcase}"
handle = PEA256Dll.PEA256Open()
if handle
ArrayBytes = FFI::MemoryPointer.new(:uint8, 4).write_array_of_uint8([0, 1, 2, 3])
ArrayEncrypt = FFI::MemoryPointer.new(:uint8, 4).write_array_of_uint8([0, 1, 2, 3])
ArrayDecrypt = FFI::MemoryPointer.new(:uint8, 4)
subkey = PEA256Dll.PEA256EncryptUserKey(handle, "123", "", "")
puts "subkey0 = 0x#{subkey.to_s(16).upcase}"
PEA256Dll.PEA256EncryptBytes(handle, ArrayBytes, 4, subkey)
puts "#{ArrayBytes.read_array_of_uint8(4)}"
subkey = PEA256Dll.PEA256DecryptUserKey(handle, "123", "", "")
puts "subkey0 = 0x#{subkey.to_s(16).upcase}"
PEA256Dll.PEA256DecryptBytes(handle, ArrayBytes, 4, subkey)
puts "#{ArrayBytes.read_array_of_uint8(4)}"
subkey = PEA256Dll.PEA256EncryptUserKey(handle, "", "0123456789ABCDEF0123456789ABCDEF", "")
puts "subkey1 = 0x#{subkey.to_s(16).upcase}"
PEA256Dll.PEA256EncryptBytesEx(handle, ArrayEncrypt, ArrayDecrypt, 4, subkey)
puts "#{ArrayDecrypt.read_array_of_uint8(4)}"
subkey = PEA256Dll.PEA256DecryptUserKey(handle, "", "0123456789ABCDEF0123456789ABCDEF", "")
puts "subkey1 = 0x#{subkey.to_s(16).upcase}"
PEA256Dll.PEA256DecryptBytesEx(handle, ArrayDecrypt, ArrayEncrypt, 4, subkey)
puts "#{ArrayEncrypt.read_array_of_uint8(4)}"
subkey = PEA256Dll.PEA256EncryptUserKey(handle, "", "", "123.PEA.KEY")
puts "subkey2 = 0x#{subkey.to_s(16).upcase}"
PEA256Dll.PEA256EncryptArrayEx(handle, ArrayEncrypt, ArrayDecrypt, 0, 4, subkey)
puts "#{ArrayDecrypt.read_array_of_uint8(4)}"
subkey = PEA256Dll.PEA256DecryptUserKey(handle, "", "", "123.PEA.KEY")
puts "subkey2 = 0x#{subkey.to_s(16).upcase}"
PEA256Dll.PEA256DecryptArrayEx(handle, ArrayDecrypt, ArrayEncrypt, 0, 4, subkey)
puts "#{ArrayEncrypt.read_array_of_uint8(4)}"
subkey = PEA256Dll.PEA256EncryptUserKey(handle, "", "", "D:\\libpea256x64\\libpea256x64.dll")
puts "subkey3 = 0x#{subkey.to_s(16).upcase}"
PEA256Dll.PEA256EncryptBufferEx(handle, ArrayEncrypt, 0, ArrayDecrypt, 0, 4, subkey)
puts "#{ArrayDecrypt.read_array_of_uint8(4)}"
subkey = PEA256Dll.PEA256DecryptUserKey(handle, "", "", "D:\\libpea256x64\\libpea256x64.dll")
puts "subkey3 = 0x#{subkey.to_s(16).upcase}"
PEA256Dll.PEA256DecryptBufferEx(handle, ArrayDecrypt, 0, ArrayEncrypt, 0, 4, subkey)
puts "#{ArrayEncrypt.read_array_of_uint8(4)}"
PEA256Dll.PEA256Close(handle)
else
puts "PEA256Open()失败!!!"
end
PEA256Dll.PEA256Error()
puts "PEA256Init()结束!!!"
else
puts "PEA256Init()失败!!!"
end