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
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139 const int rsa_p = 61;
00140 const int rsa_q = 53;
00142 const char rsa_naFin[] = "_MyLib.c";
00143 const char rsa_naFcrp[] = "_MyLib.crp";
00144 const char rsa_naFres[] = "_MyLib.res";
00151 int NWD(int p, int q)
00152 {
00153 int r;
00154
00155 if( p<1 || q<1 )
00156 {
00157 puts("Ups ...");
00158 exit(-1);
00159 }
00160 for(r=p%q; r!=0; r=p%q)
00161 {
00162 p = q;
00163 q = r;
00164 }
00165 return q;
00166 }
00167
00171 int NWDr(int p, int q, int *x, int *y)
00172 {
00173 int r,t,xp,xr,yp,yr;
00174
00175 if( p<1 || q<1 )
00176 {
00177 puts("Ups ...");
00178 exit(-1);
00179 }
00180 xp = *y = 1;
00181 *x = yp = 0;
00182 for(r=p%q; r!=0; r=p%q)
00183 {
00184 t = p/q;
00185 p = q;
00186 q = r;
00187 xr = *x;
00188 *x = xp - t*xr;
00189 xp = xr;
00190 yr = *y;
00191 *y = yp - t*yr;
00192 yp = yr;
00193 }
00194 return q;
00195 }
00196
00200 int pmod(int b, int e, int m)
00201 {
00202 int c;
00203
00204 for(c=1; 1<=e; e=e-1)
00205 {
00206 c = (c*b)%m;
00207 }
00208 return c;
00209 }
00210
00218 int testPodziel( int n)
00219 {
00220 int i,m;
00221
00222 m = n/2;
00223 for(i=2; i<m && n%i ; i=i+1)
00224 ;
00225 return (int)(i<m);
00226 }
00227
00232 int genKluczeRSA(int *e, int *d, int p, int q)
00233 {
00234 int n,fi_n,y;
00235
00236 if(testPodziel(p) || testPodziel(q))
00237 {
00238 puts("Upss ...");
00239 exit(-1);
00240 }
00241 n = p*q;
00242 fi_n = (p-1)*(q-1);
00248 *e = 17;
00249 if( NWD(*e,fi_n)!=1 )
00250 {
00251 puts("Upss ...");
00252 exit(-1);
00253 }
00258 NWDr(*e,fi_n,d,&y);
00259 while( *d<0 )
00260 {
00261 *d = (*d+fi_n) % fi_n;
00262 }
00263 return n;
00264 }
00265
00271 int sizeF(const char *naF)
00272 {
00273 struct stat sb;
00274
00275 if( stat(naF, &sb)==-1 )
00276 {
00277 perror(naF);
00278 exit(-1);
00279 }
00280 return (int)sb.st_size;
00281 }
00282
00288 void kryptFile(const char *naFout, const char *naFin, int e, int n)
00289 {
00290 FILE *Fout,*Fin;
00291 int i,N,M0,P;
00292 #if RSA_HEX
00293 char str[10],c;
00294 #else
00295 char c;
00296 #endif
00297
00298 N = sizeF(naFin);
00299 Fin = fopen(naFin, "r");
00300 if( Fin==NULL )
00301 {
00302 perror(naFin);
00303 exit(-1);
00304 }
00305 Fout = fopen(naFout, "w");
00306 for(i=0; i<N; i=i+1)
00307 {
00308 fread(&c,1,1,Fin);
00309 M0 = (int)c;
00310 P = pmod(M0,e,n);
00311 #if RSA_HEX
00312 sprintf(str,"%08x",P);
00313 fwrite(str,8,1,Fout);
00314 #else
00315 fwrite(&P,sizeof(int),1,Fout);
00316 #endif
00317 }
00318 fclose(Fout);
00319 fclose(Fin);
00320 }
00321
00327 void deKryptFile(const char *naFout, const char *naFin, int d, int n)
00328 {
00329 FILE *Fout,*Fin;
00330 int i,N,M1,P;
00331 char str[10];
00332
00333 #if RSA_HEX
00334 N = sizeF(naFin)/8;
00335 #else
00336 N = sizeF(naFin)/sizeof(int);
00337 #endif
00338 Fin = fopen(naFin, "r");
00339 if( Fin==NULL )
00340 {
00341 perror(naFin);
00342 exit(-1);
00343 }
00344 Fout = fopen(naFout, "w");
00345 for(i=0; i<N; i=i+1)
00346 {
00347 #if RSA_HEX
00348 fread(str,8,1,Fin);
00349 str[8] = '\0';
00350 P = strtol(str,NULL,16);
00351 #else
00352 fread(&P,sizeof(int),1,Fin);
00353 #endif
00354 M1 = pmod(P,d,n);
00355 sprintf(str,"%c", (char)M1);
00356 fwrite(str,1,1,Fout);
00357 }
00358 fclose(Fout);
00359 fclose(Fin);
00360 }
00361
00365 int sprRSA(const char *naF1, const char *naF2)
00366 {
00367 FILE *F1,*F2;
00368 unsigned char c1,c2;
00369 int i,n;
00370
00371 n = sizeF(naF1);
00372 if( n!=sizeF(naF2) )
00373 {
00374 return -1;
00375 }
00376 F1 = fopen(naF1,"r");
00377 F2 = fopen(naF2,"r");
00378 for(i=0; i<n; i=i+1)
00379 {
00380 fread(&c1,1,1,F1);
00381 fread(&c2,1,1,F2);
00382 if( c1!=c2)
00383 break;
00384 }
00385 fclose(F2);
00386 fclose(F1);
00387 return (i!=n ? -2 : 0 );
00388 }
00389
00390
00391
00392 const char det_naF[] = "A.dat";
00398 void WyswietlMacierzInd(int n, int m, double A[][matrix_M],int P[])
00399 {
00400 int i,j;
00401
00402 for(i=0; i<n; i=i+1)
00403 {
00404 for(j=0; j<m; j=j+1)
00405 {
00406 printf("%6.2lf ",A[P[i]][j]);
00407 }
00408 printf("\n");
00409 }
00410 }
00411
00412 void WyswietlWiersz(int m, double w[])
00413 {
00414 int j;
00415
00416 for(j=0; j<m; j=j+1)
00417 {
00418 printf("%6.2lf ",w[j]);
00419 }
00420 printf("\n");
00421 }
00422
00428 double ObliczWyznacznik(int *row, int P[], int n, int m, double A[][matrix_M])
00429 {
00430 double d[matrix_M],det;
00431 int i,j;
00432
00433 for(i=0; i<matrix_N; i=i+1)
00434 {
00435 P[i] = i;
00436 }
00437 det = 1.0;
00438 for(*row=0; *row<n; *row=*row+1)
00439 {
00440 if( fabs(A[P[*row]][*row])<=1.0e-100 )
00441 {
00442 for(i=*row+1; i<n; i=i+1 )
00443 {
00444 if( 1.0e-100<fabs( A[P[i]][*row] ) )
00445 {
00446 j = P[*row];
00447 P[*row] = P[i];
00448 P[i] = j;
00449 det = -det;
00450 break;
00451 }
00452 }
00453 if( i==n )
00454 {
00455 for(i=0; i<*row-1; i=i+1)
00456 {
00457 det = A[P[i]][i]*det;
00458 }
00459 return det;
00460 }
00461 }
00462 for(i=*row+1; i<m; i=i+1)
00463 {
00464 d[i] = A[P[*row]][i]/A[P[*row]][*row];
00465 }
00466 for(j=*row+1; j<n; j=j+1)
00467 {
00468 for(i=*row+1; i<m; i=i+1)
00469 {
00470 A[P[j]][i] = A[P[j]][i]-d[i]*A[P[j]][*row];
00471 }
00472 A[P[j]][*row] = 0.0;
00473 }
00474 }
00475 for(i=0; i<n; i=i+1)
00476 {
00477 det = A[P[i]][i]*det;
00478 }
00479 return det;
00480 }
00481
00482
00483
00484