Coverage Report

Created: 2025-04-22 06:18

/src/nss/lib/util/nsshash.c
Line
Count
Source (jump to first uncovered line)
1
/* This Source Code Form is subject to the terms of the Mozilla Public
2
 * License, v. 2.0. If a copy of the MPL was not distributed with this
3
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4
5
#include "secoidt.h"
6
#include "secerr.h"
7
#include "nsshash.h"
8
9
/* put these mapping functions in util, so they can be used everywhere */
10
HASH_HashType
11
HASH_GetHashTypeByOidTag(SECOidTag hashOid)
12
360k
{
13
360k
    HASH_HashType ht = HASH_AlgNULL;
14
15
360k
    switch (hashOid) {
16
0
        case SEC_OID_MD2:
17
0
            ht = HASH_AlgMD2;
18
0
            break;
19
8.59k
        case SEC_OID_MD5:
20
8.59k
            ht = HASH_AlgMD5;
21
8.59k
            break;
22
237k
        case SEC_OID_SHA1:
23
237k
            ht = HASH_AlgSHA1;
24
237k
            break;
25
13.3k
        case SEC_OID_SHA224:
26
13.3k
            ht = HASH_AlgSHA224;
27
13.3k
            break;
28
47.0k
        case SEC_OID_SHA256:
29
47.0k
            ht = HASH_AlgSHA256;
30
47.0k
            break;
31
23.5k
        case SEC_OID_SHA384:
32
23.5k
            ht = HASH_AlgSHA384;
33
23.5k
            break;
34
15.7k
        case SEC_OID_SHA512:
35
15.7k
            ht = HASH_AlgSHA512;
36
15.7k
            break;
37
228
        case SEC_OID_SHA3_224:
38
228
            ht = HASH_AlgSHA3_224;
39
228
            break;
40
444
        case SEC_OID_SHA3_256:
41
444
            ht = HASH_AlgSHA3_256;
42
444
            break;
43
2.71k
        case SEC_OID_SHA3_384:
44
2.71k
            ht = HASH_AlgSHA3_384;
45
2.71k
            break;
46
1.38k
        case SEC_OID_SHA3_512:
47
1.38k
            ht = HASH_AlgSHA3_512;
48
1.38k
            break;
49
10.2k
        default:
50
10.2k
            PORT_SetError(SEC_ERROR_INVALID_ALGORITHM);
51
10.2k
            break;
52
360k
    }
53
360k
    return ht;
54
360k
}
55
56
SECOidTag
57
HASH_GetHashOidTagByHashType(HASH_HashType type)
58
0
{
59
0
    SECOidTag oid = SEC_OID_UNKNOWN;
60
61
0
    switch (type) {
62
0
        case HASH_AlgMD2:
63
0
            oid = SEC_OID_MD2;
64
0
            break;
65
0
        case HASH_AlgMD5:
66
0
            oid = SEC_OID_MD5;
67
0
            break;
68
0
        case HASH_AlgSHA1:
69
0
            oid = SEC_OID_SHA1;
70
0
            break;
71
0
        case HASH_AlgSHA224:
72
0
            oid = SEC_OID_SHA224;
73
0
            break;
74
0
        case HASH_AlgSHA256:
75
0
            oid = SEC_OID_SHA256;
76
0
            break;
77
0
        case HASH_AlgSHA384:
78
0
            oid = SEC_OID_SHA384;
79
0
            break;
80
0
        case HASH_AlgSHA512:
81
0
            oid = SEC_OID_SHA512;
82
0
            break;
83
0
        case HASH_AlgSHA3_224:
84
0
            oid = SEC_OID_SHA3_224;
85
0
            break;
86
0
        case HASH_AlgSHA3_256:
87
0
            oid = SEC_OID_SHA3_256;
88
0
            break;
89
0
        case HASH_AlgSHA3_384:
90
0
            oid = SEC_OID_SHA3_384;
91
0
            break;
92
0
        case HASH_AlgSHA3_512:
93
0
            oid = SEC_OID_SHA3_512;
94
0
            break;
95
0
        default:
96
0
            PORT_SetError(SEC_ERROR_INVALID_ALGORITHM);
97
0
            break;
98
0
    }
99
0
    return oid;
100
0
}
101
102
SECOidTag
103
HASH_GetHashOidTagByHMACOidTag(SECOidTag hmacOid)
104
100
{
105
100
    SECOidTag hashOid = SEC_OID_UNKNOWN;
106
107
100
    switch (hmacOid) {
108
        /* no oid exists for HMAC_MD2 */
109
        /* NSS does not define a oid for HMAC_MD4 */
110
0
        case SEC_OID_HMAC_MD5:
111
0
            hashOid = SEC_OID_MD5;
112
0
            break;
113
2
        case SEC_OID_HMAC_SHA1:
114
2
            hashOid = SEC_OID_SHA1;
115
2
            break;
116
0
        case SEC_OID_HMAC_SHA224:
117
0
            hashOid = SEC_OID_SHA224;
118
0
            break;
119
92
        case SEC_OID_HMAC_SHA256:
120
92
            hashOid = SEC_OID_SHA256;
121
92
            break;
122
0
        case SEC_OID_HMAC_SHA384:
123
0
            hashOid = SEC_OID_SHA384;
124
0
            break;
125
6
        case SEC_OID_HMAC_SHA512:
126
6
            hashOid = SEC_OID_SHA512;
127
6
            break;
128
0
        case SEC_OID_HMAC_SHA3_224:
129
0
            hashOid = SEC_OID_SHA3_224;
130
0
            break;
131
0
        case SEC_OID_HMAC_SHA3_256:
132
0
            hashOid = SEC_OID_SHA3_256;
133
0
            break;
134
0
        case SEC_OID_HMAC_SHA3_384:
135
0
            hashOid = SEC_OID_SHA3_384;
136
0
            break;
137
0
        case SEC_OID_HMAC_SHA3_512:
138
0
            hashOid = SEC_OID_SHA3_512;
139
0
            break;
140
0
        default:
141
0
            hashOid = SEC_OID_UNKNOWN;
142
0
            PORT_SetError(SEC_ERROR_INVALID_ALGORITHM);
143
0
            break;
144
100
    }
145
100
    return hashOid;
146
100
}
147
148
SECOidTag
149
HASH_GetHMACOidTagByHashOidTag(SECOidTag hashOid)
150
198
{
151
198
    SECOidTag hmacOid = SEC_OID_UNKNOWN;
152
153
198
    switch (hashOid) {
154
        /* no oid exists for HMAC_MD2 */
155
        /* NSS does not define a oid for HMAC_MD4 */
156
0
        case SEC_OID_MD5:
157
0
            hmacOid = SEC_OID_HMAC_MD5;
158
0
            break;
159
10
        case SEC_OID_SHA1:
160
10
            hmacOid = SEC_OID_HMAC_SHA1;
161
10
            break;
162
35
        case SEC_OID_SHA224:
163
35
            hmacOid = SEC_OID_HMAC_SHA224;
164
35
            break;
165
36
        case SEC_OID_SHA256:
166
36
            hmacOid = SEC_OID_HMAC_SHA256;
167
36
            break;
168
58
        case SEC_OID_SHA384:
169
58
            hmacOid = SEC_OID_HMAC_SHA384;
170
58
            break;
171
48
        case SEC_OID_SHA512:
172
48
            hmacOid = SEC_OID_HMAC_SHA512;
173
48
            break;
174
1
        case SEC_OID_SHA3_224:
175
1
            hmacOid = SEC_OID_HMAC_SHA3_224;
176
1
            break;
177
1
        case SEC_OID_SHA3_256:
178
1
            hmacOid = SEC_OID_HMAC_SHA3_256;
179
1
            break;
180
1
        case SEC_OID_SHA3_384:
181
1
            hmacOid = SEC_OID_HMAC_SHA3_384;
182
1
            break;
183
1
        case SEC_OID_SHA3_512:
184
1
            hmacOid = SEC_OID_HMAC_SHA3_512;
185
1
            break;
186
7
        default:
187
7
            hmacOid = SEC_OID_UNKNOWN;
188
7
            PORT_SetError(SEC_ERROR_INVALID_ALGORITHM);
189
7
            break;
190
198
    }
191
198
    return hmacOid;
192
198
}