1 /**********************************************************************
3 * Copyright (c) 2005-2006 Cryptocom LTD *
4 * This file is distributed under the same license as OpenSSL *
6 * Implementation of control commands for GOST engine *
7 * OpenSSL 0.9.9 libraries required *
8 **********************************************************************/
11 #include <openssl/crypto.h>
12 #include <openssl/err.h>
13 #include <openssl/engine.h>
14 #include <openssl/buffer.h>
17 static char *gost_params
[GOST_PARAM_MAX
+ 1] = { NULL
};
18 static const char *gost_envnames
[] = { "CRYPT_PARAMS" };
20 const ENGINE_CMD_DEFN gost_cmds
[] = {
23 "Type of random number generator to use",
24 ENGINE_CMD_FLAG_STRING
26 { GOST_CTRL_RNG_PARAMS,
28 "Parameter for random number generator",
29 ENGINE_CMD_FLAG_STRING
31 */ {GOST_CTRL_CRYPT_PARAMS
,
33 "OID of default GOST 28147-89 parameters",
34 ENGINE_CMD_FLAG_STRING
},
38 void gost_param_free()
42 for (i
= 0; i
<= GOST_PARAM_MAX
; i
++) {
43 OPENSSL_free(gost_params
[i
]);
44 gost_params
[i
] = NULL
;
49 int gost_control_func(ENGINE
*e
, int cmd
, long i
, void *p
, void (*f
) (void))
51 int param
= cmd
- ENGINE_CMD_BASE
;
53 if (param
< 0 || param
> GOST_PARAM_MAX
)
55 ret
= gost_set_default_param(param
, p
);
59 const char *get_gost_engine_param(int param
)
62 if (param
< 0 || param
> GOST_PARAM_MAX
)
64 if (gost_params
[param
] != NULL
) {
65 return gost_params
[param
];
67 tmp
= getenv(gost_envnames
[param
]);
69 OPENSSL_free(gost_params
[param
]);
70 gost_params
[param
] = OPENSSL_strdup(tmp
);
71 return gost_params
[param
];
76 int gost_set_default_param(int param
, const char *value
)
79 if (param
< 0 || param
> GOST_PARAM_MAX
)
81 tmp
= getenv(gost_envnames
[param
]);
83 * if there is value in the environment, use it, else -passed string *
87 OPENSSL_free(gost_params
[param
]);
88 gost_params
[param
] = OPENSSL_strdup(tmp
);