Esempio n. 1
0
File: RSA.py Progetto: gendsbk/Labs2
def main():
	if len(sys.argv) != 2:
		usage()

	f = open(sys.argv[1])

	msg = f.read()

	f.close()
	
	tmp = bint.bint()

	p = bint.bint(tmp.read("p.txt"))
	q = bint.bint(tmp.read("q.txt"))
	e = bint.bint(tmp.read("e.txt"))

	n = p * q


	m = bint.bint(str(bint.Hash(sys.argv[1])))
	
	m, sign = rsa(q,p,e,m,n)

	checksign = p.powmod(sign,e,n)


	print "sign: ("+str(m)+","+ str(sign)+ ")"


	if m == checksign:
		print "m==m' : "+str(m)+"=="+str(checksign)
		print "Sign is true!"
	else:
		print "m!=m' : "+str(m)+"!="+str(checksign)
		print "Sign is false!"
Esempio n. 2
0
def Generation_keys():
    File = open("p.txt", "r")  #открываем файл на чтение
    p = int(File.read())  #считываем файл целиком
    File.close()

    # проверяем число p из файла на простоту с помощью теста Миллера
    if not is_prime(p):
        raise ValueError("Выбранное число не является простым.")

    #выбор g
    while True:
        g = random.randint(2, p - 1)  #g - тоже случайное число 2<g<p-1

        if ((p - 1) % g) != 1:  #чтоб g не равнялся p-1
            break

    x = random.randint(2, p - 1)  #секретный ключ x, который равен 1<x<p

    p = bint.bint(str(p))  #перевод типов в длинную арифметику

    g = bint.bint(str(g))

    x = bint.bint(str(x))

    y = p.powmod(g, x, p)  #расчет y=g^x mod p

    #открытыми являются (p,g,y) а закрытым x
    return p, g, y, x
Esempio n. 3
0
def gen_keys():
	
	f = open("p.txt")

	p = int(f.read())

	f.close()

	

	while True:
		g = random.randint(2, p - 1)

		if ((p - 1) % g) != 1:
			break

	x = random.randint(2, p - 1)

	p = bint.bint(str(p))

	g = bint.bint(str(g))

	x = bint.bint(str(x))

	y = p.powmod(g, x, p)

	return p, g, y, x
Esempio n. 4
0
def elgamal(msg, p, g, y, x):# shifr / deshifr v odnoy functsii

	msg = bint.bint(str(msg))  #sozdaem bol'shoe chislo ot parametra - stroki vhodnogo soobsheniya

	if msg > p: #esli dlinna ishodnogo soobsheniya bolshe modulya - oshibka
		raise ValueError("Неверная длина сообщения")

	pp = str(p) # bol'shoe chislo P privodim k formatu stroki

	pp = int(pp) # ego zhe privodim k tselochislennomu tipu

	k = random.randint(2, pp - 1) #vibiraem sluchainoe chislo k 1 < k < p-1

	k = bint.bint(str(k)) # privodim K k bol'shiomu chislu

	a = p.powmod(g, k, p)# a = g^k mod p                                               # Кодирование

	b = p.powmod(y, k, p)# b = y^k mod p                                               # Кодирование
	b = (msg * b) % p # b = y^k * M mod p, gde M ishodniy tekst

	print "\ncode: ("+str(a)+","+str(b)+")"

	decode_msg = p.powmod(a, x, p)  #a^x mod p                                    # Декодирование
	decode_msg = inverse(decode_msg, p) #(a^x)^-1 mod p
	decode_msg = (decode_msg * b) % p # b*(a^x)^-1 mod p chto sootvetstvuet decodirovannomu soobsheniu
	
	

	return decode_msg
Esempio n. 5
0
def elgamal(msg, p, g, y, x):

	msg = bint.bint(str(msg))

	if msg > p:
		raise ValueError("Неверная длина сообщения")

	pp = p.st()

	pp = int(pp)

	k = random.randint(2, pp - 1)

	k = bint.bint(str(k))

	a = p.powmod(g, k, p)                                               # Кодирование

	b = p.powmod(y, k, p)                                               # Кодирование
	b = (msg * b) % p

	print "code ( "+ str(a) + "," + str(b) + ")"

	decode_msg = p.powmod(a, x, p)                                      # Декодирование
	decode_msg = inverse(decode_msg, p)
	decode_msg = (decode_msg * b) % p

	return decode_msg
Esempio n. 6
0
def rsa(msg, p, q, e):
    fi = (p - bint.bint(1)) * (
        q - bint.bint(1)
    )  #vichislyaem phi po knizhke shitova) p and q prostie => phi(p)= p - 1 and phi(q)=q-1
    d = generate_d(e, fi)  # generim chislo d
    print "\nopen key: {" + str(e) + "," + str(p) + "}"
    print "\nclose key: {" + str(d) + "," + str(p) + "}"

    msg = bint.bint(str(msg))

    modulus = p * q  # vichislyaem n = p*q on zhe modul'

    if msg > modulus:
        raise ValueError(
            "Неверная длина сообщения")  #esli soobshenie > modulya => oshibka

    code = d.powmod(
        msg, e,
        modulus)  #code = msg^e mod modulus                     # Кодирование

    print "\ncode: " + str(code)

    decode_msg = d.powmod(
        code, d,
        modulus)  # decod = code^d mod modulus              # Декодирование

    return decode_msg
Esempio n. 7
0
def gen_keys():
	
	#schitivaem prostoe p

	f = open("p.txt") 

	p = int(f.read())

	f.close()
	#vibiraem primitivniy element g
	while True:
		g = random.randint(2, p - 1)

		if ((p - 1) % g) != 1:
			break
	# vibiraem sluchaynoe  x  1 < x < p-1
	x = random.randint(2, p - 1)

	p = bint.bint(str(p)) # privodim P k formatu bol'shogo chisla i vse ostal'noe tozhe

	g = bint.bint(str(g))

	x = bint.bint(str(x))

	y = p.powmod(g, x, p) # vichislyaem y = g^x mod p

	return p, g, y, x
Esempio n. 8
0
File: RSA.py Progetto: gendsbk/Labs2
def rsa(q,p,e,m,n):

	fi = (p - bint.bint(1)) * (q - bint.bint(1))

	d = generate_d(e, fi)


	s = bint.bint()

	s = d.powmod(m,d,n)

	return m,s
Esempio n. 9
0
def gen_keys():
	"""Генерирует ключи

	"""
	f = open("p.txt")

	p = int(f.read())

	f.close()

	f = open("q.txt")

	q = int(f.read())

	f.close()

	f = open("g.txt")

	g = int(f.read())

	f.close()

	prime_test(p)
	prime_test(q)

	w = random.randint(2, q - 1)

	r = random.randint(2, q - 1)

	p = lib.bint(str(p))
	q = lib.bint(str(q))
	g = lib.bint(str(g))
	w = lib.bint(str(w))
	r = lib.bint(str(r))

	inv_g = inverse(g, p)

	y = p.powmod(inv_g, w, p)

	x = p.powmod(g, r, p)

	print "\nКлючи сгенерированы:\n"

	print "x = ", x, "отсылается Виктору\n"

	return p, q, g, w, r, y, x
Esempio n. 10
0
def Decoding(p, x, a, b):

    h = 1
    h = bint.bint(
        str(h)
    )  #k переведем в большие числа, чтоб второй аргумент ф-ии powmod был bint
    Decode_message = (b * p.powmod(a, p - h - x, p)) % p
    #print(Decode_message)

    return Decode_message
Esempio n. 11
0
def gen_keys():
	# generiruem p q and g
	f = open("p.txt")

	p = int(f.read())

	f.close()

	f = open("q.txt")

	q = int(f.read())

	f.close()

	f = open("g.txt")

	g = int(f.read())

	f.close()



	w = random.randint(2, q - 1) # w -sluchainoe chislo 1 < w < q-1

	r = random.randint(2, q - 1) # r - sluchainoe chislo 1 < r < q-1

	p = bint.bint(str(p))
	q = bint.bint(str(q))
	g = bint.bint(str(g))
	w = bint.bint(str(w))
	r = bint.bint(str(r))

	inv_g = inverse(g, p) # nahodim g^-1

	y = p.powmod(inv_g, w, p) # y = (g^-1)^w mod p

	x = p.powmod(g, r, p) # x = g^r mod p

	print "\nКлючи сгенерированы:\n"

	print "x = ", x, "отсылается Виктору\n"

	return p, q, g, w, r, y, x
Esempio n. 12
0
def Coding(msg, p, g, y, x):
    msg = bint.bint(str(msg))
    if msg > p:
        raise ValueError("Неверная длина сообщения")
    pp = p.st()  #копируем содержимое p в pp

    pp = int(pp)  #преобразование типов bigint в int

    k = random.randint(2, pp - 1)  # 1<k<p-1

    k = bint.bint(str(k))  #k переведем в большие числа

    a = p.powmod(g, k, p)  #a=g^k mod p                             # A

    b = p.powmod(y, k, p)  #b=y^k mod p                             # B
    b = (msg * b) % p  #b=(msg * y^k mod p)
    #print(a)
    #print(b)
    return a, b
Esempio n. 13
0
def keys():
	
	f = open("p.txt")

	p = int(f.read())

	f.close()

	f = open("q.txt")

	q = int(f.read())

	f.close()

	f = open("g.txt")

	g = int(f.read())

	f.close()

	
	w = random.randint(2, q - 1)

	r = random.randint(2, q - 1)

	p = bint.bint(str(p))
	q = bint.bint(str(q))
	g = bint.bint(str(g))
	w = bint.bint(str(w))
	r = bint.bint(str(r))

	inv_g = inverse(g, p)

	y = p.powmod(inv_g, w, p)

	x = p.powmod(g, r, p)

	print "\nKeys is ready:"

	print "x = ", x, "to Bob"

	return p, q, g, w, r, y, x
Esempio n. 14
0
def schnorr(p, q, g, w, r, y, x):
    e = random.randint(0, pow(2, 20) - 1)
    e = lib.bint(str(e))
    s = (r + w * e) % q
    m1 = p.powmod(g, s, p)
    m2 = p.powmod(y, e, p)
    m = (m1 * m2) % p
    if m == x:
        print "подлинность установлена\n"
    else:
        print "Подлинность не установлена\n"
Esempio n. 15
0
def generate_d(a, b):  #вычисляется число d
    while True:
        x, y, g = xgcd(a, b)

        if g != bint.bint(1):
            raise ValueError(
                "Невозможно подобрать такое d, чтобы выполнялось условие d * e mod fi = 1."
            )
        else:
            z = x % b  # chislo d,tolko tut z, no na samom dele eto d :)
            break
    return z
Esempio n. 16
0
def main():
    if len(sys.argv) != 2:
        usage()
    try:

        f = open(sys.argv[1])

        msg = int(f.read())

        f.close()
    except IOError:
        print 'no such file', sys.argv[1]
        sys.exit(-1)
    print "\ntext: " + str(msg)
    tmp = bint.bint()

    p = bint.bint(tmp.read("p.txt"))
    q = bint.bint(tmp.read("q.txt"))
    e = bint.bint(tmp.read("e.txt"))

    decode_msg = rsa(msg, p, q, e)
    print "\ndecode: " + str(decode_msg)
Esempio n. 17
0
File: RSA.py Progetto: gendsbk/Labs2
def generate_d(a, b):
	"""Генерирует число d

	"""
	while True:
		x, y, g = xgcd(a, b)

		if g != bint.bint(1):
			raise ValueError("Невозможно подобрать такое d, чтобы выполнялось условие d * e mod fi = 1.")
		else:
			z = x % b
			break
	return z
Esempio n. 18
0
def gen_keys():
    f = open("p.txt")

    p = int(f.read())

    f.close()

    f = open("q.txt")

    q = int(f.read())

    f.close()

    f = open("g.txt")

    g = int(f.read())

    f.close()

    prime_test(p)
    prime_test(q)

    w = random.randint(2, q - 1)

    r = random.randint(2, q - 1)

    p = lib.bint(str(p))
    q = lib.bint(str(q))
    g = lib.bint(str(g))
    w = lib.bint(str(w))
    r = lib.bint(str(r))

    inv_g = inverse(g, p)

    y = p.powmod(inv_g, w, p)

    x = p.powmod(g, r, p)
    return p, q, g, w, r, y, x
Esempio n. 19
0
def schnorr(p, q, g, w, r, y, x):
	e = random.randint(0, pow(2, 20) - 1)   #vibiraetsya chslo e takoe chto 0< e < 2^20 -1 

	e = bint.bint(str(e))

	print "e = ", e, "отсылается Пегги\n"

	s = (r + w * e) % q # s = (r+ w*e) mod q

	print "s = ", s, "отсылается Виктору\n"

	m1 = p.powmod(g, s, p) # m1=g^s mod p
	m2 = p.powmod(y, e, p) # m2=y^e mod p

	m = (m1 * m2) % p # m = m1*m2 mod p

	if m == x: 
		print "Виктор удостоверился в подлинности x = ", m, "\n"
	else:
		print "Подлинность не установлена\n"
Esempio n. 20
0
def schnorr(p, q, g, w, r, y, x):
	e = random.randint(0, pow(2, 20) - 1)

	e = lib.bint(str(e))

	print "e = ", e, "отсылается Пегги\n"

	s = (r + w * e) % q

	print "s = ", s, "отсылается Виктору\n"

	m1 = p.powmod(g, s, p)
	m2 = p.powmod(y, e, p)

	m = (m1 * m2) % p

	if m == x:
		print "Виктор удостоверился в подлинности x = ", m, "\n"
	else:
		print "Подлинность не установлена\n"
Esempio n. 21
0
def shnor(p, q, g, w, r, y, x):
	e = random.randint(0, pow(2, 20) - 1)

	e = bint.bint(str(e))

	print "e = ", e, "to Alice"

	s = (r + w * e) % q

	print "s = ", s, "to Bob"

	m1 = p.powmod(g, s, p)
	m2 = p.powmod(y, e, p)

	m = (m1 * m2) % p

	if m == x:
		print "Alice is  Alise x = ", m, ""
	else:
		print "Wrong"
Esempio n. 22
0
def xgcd(a, b):
    if a == lib.bint(0):
        return 0, 1, b

    if b == lib.bint(0):
        return 1, 0, a

    px = lib.bint(0)
    ppx = lib.bint(1)
    py = lib.bint(1)
    ppy = lib.bint(0)

    while b > lib.bint(0):
        q = a / b
        a, b = b, a % b
        x = ppx - q * px
        y = ppy - q * py
        ppx, px = px, x
        ppy, py = py, y

    return ppx, ppy, a
Esempio n. 23
0
def xgcd(a, b):
	
	if a == bint.bint(0):
		return 0, 1, b

	if b == bint.bint(0):
		return 1, 0, a

	px = bint.bint(0)
	ppx = bint.bint(1)
	py = bint.bint(1)
	ppy = bint.bint(0)

	while b > bint.bint(0):
		q = a / b
		a, b = b, a % b
		x = ppx - q * px
		y = ppy - q * py
		ppx, px = px, x
		ppy, py = py, y

	return ppx, ppy, a
Esempio n. 24
0
def xgcd(a, b):
	
	if a == bint.bint(0): # -> esli a = 0 , gde 0 formata bol'shogo chisla
		return 0, 1, b

	if b == bint.bint(0): # esli b = 0 , gde 0 formata bol'shogo chisla
		return 1, 0, a

	#matritsa E
	px = bint.bint(0)
	ppx = bint.bint(1)
	py = bint.bint(1)
	ppy = bint.bint(0)

	while b > bint.bint(0):
		q = a / b
		a, b = b, a % b
		x = ppx - q * px
		y = ppy - q * py
		ppx, px = px, x
		ppy, py = py, y

	return ppx, ppy, a
Esempio n. 25
0
File: RSA.py Progetto: gendsbk/Labs2
def xgcd(a, b):
	"""Расширенный алгоритм Евклида

	"""
	if a == bint.bint(0):
		return 0, 1, b

	if b == bint.bint(0):
		return 1, 0, a

	px = bint.bint(0)
	ppx = bint.bint(1)
	py = bint.bint(1)
	ppy = bint.bint(0)

	while b > bint.bint(0):
		q = a / b
		a, b = b, a % b
		x = ppx - q * px
		y = ppy - q * py
		ppx, px = px, x
		ppy, py = py, y

	return ppx, ppy, a
Esempio n. 26
0
#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys
import bint as lib


def usage():
    print "\nИспользование: TCProgLab входной_файл1.txt (+-x/%^) входной_файл2.txt файл_результата.txt -b(бинарный режим, если необходимо)\n"
    sys.exit(-1)


b1 = lib.bint()
b2 = lib.bint()
b3 = lib.bint()

binary = False

if len(sys.argv) < 5 or len(sys.argv) > 6:
    usage()
elif len(sys.argv) == 6:
    if sys.argv[5] == "-b":
        binary = True
    else:
        usage()

if binary == False:
    b1 = lib.bint(b1.read(sys.argv[1]))
    b2 = lib.bint(b2.read(sys.argv[3]))
else:
    b1 = b1.readbin(sys.argv[1])
Esempio n. 27
0
File: main.py Progetto: ZedXan/Bint
#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys
import bint as lib

def usage():
	print "\nИспользование: TCProgLab входной_файл1.txt (+-x/%^) входной_файл2.txt файл_результата.txt -b(бинарный режим, если необходимо)\n";
	sys.exit(-1);

b1 = lib.bint();
b2 = lib.bint();
b3 = lib.bint();

binary = False;

if len(sys.argv) < 5 or len(sys.argv) > 6:
	usage();
elif len(sys.argv) == 6:
	if sys.argv[5] == "-b":
		binary = True;
	else:
		usage();

if binary == False:
	b1 = lib.bint(b1.read(sys.argv[1]));
	b2 = lib.bint(b2.read(sys.argv[3]));
else:
	b1 = b1.readbin(sys.argv[1]);
	b2 = b2.readbin(sys.argv[3]);