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
29beea19
Commit
29beea19
authored
Sep 30, 2002
by
Niels Möller
Browse files
New example program.
Rev: src/nettle/examples/rsa-sign.c:1.1
parent
6ed22096
Changes
1
Hide whitespace changes
Inline
Side-by-side
examples/rsa-sign.c
0 → 100644
View file @
29beea19
/* rsa-sign.c
*
*/
/* nettle, low-level cryptographics library
*
* Copyright (C) 2002 Niels Mller
*
* 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
/* HAVE_CONFIG_H */
#if !HAVE_LIBGMP
int
main
(
int
argc
,
char
**
argv
)
{
fprintf
(
stderr
,
"You need to install GMP somewhere where Nettle can find it,
\n
"
"and recompile Nettle
\n
"
);
return
EXIT_FAILURE
;
}
#endif
/* !HAVE_LIBGMP */
#include <errno.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include "rsa.h"
#define BUFSIZE 1000
static
int
read_key
(
const
char
*
name
,
struct
rsa_private_key
*
key
)
{
uint8_t
buffer
[
BUFSIZE
];
unsigned
done
;
int
fd
=
open
(
name
,
O_RDONLY
);
if
(
fd
<
0
)
{
fprintf
(
stderr
,
"Failed to open `%s': %s
\n
"
,
name
,
strerror
(
errno
));
return
0
;
}
for
(
done
=
0
;
done
<
sizeof
(
buffer
)
;)
{
int
res
=
read
(
fd
,
buffer
,
sizeof
(
buffer
)
-
done
);
if
(
!
res
)
break
;
else
if
(
res
<
0
&&
errno
==
EINTR
)
continue
;
else
if
(
res
<
0
)
{
fprintf
(
stderr
,
"Failed reading `%s': %s
\n
"
,
name
,
strerror
(
errno
));
return
0
;
}
else
done
+=
res
;
}
return
rsa_keypair_from_sexp
(
NULL
,
key
,
done
,
buffer
);
}
int
main
(
int
argc
,
char
**
argv
)
{
struct
rsa_private_key
key
;
struct
sha1_ctx
hash
;
mpz_t
s
;
if
(
argc
!=
2
)
{
fprintf
(
stderr
,
"Usage: rsa-sign PRIVATE-KEY < file
\n
"
);
return
EXIT_FAILURE
;
}
rsa_init_private_key
(
&
key
);
if
(
!
read_key
(
argv
[
1
],
&
key
))
{
fprintf
(
stderr
,
"Invalid key
\n
"
);
return
EXIT_FAILURE
;
}
sha1_init
(
&
hash
);
for
(;;)
{
uint8_t
buffer
[
BUFSIZE
];
int
res
=
read
(
STDIN_FILENO
,
buffer
,
sizeof
(
buffer
));
if
(
!
res
)
/* EOF */
break
;
else
if
(
res
<
0
&&
errno
==
EINTR
)
continue
;
else
if
(
res
<
0
)
{
fprintf
(
stderr
,
"Failed reading stdin: %s
\n
"
,
strerror
(
errno
));
return
0
;
}
else
sha1_update
(
&
hash
,
res
,
buffer
);
}
mpz_init
(
s
);
rsa_sha1_sign
(
&
key
,
&
hash
,
s
);
if
(
!
mpz_out_str
(
stdout
,
16
,
s
))
{
fprintf
(
stderr
,
"Failed writing signature: %s
\n
"
,
strerror
(
errno
));
return
0
;
}
putchar
(
'\n'
);
mpz_clear
(
s
);
rsa_clear_private_key
(
&
key
);
return
EXIT_SUCCESS
;
}
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