Advertisement
Guest User

Untitled

a guest
Nov 6th, 2016
192
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.10 KB | None | 0 0
  1. ;; ##########################################
  2. ;; Initial test data
  3.  
  4. (define test-key-pair1
  5. (make-key-pair
  6. (make-key 816898139 180798509)
  7. (make-key 816898139 301956869)))
  8.  
  9. (define test-key-pair2
  10. (make-key-pair
  11. (make-key 513756253 416427023)
  12. (make-key 513756253 462557987)))
  13.  
  14. ;;;public keys for political figures
  15.  
  16. (define bill-clinton-public-key (make-key 833653283 583595407))
  17. (define al-gore-public-key (make-key 655587853 463279441))
  18. (define bob-dole-public-key (make-key 507803083 445001911))
  19. (define ross-perot-public-key (make-key 865784123 362279729))
  20. (define hillary-clinton-public-key (make-key 725123713 150990017))
  21. (define tipper-gore-public-key (make-key 376496027 270523157))
  22. (define chuck-vest-public-key (make-key 780450379 512015071))
  23. (define rupert-murdoch-public-key (make-key 412581307 251545759))
  24. (define newt-gingrich-public-key (make-key 718616329 290820109))
  25. (define newt-gingrich-private-key (make-key 718616329 129033029))
  26.  
  27.  
  28. ;;;message received by Newt Gingrich -- Who sent it?
  29. (define received-mystery-message
  30. '(510560918 588076790 115222453 249656722 408910590 69814552
  31. 690687967 281490047 41430131 256420885 184791295 75938032
  32. 693840839 663727111 593617709 335351412))
  33.  
  34. (define received-mystery-signature 65732336)
  35.  
  36. ;;;fake message from Clinton to Gore
  37. (define clinton-to-gore-fake
  38. "Dear Al, we are preparing to impose several tax increases, including VAT and fuel levy. Please prepare a press release to inform the public. Kind regards, Bill Cinton")
  39.  
  40. ;; ##########################################
  41. ;; ##########################################
  42. ;; Code to be completed by the students
  43.  
  44. ;; the inverse procedure of RSA-convert-list
  45. (define (RSA-unconvert-list intlist key)
  46. (let ((n (key-modulus key)))
  47. (define (unconvert l sub)
  48. (if (null? l)
  49. '()
  50. (let ((x (remainder (+ (RSA-transform (car l) key)
  51. sub) (* -1 n))))
  52. (cons x (unconvert (cdr l) (car l))))))
  53. (unconvert intlist 0))
  54. )
  55.  
  56. ;; simple signed-message structure
  57. (define (make-signed-message message signature)
  58. (cons message signature))
  59.  
  60.  
  61. (define (get-signed-body signed-message)
  62. car signed-message)
  63.  
  64. (define (get-signed-signature signed-message)
  65. cdr signed-message)
  66.  
  67. ;; Encrypt message and sign
  68. (define (encrypt-and-sign message s-private-key r-public-key)
  69. (make-signed-message (RSA-encrypt message r-public-key)
  70. (RSA-transform (compress (RSA-encrypt message r-public-key)) s-private-key)
  71.  
  72. )
  73. )
  74.  
  75. ;; Authenticate message and decrypt it
  76. (define (authenticate-and-decrypt signed-message s-public-key r-private-key)
  77. (if (= (compress (car signed-message)) (RSA-transform (cdr signed-message) s-public-key))
  78. (RSA-decrypt (car signed-message) r-private-key)
  79. 'Authentication-failed!
  80. )
  81. )
  82. ;; Decrypt and identify message to Gingrich
  83. (define (decrypt-and-identify)
  84. (RSA-decrypt received-mystery-message newt-gingrich-private-key))
  85.  
  86. ;; solve ax+by=1
  87. ;; The idea is to let a=bq+r and solve bx+ry=1 recursively
  88. (define (solve-ax+by=1 a b)
  89.  
  90. (if (= b 0)
  91. (cons 1 0)
  92. (let* ((q (quotient a b))
  93. (r (remainder a b))
  94. (e (solve-ax+by=1 b r))
  95. (s (car e))
  96. (t (cdr e)))
  97. (cons (- t (* (/ b (gcd a b)) -1)) (+ (- s (* q t)) (* (/ a (gcd a b)) -1) ))))
  98.  
  99. )
  100.  
  101.  
  102.  
  103. ;; crack the RSA cryptography system
  104. ;; given a public key find the private one
  105.  
  106. (define (crack-rsa public-key)
  107. (let ((p (smallest-divisor (car public-key)) ))
  108. (let ( (q (/ (car public-key) p)))
  109. (let ( (m (* (- p 1)(- q 1))))
  110. (cons (car public-key) (invert-modulo (cdr public-key) m))
  111.  
  112. )))
  113. )
  114.  
  115.  
  116.  
  117. ;; forge a message between s (sender) and r (recipient)
  118. ;; given only their public keys
  119. (define (forge-message message s-public-key r-public-key)
  120. (make-signed-message (RSA-encrypt message r-public-key)
  121. (RSA-transform (compress (RSA-encrypt message r-public-key)) (crack-rsa s-public-key))
  122.  
  123. )
  124. )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement