76 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* NOCW */
 | 
						|
/*
 | 
						|
        Please read the README file for condition of use, before
 | 
						|
        using this software.
 | 
						|
 | 
						|
        Maurice Gittens  <mgittens@gits.nl>   January 1997
 | 
						|
*/
 | 
						|
 | 
						|
#include <stdlib.h>
 | 
						|
#include <stdio.h>
 | 
						|
#include <strings.h>
 | 
						|
 | 
						|
#include <openssl/rsa.h>
 | 
						|
#include <openssl/evp.h>
 | 
						|
#include <openssl/objects.h>
 | 
						|
#include <openssl/x509.h>
 | 
						|
#include <openssl/err.h>
 | 
						|
#include <openssl/pem.h>
 | 
						|
#include <openssl/ssl.h>
 | 
						|
 | 
						|
#include "loadkeys.h"
 | 
						|
 | 
						|
#define PUBFILE   "cert.pem"
 | 
						|
#define PRIVFILE  "privkey.pem"
 | 
						|
#define STDIN     0
 | 
						|
#define STDOUT    1 
 | 
						|
 | 
						|
int main()
 | 
						|
{
 | 
						|
        char *ct = "This the clear text";
 | 
						|
	char *buf;   
 | 
						|
	char *buf2;
 | 
						|
  	EVP_PKEY *pubKey;
 | 
						|
  	EVP_PKEY *privKey;
 | 
						|
	int len;
 | 
						|
 | 
						|
        ERR_load_crypto_strings();
 | 
						|
 | 
						|
        privKey = ReadPrivateKey(PRIVFILE);
 | 
						|
        if (!privKey) 
 | 
						|
	{  
 | 
						|
		ERR_print_errors_fp (stderr);    
 | 
						|
		exit (1);  
 | 
						|
	}
 | 
						|
 | 
						|
        pubKey = ReadPublicKey(PUBFILE);  
 | 
						|
	if(!pubKey)
 | 
						|
	{
 | 
						|
	   EVP_PKEY_free(privKey);   
 | 
						|
           fprintf(stderr,"Error: can't load public key");
 | 
						|
	   exit(1);
 | 
						|
	}
 | 
						|
 | 
						|
	/* No error checking */
 | 
						|
        buf = malloc(EVP_PKEY_size(pubKey));
 | 
						|
        buf2 = malloc(EVP_PKEY_size(pubKey));
 | 
						|
 | 
						|
	len = RSA_public_encrypt(strlen(ct)+1, ct, buf, pubKey->pkey.rsa,RSA_PKCS1_PADDING);
 | 
						|
 | 
						|
	if (len != EVP_PKEY_size(pubKey))
 | 
						|
	{
 | 
						|
	    fprintf(stderr,"Error: ciphertext should match length of key\n");
 | 
						|
	    exit(1);
 | 
						|
	}
 | 
						|
 | 
						|
	RSA_private_decrypt(len, buf, buf2, privKey->pkey.rsa,RSA_PKCS1_PADDING);
 | 
						|
 | 
						|
	printf("%s\n", buf2);
 | 
						|
 | 
						|
	EVP_PKEY_free(privKey);
 | 
						|
	EVP_PKEY_free(pubKey);
 | 
						|
	free(buf);
 | 
						|
	free(buf2);
 | 
						|
        return 0;
 | 
						|
}
 |