Programmation c

iljamila Messages postés 8 Date d'inscription mardi 8 octobre 2002 Statut Membre Dernière intervention 17 juin 2003 - 26 oct. 2002 à 14:42
Bricomix Messages postés 340 Date d'inscription vendredi 11 octobre 2002 Statut Membre Dernière intervention 14 février 2005 - 27 oct. 2002 à 16:02
Je travaille sous linux, avec la programmation c.
Voilà, j'ai un programme de signature numérique qui entre un fichier en lecture afin de le signer. Mais, j'ai remarqué que même si je fais entrer un fichier vide j'ai comme même la signature, sinon si je fais un mv fichier_initiale fichier_nouveau pour changer son contenu celà engendre un problème au niveau du terminal (bash ilisible).
Ici le code :
#include <stdio.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 <string.h>
int main ()
{
int err;
int sig_len;
unsigned char sig_buf [4096];
static char certfile[] = "cert.pem";
static char keyfile[] = "key.pem";
static char fichierfile[] = "ter" ;
EVP_MD_CTX md_ctx;
EVP_PKEY * pkey;
FILE * fp;
X509 * x509;
char szBuffer[1024];
unsigned int n;
/* Just load the crypto library error strings,
* SSL_load_error_strings() loads the crypto AND the SSL ones */
/* SSL_load_error_strings();*/
ERR_load_crypto_strings();
/* Read private key */
fp = fopen (keyfile, "r");
if (fp == NULL) exit (1);
pkey = PEM_read_PrivateKey(fp, NULL, 0, NULL);
fclose (fp);
if (pkey == NULL) {
ERR_print_errors_fp (stderr);
exit (1); }
/* Do the signature */
if((fp = fopen(fichierfile, "r")) != NULL) /*on ouvre le fichier et verifie si on y arrive*/
{ while (!feof(fp)) {
fread(&szBuffer, sizeof(szBuffer),1, fp); /*on range les caractere dans le buffer */
if(szBuffer == '\0') //si c'est la fin de la ligne
printf("\n"); //on "affiche" un saut de ligne
printf("%s",szBuffer); /*on affiche ce que contient le buffer */ } }
EVP_SignInit (&md_ctx, EVP_sha1());
n = strlen(szBuffer) ;
printf("la valeur de n: %u \n ", n);
EVP_SignUpdate (&md_ctx, szBuffer, n);
sig_len = sizeof(sig_buf);
err = EVP_SignFinal (&md_ctx, sig_buf, &sig_len, pkey);
fclose(fp);
printf("la signature est: %s \n ", sig_buf);
if (err != 1) {
ERR_print_errors_fp(stderr);
exit (1); }
EVP_PKEY_free (pkey);
/* Read public key */
fp = fopen (certfile, "r");
if (fp == NULL) exit (1);
x509 = PEM_read_X509(fp, NULL, 0, NULL);
fclose (fp);
if (x509 == NULL) {
ERR_print_errors_fp (stderr);
exit (1); }
/* Get public key - eay */
pkey=X509_get_pubkey(x509);
if (pkey == NULL) {
ERR_print_errors_fp (stderr);
exit (1); }
/* Verify the signature */
if((fp = fopen(fichierfile, "r")) != NULL) /*on ouvre le fichier et verifie si on y arrive*/
{ while (!feof(fp))
fread(&szBuffer, sizeof(szBuffer),1, fp);
EVP_VerifyInit (&md_ctx, EVP_sha1());
n = strlen(szBuffer) ;
printf("la valeur de n: %u \n ", n);
EVP_VerifyUpdate (&md_ctx,szBuffer,n );
} fclose (fp);
err = EVP_VerifyFinal (&md_ctx, sig_buf, sig_len, pkey);
EVP_PKEY_free (pkey);
if (err != 1) {
ERR_print_errors_fp (stderr);
exit (1); }
printf("la vérification donne : %s \n ", sig_buf);
printf("la valeur finale de sig_buf : %s \n ", sig_buf);
printf ("Signature Verified Ok. \n");
printf ("la valeur de err : %d \n ", err);
return(0); }
Voilà, si quelqu'un peut m'aider, vraiment c'est très important et urgent :( Merci.

1 réponse

Bricomix Messages postés 340 Date d'inscription vendredi 11 octobre 2002 Statut Membre Dernière intervention 14 février 2005
27 oct. 2002 à 16:02
Ici c'est pour VB, et pis en plus, j'y connais rien au C !!!

:-p Bricomix :-p
0
Rejoignez-nous