/* silcpkcs1.h Author: Pekka Riikonen Copyright (C) 2003 - 2005 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 the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. */ /****h* silccrypt/SILC PKCS1 Interface * * DESCRIPTION * * This interface implements the PKCS#1 standard block encoding and decoding * routines. It is used as part of RSA implementation to perform PKCS#1 * RSA operations. The routines encode and decode the data for RSA operations * such as digital signatures and their verification, and encryption and * decryption. * ***/ #ifndef SILCPKCS1_H #define SILCPKCS1_H /****d* silccrypt/SilcPKCS1API/SilcPkcs1BlockType * * NAME * * typedef enum { ... } SilcPkcs1BlockType * * DESCRIPTION * * Defines the PKCS#1 block types that define how the blcok is encoded * for different RSA operations. * * SOURCE */ typedef enum { SILC_PKCS1_BT_PRV0 = 0x00, /* Private key BT 0 */ SILC_PKCS1_BT_PRV1 = 0x01, /* Private key BT 1 (use this always) */ SILC_PKCS1_BT_PUB = 0x02, /* Public key BT */ } SilcPkcs1BlockType; /***/ /****f* silccrypt/SilcPKCS1API/silc_pkcs1_encode * * SYNOPSIS * * SilcBool silc_pkcs1_encode(SilcPkcs1BlockType bt, * const unsigned char *data, * SilcUInt32 data_len, * unsigned char *dest_data, * SilcUInt32 dest_data_size, * SilcRng rng); * * DESCRIPTION * * Encodes PKCS#1 data block from the `data' according to the block type * indicated by `bt'. When encoding signatures the `bt' must be * SILC_PKCS1_BT_PRV1 and when encoding encryption blocks the `bt' must * be SILC_PKCS1_BT_PUB. The encoded data is copied into the `dest_data' * buffer which is size of `dest_data_size'. If the `dest_data' is not * able to hold the encoded block this returns FALSE. Usually the * `dest_data_size' is set to the RSA key length value as it is the * length of one block. The `rng' should be set when `bt' is set to * SILC_PKCS1_BT_PUB. If `rng' is NULL global RNG is used. This * function returns TRUE on success. * ***/ SilcBool silc_pkcs1_encode(SilcPkcs1BlockType bt, const unsigned char *data, SilcUInt32 data_len, unsigned char *dest_data, SilcUInt32 dest_data_size, SilcRng rng); /****f* silccrypt/SilcPKCS1API/silc_pkcs1_decode * * SYNOPSIS * * SilcBool silc_pkcs1_decode(SilcPkcs1BlockType bt, * const unsigned char *data, * SilcUInt32 data_len, * unsigned char *dest_data, * SilcUInt32 dest_data_size, * SilcUInt32 *dest_len); * * DESCRIPTION * * Decodes the PKCS#1 encoded block according to the block type `bt'. * When verifying signatures the `bt' must be SILC_PKCS1_BT_PRV1 and * when decrypting it must be SILC_PKCS1_BT_PUB. This copies the * decoded data into `dest_data' which is size of `dest_data_size'. If * the deocded block does not fit to `dest_data' this returns FALSE. * Returns the decoded length into `dest_len'. * ***/ SilcBool silc_pkcs1_decode(SilcPkcs1BlockType bt, const unsigned char *data, SilcUInt32 data_len, unsigned char *dest_data, SilcUInt32 dest_data_size, SilcUInt32 *dest_len); #endif /* SILCPKCS1_H */