Mercurial > dovecot > original-hg > dovecot-1.2
annotate src/master/ssl-init-gnutls.c @ 9186:f70192e7ff3c HEAD
Added tag 1.2.0 for changeset 9ca9361d74ce
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Wed, 01 Jul 2009 21:52:54 +0200 |
parents | b9faf4db2a9f |
children | 00cd9aacd03c |
rev | line source |
---|---|
8590
b9faf4db2a9f
Updated copyright notices to include year 2009.
Timo Sirainen <tss@iki.fi>
parents:
7086
diff
changeset
|
1 /* Copyright (c) 2002-2009 Dovecot authors, see the included COPYING file */ |
622 | 2 |
3 #include "common.h" | |
4 #include "write-full.h" | |
5 #include "ssl-init.h" | |
6 | |
7 #ifdef HAVE_GNUTLS | |
8 | |
623 | 9 #include <stdlib.h> |
622 | 10 #include <gnutls/gnutls.h> |
11 | |
12 static int prime_nums[] = { 768, 1024, 0 }; | |
13 | |
14 static void write_datum(int fd, const char *fname, gnutls_datum *dbits) | |
15 { | |
16 if (write_full(fd, &dbits->size, sizeof(dbits->size)) < 0) | |
17 i_fatal("write_full() failed for file %s: %m", fname); | |
18 | |
19 if (write_full(fd, dbits->data, dbits->size) < 0) | |
20 i_fatal("write_full() failed for file %s: %m", fname); | |
21 } | |
22 | |
23 static void generate_dh_parameters(int fd, const char *fname) | |
24 { | |
25 gnutls_datum dbits, prime, generator; | |
26 int ret, bits, i; | |
27 | |
28 dbits.size = sizeof(bits); | |
29 dbits.data = (unsigned char *) &bits; | |
30 | |
31 for (i = 0; prime_nums[i] != 0; i++) { | |
32 bits = prime_nums[i]; | |
33 | |
34 ret = gnutls_dh_params_generate(&prime, &generator, bits); | |
35 if (ret < 0) { | |
36 i_fatal("gnutls_dh_params_generate(%d) failed: %s", | |
37 bits, gnutls_strerror(ret)); | |
38 } | |
39 | |
40 write_datum(fd, fname, &dbits); | |
41 write_datum(fd, fname, &prime); | |
42 write_datum(fd, fname, &generator); | |
43 | |
44 free(prime.data); | |
45 free(generator.data); | |
46 } | |
47 | |
48 bits = 0; | |
49 write_datum(fd, fname, &dbits); | |
50 } | |
51 | |
52 static void generate_rsa_parameters(int fd, const char *fname) | |
53 { | |
54 gnutls_datum m, e, d, p, q, u; | |
55 int ret; | |
56 | |
57 ret = gnutls_rsa_params_generate(&m, &e, &d, &p, &q, &u, 512); | |
58 if (ret < 0) { | |
59 i_fatal("gnutls_rsa_params_generate() faile: %s", | |
60 strerror(ret)); | |
61 } | |
62 | |
63 write_datum(fd, fname, &m); | |
64 write_datum(fd, fname, &e); | |
65 write_datum(fd, fname, &d); | |
66 write_datum(fd, fname, &p); | |
67 write_datum(fd, fname, &q); | |
68 write_datum(fd, fname, &u); | |
69 } | |
70 | |
6418
46d9ee79f292
Removed _ prefix from all public APIs.
Timo Sirainen <tss@iki.fi>
parents:
623
diff
changeset
|
71 void ssl_generate_parameters(int fd, const char *fname) |
622 | 72 { |
73 int ret; | |
74 | |
75 if ((ret = gnutls_global_init() < 0)) { | |
76 i_fatal("gnu_tls_global_init() failed: %s", | |
77 gnutls_strerror(ret)); | |
78 } | |
79 | |
623 | 80 generate_dh_parameters(fd, fname); |
81 generate_rsa_parameters(fd, fname); | |
622 | 82 |
83 gnutls_global_deinit(); | |
84 } | |
85 | |
86 #endif |