Guest User

Untitled

a guest
Feb 27th, 2014
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.04 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <sys/shm.h>
  3. #include <sys/stat.h>
  4. #include <stdlib.h>
  5.  
  6. int powmod(int, int, int);
  7. int powmodf(int, int,int);
  8.  
  9. int p = 103;
  10. int g = 101;
  11. int S_a ;
  12. int S_b ;
  13. int T_a ;
  14. int T_b ;
  15. int main ()
  16. {
  17. int pid1; //Alice
  18. int pid2; //Bob
  19. int pid; //Parent
  20. char *shared_memory;
  21. const int segment_size =4096;
  22. int segment_id;
  23.  
  24. segment_id = shmget(IPC_PRIVATE, segment_size, S_IRUSR | S_IWUSR);
  25. shared_memory = (char *) shmat(segment_id, NULL, 0);
  26. printf("\n Qshrdmem: Using Shared Memory for IPC \n");
  27. printf("Diffie-Hellman Parameters p=%d and g=%d\n", p,g);
  28. printf("Parent: pid=%d \n", getpid());
  29. pid1 = fork(); //alice
  30.  
  31. if (pid1 == 0 )
  32. {
  33. printf ("Alice: pid=%d, ", getpid());
  34. printf ("My Parent pid=%d\n", getppid());
  35. S_a = rand() % 100 + 1;
  36. printf("\nAlice's random secret = %d", S_a);
  37. T_a = powmod(S_a, g , p );
  38. printf("Alice has a T_a of: %d ", T_a);
  39. sprintf(shared_memory, T_a);}
  40.  
  41.  
  42.  
  43.  
  44. else //create Bob
  45. {
  46. pid2=fork();
  47. if (pid2==0)
  48. {
  49. usleep(10000);
  50. printf ("Bob: pid=%d, ", getpid());
  51. printf ("My Parent pid=%d\n", getppid());
  52. S_b = rand() % 100 + 1;
  53. printf("\nAlice's random secret = %d", S_b);
  54. T_b = powmod(S_b, g , p );
  55. printf("Alice has a T_b of: %d ", T_b);
  56. sprintf(shared_memory, T_b);
  57. }}
  58. else //Parent code
  59. {
  60. usleep(10000);
  61. printf("Parent: pid=%d \n", getpid());
  62. printf("Parent view of shared memory: %s\n", shared_memory);}
  63. //detach memory segment
  64. if (shmdt(shared_memory) == -1)
  65. {
  66. fprintf(stderr, "unable to detach\n");}
  67. //remove shared memory segment
  68. shmct1(segment_id,IPC_RMID, NULL);
  69.  
  70. return 0;}
  71.  
  72.  
  73. powmod (int a, int b, int n)
  74. {
  75.  
  76. int i;
  77. int res = a;
  78. for(i=1; i<b;i++)
  79. res = (res * a) % n;
  80. return res;
  81. }
  82. int powmodf(int a,int b, int n){
  83.  
  84. int res=1;
  85. while (b)
  86. {
  87. if (b % 2) { res = (res * a) % n; }
  88. a = (a * a) % n;
  89. b /= 2;
  90. }
  91. return res;
  92. }
Advertisement
Add Comment
Please, Sign In to add comment