1 | /* |
2 | * Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved. |
3 | * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved |
4 | * |
5 | * Licensed under the Apache License 2.0 (the "License"). You may not use |
6 | * this file except in compliance with the License. You can obtain a copy |
7 | * in the file LICENSE in the source distribution or at |
8 | * https://www.openssl.org/source/license.html |
9 | */ |
10 | |
11 | #include "eng_local.h" |
12 | #include <openssl/conf.h> |
13 | |
14 | int ENGINE_set_default(ENGINE *e, unsigned int flags) |
15 | { |
16 | if ((flags & ENGINE_METHOD_CIPHERS) && !ENGINE_set_default_ciphers(e)) |
17 | return 0; |
18 | if ((flags & ENGINE_METHOD_DIGESTS) && !ENGINE_set_default_digests(e)) |
19 | return 0; |
20 | #ifndef OPENSSL_NO_RSA |
21 | if ((flags & ENGINE_METHOD_RSA) && !ENGINE_set_default_RSA(e)) |
22 | return 0; |
23 | #endif |
24 | #ifndef OPENSSL_NO_DSA |
25 | if ((flags & ENGINE_METHOD_DSA) && !ENGINE_set_default_DSA(e)) |
26 | return 0; |
27 | #endif |
28 | #ifndef OPENSSL_NO_DH |
29 | if ((flags & ENGINE_METHOD_DH) && !ENGINE_set_default_DH(e)) |
30 | return 0; |
31 | #endif |
32 | #ifndef OPENSSL_NO_EC |
33 | if ((flags & ENGINE_METHOD_EC) && !ENGINE_set_default_EC(e)) |
34 | return 0; |
35 | #endif |
36 | if ((flags & ENGINE_METHOD_RAND) && !ENGINE_set_default_RAND(e)) |
37 | return 0; |
38 | if ((flags & ENGINE_METHOD_PKEY_METHS) |
39 | && !ENGINE_set_default_pkey_meths(e)) |
40 | return 0; |
41 | if ((flags & ENGINE_METHOD_PKEY_ASN1_METHS) |
42 | && !ENGINE_set_default_pkey_asn1_meths(e)) |
43 | return 0; |
44 | return 1; |
45 | } |
46 | |
47 | /* Set default algorithms using a string */ |
48 | |
49 | static int int_def_cb(const char *alg, int len, void *arg) |
50 | { |
51 | unsigned int *pflags = arg; |
52 | if (alg == NULL) |
53 | return 0; |
54 | if (strncmp(alg, "ALL" , len) == 0) |
55 | *pflags |= ENGINE_METHOD_ALL; |
56 | else if (strncmp(alg, "RSA" , len) == 0) |
57 | *pflags |= ENGINE_METHOD_RSA; |
58 | else if (strncmp(alg, "DSA" , len) == 0) |
59 | *pflags |= ENGINE_METHOD_DSA; |
60 | else if (strncmp(alg, "DH" , len) == 0) |
61 | *pflags |= ENGINE_METHOD_DH; |
62 | else if (strncmp(alg, "EC" , len) == 0) |
63 | *pflags |= ENGINE_METHOD_EC; |
64 | else if (strncmp(alg, "RAND" , len) == 0) |
65 | *pflags |= ENGINE_METHOD_RAND; |
66 | else if (strncmp(alg, "CIPHERS" , len) == 0) |
67 | *pflags |= ENGINE_METHOD_CIPHERS; |
68 | else if (strncmp(alg, "DIGESTS" , len) == 0) |
69 | *pflags |= ENGINE_METHOD_DIGESTS; |
70 | else if (strncmp(alg, "PKEY" , len) == 0) |
71 | *pflags |= ENGINE_METHOD_PKEY_METHS | ENGINE_METHOD_PKEY_ASN1_METHS; |
72 | else if (strncmp(alg, "PKEY_CRYPTO" , len) == 0) |
73 | *pflags |= ENGINE_METHOD_PKEY_METHS; |
74 | else if (strncmp(alg, "PKEY_ASN1" , len) == 0) |
75 | *pflags |= ENGINE_METHOD_PKEY_ASN1_METHS; |
76 | else |
77 | return 0; |
78 | return 1; |
79 | } |
80 | |
81 | int ENGINE_set_default_string(ENGINE *e, const char *def_list) |
82 | { |
83 | unsigned int flags = 0; |
84 | if (!CONF_parse_list(def_list, ',', 1, int_def_cb, &flags)) { |
85 | ENGINEerr(ENGINE_F_ENGINE_SET_DEFAULT_STRING, |
86 | ENGINE_R_INVALID_STRING); |
87 | ERR_add_error_data(2, "str=" , def_list); |
88 | return 0; |
89 | } |
90 | return ENGINE_set_default(e, flags); |
91 | } |
92 | |
93 | int ENGINE_register_complete(ENGINE *e) |
94 | { |
95 | ENGINE_register_ciphers(e); |
96 | ENGINE_register_digests(e); |
97 | #ifndef OPENSSL_NO_RSA |
98 | ENGINE_register_RSA(e); |
99 | #endif |
100 | #ifndef OPENSSL_NO_DSA |
101 | ENGINE_register_DSA(e); |
102 | #endif |
103 | #ifndef OPENSSL_NO_DH |
104 | ENGINE_register_DH(e); |
105 | #endif |
106 | #ifndef OPENSSL_NO_EC |
107 | ENGINE_register_EC(e); |
108 | #endif |
109 | ENGINE_register_RAND(e); |
110 | ENGINE_register_pkey_meths(e); |
111 | ENGINE_register_pkey_asn1_meths(e); |
112 | return 1; |
113 | } |
114 | |
115 | int ENGINE_register_all_complete(void) |
116 | { |
117 | ENGINE *e; |
118 | |
119 | for (e = ENGINE_get_first(); e; e = ENGINE_get_next(e)) |
120 | if (!(e->flags & ENGINE_FLAGS_NO_REGISTER_ALL)) |
121 | ENGINE_register_complete(e); |
122 | return 1; |
123 | } |
124 | |