Skip to content

Commit f9c0c63

Browse files
committed
allow input-data pointer to be NULL
If we allow the length to be 0, we should also prepare for the case where the user doesn't want to provide a valid input-data pointer. Signed-off-by: Steffen Jaeckel <s@jaeckel.eu>
1 parent caf3500 commit f9c0c63

File tree

4 files changed

+18
-10
lines changed

4 files changed

+18
-10
lines changed

src/pk/pkcs1/pkcs_1_oaep_encode.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ int pkcs_1_oaep_encode(const unsigned char *msg, unsigned long msglen,
3333
unsigned long hLen, x, y, modulus_len;
3434
int err;
3535

36-
LTC_ARGCHK(msg != NULL);
36+
LTC_ARGCHK((msglen == 0) || (msg != NULL));
3737
LTC_ARGCHK(out != NULL);
3838
LTC_ARGCHK(outlen != NULL);
3939

@@ -95,9 +95,11 @@ int pkcs_1_oaep_encode(const unsigned char *msg, unsigned long msglen,
9595
/* 0x01 byte */
9696
DB[x++] = 0x01;
9797

98-
/* message (length = msglen) */
99-
XMEMCPY(DB+x, msg, msglen);
100-
x += msglen;
98+
if (msglen != 0) {
99+
/* message (length = msglen) */
100+
XMEMCPY(DB+x, msg, msglen);
101+
x += msglen;
102+
}
101103

102104
/* now choose a random seed */
103105
if (prng_descriptor[prng_idx].read(seed, hLen, prng) != hLen) {

src/pk/pkcs1/pkcs_1_v1_5_encode.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@ int pkcs_1_v1_5_encode(const unsigned char *msg,
3535
unsigned char *ps;
3636
int result;
3737

38+
LTC_ARGCHK((msglen == 0) || (msg != NULL));
39+
LTC_ARGCHK(out != NULL);
40+
LTC_ARGCHK(outlen != NULL);
41+
3842
/* valid block_type? */
3943
if ((block_type != LTC_PKCS_1_EMSA) &&
4044
(block_type != LTC_PKCS_1_EME)) {
@@ -88,7 +92,9 @@ int pkcs_1_v1_5_encode(const unsigned char *msg,
8892
out[0] = 0x00;
8993
out[1] = (unsigned char)block_type; /* block_type 1 or 2 */
9094
out[2 + ps_len] = 0x00;
91-
XMEMCPY(&out[2 + ps_len + 1], msg, msglen);
95+
if (msglen != 0) {
96+
XMEMCPY(&out[2 + ps_len + 1], msg, msglen);
97+
}
9298
*outlen = modulus_len;
9399

94100
result = CRYPT_OK;

src/pk/rsa/rsa_encrypt_key.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ int rsa_encrypt_key_ex(const unsigned char *in, unsigned long inlen,
3434
unsigned long modulus_bitlen, modulus_bytelen, x;
3535
int err;
3636

37-
LTC_ARGCHK(in != NULL);
37+
LTC_ARGCHK((inlen == 0) || (in != NULL));
3838
LTC_ARGCHK(out != NULL);
3939
LTC_ARGCHK(outlen != NULL);
4040
LTC_ARGCHK(key != NULL);

tests/rsa_test.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -500,7 +500,7 @@ print_hex("q", tmp, len);
500500

501501
/* encrypt the key (without lparam) */
502502
for (cnt = 0; cnt < 4; cnt++) {
503-
for (rsa_msgsize = 1; rsa_msgsize <= 86; rsa_msgsize++) {
503+
for (rsa_msgsize = 0; rsa_msgsize <= 86; rsa_msgsize++) {
504504
/* make a random key/msg */
505505
ENSURE(yarrow_read(in, rsa_msgsize, &yarrow_prng) == rsa_msgsize);
506506

@@ -523,10 +523,10 @@ print_hex("q", tmp, len);
523523
}
524524

525525
/* encrypt the key (with lparam) */
526-
for (rsa_msgsize = 1; rsa_msgsize <= 86; rsa_msgsize++) {
526+
for (rsa_msgsize = 0; rsa_msgsize <= 86; rsa_msgsize++) {
527527
len = sizeof(out);
528528
len2 = rsa_msgsize;
529-
DO(rsa_encrypt_key(in, rsa_msgsize, out, &len, lparam, sizeof(lparam), &yarrow_prng, prng_idx, hash_idx, &key));
529+
DO(rsa_encrypt_key(rsa_msgsize ? in : NULL, rsa_msgsize, out, &len, lparam, sizeof(lparam), &yarrow_prng, prng_idx, hash_idx, &key));
530530
/* change a byte */
531531
out[8] ^= 1;
532532
SHOULD_FAIL(rsa_decrypt_key(out, len, tmp, &len2, lparam, sizeof(lparam), hash_idx, &stat2, &key));
@@ -542,7 +542,7 @@ print_hex("q", tmp, len);
542542
}
543543

544544
/* encrypt the key PKCS #1 v1.5 (payload from 1 to 117 bytes) */
545-
for (rsa_msgsize = 1; rsa_msgsize <= 117; rsa_msgsize++) {
545+
for (rsa_msgsize = 0; rsa_msgsize <= 117; rsa_msgsize++) {
546546
len = sizeof(out);
547547
len2 = rsa_msgsize;
548548
/* make a random key/msg */

0 commit comments

Comments
 (0)