BYTE * multisig_Script_scanner (BYTE &script){ u_int len; len = (u_int *) script; u_ int m; m = (len - 2) / 66 ; // size of ECDSA public key = 65 + 1 stackpush directive=66 if (m > MAX_KEYS_ALLOWED || m * 66 + 2 <> len) return null; // not a valid pubkey list if (script[len+1] <> 0xAE // OP_CHECKMulTISIG return null; if (scipt[2] <> 0x52 ) // OP_1 we accept only 1 of m for now return; // should be a multiply of 66 int i = 0; for ( ; i<m, script[i*66+3] == 0x41 ; i++) ; if i < m return null; // bad format we need pubkeys with a size descriptor of 0x41 return (script+3); }
def bech32Polymod(valueList: 'list[int]') -> 'int': result = 1 for value in valueList: upper = result >> 25 result = (result << 5 | value) & 0x3fffffff result ^= 0x3b6a57b2 if upper & 1 else 0 result ^= 0x26508e6d if upper & 2 else 0 result ^= 0x1ea119fa if upper & 4 else 0 result ^= 0x3d4233dd if upper & 8 else 0 result ^= 0x2a1462b3 if upper & 16 else 0 return result
def bech32Checksum(valueList: 'list[int]', *, isModified: 'bool' = False) -> 'list[int]': code = (0x2bc830a3 if isModified else 1) ^ bech32Polymod([3, 3, 0, 2, 3] + valueList + [0, 0, 0, 0, 0, 0]) return [code >> 25, code >> 20 & 31, code >> 15 & 31, code >> 10 & 31, code >> 5 & 31, code & 31]