summaryrefslogtreecommitdiff
path: root/libdigidoc/DigiDocPKCS11.h
diff options
context:
space:
mode:
Diffstat (limited to 'libdigidoc/DigiDocPKCS11.h')
-rw-r--r--libdigidoc/DigiDocPKCS11.h86
1 files changed, 86 insertions, 0 deletions
diff --git a/libdigidoc/DigiDocPKCS11.h b/libdigidoc/DigiDocPKCS11.h
new file mode 100644
index 0000000..5491e76
--- /dev/null
+++ b/libdigidoc/DigiDocPKCS11.h
@@ -0,0 +1,86 @@
+#ifndef __DIGI_DOC_PKCS11_H__
+#define __DIGI_DOC_PKCS11_H__
+//==================================================
+// FILE: DigiDocPKCS11.h
+// PROJECT: Digi Doc
+// DESCRIPTION: Digi Doc functions for signing using PKCS#11 API
+// AUTHOR: Veiko Sinivee, S|E|B IT Partner Estonia
+//==================================================
+// Copyright (C) AS Sertifitseerimiskeskus
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+// GNU Lesser General Public Licence is available at
+// http://www.gnu.org/copyleft/lesser.html
+//==========< HISTORY >=============================
+// 13.01.2004 Veiko Sinivee
+// Creation
+//==================================================
+
+#include <libdigidoc/DigiDocDefs.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef WIN32
+ #include <windows.h>
+ #define LIBHANDLE HANDLE
+ #include "pkcs11/cryptoki.h"
+#else
+ #include <dlfcn.h> // Linux .so loading interface
+ #define LIBHANDLE void*
+ #include "pkcs11/pkcs11.h"
+#endif
+
+
+
+#include <libdigidoc/DigiDocLib.h>
+#include <openssl/ocsp.h>
+
+
+EXP_OPTION LIBHANDLE initPKCS11Library(const char* libName);
+EXP_OPTION void closePKCS11Library(LIBHANDLE pLibrary, CK_SESSION_HANDLE hSession);
+EXP_OPTION int calculateSignatureWithEstID(SignedDoc* pSigDoc, SignatureInfo* pSigInfo,
+ int slot, const char* passwd);
+
+EXP_OPTION CK_RV GetSlotIds(CK_SLOT_ID_PTR pSlotids, CK_ULONG_PTR pLen);
+EXP_OPTION CK_RV GetTokenInfo(CK_TOKEN_INFO_PTR pTokInfo, CK_SLOT_ID id);
+int loadAndTestDriver(const char* driver, LIBHANDLE* pLibrary, CK_SLOT_ID* slotids,
+ int slots, CK_ULONG slot);
+EXP_OPTION CK_RV getDriverInfo(CK_INFO_PTR pInfo);
+EXP_OPTION CK_RV GetSlotInfo(CK_SLOT_INFO_PTR pSlotInfo, CK_SLOT_ID id);
+
+//============================================================
+// Decrypts RSA encrypted data with the private key
+// slot - number of the slot for decryption key. On ID card allways 0
+// pin - corresponding pin for the key. On ID card - PIN1
+// encData - encrypted data
+// encLen - length of encrypted data
+// decData - buffer for decrypted data
+// encLen - length of buffer. Will be modified by amount of decrypted data
+// return error code or ERR_OK
+//============================================================
+EXP_OPTION int decryptWithEstID(int slot, const char* pin,
+ const char* encData, int encLen,
+ char* decData, int *decLen);
+
+//============================================================
+// Locates and reads users certificate from smartcard
+// slot - number of the slot for decryption key. On ID card allways 0
+// ppCert - address for newly allocated certificate pointer
+// return error code or ERR_OK
+//============================================================
+EXP_OPTION int findUsersCertificate(int slot, X509** ppCert);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // __DIGI_DOC_PKCS11_H__
+