Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Brian Smith
nettle
Commits
479aafcc
Commit
479aafcc
authored
Apr 09, 2012
by
Niels Möller
Browse files
New function pkcs1_decrypt, use in rsa_decrypt.
parent
e9045bd3
Changes
5
Hide whitespace changes
Inline
Side-by-side
ChangeLog
View file @
479aafcc
2012-04-09 Niels Möller <nisse@lysator.liu.se>
* Makefile.in (hogweed_SOURCES): Added pkcs1-decrypt.c.
* rsa-decrypt.c (rsa_decrypt): Use pkcs1_decrypt.
* pkcs1-decrypt.c (pkcs1_decrypt): New file and function,
extracted from rsa_decrypt.
2012-04-01 Niels Möller <nisse@lysator.liu.se>
* salsa20.c (LE_SWAP32): Typo fix for big-endian case.
...
...
Makefile.in
View file @
479aafcc
...
...
@@ -99,7 +99,7 @@ hogweed_SOURCES = sexp.c sexp-format.c \
bignum.c bignum-next-prime.c
\
bignum-random.c bignum-random-prime.c
\
sexp2bignum.c
\
pkcs1.c pkcs1-rsa-md5.c pkcs1-rsa-sha1.c
\
pkcs1.c
pkcs1-decrypt.c
pkcs1-rsa-md5.c pkcs1-rsa-sha1.c
\
pkcs1-rsa-sha256.c pkcs1-rsa-sha512.c
\
rsa.c rsa-sign.c rsa-verify.c
\
rsa-md5-sign.c rsa-md5-verify.c
\
...
...
pkcs1-decrypt.c
0 → 100644
View file @
479aafcc
/* pkcs1-decrypt.c
*
*/
/* nettle, low-level cryptographics library
*
* Copyright (C) 2001, 2012 Niels Möller
*
* The nettle library is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 of the License, or (at your
* option) any later version.
*
* The nettle library is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
* License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with the nettle library; see the file COPYING.LIB. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
* MA 02111-1307, USA.
*/
#if HAVE_CONFIG_H
# include "config.h"
#endif
#include
<string.h>
#include
"pkcs1.h"
#include
"bignum.h"
#include
"nettle-internal.h"
int
pkcs1_decrypt
(
unsigned
key_size
,
const
mpz_t
m
,
unsigned
*
length
,
uint8_t
*
message
)
{
TMP_DECL
(
em
,
uint8_t
,
NETTLE_MAX_BIGNUM_BITS
/
8
);
uint8_t
*
terminator
;
unsigned
padding
;
unsigned
message_length
;
TMP_ALLOC
(
em
,
key_size
);
nettle_mpz_get_str_256
(
key_size
,
em
,
m
);
/* Check format */
if
(
em
[
0
]
||
em
[
1
]
!=
2
)
return
0
;
terminator
=
memchr
(
em
+
2
,
0
,
key_size
-
2
);
if
(
!
terminator
)
return
0
;
padding
=
terminator
-
(
em
+
2
);
if
(
padding
<
8
)
return
0
;
message_length
=
key_size
-
3
-
padding
;
if
(
*
length
<
message_length
)
return
0
;
memcpy
(
message
,
terminator
+
1
,
message_length
);
*
length
=
message_length
;
return
1
;
}
pkcs1.h
View file @
479aafcc
...
...
@@ -43,6 +43,7 @@ extern "C" {
#define pkcs1_rsa_sha256_encode_digest nettle_pkcs1_rsa_sha256_encode_digest
#define pkcs1_rsa_sha512_encode nettle_pkcs1_rsa_sha512_encode
#define pkcs1_rsa_sha512_encode_digest nettle_pkcs1_rsa_sha512_encode_digest
#define pkcs1_decrypt nettle_pkcs1_decrypt
struct
md5_ctx
;
struct
sha1_ctx
;
...
...
@@ -56,6 +57,11 @@ pkcs1_signature_prefix(unsigned size,
const
uint8_t
*
id
,
unsigned
digest_size
);
int
pkcs1_decrypt
(
unsigned
key_size
,
const
mpz_t
m
,
unsigned
*
length
,
uint8_t
*
message
);
int
pkcs1_rsa_md5_encode
(
mpz_t
m
,
unsigned
length
,
struct
md5_ctx
*
hash
);
...
...
rsa-decrypt.c
View file @
479aafcc
/* rsa
_
decrypt.c
/* rsa
-
decrypt.c
*
* The RSA publickey algorithm. PKCS#1 encryption.
*/
/* nettle, low-level cryptographics library
*
* Copyright (C) 2001 Niels Möller
* Copyright (C) 2001
, 2012
Niels Möller
*
* The nettle library is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
...
...
@@ -27,54 +27,22 @@
# include "config.h"
#endif
#include
<assert.h>
#include
<stdlib.h>
#include
<string.h>
#include
"rsa.h"
#include
"bignum.h"
#include
"nettle-internal.h"
#include
"pkcs1.h"
int
rsa_decrypt
(
const
struct
rsa_private_key
*
key
,
unsigned
*
length
,
uint8_t
*
message
,
const
mpz_t
gibberish
)
{
TMP_DECL
(
em
,
uint8_t
,
NETTLE_MAX_BIGNUM_BITS
/
8
);
uint8_t
*
terminator
;
unsigned
padding
;
unsigned
message_length
;
mpz_t
m
;
int
res
;
mpz_init
(
m
);
rsa_compute_root
(
key
,
m
,
gibberish
);
TMP_ALLOC
(
em
,
key
->
size
);
nettle_mpz_get_str_256
(
key
->
size
,
em
,
m
);
res
=
pkcs1_decrypt
(
key
->
size
,
m
,
length
,
message
);
mpz_clear
(
m
);
/* Check format */
if
(
em
[
0
]
||
em
[
1
]
!=
2
)
return
0
;
terminator
=
memchr
(
em
+
2
,
0
,
key
->
size
-
2
);
if
(
!
terminator
)
return
0
;
padding
=
terminator
-
(
em
+
2
);
if
(
padding
<
8
)
return
0
;
message_length
=
key
->
size
-
3
-
padding
;
if
(
*
length
<
message_length
)
return
0
;
memcpy
(
message
,
terminator
+
1
,
message_length
);
*
length
=
message_length
;
return
1
;
return
res
;
}
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment