Skip to content
Snippets Groups Projects
Commit 62352b81 authored by Tim Hudson's avatar Tim Hudson
Browse files

Remove old unused and unmaintained demonstration code.

parent 5c359830
No related branches found
No related tags found
No related merge requests found
CC=cc
CFLAGS= -g -I../../include
#LIBS= -L../.. -lcrypto -lssl
LIBS= -L../.. ../../libssl.a ../../libcrypto.a
# the file conn.c requires a file "proxy.h" which I couldn't find...
#EXAMPLES=base64 conn loadrsa
EXAMPLES=base64 loadrsa
all: $(EXAMPLES)
base64: base64.o
$(CC) -o base64 base64.o $(LIBS)
#
# sorry... can't find "proxy.h"
#conn: conn.o
# $(CC) -o conn conn.o $(LIBS)
loadrsa: loadrsa.o
$(CC) -o loadrsa loadrsa.o $(LIBS)
clean:
rm -f $(EXAMPLES) *.o
/* This is a simple example of using the base64 BIO to a memory BIO and then
* getting the data.
*/
#include <stdio.h>
#include <openssl/bio.h>
#include <openssl/evp.h>
main()
{
int i;
BIO *mbio,*b64bio,*bio;
char buf[512];
char *p;
mbio=BIO_new(BIO_s_mem());
b64bio=BIO_new(BIO_f_base64());
bio=BIO_push(b64bio,mbio);
/* We now have bio pointing at b64->mem, the base64 bio encodes on
* write and decodes on read */
for (;;)
{
i=fread(buf,1,512,stdin);
if (i <= 0) break;
BIO_write(bio,buf,i);
}
/* We need to 'flush' things to push out the encoding of the
* last few bytes. There is special encoding if it is not a
* multiple of 3
*/
BIO_flush(bio);
printf("We have %d bytes available\n",BIO_pending(mbio));
/* We will now get a pointer to the data and the number of elements. */
/* hmm... this one was not defined by a macro in bio.h, it will be for
* 0.9.1. The other option is too just read from the memory bio.
*/
i=(int)BIO_ctrl(mbio,BIO_CTRL_INFO,0,(char *)&p);
printf("%d\n",i);
fwrite("---\n",1,4,stdout);
fwrite(p,1,i,stdout);
fwrite("---\n",1,4,stdout);
/* This call will walk the chain freeing all the BIOs */
BIO_free_all(bio);
}
/* NOCW */
/* demos/eay/conn.c */
/* A minimal program to connect to a port using the sock4a protocol.
*
* cc -I../../include conn.c -L../.. -lcrypto
*/
#include <stdio.h>
#include <stdlib.h>
#include <openssl/err.h>
#include <openssl/bio.h>
/* #include "proxy.h" */
extern int errno;
int main(argc,argv)
int argc;
char *argv[];
{
PROXY *pxy;
char *host;
char buf[1024*10],*p;
BIO *bio;
int i,len,off,ret=1;
if (argc <= 1)
host="localhost:4433";
else
host=argv[1];
/* Lets get nice error messages */
ERR_load_crypto_strings();
/* First, configure proxy settings */
pxy=PROXY_new();
PROXY_add_server(pxy,PROXY_PROTOCOL_SOCKS,"gromit:1080");
bio=BIO_new(BIO_s_socks4a_connect());
BIO_set_conn_hostname(bio,host);
BIO_set_proxies(bio,pxy);
BIO_set_socks_userid(bio,"eay");
BIO_set_nbio(bio,1);
p="GET / HTTP/1.0\r\n\r\n";
len=strlen(p);
off=0;
for (;;)
{
i=BIO_write(bio,&(p[off]),len);
if (i <= 0)
{
if (BIO_should_retry(bio))
{
fprintf(stderr,"write DELAY\n");
sleep(1);
continue;
}
else
{
goto err;
}
}
off+=i;
len-=i;
if (len <= 0) break;
}
for (;;)
{
i=BIO_read(bio,buf,sizeof(buf));
if (i == 0) break;
if (i < 0)
{
if (BIO_should_retry(bio))
{
fprintf(stderr,"read DELAY\n");
sleep(1);
continue;
}
goto err;
}
fwrite(buf,1,i,stdout);
}
ret=1;
if (0)
{
err:
if (ERR_peek_error() == 0) /* system call error */
{
fprintf(stderr,"errno=%d ",errno);
perror("error");
}
else
ERR_print_errors_fp(stderr);
}
BIO_free_all(bio);
if (pxy != NULL) PROXY_free(pxy);
exit(!ret);
return(ret);
}
#include <stdio.h>
#include <openssl/rsa.h>
/* This is a simple program to generate an RSA private key. It then
* saves both the public and private key into a char array, then
* re-reads them. It saves them as DER encoded binary data.
*/
void callback(stage,count,arg)
int stage,count;
char *arg;
{
FILE *out;
out=(FILE *)arg;
fprintf(out,"%d",stage);
if (stage == 3)
fprintf(out,"\n");
fflush(out);
}
main()
{
RSA *rsa,*pub_rsa,*priv_rsa;
int len;
unsigned char buf[1024],*p;
rsa=RSA_generate_key(512,RSA_F4,callback,(char *)stdout);
p=buf;
/* Save the public key into buffer, we know it will be big enough
* but we should really check how much space we need by calling the
* i2d functions with a NULL second parameter */
len=i2d_RSAPublicKey(rsa,&p);
len+=i2d_RSAPrivateKey(rsa,&p);
printf("The public and private key are now both in a char array\n");
printf("and are taking up %d bytes\n",len);
RSA_free(rsa);
p=buf;
pub_rsa=d2i_RSAPublicKey(NULL,&p,(long)len);
len-=(p-buf);
priv_rsa=d2i_RSAPrivateKey(NULL,&p,(long)len);
if ((pub_rsa == NULL) || (priv_rsa == NULL))
ERR_print_errors_fp(stderr);
RSA_free(pub_rsa);
RSA_free(priv_rsa);
}
example1
example2
example3
example4
*.flc
semantic.cache
CC=cc
CFLAGS= -g -I../../include -Wall
LIBS= -L../.. -lcrypto
EXAMPLES=example1 example2 example3 example4
all: $(EXAMPLES)
example1: example1.o loadkeys.o
$(CC) -o example1 example1.o loadkeys.o $(LIBS)
example2: example2.o loadkeys.o
$(CC) -o example2 example2.o loadkeys.o $(LIBS)
example3: example3.o
$(CC) -o example3 example3.o $(LIBS)
example4: example4.o
$(CC) -o example4 example4.o $(LIBS)
clean:
rm -f $(EXAMPLES) *.o
test: all
@echo
@echo Example 1 Demonstrates the sealing and opening APIs
@echo Doing the encrypt side...
./example1 <README >t.t
@echo Doing the decrypt side...
./example1 -d <t.t >t.2
diff t.2 README
rm -f t.t t.2
@echo example1 is OK
@echo
@echo Example2 Demonstrates rsa encryption and decryption
@echo and it should just print \"This the clear text\"
./example2
@echo
@echo Example3 Demonstrates the use of symmetric block ciphers
@echo in this case it uses EVP_des_ede3_cbc
@echo i.e. triple DES in Cipher Block Chaining mode
@echo Doing the encrypt side...
./example3 ThisIsThePassword <README >t.t
@echo Doing the decrypt side...
./example3 -d ThisIsThePassword <t.t >t.2
diff t.2 README
rm -f t.t t.2
@echo example3 is OK
@echo
@echo Example4 Demonstrates base64 encoding and decoding
@echo Doing the encrypt side...
./example4 <README >t.t
@echo Doing the decrypt side...
./example4 -d <t.t >t.2
diff t.2 README
rm -f t.t t.2
@echo example4 is OK
From Maurice Gittens <mgittens@gits.nl>
--
Example programs, demonstrating some basic SSLeay crypto library
operations, to help you not to make the same mistakes I did.
The following files are present.
- loadkeys.c Demonstrates the loading and of public and
private keys.
- loadkeys.h The interface for loadkeys.c
- example1.c Demonstrates the sealing and opening API's
- example2.c Demonstrates rsa encryption and decryption
- example3.c Demonstrates the use of symmetric block ciphers
- example4.c Demonstrates base64 and decoding
- Makefile A makefile you probably will have to adjust for
your environment
- README this file
The programs were written by Maurice Gittens <mgittens@gits.nl>
with the necesary help from Eric Young <eay@cryptsoft.com>
You may do as you please with these programs, but please don't
pretend that you wrote them.
To be complete: If you use these programs you acknowlegde that
you are aware that there is NO warranty of any kind associated
with these programs. I don't even claim that the programs work,
they are provided AS-IS.
January 1997
Maurice
issuer :/C=NL/SP=Brabant/L=Eindhoven/O=Gittens Information Systems B.V./OU=Certification Services/CN=ca.gits.nl/Email=mgittens@gits.nl
subject:/C=NL/SP=Brabant/O=Gittens Information Systems B.V./OU=Certification Services/CN=caleb.gits.nl/Email=mgittens@gits.nl
serial :01
Certificate:
Data:
Version: 0 (0x0)
Serial Number: 1 (0x1)
Signature Algorithm: md5withRSAEncryption
Issuer: C=NL, SP=Brabant, L=Eindhoven, O=Gittens Information Systems B.V., OU=Certification Services, CN=ca.gits.nl/Email=mgittens@gits.nl
Validity
Not Before: Jan 5 13:21:16 1997 GMT
Not After : Jul 24 13:21:16 1997 GMT
Subject: C=NL, SP=Brabant, O=Gittens Information Systems B.V., OU=Certification Services, CN=caleb.gits.nl/Email=mgittens@gits.nl
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Modulus:
00:dd:82:a0:fe:a9:8d:6a:02:7e:78:d6:33:75:9b:
82:01:4b:12:80:ea:6b:9b:83:9e:e3:ae:dc:f3:d0:
71:7c:4b:ea:03:57:b4:cc:ba:44:5b:b8:4b:49:d3:
f6:39:cc:3d:12:1f:da:58:26:27:bc:bc:ab:a4:6d:
62:d1:91:5a:47:9f:80:40:c1:b9:fa:e3:1e:ef:52:
78:46:26:43:65:1d:f2:6b:bf:ff:c0:81:66:14:cd:
81:32:91:f1:f8:51:7d:0e:17:1f:27:fc:c7:51:fd:
1c:73:41:e5:66:43:3c:67:a3:09:b9:5e:36:50:50:
b1:e8:42:bd:5c:c6:2b:ec:a9:2c:fe:6a:fe:40:26:
64:9e:b9:bf:2d:1d:fb:d0:48:5b:82:2a:8e:ab:a4:
d5:7b:5f:26:84:8a:9a:69:5e:c1:71:e2:a9:59:4c:
2a:76:f7:fd:f4:cf:3f:d3:ce:30:72:62:65:1c:e9:
e9:ee:d2:fc:44:00:1e:e0:80:57:e9:41:b3:f0:44:
e5:0f:77:3b:1a:1f:57:5e:94:1d:c3:a5:fa:af:41:
8c:4c:30:6b:2b:00:84:52:0c:64:0c:a8:5b:17:16:
d1:1e:f8:ea:72:01:47:9a:b9:21:95:f9:71:ed:7c:
d2:93:54:0c:c5:9c:e8:e5:40:28:c5:a0:ca:b1:a9:
20:f9
Exponent: 65537 (0x10001)
Signature Algorithm: md5withRSAEncryption
93:08:f9:e0:d4:c5:ca:95:de:4e:38:3b:28:87:e9:d3:b6:ce:
4f:69:2e:c9:09:57:2f:fa:e2:50:9f:39:ec:f3:84:e8:3a:8f:
9b:c3:06:62:90:49:93:6d:23:7a:2b:3d:7b:f9:46:32:18:d3:
87:44:49:f7:29:2f:f3:58:97:70:c3:45:5b:90:52:1c:df:fb:
a8:a3:a1:29:53:a3:4c:ed:d2:51:d0:44:98:a4:14:6f:76:9d:
0d:03:76:e5:d3:13:21:ce:a3:4d:2a:77:fe:ad:b3:47:6d:42:
b9:4a:0e:ff:61:f4:ec:62:b2:3b:00:9c:ac:16:a2:ec:19:c8:
c7:3d:d7:7d:97:cd:4d:1a:d2:00:07:4e:40:3d:b9:ba:1e:e2:
fe:81:28:57:b9:ad:2b:74:59:b0:9f:8b:a5:98:d3:75:06:67:
4a:04:11:b2:ea:1a:8c:e0:d4:be:c8:0c:46:76:7f:5f:5a:7b:
72:09:dd:b6:d3:6b:97:70:e8:7e:17:74:1c:f7:3a:5f:e3:fa:
c2:f7:95:bd:74:5e:44:4b:9b:bd:27:de:02:7f:87:1f:68:68:
60:b9:f4:1d:2b:7b:ce:ef:b1:7f:3a:be:b9:66:60:54:6f:0c:
a0:dd:8c:03:a7:f1:9f:f8:0e:8d:bb:c6:ba:77:61:f7:8e:be:
28:ba:d8:4f
-----BEGIN CERTIFICATE-----
MIIDzzCCArcCAQEwDQYJKoZIhvcNAQEEBQAwgbUxCzAJBgNVBAYTAk5MMRAwDgYD
VQQIEwdCcmFiYW50MRIwEAYDVQQHEwlFaW5kaG92ZW4xKTAnBgNVBAoTIEdpdHRl
bnMgSW5mb3JtYXRpb24gU3lzdGVtcyBCLlYuMR8wHQYDVQQLExZDZXJ0aWZpY2F0
aW9uIFNlcnZpY2VzMRMwEQYDVQQDEwpjYS5naXRzLm5sMR8wHQYJKoZIhvcNAQkB
FhBtZ2l0dGVuc0BnaXRzLm5sMB4XDTk3MDEwNTEzMjExNloXDTk3MDcyNDEzMjEx
NlowgaQxCzAJBgNVBAYTAk5MMRAwDgYDVQQIEwdCcmFiYW50MSkwJwYDVQQKEyBH
aXR0ZW5zIEluZm9ybWF0aW9uIFN5c3RlbXMgQi5WLjEfMB0GA1UECxMWQ2VydGlm
aWNhdGlvbiBTZXJ2aWNlczEWMBQGA1UEAxMNY2FsZWIuZ2l0cy5ubDEfMB0GCSqG
SIb3DQEJARYQbWdpdHRlbnNAZ2l0cy5ubDCCASIwDQYJKoZIhvcNAQEBBQADggEP
ADCCAQoCggEBAN2CoP6pjWoCfnjWM3WbggFLEoDqa5uDnuOu3PPQcXxL6gNXtMy6
RFu4S0nT9jnMPRIf2lgmJ7y8q6RtYtGRWkefgEDBufrjHu9SeEYmQ2Ud8mu//8CB
ZhTNgTKR8fhRfQ4XHyf8x1H9HHNB5WZDPGejCbleNlBQsehCvVzGK+ypLP5q/kAm
ZJ65vy0d+9BIW4Iqjquk1XtfJoSKmmlewXHiqVlMKnb3/fTPP9POMHJiZRzp6e7S
/EQAHuCAV+lBs/BE5Q93OxofV16UHcOl+q9BjEwwaysAhFIMZAyoWxcW0R746nIB
R5q5IZX5ce180pNUDMWc6OVAKMWgyrGpIPkCAwEAATANBgkqhkiG9w0BAQQFAAOC
AQEAkwj54NTFypXeTjg7KIfp07bOT2kuyQlXL/riUJ857POE6DqPm8MGYpBJk20j
eis9e/lGMhjTh0RJ9ykv81iXcMNFW5BSHN/7qKOhKVOjTO3SUdBEmKQUb3adDQN2
5dMTIc6jTSp3/q2zR21CuUoO/2H07GKyOwCcrBai7BnIxz3XfZfNTRrSAAdOQD25
uh7i/oEoV7mtK3RZsJ+LpZjTdQZnSgQRsuoajODUvsgMRnZ/X1p7cgndttNrl3Do
fhd0HPc6X+P6wveVvXReREubvSfeAn+HH2hoYLn0HSt7zu+xfzq+uWZgVG8MoN2M
A6fxn/gOjbvGundh946+KLrYTw==
-----END CERTIFICATE-----
/* NOCW */
/*
Please read the README file for condition of use, before
using this software.
Maurice Gittens <mgittens@gits.nl> January 1997
*/
#include <unistd.h>
#include <stdio.h>
#include <netinet/in.h>
#include <fcntl.h>
#include <strings.h>
#include <stdlib.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
void main_encrypt(void);
void main_decrypt(void);
static const char *usage = "Usage: example1 [-d]\n";
int main(int argc, char *argv[])
{
ERR_load_crypto_strings();
if ((argc == 1))
{
main_encrypt();
}
else if ((argc == 2) && !strcmp(argv[1],"-d"))
{
main_decrypt();
}
else
{
printf("%s",usage);
exit(1);
}
return 0;
}
void main_encrypt(void)
{
unsigned int ebuflen;
EVP_CIPHER_CTX ectx;
unsigned char iv[EVP_MAX_IV_LENGTH];
unsigned char *ekey[1];
int readlen;
int ekeylen, net_ekeylen;
EVP_PKEY *pubKey[1];
char buf[512];
char ebuf[512];
memset(iv, '\0', sizeof(iv));
pubKey[0] = ReadPublicKey(PUBFILE);
if(!pubKey[0])
{
fprintf(stderr,"Error: can't load public key");
exit(1);
}
ekey[0] = malloc(EVP_PKEY_size(pubKey[0]));
if (!ekey[0])
{
EVP_PKEY_free(pubKey[0]);
perror("malloc");
exit(1);
}
EVP_SealInit(&ectx,
EVP_des_ede3_cbc(),
ekey,
&ekeylen,
iv,
pubKey,
1);
net_ekeylen = htonl(ekeylen);
write(STDOUT, (char*)&net_ekeylen, sizeof(net_ekeylen));
write(STDOUT, ekey[0], ekeylen);
write(STDOUT, iv, sizeof(iv));
while(1)
{
readlen = read(STDIN, buf, sizeof(buf));
if (readlen <= 0)
{
if (readlen < 0)
perror("read");
break;
}
EVP_SealUpdate(&ectx, ebuf, &ebuflen, buf, readlen);
write(STDOUT, ebuf, ebuflen);
}
EVP_SealFinal(&ectx, ebuf, &ebuflen);
write(STDOUT, ebuf, ebuflen);
EVP_PKEY_free(pubKey[0]);
free(ekey[0]);
}
void main_decrypt(void)
{
char buf[520];
char ebuf[512];
unsigned int buflen;
EVP_CIPHER_CTX ectx;
unsigned char iv[EVP_MAX_IV_LENGTH];
unsigned char *encryptKey;
unsigned int ekeylen;
EVP_PKEY *privateKey;
memset(iv, '\0', sizeof(iv));
privateKey = ReadPrivateKey(PRIVFILE);
if (!privateKey)
{
fprintf(stderr, "Error: can't load private key");
exit(1);
}
read(STDIN, &ekeylen, sizeof(ekeylen));
ekeylen = ntohl(ekeylen);
if (ekeylen != EVP_PKEY_size(privateKey))
{
EVP_PKEY_free(privateKey);
fprintf(stderr, "keylength mismatch");
exit(1);
}
encryptKey = malloc(sizeof(char) * ekeylen);
if (!encryptKey)
{
EVP_PKEY_free(privateKey);
perror("malloc");
exit(1);
}
read(STDIN, encryptKey, ekeylen);
read(STDIN, iv, sizeof(iv));
EVP_OpenInit(&ectx,
EVP_des_ede3_cbc(),
encryptKey,
ekeylen,
iv,
privateKey);
while(1)
{
int readlen = read(STDIN, ebuf, sizeof(ebuf));
if (readlen <= 0)
{
if (readlen < 0)
perror("read");
break;
}
EVP_OpenUpdate(&ectx, buf, &buflen, ebuf, readlen);
write(STDOUT, buf, buflen);
}
EVP_OpenFinal(&ectx, buf, &buflen);
write(STDOUT, buf, buflen);
EVP_PKEY_free(privateKey);
free(encryptKey);
}
/* 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;
}
/* NOCW */
/*
Please read the README file for condition of use, before
using this software.
Maurice Gittens <mgittens@gits.nl> January 1997
*/
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <openssl/evp.h>
#define STDIN 0
#define STDOUT 1
#define BUFLEN 512
#define INIT_VECTOR "12345678"
#define ENCRYPT 1
#define DECRYPT 0
#define ALG EVP_des_ede3_cbc()
static const char *usage = "Usage: example3 [-d] password\n";
void do_cipher(char *,int);
int main(int argc, char *argv[])
{
if ((argc == 2))
{
do_cipher(argv[1],ENCRYPT);
}
else if ((argc == 3) && !strcmp(argv[1],"-d"))
{
do_cipher(argv[2],DECRYPT);
}
else
{
fprintf(stderr,"%s", usage);
exit(1);
}
return 0;
}
void do_cipher(char *pw, int operation)
{
char buf[BUFLEN];
char ebuf[BUFLEN + 8];
unsigned int ebuflen; /* rc; */
unsigned char iv[EVP_MAX_IV_LENGTH], key[EVP_MAX_KEY_LENGTH];
/* unsigned int ekeylen, net_ekeylen; */
EVP_CIPHER_CTX ectx;
memcpy(iv, INIT_VECTOR, sizeof(iv));
EVP_BytesToKey(ALG, EVP_md5(), "salu", pw, strlen(pw), 1, key, iv);
EVP_CIPHER_CTX_init(&ectx);
EVP_CipherInit_ex(&ectx, ALG, NULL, key, iv, operation);
while(1)
{
int readlen = read(STDIN, buf, sizeof(buf));
if (readlen <= 0)
{
if (!readlen)
break;
else
{
perror("read");
exit(1);
}
}
EVP_CipherUpdate(&ectx, ebuf, &ebuflen, buf, readlen);
write(STDOUT, ebuf, ebuflen);
}
EVP_CipherFinal_ex(&ectx, ebuf, &ebuflen);
EVP_CIPHER_CTX_cleanup(&ectx);
write(STDOUT, ebuf, ebuflen);
}
/* NOCW */
/*
Please read the README file for condition of use, before
using this software.
Maurice Gittens <mgittens@gits.nl> January 1997
*/
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <openssl/evp.h>
#define STDIN 0
#define STDOUT 1
#define BUFLEN 512
static const char *usage = "Usage: example4 [-d]\n";
void do_encode(void);
void do_decode(void);
int main(int argc, char *argv[])
{
if ((argc == 1))
{
do_encode();
}
else if ((argc == 2) && !strcmp(argv[1],"-d"))
{
do_decode();
}
else
{
fprintf(stderr,"%s", usage);
exit(1);
}
return 0;
}
void do_encode()
{
char buf[BUFLEN];
char ebuf[BUFLEN+24];
unsigned int ebuflen;
EVP_ENCODE_CTX ectx;
EVP_EncodeInit(&ectx);
while(1)
{
int readlen = read(STDIN, buf, sizeof(buf));
if (readlen <= 0)
{
if (!readlen)
break;
else
{
perror("read");
exit(1);
}
}
EVP_EncodeUpdate(&ectx, ebuf, &ebuflen, buf, readlen);
write(STDOUT, ebuf, ebuflen);
}
EVP_EncodeFinal(&ectx, ebuf, &ebuflen);
write(STDOUT, ebuf, ebuflen);
}
void do_decode()
{
char buf[BUFLEN];
char ebuf[BUFLEN+24];
unsigned int ebuflen;
EVP_ENCODE_CTX ectx;
EVP_DecodeInit(&ectx);
while(1)
{
int readlen = read(STDIN, buf, sizeof(buf));
int rc;
if (readlen <= 0)
{
if (!readlen)
break;
else
{
perror("read");
exit(1);
}
}
rc = EVP_DecodeUpdate(&ectx, ebuf, &ebuflen, buf, readlen);
if (rc <= 0)
{
if (!rc)
{
write(STDOUT, ebuf, ebuflen);
break;
}
fprintf(stderr, "Error: decoding message\n");
return;
}
write(STDOUT, ebuf, ebuflen);
}
EVP_DecodeFinal(&ectx, ebuf, &ebuflen);
write(STDOUT, ebuf, ebuflen);
}
/* NOCW */
/*
Please read the README file for condition of use, before
using this software.
Maurice Gittens <mgittens@gits.nl> January 1997
*/
#include <unistd.h>
#include <stdio.h>
#include <netinet/in.h>
#include <fcntl.h>
#include <strings.h>
#include <stdlib.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>
EVP_PKEY * ReadPublicKey(const char *certfile)
{
FILE *fp = fopen (certfile, "r");
X509 *x509;
EVP_PKEY *pkey;
if (!fp)
return NULL;
x509 = PEM_read_X509(fp, NULL, 0, NULL);
if (x509 == NULL)
{
ERR_print_errors_fp (stderr);
return NULL;
}
fclose (fp);
pkey=X509_extract_key(x509);
X509_free(x509);
if (pkey == NULL)
ERR_print_errors_fp (stderr);
return pkey;
}
EVP_PKEY *ReadPrivateKey(const char *keyfile)
{
FILE *fp = fopen(keyfile, "r");
EVP_PKEY *pkey;
if (!fp)
return NULL;
pkey = PEM_read_PrivateKey(fp, NULL, 0, NULL);
fclose (fp);
if (pkey == NULL)
ERR_print_errors_fp (stderr);
return pkey;
}
/* NOCW */
/*
Please read the README file for condition of use, before
using this software.
Maurice Gittens <mgittens@gits.nl> January 1997
*/
#ifndef LOADKEYS_H_SEEN
#define LOADKEYS_H_SEEN
#include <openssl/evp.h>
EVP_PKEY * ReadPublicKey(const char *certfile);
EVP_PKEY *ReadPrivateKey(const char *keyfile);
#endif
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA3YKg/qmNagJ+eNYzdZuCAUsSgOprm4Oe467c89BxfEvqA1e0
zLpEW7hLSdP2Ocw9Eh/aWCYnvLyrpG1i0ZFaR5+AQMG5+uMe71J4RiZDZR3ya7//
wIFmFM2BMpHx+FF9DhcfJ/zHUf0cc0HlZkM8Z6MJuV42UFCx6EK9XMYr7Kks/mr+
QCZknrm/LR370EhbgiqOq6TVe18mhIqaaV7BceKpWUwqdvf99M8/084wcmJlHOnp
7tL8RAAe4IBX6UGz8ETlD3c7Gh9XXpQdw6X6r0GMTDBrKwCEUgxkDKhbFxbRHvjq
cgFHmrkhlflx7XzSk1QMxZzo5UAoxaDKsakg+QIDAQABAoIBAQC0hnh083PnuJ6g
Flob+B+stCUhYWtPc6ZzgphaMD+9ABV4oescipWZdooNYiyikBwZgFIvUvFBtTXh
rLBDgUVlZ81beUb7/EvC2aBh818rsotWW0Sw/ARY4d7wetcL/EWBzUA8E5vR6wlb
uZGelR9OiyYqp2h2bj1/v5yaVnuHxBeBj5clTHtPMXc+/70iUNBDMZ0ruZTdSwll
e0DH8pp/5USYewlrKtRIJT7elC8LFMqEz4OpNvfaR2OEY0FatYYmSvQPNwV8/Eor
XlNzRi9qD0uXbVexaAgQZ3/KZuAzUbOgwJZZXEAOGkZ/J1n08jljPXdU0o7bHhNl
7siHbuEBAoGBAP53IvvJkhnH8Akf6E6sXelZkPKHnwDwfywDAiIhXza9DB1DViRS
bZUB5gzcxmLGalex5+LcwZmsqFO5NXZ8SQeE9p0YT8yJsX4J1w9JzSvsWJBS2vyW
Kbt21oG6JAGrWSGMIfxKpuahtWLf4JpGjftti0qIVQ60GKEPc1/xE2PZAoGBAN7Y
nRPaUaqcIwbnH9kovOKwZ/PWREy1ecr3YXj65VYTnwSJHD0+CJa/DX8eB/G4AoNA
Y2LPbq0Xu3+7SaUsO45VkaZuJmNwheUQ4tmyd/YdnVZ0AHXx1tvpR7QeO0WjnlNK
mR+x00fetrff2Ypahs0wtU0Xf3F8ORgVB8jnxBIhAoGAcwf0PpI+g30Im3dbEsWE
poogpiJ81HXjZ0fs3PTtD9eh9FCOTlkcxHFZR5M980TyqbX4t2tH8WpFpaNh8a/5
a3bF7PoiiLnuDKXyHC0mnKZ42rU53VkcgGwWSAqXYFHPNwUcD+rHTBbp4kqGQ/eF
E5XPk9/RY5YyVAyiAUr/kvECgYBvW1Ua75SxqbZDI8mhbZ79tGMt0NtubZz/1KCL
oOxrGAD1dkJ7Q/1svunSpMIZgvcWeV1wqfFHY72ZNZC2jiTwmkffH9nlBPyTm92Q
JYOWo/PUmMEGLyRL3gWrtxOtV/as7nEYCndmyZ8KwTxmy5fi/z0J2f0gS5AIPbIX
LeGnoQKBgQDapjz9K4HWR5AMxyga4eiLIrmADySP846uz3eZIvTJQZ+6TAamvnno
KbnU21cGq5HBBtxqQvGswLPGW9rZAgykHHJmYBUp0xv4+I4qHfXyD7QNmvq+Vxjj
V2tgIafEpaf2ZsfM7BZeZz8MzeGcDwyrHtIO1FQiYN5Qz9Hq68XmVA==
-----END RSA PRIVATE KEY-----
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment