Exemple #1
0
int main(int argc, char **argv)
{
    if (argc < 3)
    {
        printf("Usage: %s inputfile outputfile [privkeyfile]\n", argv[0]);
        exit(0);
    }

    char *ptxtfname = argv[2];
    char *ctxtfname = argv[1];
    char *pkeyfname;

    if (argc != 4)
    {
        pkeyfname = "id_rsa";
    } else {
        pkeyfname = argv[3];
    }

    FILE *fptxt = fopen(ptxtfname, "r");
    FILE *fctxt = fopen(ctxtfname, "w");
    FILE *fpkey = fopen(pkeyfname, "r");

    key pkey;
    mpz_init(pkey.p);
    mpz_init(pkey.q);
    mpz_init(pkey.n);
    mpz_init(pkey.phi);
    mpz_init(pkey.e);
    mpz_init(pkey.d);

    gmp_fscanf(fpkey, "%Zd", &pkey.p);
    gmp_fscanf(fpkey, "%Zd", &pkey.q);
    gmp_fscanf(fpkey, "%Zd", &pkey.n);
    gmp_fscanf(fpkey, "%Zd", &pkey.phi);
    gmp_fscanf(fpkey, "%Zd", &pkey.e);
    gmp_fscanf(fpkey, "%Zd", &pkey.d);

    int c = getc(fptxt);
    int count = 0;
    mpz_t next;
    mpz_init(next);
    while (c != EOF)
    {
        decrypt_char(next, c, pkey);
        gmp_fprintf(fctxt, "%Zd\n", next);
        c = getc(fptxt);
    }
}
Exemple #2
0
void decrypt_file(char *file_in, char *file_out, char *key, int key_size)
{
	int i;
	string input, output;
	char *out_content;
	
	//Précond.
	if(file_in == NULL || file_out == NULL || key == NULL){
	
		fprintf(stderr, "[decrypt_file] Erreur dans les paramètres\n");
		exit(0);
	}
	
	//Traitement
	input = readstring(file_in);
	
	if((out_content = (char*) malloc(input.length * sizeof(char))) == NULL){
	
		perror("[decrypt_file] Erreur dans l'allocation de la chaîne de résultat");
		exit(MEM_ERROR);
	}
	
	//Déchiffrage du fichier d'entrée
	for(i = 0; i < input.length; i++)
	{
		out_content[i] = decrypt_char(input.content[i], key[i%key_size]);
	}

	output.content = out_content;
	output.length = input.length;
	writestring(file_out, output);
	
	//Nettoyage
	free(out_content);
	free(input.content);
}