We have two separate semantics for Predicate-to-Key conversion:
On the prover's end, we need to convert ::Key/::Tree into "key witness thing". Say, to_key_witness()->Result<Multikey> (Multikey from MuSig). And fail if it's not unsignable, or if the predicate is ::Opaque.
On the verifier's end, we need a separate method to_verification_key() that converts all variants into a VerificationKey and does not fail.
Based on https://github.com/interstellar/slingshot/pull/268/files#r275086852
We have two separate semantics for Predicate-to-Key conversion:
to_key_witness()->Result<Multikey>
(Multikey
from MuSig). And fail if it's not unsignable, or if the predicate is::Opaque
.to_verification_key()
that converts all variants into a VerificationKey and does not fail.