python - AttributeError: 'Rsa' object has no attribute 'n' -
i getting error:
traceback (most recent call last): file "/users/aditya/desktop/pycharm /fire_tech_camp/rsa/rsamainframe.py", line 7, in <module> rsa = rsaencryptionanddecryption.rsa() file "/users/aditya/desktop/pycharm /fire_tech_camp/rsa/rsaencryptionanddecryption.py", line 8, in __init__ self.p, self.q = self.findingpandq() file "/users/aditya/desktop/pycharm /fire_tech_camp/rsa/rsaencryptionanddecryption.py", line 80, in findingpandq while not self.isprime(self.a): file "/users/aditya/desktop/pycharm /fire_tech_camp/rsa/rsaencryptionanddecryption.py", line 14, in isprime in range(2,int(self.n**0.5)+1): attributeerror: 'rsa' object has no attribute 'n' what trying create class function (isprime()) check primes. in seperate function check if prime (generate_keys()). class being called in seperate file.
code: main file call class:
from rsa import rsaencryptionanddecryption appjar import gui app = gui() rsa = rsaencryptionanddecryption.rsa() def encode(name): msg = app.getentry('input encode here') if msg != '': p, q = rsa.findingpandq() while p == q: p, q = rsa.findingpandq() n, e, d = rsa.generate_keys(p, q) print(n, e, d) i run function in this
app.addbutton('encode', encode, 3, 3) the class code here:
import random math import gcd class rsa: def __init__(self): self.p, self.q = self.findingpandq() self.n = self.p * self.q self.phi = (self.p - 1) * (self.q - 1) self.e = 0 def isprime(self, n): in range(2,int(self.n**0.5)+1): if self.n%i == 0: return false return true def modreverse(self, phi, e): self.pos00 = self.phi self.pos01 = self.phi self.pos10 = self.e self.pos11 = 1 self.newpos10 = 0 while self.newpos10 != 1: self.pos00pos10int = self.pos00 // self.pos10 self.inttimespos10 = self.pos00pos10int * self.pos10 self.inttimespos11 = self.pos00pos10int * self.pos11 self.newpos10 = self.pos00 - self.inttimespos10 if self.newpos10 < 0: self.newpos10 %= phi self.newpos11 = self.pos01 - self.inttimespos11 if self.newpos11 < 0: self.newpos11 %= phi self.pos00 = self.pos10 self.pos01 = self.pos11 self.pos10 = self.newpos10 self.pos11 = self.newpos11 return self.newpos11 def coprime(self, a, b): return gcd(self.a, self.b) == 1 def findingpandq(self): self.a = random.randint(10,100) while not self.isprime(self.a): self.a = random.randint(10,100) self.b = random.randint(10,100) while not self.isprime(self.b): self.b = random.randint(10,100) return self.a, self.b def generate_keys(self, p, q): in range(self.phi): if self.isprime(i): if self.coprime(i, self.phi): self.e = self.d = self.modreverse(self.phi, self.e) while self.e == self.d: self.p, self.q = self.findingpandq(self.p, self.q) while self.p == self.q: self.p, self.q = self.findingpandq(self.p, self.q) self.n, self.e, self.d = self.generate_keys(self.p, self.q) return self.n, self.e, self.d
you calling functions before have set self.n:
def __init__(self): self.p, self.q = self.findingpandq() self.n = self.p * self.q self.n set after called findingpandq(). because call isprime() findingpandq(), , isprime() assumes self.n exists, fails.
you made simple error; should using n (the argument passed isprime(), , not self.n:
def isprime(self, n): in range(2, int(n ** 0.5) + 1): if n % == 0: return false return true
Comments
Post a Comment