+/* Macros for defining the PKCS APIs. Use these when you need to declare
+ PKCS API functions. */
+
+#define SILC_PKCS_GET_ALGORITHM(name) \
+ const SilcPKCSAlgorithm *name(const struct SilcPKCSObjectStruct *pkcs, \
+ void *public_key)
+
+#define SILC_PKCS_IMPORT_PUBLIC_KEY_FILE(name) \
+ SilcBool name(const struct SilcPKCSObjectStruct *pkcs, \
+ unsigned char *filedata, SilcUInt32 filedata_len, \
+ SilcPKCSFileEncoding encoding, void **ret_public_key, \
+ const struct SilcPKCSAlgorithmStruct **ret_alg)
+
+#define SILC_PKCS_IMPORT_PUBLIC_KEY(name) \
+ int name(const struct SilcPKCSObjectStruct *pkcs, \
+ const struct SilcPKCSAlgorithmStruct *alg, \
+ void *key, SilcUInt32 key_len, void **ret_public_key, \
+ const struct SilcPKCSAlgorithmStruct **ret_alg)
+
+#define SILC_PKCS_EXPORT_PUBLIC_KEY_FILE(name) \
+ unsigned char *name(const struct SilcPKCSObjectStruct *pkcs, \
+ SilcStack stack, void *public_key, \
+ SilcPKCSFileEncoding encoding, \
+ SilcUInt32 *ret_len)
+
+#define SILC_PKCS_EXPORT_PUBLIC_KEY(name) \
+ unsigned char *name(const struct SilcPKCSObjectStruct *pkcs, \
+ SilcStack stack, void *public_key, SilcUInt32 *ret_len)
+
+#define SILC_PKCS_PUBLIC_KEY_BITLEN(name) \
+ SilcUInt32 name(const struct SilcPKCSObjectStruct *pkcs, \
+ void *public_key)
+
+#define SILC_PKCS_PUBLIC_KEY_COPY(name) \
+ void *name(const struct SilcPKCSObjectStruct *pkcs, void *public_key)
+
+#define SILC_PKCS_PUBLIC_KEY_COMPARE(name) \
+ SilcBool name(const struct SilcPKCSObjectStruct *pkcs, \
+ void *key1, void *key2)
+
+#define SILC_PKCS_PUBLIC_KEY_FREE(name) \
+ void name(const struct SilcPKCSObjectStruct *pkcs, void *public_key)
+
+#define SILC_PKCS_IMPORT_PRIVATE_KEY_FILE(name) \
+ SilcBool name(const struct SilcPKCSObjectStruct *pkcs, \
+ unsigned char *filedata, SilcUInt32 filedata_len, \
+ const char *passphrase, SilcUInt32 passphrase_len, \
+ SilcPKCSFileEncoding encoding, void **ret_private_key, \
+ const struct SilcPKCSAlgorithmStruct **ret_alg)
+
+#define SILC_PKCS_IMPORT_PRIVATE_KEY(name) \
+ int name(const struct SilcPKCSObjectStruct *pkcs, \
+ const struct SilcPKCSAlgorithmStruct *alg, \
+ void *key, SilcUInt32 key_len, void **ret_private_key, \
+ const struct SilcPKCSAlgorithmStruct **ret_alg)
+
+#define SILC_PKCS_EXPORT_PRIVATE_KEY_FILE(name) \
+ unsigned char *name(const struct SilcPKCSObjectStruct *pkcs, \
+ SilcStack stack, void *private_key, \
+ const char *passphrase, SilcUInt32 passphrase_len, \
+ SilcPKCSFileEncoding encoding, SilcRng rng, \
+ SilcUInt32 *ret_len)
+
+#define SILC_PKCS_EXPORT_PRIVATE_KEY(name) \
+ unsigned char *name(const struct SilcPKCSObjectStruct *pkcs, \
+ SilcStack stack, void *private_key, SilcUInt32 *ret_len)
+
+#define SILC_PKCS_PRIVATE_KEY_BITLEN(name) \
+ SilcUInt32 name(const struct SilcPKCSObjectStruct *pkcs, void *private_key)
+
+#define SILC_PKCS_PRIVATE_KEY_FREE(name) \
+ void name(const struct SilcPKCSObjectStruct *pkcs, void *private_key)
+
+#define SILC_PKCS_ENCRYPT(name) \
+ SilcAsyncOperation name(const struct SilcPKCSObjectStruct *pkcs, \
+ void *public_key, \
+ unsigned char *src, \
+ SilcUInt32 src_len, \
+ SilcRng rng, \
+ SilcPKCSEncryptCb encrypt_cb, \
+ void *context)
+
+#define SILC_PKCS_DECRYPT(name) \
+ SilcAsyncOperation name(const struct SilcPKCSObjectStruct *pkcs, \
+ void *private_key, \
+ unsigned char *src, \
+ SilcUInt32 src_len, \
+ SilcPKCSDecryptCb decrypt_cb, \
+ void *context)
+
+#define SILC_PKCS_SIGN(name) \
+ SilcAsyncOperation name(const struct SilcPKCSObjectStruct *pkcs, \
+ void *private_key, \
+ unsigned char *src, \
+ SilcUInt32 src_len, \
+ SilcBool compute_hash, \
+ SilcHash hash, \
+ SilcRng rng, \
+ SilcPKCSSignCb sign_cb, \
+ void *context)
+
+#define SILC_PKCS_VERIFY(name) \
+ SilcAsyncOperation name(const struct SilcPKCSObjectStruct *pkcs, \
+ void *public_key, \
+ unsigned char *signature, \
+ SilcUInt32 signature_len, \
+ unsigned char *data, \
+ SilcUInt32 data_len, \
+ SilcHash hash, \
+ SilcRng rng, \
+ SilcPKCSVerifyCb verify_cb, \
+ void *context)
+