#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "rsa.h"
#include "evp.h"
#include "x509.h"

int APP_read_pw_string(char *buf, int len, const char *prompt, int verify)
{
	char pswd[256];
	int pswdlen;
	printf("password:");
	gets(pswd);

	pswdlen = ((len-1) < strlen(pswd))?(len-1):strlen(pswd);
    memcpy(buf, pswd, pswdlen);
	buf[pswdlen] = '\0';
	return(0);
}

void TestIISKey(unsigned char * data, int len)
{
	int i, offset = 0;
	char * pnkey = NULL;
	RSA * rsak = NULL;

	if(data == NULL || len <=0 ) return;
	
	for(i=0; i<len-1; ++i)
		if((data[i] == 0x30) && (data[i+1] == 0x82)) 
		{offset = i ; break; }

	pnkey = & data[offset];

    rsak = d2i_Netscape_RSA(NULL, (unsigned char**)&pnkey, len - offset, (int(*)())APP_read_pw_string);
	
	if(rsak != NULL) printf("Got RSA key!\n");
	else printf("RSA key is NULL!\n");
}

main()
{
	
	char infile[80], outfile[80];
	char fbuffer[4096];
	int flen;
	FILE * fkey = NULL;

	do 
	{
		printf("input the key file name>");
		gets(infile);

		if(strlen(infile) == 0 ) break;
		else 
		{
			fkey = fopen(infile,"rb");
			if(fkey == NULL ) break;

			flen = fread(fbuffer, 1, 4096, fkey);
			if(flen > 4095) 
			{
				fclose(fkey);
				printf("file has too big size!");
				break;
			}
			TestIISKey(fbuffer, flen);
			fclose(infile);
		}

	}while(1);
}
