use crate::native::types::{
BlockCipherParam, ECCCipherBlob, ECCPrivateKeyBlob, ECCPublicKeyBlob, ECCSignatureBlob,
EnvelopedKeyBlob, BOOL, BYTE, HANDLE, ULONG,
};
#[allow(non_camel_case_types)]
extern "C" {
pub fn SKF_GenRandom(device_handle: HANDLE, data: *mut BYTE, len: ULONG) -> ULONG;
pub fn SKF_CloseHandle(key_handle: HANDLE) -> ULONG;
pub fn SKF_SetSymmKey(
device_handle: HANDLE,
key_data: *const BYTE,
alg_id: ULONG,
key_handle: *mut HANDLE,
) -> ULONG;
pub fn SKF_EncryptInit(key_handle: HANDLE, encrypt_param: BlockCipherParam) -> ULONG;
pub fn SKF_Encrypt(
key_handle: HANDLE,
data: *const BYTE,
data_len: ULONG,
encrypted_data: *mut BYTE,
encrypted_len: *mut ULONG,
) -> ULONG;
pub fn SKF_EncryptUpdate(
key_handle: HANDLE,
data: *const BYTE,
data_len: ULONG,
encrypted_data: *mut BYTE,
encrypted_len: *mut ULONG,
) -> ULONG;
pub fn SKF_EncryptFinal(key_handle: HANDLE, data: *mut BYTE, data_len: *mut ULONG) -> ULONG;
pub fn SKF_DecryptInit(key_handle: HANDLE, decrypt_param: BlockCipherParam) -> ULONG;
pub fn SKF_Decrypt(
key_handle: HANDLE,
encrypted_data: *const BYTE,
encrypted_len: ULONG,
data: *mut BYTE,
data_len: *mut ULONG,
) -> ULONG;
pub fn SKF_DecryptUpdate(
key_handle: HANDLE,
encrypted_data: *const BYTE,
encrypted_len: ULONG,
data: *mut BYTE,
data_len: *mut ULONG,
) -> ULONG;
pub fn SKF_DecryptFinal(
key_handle: HANDLE,
decrypted_data: *mut BYTE,
decrypted_data_len: *mut ULONG,
) -> ULONG;
pub fn SKF_ExtECCEncrypt(
device_handle: HANDLE,
key_blob: *const ECCPublicKeyBlob,
data: *const BYTE,
data_len: ULONG,
cipher_blob: *mut ECCCipherBlob,
) -> ULONG;
pub fn SKF_ExtECCDecrypt(
device_handle: HANDLE,
key_blob: *const ECCPrivateKeyBlob,
cipher_blob: *const ECCCipherBlob,
data: *mut BYTE,
data_len: *mut ULONG,
) -> ULONG;
pub fn SKF_ExtECCSign(
device_handle: HANDLE,
key_blob: *const ECCPrivateKeyBlob,
data: *const BYTE,
data_len: ULONG,
signature: *mut ECCSignatureBlob,
) -> ULONG;
pub fn SKF_ExtECCVerify(
device_handle: HANDLE,
key_blob: *const ECCPublicKeyBlob,
data: *const BYTE,
data_len: ULONG,
signature: *const ECCSignatureBlob,
) -> ULONG;
pub fn SKF_ECCVerify(
device_handle: HANDLE,
key_blob: *const ECCPublicKeyBlob,
data: *const BYTE,
data_len: ULONG,
signature: *const ECCSignatureBlob,
) -> ULONG;
pub fn SKF_ECCExportSessionKey(
ct_handle: HANDLE,
alg_id: ULONG,
key_blob: *const ECCPublicKeyBlob,
cipher_blob: *mut ECCCipherBlob,
session_key: *mut HANDLE,
) -> ULONG;
pub fn SKF_GenECCKeyPair(
ct_handle: HANDLE,
alg_id: ULONG,
key_blob: *mut ECCPublicKeyBlob,
) -> ULONG;
pub fn SKF_ImportECCKeyPair(ct_handle: HANDLE, key_blob: *const EnvelopedKeyBlob) -> ULONG;
pub fn SKF_ExportPublicKey(
ct_handle: HANDLE,
sign_flag: BOOL,
data: *mut BYTE,
data_len: *mut ULONG,
) -> ULONG;
pub fn SKF_ECCSignData(
ct_handle: HANDLE,
data: *const BYTE,
data_len: ULONG,
signature: *mut ECCSignatureBlob,
) -> ULONG;
pub fn SKF_GenerateAgreementDataWithECC(
ct_handle: HANDLE,
alg_id: ULONG,
key_blob: *mut ECCPublicKeyBlob,
id_data: *const BYTE,
id_len: ULONG,
key_handle: *mut HANDLE,
) -> ULONG;
pub fn SKF_GenerateAgreementDataAndKeyWithECC(
ct_handle: HANDLE,
alg_id: ULONG,
sponsor_key: *const ECCPublicKeyBlob,
sponsor_tmp_key: *const ECCPublicKeyBlob,
tmp_key: *mut ECCPublicKeyBlob,
id: *const BYTE,
id_len: ULONG,
sponsor_id: *const BYTE,
sponsor_id_len: ULONG,
key_handle: *mut HANDLE,
) -> ULONG;
pub fn SKF_ImportSessionKey(
ct_handle: HANDLE,
alg_id: ULONG,
data: *const BYTE,
data_len: ULONG,
key_handle: *mut HANDLE,
) -> ULONG;
pub fn SKF_GenerateKeyWithECC(
agreement_key: HANDLE,
key_blob: *const ECCPublicKeyBlob,
tmp_key_blob: *const ECCPublicKeyBlob,
id: *const BYTE,
id_len: ULONG,
key_handle: *mut HANDLE,
) -> ULONG;
}