lOMoARcPSD| 44729304
def sig (d, p, alpha , beta , x , k_E) :
# Compute r r = power_mod(alpha , k_E,
p)
# Compute s k_E_inv = inverse_mod(k_E, p-1)
s = (x - d * r ) * k_E_inv % (p-1) return (r , s )
def ver (p, alpha , beta , x , r , s ) :
i f not (1 <= r <= p-1 and 1 <= s <= p-1) : return False
# Compute v1 v1 = (power_mod(beta , r , p) * power_mod(r , s , p) ) % p
# Compute v2 v2 = power_mod(alpha ,
x , p)
# Verify i f v1 == v2 return v1 == v2
# Given parameters d = 67
p = 97
alpha = 23 beta =
15
test_cases = [
(17 , 31) ,
(17 , 49) ,
(85 , 77)
1
lOMoARcPSD| 44729304
]
print (”###### Answer for 2.1 ########”) for x , k_E in
test_cases :
r , s = sig (d, p, alpha , beta , x , k_E) print ( f ”Message : {x} , k_E: {k_E} , Signature : ( r={r } ,
s={s })”)
print (”###### Answer for 2.2 ########”) messages_signatures = [
(22 , 37 , 33) ,
(82 , 13 , 65)
]
for x , r , s in messages_signatures :
is_valid = ver (p, alpha , beta , x , r , s )
print ( f ”Message : {x , r , s } , Signature : ( r={r } , s={s }) , Valid : {
\
is_valid}”)
###### Answer for 2.1 ########
Message: 17, k_E: 31, Signature: (r=87, s=20)
Message: 17, k_E: 49, Signature: (r=74, s=3)
Message: 85, k_E: 77, Signature: (r=84, s=29)
###### Answer for 2.2 ########
Message: (22, 37, 33), Signature: (r=37, s=33), Valid: True
Message: (82, 13, 65), Signature: (r=13, s=65), Valid: False
2

Preview text:

lOMoAR cPSD| 44729304 def sig (d, p, alpha , beta , x , k_E) :
# Compute r r = power_mod(alpha , k_E, p)
# Compute s k_E_inv = inverse_mod(k_E, p-1)
s = (x - d * r ) * k_E_inv % (p-1) return (r , s ) def ver (p, alpha , beta , x , r , s ) :
i f not (1 <= r <= p-1 and 1 <= s <= p-1) : return False
# Compute v1 v1 = (power_mod(beta , r , p) * power_mod(r , s , p) ) % p
# Compute v2 v2 = power_mod(alpha , x , p)
# Verify i f v1 == v2 return v1 == v2 # Given parameters d = 67 p = 97 alpha = 23 beta = 15 test_cases = [ (17 , 31) , (17 , 49) , (85 , 77) 1 lOMoAR cPSD| 44729304 ]
print (”###### Answer for 2.1 ########”) for x , k_E in test_cases :
r , s = sig (d, p, alpha , beta , x , k_E) print ( f ”Message : {x} , k_E: {k_E} , Signature : ( r={r } , s={s })”)
print (”###### Answer for 2.2 ########”) messages_signatures = [ (22 , 37 , 33) , (82 , 13 , 65) ] for x , r , s in messages_signatures : is_valid = ver (p, alpha , beta , x , r , s )
print ( f ”Message : {x , r , s } , Signature : ( r={r } , s={s }) , Valid : {\ is_valid}”)
###### Answer for 2.1 ########
Message: 17, k_E: 31, Signature: (r=87, s=20)
Message: 17, k_E: 49, Signature: (r=74, s=3)
Message: 85, k_E: 77, Signature: (r=84, s=29)
###### Answer for 2.2 ########
Message: (22, 37, 33), Signature: (r=37, s=33), Valid: True
Message: (82, 13, 65), Signature: (r=13, s=65), Valid: False 2