Author: Pekka Riikonen <priikone@silcnet.org>
- Copyright (C) 1997 - 2006 Pekka Riikonen
+ Copyright (C) 1997 - 2007 Pekka Riikonen
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
#include "silcpk_i.h"
#include "silcpkcs1_i.h"
-#ifndef SILC_EPOC
+#ifndef SILC_SYMBIAN
/* Dynamically registered list of PKCS. */
SilcDList silc_pkcs_list = NULL;
SilcDList silc_pkcs_alg_list = NULL;
#else
#define SILC_PKCS_LIST TRUE
#define SILC_PKCS_ALG_LIST TRUE
-#endif /* SILC_EPOC */
+#endif /* SILC_SYMBIAN */
/* Static list of PKCS for silc_pkcs_register_default(). */
const SilcPKCSObject silc_default_pkcs[] =
SilcBool silc_pkcs_register(const SilcPKCSObject *pkcs)
{
-#ifndef SILC_EPOC
+#ifndef SILC_SYMBIAN
SilcPKCSObject *newpkcs;
SILC_LOG_DEBUG(("Registering new PKCS"));
silc_pkcs_list = silc_dlist_init();
silc_dlist_add(silc_pkcs_list, newpkcs);
-#endif /* SILC_EPOC */
+#endif /* SILC_SYMBIAN */
return TRUE;
}
SilcBool silc_pkcs_unregister(SilcPKCSObject *pkcs)
{
-#ifndef SILC_EPOC
+#ifndef SILC_SYMBIAN
SilcPKCSObject *entry;
SILC_LOG_DEBUG(("Unregistering PKCS"));
}
}
-#endif /* SILC_EPOC */
+#endif /* SILC_SYMBIAN */
return FALSE;
}
SilcBool silc_pkcs_algorithm_register(const SilcPKCSAlgorithm *pkcs)
{
-#ifndef SILC_EPOC
+#ifndef SILC_SYMBIAN
SilcPKCSAlgorithm *newalg;
SILC_LOG_DEBUG(("Registering new PKCS algorithm %s",
silc_pkcs_alg_list = silc_dlist_init();
silc_dlist_add(silc_pkcs_alg_list, newalg);
-#endif /* SILC_EPOC */
+#endif /* SILC_SYMBIAN */
return TRUE;
}
SilcBool silc_pkcs_algorithm_unregister(SilcPKCSAlgorithm *pkcs)
{
-#ifndef SILC_EPOC
+#ifndef SILC_SYMBIAN
SilcPKCSAlgorithm*entry;
SILC_LOG_DEBUG(("Unregistering PKCS algorithm"));
}
}
-#endif /* SILC_EPOC */
+#endif /* SILC_SYMBIAN */
return FALSE;
}
SilcBool silc_pkcs_register_default(void)
{
-#ifndef SILC_EPOC
+#ifndef SILC_SYMBIAN
int i;
for (i = 0; silc_default_pkcs[i].type; i++)
for (i = 0; silc_default_pkcs_alg[i].name; i++)
silc_pkcs_algorithm_register(&(silc_default_pkcs_alg[i]));
-#endif /* SILC_EPOC */
+#endif /* SILC_SYMBIAN */
return TRUE;
}
SilcBool silc_pkcs_unregister_all(void)
{
-#ifndef SILC_EPOC
+#ifndef SILC_SYMBIAN
SilcPKCSObject *entry;
SilcPKCSAlgorithm *alg;
}
}
-#endif /* SILC_EPOC */
+#endif /* SILC_SYMBIAN */
return TRUE;
}
char *list = NULL;
int len = 0;
-#ifndef SILC_EPOC
+#ifndef SILC_SYMBIAN
if (silc_pkcs_alg_list) {
silc_dlist_start(silc_pkcs_alg_list);
while ((entry = silc_dlist_get(silc_pkcs_alg_list)) != SILC_LIST_END) {
len++;
}
}
-#endif /* SILC_EPOC */
+#endif /* SILC_SYMBIAN */
list[len - 1] = 0;
{
SilcPKCSObject *entry;
-#ifndef SILC_EPOC
+#ifndef SILC_SYMBIAN
if (silc_pkcs_list) {
silc_dlist_start(silc_pkcs_list);
while ((entry = silc_dlist_get(silc_pkcs_list)) != SILC_LIST_END) {
#else
{
int i;
- for (i = 0; silc_default_pkcs[i].name; i++) {
+ for (i = 0; silc_default_pkcs[i].type; i++) {
entry = (SilcPKCSObject *)&(silc_default_pkcs[i]);
if (entry->type == type)
return (const SilcPKCSObject *)entry;
}
}
-#endif /* SILC_EPOC */
+#endif /* SILC_SYMBIAN */
return NULL;
}
{
SilcPKCSAlgorithm *entry;
-#ifndef SILC_EPOC
+#ifndef SILC_SYMBIAN
if (silc_pkcs_alg_list) {
silc_dlist_start(silc_pkcs_alg_list);
while ((entry = silc_dlist_get(silc_pkcs_alg_list)) != SILC_LIST_END) {
return (const SilcPKCSAlgorithm *)entry;
}
}
-#endif /* SILC_EPOC */
+#endif /* SILC_SYMBIAN */
return NULL;
}
void silc_pkcs_public_key_free(SilcPublicKey public_key)
{
public_key->pkcs->public_key_free(public_key->public_key);
+ silc_free(public_key);
}
/* Exports public key */
void *silc_pkcs_get_context(SilcPKCSType type, SilcPublicKey public_key)
{
if (public_key->pkcs->type != type)
- return FALSE;
+ return NULL;
return public_key->public_key;
}
void silc_pkcs_private_key_free(SilcPrivateKey private_key)
{
private_key->pkcs->private_key_free(private_key->private_key);
+ silc_free(private_key);
}
/* Encrypts */
SilcBool silc_pkcs_encrypt(SilcPublicKey public_key,
unsigned char *src, SilcUInt32 src_len,
unsigned char *dst, SilcUInt32 dst_size,
- SilcUInt32 *dst_len)
+ SilcUInt32 *dst_len, SilcRng rng)
{
return public_key->pkcs->encrypt(public_key->public_key, src, src_len,
- dst, dst_size, dst_len);
+ dst, dst_size, dst_len, rng);
}
/* Decrypts */
SilcBool silc_pkcs_sign(SilcPrivateKey private_key,
unsigned char *src, SilcUInt32 src_len,
unsigned char *dst, SilcUInt32 dst_size,
- SilcUInt32 *dst_len, SilcHash hash)
+ SilcUInt32 *dst_len, SilcBool compute_hash,
+ SilcHash hash)
{
return private_key->pkcs->sign(private_key->private_key, src, src_len,
- dst, dst_size, dst_len, hash);
+ dst, dst_size, dst_len, compute_hash, hash);
}
/* Verifies signature */
silc_free(data);
silc_free(public_key);
+ *ret_public_key = NULL;
return FALSE;
}
silc_free(data);
silc_free(private_key);
+ *ret_private_key = NULL;
return FALSE;
}