Пример #1
0
    def encrypt(self, pt):
        self.buffer = bytearray()  #return할 buffer
        self.enciv = bytearray()  #암호화 시킨 iv를 한꺼번에 저장할 buffer
        self.pt = to_bytearray(pt)
        self.ptlength = len(pt)  #리턴시킬 암호문 길이
        '''
        block count 설정
        16배수면 그대로
        16배수가 아니면 padding을 통해 16배수로 만들어주고 count 설정
        '''
        cnt = int(len(pad(self.pt)) / self.block_size)
        if ((len(self.pt) % self.block_size) != 0):
            cnt = len(pad(self.pt)) / self.block_size
        '''
        iv 미리 계산
        '''

        tmp = self.iv  #입력 iv
        for i in range(cnt - 1):
            tmp = self.crypto.encrypt(tmp)
            self.enciv += tmp  #iv계산 저장
        '''
        암호화 진행
        '''
        for i in range(cnt):
            buf1 = self.enciv[(self.block_size * i):(self.block_size * i) +
                              self.block_size]  #block size에 맞게 미리 계산한 iv 자르기
            buf2 = self.pt[(self.block_size * i):(self.block_size * i) +
                           self.block_size]  #block size로 평문 자르기
            self.buffer += xorAr(buf1, buf2)  #xor 진행

        return self.buffer[:self.ptlength]  #평문 길이만큼 return
Пример #2
0
    def encrypt(self, pt):
        self.buffer = bytearray()  #리턴할 buffer

        self.pt = pad(pt)  #padding
        self.pt = to_bytearray(self.pt)  #to bytearray
        cnt = int(len(self.pt) / self.block_size)  #count
        '''
        암호화 진행
        '''
        for i in range(cnt):
            buf = self.pt[(self.block_size * i):(self.block_size * i) +
                          self.block_size]  #block 자르기
            enc = self.crypto.encrypt(buf)
            self.buffer += enc

        return self.buffer
Пример #3
0
    def encrypt(self, pt):
        self.buffer = bytearray()  #return buffer
        self.pt = to_bytearray(pt)
        self.ptlength = len(pt)  #return length
        '''
        16의 배수에 맞게 cnt 설정
        '''
        cnt = int(len(self.pt) / self.bloc_size)
        if ((len(self.pt) / self.bloc_size) != 0):
            cnt = len(pad(self.pt))

        for i in range(cnt):
            self.buffer += xorAr(self.crypto.encrypt(
                self.ctr), self.pt[(self.bloc_size * i):(self.bloc_size * i) +
                                   self.bloc_size])  #암호화 진행
            self.cal_ctr()  #ctr update

        return self.buffer[:self.ptlength]
Пример #4
0
    def encrypt(self, pt):
        self.buffer = bytearray() #return buffer
        self.pt = to_bytearray(pt) #plain text convert to bytearray
        self.ptlength = len(pt) #return할 cipher ptext 길이
        
        
        '''
        평문의 길이가 16의 배수이면 그대로 cnt설정
        16의 배수가 아니면 padding을 해서 16의 배수로 만든 다음 cnt 설정
        '''
        cnt = int(len(self.pt)/self.block_size)
        if((len(self.pt)/self.block_size) != 0):
            cnt = len(pad(self.pt))
        
        c0 = self.iv #cipher block
        for i in range(cnt-1):
            buf = self.pt[(self.block_size * i) : (self.block_size*i) + self.block_size] #block size로 plain text 자르기
            c0 = self.crypto.encrypt(c0) #암호화
            c0 = xorAr(buf, c0) #xor 진행 and cipher block update
            self.buffer += c0 #adding block
            

        
        return self.buffer[:self.ptlength]
Пример #5
0
 def __init__(self, key, iv, block_size=16):
     self.crypto = LEA(key)
     self.iv = to_bytearray(iv)
     self.block_size = block_size
Пример #6
0
 def __init__(self, key, ctr, block_size=16):
     self.crypto = LEA(key)
     self.ctr = to_bytearray(ctr)
     self.bloc_size = block_size
Пример #7
0
 def __init__(self, key,iv, block_size = 16):
     self.crypto = LEA(key) #암호 알고리즘 선언
     self.iv = to_bytearray(iv) #iv convert to byte array
     self.block_size = block_size #block size setting