Skip to main content
  • Home
  • login
  • Browse the archive

    swh mirror partner logo
swh logo
SoftwareHeritage
Software
Heritage
Mirror
Features
  • Search

  • Downloads

  • Save code now

  • Add forge now

  • Help

Revision 3b4f1f302dd1d3a8b71d82bf3900802945a0b431 authored by Dr. Stephen Henson on 19 October 2012, 20:53:35 UTC, committed by Dr. Stephen Henson on 19 October 2012, 20:53:35 UTC
update DRBG to handle new file format
1 parent 986b927
  • Files
  • Changes
  • c17d657
  • /
  • demos
  • /
  • spkigen.c
Raw File
Cook and download a directory from the Software Heritage Vault

You have requested the cooking of the directory with identifier None into a standard tar.gz archive.

Are you sure you want to continue ?

Download a directory from the Software Heritage Vault

You have requested the download of the directory with identifier None as a standard tar.gz archive.

Are you sure you want to continue ?

Cook and download a revision from the Software Heritage Vault

You have requested the cooking of the history heading to revision with identifier swh:1:rev:3b4f1f302dd1d3a8b71d82bf3900802945a0b431 into a bare git archive.

Are you sure you want to continue ?

Download a revision from the Software Heritage Vault

You have requested the download of the history heading to revision with identifier swh:1:rev:3b4f1f302dd1d3a8b71d82bf3900802945a0b431 as a bare git archive.

Are you sure you want to continue ?

Invalid Email !

The provided email is not well-formed.

Download link has expired

The requested archive is no longer available for download from the Software Heritage Vault.

Do you want to cook it again ?

Permalinks

To reference or cite the objects present in the Software Heritage archive, permalinks based on SoftWare Hash IDentifiers (SWHIDs) must be used.
Select below a type of object currently browsed in order to display its associated SWHID and permalink.

  • revision
  • content
revision badge
swh:1:rev:3b4f1f302dd1d3a8b71d82bf3900802945a0b431
content badge Iframe embedding
swh:1:cnt:2cd5dfea970dd65223d10ce75c707940ac3f1ff5
spkigen.c
/* NOCW */
/* demos/spkigen.c
 * 18-Mar-1997 - eay - A quick hack :-) 
 * 		version 1.1, it would probably help to save or load the
 *		private key :-)
 */
#include <stdio.h>
#include <stdlib.h>
#include <openssl/err.h>
#include <openssl/asn1.h>
#include <openssl/objects.h>
#include <openssl/evp.h>
#include <openssl/x509.h>
#include <openssl/pem.h>

/* The following two don't exist in SSLeay but they are in here as
 * examples */
#define PEM_write_SPKI(fp,x) \
	PEM_ASN1_write((int (*)())i2d_NETSCAPE_SPKI,"SPKI",fp,\
			(char *)x,NULL,NULL,0,NULL)
int SPKI_set_pubkey(NETSCAPE_SPKI *x, EVP_PKEY *pkey);

/* These are defined in the next version of SSLeay */
int EVP_PKEY_assign(EVP_PKEY *pkey, int type,char *key);
#define RSA_F4	0x10001
#define EVP_PKEY_assign_RSA(pkey,rsa) EVP_PKEY_assign((pkey),EVP_PKEY_RSA,\
					(char *)(rsa))

int main(argc,argv)
int argc;
char *argv[];
	{
	RSA *rsa=NULL;
	NETSCAPE_SPKI *spki=NULL;
	EVP_PKEY *pkey=NULL;
	char buf[128];
	int ok=0,i;
	FILE *fp;

	pkey=EVP_PKEY_new();
	 
	if (argc < 2)
		{
		/* Generate an RSA key, the random state should have been seeded
		 * with lots of calls to RAND_seed(....) */
		fprintf(stderr,"generating RSA key, could take some time...\n");
		if ((rsa=RSA_generate_key(512,RSA_F4,NULL)) == NULL) goto err;
		}
	else
		{
		if ((fp=fopen(argv[1],"r")) == NULL)
			{ perror(argv[1]); goto err; }
		if ((rsa=PEM_read_RSAPrivateKey(fp,NULL,NULL)) == NULL)
			goto err;
		fclose(fp);
		}
	
	if (!EVP_PKEY_assign_RSA(pkey,rsa)) goto err;
	rsa=NULL;

	/* lets make the spki and set the public key and challenge */
	if ((spki=NETSCAPE_SPKI_new()) == NULL) goto err;

	if (!SPKI_set_pubkey(spki,pkey)) goto err;

	fprintf(stderr,"please enter challenge string:");
	fflush(stderr);
	buf[0]='\0';
	fgets(buf,sizeof buf,stdin);
	i=strlen(buf);
	if (i > 0) buf[--i]='\0';
	if (!ASN1_STRING_set((ASN1_STRING *)spki->spkac->challenge,
		buf,i)) goto err;

	if (!NETSCAPE_SPKI_sign(spki,pkey,EVP_md5())) goto err;
	PEM_write_SPKI(stdout,spki);
	if (argc < 2)
		PEM_write_RSAPrivateKey(stdout,pkey->pkey.rsa,NULL,NULL,0,NULL);

	ok=1;
err:
	if (!ok)
		{
		fprintf(stderr,"something bad happened....");
		ERR_print_errors_fp(stderr);
		}
	NETSCAPE_SPKI_free(spki);
	EVP_PKEY_free(pkey);
	exit(!ok);
	}

/* This function is in the next version of SSLeay */
int EVP_PKEY_assign(pkey,type,key)
EVP_PKEY *pkey;
int type;
char *key;
	{
	if (pkey == NULL) return(0);
	if (pkey->pkey.ptr != NULL)
		{
		if (pkey->type == EVP_PKEY_RSA)
			RSA_free(pkey->pkey.rsa);
		/* else memory leak */
		}
	pkey->type=type;
	pkey->pkey.ptr=key;
	return(1);
	}

/* While I have a 
 * X509_set_pubkey() and X509_REQ_set_pubkey(), SPKI_set_pubkey() does
 * not currently exist so here is a version of it.
 * The next SSLeay release will probably have
 * X509_set_pubkey(),
 * X509_REQ_set_pubkey() and
 * NETSCAPE_SPKI_set_pubkey()
 * as macros calling the same function */
int SPKI_set_pubkey(x,pkey)
NETSCAPE_SPKI *x;
EVP_PKEY *pkey;
	{
	int ok=0;
	X509_PUBKEY *pk;
	X509_ALGOR *a;
	ASN1_OBJECT *o;
	unsigned char *s,*p;
	int i;

	if (x == NULL) return(0);

	if ((pk=X509_PUBKEY_new()) == NULL) goto err;
	a=pk->algor;

	/* set the algorithm id */
	if ((o=OBJ_nid2obj(pkey->type)) == NULL) goto err;
	ASN1_OBJECT_free(a->algorithm);
	a->algorithm=o;

	/* Set the parameter list */
	if ((a->parameter == NULL) || (a->parameter->type != V_ASN1_NULL))
		{
		ASN1_TYPE_free(a->parameter);
		a->parameter=ASN1_TYPE_new();
		a->parameter->type=V_ASN1_NULL;
		}
	i=i2d_PublicKey(pkey,NULL);
	if ((s=(unsigned char *)malloc(i+1)) == NULL) goto err;
	p=s;
	i2d_PublicKey(pkey,&p);
	if (!ASN1_BIT_STRING_set(pk->public_key,s,i)) goto err;
	free(s);

	X509_PUBKEY_free(x->spkac->pubkey);
	x->spkac->pubkey=pk;
	pk=NULL;
	ok=1;
err:
	if (pk != NULL) X509_PUBKEY_free(pk);
	return(ok);
	}

The diff you're trying to view is too large. Only the first 1000 changed files have been loaded.
Showing with 0 additions and 0 deletions (0 / 0 diffs computed)
swh spinner

Computing file changes ...

ENEA — Copyright (C), ENEA. License: GNU AGPLv3+.
Legal notes  ::  JavaScript license information ::  Web API

back to top