def str2num(s):
digits = [symbols.find(c) for c in s]
return ZZ(digits,len(symbols))
def num2str(n):
s = ''.join([symbols[digit] for digit in n.digits(len(symbols))])
return s
c1 = str2num(qk-PRZ@e6Ci@yfYE3mq0w0!5eBbF)
c2 = str2num(n;rcCJ8kV 494Qn,F;Ng,d@+(XbD)
n1 = 17a71c70442ae965d97daac984bf7af2adc200000acd
n2 = a83291573a14b2a16f2b04772f1b5db53248000037d
me = crt(c1,c2,n1,n2)
m = power(me, 1/2)
m = num2str(m)
m
def compositeTest(n):
a = random_element()
if power(a,n) == mod(a,n) : return "prime"
else return "composite"
def Pollard_p_minus_1(n, B):
a = random_element(2,n)
while gcd(a,n) != 1 : a = random_element(2,n)
m = 1
for j in range(B+1) : if is_prime(j) == true : x = (log(B,j)
x.round(mode='down')
x = power(j,x)
m = m * x
d = gcd(power(a, m) − 1, n)
if d == 1 : B = power(B, 4/3)
a = random_element(2,n)
while gcd(a,n) != 1 : a = random_element(2,n)
m = 1
for j in range(B+1) : if is_prime(j) == true : x = (log(B,j)
x.round(mode='down')
x = power(j,x)
m = m * x
if d == n : B = power(B, 3/4)
a = random_element(2,n)
while gcd(a,n) != 1 : a = random_element(2,n)
m = 1
for j in range(B+1) : if is_prime(j) == true : x = (log(B,j)
x.round(mode='down')
x = power(j,x)
m = m * x
if d == n || d == 1 : return -1
else return d
def Fermat(n, niter=10**6):
x = 0
t = power(n, 1/2)
t.round(mode='down')
t = t + 1
while is_square(power(t,2) - n) != true : t = t + 1
x = x + 1
s = power(power(t,2) - n, 1/2)
if x = 1000000 : return (-1,-1)
return (t + s, t - s)
def generate_Elgamal_key_pair(p,g):
a = random_element(1,p-1)
while gcd(a,p) != 1 : a = random_element(1,p-1)
A = power_mod(g,a,p)
b = random_element(1,p-1)
while gcd(b,p) != 1 : b = random_element(1,p-1)
B = power_mod(g,b,p)
return (p,g,A), (p,g,B)
def encrypt(m,(p,g,B)):
c = power_mod(power(A,r) * m,1,p)
return (B,c)
def decrypt((C1,C2),(p,g,A)):
m = power_mod(power(C1,p-1-a) * C2,1,p)
m = num2str(m)
return m
p = random_prime(2^1024 - 1,False,2^1023)
g = primitive_root(p)
generate_Elgamal_key_pair(p,g)
m = "Adrian Kehr"
m = str2num(m)
encrypt(m,(p,g,B))
decrypt((C1,C2),(p,g,A))
def generate_key_pair(p,g):
a = random_element(1,p-1)
A = power_mod(g,a,p)
return (a,A)
def generate_common_secret(p,a,B):
k = power_mod(B,a,p)
return k
p = random_prime(2^2048 - 1,False,2^2047)
g1 = primitive_root(p)
g2 = primitive_root(p)
while g2 == g1 : g2 = primitive_root(p)
generate_key_pair(p,g1)
generate_key_pair(p,g1)
generate_common_secret(p,a,B)
generate_key_pair(p,g2)
generate_key_pair(p,g2)
generate_common_secret(p,a,B)
*** WARNING: Code contains non-ascii characters ***
*** WARNING: Code contains possible implicit multiplication ***
*** Check if any of [ 5eBbF, 494Qn, 17a, 1c, 0442ae, 65d, 7daac, 84bf, 00000acd, 3291573a, 4b, 6f, 4772f, 3248000037d, 1(n ] need a "*" sign for multiplication, e.g. 5x should be 5*x ! ***
Error in lines 7-7
Traceback (most recent call last):
File "/cocalc/lib/python2.7/site-packages/smc_sagews/sage_server.py", line 1013, in execute
exec compile(block+'\n', '', 'single') in namespace, locals
File "<string>", line 1
c1 = str2num(qk-PRZ@e6Ci@yfYE3mq0w0!5eBbF)
^
SyntaxError: invalid syntax