Absolute File Name: | /home/opencoverage/opencoverage/guest-scripts/libressl/src/crypto/rsa/rsa_pss.c |
Switch to Source code | Preprocessed file |
Line | Source | Count | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | - | |||||||||||||||||||
2 | - | |||||||||||||||||||
3 | static const unsigned char zeroes[] = { 0, 0, 0, 0, 0, 0, 0, 0 }; | - | ||||||||||||||||||
4 | - | |||||||||||||||||||
5 | int | - | ||||||||||||||||||
6 | RSA_verify_PKCS1_PSS(RSA *rsa, const unsigned char *mHash, const EVP_MD *Hash, | - | ||||||||||||||||||
7 | const unsigned char *EM, int sLen) | - | ||||||||||||||||||
8 | { | - | ||||||||||||||||||
9 | return never executed: RSA_verify_PKCS1_PSS_mgf1(rsa, mHash, Hash, return RSA_verify_PKCS1_PSS_mgf1(rsa, mHash, Hash, ((void *)0) , EM, sLen); never executed: return RSA_verify_PKCS1_PSS_mgf1(rsa, mHash, Hash, ((void *)0) , EM, sLen); | 0 | ||||||||||||||||||
10 | ((void *)0) never executed: return RSA_verify_PKCS1_PSS_mgf1(rsa, mHash, Hash, ((void *)0) , EM, sLen); | 0 | ||||||||||||||||||
11 | , EM, sLen); never executed: return RSA_verify_PKCS1_PSS_mgf1(rsa, mHash, Hash, ((void *)0) , EM, sLen); | 0 | ||||||||||||||||||
12 | } | - | ||||||||||||||||||
13 | - | |||||||||||||||||||
14 | int | - | ||||||||||||||||||
15 | RSA_verify_PKCS1_PSS_mgf1(RSA *rsa, const unsigned char *mHash, | - | ||||||||||||||||||
16 | const EVP_MD *Hash, const EVP_MD *mgf1Hash, const unsigned char *EM, | - | ||||||||||||||||||
17 | int sLen) | - | ||||||||||||||||||
18 | { | - | ||||||||||||||||||
19 | int i; | - | ||||||||||||||||||
20 | int ret = 0; | - | ||||||||||||||||||
21 | int hLen, maskedDBLen, MSBits, emLen; | - | ||||||||||||||||||
22 | const unsigned char *H; | - | ||||||||||||||||||
23 | unsigned char *DB = | - | ||||||||||||||||||
24 | ((void *)0) | - | ||||||||||||||||||
25 | ; | - | ||||||||||||||||||
26 | EVP_MD_CTX ctx; | - | ||||||||||||||||||
27 | unsigned char H_[64]; | - | ||||||||||||||||||
28 | - | |||||||||||||||||||
29 | EVP_MD_CTX_init(&ctx); | - | ||||||||||||||||||
30 | - | |||||||||||||||||||
31 | if (mgf1Hash ==
| 0 | ||||||||||||||||||
32 | ((void *)0)
| 0 | ||||||||||||||||||
33 | ) | - | ||||||||||||||||||
34 | mgf1Hash = Hash; never executed: mgf1Hash = Hash; | 0 | ||||||||||||||||||
35 | - | |||||||||||||||||||
36 | hLen = EVP_MD_size(Hash); | - | ||||||||||||||||||
37 | if (hLen < 0
| 0 | ||||||||||||||||||
38 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
39 | - | |||||||||||||||||||
40 | - | |||||||||||||||||||
41 | - | |||||||||||||||||||
42 | - | |||||||||||||||||||
43 | - | |||||||||||||||||||
44 | - | |||||||||||||||||||
45 | if (sLen == -1
| 0 | ||||||||||||||||||
46 | sLen = hLen; never executed: sLen = hLen; | 0 | ||||||||||||||||||
47 | else if (sLen == -2
| 0 | ||||||||||||||||||
48 | sLen = -2; never executed: sLen = -2; | 0 | ||||||||||||||||||
49 | else if (sLen < -2
| 0 | ||||||||||||||||||
50 | ERR_put_error(4,(0xfff),(136),__FILE__,110); | - | ||||||||||||||||||
51 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
52 | } | - | ||||||||||||||||||
53 | - | |||||||||||||||||||
54 | MSBits = (BN_num_bits(rsa->n) - 1) & 0x7; | - | ||||||||||||||||||
55 | emLen = RSA_size(rsa); | - | ||||||||||||||||||
56 | if (EM[0] & (0xFF << MSBits)
| 0 | ||||||||||||||||||
57 | ERR_put_error(4,(0xfff),(133),__FILE__,117); | - | ||||||||||||||||||
58 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
59 | } | - | ||||||||||||||||||
60 | if (MSBits == 0
| 0 | ||||||||||||||||||
61 | EM++; | - | ||||||||||||||||||
62 | emLen--; | - | ||||||||||||||||||
63 | } never executed: end of block | 0 | ||||||||||||||||||
64 | if (emLen < (hLen + sLen + 2)
| 0 | ||||||||||||||||||
65 | - | |||||||||||||||||||
66 | ERR_put_error(4,(0xfff),(109),__FILE__,126); | - | ||||||||||||||||||
67 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
68 | } | - | ||||||||||||||||||
69 | if (EM[emLen - 1] != 0xbc
| 0 | ||||||||||||||||||
70 | ERR_put_error(4,(0xfff),(134),__FILE__,130); | - | ||||||||||||||||||
71 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
72 | } | - | ||||||||||||||||||
73 | maskedDBLen = emLen - hLen - 1; | - | ||||||||||||||||||
74 | H = EM + maskedDBLen; | - | ||||||||||||||||||
75 | DB = malloc(maskedDBLen); | - | ||||||||||||||||||
76 | if (!DB
| 0 | ||||||||||||||||||
77 | ERR_put_error(4,(0xfff),((1|64)),__FILE__,137); | - | ||||||||||||||||||
78 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
79 | } | - | ||||||||||||||||||
80 | if (PKCS1_MGF1(DB, maskedDBLen, H, hLen, mgf1Hash) < 0
| 0 | ||||||||||||||||||
81 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
82 | for (i = 0; i < maskedDBLen
| 0 | ||||||||||||||||||
83 | DB[i] ^= EM[i]; never executed: DB[i] ^= EM[i]; | 0 | ||||||||||||||||||
84 | if (MSBits
| 0 | ||||||||||||||||||
85 | DB[0] &= 0xFF >> (8 - MSBits); never executed: DB[0] &= 0xFF >> (8 - MSBits); | 0 | ||||||||||||||||||
86 | for (i = 0; DB[i] == 0
| 0 | ||||||||||||||||||
87 | ; never executed: ; | 0 | ||||||||||||||||||
88 | if (DB[i++] != 0x1
| 0 | ||||||||||||||||||
89 | ERR_put_error(4,(0xfff),(135),__FILE__,149); | - | ||||||||||||||||||
90 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
91 | } | - | ||||||||||||||||||
92 | if (sLen >= 0
| 0 | ||||||||||||||||||
93 | ERR_put_error(4,(0xfff),(136),__FILE__,153); | - | ||||||||||||||||||
94 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
95 | } | - | ||||||||||||||||||
96 | if (!EVP_DigestInit_ex(&ctx, Hash,
| 0 | ||||||||||||||||||
97 | ((void *)0)
| 0 | ||||||||||||||||||
98 | )
| 0 | ||||||||||||||||||
99 | !EVP_DigestUpdate(&ctx, zeroes, sizeof zeroes)
| 0 | ||||||||||||||||||
100 | !EVP_DigestUpdate(&ctx, mHash, hLen)
| 0 | ||||||||||||||||||
101 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
102 | if (maskedDBLen - i
| 0 | ||||||||||||||||||
103 | if (!EVP_DigestUpdate(&ctx, DB + i, maskedDBLen - i)
| 0 | ||||||||||||||||||
104 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
105 | } never executed: end of block | 0 | ||||||||||||||||||
106 | if (!EVP_DigestFinal_ex(&ctx, H_,
| 0 | ||||||||||||||||||
107 | ((void *)0)
| 0 | ||||||||||||||||||
108 | )
| 0 | ||||||||||||||||||
109 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
110 | if (timingsafe_bcmp(H_, H, hLen)
| 0 | ||||||||||||||||||
111 | ERR_put_error(4,(0xfff),(104),__FILE__,167); | - | ||||||||||||||||||
112 | ret = 0; | - | ||||||||||||||||||
113 | } never executed: elseend of block | 0 | ||||||||||||||||||
114 | ret = 1; never executed: ret = 1; | 0 | ||||||||||||||||||
115 | - | |||||||||||||||||||
116 | err: code before this statement never executed: err: | 0 | ||||||||||||||||||
117 | free(DB); | - | ||||||||||||||||||
118 | EVP_MD_CTX_cleanup(&ctx); | - | ||||||||||||||||||
119 | - | |||||||||||||||||||
120 | return never executed: ret;return ret; never executed: return ret; | 0 | ||||||||||||||||||
121 | } | - | ||||||||||||||||||
122 | - | |||||||||||||||||||
123 | int | - | ||||||||||||||||||
124 | RSA_padding_add_PKCS1_PSS(RSA *rsa, unsigned char *EM, | - | ||||||||||||||||||
125 | const unsigned char *mHash, const EVP_MD *Hash, int sLen) | - | ||||||||||||||||||
126 | { | - | ||||||||||||||||||
127 | return never executed: RSA_padding_add_PKCS1_PSS_mgf1(rsa, EM, mHash, Hash, return RSA_padding_add_PKCS1_PSS_mgf1(rsa, EM, mHash, Hash, ((void *)0) , sLen); never executed: return RSA_padding_add_PKCS1_PSS_mgf1(rsa, EM, mHash, Hash, ((void *)0) , sLen); | 0 | ||||||||||||||||||
128 | ((void *)0) never executed: return RSA_padding_add_PKCS1_PSS_mgf1(rsa, EM, mHash, Hash, ((void *)0) , sLen); | 0 | ||||||||||||||||||
129 | , sLen); never executed: return RSA_padding_add_PKCS1_PSS_mgf1(rsa, EM, mHash, Hash, ((void *)0) , sLen); | 0 | ||||||||||||||||||
130 | } | - | ||||||||||||||||||
131 | - | |||||||||||||||||||
132 | int | - | ||||||||||||||||||
133 | RSA_padding_add_PKCS1_PSS_mgf1(RSA *rsa, unsigned char *EM, | - | ||||||||||||||||||
134 | const unsigned char *mHash, const EVP_MD *Hash, const EVP_MD *mgf1Hash, | - | ||||||||||||||||||
135 | int sLen) | - | ||||||||||||||||||
136 | { | - | ||||||||||||||||||
137 | int i; | - | ||||||||||||||||||
138 | int ret = 0; | - | ||||||||||||||||||
139 | int hLen, maskedDBLen, MSBits, emLen; | - | ||||||||||||||||||
140 | unsigned char *H, *salt = | - | ||||||||||||||||||
141 | ((void *)0) | - | ||||||||||||||||||
142 | , *p; | - | ||||||||||||||||||
143 | EVP_MD_CTX ctx; | - | ||||||||||||||||||
144 | - | |||||||||||||||||||
145 | EVP_MD_CTX_init(&ctx); | - | ||||||||||||||||||
146 | - | |||||||||||||||||||
147 | if (mgf1Hash ==
| 0 | ||||||||||||||||||
148 | ((void *)0)
| 0 | ||||||||||||||||||
149 | ) | - | ||||||||||||||||||
150 | mgf1Hash = Hash; never executed: mgf1Hash = Hash; | 0 | ||||||||||||||||||
151 | - | |||||||||||||||||||
152 | hLen = EVP_MD_size(Hash); | - | ||||||||||||||||||
153 | if (hLen < 0
| 0 | ||||||||||||||||||
154 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
155 | - | |||||||||||||||||||
156 | - | |||||||||||||||||||
157 | - | |||||||||||||||||||
158 | - | |||||||||||||||||||
159 | - | |||||||||||||||||||
160 | - | |||||||||||||||||||
161 | if (sLen == -1
| 0 | ||||||||||||||||||
162 | sLen = hLen; never executed: sLen = hLen; | 0 | ||||||||||||||||||
163 | else if (sLen == -2
| 0 | ||||||||||||||||||
164 | sLen = -2; never executed: sLen = -2; | 0 | ||||||||||||||||||
165 | else if (sLen < -2
| 0 | ||||||||||||||||||
166 | ERR_put_error(4,(0xfff),(136),__FILE__,216); | - | ||||||||||||||||||
167 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
168 | } | - | ||||||||||||||||||
169 | - | |||||||||||||||||||
170 | MSBits = (BN_num_bits(rsa->n) - 1) & 0x7; | - | ||||||||||||||||||
171 | emLen = RSA_size(rsa); | - | ||||||||||||||||||
172 | if (MSBits == 0
| 0 | ||||||||||||||||||
173 | *EM++ = 0; | - | ||||||||||||||||||
174 | emLen--; | - | ||||||||||||||||||
175 | } never executed: end of block | 0 | ||||||||||||||||||
176 | if (sLen == -2
| 0 | ||||||||||||||||||
177 | sLen = emLen - hLen - 2; never executed: sLen = emLen - hLen - 2; | 0 | ||||||||||||||||||
178 | else if (emLen < (hLen + sLen + 2)
| 0 | ||||||||||||||||||
179 | ERR_put_error(4,(0xfff),(110),__FILE__,229); | - | ||||||||||||||||||
180 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
181 | } | - | ||||||||||||||||||
182 | if (sLen > 0
| 0 | ||||||||||||||||||
183 | salt = malloc(sLen); | - | ||||||||||||||||||
184 | if (!salt
| 0 | ||||||||||||||||||
185 | ERR_put_error(4,(0xfff),((1|64)),__FILE__,235); | - | ||||||||||||||||||
186 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
187 | } | - | ||||||||||||||||||
188 | arc4random_buf(salt, sLen); | - | ||||||||||||||||||
189 | } never executed: end of block | 0 | ||||||||||||||||||
190 | maskedDBLen = emLen - hLen - 1; | - | ||||||||||||||||||
191 | H = EM + maskedDBLen; | - | ||||||||||||||||||
192 | if (!EVP_DigestInit_ex(&ctx, Hash,
| 0 | ||||||||||||||||||
193 | ((void *)0)
| 0 | ||||||||||||||||||
194 | )
| 0 | ||||||||||||||||||
195 | !EVP_DigestUpdate(&ctx, zeroes, sizeof zeroes)
| 0 | ||||||||||||||||||
196 | !EVP_DigestUpdate(&ctx, mHash, hLen)
| 0 | ||||||||||||||||||
197 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
198 | if (sLen
| 0 | ||||||||||||||||||
199 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
200 | if (!EVP_DigestFinal_ex(&ctx, H,
| 0 | ||||||||||||||||||
201 | ((void *)0)
| 0 | ||||||||||||||||||
202 | )
| 0 | ||||||||||||||||||
203 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
204 | - | |||||||||||||||||||
205 | - | |||||||||||||||||||
206 | if (PKCS1_MGF1(EM, maskedDBLen, H, hLen, mgf1Hash)
| 0 | ||||||||||||||||||
207 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||
208 | - | |||||||||||||||||||
209 | p = EM; | - | ||||||||||||||||||
210 | - | |||||||||||||||||||
211 | - | |||||||||||||||||||
212 | - | |||||||||||||||||||
213 | - | |||||||||||||||||||
214 | - | |||||||||||||||||||
215 | - | |||||||||||||||||||
216 | p += emLen - sLen - hLen - 2; | - | ||||||||||||||||||
217 | *p++ ^= 0x1; | - | ||||||||||||||||||
218 | if (sLen > 0
| 0 | ||||||||||||||||||
219 | for (i = 0; i < sLen
| 0 | ||||||||||||||||||
220 | * never executed: p++ ^= salt[i];*p++ ^= salt[i]; never executed: *p++ ^= salt[i]; | 0 | ||||||||||||||||||
221 | } never executed: end of block | 0 | ||||||||||||||||||
222 | if (MSBits
| 0 | ||||||||||||||||||
223 | EM[0] &= 0xFF >> (8 - MSBits); never executed: EM[0] &= 0xFF >> (8 - MSBits); | 0 | ||||||||||||||||||
224 | - | |||||||||||||||||||
225 | - | |||||||||||||||||||
226 | EM[emLen - 1] = 0xbc; | - | ||||||||||||||||||
227 | - | |||||||||||||||||||
228 | ret = 1; | - | ||||||||||||||||||
229 | - | |||||||||||||||||||
230 | err: code before this statement never executed: err: | 0 | ||||||||||||||||||
231 | free(salt); | - | ||||||||||||||||||
232 | EVP_MD_CTX_cleanup(&ctx); | - | ||||||||||||||||||
233 | - | |||||||||||||||||||
234 | return never executed: ret;return ret; never executed: return ret; | 0 | ||||||||||||||||||
235 | } | - | ||||||||||||||||||
Switch to Source code | Preprocessed file |