annotate src/master/ssl-init-gnutls.c @ 9532:00cd9aacd03c HEAD

Updated copyright notices to include year 2010.
author Timo Sirainen <tss@iki.fi>
date Mon, 25 Jan 2010 01:18:58 +0200
parents b9faf4db2a9f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
9532
00cd9aacd03c Updated copyright notices to include year 2010.
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
1 /* Copyright (c) 2002-2010 Dovecot authors, see the included COPYING file */
622
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
2
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
3 #include "common.h"
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
4 #include "write-full.h"
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
5 #include "ssl-init.h"
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
6
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
7 #ifdef HAVE_GNUTLS
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
8
623
3fa9e363cd3d SSL fixes and doc updates.
Timo Sirainen <tss@iki.fi>
parents: 622
diff changeset
9 #include <stdlib.h>
622
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
10 #include <gnutls/gnutls.h>
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
11
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
12 static int prime_nums[] = { 768, 1024, 0 };
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
13
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
14 static void write_datum(int fd, const char *fname, gnutls_datum *dbits)
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
15 {
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
16 if (write_full(fd, &dbits->size, sizeof(dbits->size)) < 0)
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
17 i_fatal("write_full() failed for file %s: %m", fname);
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
18
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
19 if (write_full(fd, dbits->data, dbits->size) < 0)
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
20 i_fatal("write_full() failed for file %s: %m", fname);
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
21 }
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
22
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
23 static void generate_dh_parameters(int fd, const char *fname)
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
24 {
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
25 gnutls_datum dbits, prime, generator;
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
26 int ret, bits, i;
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
27
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
28 dbits.size = sizeof(bits);
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
29 dbits.data = (unsigned char *) &bits;
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
30
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
31 for (i = 0; prime_nums[i] != 0; i++) {
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
32 bits = prime_nums[i];
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
33
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
34 ret = gnutls_dh_params_generate(&prime, &generator, bits);
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
35 if (ret < 0) {
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
36 i_fatal("gnutls_dh_params_generate(%d) failed: %s",
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
37 bits, gnutls_strerror(ret));
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
38 }
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
39
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
40 write_datum(fd, fname, &dbits);
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
41 write_datum(fd, fname, &prime);
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
42 write_datum(fd, fname, &generator);
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
43
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
44 free(prime.data);
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
45 free(generator.data);
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
46 }
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
47
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
48 bits = 0;
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
49 write_datum(fd, fname, &dbits);
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
50 }
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
51
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
52 static void generate_rsa_parameters(int fd, const char *fname)
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
53 {
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
54 gnutls_datum m, e, d, p, q, u;
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
55 int ret;
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
56
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
57 ret = gnutls_rsa_params_generate(&m, &e, &d, &p, &q, &u, 512);
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
58 if (ret < 0) {
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
59 i_fatal("gnutls_rsa_params_generate() faile: %s",
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
60 strerror(ret));
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
61 }
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
62
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
63 write_datum(fd, fname, &m);
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
64 write_datum(fd, fname, &e);
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
65 write_datum(fd, fname, &d);
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
66 write_datum(fd, fname, &p);
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
67 write_datum(fd, fname, &q);
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
68 write_datum(fd, fname, &u);
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
69 }
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
72 {
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
73 int ret;
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
74
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
75 if ((ret = gnutls_global_init() < 0)) {
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
76 i_fatal("gnu_tls_global_init() failed: %s",
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
77 gnutls_strerror(ret));
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
78 }
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
79
623
3fa9e363cd3d SSL fixes and doc updates.
Timo Sirainen <tss@iki.fi>
parents: 622
diff changeset
80 generate_dh_parameters(fd, fname);
3fa9e363cd3d SSL fixes and doc updates.
Timo Sirainen <tss@iki.fi>
parents: 622
diff changeset
81 generate_rsa_parameters(fd, fname);
622
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
82
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
83 gnutls_global_deinit();
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
84 }
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
85
235188ee7a05 Support for OpenSSL.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
86 #endif