本帖最后由 hotpower 于 2023-9-20 09:40 编辑
(use-package "FFI")
(default-foreign-language :stdc)
(def-call-out PEA256Init (:name "PEA256Init")
(:return-type boolean)
(:library "D:\\PEA256COM\\x64\\Release\\libpea256x64.dll"))
(def-call-out PEA256Test (:name "PEA256Test")
(:return-type boolean)
(:library "D:\\PEA256COM\\x64\\Release\\libpea256x64.dll"))
(def-call-out PEA256Version (:name "PEA256Version")
(:return-type uint32)
(:library "D:\\PEA256COM\\x64\\Release\\libpea256x64.dll"))
(def-call-out PEA256Error (:name "PEA256Error")
(:return-type uint32)
(:library "D:\\PEA256COM\\x64\\Release\\libpea256x64.dll"))
(def-call-out PEA256Open (:name "PEA256Open")
(:return-type c-pointer)
(:library "D:\\PEA256COM\\x64\\Release\\libpea256x64.dll"))
(def-call-out PEA256Close (:name "PEA256Close")
(:arguments (handle c-pointer))
(:return-type)
(:library "D:\\PEA256COM\\x64\\Release\\libpea256x64.dll"))
(def-call-out PEA256EncryptUserKey (:name "PEA256EncryptUserKey")
(:arguments (handle c-pointer) (keystr c-string) (keybuff c-string) (keyfile c-string))
(:return-type uint)
(:library "D:\\PEA256COM\\x64\\Release\\libpea256x64.dll"))
(def-call-out PEA256DecryptUserKey (:name "PEA256DecryptUserKey")
(:arguments (handle c-pointer) (keystr c-string) (keybuff c-string) (keyfile c-string))
(:return-type uint)
(:library "D:\\PEA256COM\\x64\\Release\\libpea256x64.dll"))
(def-call-out PEA256EncryptBytes (:name "PEA256EncryptBytes")
(:arguments (handle c-pointer) (bytes (c-ptr (c-array uchar 4)) :in-out :alloca) (len uint32) (subkey uint32))
(:return-type uint32)
(:library "D:\\PEA256COM\\x64\\Release\\libpea256x64.dll"))
(def-call-out PEA256DecryptBytes (:name "PEA256DecryptBytes")
(:arguments (handle c-pointer) (bytes (c-ptr (c-array uchar 4)) :in-out :alloca) (len uint32) (subkey uint32))
(:return-type uint32)
(:library "D:\\PEA256COM\\x64\\Release\\libpea256x64.dll"))
(def-call-out PEA256EncryptBytesEx (:name "PEA256EncryptBytesEx")
(:arguments (handle c-pointer) (inbytes (c-ptr (c-array uchar 4)) :in :alloca) (outbytes (c-ptr (c-array uchar 4)) :in-out :alloca) (len uint32) (subkey uint32))
(:return-type uint32)
(:library "D:\\PEA256COM\\x64\\Release\\libpea256x64.dll"))
(def-call-out PEA256DecryptBytesEx (:name "PEA256DecryptBytesEx")
(:arguments (handle c-pointer) (inbytes (c-ptr (c-array uchar 4)) :in :alloca) (outbytes (c-ptr (c-array uchar 4)) :in-out :alloca) (len uint32) (subkey uint32))
(:return-type uint32)
(:library "D:\\PEA256COM\\x64\\Release\\libpea256x64.dll"))
(def-call-out PEA256EncryptArrayEx (:name "PEA256EncryptArrayEx")
(:arguments (handle c-pointer) (inbytes (c-ptr (c-array uchar 4)) :in :alloca) (outbytes (c-ptr (c-array uchar 4)) :in-out :alloca) (index uint32) (len uint32) (subkey uint32))
(:return-type uint32)
(:library "D:\\PEA256COM\\x64\\Release\\libpea256x64.dll"))
(def-call-out PEA256DecryptArrayEx (:name "PEA256DecryptArrayEx")
(:arguments (handle c-pointer) (inbytes (c-ptr (c-array uchar 4)) :in :alloca) (outbytes (c-ptr (c-array uchar 4)) :in-out :alloca) (index uint32) (len uint32) (subkey uint32))
(:return-type uint32)
(:library "D:\\PEA256COM\\x64\\Release\\libpea256x64.dll"))
(def-call-out PEA256EncryptBufferEx (:name "PEA256EncryptBufferEx")
(:arguments (handle c-pointer) (inbytes (c-ptr (c-array uchar 4)) :in :alloca) (in_index uint32) (outbytes (c-ptr (c-array uchar 4)) :in-out :alloca) (out_index uint32) (len uint32) (subkey uint32))
(:return-type uint32)
(:library "D:\\PEA256COM\\x64\\Release\\libpea256x64.dll"))
(def-call-out PEA256DecryptBufferEx (:name "PEA256DecryptBufferEx")
(:arguments (handle c-pointer) (inbytes (c-ptr (c-array uchar 4)) :in :alloca) (in_index uint32) (outbytes (c-ptr (c-array uchar 4)) :in-out :alloca) (out_index uint32) (len uint32) (subkey uint32))
(:return-type uint32)
(:library "D:\\PEA256COM\\x64\\Release\\libpea256x64.dll"))
(if (PEA256Init)
(progn
(format t"PEA256Init成功!!!~%")
(PEA256Test)
(setq version (PEA256Version))
(format t"subkey = ~08X~%" version)
(setq handle (PEA256Open))
(write handle)
(terpri)
(if nil(handle)
(progn
(setf Array (make-array 4 :initial-element 0 :element-type '(unsigned-byte 8)))
(setf ArrayEncrypt (make-array 4 :initial-element 0 :element-type '(unsigned-byte 8)))
(setf ArrayDecrypt (make-array 4 :initial-element 0 :element-type '(unsigned-byte 8)))
(dotimes (i (length Array))
(setf (aref Array i) i)
(setf (aref ArrayEncrypt i) i)
)
(setq subkey (PEA256EncryptUserKey handle "123" "" ""))
(format t"~%subkey = ~08X" subkey)
(setq subkey (PEA256EncryptBytes handle Array 4 subkey))
;(setq subkey (PEA256EncryptBytes handle Array 4 subkey))
;(setq subkey (PEA256EncryptBytes handle Array 4 subkey))
;(setq subkey (PEA256EncryptBytesEx handle ArrayEncrypt ArrayDecrypt 4 subkey))
;(setq subkey (PEA256EncryptArrayEx handle ArrayEncrypt ArrayDecrypt 0 4 subkey))
;(setq subkey (PEA256EncryptBufferEx handle ArrayEncrypt 0 ArrayDecrypt 0 4 subkey))
(format t"~%subkey = ~08X~%" subkey)
(write Array)
(terpri)
(dotimes (i (length Array))
(format t" ~02X" (aref Array i))
)
(setq subkey (PEA256EncryptBytes handle Array 4 subkey))
(setq subkey (PEA256DecryptUserKey handle "123" "" ""))
(format t"~%subkey = ~08X" subkey)
(setq subkey (PEA256DecryptBytes handle Array 4 subkey))
;(setq subkey (PEA256DecryptBytesEx handle ArrayDecrypt ArrayEncrypt 4 subkey))
;(setq subkey (PEA256DecryptArrayEx handle ArrayDecrypt ArrayEncrypt 0 4 subkey))
;(setq subkey (PEA256DecryptBufferEx handle ArrayDecrypt 0 ArrayEncrypt 0 4 subkey))
(format t"~%subkey = ~08X~%" subkey)
(write Array)
(terpri)
(dotimes (i (length Array))
(format t" ~02X" (aref Array i))
)
(setq subkey (PEA256EncryptUserKey handle "" "0123456789ABCDEF0123456789ABCDEF" ""))
(format t"~%subkey = ~08X" subkey)
(setq subkey (PEA256DecryptUserKey handle "" "0123456789ABCDEF0123456789ABCDEF" ""))
(format t"~%subkey = ~08X" subkey)
(setq subkey (PEA256EncryptUserKey handle "" "" "123.PEA.KEY"))
(format t"~%subkey = ~08X" subkey)
(setq subkey (PEA256DecryptUserKey handle "" "" "123.PEA.KEY"))
(format t"~%subkey = ~08X" subkey)
(setq subkey (PEA256EncryptUserKey handle "" "" "D:\\libpea256x64\\libpea256x64.dll"))
(format t"~%subkey = ~08X" subkey)
(setq subkey (PEA256DecryptUserKey handle "" "" "D:\\libpea256x64\\libpea256x64.dll"))
(format t"~%subkey = ~08X" subkey)
)
;(write "PEA256Open失败!!!")
)
(PEA256Close handle)
)
(format t"~%PEA256Init失败!!!")
)
(PEA256Error)
(format t"~%Hello World!!!")
|