newbie questions

salvatore salvatore_uni at tiscali.it
Thu Jul 15 14:09:55 CEST 2004


Hi guys,

After reading ALL the messages in the mailing list since 1999 i was finally able to write some working code(almost working).I also had a look at the code in the test dir.Ok i'll go straight to the point... here is the code

int main()
{
	gcry_sexp_t p_key, s_key, data_to_encrypt, data_encrypted, data_decrypted;
	gcry_mpi_t mpi_string, mpi_decrypted;

	char buffer[1024],d_buffer[1024];
	size_t len_buffer, written;
	int err;

	printf("\nGenerating RSA key...\n");
	sleep(1);
	generate_rsa_keys(&p_key,&s_key);	

	printf("\nTo encrypt a buffer these are the steps ...		\
		\nchar -> mpi -> S-exp -> cripta	\
		\n");

	printf("\nString to encrypt ---> ");
	fgets(buffer, 1024, stdin);
	len_buffer = strlen(buffer);

	printf("\nChar -> mpi ...\t");

	if( err = gcry_mpi_scan( &mpi_string,GCRYMPI_FMT_USG, buffer, len_buffer, NULL) )	/* From char to mpi */
	{
		fprintf(stderr,"Errore nella conversione da char a mpi\n");
		exit(1);
	}
	
	sleep(1);	printf("[ok]\n");

	printf("\nmpi -> S-exp ...\t");

	if( err = gcry_sexp_build( &data_to_encrypt, NULL, "(data(flags raw)(value %m))",mpi_string))	/* From mpi to S-exp */
	{
		fprintf(stderr,"Errore nella conversione da mpi a S-exp\n");
                exit(1);
	}
	
	sleep(1);	printf("[ok]\n");
	
	gcry_mpi_release( mpi_string );		/* la mpi non serve piu */

	printf("\nCripta la S-exp...\t");

	if( err = gcry_pk_encrypt( &data_encrypted, data_to_encrypt ,p_key))	/* Encrpt the S-exp in data_to_crypt and put the result in data encrypted */
	{
		fprintf(stderr,"Errore durante la criptazione\n");
		exit(1);
	}

	sleep(1);	printf("[ok]\n");

	gcry_sexp_release( data_to_encrypt );		/* non serve piu */

	printf("\nAdesso facciamo il contrario...	\
		\ndecripta -> S-exp -> mpi -> char	\
		\n");

	printf("\nDecripta la S-exp...\t");
	sleep(1);	

	if( err = gcry_pk_decrypt( &data_decrypted, data_encrypted, s_key) )	/* decripta la S-exp */
	{
		fprintf(stderr,"Errore durante la decriptazione\n");		
                exit(1);
        }

	sleep(1);	printf("[ok]\n");

	gcry_sexp_release( data_encrypted );	/* non server piu */

	printf("\nS-exp -> mpi ...\t");

	if( (mpi_decrypted = gcry_sexp_nth_mpi( data_decrypted, 0 , 0 )) == NULL )	/* da S-exp a mpi */
	{ 
		fprintf(stderr,"Errore nella conversione da S-exp a mpi\n");
		exit(1);
	}

	sleep(1);	printf("[ok]\n");

	gcry_sexp_release( data_decrypted );

	printf("\nmpi -> char ...\t");

	/* I think here is the problem */

	if( err = gcry_mpi_print(GCRYMPI_FMT_USG, d_buffer, len_buffer, &written, mpi_decrypted ))	/* da mpi a char */
	{
		fprintf(stderr,"Errore nella conversione da mpi a char \n");
		exit(1);
	} 

	sleep(1);	printf("[ok]\n");

	gcry_mpi_release( mpi_decrypted );		/* non serve piu */

	printf("\n La stringa decriptata ----> %s",d_buffer);		/* se coincide con buffer funziona! */

	return 0;
}


The problem is that the string decrypted is the one i entered PLUS some weird characters!!Really don't where those
characters come from.What do i do wrong?!

Thanks in advance

Regards
Salvo



More information about the Gcrypt-devel mailing list