OpenCoverage

rsa_pk1.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/libressl/src/crypto/rsa/rsa_pk1.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* $OpenBSD: rsa_pk1.c,v 1.15 2017/01/29 17:49:23 beck Exp $ */-
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)-
3 * All rights reserved.-
4 *-
5 * This package is an SSL implementation written-
6 * by Eric Young (eay@cryptsoft.com).-
7 * The implementation was written so as to conform with Netscapes SSL.-
8 *-
9 * This library is free for commercial and non-commercial use as long as-
10 * the following conditions are aheared to. The following conditions-
11 * apply to all code found in this distribution, be it the RC4, RSA,-
12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation-
13 * included with this distribution is covered by the same copyright terms-
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).-
15 *-
16 * Copyright remains Eric Young's, and as such any Copyright notices in-
17 * the code are not to be removed.-
18 * If this package is used in a product, Eric Young should be given attribution-
19 * as the author of the parts of the library used.-
20 * This can be in the form of a textual message at program startup or-
21 * in documentation (online or textual) provided with the package.-
22 *-
23 * Redistribution and use in source and binary forms, with or without-
24 * modification, are permitted provided that the following conditions-
25 * are met:-
26 * 1. Redistributions of source code must retain the copyright-
27 * notice, this list of conditions and the following disclaimer.-
28 * 2. Redistributions in binary form must reproduce the above copyright-
29 * notice, this list of conditions and the following disclaimer in the-
30 * documentation and/or other materials provided with the distribution.-
31 * 3. All advertising materials mentioning features or use of this software-
32 * must display the following acknowledgement:-
33 * "This product includes cryptographic software written by-
34 * Eric Young (eay@cryptsoft.com)"-
35 * The word 'cryptographic' can be left out if the rouines from the library-
36 * being used are not cryptographic related :-).-
37 * 4. If you include any Windows specific code (or a derivative thereof) from-
38 * the apps directory (application code) you must include an acknowledgement:-
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"-
40 *-
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND-
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE-
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE-
44 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE-
45 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-
46 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS-
47 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY-
50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF-
51 * SUCH DAMAGE.-
52 *-
53 * The licence and distribution terms for any publically available version or-
54 * derivative of this code cannot be changed. i.e. this code cannot simply be-
55 * copied and put under another distribution licence-
56 * [including the GNU Public Licence.]-
57 */-
58-
59#include <stdio.h>-
60#include <stdlib.h>-
61#include <string.h>-
62-
63#include <openssl/bn.h>-
64#include <openssl/err.h>-
65#include <openssl/rsa.h>-
66-
67int-
68RSA_padding_add_PKCS1_type_1(unsigned char *to, int tlen,-
69 const unsigned char *from, int flen)-
70{-
71 int j;-
72 unsigned char *p;-
73-
74 if (flen > (tlen - RSA_PKCS1_PADDING_SIZE)) {
flen > (tlen - 11)Description
TRUEnever evaluated
FALSEevaluated 51 times by 5 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
0-51
75 RSAerror(RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE);-
76 return 0;
never executed: return 0;
0
77 }-
78-
79 p = (unsigned char *)to;-
80-
81 *(p++) = 0;-
82 *(p++) = 1; /* Private Key BT (Block Type) */-
83-
84 /* pad out with 0xff data */-
85 j = tlen - 3 - flen;-
86 memset(p, 0xff, j);-
87 p += j;-
88 *(p++) = '\0';-
89 memcpy(p, from, flen);-
90-
91 return 1;
executed 51 times by 5 tests: return 1;
Executed by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
51
92}-
93-
94int-
95RSA_padding_check_PKCS1_type_1(unsigned char *to, int tlen,-
96 const unsigned char *from, int flen, int num)-
97{-
98 int i, j;-
99 const unsigned char *p;-
100-
101 p = from;-
102 if (num != flen + 1 || *(p++) != 01) {
num != flen + 1Description
TRUEnever evaluated
FALSEevaluated 120 times by 3 tests
Evaluated by:
  • pkcs7test
  • ssltest
  • tlstest
*(p++) != 01Description
TRUEnever evaluated
FALSEevaluated 120 times by 3 tests
Evaluated by:
  • pkcs7test
  • ssltest
  • tlstest
0-120
103 RSAerror(RSA_R_BLOCK_TYPE_IS_NOT_01);-
104 return -1;
never executed: return -1;
0
105 }-
106-
107 /* scan over padding data */-
108 j = flen - 1; /* one for type. */-
109 for (i = 0; i < j; i++) {
i < jDescription
TRUEevaluated 24730 times by 3 tests
Evaluated by:
  • pkcs7test
  • ssltest
  • tlstest
FALSEnever evaluated
0-24730
110 if (*p != 0xff) {
*p != 0xffDescription
TRUEevaluated 120 times by 3 tests
Evaluated by:
  • pkcs7test
  • ssltest
  • tlstest
FALSEevaluated 24610 times by 3 tests
Evaluated by:
  • pkcs7test
  • ssltest
  • tlstest
120-24610
111 /* should decrypt to 0xff */-
112 if (*p == 0) {
*p == 0Description
TRUEevaluated 120 times by 3 tests
Evaluated by:
  • pkcs7test
  • ssltest
  • tlstest
FALSEnever evaluated
0-120
113 p++;-
114 break;
executed 120 times by 3 tests: break;
Executed by:
  • pkcs7test
  • ssltest
  • tlstest
120
115 } else {-
116 RSAerror(RSA_R_BAD_FIXED_HEADER_DECRYPT);-
117 return -1;
never executed: return -1;
0
118 }-
119 }-
120 p++;-
121 }
executed 24610 times by 3 tests: end of block
Executed by:
  • pkcs7test
  • ssltest
  • tlstest
24610
122-
123 if (i == j) {
i == jDescription
TRUEnever evaluated
FALSEevaluated 120 times by 3 tests
Evaluated by:
  • pkcs7test
  • ssltest
  • tlstest
0-120
124 RSAerror(RSA_R_NULL_BEFORE_BLOCK_MISSING);-
125 return -1;
never executed: return -1;
0
126 }-
127-
128 if (i < 8) {
i < 8Description
TRUEnever evaluated
FALSEevaluated 120 times by 3 tests
Evaluated by:
  • pkcs7test
  • ssltest
  • tlstest
0-120
129 RSAerror(RSA_R_BAD_PAD_BYTE_COUNT);-
130 return -1;
never executed: return -1;
0
131 }-
132 i++; /* Skip over the '\0' */-
133 j -= i;-
134 if (j > tlen) {
j > tlenDescription
TRUEnever evaluated
FALSEevaluated 120 times by 3 tests
Evaluated by:
  • pkcs7test
  • ssltest
  • tlstest
0-120
135 RSAerror(RSA_R_DATA_TOO_LARGE);-
136 return -1;
never executed: return -1;
0
137 }-
138 memcpy(to, p, j);-
139-
140 return j;
executed 120 times by 3 tests: return j;
Executed by:
  • pkcs7test
  • ssltest
  • tlstest
120
141}-
142-
143int-
144RSA_padding_add_PKCS1_type_2(unsigned char *to, int tlen,-
145 const unsigned char *from, int flen)-
146{-
147 int i, j;-
148 unsigned char *p;-
149-
150 if (flen > tlen - 11) {
flen > tlen - 11Description
TRUEnever evaluated
FALSEevaluated 18 times by 3 tests
Evaluated by:
  • pkcs7test
  • rsa_test
  • ssltest
0-18
151 RSAerror(RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE);-
152 return 0;
never executed: return 0;
0
153 }-
154-
155 p = (unsigned char *)to;-
156-
157 *(p++) = 0;-
158 *(p++) = 2; /* Public Key BT (Block Type) */-
159-
160 /* pad out with non-zero random data */-
161 j = tlen - 3 - flen;-
162-
163 arc4random_buf(p, j);-
164 for (i = 0; i < j; i++) {
i < jDescription
TRUEevaluated 3300 times by 3 tests
Evaluated by:
  • pkcs7test
  • rsa_test
  • ssltest
FALSEevaluated 18 times by 3 tests
Evaluated by:
  • pkcs7test
  • rsa_test
  • ssltest
18-3300
165 while (*p == '\0')
*p == '\0'Description
TRUEevaluated 8 times by 2 tests
Evaluated by:
  • pkcs7test
  • ssltest
FALSEevaluated 3300 times by 3 tests
Evaluated by:
  • pkcs7test
  • rsa_test
  • ssltest
8-3300
166 arc4random_buf(p, 1);
executed 8 times by 2 tests: arc4random_buf(p, 1);
Executed by:
  • pkcs7test
  • ssltest
8
167 p++;-
168 }
executed 3300 times by 3 tests: end of block
Executed by:
  • pkcs7test
  • rsa_test
  • ssltest
3300
169-
170 *(p++) = '\0';-
171-
172 memcpy(p, from, flen);-
173 return 1;
executed 18 times by 3 tests: return 1;
Executed by:
  • pkcs7test
  • rsa_test
  • ssltest
18
174}-
175-
176int-
177RSA_padding_check_PKCS1_type_2(unsigned char *to, int tlen,-
178 const unsigned char *from, int flen, int num)-
179{-
180 int i, j;-
181 const unsigned char *p;-
182-
183 p = from;-
184 if (num != flen + 1 || *(p++) != 02) {
num != flen + 1Description
TRUEnever evaluated
FALSEevaluated 18 times by 3 tests
Evaluated by:
  • pkcs7test
  • rsa_test
  • ssltest
*(p++) != 02Description
TRUEnever evaluated
FALSEevaluated 18 times by 3 tests
Evaluated by:
  • pkcs7test
  • rsa_test
  • ssltest
0-18
185 RSAerror(RSA_R_BLOCK_TYPE_IS_NOT_02);-
186 return -1;
never executed: return -1;
0
187 }-
188-
189 /* scan over padding data */-
190 j = flen - 1; /* one for type. */-
191 for (i = 0; i < j; i++)
i < jDescription
TRUEevaluated 3318 times by 3 tests
Evaluated by:
  • pkcs7test
  • rsa_test
  • ssltest
FALSEnever evaluated
0-3318
192 if (*(p++) == 0)
*(p++) == 0Description
TRUEevaluated 18 times by 3 tests
Evaluated by:
  • pkcs7test
  • rsa_test
  • ssltest
FALSEevaluated 3300 times by 3 tests
Evaluated by:
  • pkcs7test
  • rsa_test
  • ssltest
18-3300
193 break;
executed 18 times by 3 tests: break;
Executed by:
  • pkcs7test
  • rsa_test
  • ssltest
18
194-
195 if (i == j) {
i == jDescription
TRUEnever evaluated
FALSEevaluated 18 times by 3 tests
Evaluated by:
  • pkcs7test
  • rsa_test
  • ssltest
0-18
196 RSAerror(RSA_R_NULL_BEFORE_BLOCK_MISSING);-
197 return -1;
never executed: return -1;
0
198 }-
199-
200 if (i < 8) {
i < 8Description
TRUEnever evaluated
FALSEevaluated 18 times by 3 tests
Evaluated by:
  • pkcs7test
  • rsa_test
  • ssltest
0-18
201 RSAerror(RSA_R_BAD_PAD_BYTE_COUNT);-
202 return -1;
never executed: return -1;
0
203 }-
204 i++; /* Skip over the '\0' */-
205 j -= i;-
206 if (j > tlen) {
j > tlenDescription
TRUEnever evaluated
FALSEevaluated 18 times by 3 tests
Evaluated by:
  • pkcs7test
  • rsa_test
  • ssltest
0-18
207 RSAerror(RSA_R_DATA_TOO_LARGE);-
208 return -1;
never executed: return -1;
0
209 }-
210 memcpy(to, p, j);-
211-
212 return j;
executed 18 times by 3 tests: return j;
Executed by:
  • pkcs7test
  • rsa_test
  • ssltest
18
213}-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2