#coding=utf8
""" Funkcje służące do szyfrowania historycznie """

def caesar(string, shift=3):
    """ Szyfrujemy przesuwając literki w alfabecie o wartość shift """
    result = ""
    upper_a = ord('A')
    lower_a = ord('a')
    for c in string:
        if c.isupper():
            result += chr(((ord(c) - upper_a + shift) % 26) + upper_a)
        else:
            result += chr(((ord(c) - lower_a + shift) % 26) + lower_a)
    return result

def e_vigenere(key, string):
    """ Funkcja szyfrująca za pomocą algorytmu Vigenere'a """
    result = ""
    upper_a = ord('A') #used for choosing the proper shift 
    lower_a = ord('a')

    for i,c in enumerate(string):
        #print i, c
        if c.isalpha():
            result += caesar(c, ord(key[(i%len(key))]) - (upper_a if c.isupper() else lower_a))
        else:
            result += c

    return result

def d_vigenere(key, string):
    result = ""
    upper_a = ord('A') #used for choosing the proper shift 
    lower_a = ord('a')

    for i,c in enumerate(string):
        #print i, c
        if c.isalpha():
            result += caesar(c, -(ord(key[(i%len(key))]) - (upper_a if c.isupper() else lower_a)))
        else:
            result += c

    return result

# konkurs Historia kryptografii

