| Index: openssl/engines/ccgost/gost89.h
|
| ===================================================================
|
| --- openssl/engines/ccgost/gost89.h (revision 0)
|
| +++ openssl/engines/ccgost/gost89.h (revision 0)
|
| @@ -0,0 +1,96 @@
|
| +/**********************************************************************
|
| + * gost89.h *
|
| + * Copyright (c) 2005-2006 Cryptocom LTD *
|
| + * This file is distributed under the same license as OpenSSL *
|
| + * *
|
| + * Declarations for GOST 28147-89 encryption algorithm *
|
| + * No OpenSSL libraries required to compile and use *
|
| + * this code *
|
| + **********************************************************************/
|
| +#ifndef GOST89_H
|
| +#define GOST89_H
|
| +
|
| +/* Typedef for unsigned 32-bit integer */
|
| +#if __LONG_MAX__ > 2147483647L
|
| +typedef unsigned int u4;
|
| +#else
|
| +typedef unsigned long u4;
|
| +#endif
|
| +/* Typedef for unsigned 8-bit integer */
|
| +typedef unsigned char byte;
|
| +
|
| +/* Internal representation of GOST substitution blocks */
|
| +typedef struct {
|
| + byte k8[16];
|
| + byte k7[16];
|
| + byte k6[16];
|
| + byte k5[16];
|
| + byte k4[16];
|
| + byte k3[16];
|
| + byte k2[16];
|
| + byte k1[16];
|
| +} gost_subst_block;
|
| +
|
| +
|
| +/* Cipher context includes key and preprocessed substitution block */
|
| +typedef struct {
|
| + u4 k[8];
|
| + /* Constant s-boxes -- set up in gost_init(). */
|
| + u4 k87[256],k65[256],k43[256],k21[256];
|
| +} gost_ctx;
|
| +/* Note: encrypt and decrypt expect full blocks--padding blocks is
|
| + caller's responsibility. All bulk encryption is done in
|
| + ECB mode by these calls. Other modes may be added easily
|
| + enough. */
|
| +/* Encrypt several full blocks in ECB mode */
|
| +void gost_enc(gost_ctx *ctx, const byte *clear,byte *cipher, int blocks);
|
| +/* Decrypt several full blocks in ECB mode */
|
| +void gost_dec(gost_ctx *ctx, const byte *cipher,byte *clear, int blocks);
|
| +/* Encrypts several full blocks in CFB mode using 8byte IV */
|
| +void gost_enc_cfb(gost_ctx *ctx,const byte *iv,const byte *clear,byte *cipher,int blocks);
|
| +/* Decrypts several full blocks in CFB mode using 8byte IV */
|
| +void gost_dec_cfb(gost_ctx *ctx,const byte *iv,const byte *cipher,byte *clear,int blocks);
|
| +
|
| +/* Encrypt one block */
|
| +void gostcrypt(gost_ctx *c, const byte *in, byte *out);
|
| +/* Decrypt one block */
|
| +void gostdecrypt(gost_ctx *c, const byte *in,byte *out);
|
| +/* Set key into context */
|
| +void gost_key(gost_ctx *ctx, const byte *key);
|
| +/* Get key from context */
|
| +void gost_get_key(gost_ctx *ctx, byte *key);
|
| +/* Set S-blocks into context */
|
| +void gost_init(gost_ctx *ctx, const gost_subst_block *subst_block);
|
| +/* Clean up context */
|
| +void gost_destroy(gost_ctx *ctx);
|
| +/* Intermediate function used for calculate hash */
|
| +void gost_enc_with_key(gost_ctx *,byte *key,byte *inblock,byte *outblock);
|
| +/* Compute MAC of given length in bits from data */
|
| +int gost_mac(gost_ctx *ctx,int hmac_len,const unsigned char *data,
|
| + unsigned int data_len,unsigned char *hmac) ;
|
| +/* Compute MAC of given length in bits from data, using non-zero 8-byte
|
| + * IV (non-standard, for use in CryptoPro key transport only */
|
| +int gost_mac_iv(gost_ctx *ctx,int hmac_len,const unsigned char *iv,const unsigned char *data,
|
| + unsigned int data_len,unsigned char *hmac) ;
|
| +/* Perform one step of MAC calculation like gostcrypt */
|
| +void mac_block(gost_ctx *c,byte *buffer,const byte *block);
|
| +/* Extracts MAC value from mac state buffer */
|
| +void get_mac(byte *buffer,int nbits,byte *out);
|
| +/* Implements cryptopro key meshing algorithm. Expect IV to be 8-byte size*/
|
| +void cryptopro_key_meshing(gost_ctx *ctx, unsigned char *iv);
|
| +/* Parameter sets specified in RFC 4357 */
|
| +extern gost_subst_block GostR3411_94_TestParamSet;
|
| +extern gost_subst_block GostR3411_94_CryptoProParamSet;
|
| +extern gost_subst_block Gost28147_TestParamSet;
|
| +extern gost_subst_block Gost28147_CryptoProParamSetA;
|
| +extern gost_subst_block Gost28147_CryptoProParamSetB;
|
| +extern gost_subst_block Gost28147_CryptoProParamSetC;
|
| +extern gost_subst_block Gost28147_CryptoProParamSetD;
|
| +extern const byte CryptoProKeyMeshingKey[];
|
| +#if __LONG_MAX__ > 2147483647L
|
| +typedef unsigned int word32;
|
| +#else
|
| +typedef unsigned long word32;
|
| +#endif
|
| +
|
| +#endif
|
|
|