5 Author: Pekka Riikonen <priikone@silcnet.org>
7 Copyright (C) 1997 - 2007 Pekka Riikonen
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; version 2 of the License.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
20 /****h* silccrypt/SILC Public Key Interface
24 * This interface implements the SILC protocol style public key, as defined
25 * by the SILC protocol specification.
32 /****s* silccrypt/SilcPubkeyAPI/SilcPublicKeyIdentifier
36 * typedef struct { ... } *SilcPublicKeyIdentifier,
37 * SilcPublicKeyIdentifierStruct;
41 * This structure contains the SILC Public Key identifier. Note that
42 * some of the fields may be NULL.
46 typedef struct SilcPublicKeyIdentifierObject {
54 } *SilcPublicKeyIdentifier, SilcPublicKeyIdentifierStruct;
57 /****s* silccrypt/SilcPubkeyAPI/SilcSILCPublicKey
61 * typedef struct { ... } *SilcSILCPublicKey;
65 * This structure defines the SILC protocol style public key. User
66 * doesn't have to access this structure usually, except when access to
67 * the identifier is required. The silc_pkcs_get_context for the
68 * PKCS type SILC_PKCS_SILC returns this context.
72 typedef struct SilcSILCPublicKeyStruct {
73 SilcPublicKeyIdentifierStruct identifier;
74 const SilcPKCSAlgorithm *pkcs; /* PKCS algorithm */
75 void *public_key; /* PKCS algorithm specific public key */
79 /****s* silccrypt/SilcPubkeyAPI/SilcSILCPrivateKey
83 * typedef struct { ... } *SilcSILCPrivateKey;
87 * This structure defines the SILC protocol implementation specific
88 * private key. This structure isn't usually needed by the user.
92 typedef struct SilcSILCPrivateKeyStruct {
93 const SilcPKCSAlgorithm *pkcs; /* PKCS algorithm */
94 void *private_key; /* PKCS algorithm specific private key */
95 } *SilcSILCPrivateKey;
98 /****f* silccrypt/SilcPubkeyAPI/silc_pkcs_silc_generate_key
102 * SilcBool silc_pkcs_silc_generate_key(const char *algorithm,
103 * SilcUInt32 bits_key_len,
104 * const char *identifier,
106 * SilcPublicKey *ret_public_key,
107 * SilcPrivateKey *ret_private_key)
111 * Generate a new SILC key pair of the algorithm type `algorithm' with
112 * the key length in bits of `bits_key_len'. The `scheme' may be NULL.
113 * Returns FALSE if key generation failed.
117 * // Generate RSA key pair with 2048 bit key length
118 * silc_pkcs_silc_generate_key("rsa", 2048, ident_string, rng,
119 * &public_key, &private_key);
122 SilcBool silc_pkcs_silc_generate_key(const char *algorithm,
123 SilcUInt32 bits_key_len,
124 const char *identifier,
126 SilcPublicKey *ret_public_key,
127 SilcPrivateKey *ret_private_key);
129 /****f* silccrypt/SilcPubkeyAPI/silc_pkcs_silc_encode_identifier
133 * char *silc_pkcs_silc_encode_identifier(char *username, char *host,
134 * char *realname, char *email,
135 * char *org, char *country,
140 * Encodes and returns SILC public key identifier. If some of the
141 * arguments are NULL those are not encoded into the identifier string.
142 * Protocol says that at least username and host must be provided.
143 * Caller must free the returned identifier string.
146 char *silc_pkcs_silc_encode_identifier(char *username, char *host,
147 char *realname, char *email,
148 char *org, char *country,
151 /****f* silccrypt/SilcPubkeyAPI/silc_pkcs_silc_decode_identifier
155 * SilcBool silc_pkcs_silc_decode_identifier(const char *identifier,
156 * SilcPublicKeyIdentifier ident);
160 * Decodes SILC protocol public key identifier `identifier' into the
161 * the `ident' structure. Returns FALSE if the identifier is not valid
165 SilcBool silc_pkcs_silc_decode_identifier(const char *identifier,
166 SilcPublicKeyIdentifier ident);
168 /****f* silccrypt/SilcPubkeyAPI/silc_pkcs_silc_public_key_version
172 * int silc_pkcs_silc_public_key_version(SilcPublicKey public_key);
176 * Returns the verison of the SILC Public Key indicated by `public_key'.
177 * Returns -1 if the `public_key' is not a SILC Public Key and the
178 * version number otherwise.
181 int silc_pkcs_silc_public_key_version(SilcPublicKey public_key);
183 #endif /* SILCPK_H */