1 /*
2  * NSS utility functions
3  *
4  * This Source Code Form is subject to the terms of the Mozilla Public
5  * License, v. 2.0. If a copy of the MPL was not distributed with this
6  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
7 
8 #include <ctype.h>
9 #include <string.h>
10 #include <assert.h>
11 
12 #include "seccomon.h"
13 #include "secoidt.h"
14 #include "secoid.h"
15 #include "nss.h"
16 #include "nssoptions.h"
17 
18 struct nssOps {
19     PRInt32 rsaMinKeySize;
20     PRInt32 dhMinKeySize;
21     PRInt32 dsaMinKeySize;
22     PRInt32 tlsVersionMinPolicy;
23     PRInt32 tlsVersionMaxPolicy;
24     PRInt32 dtlsVersionMinPolicy;
25     PRInt32 dtlsVersionMaxPolicy;
26     PRInt32 pkcs12DecodeForceUnicode;
27 };
28 
29 static struct nssOps nss_ops = {
30     SSL_RSA_MIN_MODULUS_BITS,
31     SSL_DH_MIN_P_BITS,
32     SSL_DSA_MIN_P_BITS,
33     1,      /* Set TLS min to less the the smallest legal SSL value */
34     0xffff, /* set TLS max to more than the largest legal SSL value */
35     1,
36     0xffff,
37     PR_FALSE
38 };
39 
40 SECStatus
NSS_OptionSet(PRInt32 which,PRInt32 value)41 NSS_OptionSet(PRInt32 which, PRInt32 value)
42 {
43     SECStatus rv = SECSuccess;
44 
45     switch (which) {
46         case NSS_RSA_MIN_KEY_SIZE:
47             nss_ops.rsaMinKeySize = value;
48             break;
49         case NSS_DH_MIN_KEY_SIZE:
50             nss_ops.dhMinKeySize = value;
51             break;
52         case NSS_DSA_MIN_KEY_SIZE:
53             nss_ops.dsaMinKeySize = value;
54             break;
55         case NSS_TLS_VERSION_MIN_POLICY:
56             nss_ops.tlsVersionMinPolicy = value;
57             break;
58         case NSS_TLS_VERSION_MAX_POLICY:
59             nss_ops.tlsVersionMaxPolicy = value;
60             break;
61         case NSS_DTLS_VERSION_MIN_POLICY:
62             nss_ops.dtlsVersionMinPolicy = value;
63             break;
64         case NSS_DTLS_VERSION_MAX_POLICY:
65             nss_ops.dtlsVersionMaxPolicy = value;
66             break;
67         case __NSS_PKCS12_DECODE_FORCE_UNICODE:
68             nss_ops.pkcs12DecodeForceUnicode = value;
69             break;
70         default:
71             rv = SECFailure;
72     }
73 
74     return rv;
75 }
76 
77 SECStatus
NSS_OptionGet(PRInt32 which,PRInt32 * value)78 NSS_OptionGet(PRInt32 which, PRInt32 *value)
79 {
80     SECStatus rv = SECSuccess;
81 
82     switch (which) {
83         case NSS_RSA_MIN_KEY_SIZE:
84             *value = nss_ops.rsaMinKeySize;
85             break;
86         case NSS_DH_MIN_KEY_SIZE:
87             *value = nss_ops.dhMinKeySize;
88             break;
89         case NSS_DSA_MIN_KEY_SIZE:
90             *value = nss_ops.dsaMinKeySize;
91             break;
92         case NSS_TLS_VERSION_MIN_POLICY:
93             *value = nss_ops.tlsVersionMinPolicy;
94             break;
95         case NSS_TLS_VERSION_MAX_POLICY:
96             *value = nss_ops.tlsVersionMaxPolicy;
97             break;
98         case NSS_DTLS_VERSION_MIN_POLICY:
99             *value = nss_ops.dtlsVersionMinPolicy;
100             break;
101         case NSS_DTLS_VERSION_MAX_POLICY:
102             *value = nss_ops.dtlsVersionMaxPolicy;
103             break;
104         case __NSS_PKCS12_DECODE_FORCE_UNICODE:
105             *value = nss_ops.pkcs12DecodeForceUnicode;
106             break;
107         default:
108             rv = SECFailure;
109     }
110 
111     return rv;
112 }
113