class PassManager:
    def __init__(self):
        self.file = shelve.open(FILENAME)

    def __del__(self):
        self.file.close()

    def auth_access(self, key):
        try:
            stored_pass = self.file[PASS_FIELD]
            token = self.file[TOKEN_FIELD]
            if stored_pass == self.__hash(key, token):
                self.key = key
                self.cypher = Cypher(self.key)
                return True
            else:
                raise PassManagerException('Wrong Key')
        except KeyError:
            self.key = key
            self.cypher = Cypher(self.key)
            token = self.__generate_key()
            self.file[TOKEN_FIELD] = token
            self.file[PASS_FIELD] = self.__hash(self.key, token)
            return True

    def get_services(self):
        if not self.key:
            raise PassManagerException("You need to authenticate first")
        elif (len(self.file.keys()) - 2) > 0:
            return [
                elem for elem in self.file
                if elem != PASS_FIELD and elem != TOKEN_FIELD
            ]
        else:
            raise PassManagerException("There aren't saved services yet")

    def remove_service(self, service):
        if not self.key:
            raise PassManagerException("You need to authenticate first")
        elif service != PASS_FIELD and service != TOKEN_FIELD:
            try:
                del self.file[service]
                return True
            except KeyError:
                raise PassManagerException('Service not found')
        else:
            raise PassManagerException('Service not found')
        return False

    def add_pass(self, service, passwd):
        if not self.key:
            raise PassManagerException("You need to authenticate first")
        elif service != PASS_FIELD and service != TOKEN_FIELD:
            try:
                var = self.file[service]
                if var:
                    raise PassManagerException(
                        'This service already exists. Remove it if you want to change the password'
                    )
            except KeyError:
                self.file[service] = self.cypher.encrypt(passwd)
                return True
        else:
            raise PassManagerException(
                "that service name can't be used, sorry")

    def retrieve_pass(self, service):
        if not self.key:
            raise PassManagerException("You need to authenticate first")
        elif service != PASS_FIELD and service != TOKEN_FIELD:
            try:
                passwd = self.cypher.decrypt(self.file[service])
                return passwd
            except KeyError:
                raise PassManagerException("Service not found")
        else:
            raise PassManagerException("Service not found")

    def __generate_key(self):
        return secrets.token_bytes(20)

    def __hash(self, key, random_token):
        return hashlib.sha224(key.encode('utf-8') + random_token).hexdigest()
Exemple #2
0
from cypher import Cypher
from token import CONFIG

token = CONFIG['token']
get_url = 'https://api.codenation.dev/v1/challenge/dev-ps/generate-data?token={}'.format(token)
post_url = 'https://api.codenation.dev/v1/challenge/dev-ps/submit-solution?token={}'.format(token)
filename = 'answer.json'

c = Cypher(get_url, post_url, filename)
print(c.decrypt())
c.update()
Exemple #3
0
def decrypt():
    sqlite = Bdd()
    reading = sqlite.hash_bdd()
    global mail
    global identify
    global title2
    global police2
    global anti_brute_force
    global voice
    title2.pack()
    a = 0
    b = 0
    mot_finale = []
    identify_encode = identify.get().encode("utf-8")
    mail_encode1 = mail.get()
    if bcrypt.checkpw(identify_encode, reading):
        liste = list(identify.get())
        while a < 16:
            a += 1
            mot_finale.append(liste[b])
            b += 1
            if b == len(liste):
                b = 0
            else:
                continue
        mot_finale2 = ''.join(mot_finale)
        crypt = Cypher(mot_finale2)
        encryption_test = crypt.encrypt(mail_encode1)
        curseur3 = connexion.cursor()
        curseur3.execute("SELECT mail FROM auth")
        result = curseur3.fetchall()
        search_password = []
        for resultat in result:
            result_decode = result[0]
            search_password.append(resultat[0])
        connexion.commit()
        curseur4 = connexion.cursor()
        a = 0
        for element in search_password:
            if element == encryption_test:
                curseur4.execute("SELECT pass FROM auth WHERE mail=?",
                                 [element])
                result2 = curseur4.fetchone()
                connexion.commit()
                crypt = Cypher(mot_finale2)
                unpad_decrypt = crypt.decrypt(result2[0])
                if voice.get() == 1:
                    tts = gTTS('Your password is ' + unpad_decrypt, 'en')
                    tts.save('voice.mp3')
                    playsound('voice.mp3')
                    os.remove("voice.mp3")
                    return 0
                else:
                    resp = "The password is" + unpad_decrypt
                    color_resp = "green"
                    title2.pack_forget()
                    title2 = Button(window,
                                    text=resp,
                                    bg=color_background,
                                    fg=color_resp,
                                    width=1000,
                                    height=2,
                                    borderwidth=0,
                                    font=police2)
                    title2.pack()
                    connexion.commit()
                    a = 0
                    anti_brute_force = 0
                    return 0
            else:
                a = 5
        if a == 5:
            resp = "the email was not found"
            color_resp = "red"
            title2.pack_forget()
            title2 = Button(window,
                            text=resp,
                            bg=color_background,
                            fg=color_resp,
                            width=1000,
                            height=2,
                            borderwidth=0,
                            font=police2)
            title2.pack()
            connexion.commit()
            return 0
    else:
        if anti_brute_force == 6:
            resp = "Anti brute force activated for 30 seconds of inactivity"
            anti_brute_force = 0
        else:
            resp = "The ID is false"
        color_resp = "red"
        title2.pack_forget()
        title2 = Button(window,
                        text=resp,
                        bg=color_background,
                        fg=color_resp,
                        width=1000,
                        height=2,
                        borderwidth=0,
                        font=police2)
        title2.pack()
        return 0
        if resp == "Anti brute force activated for 30 seconds of inactivity":
            time.sleep(30)
        anti_brute_force += 1
        connexion.commit()
    global nombre_error
    nombre_error += 1
    color_resp = "grey"
    resp = "ok"
    if nombre_error == 1:
        title2 = Button(window,
                        text=resp,
                        bg=color_background,
                        fg=color_resp,
                        width=1000,
                        height=2,
                        borderwidth=0,
                        font=police2)
    else:
        title2.pack_forget()