X-Git-Url: https://tinc-vpn.org/git/browse?a=blobdiff_plain;ds=inline;f=src%2Fopenssl%2Frsagen.c;fp=src%2Fopenssl%2Frsagen.c;h=689e8a6a8f3ea02de24130845aeda6c3d0520c58;hb=551cd19406a560d0d206bff5b4e9da064ec222b6;hp=0000000000000000000000000000000000000000;hpb=911c05f873ad967c40d04aa7347b1067fe62c055;p=tinc diff --git a/src/openssl/rsagen.c b/src/openssl/rsagen.c new file mode 100644 index 00000000..689e8a6a --- /dev/null +++ b/src/openssl/rsagen.c @@ -0,0 +1,85 @@ +/* + rsagen.c -- RSA key generation and export + Copyright (C) 2008 Guus Sliepen + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + $Id$ +*/ + +#include "system.h" + +#include +#include + +#include "logger.h" +#include "rsagen.h" + +/* This function prettyprints the key generation process */ + +static void indicator(int a, int b, void *p) { + switch (a) { + case 0: + fprintf(stderr, "."); + break; + + case 1: + fprintf(stderr, "+"); + break; + + case 2: + fprintf(stderr, "-"); + break; + + case 3: + switch (b) { + case 0: + fprintf(stderr, " p\n"); + break; + + case 1: + fprintf(stderr, " q\n"); + break; + + default: + fprintf(stderr, "?"); + } + break; + + default: + fprintf(stderr, "?"); + } +} + +// Generate RSA key + +bool rsa_generate(rsa_t *rsa, size_t bits, unsigned long exponent) { + *rsa = RSA_generate_key(bits, exponent, indicator, NULL); + + return *rsa; +} + +// Write PEM RSA keys + +bool rsa_write_pem_public_key(rsa_t *rsa, FILE *fp) { + PEM_write_RSAPublicKey(fp, *rsa); + + return true; +} + +bool rsa_write_pem_private_key(rsa_t *rsa, FILE *fp) { + PEM_write_RSAPrivateKey(fp, *rsa, NULL, NULL, 0, NULL, NULL); + return true; +}