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