OLD | NEW |
(Empty) | |
| 1 /********************************************************************** |
| 2 * gost89.h * |
| 3 * Copyright (c) 2005-2006 Cryptocom LTD * |
| 4 * This file is distributed under the same license as OpenSSL * |
| 5 * * |
| 6 * Declarations for GOST 28147-89 encryption algorithm * |
| 7 * No OpenSSL libraries required to compile and use * |
| 8 * this code * |
| 9 **********************************************************************/
|
| 10 #ifndef GOST89_H |
| 11 #define GOST89_H |
| 12 |
| 13 /* Typedef for unsigned 32-bit integer */ |
| 14 #if __LONG_MAX__ > 2147483647L |
| 15 typedef unsigned int u4; |
| 16 #else |
| 17 typedef unsigned long u4; |
| 18 #endif |
| 19 /* Typedef for unsigned 8-bit integer */ |
| 20 typedef unsigned char byte; |
| 21 |
| 22 /* Internal representation of GOST substitution blocks */ |
| 23 typedef struct { |
| 24 byte k8[16]; |
| 25 byte k7[16]; |
| 26 byte k6[16]; |
| 27 byte k5[16]; |
| 28 byte k4[16]; |
| 29 byte k3[16]; |
| 30 byte k2[16]; |
| 31 byte k1[16]; |
| 32 } gost_subst_block; |
| 33 |
| 34 |
| 35 /* Cipher context includes key and preprocessed substitution block */ |
| 36 typedef struct { |
| 37 u4 k[8]; |
| 38 /* Constant s-boxes -- set up in gost_init(). */ |
| 39 u4 k87[256],k65[256],k43[256],k21[256]; |
| 40 } gost_ctx; |
| 41 /* Note: encrypt and decrypt expect full blocks--padding blocks is |
| 42 caller's responsibility. All bulk encryption is done in |
| 43 ECB mode by these calls. Other modes may be added easily |
| 44 enough. */ |
| 45 /* Encrypt several full blocks in ECB mode */ |
| 46 void gost_enc(gost_ctx *ctx, const byte *clear,byte *cipher, int blocks); |
| 47 /* Decrypt several full blocks in ECB mode */ |
| 48 void gost_dec(gost_ctx *ctx, const byte *cipher,byte *clear, int blocks); |
| 49 /* Encrypts several full blocks in CFB mode using 8byte IV */ |
| 50 void gost_enc_cfb(gost_ctx *ctx,const byte *iv,const byte *clear,byte *cipher,in
t blocks); |
| 51 /* Decrypts several full blocks in CFB mode using 8byte IV */ |
| 52 void gost_dec_cfb(gost_ctx *ctx,const byte *iv,const byte *cipher,byte *clear,in
t blocks); |
| 53 |
| 54 /* Encrypt one block */ |
| 55 void gostcrypt(gost_ctx *c, const byte *in, byte *out); |
| 56 /* Decrypt one block */ |
| 57 void gostdecrypt(gost_ctx *c, const byte *in,byte *out); |
| 58 /* Set key into context */ |
| 59 void gost_key(gost_ctx *ctx, const byte *key); |
| 60 /* Get key from context */ |
| 61 void gost_get_key(gost_ctx *ctx, byte *key); |
| 62 /* Set S-blocks into context */ |
| 63 void gost_init(gost_ctx *ctx, const gost_subst_block *subst_block); |
| 64 /* Clean up context */ |
| 65 void gost_destroy(gost_ctx *ctx); |
| 66 /* Intermediate function used for calculate hash */ |
| 67 void gost_enc_with_key(gost_ctx *,byte *key,byte *inblock,byte *outblock); |
| 68 /* Compute MAC of given length in bits from data */ |
| 69 int gost_mac(gost_ctx *ctx,int hmac_len,const unsigned char *data, |
| 70 unsigned int data_len,unsigned char *hmac) ; |
| 71 /* Compute MAC of given length in bits from data, using non-zero 8-byte |
| 72 * IV (non-standard, for use in CryptoPro key transport only */ |
| 73 int gost_mac_iv(gost_ctx *ctx,int hmac_len,const unsigned char *iv,const unsigne
d char *data, |
| 74 unsigned int data_len,unsigned char *hmac) ; |
| 75 /* Perform one step of MAC calculation like gostcrypt */ |
| 76 void mac_block(gost_ctx *c,byte *buffer,const byte *block); |
| 77 /* Extracts MAC value from mac state buffer */ |
| 78 void get_mac(byte *buffer,int nbits,byte *out); |
| 79 /* Implements cryptopro key meshing algorithm. Expect IV to be 8-byte size*/ |
| 80 void cryptopro_key_meshing(gost_ctx *ctx, unsigned char *iv); |
| 81 /* Parameter sets specified in RFC 4357 */ |
| 82 extern gost_subst_block GostR3411_94_TestParamSet; |
| 83 extern gost_subst_block GostR3411_94_CryptoProParamSet; |
| 84 extern gost_subst_block Gost28147_TestParamSet; |
| 85 extern gost_subst_block Gost28147_CryptoProParamSetA; |
| 86 extern gost_subst_block Gost28147_CryptoProParamSetB; |
| 87 extern gost_subst_block Gost28147_CryptoProParamSetC; |
| 88 extern gost_subst_block Gost28147_CryptoProParamSetD; |
| 89 extern const byte CryptoProKeyMeshingKey[]; |
| 90 #if __LONG_MAX__ > 2147483647L |
| 91 typedef unsigned int word32; |
| 92 #else |
| 93 typedef unsigned long word32; |
| 94 #endif |
| 95 |
| 96 #endif |
OLD | NEW |