OpenSSL
1.0.1c
Main Page
Classes
Files
File List
File Members
All
Classes
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
engines
ccgost
gost89.h
Go to the documentation of this file.
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,
int
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,
int
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
unsigned
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
Generated on Thu Jan 10 2013 09:53:41 for OpenSSL by
1.8.2