3
* The RSA publickey algorithm. PKCS#1 encryption.
6
/* nettle, low-level cryptographics library
8
* Copyright (C) 2001 Niels M�ller
10
* The nettle library is free software; you can redistribute it and/or modify
11
* it under the terms of the GNU Lesser General Public License as published by
12
* the Free Software Foundation; either version 2.1 of the License, or (at your
13
* option) any later version.
15
* The nettle library is distributed in the hope that it will be useful, but
16
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
17
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
18
* License for more details.
20
* You should have received a copy of the GNU Lesser General Public License
21
* along with the nettle library; see the file COPYING.LIB. If not, write to
22
* the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
39
#include "nettle-internal.h"
42
rsa_decrypt(const struct rsa_private_key *key,
43
unsigned *length, uint8_t *message,
44
const mpz_t gibberish)
46
TMP_DECL(em, uint8_t, NETTLE_MAX_BIGNUM_BITS / 8);
49
unsigned message_length;
54
rsa_compute_root(key, m, gibberish);
56
TMP_ALLOC(em, key->size);
57
nettle_mpz_get_str_256(key->size, em, m);
61
if (em[0] || em[1] != 2)
64
terminator = memchr(em + 2, 0, key->size - 2);
69
padding = terminator - (em + 2);
73
message_length = key->size - 3 - padding;
75
if (*length < message_length)
78
memcpy(message, terminator + 1, message_length);
79
*length = message_length;
84
#endif /* WITH_PUBLIC_KEY */