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_public_key_get_pkcs 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.
145 * If `stack' is non-NULL the returned string is allocated from `stack'.
148 char *silc_pkcs_silc_encode_identifier(SilcStack stack,
149 char *username, char *host,
150 char *realname, char *email,
151 char *org, char *country,
154 /****f* silccrypt/SilcPubkeyAPI/silc_pkcs_silc_decode_identifier
158 * SilcBool silc_pkcs_silc_decode_identifier(const char *identifier,
159 * SilcPublicKeyIdentifier ident);
163 * Decodes SILC protocol public key identifier `identifier' into the
164 * the `ident' structure. Returns FALSE if the identifier is not valid
168 SilcBool silc_pkcs_silc_decode_identifier(const char *identifier,
169 SilcPublicKeyIdentifier ident);
171 /****f* silccrypt/SilcPubkeyAPI/silc_pkcs_silc_public_key_version
175 * int silc_pkcs_silc_public_key_version(SilcPublicKey public_key);
179 * Returns the verison of the SILC Public Key indicated by `public_key'.
180 * Returns -1 if the `public_key' is not a SILC Public Key and the
181 * version number otherwise.
184 int silc_pkcs_silc_public_key_version(SilcPublicKey public_key);
186 #endif /* SILCPK_H */