def doFinal(self, inBuff, inOffset, inLength, outBuff, outOffset): Cipher.doFinal(self, inBuff, inOffset, inLength, outBuff, outOffset) data = [0 for i in xrange(inLength)] Util.arrayCopy(inBuff, inOffset, data, 0, inLength) if ((self.algorithm == self.ALG_RSA_PKCS1) and (self.mode == self.MODE_ENCRYPT)): data = self.EME_PKCS1_v1_5_enc(data) if len(data) != (self._theKey.getSize() // 8): raise CryptoException(CryptoException.ILLEGAL_VALUE) if self.mode == self.MODE_ENCRYPT: (res, ) = self._theKey._theKey.encrypt(_arrayTolong(data), None) else: res = self._theKey._theKey.decrypt(_arrayTolong(data)) buf = _longToArray(res) # remove padding if ((self.algorithm == self.ALG_RSA_PKCS1) and (self.mode == self.MODE_DECRYPT)): buf = self.EME_PKCS1_v1_5_dec(buf) Util.arrayCopy(buf, 0, outBuff, outOffset, len(buf)) return len(buf)
def _construct(self): if pyCryptoRSA is None: raise CryptoException(CryptoException.NO_SUCH_ALGORITHM) self._theKey = pyCryptoRSA.construct([_arrayTolong(self.modulus), _arrayTolong(self.exponent)])