#import Pkg
#Pkg.add("OffsetArrays")
using OffsetArrays
DllFileName = "D:\\libpea256x64\\libpea256x64.dll"
PEA256Init = ccall((:PEA256Init, DllFileName), Bool, ())
if PEA256Init
ArrayBytes = UInt8[0, 1, 2, 3]
ArrayEncrypt = UInt8[0, 1, 2, 3]
ArrayDecrypt = UInt8[0, 1, 2, 3]
#ArrayBytes = OffsetArray(ArrayBytes,0:3)
#ArrayEncrypt = OffsetArray(ArrayEncrypt,0:3)
#ArrayDecrypt = OffsetArray(ArrayDecrypt,0:3)
ccall((:PEA256Test, DllFileName), Bool, ())
handle = ccall((:PEA256Open, DllFileName), Ptr{Any}, ())
if handle != C_NULL
subkey = ccall((:PEA256EncryptUserKey, DllFileName), UInt32,
(Ptr{Any}, Ptr{UInt8}, Ptr{UInt8}, Ptr{UInt8}), handle, "123", "", "")
println(string(subkey, base = 16, pad = 8))
subkey = ccall((:PEA256EncryptBytes, DllFileName), UInt32,
(Ptr{UInt64}, Ptr{UInt8}, UInt32, UInt32), handle, ArrayBytes, 4, subkey)
println(ArrayBytes)
subkey = ccall((:PEA256DecryptUserKey, DllFileName), UInt32,
(Ptr{UInt64}, Ptr{UInt8}, Ptr{UInt8}, Ptr{UInt8}), handle, "123", "", "")
println(string(subkey, base = 16, pad = 8))
subkey = ccall((:PEA256DecryptBytes, DllFileName), UInt32,
(Ptr{Any}, Ptr{UInt8}, UInt32, UInt32), handle, ArrayBytes, 4, subkey)
println(ArrayBytes)
subkey = ccall((:PEA256EncryptUserKey, DllFileName), UInt32,
(Ptr{Any}, Ptr{UInt8}, Ptr{UInt8}, Ptr{UInt8}), handle, "", "0123456789ABCDEF0123456789ABCDEF", "")
println(string(subkey, base = 16, pad = 8))
subkey = ccall((:PEA256EncryptBytesEx, DllFileName), UInt32,
(Ptr{Any}, Ptr{UInt8}, Ptr{UInt8}, UInt32, UInt32), handle, ArrayEncrypt, ArrayDecrypt, 4, subkey)
println(ArrayDecrypt)
subkey = ccall((:PEA256DecryptUserKey, DllFileName), UInt32,
(Ptr{Any}, Ptr{UInt8}, Ptr{UInt8}, Ptr{UInt8}), handle, "", "0123456789ABCDEF0123456789ABCDEF", "")
println(string(subkey, base = 16, pad = 8))
subkey = ccall((:PEA256DecryptBytesEx, DllFileName), UInt32,
(Ptr{Any}, Ptr{UInt8}, Ptr{UInt8}, UInt32, UInt32), handle, ArrayDecrypt, ArrayEncrypt, 4, subkey)
println(ArrayEncrypt)
subkey = ccall((:PEA256EncryptUserKey, DllFileName), UInt32,
(Ptr{Any}, Ptr{UInt8}, Ptr{UInt8}, Ptr{UInt8}), handle, "", "", "123.PEA.KEY")
println(string(subkey, base = 16, pad = 8))
subkey = ccall((:PEA256EncryptArrayEx, DllFileName), UInt32,
(Ptr{Any}, Ptr{UInt8}, Ptr{UInt8}, UInt32, UInt32, UInt32), handle, ArrayEncrypt, ArrayDecrypt, 0, 4, subkey)
println(ArrayDecrypt)
subkey = ccall((:PEA256DecryptUserKey, DllFileName), UInt32,
(Ptr{Any}, Ptr{UInt8}, Ptr{UInt8}, Ptr{UInt8}), handle, "", "", "123.PEA.KEY")
println(string(subkey, base = 16, pad = 8))
subkey = ccall((:PEA256DecryptArrayEx, DllFileName), UInt32,
(Ptr{Any}, Ptr{UInt8}, Ptr{UInt8}, UInt32, UInt32, UInt32), handle, ArrayDecrypt, ArrayEncrypt, 0, 4, subkey)
println(ArrayEncrypt)
subkey = ccall((:PEA256EncryptUserKey, DllFileName), UInt32,
(Ptr{Any}, Ptr{UInt8}, Ptr{UInt8}, Ptr{UInt8}), handle, "", "", "D:\\libpea256x64\\libpea256x64.dll")
println(string(subkey, base = 16, pad = 8))
subkey = ccall((:PEA256EncryptBufferEx, DllFileName), UInt32,
(Ptr{Any}, Ptr{UInt8}, UInt32, Ptr{UInt8}, UInt32, UInt32, UInt32), handle, ArrayEncrypt, 0, ArrayDecrypt, 0, 4, subkey)
println(ArrayDecrypt)
subkey = ccall((:PEA256DecryptUserKey, DllFileName), UInt32,
(Ptr{Any}, Ptr{UInt8}, Ptr{UInt8}, Ptr{UInt8}), handle, "", "", "D:\\libpea256x64\\libpea256x64.dll")
println(string(subkey, base = 16, pad = 8))
subkey = ccall((:PEA256DecryptBufferEx, DllFileName), UInt32,
(Ptr{Any}, Ptr{UInt8}, UInt32, Ptr{UInt8}, UInt32, UInt32, UInt32), handle, ArrayDecrypt, 0, ArrayEncrypt, 0, 4, subkey)
println(ArrayEncrypt)
ccall((:PEA256Close, DllFileName), Any, (Ptr{Any}, ), handle)
println("PEA256COM结束!!!")
else
println("PEA256Open()失败!!!")
end
else
println("PEA256Init()失败!!!")
end