Coverage Report

Created: 2025-07-01 06:25

/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
0
{
13
0
    HASH_HashType ht = HASH_AlgNULL;
14
15
0
    switch (hashOid) {
16
0
        case SEC_OID_MD2:
17
0
            ht = HASH_AlgMD2;
18
0
            break;
19
0
        case SEC_OID_MD5:
20
0
            ht = HASH_AlgMD5;
21
0
            break;
22
0
        case SEC_OID_SHA1:
23
0
            ht = HASH_AlgSHA1;
24
0
            break;
25
0
        case SEC_OID_SHA224:
26
0
            ht = HASH_AlgSHA224;
27
0
            break;
28
0
        case SEC_OID_SHA256:
29
0
            ht = HASH_AlgSHA256;
30
0
            break;
31
0
        case SEC_OID_SHA384:
32
0
            ht = HASH_AlgSHA384;
33
0
            break;
34
0
        case SEC_OID_SHA512:
35
0
            ht = HASH_AlgSHA512;
36
0
            break;
37
0
        case SEC_OID_SHA3_224:
38
0
            ht = HASH_AlgSHA3_224;
39
0
            break;
40
0
        case SEC_OID_SHA3_256:
41
0
            ht = HASH_AlgSHA3_256;
42
0
            break;
43
0
        case SEC_OID_SHA3_384:
44
0
            ht = HASH_AlgSHA3_384;
45
0
            break;
46
0
        case SEC_OID_SHA3_512:
47
0
            ht = HASH_AlgSHA3_512;
48
0
            break;
49
0
        default:
50
0
            PORT_SetError(SEC_ERROR_INVALID_ALGORITHM);
51
0
            break;
52
0
    }
53
0
    return ht;
54
0
}
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
0
{
105
0
    SECOidTag hashOid = SEC_OID_UNKNOWN;
106
107
0
    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
0
        case SEC_OID_HMAC_SHA1:
114
0
            hashOid = SEC_OID_SHA1;
115
0
            break;
116
0
        case SEC_OID_HMAC_SHA224:
117
0
            hashOid = SEC_OID_SHA224;
118
0
            break;
119
0
        case SEC_OID_HMAC_SHA256:
120
0
            hashOid = SEC_OID_SHA256;
121
0
            break;
122
0
        case SEC_OID_HMAC_SHA384:
123
0
            hashOid = SEC_OID_SHA384;
124
0
            break;
125
0
        case SEC_OID_HMAC_SHA512:
126
0
            hashOid = SEC_OID_SHA512;
127
0
            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
0
    }
145
0
    return hashOid;
146
0
}
147
148
SECOidTag
149
HASH_GetHMACOidTagByHashOidTag(SECOidTag hashOid)
150
0
{
151
0
    SECOidTag hmacOid = SEC_OID_UNKNOWN;
152
153
0
    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
0
        case SEC_OID_SHA1:
160
0
            hmacOid = SEC_OID_HMAC_SHA1;
161
0
            break;
162
0
        case SEC_OID_SHA224:
163
0
            hmacOid = SEC_OID_HMAC_SHA224;
164
0
            break;
165
0
        case SEC_OID_SHA256:
166
0
            hmacOid = SEC_OID_HMAC_SHA256;
167
0
            break;
168
0
        case SEC_OID_SHA384:
169
0
            hmacOid = SEC_OID_HMAC_SHA384;
170
0
            break;
171
0
        case SEC_OID_SHA512:
172
0
            hmacOid = SEC_OID_HMAC_SHA512;
173
0
            break;
174
0
        case SEC_OID_SHA3_224:
175
0
            hmacOid = SEC_OID_HMAC_SHA3_224;
176
0
            break;
177
0
        case SEC_OID_SHA3_256:
178
0
            hmacOid = SEC_OID_HMAC_SHA3_256;
179
0
            break;
180
0
        case SEC_OID_SHA3_384:
181
0
            hmacOid = SEC_OID_HMAC_SHA3_384;
182
0
            break;
183
0
        case SEC_OID_SHA3_512:
184
0
            hmacOid = SEC_OID_HMAC_SHA3_512;
185
0
            break;
186
0
        default:
187
0
            hmacOid = SEC_OID_UNKNOWN;
188
0
            PORT_SetError(SEC_ERROR_INVALID_ALGORITHM);
189
0
            break;
190
0
    }
191
0
    return hmacOid;
192
0
}