00001 #include "MyLib.h"
00002
00003
00004
00005 const int matrix_N=25;
00006 const int matrix_M=25;
00008 void WyswietlMacierz(int n, int m, double a[][matrix_M])
00009 {
00010 int i,j;
00011
00012 for(i=0; i<n; i=i+1)
00013 {
00014 for(j=0; j<m; j=j+1)
00015 {
00016 printf("%6.2lf ",a[i][j]);
00017 }
00018 printf("\n");
00019 }
00020 }
00021
00022 void ZapisMacierzy(char *NazwaPliku, int n, int m, double a[][matrix_M])
00023 {
00024 FILE *fPlik;
00025 int i,j;
00026
00027 fPlik = fopen(NazwaPliku,"w");
00028 fprintf(fPlik,"%i\n%i\n",n,m);
00029 for(i=0; i<n; i=i+1)
00030 {
00031 for(j=0; j<m; j=j+1)
00032 {
00033 fprintf(fPlik,"%4.2lf\n",a[i][j]);
00034 }
00035 }
00036 fclose(fPlik);
00037 }
00038
00039 void OdczytMacierzy(const char *NazwaPliku, int *n, int *m, double a[][matrix_M])
00040 {
00041 FILE *fPlik;
00042 int i,j;
00043
00044 fPlik = fopen(NazwaPliku,"r");
00045 fscanf(fPlik,"%i", n);
00046 fscanf(fPlik,"%i", m);
00047 for(i=0; i<*n; i=i+1)
00048 {
00049 for(j=0; j<*m; j=j+1)
00050 {
00051 fscanf(fPlik,"%lf",&a[i][j]);
00052 }
00053 }
00054 fclose(fPlik);
00055 }
00056
00057
00058
00059 const char separator[] = ";\r\t\n";
00060 const char sepStr[] = "\"";
00061
00067 int parserCSV(char *buf, char *ws[], int n, const char *delim)
00068 {
00069 int i;
00070
00071 ws[0] = buf;
00072 for(i=1; i<=n; i=i+1)
00073 {
00074 ws[i] = strpbrk(ws[i-1], delim);
00075 if( ws[i]==NULL)
00076 break;
00077 *ws[i] = '\0';
00078 ws[i] = ws[i]+1;
00079 }
00080 return i-1;
00081 }
00082
00083 void readCSV(char *nazwaCSV,int *N, struct TLst Lst[])
00084 {
00085 char buf[1024],*wr,*ws[32],*wt[3];
00086 FILE *fDane;
00087 int i,n;
00088
00089 fDane = fopen(nazwaCSV, "r");
00090 *N = 0;
00091 n = 3;
00092 if( fDane==NULL )
00093 {
00094 perror(nazwaCSV);
00095 exit(-1);
00096 }
00097 printf("z pliku \"%s\"", nazwaCSV);
00098 while( fgets(buf,1024,fDane)!=NULL )
00099 {
00100
00101
00102
00103 if( parserCSV(buf, ws, n, separator)!=n )
00104 continue;
00105 for(i=0; i<n; i=i+1)
00106 {
00107 if( parserCSV(ws[i], wt, 2, sepStr)==2 )
00108 {
00109 switch( i )
00110 {
00111 case 0:
00112 strcpy(Lst[*N].Im, wt[1]);
00113 break;
00114 case 1:
00115 strcpy(Lst[*N].Na, wt[1]);
00116 break;
00117 default:
00118 puts("ERROR: zly rekord !?");
00119 break;
00120 }
00121 }
00122 else
00123 {
00124 wr = strchr(ws[i],',');
00125 if( wr!=NULL)
00126 *wr = '.';
00127 Lst[*N].Ocena = atof(ws[i]);
00128 }
00129 }
00130 *N = *N+1;
00131 }
00132 fclose(fDane);
00133 }
00134
00135
00136
00137 const int rsa_p = 61;
00138 const int rsa_q = 53;
00140 const char rsa_naFin[] = "_MyLib.c";
00141 const char rsa_naFcrp[] = "_MyLib.crp";
00142 const char rsa_naFres[] = "_MyLib.res";
00149 int NWD(int p, int q)
00150 {
00151 int r;
00152
00153 if( p<1 || q<1 )
00154 {
00155 puts("Ups ...");
00156 exit(-1);
00157 }
00158 for(r=p%q; r!=0; r=p%q)
00159 {
00160 p = q;
00161 q = r;
00162 }
00163 return q;
00164 }
00165
00169 int NWDr(int p, int q, int *x, int *y)
00170 {
00171 int r,t,xp,xr,yp,yr;
00172
00173 if( p<1 || q<1 )
00174 {
00175 puts("Ups ...");
00176 exit(-1);
00177 }
00178 xp = *y = 1;
00179 *x = yp = 0;
00180 for(r=p%q; r!=0; r=p%q)
00181 {
00182 t = p/q;
00183 p = q;
00184 q = r;
00185 xr = *x;
00186 *x = xp - t*xr;
00187 xp = xr;
00188 yr = *y;
00189 *y = yp - t*yr;
00190 yp = yr;
00191 }
00192 return q;
00193 }
00194
00198 int pmod(int b, int e, int m)
00199 {
00200 int c;
00201
00202 for(c=1; 1<=e; e=e-1)
00203 {
00204 c = (c*b)%m;
00205 }
00206 return c;
00207 }
00208
00216 int testPodziel( int n)
00217 {
00218 int i,m;
00219
00220 m = n/2;
00221 for(i=2; i<m && n%i ; i=i+1)
00222 ;
00223 return (int)(i<m);
00224 }
00225
00230 int genKluczeRSA(int *e, int *d, int p, int q)
00231 {
00232 int n,fi_n,y;
00233
00234 if(testPodziel(p) || testPodziel(q))
00235 {
00236 puts("Upss ...");
00237 exit(-1);
00238 }
00239 n = p*q;
00240 fi_n = (p-1)*(q-1);
00246 *e = 17;
00247 if( NWD(*e,fi_n)!=1 )
00248 {
00249 puts("Upss ...");
00250 exit(-1);
00251 }
00256 NWDr(*e,fi_n,d,&y);
00257 while( *d<0 )
00258 {
00259 *d = (*d+fi_n) % fi_n;
00260 }
00261 return n;
00262 }
00263
00269 int sizeF(const char *naF)
00270 {
00271 struct stat sb;
00272
00273 if( stat(naF, &sb)==-1 )
00274 {
00275 perror(naF);
00276 exit(-1);
00277 }
00278 return (int)sb.st_size;
00279 }
00280
00286 void kryptFile(const char *naFout, const char *naFin, int e, int n)
00287 {
00288 FILE *Fout,*Fin;
00289 int i,N,M0,P;
00290 #if RSA_HEX
00291 char str[10],c;
00292 #else
00293 char c;
00294 #endif
00295
00296 N = sizeF(naFin);
00297 Fin = fopen(naFin, "r");
00298 if( Fin==NULL )
00299 {
00300 perror(naFin);
00301 exit(-1);
00302 }
00303 Fout = fopen(naFout, "w");
00304 for(i=0; i<N; i=i+1)
00305 {
00306 fread(&c,1,1,Fin);
00307 M0 = (int)c;
00308 P = pmod(M0,e,n);
00309 #if RSA_HEX
00310 sprintf(str,"%08x",P);
00311 fwrite(str,8,1,Fout);
00312 #else
00313 fwrite(&P,sizeof(int),1,Fout);
00314 #endif
00315 }
00316 fclose(Fout);
00317 fclose(Fin);
00318 }
00319
00325 void deKryptFile(const char *naFout, const char *naFin, int d, int n)
00326 {
00327 FILE *Fout,*Fin;
00328 int i,N,M1,P;
00329 char str[10];
00330
00331 #if RSA_HEX
00332 N = sizeF(naFin)/8;
00333 #else
00334 N = sizeF(naFin)/sizeof(int);
00335 #endif
00336 Fin = fopen(naFin, "r");
00337 if( Fin==NULL )
00338 {
00339 perror(naFin);
00340 exit(-1);
00341 }
00342 Fout = fopen(naFout, "w");
00343 for(i=0; i<N; i=i+1)
00344 {
00345 #if RSA_HEX
00346 fread(str,8,1,Fin);
00347 str[8] = '\0';
00348 P = strtol(str,NULL,16);
00349 #else
00350 fread(&P,sizeof(int),1,Fin);
00351 #endif
00352 M1 = pmod(P,d,n);
00353 sprintf(str,"%c", (char)M1);
00354 fwrite(str,1,1,Fout);
00355 }
00356 fclose(Fout);
00357 fclose(Fin);
00358 }
00359
00363 int sprRSA(const char *naF1, const char *naF2)
00364 {
00365 FILE *F1,*F2;
00366 unsigned char c1,c2;
00367 int i,n;
00368
00369 n = sizeF(naF1);
00370 if( n!=sizeF(naF2) )
00371 {
00372 return -1;
00373 }
00374 F1 = fopen(naF1,"r");
00375 F2 = fopen(naF2,"r");
00376 for(i=0; i<n; i=i+1)
00377 {
00378 fread(&c1,1,1,F1);
00379 fread(&c2,1,1,F2);
00380 if( c1!=c2)
00381 break;
00382 }
00383 fclose(F2);
00384 fclose(F1);
00385 return (i!=n ? -2 : 0 );
00386 }
00387
00388
00389
00390