def generateRS(addressA, addressC, sendAmount, dappData, gasPrice, gasLimit): ''' Internal Function Calculates R & S in a way that 0 < R < secp256k1n 0 < S < secp256k1n / 2 if not recursively runs itself til satisfied \_:)_/ :param addressA: Sender's Address :param addressC: Smart Contracts Address :param sendAmount: Send Amount (in Wei) :param data: Data for smart contract :return: commit, randw, R, S ''' #TODO: validate AddressA and AddressC commit, randw = generateCommit(addressA, addressC, sendAmount, dappData, gasPrice, gasLimit) R = bytearray_to_int(sha3_256(commit + bytes(1))) S = bytearray_to_int(sha3_256(commit + bytes(0))) if (0 < R < secp256k1n) & (0 < S < (secp256k1n / 2)): return commit, randw, R, S else: log.info("Invalid R,S. Regenerating the hashes...") return generateRS(addressA, addressC, sendAmount, dappData, gasPrice, gasLimit)
def set_bytes(mem, start, bytez): end = start + len(bytez) sminor, smajor = start & 31, start >> 5 eminor, emajor = end & 31, end >> 5 if not bytez: pass elif (smajor) == (emajor): m = utils.int_to_32bytearray(mem[smajor]) mem[smajor] = utils.bytearray_to_int(m[:sminor] + bytez + m[eminor:]) else: if sminor: m = utils.int_to_32bytearray(mem[smajor]) mem[smajor] = utils.bytearray_to_int(m[:sminor] + bytez[:32 - (sminor)]) else: mem[smajor] = utils.bytearray_to_int(bytez[:32]) j = 0 for i in range((smajor) + 1, emajor): mem[i] = utils.bytearray_to_int(bytez[j + 32 - (sminor): j + 64 - (sminor)]) j += 32 if eminor: m2 = utils.int_to_32bytearray(mem[emajor]) endpiece = bytez[j + 32 - (sminor):] mem[emajor] = utils.bytearray_to_int(endpiece + m2[-32 + len(endpiece):])
def bytearray_to_32s(b): b += [0] * 32 o = [] for i in range(0, len(b), 32): o.append(utils.bytearray_to_int(b[i:i + 32])) return o
def extract32(self, i): if i >= self.size: return 0 o = self.data[self.offset + i:min(self.offset + i + 32, self.rlimit)] return utils.bytearray_to_int(o + [0] * (32 - len(o)))
def extract32(self, i): if i >= self.size: return 0 o = self.data[self.offset + i: min(self.offset + i + 32, self.rlimit)] return utils.bytearray_to_int(o + [0] * (32 - len(o)))