#include "commonheaders.h" int __cdecl cpp_get_features(HANDLE context) { pCNTX ptr = get_context_on_id(context); if (!ptr) return 0; return ptr->features; } int __cdecl cpp_get_error(HANDLE context) { pCNTX ptr = get_context_on_id(context); if (!ptr) return 0; return ptr->error; } int __cdecl cpp_get_version(void) { return PLUGIN_MAKE_VERSION(__MAJOR_VERSION, __MINOR_VERSION, __RELEASE_NUM, __BUILD_NUM); } BOOL cpp_get_simdata(HANDLE context, pCNTX *ptr, pSIMDATA *p) { if (!ptr) return 0; *ptr = get_context_on_id(context); if (!*ptr || (*ptr)->mode&(MODE_PGP | MODE_GPG | MODE_RSA)) return FALSE; *p = (pSIMDATA)cpp_alloc_pdata(*ptr); return TRUE; } int __cdecl cpp_size_keyx(void) { return(Tiger::DIGESTSIZE + 2); } void __cdecl cpp_get_keyx(HANDLE context, uint8_t *key) { pCNTX ptr; pSIMDATA p; if (!cpp_get_simdata(context, &ptr, &p)) return; memcpy(key, p->KeyX, Tiger::DIGESTSIZE); memcpy(key + Tiger::DIGESTSIZE, &ptr->features, 2); } void __cdecl cpp_set_keyx(HANDLE context, uint8_t *key) { pCNTX ptr; pSIMDATA p; if (!cpp_get_simdata(context, &ptr, &p)) return; SAFE_FREE(p->PubA); SAFE_FREE(p->KeyA); mir_free(p->KeyB); p->KeyB = nullptr; SAFE_FREE(p->KeyX); p->KeyX = (uint8_t*)malloc(Tiger::DIGESTSIZE + 2); memcpy(p->KeyX, key, Tiger::DIGESTSIZE); memcpy(&ptr->features, key + Tiger::DIGESTSIZE, 2); } void __cdecl cpp_get_keyp(HANDLE context, uint8_t *key) { pCNTX ptr; pSIMDATA p; if (!cpp_get_simdata(context, &ptr, &p)) return; memcpy(key, p->KeyP, Tiger::DIGESTSIZE); } int __cdecl cpp_size_keyp(void) { return(Tiger::DIGESTSIZE); } void __cdecl cpp_set_keyp(HANDLE context, uint8_t *key) { pCNTX ptr; pSIMDATA p; if (!cpp_get_simdata(context, &ptr, &p)) return; SAFE_FREE(p->KeyP); p->KeyP = (uint8_t*)malloc(Tiger::DIGESTSIZE); memcpy(p->KeyP, key, Tiger::DIGESTSIZE); } int __cdecl cpp_keya(HANDLE context) { pCNTX ptr; pSIMDATA p; if (!cpp_get_simdata(context, &ptr, &p)) return 0; return p->KeyA != nullptr; } int __cdecl cpp_keyb(HANDLE context) { pCNTX ptr; pSIMDATA p; if (!cpp_get_simdata(context, &ptr, &p)) return 0; return p->KeyB != nullptr; } int __cdecl cpp_keyx(HANDLE context) { pCNTX ptr; pSIMDATA p; if (!cpp_get_simdata(context, &ptr, &p)) return 0; return p->KeyX != nullptr; } int __cdecl cpp_keyp(HANDLE context) { pCNTX ptr; pSIMDATA p; if (!cpp_get_simdata(context, &ptr, &p)) return 0; return p->KeyP != nullptr; }