Branch data Line data Source code
1 : : /**********************************************************************
2 : : * gost_ctl.c *
3 : : * Copyright (c) 2005-2006 Cryptocom LTD *
4 : : * This file is distributed under the same license as OpenSSL *
5 : : * *
6 : : * Implementation of control commands for GOST engine *
7 : : * OpenSSL 0.9.9 libraries required *
8 : : **********************************************************************/
9 : : #include <stdlib.h>
10 : : #include <string.h>
11 : : #include <openssl/crypto.h>
12 : : #include <openssl/err.h>
13 : : #include <openssl/engine.h>
14 : : #include <openssl/buffer.h>
15 : : #include "gost_lcl.h"
16 : :
17 : : static char *gost_params[GOST_PARAM_MAX+1]={NULL};
18 : : static const char *gost_envnames[]={"CRYPT_PARAMS"};
19 : : const ENGINE_CMD_DEFN gost_cmds[]=
20 : : {
21 : : /* { GOST_CTRL_RNG,
22 : : "RNG",
23 : : "Type of random number generator to use",
24 : : ENGINE_CMD_FLAG_STRING
25 : : },
26 : : { GOST_CTRL_RNG_PARAMS,
27 : : "RNG_PARAMS",
28 : : "Parameter for random number generator",
29 : : ENGINE_CMD_FLAG_STRING
30 : : },
31 : : */ { GOST_CTRL_CRYPT_PARAMS,
32 : : "CRYPT_PARAMS",
33 : : "OID of default GOST 28147-89 parameters",
34 : : ENGINE_CMD_FLAG_STRING
35 : : },
36 : : {0,NULL,NULL,0}
37 : : };
38 : :
39 : 727 : void gost_param_free()
40 : : {
41 : : int i;
42 [ + + ]: 1454 : for (i=0;i<=GOST_PARAM_MAX;i++)
43 [ - + ]: 727 : if (gost_params[i]!=NULL)
44 : : {
45 : 0 : OPENSSL_free(gost_params[i]);
46 : 0 : gost_params[i]=NULL;
47 : : }
48 : :
49 : 727 : }
50 : :
51 : 17 : int gost_control_func(ENGINE *e,int cmd,long i, void *p, void (*f)(void))
52 : : {
53 : 17 : int param = cmd-ENGINE_CMD_BASE;
54 : 17 : int ret=0;
55 [ + - ]: 17 : if (param <0 || param >GOST_PARAM_MAX) return -1;
56 : 17 : ret=gost_set_default_param(param,p);
57 : 17 : return ret;
58 : : }
59 : :
60 : 5 : const char *get_gost_engine_param(int param)
61 : : {
62 : : char *tmp;
63 [ + - ]: 5 : if (param <0 || param >GOST_PARAM_MAX) return NULL;
64 [ - + ]: 5 : if (gost_params[param]!=NULL)
65 : : {
66 : : return gost_params[param];
67 : : }
68 : 0 : tmp = getenv(gost_envnames[param]);
69 [ # # ]: 0 : if (tmp)
70 : : {
71 [ # # ]: 0 : if (gost_params[param]) OPENSSL_free(gost_params[param]);
72 : 0 : gost_params[param] = BUF_strdup(tmp);
73 : 0 : return gost_params[param];
74 : : }
75 : : return NULL;
76 : : }
77 : :
78 : 17 : int gost_set_default_param(int param, const char *value)
79 : : {
80 : : const char *tmp;
81 [ + - ]: 17 : if (param <0 || param >GOST_PARAM_MAX) return 0;
82 : 17 : tmp = getenv(gost_envnames[param]);
83 : : /* if there is value in the environment, use it, else -passed string * */
84 [ + - ]: 17 : if (!tmp) tmp=value;
85 [ + + ]: 17 : if (gost_params[param]) OPENSSL_free(gost_params[param]);
86 : 17 : gost_params[param] = BUF_strdup(tmp);
87 : :
88 : 17 : return 1;
89 : : }
|