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); } }
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); }