def METHOD_NAME():
    # Attack mentioned here https://crypto.stanford.edu/~dabo/pubs/papers/BLSmultisig.html
    groupObj = PairingGroup('MNT224')
    m = {'a': "hello world!!!", 'b': "test message"}
    bls = BLSAggregation(groupObj)
    g = group.random(G2)
    pk0, sk0 = bls.keygen(g)
    pk1, sk1 = bls.keygen(g)
    # Construct the attacker's public key (pk2) as `g^beta * (pk1*pk2)^-1`,
    # i.e inverse of the product of all public keys that the attacker wants
    # to forge the multi-sig over
    pk_inverse = 1 / (BLSAggregation.product([pk0['g^x'], pk1['g^x']]))
    beta = group.random()
    pk2, _ = bls.keygen(g)
    pk2['g^x'] = (g ** beta) * pk_inverse
    M = BLSAggregation.dump(m)
    h = group.hash(M, G1)
    fake_aggregate_sig = h ** beta
    assert bls.verify_aggregate_sig_vulnerable(m, fake_aggregate_sig, [pk0, pk1, pk2]), \
        'Failure!!!'
    if debug:
        print('ROGUE PUBLIC KEY ATTACK SUCCESS!!!')