0% found this document useful (0 votes)
5 views4 pages

CNS Assignment 6

Uploaded by

Damini
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
5 views4 pages

CNS Assignment 6

Uploaded by

Damini
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 4

CNS Assignment 6

RSA digital signature cryptosystem:-

Client:

import socket
import random
from math import gcd
def gcd_extended(a, b):
if b == 0:
return a, 1, 0
else:
d, x, y = gcd_extended(b, a % b)
return d, y, x - y * (a // b)
def generate_prime(p, q):
t = (p - 1) * (q - 1)
n=p*q
for e in range(2, t):
if gcd(e, t) == 1:
break
for i in range(1, 10):
x=1+i*t
if x % e == 0:
d = int(x / e)
break
return e, d, n
def main():
# Get user input for p and q
p = int(input("Enter the value of p: "))
q = int(input("Enter the value of q: "))
# Generate keys using user input
e, d, n = generate_prime(p, q)
# Create a UDP socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# Connect to the server
client_socket.connect(("127.0.0.1", 20003))
print("Connected to server")
# Send public key to server
public_key_message = "Hello Server {} {}".format(p, q)
client_socket.sendall(public_key_message.encode())
# Receive public key from server
public_key = client_socket.recv(1024).decode()
e_str, n_str = public_key.split()
e = int(e_str)
n = int(n_str)
print("Received public key from server:", e, n)
# Generate challenge
challenge = random.randint(1, n-1)
print("Generated challenge:", challenge)
# Sign the challenge using private key
signature = pow(challenge, d, n)
print("Generated signature:", signature)
# Send the signature to the server
signature_message = "Received signature {} {}".format(challenge, signature)
client_socket.sendall(signature_message.encode())
# Receive the response from the server
response = client_socket.recv(1024).decode()
print("Response from server:", response) # Close the socket
client_socket.close()
if __name__ == '__main__':
main()

Server:
import socket
from math import gcd
def gcd_extended(a, b):
if b == 0:
return a, 1, 0
else:
d, x, y = gcd_extended(b, a % b)
return d, y, x - y * (a // b)
def generate_prime(p, q):
t = (p - 1) * (q - 1)
n=p*q
for e in range(2, t):
if gcd(e, t) == 1:
break
for i in range(1, 10):
x=1+i*t
if x % e == 0:
d = int(x / e)
break
return e, d, n
def main():
# Create a UDP socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# Set up server address and port
server_address = ('', 20003)
# Bind the socket to the server address
server_socket.bind(server_address)
print(f"Server listening on {server_address[0]}:{server_address[1]}")
while True:
# Receive data from client
data, address = server_socket.recvfrom(1024)
client_message = data.decode()
if client_message.startswith("Hello Server"):
print(f"Received public key from client: {client_message}")
# Split the received message to extract p and q values
_, _, p_str, q_str = client_message.split()
p = int(p_str)
q = int(q_str)
# Generate keys based on client's p and q values
e, d, n = generate_prime(p, q)
# Send the public key to the client
server_socket.sendto(str.encode(f"{e} {n}"), address)
elif client_message.startswith("Received signature"):
# Extract the challenge and received signature from the message
_, _, challenge_str, signature_str = client_message.split()
challenge = int(challenge_str)
signature = int(signature_str)
# Verify the signature
decrypted_signature = pow(signature, e, n)
if decrypted_signature == challenge:
verification_result = "Valid" print("Signature verification: Valid - Signature verified successfully")
else:
verification_result = "Invalid"
print("Signature verification: Invalid - Signature verification failed")
# Send the verification result to the client
server_socket.sendto(str.encode(verification_result), address)
# Run the server
if __name__ == '__main__':
main()

You might also like