import strformat
proc PEA256Init(): bool {.stdcall, dynlib: "D:\\libpea256x64\\libpea256x64.dll", importc.}
proc PEA256Open(): pointer {.stdcall, dynlib: "D:\\libpea256x64\\libpea256x64.dll", importc.}
proc PEA256Close(handle: pointer): void {.stdcall, dynlib: "D:\\libpea256x64\\libpea256x64.dll", importc.}
proc PEA256EncryptUserKey(handle: pointer, keystr: cstring, keybuff: cstring, keyfile: cstring): cuint {.stdcall, dynlib: "D:\\libpea256x64\\libpea256x64.dll", importc.}
proc PEA256DecryptUserKey(handle: pointer, keystr: cstring, keybuff: cstring, keyfile: cstring): cuint {.stdcall, dynlib: "D:\\libpea256x64\\libpea256x64.dll", importc.}
proc PEA256EncryptBytes(handle: pointer, bits: array[0..3, uint8], len: cuint, subkey: cuint): cuint {.stdcall, dynlib: "D:\\libpea256x64\\libpea256x64.dll", importc.}
proc PEA256DecryptBytes(handle: pointer, bits: array[0..3, uint8], len: cuint, subkey: cuint): cuint {.stdcall, dynlib: "D:\\libpea256x64\\libpea256x64.dll", importc.}
proc PEA256EncryptBytesEx(handle: pointer, inbits: array[0..3, uint8], outbits: array[0..3, uint8], len: cuint, subkey: cuint): cuint {.stdcall, dynlib: "D:\\libpea256x64\\libpea256x64.dll", importc.}
proc PEA256DecryptBytesEx(handle: pointer, inbits: array[0..3, uint8], outbits: array[0..3, uint8], len: cuint, subkey: cuint): cuint {.stdcall, dynlib: "D:\\libpea256x64\\libpea256x64.dll", importc.}
proc PEA256EncryptArrayEx(handle: pointer, inbits: array[0..3, uint8], outbits: array[0..3, uint8], index: cuint, len: cuint, subkey: cuint): cuint {.stdcall, dynlib: "D:\\libpea256x64\\libpea256x64.dll", importc.}
proc PEA256DecryptArrayEx(handle: pointer, inbits: array[0..3, uint8], outbits: array[0..3, uint8], index: cuint, len: cuint, subkey: cuint): cuint {.stdcall, dynlib: "D:\\libpea256x64\\libpea256x64.dll", importc.}
proc PEA256EncryptBufferEx(handle: pointer, inbits: array[0..3, uint8], in_index: cuint, outbits: array[0..3, uint8], out_index: cuint, len: cuint, subkey: cuint): cuint {.stdcall, dynlib: "D:\\libpea256x64\\libpea256x64.dll", importc.}
proc PEA256DecryptBufferEx(handle: pointer, inbits: array[0..3, uint8], in_index: cuint, outbits: array[0..3, uint8], out_index: cuint, len: cuint, subkey: cuint): cuint {.stdcall, dynlib: "D:\\libpea256x64\\libpea256x64.dll", importc.}
proc PEA256Test(): bool {.stdcall, dynlib: "D:\\libpea256x64\\libpea256x64.dll", importc.}
proc PEA256Error(): cint {.stdcall, dynlib: "D:\\libpea256x64\\libpea256x64.dll", importc.}
proc PEA256Version(): cuint {.stdcall, dynlib: "D:\\libpea256x64\\libpea256x64.dll", importc.}
if PEA256Init():
let handle: pointer = PEA256Open()
if handle != nil:
discard PEA256Test()
echo fmt"PEA256Version = {PEA256Version():08X}"
var Array, ArrayEncrypt, ArrayDecrypt: array[0..3, uint8]
for i in 0..3:
Array[i] = uint8(i)
ArrayEncrypt[i] = uint8(i)
var subkey = PEA256EncryptUserKey(handle, "123", "", "")
echo fmt"subkey={subkey:#08X}"
subkey = PEA256EncryptBytes(handle, Array, 4, subkey)
for i in Array:
stdout.write fmt" {i:02X}"
echo ""
subkey = PEA256DecryptUserKey(handle, "123", "", "")
echo fmt"subkey={subkey:#08X}"
subkey = PEA256DecryptBytes(handle, Array, 4, subkey)
for i in Array:
stdout.write fmt" {i:02X}"
echo ""
var sum: uint8 = 0;
for i, v in Array:
sum = sum xor uint8(i) xor v
if sum != 0:
echo "加解密1错误!!!"
else:
echo "加解密1正确!!!"
subkey = PEA256EncryptUserKey(handle, "", "0123456789ABCDEF0123456789ABCDEF", "")
echo fmt"subkey={subkey:#08X}"
subkey = PEA256EncryptBytesEx(handle, ArrayEncrypt, ArrayDecrypt, 4, subkey)
for i in ArrayDecrypt:
stdout.write fmt" {i:02X}"
echo ""
subkey = PEA256DecryptUserKey(handle, "", "0123456789ABCDEF0123456789ABCDEF", "")
echo fmt"subkey={subkey:#08X}"
subkey = PEA256DecryptBytesEx(handle, ArrayDecrypt, ArrayEncrypt, 4, subkey)
for i in ArrayEncrypt:
stdout.write fmt" {i:02X}"
echo ""
sum = 0;
for i, v in Array:
sum = sum xor uint8(i) xor v
if sum != 0:
echo "加解密2错误!!!"
else:
echo "加解密2正确!!!"
subkey = PEA256EncryptUserKey(handle, "", "", "123.PEA.KEY")
echo fmt"subkey={subkey:#08X}"
subkey = PEA256EncryptArrayEx(handle, ArrayEncrypt, ArrayDecrypt, 0, 4, subkey)
for i in ArrayDecrypt:
stdout.write fmt" {i:02X}"
echo ""
subkey = PEA256DecryptUserKey(handle, "", "", "123.PEA.KEY")
echo fmt"subkey={subkey:#08X}"
subkey = PEA256DecryptArrayEx(handle, ArrayDecrypt, ArrayEncrypt, 0, 4, subkey)
for i in ArrayEncrypt:
stdout.write fmt" {i:02X}"
echo ""
sum = 0;
for i, v in Array:
sum = sum xor uint8(i) xor v
if sum != 0:
echo "加解密3错误!!!"
else:
echo "加解密3正确!!!"
subkey = PEA256EncryptUserKey(handle, "", "", "D:\\libpea256x64\\libpea256x64.dll")
echo fmt"subkey={subkey:#08X}"
subkey = PEA256EncryptBufferEx(handle, ArrayEncrypt, 0, ArrayDecrypt, 0, 4, subkey)
for i in ArrayDecrypt:
stdout.write fmt" {i:02X}"
echo ""
subkey = PEA256DecryptUserKey(handle, "", "", "D:\\libpea256x64\\libpea256x64.dll")
echo fmt"subkey={subkey:#08X}"
subkey = PEA256DecryptBufferEx(handle, ArrayDecrypt, 0, ArrayEncrypt, 0, 4, subkey)
for i in ArrayEncrypt:
stdout.write fmt" {i:02X}"
echo ""
sum = 0;
for i, v in Array:
sum = sum xor uint8(i) xor v
if sum != 0:
echo "加解密4错误!!!"
else:
echo "加解密4正确!!!"
PEA256Close(handle)
else:
echo("PEA256Open()失败!!!")
discard PEA256Error()
else:
echo("PEA256Init()失败!!!")
when isMainModule:
echo("Hello, World!")