Initialize Tizen 2.3
[external/nettle.git] / examples / rsa-sign.c
1 /* rsa-sign.c
2  *
3  */
4
5 /* nettle, low-level cryptographics library
6  *
7  * Copyright (C) 2002 Niels Möller
8  *  
9  * The nettle library is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU Lesser General Public License as published by
11  * the Free Software Foundation; either version 2.1 of the License, or (at your
12  * option) any later version.
13  * 
14  * The nettle library is distributed in the hope that it will be useful, but
15  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
17  * License for more details.
18  * 
19  * You should have received a copy of the GNU Lesser General Public License
20  * along with the nettle library; see the file COPYING.LIB.  If not, write to
21  * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
22  * MA 02111-1307, USA.
23  */
24
25 #if HAVE_CONFIG_H
26 # include "config.h"
27 #endif
28
29 #include <errno.h>
30 #include <stdlib.h>
31 #include <stdio.h>
32 #include <string.h>
33
34 /* string.h must be included before gmp.h */
35 #include "rsa.h"
36 #include "io.h"
37
38 int
39 main(int argc, char **argv)
40 {
41   struct rsa_private_key key;
42   struct sha1_ctx hash;
43   mpz_t s;
44   
45   if (argc != 2)
46     {
47       werror("Usage: rsa-sign PRIVATE-KEY < file\n");
48       return EXIT_FAILURE;
49     }
50
51   rsa_private_key_init(&key);
52   
53   if (!read_rsa_key(argv[1], NULL, &key))
54     {
55       werror("Invalid key\n");
56       return EXIT_FAILURE;
57     }
58
59   sha1_init(&hash);
60   if (!hash_file(&nettle_sha1, &hash, stdin))
61     {
62       werror("Failed reading stdin: %s\n",
63               strerror(errno));
64       return 0;
65     }
66
67   mpz_init(s);
68   if (!rsa_sha1_sign(&key, &hash, s))
69     {
70       werror("RSA key too small\n");
71       return 0;
72     }
73
74   if (!mpz_out_str(stdout, 16, s))
75     {
76       werror("Failed writing signature: %s\n",
77               strerror(errno));
78       return 0;
79     }
80
81   putchar('\n');
82   
83   mpz_clear(s);
84   rsa_private_key_clear(&key);
85
86   return EXIT_SUCCESS;
87 }