Esempio n. 1
0
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)
Esempio n. 2
0
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):])
Esempio n. 3
0
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
Esempio n. 4
0
 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)))
Esempio n. 5
0
 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)))