import 'dart:io';
import 'package:ffi/ffi.dart';
import 'dart:ffi' as ffi;
typedef ffi_fn_FSP256Init = ffi.Bool Function();
typedef fn_FSP256Init = bool Function();
typedef ffi_fn_FSP256Open = ffi.Pointer Function();
typedef fn_FSP256Open = ffi.Pointer Function();
typedef ffi_fn_FSP256Close = ffi.Void Function(ffi.Pointer);
typedef fn_FSP256Close = void Function(ffi.Pointer);
typedef ffi_fn_FSP256EncryptUserKey = ffi.Uint32 Function(
ffi.Pointer, ffi.Pointer<Utf8>, ffi.Pointer<Utf8>, ffi.Pointer<Utf8>);
typedef fn_FSP256EncryptUserKey = int Function(
ffi.Pointer, ffi.Pointer<Utf8>, ffi.Pointer<Utf8>, ffi.Pointer<Utf8>);
typedef ffi_fn_FSP256DecryptUserKey = ffi.Uint32 Function(
ffi.Pointer, ffi.Pointer<Utf8>, ffi.Pointer<Utf8>, ffi.Pointer<Utf8>);
typedef fn_FSP256DecryptUserKey = int Function(
ffi.Pointer, ffi.Pointer<Utf8>, ffi.Pointer<Utf8>, ffi.Pointer<Utf8>);
typedef ffi_fn_FSP256EncryptBytes = ffi.Uint32 Function(
ffi.Pointer, ffi.Pointer<ffi.Uint8>, ffi.Uint32, ffi.Uint32);
typedef fn_FSP256EncryptBytes = int Function(
ffi.Pointer, ffi.Pointer<ffi.Uint8>, int, int);
typedef ffi_fn_FSP256DecryptBytes = ffi.Uint32 Function(
ffi.Pointer, ffi.Pointer<ffi.Uint8>, ffi.Uint32, ffi.Uint32);
typedef fn_FSP256DecryptBytes = int Function(
ffi.Pointer, ffi.Pointer<ffi.Uint8>, int, int);
typedef ffi_fn_FSP256EncryptBytesEx = ffi.Uint32 Function(ffi.Pointer,
ffi.Pointer<ffi.Uint8>, ffi.Pointer<ffi.Uint8>, ffi.Uint32, ffi.Uint32);
typedef fn_FSP256EncryptBytesEx = int Function(
ffi.Pointer, ffi.Pointer<ffi.Uint8>, ffi.Pointer<ffi.Uint8>, int, int);
typedef ffi_fn_FSP256DecryptBytesEx = ffi.Uint32 Function(ffi.Pointer,
ffi.Pointer<ffi.Uint8>, ffi.Pointer<ffi.Uint8>, ffi.Uint32, ffi.Uint32);
typedef fn_FSP256DecryptBytesEx = int Function(
ffi.Pointer, ffi.Pointer<ffi.Uint8>, ffi.Pointer<ffi.Uint8>, int, int);
typedef ffi_fn_FSP256EncryptArrayEx = ffi.Uint32 Function(
ffi.Pointer,
ffi.Pointer<ffi.Uint8>,
ffi.Pointer<ffi.Uint8>,
ffi.Uint32,
ffi.Uint32,
ffi.Uint32);
typedef fn_FSP256EncryptArrayEx = int Function(
ffi.Pointer, ffi.Pointer<ffi.Uint8>, ffi.Pointer<ffi.Uint8>, int, int, int);
typedef ffi_fn_FSP256DecryptArrayEx = ffi.Uint32 Function(
ffi.Pointer,
ffi.Pointer<ffi.Uint8>,
ffi.Pointer<ffi.Uint8>,
ffi.Uint32,
ffi.Uint32,
ffi.Uint32);
typedef fn_FSP256DecryptArrayEx = int Function(
ffi.Pointer, ffi.Pointer<ffi.Uint8>, ffi.Pointer<ffi.Uint8>, int, int, int);
typedef ffi_fn_FSP256EncryptBufferEx = ffi.Uint32 Function(
ffi.Pointer,
ffi.Pointer<ffi.Uint8>,
ffi.Uint32,
ffi.Pointer<ffi.Uint8>,
ffi.Uint32,
ffi.Uint32,
ffi.Uint32);
typedef fn_FSP256EncryptBufferEx = int Function(ffi.Pointer,
ffi.Pointer<ffi.Uint8>, int, ffi.Pointer<ffi.Uint8>, int, int, int);
typedef ffi_fn_FSP256DecryptBufferEx = ffi.Uint32 Function(
ffi.Pointer,
ffi.Pointer<ffi.Uint8>,
ffi.Uint32,
ffi.Pointer<ffi.Uint8>,
ffi.Uint32,
ffi.Uint32,
ffi.Uint32);
typedef fn_FSP256DecryptBufferEx = int Function(ffi.Pointer,
ffi.Pointer<ffi.Uint8>, int, ffi.Pointer<ffi.Uint8>, int, int, int);
typedef ffi_fn_FSP256Test = ffi.Bool Function();
typedef fn_FSP256Test = bool Function();
typedef ffi_fn_FSP256Error = ffi.Int32 Function();
typedef fn_FSP256Error = int Function();
typedef ffi_fn_FSP256Version = ffi.Uint32 Function();
typedef fn_FSP256Version = int Function();
void main() {
final dylib = ffi.DynamicLibrary.open("D:\\libfsp256x64\\libfsp256x64.dll");
// final dylib = ffi.DynamicLibrary.open("D:\\FSP256COM\\x64\\Release\\libfsp256x64.dll");
if (dylib != 0) {
final fn_FSP256Init FSP256Init = dylib
.lookup<ffi.NativeFunction<ffi_fn_FSP256Init>>('FSP256Init')
.asFunction();
final fn_FSP256Open FSP256Open = dylib
.lookup<ffi.NativeFunction<ffi_fn_FSP256Open>>('FSP256Open')
.asFunction();
final fn_FSP256Close FSP256Close = dylib
.lookup<ffi.NativeFunction<ffi_fn_FSP256Close>>('FSP256Close')
.asFunction();
final fn_FSP256EncryptUserKey FSP256EncryptUserKey = dylib
.lookup<ffi.NativeFunction<ffi_fn_FSP256EncryptUserKey>>(
'FSP256EncryptUserKey')
.asFunction();
final fn_FSP256DecryptUserKey FSP256DecryptUserKey = dylib
.lookup<ffi.NativeFunction<ffi_fn_FSP256DecryptUserKey>>(
'FSP256DecryptUserKey')
.asFunction();
final fn_FSP256EncryptBytes FSP256EncryptBytes = dylib
.lookup<ffi.NativeFunction<ffi_fn_FSP256EncryptBytes>>(
'FSP256EncryptBytes')
.asFunction();
final fn_FSP256DecryptBytes FSP256DecryptBytes = dylib
.lookup<ffi.NativeFunction<ffi_fn_FSP256DecryptBytes>>(
'FSP256DecryptBytes')
.asFunction();
final fn_FSP256EncryptBytesEx FSP256EncryptBytesEx = dylib
.lookup<ffi.NativeFunction<ffi_fn_FSP256EncryptBytesEx>>(
'FSP256EncryptBytesEx')
.asFunction();
final fn_FSP256DecryptBytesEx FSP256DecryptBytesEx = dylib
.lookup<ffi.NativeFunction<ffi_fn_FSP256DecryptBytesEx>>(
'FSP256DecryptBytesEx')
.asFunction();
final fn_FSP256EncryptArrayEx FSP256EncryptArrayEx = dylib
.lookup<ffi.NativeFunction<ffi_fn_FSP256EncryptArrayEx>>(
'FSP256EncryptArrayEx')
.asFunction();
final fn_FSP256DecryptArrayEx FSP256DecryptArrayEx = dylib
.lookup<ffi.NativeFunction<ffi_fn_FSP256DecryptArrayEx>>(
'FSP256DecryptArrayEx')
.asFunction();
final fn_FSP256EncryptBufferEx FSP256EncryptBufferEx = dylib
.lookup<ffi.NativeFunction<ffi_fn_FSP256EncryptBufferEx>>(
'FSP256EncryptBufferEx')
.asFunction();
final fn_FSP256DecryptBufferEx FSP256DecryptBufferEx = dylib
.lookup<ffi.NativeFunction<ffi_fn_FSP256DecryptBufferEx>>(
'FSP256DecryptBufferEx')
.asFunction();
final fn_FSP256Test FSP256Test = dylib
.lookup<ffi.NativeFunction<ffi_fn_FSP256Test>>('FSP256Test')
.asFunction();
final fn_FSP256Error FSP256Error = dylib
.lookup<ffi.NativeFunction<ffi_fn_FSP256Error>>('FSP256Error')
.asFunction();
final fn_FSP256Version FSP256Version = dylib
.lookup<ffi.NativeFunction<ffi_fn_FSP256Version>>('FSP256Version')
.asFunction();
if (FSP256Init()) {
FSP256Test();
print(
"FSP256Version = ${FSP256Version().toRadixString(16).toUpperCase()}");
var handle = FSP256Open();
if (handle != 0) {
print("FSP256Open()成功!!!");
ffi.Pointer<ffi.Uint8> Array = malloc.allocate<ffi.Uint8>(4);
ffi.Pointer<ffi.Uint8> ArrayEncrypt = malloc.allocate<ffi.Uint8>(4);
ffi.Pointer<ffi.Uint8> ArrayDecrypt = malloc.allocate<ffi.Uint8>(4);
for (var i = 0; i < 4; i++) {
Array[i] = i;
ArrayEncrypt[i] = i;
}
var subkey = FSP256EncryptUserKey(
handle, "123".toNativeUtf8(), "".toNativeUtf8(), "".toNativeUtf8());
print("subkey0 = 0x${subkey.toRadixString(16).toUpperCase()}");
FSP256EncryptBytes(handle, Array, 4, subkey);
for (var i = 0; i < 4; i++) {
stdout.write(" ${Array[i].toRadixString(16).toUpperCase()}");
}
print("");
subkey = FSP256DecryptUserKey(
handle, "123".toNativeUtf8(), "".toNativeUtf8(), "".toNativeUtf8());
print("subkey0 = 0x${subkey.toRadixString(16).toUpperCase()}");
FSP256DecryptBytes(handle, Array, 4, subkey);
for (var i = 0; i < 4; i++) {
stdout.write(" ${Array[i].toRadixString(16).toUpperCase()}");
}
print("");
FSP256Error();
subkey = FSP256EncryptUserKey(
handle,
"".toNativeUtf8(),
"0123456789ABCDEF0123456789ABCDEF".toNativeUtf8(),
"".toNativeUtf8());
print("subkey1 = 0x${subkey.toRadixString(16).toUpperCase()}");
FSP256EncryptBytesEx(handle, ArrayEncrypt, ArrayDecrypt, 4, subkey);
for (var i = 0; i < 4; i++) {
stdout.write(" ${ArrayDecrypt[i].toRadixString(16).toUpperCase()}");
}
print("");
subkey = FSP256DecryptUserKey(
handle,
"".toNativeUtf8(),
"0123456789ABCDEF0123456789ABCDEF".toNativeUtf8(),
"".toNativeUtf8());
print("subkey1 = 0x${subkey.toRadixString(16).toUpperCase()}");
FSP256DecryptBytesEx(handle, ArrayDecrypt, ArrayEncrypt, 4, subkey);
for (var i = 0; i < 4; i++) {
stdout.write(" ${ArrayEncrypt[i].toRadixString(16).toUpperCase()}");
}
print("");
subkey = FSP256EncryptUserKey(handle, "".toNativeUtf8(),
"".toNativeUtf8(), "123.FSP.KEY".toNativeUtf8());
print("subkey2 = 0x${subkey.toRadixString(16).toUpperCase()}");
FSP256EncryptArrayEx(handle, ArrayEncrypt, ArrayDecrypt, 0, 4, subkey);
for (var i = 0; i < 4; i++) {
stdout.write(" ${ArrayDecrypt[i].toRadixString(16).toUpperCase()}");
}
print("");
subkey = FSP256DecryptUserKey(handle, "".toNativeUtf8(),
"".toNativeUtf8(), "123.FSP.KEY".toNativeUtf8());
print("subkey2 = 0x${subkey.toRadixString(16).toUpperCase()}");
FSP256DecryptArrayEx(handle, ArrayDecrypt, ArrayEncrypt, 0, 4, subkey);
for (var i = 0; i < 4; i++) {
stdout.write(" ${ArrayEncrypt[i].toRadixString(16).toUpperCase()}");
}
print("");
subkey = PEA256EncryptUserKey(
handle,
"".toNativeUtf8(),
"".toNativeUtf8(),
"D:\\libpea256x64\\libpea256x64.dll".toNativeUtf8());
print("subkey3 = 0x${subkey.toRadixString(16).toUpperCase()}");
PEA256EncryptBufferEx(
handle, ArrayEncrypt, 0, ArrayDecrypt, 0, 4, subkey);
for (var i = 0; i < 4; i++) {
stdout.write(" ${ArrayDecrypt[i].toRadixString(16).toUpperCase()}");
}
print("");
subkey = PEA256DecryptUserKey(
handle,
"".toNativeUtf8(),
"".toNativeUtf8(),
"D:\\libpea256x64\\libpea256x64.dll".toNativeUtf8());
print("subkey3 = 0x${subkey.toRadixString(16).toUpperCase()}");
PEA256DecryptBufferEx(
handle, ArrayDecrypt, 0, ArrayEncrypt, 0, 4, subkey);
for (var i = 0; i < 4; i++) {
stdout.write(" ${ArrayEncrypt[i].toRadixString(16).toUpperCase()}");
}
print("");
malloc.free(Array);
malloc.free(ArrayEncrypt);
malloc.free(ArrayDecrypt);
PEA256Close(handle);
} else {
print("PEA256Open()失败!!!");
}
} else {
print("PEA256Init()失败!!!");
}
PEA256Error();
} else {
print("Library()失败!!!");
}
print("Hello World!!!");
}