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)
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)
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)
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)
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
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