Esempio n. 1
0
 def encrypt(self, plaintext):
     assert(len(plaintext) % 16 == 0)
     context = self._createContext(1)
     ciphertext = m2.cipher_update(context, plaintext)
     m2.cipher_ctx_free(context)
     self.IV = ciphertext[-self.block_size:]
     return bytearray(ciphertext)
Esempio n. 2
0
    def encrypt(self, plaintext):
        assert(len(plaintext) % 8 == 0)

        if not plaintext:
            return ''

        context = self._createContext(1)

        ciphertext = m2.cipher_update(context, plaintext)
        m2.cipher_ctx_free(context)
        self.IV = ciphertext[-self.block_size:]
        return ciphertext
Esempio n. 3
0
    def encrypt(self, plaintext):
        assert (len(plaintext) % 8 == 0)

        if not plaintext:
            return ''

        context = self._createContext(1)

        ciphertext = m2.cipher_update(context, plaintext)
        m2.cipher_ctx_free(context)
        self.IV = ciphertext[-self.block_size:]
        return ciphertext
Esempio n. 4
0
    def decrypt(self, ciphertext):
        assert(len(ciphertext) % 16 == 0)
        context = self._createContext(0)
        #I think M2Crypto has a bug - it fails to decrypt and return the last block passed in.
        #To work around this, we append sixteen zeros to the string, below:
        plaintext = m2.cipher_update(context, ciphertext+('\0'*16))

        #If this bug is ever fixed, then plaintext will end up having a garbage
        #plaintext block on the end.  That's okay - the below code will discard it.
        plaintext = plaintext[:len(ciphertext)]
        m2.cipher_ctx_free(context)
        self.IV = ciphertext[-self.block_size:]
        return bytearray(plaintext)