Hello,

[EMAIL PROTECTED] wrote on 05/30/2008 12:34:15 PM:

> Hello,
> i have created the following code to test the use of RSA (signautre):
> 
> #include <stdio.h>
> #include <stdlib.h>
> #include <stdint.h>
> #include <fcntl.h>
> #include <unistd.h>
> #include <string.h>
> #include <openssl/engine.h>
> #include <openssl/err.h>
> #include <openssl/rsa.h>
> #include <openssl/rand.h>
> #include <openssl/sha.h>
> 
> main ()
> {
> 
> long erreur = 0;
> char *message="vatos locos para siempre";
> char *encrypt, *decrypt, *sign, 
hash[SHA_DIGEST_LENGTH],hash1[SHA_DIGEST_LENGTH];
> int longmsg,i,random,ok;
> int siglong;
> RSA *rsa;
> 
>          random= RAND_load_file("/dev/urandom ",1024);//seeding the 
Pseudo random generator
> 
>          rsa = RSA_generate_key(128,13,NULL,NULL);//generating a key 
having a 128 bits modulus 
> 
>          SHA1(message,strlen(message),hash);    //computing a digest 
using SHA1
>          for(i=0; i<20; ++i){
>                      printf("%x",hash[i]);}
>                              printf("\n"); 
> 
>          sign=(unsigned char*)malloc(RSA_size(rsa)); 
>          ok= 
RSA_sign(NID_sha1,hash,strlen(hash),sign,&siglong,rsa);//generating the 
> signature using RSA
>          erreur= ERR_get_error();
>          printf("signature = %d \n",ok);
>          printf("signature length =%d \n",siglong);
>          printf("erreur =%d \n",erreur); 
>          printf("PRNG random =%d \n",random);
>          printf("strlen(hash) =%d \n",strlen(hash)); 
> RSA_free(rsa);
> free(sign);
> 
> }
> 
> After i compiled it using: gcc rsa.c -o rsa -lssl
> And i received the following results:
> 
ffffff9c6bffffffdd1c5dffffff915ffffffff7ffffffdbffffff93ffffffab3c23ffffffe5ffffffb344ffffff8b49632
> signature = 0 
> signature length =-1209806408 
> erreur =67588208 
> PRNG random =0 
> strlen(hash) =20 
> 
> here are my questions:
> 1- why RSA_sign returned a 0 (signautre = 0) which means the failure of 
the key generation?
> 2- why the signautre has a negative value unstead of having 20 bytes 
length?
> 3- why the function RAND_load_file returned zero unstead of returning 
the number of 
> bytes obtained after seeding the PRNG?
Try:
 - buffers for RSA_* functions mostly are "unsigned char*", not "char *"
 - use -Wall at compile time and look at any warnings like "passing 
argument 2 of ‘RSA_sign’ differ in signedness"
 - do not use strlen() on signatures, signatures are binary data, not 
strings
 - you can not create RSA signature from 160 bit hash using 128 bit RSA 
key.
 - add SSL_load_error_strings() and SSL_library_init().

Best regards,
--
Marek Marcola <[EMAIL PROTECTED]>

:��I"Ϯ��r�m����
(����Z+�K�+����1���x��h����[�z�(����Z+���f�y�������f���h��)z{,���

Reply via email to