Posts Tagged ‘C++’

h1

Laborator 1

martie 12, 2009

Download source

// Daca se doreste utilizarea bibliotecii GLUT trebuie
// inclus fisierul header GL/glut.h (acesta va include
// la GL/gl.h si GL/glu.h, fisierele header pentru
// utilizarea bibliotecii OpenGL). Functiile din biblioteca
// OpenGL sunt prefixate cu gl, cele din GLU cu glu si
// cele din GLUT cu glut.
//#include
#include “glut.h”

#include
#include
#include

unsigned char prevKey;

void Display1() {
glColor3f(0.2,0.15,0.88); // albastru
glBegin(GL_LINES); // trasarea unei linii
glVertex2i(1,1); // coordonatele unui varf
glVertex2i(-1,-1);
glEnd();

glColor3f(1,0.1,0.1); // rosu
glBegin(GL_LINES);
glVertex2i(-1,1);
glVertex2i(1,-1);
glEnd();

glBegin(GL_LINES);
glVertex2d(-0.5,0);
glVertex2d(0.5,0);
glEnd();
}

void Display2() {
glColor3f(1,0.1,0.1); // rosu
glBegin(GL_LINES);
glVertex2f(1.0,1.0);
glVertex2f(0.9,0.9);
glVertex2f(0.8,0.8);
glVertex2f(0.7,0.7);
glVertex2f(0.6,0.6);
glVertex2f(0.5,0.5);
glVertex2f(-0.5,-0.5);
glVertex2f(-1.0,-1.0);
glEnd();
}

void Display3() {
// trasare puncte GL_POINTS : deseneaza n puncte
glColor3f(1,0.1,0.1); // rosu
glBegin(GL_POINTS);
glVertex2f(-0.5,0.5);
glVertex2f(-0.5,-0.5);
glVertex2f(0.5,-0.5);
glVertex2f(0.5,0.5);
glEnd();
glFlush();
}

void Display4() {
glColor3f(1,0.1,0.1); // rosu
// trasare linie poligonala GL_LINE_STRIP : (v0,v1), (v1,v2), (v_{n-2},v_{n-1})
glBegin(GL_LINE_STRIP);
glVertex2f(1.0,1.0);
glVertex2f(1.0,0.8);
glVertex2f(0.5,0.6);
glVertex2f(0.5,0.4);
// de completat …
glEnd();
}

void Display5() {
glColor3f(1,0.1,0.1); // rosu
// trasare linie poligonala inchisa GL_LINE_LOOP : (v0,v1), (v1,v2), (v_{n-1},v0)
glBegin(GL_LINE_LOOP);
glVertex2f(1.0,1.0);
glVertex2f(1.0,0.8);
glVertex2f(0.5,0.6);
glVertex2f(0.5,0.4);
glVertex2f(1.0,1.0);
// de completat …
glEnd();
}

void Display6() {
glColor3f(1,0.1,0.1); // rosu
// trasare triunghiuri GL_TRIANGLES : (v0,v1,v2), (v3,v4,v5), …
glBegin(GL_TRIANGLES);
glVertex2f(1.0,1.0);
glVertex2f(1.0,0.8);
glVertex2f(0.8,0.8);
glVertex2f(-1.0,-1.0);
glVertex2f(-1.0,-0.8);
glVertex2f(-0.8,-0.8);
// de completat …
glEnd();
}

void Display7() {
// trasare patrulatere GL_QUADS : (v0,v1,v2,v3), (v4,v5,v6,v7), …
glBegin(GL_QUADS);
// de completat …
glVertex2f(1.0,1.0);
glVertex2f(1.0,0.4);
glVertex2f(0.4,0.4);
glVertex2f(0.1,0.7);
glEnd();
}

void Display8() {
// trasare poligon convex GL_QUADS : (v0,v1,v2, …, v_{n-1})
glColor3f(0.2,0.15,0.88);
//glLineWidth(5);
glPolygonMode(GL_FRONT, GL_FILL);
glBegin(GL_POLYGON);

// de completat …
glVertex2f(0.4,0.4);
glVertex2f(-0.4,0.4);
glVertex2f(-0.65,0.0);
glVertex2f(-0.4,-0.4);
glVertex2f(0.4,-0.4);
glVertex2f(0.65,0.0);
glEnd();
glColor3f(1,1,1);
glPolygonMode(GL_FRONT, GL_FILL);
glBegin(GL_POLYGON);
// de completat …
glVertex2f(0.3,0.3);
glVertex2f(-0.3,0.3);
glVertex2f(-0.5,0.0);
glVertex2f(-0.3,-0.3);
glVertex2f(0.3,-0.3);
glVertex2f(0.5,0.0);
glEnd();

glColor3f(1,0.1,0.1);
glPolygonMode(GL_FRONT, GL_LINE);
glBegin(GL_POLYGON);
// de completat …
glVertex2f(0.3,0.3);
glVertex2f(-0.3,0.3);
glVertex2f(-0.5,0.0);
glVertex2f(-0.3,-0.3);
glVertex2f(0.3,-0.3);
glVertex2f(0.5,0.0);
glEnd();

}

void Init(void) {
// specifica culoarea unui buffer dupa ce acesta
// a fost sters utilizand functia glClear. Ultimul
// argument reprezinta transparenta (1 – opacitate
// completa, 0 – transparenta totala)
glClearColor(1.0,1.0,1.0,1.0);

// grosimea liniilor
glLineWidth(3);

// dimensiunea punctelor
glPointSize(4);

// functia void glPolygonMode (GLenum face, GLenum mode)
// controleaza modul de desenare al unui poligon
// mode : GL_POINT (numai vf. primitivei) GL_LINE (numai
// muchiile) GL_FILL (poligonul plin)
// face : tipul primitivei geometrice dpdv. al orientarii
// GL_FRONT – primitive orientate direct
// GL_BACK – primitive orientate invers
// GL_FRONT_AND_BACK – ambele tipuri
glPolygonMode(GL_FRONT, GL_LINE);
}

void Display(void) {
printf(“Call Displayn”);

// sterge buffer-ul indicat
glClear(GL_COLOR_BUFFER_BIT);

switch(prevKey) {
case ‘1′:
Display1();
break;
case ‘2′:
Display2();
break;
case ‘3′:
Display3();
break;
case ‘4′:
Display4();
break;
case ‘5′:
Display5();
break;
case ‘6′:
Display6();
break;
case ‘7′:
Display7();
break;
case ‘8′:
Display8();
break;
default:
break;
}

// forteaza redesenarea imaginii
glFlush();
}

/*
Parametrii w(latime) si h(inaltime) reprezinta noile
dimensiuni ale ferestrei
*/
void Reshape(int w, int h) {
printf(“Call Reshape : latime = %d, inaltime = %dn”, w, h);

// functia void glViewport (GLint x, GLint y,
// GLsizei width, GLsizei height)
// defineste poarta de afisare : acea suprafata dreptunghiulara
// din fereastra de afisare folosita pentru vizualizare.
// x, y sunt coordonatele pct. din stg. jos iar
// width si height sunt latimea si inaltimea in pixeli.
// In cazul de mai jos poarta de afisare si fereastra coincid
glViewport(0, 0, (GLsizei) w, (GLsizei) h);
}

/*
Parametrul key indica codul tastei iar x, y pozitia
cursorului de mouse
*/
void KeyboardFunc(unsigned char key, int x, int y) {
printf(“Ati tastat . Mouse-ul este in pozitia %d, %d.n”,
key, x, y);
// tasta apasata va fi utilizata in Display ptr.
// afisarea unor imagini
prevKey = key;
if (key == 27) // escape
exit(0);
glutPostRedisplay();
}

/*
Codul butonului poate fi :
GLUT_LEFT_BUTTON, GLUT_MIDDLE_BUTTON, GLUT_RIGHT_BUTTON
Parametrul state indica starea: “apasat” GLUT_DOWN sau
“eliberat” GLUT_UP
Parametrii x, y : coordonatele cursorului de mouse
*/
void MouseFunc(int button, int state, int x, int y) {
printf(“Call MouseFunc : ati %s butonul %s in pozitia %d %dn”,
(state == GLUT_DOWN) ? “apasat” : “eliberat”,
(button == GLUT_LEFT_BUTTON) ?
“stang” :
((button == GLUT_RIGHT_BUTTON) ? “drept”: “mijlociu”),
x, y);
}

int main(int argc, char** argv) {
// Initializarea bibliotecii GLUT. Argumentele argc
// si argv sunt argumentele din linia de comanda si nu
// trebuie modificate inainte de apelul functiei
// void glutInit(int *argcp, char **argv)
// Se recomanda ca apelul oricarei functii din biblioteca
// GLUT sa se faca dupa apelul acestei functii.
glutInit(&argc, argv);

// Argumentele functiei
// void glutInitWindowSize (int latime, int latime)
// reprezinta latimea, respectiv inaltimea ferestrei
// exprimate in pixeli. Valorile predefinite sunt 300, 300.
glutInitWindowSize(300, 300);

// Argumentele functiei
// void glutInitWindowPosition (int x, int y)
// reprezinta coordonatele varfului din stanga sus
// al ferestrei, exprimate in pixeli.
// Valorile predefinite sunt -1, -1.
glutInitWindowPosition(100, 100);

// Functia void glutInitDisplayMode (unsigned int mode)
// seteaza modul initial de afisare. Acesta se obtine
// printr-un SAU pe biti intre diverse masti de display
// (constante ale bibliotecii GLUT) :
// 1. GLUT_SINGLE : un singur buffer de imagine. Reprezinta
// optiunea implicita ptr. nr. de buffere de
// de imagine.
// 2. GLUT_DOUBLE : 2 buffere de imagine.
// 3. GLUT_RGB sau GLUT_RGBA : culorile vor fi afisate in
// modul RGB.
// 4. GLUT_INDEX : modul indexat de selectare al culorii.
// etc. (vezi specificatia bibliotecii GLUT)
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);

// Functia int glutCreateWindow (char *name)
// creeaza o fereastra cu denumirea data de argumentul
// name si intoarce un identificator de fereastra.
glutCreateWindow (argv[0]);

Init();

// Functii callback : functii definite in program si
// inregistrate in sistem prin intermediul unor functii
// GLUT. Ele sunt apelate de catre sistemul de operare
// in functie de evenimentul aparut

// Functia
// void glutReshapeFunc (void (*Reshape)(int width, int height))
// inregistreaza functia callback Reshape care este apelata
// oridecate ori fereastra de afisare isi modifica forma.
glutReshapeFunc(Reshape);

// Functia
// void glutKeyboardFunc (void (*KeyboardFunc)(unsigned char,int,int))
// inregistreaza functia callback KeyboardFunc care este apelata
// la actionarea unei taste.
glutKeyboardFunc(KeyboardFunc);

// Functia
// void glutMouseFunc (void (*MouseFunc)(int,int,int,int))
// inregistreaza functia callback MouseFunc care este apelata
// la apasarea sau la eliberarea unui buton al mouse-ului.
glutMouseFunc(MouseFunc);

// Functia
// void glutDisplayFunc (void (*Display)(void))
// inregistreaza functia callback Display care este apelata
// oridecate ori este necesara desenarea ferestrei: la
// initializare, la modificarea dimensiunilor ferestrei
// sau la apelul functiei
// void glutPostRedisplay (void).
glutDisplayFunc(Display);

// Functia void glutMainLoop() lanseaza bucla de procesare
// a evenimentelor GLUT. Din bucla se poate iesi doar prin
// inchiderea ferestrei aplicatiei. Aceasta functie trebuie
// apelata cel mult o singura data in program. Functiile
// callback trebuie inregistrate inainte de apelul acestei
// functii.
// Cand coada de evenimente este vida atunci este executata
// functia callback IdleFunc inregistrata prin apelul functiei
// void glutIdleFunc (void (*IdleFunc) (void))
glutMainLoop();

return 0;
}

h1

FTP Remoting

ianuarie 18, 2009

Download: source code

Folosi-ti FileZilla pentru serverul de FTP.
1 ) Dezarhiva-ti sursa
2 ) Deschide-ti proiectul Remoting.sln
3 ) Selecta-ti WindowsService1 ca StartUp Project(click dreapta pe el) apoi Build (F6)
4 ) Start -> Programs -> Microsoft Visual Studio 2008 -> Visual Studio Tools -> Visual Studio 2008 Command Promt -> Apare o fereastra
5 ) Introduce-ti in fereastra de la Command Promt calea unde ati dezarhivat proiectul, apoi intra-ti in Remoting->WindowsService1->bin->Release si executa-ti urmatoarea comanda:
installutil WindowsService1.sln

Va aparea:
The Commit phase completed successfully.
The transacted install has completed.

6 ) Click dreapta pe My Computer -> Manage : Apare o fereastra Computer Management
In Services and Application selecta-ti Services, cauta-ti AlexFTP si da-ti Start.

7 ) In Visual Studio selecta-ti acum Remoting ca fiind StartUp Project si rulati-l (CTRL+F5).
In fereastra care apare pute-ti selecta serverul (poate fi si local host daca folositi FileZilla), portul (nu prea are importanta), userul si passul pentru a va putea conecta la server.
Butonul Files este pentru a afisa lista de fisiere de e server din directorul curent.
Pentru Download se va mentiona in TextBox numele fisierului care se doreste a fi downloadat si apoi se apasa pe butonul Download.
ListBoxul retine o istorie a operatiilor executate.

8 ) In directorul Remoting al proiectului -> bin -> Release se gaseste un fisier alex.xml in care se va retine istoria operatiilor.

9 ) La sfarsit:
Executa-ti urmatoarea comanda in fereastra de la Command promt:
installutil /u WindowsService1.sln

Va aparea:
The uninstall has completed.

h1

Windows Communication Foundation

ianuarie 18, 2009

Download: source code

Instructiuni:

1 ) Dezarhiva-ti sursa

2 ) Deschide-ti proiectul WCF.sln, selecta-ti WCFService ca StartUp Project(click dreapta pe el) si rulati-l (CTRL + F5) .. apare o fereastra cu 2 butoane – apasa-ti Start

Important: nu inchide-ti fereastra serverului pana la sfarsit !!!

3 ) Start -> Programs ->  Microsoft Visual Studio 2008 -> Visual Studio Tools -> Visual Studio 2008 Command Promt -> Apare o fereastra

4 ) Introduce-ti in fereastra de la Command Promt calea unde ati dezarhivat proiectul, apoi intra-ti in WCFService/Bin/Debug si rula-ti a.bat
sau
in loc sa rula-ti a.bat utiliza-ti urmatoarea comanda svcutil http://localhost:8001/MyService /out: Proxy.cs

Va aparea:

Generating files…
cale_proiect\WCF2\WCFService\bin\Debug\Proxy.cs
cale_proiect\WCF2\WCFService\bin\Debug\output.config

5 )In Visual Studio selecta-ti acum WCF ca fiind StartUp Project .. sterge-ti Proxy.cs (click dreapta pe Proxy.cs si Delete) .. click dreapta pe WCFClient -> Add-> Existing Item -> In WCFService -> bin-> Debug ve-ti gasi fisierul Proxy.cs pe care il ve-ti deschide .. acesta va aparea in proiect la WCFClient in locul celui sters

6 )Rula-ti Clientul (CTRL+F5)

7 ) In cele doua casute de la Name introduce-ti 2 siruri de caractere (2 nume) .. in casuta sub IpAddress trebuie sa ave-ti ip-ul din fereastra care a aparut in urma rularii serverului la Service URL (de exemplu: Service URL: net.tcp://127.0.0.1:8000/MyService -> va trebui introdus 127.0.0.1) iar dedesupt in cele doua casute 2 numere

8 ) Apasa-ti pe butonul Connect and Send Message

h1

ElGamal

noiembrie 8, 2008
#include<stdio.h>
#include<iostream>

#include<conio.h>

#include<NTL/ZZ.h>

#include<fstream>

using namespace std;

using namespace NTL;

long l,k;

class A

{

ZZ p,q,a,alfa,alfa2,beta,vector2;

unsigned char output[];

public:

A()

{l=0;}

void Key()

{

while(l<20)

l=RandomBnd(200);

cout<<endl<<”l=”<<l;

//generam q

GenGermainPrime(q,l,80);

cout<<endl<<”q=”<<q;

//aflam p

p=2*q+1;

cout<<endl<<”p=”<<p;

//generam a

while(a<1)

a=RandomBnd(q-2);

cout<<endl<<”a=”<<a;

//generam alfa,alfa2 rad primitiva

while(alfa2<2 && PowerMod(alfa2,2,p)!=1 && PowerMod(alfa2,q,p)!=1)

alfa2 = RandomBnd(q-2);

alfa=PowerMod(alfa2,(p-1)/q,p);

cout<<endl<<”alfa=”<<alfa;

 

//generam beta

PowerMod(beta,alfa,a,p);

cout<<endl<<”beta=”<<beta;

}

ZZ get_p()

{ return this->p; }

 

ZZ get_q()

{ return this->q; }

 

ZZ get_alfa()

{ return this->alfa; }

ZZ get_beta()

{ return this->beta; }

void outputText()

{

BytesFromZZ(output,vector2,k);

cout<<endl<<”vector_output=”<<vector2;

cout<<endl<<”output=”<<output;

outputText(“output.txt”);

}

void Decriptare(ZZ gama, ZZ delta)

{

ZZ m,h;

PowerMod(m,gama,a,p);

InvMod(h,m,p);

MulMod(vector2,h,delta,p);

}

void outputText(char *file)

{

/*ofstream on(file, ios::out);

on<<output;

on.close();*/

FILE *outfile=fopen(“output.txt”, “a” );

feof(outfile);

for(int j=0;j<k;j++){

fprintf(outfile,”%c”,output[j]);}

fclose(outfile);

}

};

 

class B

{

ZZ p,q,alfa,beta,lg,vector,r,delta,gama,z;

long i;

unsigned char input1[1000];

 

public:

B(A c,char *file)

{

for(int m=0;m<1000;m++) input1[m]=”;

i=0;

p=c.get_p();

q=c.get_q();

alfa=c.get_alfa();

beta=c.get_beta();

inputText(file);

 

 

 

while(input1[0]!=”)

{

k=0;vector=0;

while(NumBits(vector)<NumBits(p)-4 && input1[k]!=”)

{ ZZFromBytes(vector,input1,k); k++;}

genereaza(vector);

c.Decriptare(gama,delta);//a decripteaza textul

c.outputText();//a afiseaza textul

 

if(input1[k]!=”) {

k–;

for(int h=0;h<1000-k;h++)

input1[h]=input1[h+k];

for(int h=1000-k;h<1000;h++)

input1[h]=”;

}

else {for(int h=0;h<k;h++) input1[h]=”;}

}

 

/* BUN long k=0;

while(NumBits(vector)<=NumBits(p) && input1[k]!=”)

{ ZZFromBytes(vector,input1,k); k++;}

 

cout<<endl<<”vector input=”<<input1<<endl;

cout<<endl<<”p*=”<<NumBits(p)<<endl;

cout<<endl<<”v*=”<<NumBits(vector)<<endl;

 

genereaza();

c.Decriptare(gama,delta);//a decripteaza textul

c.outputText();//a afiseaza textul*/

}

void genereaza(ZZ vector)

{

//generam r

/*while(r<1)

r=RandomBnd(q-2);*/

r=315261752;

cout<<endl<<”r=”<<r;

 

//generam gama

PowerMod(gama,alfa,r,p);

cout<<endl<<”gama=”<<gama;

//generam omega

PowerMod(z,beta,r,p);

MulMod(delta,vector,z,p);

cout<<endl<<”delta=”<<delta;

}

void inputText(char *file)

{

//citim textul in input1;

ifstream in(file, ios::in);

cout<<endl;

while(!in.eof())

{

in>>input1[i];

i++;

}

i–;

in.close();

 

}

ZZ get_gama()

{return gama;}

 

ZZ get_delta()

{return delta;}

ZZ get_vector()

{return vector;}

};

class C

{

ZZ m,h,vector2,p;

unsigned char output[];

public:

C(A c)

{

p=c.get_p();

}

void Decriptare(ZZ gama1, ZZ delta1, ZZ gama2, ZZ delta2, ZZ vector)

{

InvMod(h,delta1,p);

MulMod(m,h,delta2,p);

MulMod(vector2,vector,m,p);

}

void outputText()

{

BytesFromZZ(output,vector2,36);

cout<<endl<<”vector_output=”<<vector2;

cout<<endl<<”output=”<<output;

}

};

void main()

{

A a; //cel care primeste ..

a.Key();//se genereaza cheia publica si cheia privata

B b(a,”input.txt”);//cel care trimite .. va lua cheia publica a celui caruia trebuie sa ii trimita mesajul

cout<<endl<<endl<<”****************** ATAC ***************************”<<endl;

B d(a,”input2.txt”);

 

C c(a);

c.Decriptare(b.get_gama(),b.get_delta(),d.get_gama(),d.get_delta(),b.get_vector());

c.outputText();

_getch();

}

 

 

 

Fisiere:

  • input.txt : advwqgasghvdhavgdacwwqvdsgdhvahdvawy
  • input2.txt

Atac pentru acelasi “r”.