Example #1
0
def unparse_script(p):
    r = []
    for insn in p:
        kind = insn[0]
        if kind == KIND_PUSH:
            _, data = insn
            r.append(make_push_str(data))
        elif kind == KIND_COND:
            _, sense, sub0, sub1 = insn
            if sense:
                op = OP_IF
            else:
                op = OP_NOTIF
            r.append(chr(op))
            r.append(unparse_script(sub0))
            if sub1:
                r.append(chr(OP_ELSE))
                r.append(unparse_script(sub1))
            r.append(chr(OP_ENDIF))
        elif kind == KIND_CHECK:
            _, op, _ = insn
            r.append(chr(op))
        elif kind == KIND_OP:
            _, op = insn
            r.append(chr(op))
    return ''.join(r)
Example #2
0
def unparse_script (p):
    r = []
    for insn in p:
        kind = insn[0]
        if kind == KIND_PUSH:
            _, data = insn
            r.append (make_push_str (data))
        elif kind == KIND_COND:
            _, sense, sub0, sub1 = insn
            if sense:
                op = OP_IF
            else:
                op = OP_NOTIF
            r.append (chr (op))
            r.append (unparse_script (sub0))
            if sub1:
                r.append (chr (OP_ELSE))
                r.append (unparse_script (sub1))
            r.append (chr (OP_ENDIF))
        elif kind == KIND_CHECK:
            _, op, _ = insn
            r.append (chr (op))
        elif kind == KIND_OP:
            _, op = insn
            r.append (chr (op))
    return ''.join (r)
Example #3
0
 def check_sig(self, s):
     pub_key = self.pop()
     sig = self.pop()
     s0 = parse_script(s)
     s1 = remove_codeseps(s0)
     s2 = remove_sigs(s1, [sig])  # rare?
     s3 = unparse_script(s2)
     return self.check_one_sig(pub_key, sig, s3)
Example #4
0
 def check_sig (self, s):
     pub_key = self.pop()
     sig = self.pop()
     s0 = parse_script (s)
     s1 = remove_codeseps (s0)
     s2 = remove_sigs (s1, [sig]) # rare?
     s3 = unparse_script (s2)
     return self.check_one_sig (pub_key, sig, s3)
Example #5
0
    def check_multi_sig(self, s):
        npub = self.pop_int()
        #print 'npub=', npub
        pubs = [self.pop() for x in range(npub)]
        nsig = self.pop_int()
        #print 'nsig=', nsig
        sigs = [self.pop() for x in range(nsig)]

        s0 = parse_script(s)
        s1 = remove_codeseps(s0)
        s2 = remove_sigs(s1, sigs)  # rare?
        s3 = unparse_script(s2)

        for sig in sigs:
            nmatch = 0
            #print 'checking sig...'
            for pub in pubs:
                if self.check_one_sig(pub, sig, s3):
                    nmatch += 1
            if nmatch == 0:
                #print 'sig matched no pubs'
                return 0
        return 1
Example #6
0
 def check_multi_sig (self, s):
     npub = self.pop_int()
     #print 'npub=', npub
     pubs = [self.pop() for x in range (npub)]
     nsig = self.pop_int()
     #print 'nsig=', nsig
     sigs = [self.pop() for x in range (nsig)]
     
     s0 = parse_script (s)
     s1 = remove_codeseps (s0)
     s2 = remove_sigs (s1, sigs) # rare?
     s3 = unparse_script (s2)
     
     for sig in sigs:
         nmatch = 0
         #print 'checking sig...'
         for pub in pubs:
             if self.check_one_sig (pub, sig, s3):
                 nmatch += 1
         if nmatch == 0:
             #print 'sig matched no pubs'
             return 0
     return 1