1/* NOCW */
2/*
3        Please read the README file for condition of use, before
4        using this software.
5
6        Maurice Gittens  <mgittens@gits.nl>   January 1997
7*/
8
9#include <stdlib.h>
10#include <stdio.h>
11#include <strings.h>
12
13#include <openssl/rsa.h>
14#include <openssl/evp.h>
15#include <openssl/objects.h>
16#include <openssl/x509.h>
17#include <openssl/err.h>
18#include <openssl/pem.h>
19#include <openssl/ssl.h>
20
21#include "loadkeys.h"
22
23#define PUBFILE   "cert.pem"
24#define PRIVFILE  "privkey.pem"
25#define STDIN     0
26#define STDOUT    1
27
28int main()
29{
30        char *ct = "This the clear text";
31	char *buf;
32	char *buf2;
33  	EVP_PKEY *pubKey;
34  	EVP_PKEY *privKey;
35	int len;
36
37        ERR_load_crypto_strings();
38
39        privKey = ReadPrivateKey(PRIVFILE);
40        if (!privKey)
41	{
42		ERR_print_errors_fp (stderr);
43		exit (1);
44	}
45
46        pubKey = ReadPublicKey(PUBFILE);
47	if(!pubKey)
48	{
49	   EVP_PKEY_free(privKey);
50           fprintf(stderr,"Error: can't load public key");
51	   exit(1);
52	}
53
54	/* No error checking */
55        buf = malloc(EVP_PKEY_size(pubKey));
56        buf2 = malloc(EVP_PKEY_size(pubKey));
57
58	len = RSA_public_encrypt(strlen(ct)+1, ct, buf, pubKey->pkey.rsa,RSA_PKCS1_PADDING);
59
60	if (len != EVP_PKEY_size(pubKey))
61	{
62	    fprintf(stderr,"Error: ciphertext should match length of key\n");
63	    exit(1);
64	}
65
66	RSA_private_decrypt(len, buf, buf2, privKey->pkey.rsa,RSA_PKCS1_PADDING);
67
68	printf("%s\n", buf2);
69
70	EVP_PKEY_free(privKey);
71	EVP_PKEY_free(pubKey);
72	free(buf);
73	free(buf2);
74        return 0;
75}
76