1/* cipher.h 2 * Copyright (C) 1998, 2002, 2003, 2009 Free Software Foundation, Inc. 3 * 4 * This file is part of Libgcrypt. 5 * 6 * Libgcrypt is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU Lesser general Public License as 8 * published by the Free Software Foundation; either version 2.1 of 9 * the License, or (at your option) any later version. 10 * 11 * Libgcrypt is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU Lesser General Public License for more details. 15 * 16 * You should have received a copy of the GNU Lesser General Public 17 * License along with this program; if not, write to the Free Software 18 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA 19 */ 20#ifndef G10_CIPHER_H 21#define G10_CIPHER_H 22 23#include <gcrypt.h> 24 25#define DBG_CIPHER _gcry_get_debug_flag( 1 ) 26 27#include "../random/random.h" 28 29#define PUBKEY_FLAG_NO_BLINDING (1 << 0) 30 31enum pk_operation 32 { 33 PUBKEY_OP_ENCRYPT, 34 PUBKEY_OP_DECRYPT, 35 PUBKEY_OP_SIGN, 36 PUBKEY_OP_VERIFY 37 }; 38 39enum pk_encoding 40 { 41 PUBKEY_ENC_RAW, 42 PUBKEY_ENC_PKCS1, 43 PUBKEY_ENC_OAEP, 44 PUBKEY_ENC_PSS, 45 PUBKEY_ENC_UNKNOWN 46 }; 47 48struct pk_encoding_ctx 49{ 50 enum pk_operation op; 51 unsigned int nbits; 52 53 enum pk_encoding encoding; 54 int flags; 55 56 int hash_algo; 57 58 /* for OAEP */ 59 unsigned char *label; 60 size_t labellen; 61 62 /* for PSS */ 63 size_t saltlen; 64 65 int (* verify_cmp) (void *opaque, gcry_mpi_t tmp); 66 void *verify_arg; 67}; 68 69#define CIPHER_INFO_NO_WEAK_KEY 1 70 71#include "cipher-proto.h" 72 73 74/*-- rmd160.c --*/ 75void _gcry_rmd160_hash_buffer (void *outbuf, 76 const void *buffer, size_t length); 77/*-- sha1.c --*/ 78void _gcry_sha1_hash_buffer (void *outbuf, 79 const void *buffer, size_t length); 80 81/*-- rijndael.c --*/ 82void _gcry_aes_cfb_enc (void *context, unsigned char *iv, 83 void *outbuf, const void *inbuf, 84 unsigned int nblocks); 85void _gcry_aes_cfb_dec (void *context, unsigned char *iv, 86 void *outbuf_arg, const void *inbuf_arg, 87 unsigned int nblocks); 88void _gcry_aes_cbc_enc (void *context, unsigned char *iv, 89 void *outbuf_arg, const void *inbuf_arg, 90 unsigned int nblocks, int cbc_mac); 91void _gcry_aes_cbc_dec (void *context, unsigned char *iv, 92 void *outbuf_arg, const void *inbuf_arg, 93 unsigned int nblocks); 94void _gcry_aes_ctr_enc (void *context, unsigned char *ctr, 95 void *outbuf_arg, const void *inbuf_arg, 96 unsigned int nblocks); 97 98 99/*-- dsa.c --*/ 100void _gcry_register_pk_dsa_progress (gcry_handler_progress_t cbc, void *cb_data); 101 102/*-- elgamal.c --*/ 103void _gcry_register_pk_elg_progress (gcry_handler_progress_t cb, 104 void *cb_data); 105 106 107/*-- ecc.c --*/ 108void _gcry_register_pk_ecc_progress (gcry_handler_progress_t cbc, 109 void *cb_data); 110 111 112/*-- primegen.c --*/ 113void _gcry_register_primegen_progress (gcry_handler_progress_t cb, 114 void *cb_data); 115 116/*-- pubkey.c --*/ 117const char * _gcry_pk_aliased_algo_name (int algorithm); 118 119/* Declarations for the cipher specifications. */ 120extern gcry_cipher_spec_t _gcry_cipher_spec_blowfish; 121extern gcry_cipher_spec_t _gcry_cipher_spec_des; 122extern gcry_cipher_spec_t _gcry_cipher_spec_tripledes; 123extern gcry_cipher_spec_t _gcry_cipher_spec_arcfour; 124extern gcry_cipher_spec_t _gcry_cipher_spec_cast5; 125extern gcry_cipher_spec_t _gcry_cipher_spec_aes; 126extern gcry_cipher_spec_t _gcry_cipher_spec_aes192; 127extern gcry_cipher_spec_t _gcry_cipher_spec_aes256; 128extern gcry_cipher_spec_t _gcry_cipher_spec_twofish; 129extern gcry_cipher_spec_t _gcry_cipher_spec_twofish128; 130extern gcry_cipher_spec_t _gcry_cipher_spec_serpent128; 131extern gcry_cipher_spec_t _gcry_cipher_spec_serpent192; 132extern gcry_cipher_spec_t _gcry_cipher_spec_serpent256; 133extern gcry_cipher_spec_t _gcry_cipher_spec_rfc2268_40; 134extern gcry_cipher_spec_t _gcry_cipher_spec_seed; 135extern gcry_cipher_spec_t _gcry_cipher_spec_camellia128; 136extern gcry_cipher_spec_t _gcry_cipher_spec_camellia192; 137extern gcry_cipher_spec_t _gcry_cipher_spec_camellia256; 138 139extern cipher_extra_spec_t _gcry_cipher_extraspec_tripledes; 140extern cipher_extra_spec_t _gcry_cipher_extraspec_aes; 141extern cipher_extra_spec_t _gcry_cipher_extraspec_aes192; 142extern cipher_extra_spec_t _gcry_cipher_extraspec_aes256; 143 144 145/* Declarations for the digest specifications. */ 146extern gcry_md_spec_t _gcry_digest_spec_crc32; 147extern gcry_md_spec_t _gcry_digest_spec_crc32_rfc1510; 148extern gcry_md_spec_t _gcry_digest_spec_crc24_rfc2440; 149extern gcry_md_spec_t _gcry_digest_spec_md4; 150extern gcry_md_spec_t _gcry_digest_spec_md5; 151extern gcry_md_spec_t _gcry_digest_spec_rmd160; 152extern gcry_md_spec_t _gcry_digest_spec_sha1; 153extern gcry_md_spec_t _gcry_digest_spec_sha224; 154extern gcry_md_spec_t _gcry_digest_spec_sha256; 155extern gcry_md_spec_t _gcry_digest_spec_sha512; 156extern gcry_md_spec_t _gcry_digest_spec_sha384; 157extern gcry_md_spec_t _gcry_digest_spec_tiger; 158extern gcry_md_spec_t _gcry_digest_spec_tiger1; 159extern gcry_md_spec_t _gcry_digest_spec_tiger2; 160extern gcry_md_spec_t _gcry_digest_spec_whirlpool; 161 162extern md_extra_spec_t _gcry_digest_extraspec_sha1; 163extern md_extra_spec_t _gcry_digest_extraspec_sha224; 164extern md_extra_spec_t _gcry_digest_extraspec_sha256; 165extern md_extra_spec_t _gcry_digest_extraspec_sha384; 166extern md_extra_spec_t _gcry_digest_extraspec_sha512; 167 168/* Declarations for the pubkey cipher specifications. */ 169extern gcry_pk_spec_t _gcry_pubkey_spec_rsa; 170extern gcry_pk_spec_t _gcry_pubkey_spec_elg; 171extern gcry_pk_spec_t _gcry_pubkey_spec_dsa; 172extern gcry_pk_spec_t _gcry_pubkey_spec_ecdsa; 173extern gcry_pk_spec_t _gcry_pubkey_spec_ecdh; 174 175extern pk_extra_spec_t _gcry_pubkey_extraspec_rsa; 176extern pk_extra_spec_t _gcry_pubkey_extraspec_dsa; 177extern pk_extra_spec_t _gcry_pubkey_extraspec_elg; 178extern pk_extra_spec_t _gcry_pubkey_extraspec_ecdsa; 179 180 181#endif /*G10_CIPHER_H*/ 182