silc_free(privkey);
return FALSE;
}
- (*ret_public_key)->pkcs = pkcs;
+ (*ret_public_key)->pkcs = (SilcPKCSObject *)pkcs;
+ (*ret_public_key)->alg = alg;
(*ret_public_key)->public_key = pubkey;
/* Allocate private key */
silc_free(*ret_public_key);
return FALSE;
}
- (*ret_private_key)->pkcs = pkcs;
+ (*ret_private_key)->pkcs = (SilcPKCSObject *)pkcs;
+ (*ret_private_key)->alg = alg;
(*ret_private_key)->private_key = privkey;
/* Generate the algorithm key pair */
/* Returns PKCS algorithm context */
-const SilcPKCSAlgorithm *
-silc_pkcs_silc_get_algorithm(const struct SilcPKCSObjectStruct *pkcs,
- void *public_key)
+SILC_PKCS_GET_ALGORITHM(silc_pkcs_silc_get_algorithm)
{
SilcSILCPublicKey silc_pubkey = public_key;
return silc_pubkey->pkcs;
/* Imports SILC protocol style public key from SILC public key file */
-SilcBool
-silc_pkcs_silc_import_public_key_file(const struct SilcPKCSObjectStruct *pkcs,
- unsigned char *filedata,
- SilcUInt32 filedata_len,
- SilcPKCSFileEncoding encoding,
- void **ret_public_key)
+SILC_PKCS_IMPORT_PUBLIC_KEY_FILE(silc_pkcs_silc_import_public_key_file)
{
SilcUInt32 i, len;
unsigned char *data = NULL;
}
ret = silc_pkcs_silc_import_public_key(pkcs, filedata, filedata_len,
- ret_public_key);
+ ret_public_key, ret_alg);
silc_free(data);
return ret ? TRUE : FALSE;
/* Imports SILC protocol style public key */
-int silc_pkcs_silc_import_public_key(const struct SilcPKCSObjectStruct *pkcs,
- void *key,
- SilcUInt32 key_len,
- void **ret_public_key)
+SILC_PKCS_IMPORT_PUBLIC_KEY(silc_pkcs_silc_import_public_key)
{
const SilcPKCSAlgorithm *alg;
SilcBufferStruct buf, alg_key;
silc_asn1_free(asn1);
*ret_public_key = silc_pubkey;
+ *ret_alg = alg;
return key_len;
/* Exports public key as SILC protocol style public key file */
-unsigned char *
-silc_pkcs_silc_export_public_key_file(const struct SilcPKCSObjectStruct *pkcs,
- SilcStack stack,
- void *public_key,
- SilcPKCSFileEncoding encoding,
- SilcUInt32 *ret_len)
+SILC_PKCS_EXPORT_PUBLIC_KEY_FILE(silc_pkcs_silc_export_public_key_file)
{
SilcBuffer buf;
unsigned char *key, *data;
/* Exports public key as SILC protocol style public key */
-unsigned char *
-silc_pkcs_silc_export_public_key(const struct SilcPKCSObjectStruct *pkcs,
- SilcStack stack,
- void *public_key,
- SilcUInt32 *ret_len)
+SILC_PKCS_EXPORT_PUBLIC_KEY(silc_pkcs_silc_export_public_key)
{
SilcSILCPublicKey silc_pubkey = public_key;
const SilcPKCSAlgorithm *alg = silc_pubkey->pkcs;
/* Return key length */
-SilcUInt32
-silc_pkcs_silc_public_key_bitlen(const struct SilcPKCSObjectStruct *pkcs,
- void *public_key)
+SILC_PKCS_PUBLIC_KEY_BITLEN(silc_pkcs_silc_public_key_bitlen)
{
SilcSILCPublicKey silc_pubkey = public_key;
return silc_pubkey->pkcs->public_key_bitlen(silc_pubkey->pkcs,
/* Copy public key */
-void *silc_pkcs_silc_public_key_copy(const struct SilcPKCSObjectStruct *pkcs,
- void *public_key)
+SILC_PKCS_PUBLIC_KEY_COPY(silc_pkcs_silc_public_key_copy)
{
SilcSILCPublicKey silc_pubkey = public_key, new_pubkey;
SilcPublicKeyIdentifier ident = &silc_pubkey->identifier;
/* Compares public keys */
-SilcBool
-silc_pkcs_silc_public_key_compare(const struct SilcPKCSObjectStruct *pkcs,
- void *key1, void *key2)
+SILC_PKCS_PUBLIC_KEY_COMPARE(silc_pkcs_silc_public_key_compare)
{
SilcSILCPublicKey k1 = key1, k2 = key2;
/* Frees public key */
-void silc_pkcs_silc_public_key_free(const struct SilcPKCSObjectStruct *pkcs,
- void *public_key)
+SILC_PKCS_PUBLIC_KEY_FREE(silc_pkcs_silc_public_key_free)
{
SilcSILCPublicKey silc_pubkey = public_key;
/* Imports SILC implementation style private key file */
-SilcBool
-silc_pkcs_silc_import_private_key_file(const struct SilcPKCSObjectStruct *pkcs,
- unsigned char *filedata,
- SilcUInt32 filedata_len,
- const char *passphrase,
- SilcUInt32 passphrase_len,
- SilcPKCSFileEncoding encoding,
- void **ret_private_key)
+SILC_PKCS_IMPORT_PRIVATE_KEY_FILE(silc_pkcs_silc_import_private_key_file)
{
SilcCipher aes;
SilcHash sha1;
silc_cipher_free(aes);
/* Import the private key */
- ret = silc_pkcs_silc_import_private_key(pkcs, filedata, len, ret_private_key);
+ ret = silc_pkcs_silc_import_private_key(pkcs, filedata, len, ret_private_key,
+ ret_alg);
silc_free(data);
/* Imports SILC implementation style private key */
-int silc_pkcs_silc_import_private_key(const struct SilcPKCSObjectStruct *pkcs,
- void *key,
- SilcUInt32 key_len,
- void **ret_private_key)
+SILC_PKCS_IMPORT_PRIVATE_KEY(silc_pkcs_silc_import_private_key)
{
SilcBufferStruct buf;
const SilcPKCSAlgorithm *alg;
silc_asn1_free(asn1);
*ret_private_key = silc_privkey;
+ *ret_alg = alg;
return key_len;
/* Exports private key as SILC implementation style private key file */
-unsigned char *
-silc_pkcs_silc_export_private_key_file(const struct SilcPKCSObjectStruct *pkcs,
- SilcStack stack,
- void *private_key,
- const char *passphrase,
- SilcUInt32 passphrase_len,
- SilcPKCSFileEncoding encoding,
- SilcRng rng,
- SilcUInt32 *ret_len)
+SILC_PKCS_EXPORT_PRIVATE_KEY_FILE(silc_pkcs_silc_export_private_key_file)
{
SilcCipher aes;
SilcHash sha1;
/* Exports private key as SILC implementation style private key */
-unsigned char *
-silc_pkcs_silc_export_private_key(const struct SilcPKCSObjectStruct *pkcs,
- SilcStack stack,
- void *private_key,
- SilcUInt32 *ret_len)
+SILC_PKCS_EXPORT_PRIVATE_KEY(silc_pkcs_silc_export_private_key)
{
SilcSILCPrivateKey silc_privkey = private_key;
const SilcPKCSAlgorithm *alg = silc_privkey->pkcs;
/* Return key length */
-SilcUInt32
-silc_pkcs_silc_private_key_bitlen(const struct SilcPKCSObjectStruct *pkcs,
- void *private_key)
+SILC_PKCS_PRIVATE_KEY_BITLEN(silc_pkcs_silc_private_key_bitlen)
{
SilcSILCPrivateKey silc_privkey = private_key;
return silc_privkey->pkcs->private_key_bitlen(silc_privkey->pkcs,
/* Frees private key */
-void silc_pkcs_silc_private_key_free(const struct SilcPKCSObjectStruct *pkcs,
- void *private_key)
+SILC_PKCS_PRIVATE_KEY_FREE(silc_pkcs_silc_private_key_free)
{
SilcSILCPrivateKey silc_privkey = private_key;
/* Encrypts as specified in SILC protocol specification */
-SilcAsyncOperation
-silc_pkcs_silc_encrypt(const struct SilcPKCSObjectStruct *pkcs,
- void *public_key,
- unsigned char *src,
- SilcUInt32 src_len,
- SilcRng rng,
- SilcPKCSEncryptCb encrypt_cb,
- void *context)
+SILC_PKCS_ENCRYPT(silc_pkcs_silc_encrypt)
{
SilcSILCPublicKey silc_pubkey = public_key;
/* Decrypts as specified in SILC protocol specification */
-SilcAsyncOperation
-silc_pkcs_silc_decrypt(const struct SilcPKCSObjectStruct *pkcs,
- void *private_key,
- unsigned char *src,
- SilcUInt32 src_len,
- SilcPKCSDecryptCb decrypt_cb,
- void *context)
+SILC_PKCS_DECRYPT(silc_pkcs_silc_decrypt)
{
SilcSILCPrivateKey silc_privkey = private_key;
/* Signs as specified in SILC protocol specification */
-SilcAsyncOperation
-silc_pkcs_silc_sign(const struct SilcPKCSObjectStruct *pkcs,
- void *private_key,
- unsigned char *src,
- SilcUInt32 src_len,
- SilcBool compute_hash,
- SilcHash hash,
- SilcPKCSSignCb sign_cb,
- void *context)
+SILC_PKCS_SIGN(silc_pkcs_silc_sign)
{
SilcSILCPrivateKey silc_privkey = private_key;
/* Verifies as specified in SILC protocol specification */
-SilcAsyncOperation
-silc_pkcs_silc_verify(const struct SilcPKCSObjectStruct *pkcs,
- void *public_key,
- unsigned char *signature,
- SilcUInt32 signature_len,
- unsigned char *data,
- SilcUInt32 data_len,
- SilcHash hash,
- SilcPKCSVerifyCb verify_cb,
- void *context)
+SILC_PKCS_VERIFY(silc_pkcs_silc_verify)
{
SilcSILCPublicKey silc_pubkey = public_key;
#define SILC_PKCS_PRIVATE_KEYFILE_BEGIN "-----BEGIN SILC PRIVATE KEY-----\n"
#define SILC_PKCS_PRIVATE_KEYFILE_END "\n-----END SILC PRIVATE KEY-----\n"
-const SilcPKCSAlgorithm *
-silc_pkcs_silc_get_algorithm(const struct SilcPKCSObjectStruct *pkcs,
- void *public_key);
-SilcBool
-silc_pkcs_silc_import_public_key_file(const struct SilcPKCSObjectStruct *pkcs,
- unsigned char *filedata,
- SilcUInt32 filedata_len,
- SilcPKCSFileEncoding encoding,
- void **ret_public_key);
-int silc_pkcs_silc_import_public_key(const struct SilcPKCSObjectStruct *pkcs,
- void *key,
- SilcUInt32 key_len,
- void **ret_public_key);
-unsigned char *
-silc_pkcs_silc_export_public_key_file(const struct SilcPKCSObjectStruct *pkcs,
- SilcStack stack,
- void *public_key,
- SilcPKCSFileEncoding encoding,
- SilcUInt32 *ret_len);
-unsigned char *
-silc_pkcs_silc_export_public_key(const struct SilcPKCSObjectStruct *pkcs,
- SilcStack stack,
- void *public_key,
- SilcUInt32 *ret_len);
-SilcUInt32
-silc_pkcs_silc_public_key_bitlen(const struct SilcPKCSObjectStruct *pkcs,
- void *public_key);
-void *silc_pkcs_silc_public_key_copy(const struct SilcPKCSObjectStruct *pkcs,
- void *public_key);
-SilcBool
-silc_pkcs_silc_public_key_compare(const struct SilcPKCSObjectStruct *pkcs,
- void *key1, void *key2);
-void silc_pkcs_silc_public_key_free(const struct SilcPKCSObjectStruct *pkcs,
- void *public_key);
-SilcBool
-silc_pkcs_silc_import_private_key_file(const struct SilcPKCSObjectStruct *pkcs,
- unsigned char *filedata,
- SilcUInt32 filedata_len,
- const char *passphrase,
- SilcUInt32 passphrase_len,
- SilcPKCSFileEncoding encoding,
- void **ret_private_key);
-int silc_pkcs_silc_import_private_key(const struct SilcPKCSObjectStruct *pkcs,
- void *key,
- SilcUInt32 key_len,
- void **ret_private_key);
-unsigned char *
-silc_pkcs_silc_export_private_key_file(const struct SilcPKCSObjectStruct *pkcs,
- SilcStack stack,
- void *private_key,
- const char *passphrase,
- SilcUInt32 passphrase_len,
- SilcPKCSFileEncoding encoding,
- SilcRng rng,
- SilcUInt32 *ret_len);
-unsigned char *
-silc_pkcs_silc_export_private_key(const struct SilcPKCSObjectStruct *pkcs,
- SilcStack stack,
- void *private_key,
- SilcUInt32 *ret_len);
-SilcUInt32
-silc_pkcs_silc_private_key_bitlen(const struct SilcPKCSObjectStruct *pkcs,
- void *private_key);
-void silc_pkcs_silc_private_key_free(const struct SilcPKCSObjectStruct *pkcs,
- void *private_key);
-SilcAsyncOperation
-silc_pkcs_silc_encrypt(const struct SilcPKCSObjectStruct *pkcs,
- void *public_key,
- unsigned char *src,
- SilcUInt32 src_len,
- SilcRng rng,
- SilcPKCSEncryptCb encrypt_cb,
- void *context);
-SilcAsyncOperation
-silc_pkcs_silc_decrypt(const struct SilcPKCSObjectStruct *pkcs,
- void *private_key,
- unsigned char *src,
- SilcUInt32 src_len,
- SilcPKCSDecryptCb decrypt_cb,
- void *context);
-SilcAsyncOperation
-silc_pkcs_silc_sign(const struct SilcPKCSObjectStruct *pkcs,
- void *private_key,
- unsigned char *src,
- SilcUInt32 src_len,
- SilcBool compute_hash,
- SilcHash hash,
- SilcPKCSSignCb sign_cb,
- void *context);
-SilcAsyncOperation
-silc_pkcs_silc_verify(const struct SilcPKCSObjectStruct *pkcs,
- void *public_key,
- unsigned char *signature,
- SilcUInt32 signature_len,
- unsigned char *data,
- SilcUInt32 data_len,
- SilcHash hash,
- SilcPKCSVerifyCb verify_cb,
- void *context);
+SILC_PKCS_GET_ALGORITHM(silc_pkcs_silc_get_algorithm);
+SILC_PKCS_IMPORT_PUBLIC_KEY_FILE(silc_pkcs_silc_import_public_key_file);
+SILC_PKCS_IMPORT_PUBLIC_KEY(silc_pkcs_silc_import_public_key);
+SILC_PKCS_EXPORT_PUBLIC_KEY_FILE(silc_pkcs_silc_export_public_key_file);
+SILC_PKCS_EXPORT_PUBLIC_KEY(silc_pkcs_silc_export_public_key);
+SILC_PKCS_PUBLIC_KEY_BITLEN(silc_pkcs_silc_public_key_bitlen);
+SILC_PKCS_PUBLIC_KEY_COPY(silc_pkcs_silc_public_key_copy);
+SILC_PKCS_PUBLIC_KEY_COMPARE(silc_pkcs_silc_public_key_compare);
+SILC_PKCS_PUBLIC_KEY_FREE(silc_pkcs_silc_public_key_free);
+SILC_PKCS_IMPORT_PRIVATE_KEY_FILE(silc_pkcs_silc_import_private_key_file);
+SILC_PKCS_IMPORT_PRIVATE_KEY(silc_pkcs_silc_import_private_key);
+SILC_PKCS_EXPORT_PRIVATE_KEY_FILE(silc_pkcs_silc_export_private_key_file);
+SILC_PKCS_EXPORT_PRIVATE_KEY(silc_pkcs_silc_export_private_key);
+SILC_PKCS_PRIVATE_KEY_BITLEN(silc_pkcs_silc_private_key_bitlen);
+SILC_PKCS_PRIVATE_KEY_FREE(silc_pkcs_silc_private_key_free);
+SILC_PKCS_ENCRYPT(silc_pkcs_silc_encrypt);
+SILC_PKCS_DECRYPT(silc_pkcs_silc_decrypt);
+SILC_PKCS_SIGN(silc_pkcs_silc_sign);
+SILC_PKCS_VERIFY(silc_pkcs_silc_verify);
#endif /* SILCPK_I_H */
const SilcPKCSAlgorithm *silc_pkcs_get_algorithm(void *key)
{
SilcPublicKey public_key = key;
- return public_key->pkcs->get_algorithm(public_key->pkcs,
- public_key->public_key);
+ return public_key->alg;
}
/* Return algorithm name */
if (!public_key)
return FALSE;
- public_key->pkcs = pkcs = silc_pkcs_find_pkcs(type);
+ pkcs = silc_pkcs_find_pkcs(type);
+ public_key->pkcs = (SilcPKCSObject *)pkcs;
if (!public_key->pkcs) {
silc_free(public_key);
return FALSE;
}
/* Import the PKCS public key */
- if (!pkcs->import_public_key(pkcs, key, key_len, &public_key->public_key)) {
+ if (!pkcs->import_public_key(pkcs, key, key_len,
+ &public_key->public_key,
+ &public_key->alg)) {
silc_free(public_key);
return FALSE;
}
if (!private_key)
return FALSE;
- private_key->pkcs = pkcs = silc_pkcs_find_pkcs(type);
+ pkcs = silc_pkcs_find_pkcs(type);
+ private_key->pkcs = (SilcPKCSObject *)pkcs;
if (!private_key->pkcs) {
silc_free(private_key);
return FALSE;
/* Import the PKCS private key */
if (!pkcs->import_private_key(pkcs, key, key_len,
- &private_key->private_key)) {
+ &private_key->private_key,
+ &private_key->alg)) {
silc_free(private_key);
return FALSE;
}
/* Try loading all types until one succeeds. */
for (type = SILC_PKCS_SILC; type <= SILC_PKCS_SPKI; type++) {
- public_key->pkcs = silc_pkcs_find_pkcs(type);
+ public_key->pkcs = (SilcPKCSObject *)silc_pkcs_find_pkcs(type);
if (!public_key->pkcs)
continue;
if (public_key->pkcs->import_public_key_file(public_key->pkcs,
data, data_len,
SILC_PKCS_FILE_BASE64,
- &public_key->public_key)) {
+ &public_key->public_key,
+ &public_key->alg)) {
silc_free(data);
return TRUE;
}
if (public_key->pkcs->import_public_key_file(public_key->pkcs,
data, data_len,
SILC_PKCS_FILE_BIN,
- &public_key->public_key)) {
+ &public_key->public_key,
+ &public_key->alg)) {
silc_free(data);
return TRUE;
}
/* Try loading all types until one succeeds. */
for (type = SILC_PKCS_SILC; type <= SILC_PKCS_SPKI; type++) {
- private_key->pkcs = silc_pkcs_find_pkcs(type);
+ private_key->pkcs = (SilcPKCSObject *)silc_pkcs_find_pkcs(type);
if (!private_key->pkcs)
continue;
passphrase,
passphrase_len,
SILC_PKCS_FILE_BIN,
- &private_key->private_key)) {
+ &private_key->private_key,
+ &private_key->alg)) {
silc_free(data);
return TRUE;
}
passphrase,
passphrase_len,
SILC_PKCS_FILE_BASE64,
- &private_key->private_key)) {
+ &private_key->private_key,
+ &private_key->alg)) {
silc_free(data);
return TRUE;
}
* SOURCE
*/
typedef struct SilcPublicKeyStruct {
- const SilcPKCSObject *pkcs; /* PKCS */
+ SilcPKCSObject *pkcs; /* PKCS */
+ const SilcPKCSAlgorithm *alg; /* PKCS algorithm */
void *public_key; /* PKCS specific public key */
} *SilcPublicKey;
/***/
* SOURCE
*/
typedef struct SilcPrivateKeyStruct {
- const SilcPKCSObject *pkcs; /* PKCS */
+ SilcPKCSObject *pkcs; /* PKCS */
+ const SilcPKCSAlgorithm *alg; /* PKCS algorithm */
void *private_key; /* PKCS specific private key */
} *SilcPrivateKey;
/***/
/* Generates RSA key pair. */
-SilcBool silc_pkcs1_generate_key(const struct SilcPKCSAlgorithmStruct *pkcs,
- SilcUInt32 keylen,
- SilcRng rng,
- void **ret_public_key,
- void **ret_private_key)
+SILC_PKCS_ALG_GENERATE_KEY(silc_pkcs1_generate_key)
{
SilcUInt32 prime_bits = keylen / 2;
SilcMPInt p, q;
/* Import PKCS #1 compliant public key */
-int silc_pkcs1_import_public_key(const struct SilcPKCSAlgorithmStruct *pkcs,
- void *key,
- SilcUInt32 key_len,
- void **ret_public_key)
+SILC_PKCS_ALG_IMPORT_PUBLIC_KEY(silc_pkcs1_import_public_key)
{
SilcAsn1 asn1 = NULL;
SilcBufferStruct alg_key;
/* Export PKCS #1 compliant public key */
-unsigned char *
-silc_pkcs1_export_public_key(const struct SilcPKCSAlgorithmStruct *pkcs,
- SilcStack stack,
- void *public_key,
- SilcUInt32 *ret_len)
+SILC_PKCS_ALG_EXPORT_PUBLIC_KEY(silc_pkcs1_export_public_key)
{
RsaPublicKey *key = public_key;
SilcAsn1 asn1 = NULL;
/* Returns key length */
-SilcUInt32
-silc_pkcs1_public_key_bitlen(const struct SilcPKCSAlgorithmStruct *pkcs,
- void *public_key)
+SILC_PKCS_ALG_PUBLIC_KEY_BITLEN(silc_pkcs1_public_key_bitlen)
{
RsaPublicKey *key = public_key;
return key->bits;
/* Copy public key */
-void *silc_pkcs1_public_key_copy(const struct SilcPKCSAlgorithmStruct *pkcs,
- void *public_key)
+SILC_PKCS_ALG_PUBLIC_KEY_COPY(silc_pkcs1_public_key_copy)
{
RsaPublicKey *key = public_key, *new_key;
/* Compare public keys */
-SilcBool
-silc_pkcs1_public_key_compare(const struct SilcPKCSAlgorithmStruct *pkcs,
- void *key1, void *key2)
+SILC_PKCS_ALG_PUBLIC_KEY_COMPARE(silc_pkcs1_public_key_compare)
{
RsaPublicKey *k1 = key1, *k2 = key2;
/* Frees public key */
-void silc_pkcs1_public_key_free(const struct SilcPKCSAlgorithmStruct *pkcs,
- void *public_key)
+SILC_PKCS_ALG_PUBLIC_KEY_FREE(silc_pkcs1_public_key_free)
{
RsaPublicKey *key = public_key;
/* Import PKCS #1 compliant private key */
-int silc_pkcs1_import_private_key(const struct SilcPKCSAlgorithmStruct *pkcs,
- void *key,
- SilcUInt32 key_len,
- void **ret_private_key)
+SILC_PKCS_ALG_IMPORT_PRIVATE_KEY(silc_pkcs1_import_private_key)
{
SilcAsn1 asn1;
SilcBufferStruct alg_key;
/* Export PKCS #1 compliant private key */
-unsigned char *
-silc_pkcs1_export_private_key(const struct SilcPKCSAlgorithmStruct *pkcs,
- SilcStack stack,
- void *private_key,
- SilcUInt32 *ret_len)
+SILC_PKCS_ALG_EXPORT_PRIVATE_KEY(silc_pkcs1_export_private_key)
{
RsaPrivateKey *key = private_key;
SilcAsn1 asn1;
/* Returns key length */
-SilcUInt32
-silc_pkcs1_private_key_bitlen(const struct SilcPKCSAlgorithmStruct *pkcs,
- void *private_key)
+SILC_PKCS_ALG_PRIVATE_KEY_BITLEN(silc_pkcs1_private_key_bitlen)
{
RsaPrivateKey *key = private_key;
return key->bits;
/* Frees private key */
-void silc_pkcs1_private_key_free(const struct SilcPKCSAlgorithmStruct *pkcs,
- void *private_key)
+SILC_PKCS_ALG_PRIVATE_KEY_FREE(silc_pkcs1_private_key_free)
{
RsaPrivateKey *key = private_key;
/* PKCS #1 RSA routines */
-SilcAsyncOperation
-silc_pkcs1_encrypt(const struct SilcPKCSAlgorithmStruct *pkcs,
- void *public_key,
- unsigned char *src,
- SilcUInt32 src_len,
- SilcRng rng,
- SilcPKCSEncryptCb encrypt_cb,
- void *context)
+SILC_PKCS_ALG_ENCRYPT(silc_pkcs1_encrypt)
{
RsaPublicKey *key = public_key;
SilcMPInt mp_tmp;
return NULL;
}
-SilcAsyncOperation
-silc_pkcs1_decrypt(const struct SilcPKCSAlgorithmStruct *pkcs,
- void *private_key,
- unsigned char *src,
- SilcUInt32 src_len,
- SilcPKCSDecryptCb decrypt_cb,
- void *context)
+SILC_PKCS_ALG_DECRYPT(silc_pkcs1_decrypt)
{
RsaPrivateKey *key = private_key;
SilcMPInt mp_tmp;
/* PKCS #1 sign with appendix, hash OID included in the signature */
-SilcAsyncOperation
-silc_pkcs1_sign(const struct SilcPKCSAlgorithmStruct *pkcs,
- void *private_key,
- unsigned char *src,
- SilcUInt32 src_len,
- SilcBool compute_hash,
- SilcHash hash,
- SilcPKCSSignCb sign_cb,
- void *context)
+SILC_PKCS_ALG_SIGN(silc_pkcs1_sign)
{
RsaPrivateKey *key = private_key;
unsigned char padded[2048 + 1], hashr[SILC_HASH_MAXLEN];
/* PKCS #1 verification with appendix. */
-SilcAsyncOperation
-silc_pkcs1_verify(const struct SilcPKCSAlgorithmStruct *pkcs,
- void *public_key,
- unsigned char *signature,
- SilcUInt32 signature_len,
- unsigned char *data,
- SilcUInt32 data_len,
- SilcHash hash,
- SilcPKCSVerifyCb verify_cb,
- void *context)
+SILC_PKCS_ALG_VERIFY(silc_pkcs1_verify)
{
RsaPublicKey *key = public_key;
SilcBool ret = FALSE;
/* PKCS #1 sign without hash oid */
-SilcAsyncOperation
-silc_pkcs1_sign_no_oid(const struct SilcPKCSAlgorithmStruct *pkcs,
- void *private_key,
- unsigned char *src,
- SilcUInt32 src_len,
- SilcBool compute_hash,
- SilcHash hash,
- SilcPKCSSignCb sign_cb,
- void *context)
+SILC_PKCS_ALG_SIGN(silc_pkcs1_sign_no_oid)
{
RsaPrivateKey *key = private_key;
SilcMPInt mp_tmp;
/* PKCS #1 verify without hash oid */
-SilcAsyncOperation
-silc_pkcs1_verify_no_oid(const struct SilcPKCSAlgorithmStruct *pkcs,
- void *public_key,
- unsigned char *signature,
- SilcUInt32 signature_len,
- unsigned char *data,
- SilcUInt32 data_len,
- SilcHash hash,
- SilcPKCSVerifyCb verify_cb,
- void *context)
+SILC_PKCS_ALG_VERIFY(silc_pkcs1_verify_no_oid)
{
RsaPublicKey *key = public_key;
SilcBool ret = FALSE;
#ifndef SILCPKCS1_I_H
#define SILCPKCS1_I_H
-SilcBool silc_pkcs1_generate_key(const struct SilcPKCSAlgorithmStruct *pkcs,
- SilcUInt32 keylen,
- SilcRng rng,
- void **ret_public_key,
- void **ret_private_key);
-int silc_pkcs1_import_public_key(const struct SilcPKCSAlgorithmStruct *pkcs,
- void *key,
- SilcUInt32 key_len,
- void **ret_public_key);
-unsigned char *
-silc_pkcs1_export_public_key(const struct SilcPKCSAlgorithmStruct *pkcs,
- SilcStack stack,
- void *public_key,
- SilcUInt32 *ret_len);
-SilcUInt32
-silc_pkcs1_public_key_bitlen(const struct SilcPKCSAlgorithmStruct *pkcs,
- void *public_key);
-void *silc_pkcs1_public_key_copy(const struct SilcPKCSAlgorithmStruct *pkcs,
- void *public_key);
-SilcBool
-silc_pkcs1_public_key_compare(const struct SilcPKCSAlgorithmStruct *pkcs,
- void *key1, void *key2);
-void silc_pkcs1_public_key_free(const struct SilcPKCSAlgorithmStruct *pkcs,
- void *public_key);
-int silc_pkcs1_import_private_key(const struct SilcPKCSAlgorithmStruct *pkcs,
- void *key,
- SilcUInt32 key_len,
- void **ret_private_key);
-unsigned char *
-silc_pkcs1_export_private_key(const struct SilcPKCSAlgorithmStruct *pkcs,
- SilcStack stack,
- void *private_key,
- SilcUInt32 *ret_len);
-SilcUInt32
-silc_pkcs1_private_key_bitlen(const struct SilcPKCSAlgorithmStruct *pkcs,
- void *private_key);
-void silc_pkcs1_private_key_free(const struct SilcPKCSAlgorithmStruct *pkcs,
- void *private_key);
-SilcAsyncOperation
-silc_pkcs1_encrypt(const struct SilcPKCSAlgorithmStruct *pkcs,
- void *public_key,
- unsigned char *src,
- SilcUInt32 src_len,
- SilcRng rng,
- SilcPKCSEncryptCb encrypt_cb,
- void *context);
-SilcAsyncOperation
-silc_pkcs1_decrypt(const struct SilcPKCSAlgorithmStruct *pkcs,
- void *private_key,
- unsigned char *src,
- SilcUInt32 src_len,
- SilcPKCSDecryptCb decrypt_cb,
- void *context);
-SilcAsyncOperation silc_pkcs1_sign(const struct SilcPKCSAlgorithmStruct *pkcs,
- void *private_key,
- unsigned char *src,
- SilcUInt32 src_len,
- SilcBool compute_hash,
- SilcHash hash,
- SilcPKCSSignCb sign_cb,
- void *context);
-SilcAsyncOperation silc_pkcs1_verify(const struct SilcPKCSAlgorithmStruct *pkcs,
- void *public_key,
- unsigned char *signature,
- SilcUInt32 signature_len,
- unsigned char *data,
- SilcUInt32 data_len,
- SilcHash hash,
- SilcPKCSVerifyCb verify_cb,
- void *context);
-SilcAsyncOperation
-silc_pkcs1_sign_no_oid(const struct SilcPKCSAlgorithmStruct *pkcs,
- void *private_key,
- unsigned char *src,
- SilcUInt32 src_len,
- SilcBool compute_hash,
- SilcHash hash,
- SilcPKCSSignCb sign_cb,
- void *context);
-SilcAsyncOperation
-silc_pkcs1_verify_no_oid(const struct SilcPKCSAlgorithmStruct *pkcs,
- void *public_key,
- unsigned char *signature,
- SilcUInt32 signature_len,
- unsigned char *data,
- SilcUInt32 data_len,
- SilcHash hash,
- SilcPKCSVerifyCb verify_cb,
- void *context);
+SILC_PKCS_ALG_GENERATE_KEY(silc_pkcs1_generate_key);
+SILC_PKCS_ALG_IMPORT_PUBLIC_KEY(silc_pkcs1_import_public_key);
+SILC_PKCS_ALG_EXPORT_PUBLIC_KEY(silc_pkcs1_export_public_key);
+SILC_PKCS_ALG_PUBLIC_KEY_BITLEN(silc_pkcs1_public_key_bitlen);
+SILC_PKCS_ALG_PUBLIC_KEY_COPY(silc_pkcs1_public_key_copy);
+SILC_PKCS_ALG_PUBLIC_KEY_COMPARE(silc_pkcs1_public_key_compare);
+SILC_PKCS_ALG_PUBLIC_KEY_FREE(silc_pkcs1_public_key_free);
+SILC_PKCS_ALG_IMPORT_PRIVATE_KEY(silc_pkcs1_import_private_key);
+SILC_PKCS_ALG_EXPORT_PRIVATE_KEY(silc_pkcs1_export_private_key);
+SILC_PKCS_ALG_PRIVATE_KEY_BITLEN(silc_pkcs1_private_key_bitlen);
+SILC_PKCS_ALG_PRIVATE_KEY_FREE(silc_pkcs1_private_key_free);
+SILC_PKCS_ALG_ENCRYPT(silc_pkcs1_encrypt);
+SILC_PKCS_ALG_DECRYPT(silc_pkcs1_decrypt);
+SILC_PKCS_ALG_SIGN(silc_pkcs1_sign);
+SILC_PKCS_ALG_VERIFY(silc_pkcs1_verify);
+SILC_PKCS_ALG_SIGN(silc_pkcs1_sign_no_oid);
+SILC_PKCS_ALG_VERIFY(silc_pkcs1_verify_no_oid);
#endif /* SILCPKCS1_I_H */
#error "Do not include this header directly"
#endif
+/* Macros for defining the PKCS APIs. Use these when you need to declare
+ PKCS API functions. */
+
+#define SILC_PKCS_ALG_GENERATE_KEY(name) \
+ SilcBool name(const struct SilcPKCSAlgorithmStruct *pkcs, \
+ SilcUInt32 keylen, SilcRng rng, \
+ void **ret_public_key, void **ret_private_key)
+
+#define SILC_PKCS_ALG_IMPORT_PUBLIC_KEY(name) \
+ int name(const struct SilcPKCSAlgorithmStruct *pkcs, \
+ void *key, SilcUInt32 key_len, \
+ void **ret_public_key)
+
+#define SILC_PKCS_ALG_EXPORT_PUBLIC_KEY(name) \
+ unsigned char *name(const struct SilcPKCSAlgorithmStruct *pkcs, \
+ SilcStack stack, \
+ void *public_key, \
+ SilcUInt32 *ret_len)
+
+#define SILC_PKCS_ALG_PUBLIC_KEY_BITLEN(name) \
+ SilcUInt32 name(const struct SilcPKCSAlgorithmStruct *pkcs, \
+ void *public_key)
+
+#define SILC_PKCS_ALG_PUBLIC_KEY_COPY(name) \
+ void *name(const struct SilcPKCSAlgorithmStruct *pkcs, \
+ void *public_key)
+
+#define SILC_PKCS_ALG_PUBLIC_KEY_COMPARE(name) \
+ SilcBool name(const struct SilcPKCSAlgorithmStruct *pkcs, \
+ void *key1, void *key2)
+
+#define SILC_PKCS_ALG_PUBLIC_KEY_FREE(name) \
+ void name(const struct SilcPKCSAlgorithmStruct *pkcs, void *public_key)
+
+#define SILC_PKCS_ALG_IMPORT_PRIVATE_KEY(name) \
+ int name(const struct SilcPKCSAlgorithmStruct *pkcs, \
+ void *key, SilcUInt32 key_len, void **ret_private_key)
+
+#define SILC_PKCS_ALG_EXPORT_PRIVATE_KEY(name) \
+ unsigned char *name(const struct SilcPKCSAlgorithmStruct *pkcs, \
+ SilcStack stack, void *private_key, \
+ SilcUInt32 *ret_len)
+
+#define SILC_PKCS_ALG_PRIVATE_KEY_BITLEN(name) \
+ SilcUInt32 name(const struct SilcPKCSAlgorithmStruct *pkcs, \
+ void *private_key)
+
+#define SILC_PKCS_ALG_PRIVATE_KEY_FREE(name) \
+ void name(const struct SilcPKCSAlgorithmStruct *pkcs, \
+ void *private_key)
+
+#define SILC_PKCS_ALG_ENCRYPT(name) \
+ SilcAsyncOperation name(const struct SilcPKCSAlgorithmStruct *pkcs, \
+ void *public_key, \
+ unsigned char *src, \
+ SilcUInt32 src_len, \
+ SilcRng rng, \
+ SilcPKCSEncryptCb encrypt_cb, \
+ void *context)
+
+#define SILC_PKCS_ALG_DECRYPT(name) \
+ SilcAsyncOperation name(const struct SilcPKCSAlgorithmStruct *pkcs, \
+ void *private_key, \
+ unsigned char *src, \
+ SilcUInt32 src_len, \
+ SilcPKCSDecryptCb decrypt_cb, \
+ void *context)
+
+#define SILC_PKCS_ALG_SIGN(name) \
+ SilcAsyncOperation name(const struct SilcPKCSAlgorithmStruct *pkcs, \
+ void *private_key, \
+ unsigned char *src, \
+ SilcUInt32 src_len, \
+ SilcBool compute_hash, \
+ SilcHash hash, \
+ SilcPKCSSignCb sign_cb, \
+ void *context)
+
+#define SILC_PKCS_ALG_VERIFY(name) \
+ SilcAsyncOperation name(const struct SilcPKCSAlgorithmStruct *pkcs, \
+ void *public_key, \
+ unsigned char *signature, \
+ SilcUInt32 signature_len, \
+ unsigned char *data, \
+ SilcUInt32 data_len, \
+ SilcHash hash, \
+ SilcPKCSVerifyCb verify_cb, \
+ void *context)
+
/* The PKCS Algorithm object to represent any PKCS algorithm. This context
implements the PKCS algorithm, such as RSA, DSA, etc. */
struct SilcPKCSAlgorithmStruct {
/* Generate new key pair. Returns PKCS algorithm specific public key
and private key contexts. */
- SilcBool (*generate_key)(const struct SilcPKCSAlgorithmStruct *pkcs,
- SilcUInt32 keylen,
- SilcRng rng,
- void **ret_public_key,
- void **ret_private_key);
+ SILC_PKCS_ALG_GENERATE_KEY((*generate_key));
/* Public key routines. */
/* Import/create new public key. Returns the length of the data that was
imported from `key' or 0 on error. Returns the PKCS algorithm specific
public key to `ret_public_key'. */
- int (*import_public_key)(const struct SilcPKCSAlgorithmStruct *pkcs,
- void *key, SilcUInt32 key_len,
- void **ret_public_key);
+ SILC_PKCS_ALG_IMPORT_PUBLIC_KEY((*import_public_key));
/* Export/encode public key. Returns the encoded public key buffer that
the caller must free. */
- unsigned char *
- (*export_public_key)(const struct SilcPKCSAlgorithmStruct *pkcs,
- SilcStack stack,
- void *public_key,
- SilcUInt32 *ret_len);
+ SILC_PKCS_ALG_EXPORT_PUBLIC_KEY((*export_public_key));
/* Returns the bit length of public key */
- SilcUInt32 (*public_key_bitlen)(const struct SilcPKCSAlgorithmStruct *pkcs,
- void *public_key);
+ SILC_PKCS_ALG_PUBLIC_KEY_BITLEN((*public_key_bitlen));
/* Duplicated public key */
- void *(*public_key_copy)(const struct SilcPKCSAlgorithmStruct *pkcs,
- void *public_key);
+ SILC_PKCS_ALG_PUBLIC_KEY_COPY((*public_key_copy));
/* Compares two public keys. Returns TRUE if they are identical. */
- SilcBool (*public_key_compare)(const struct SilcPKCSAlgorithmStruct *pkcs,
- void *key1, void *key2);
+ SILC_PKCS_ALG_PUBLIC_KEY_COMPARE((*public_key_compare));
/* Free public key */
- void (*public_key_free)(const struct SilcPKCSAlgorithmStruct *pkcs,
- void *public_key);
+ SILC_PKCS_ALG_PUBLIC_KEY_FREE((*public_key_free));
/* Private key routines. */
/* Import/create new private key. Returns the length of the data that was
imported from `key' or 0 on error. Returns the PKCS algorithm specific
private key to `ret_private_key'. */
- int (*import_private_key)(const struct SilcPKCSAlgorithmStruct *pkcs,
- void *key,
- SilcUInt32 key_len,
- void **ret_private_key);
+ SILC_PKCS_ALG_IMPORT_PRIVATE_KEY((*import_private_key));
/* Export/encode private key. Returns the encoded private key buffer that
the caller must free. */
- unsigned char *
- (*export_private_key)(const struct SilcPKCSAlgorithmStruct *pkcs,
- SilcStack stack,
- void *private_key,
- SilcUInt32 *ret_len);
+ SILC_PKCS_ALG_EXPORT_PRIVATE_KEY((*export_private_key));
/* Returns the bi length of private key */
- SilcUInt32 (*private_key_bitlen)(const struct SilcPKCSAlgorithmStruct *pkcs,
- void *public_key);
+ SILC_PKCS_ALG_PRIVATE_KEY_BITLEN((*private_key_bitlen));
/* Free private key */
- void (*private_key_free)(const struct SilcPKCSAlgorithmStruct *pkcs,
- void *private_key);
+ SILC_PKCS_ALG_PRIVATE_KEY_FREE((*private_key_free));
/* Encrypt and decrypt operations */
- SilcAsyncOperation (*encrypt)(const struct SilcPKCSAlgorithmStruct *pkcs,
- void *public_key,
- unsigned char *src,
- SilcUInt32 src_len,
- SilcRng rng,
- SilcPKCSEncryptCb encrypt_cb,
- void *context);
- SilcAsyncOperation (*decrypt)(const struct SilcPKCSAlgorithmStruct *pkcs,
- void *private_key,
- unsigned char *src,
- SilcUInt32 src_len,
- SilcPKCSDecryptCb decrypt_cb,
- void *context);
+ SILC_PKCS_ALG_ENCRYPT((*encrypt));
+ SILC_PKCS_ALG_DECRYPT((*decrypt));
/* Signature and verification operations */
- SilcAsyncOperation (*sign)(const struct SilcPKCSAlgorithmStruct *pkcs,
- void *private_key,
- unsigned char *src,
- SilcUInt32 src_len,
- SilcBool compute_hash,
- SilcHash hash,
- SilcPKCSSignCb sign_cb,
- void *context);
- SilcAsyncOperation (*verify)(const struct SilcPKCSAlgorithmStruct *pkcs,
- void *public_key,
- unsigned char *signature,
- SilcUInt32 signature_len,
- unsigned char *data,
- SilcUInt32 data_len,
- SilcHash hash,
- SilcPKCSVerifyCb verify_cb,
- void *context);
+ SILC_PKCS_ALG_SIGN((*sign));
+ SILC_PKCS_ALG_VERIFY((*verify));
};
+/* 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, 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, 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, \
+ 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, \
+ SilcPKCSVerifyCb verify_cb, \
+ void *context)
+
/* The PKCS (Public Key Cryptosystem) object to represent any PKCS. This
context implements the PKCS, such as SILC public keys, X.509 certificates,
OpenPGP certificates, etc. under a common API. */
/* Public key routines */
/* Returns PKCS algorithm context from public key */
- const SilcPKCSAlgorithm *
- (*get_algorithm)(const struct SilcPKCSObjectStruct *pkcs,
- void *public_key);
+ SILC_PKCS_GET_ALGORITHM((*get_algorithm));
/* Imports from public key file */
- SilcBool (*import_public_key_file)(const struct SilcPKCSObjectStruct *pkcs,
- unsigned char *filedata,
- SilcUInt32 filedata_len,
- SilcPKCSFileEncoding encoding,
- void **ret_public_key);
+ SILC_PKCS_IMPORT_PUBLIC_KEY_FILE((*import_public_key_file));
/* Imports from public key binary data. Returns the amount of bytes
imported from `key' or 0 on error. */
- int (*import_public_key)(const struct SilcPKCSObjectStruct *pkcs,
- void *key,
- SilcUInt32 key_len,
- void **ret_public_key);
+ SILC_PKCS_IMPORT_PUBLIC_KEY((*import_public_key));
/* Exports public key to file */
- unsigned char *
- (*export_public_key_file)(const struct SilcPKCSObjectStruct *pkcs,
- SilcStack stack,
- void *public_key,
- SilcPKCSFileEncoding encoding,
- SilcUInt32 *ret_len);
+ SILC_PKCS_EXPORT_PUBLIC_KEY_FILE((*export_public_key_file));
/* Export public key as binary data */
- unsigned char *(*export_public_key)(const struct SilcPKCSObjectStruct *pkcs,
- SilcStack stack,
- void *public_key,
- SilcUInt32 *ret_len);
+ SILC_PKCS_EXPORT_PUBLIC_KEY((*export_public_key));
/* Returns key length in bits */
- SilcUInt32 (*public_key_bitlen)(const struct SilcPKCSObjectStruct *pkcs,
- void *public_key);
+ SILC_PKCS_PUBLIC_KEY_BITLEN((*public_key_bitlen));
/* Copy public key */
- void *(*public_key_copy)(const struct SilcPKCSObjectStruct *pkcs,
- void *public_key);
+ SILC_PKCS_PUBLIC_KEY_COPY((*public_key_copy));
/* Compares public keys */
- SilcBool (*public_key_compare)(const struct SilcPKCSObjectStruct *pkcs,
- void *key1, void *key2);
+ SILC_PKCS_PUBLIC_KEY_COMPARE((*public_key_compare));
/* Free public key */
- void (*public_key_free)(const struct SilcPKCSObjectStruct *pkcs,
- void *public_key);
+ SILC_PKCS_PUBLIC_KEY_FREE((*public_key_free));
/* Private key routines */
/* Imports from private key file */
- SilcBool (*import_private_key_file)(const struct SilcPKCSObjectStruct *pkcs,
- unsigned char *filedata,
- SilcUInt32 filedata_len,
- const char *passphrase,
- SilcUInt32 passphrase_len,
- SilcPKCSFileEncoding encoding,
- void **ret_private_key);
+ SILC_PKCS_IMPORT_PRIVATE_KEY_FILE((*import_private_key_file));
/* Imports from private key binary data. Returns the amount of bytes
imported from `key' or 0 on error. */
- int (*import_private_key)(const struct SilcPKCSObjectStruct *pkcs,
- void *key,
- SilcUInt32 key_len,
- void **ret_private_key);
+ SILC_PKCS_IMPORT_PRIVATE_KEY((*import_private_key));
/* Exports private key to file */
- unsigned char *
- (*export_private_key_file)(const struct SilcPKCSObjectStruct *pkcs,
- SilcStack stack,
- void *private_key,
- const char *passphrase,
- SilcUInt32 passphrase_len,
- SilcPKCSFileEncoding encoding,
- SilcRng rng,
- SilcUInt32 *ret_len);
+ SILC_PKCS_EXPORT_PRIVATE_KEY_FILE((*export_private_key_file));
/* Export private key as binary data */
- unsigned char *(*export_private_key)(const struct SilcPKCSObjectStruct *pkcs,
- SilcStack stack,
- void *private_key,
- SilcUInt32 *ret_len);
+ SILC_PKCS_EXPORT_PRIVATE_KEY((*export_private_key));
/* Returns key length in bits */
- SilcUInt32 (*private_key_bitlen)(const struct SilcPKCSObjectStruct *pkcs,
- void *private_key);
+ SILC_PKCS_PRIVATE_KEY_BITLEN((*private_key_bitlen));
/* Free private key */
- void (*private_key_free)(const struct SilcPKCSObjectStruct *pkcs,
- void *private_key);
+ SILC_PKCS_PRIVATE_KEY_FREE((*private_key_free));
/* Encrypt and decrypt operations */
- SilcAsyncOperation (*encrypt)(const struct SilcPKCSObjectStruct *pkcs,
- void *public_key,
- unsigned char *src,
- SilcUInt32 src_len,
- SilcRng rng,
- SilcPKCSEncryptCb encrypt_cb,
- void *context);
- SilcAsyncOperation (*decrypt)(const struct SilcPKCSObjectStruct *pkcs,
- void *private_key,
- unsigned char *src,
- SilcUInt32 src_len,
- SilcPKCSDecryptCb decrypt_cb,
- void *context);
+ SILC_PKCS_ENCRYPT((*encrypt));
+ SILC_PKCS_DECRYPT((*decrypt));
/* Signature and verification operations */
- SilcAsyncOperation (*sign)(const struct SilcPKCSObjectStruct *pkcs,
- void *private_key,
- unsigned char *src,
- SilcUInt32 src_len,
- SilcBool compute_hash,
- SilcHash hash,
- SilcPKCSSignCb sign_cb,
- void *context);
- SilcAsyncOperation (*verify)(const struct SilcPKCSObjectStruct *pkcs,
- void *public_key,
- unsigned char *signature,
- SilcUInt32 signature_len,
- unsigned char *data,
- SilcUInt32 data_len,
- SilcHash hash,
- SilcPKCSVerifyCb verify_cb,
- void *context);
+ SILC_PKCS_SIGN((*sign));
+ SILC_PKCS_VERIFY((*verify));
};
#endif /* SILCPKCS_I_H */