A proof is essentially a JSON doc that contains some disclosed pieces of info, plus signatures that prove that the disclosed info was actually attested by the issuers of credentials. Sometimes the disclosed info comes directly from a proof (e.g., a birth date from a driver’s license); sometimes it is communicated as the mathematical demonstration of a predicate (the fact of being over 18 instead of the actual birthdate). Verification consists of checking the math used by the prover and of checking the signatures to see that they were created by the appropriate keys. An additional step of verification is answering the question, “Okay, so the issuer did in fact sign this information. Do I want to trust this particular issuer?” The way this question is answered is up to each verifier; it could be a trivial process of comparing the issuer’s DID to a list of DIDs that are considered trustworthy, or it could be something much more sophisticated.

You can see sample proofs by capturing the proofs that are sent during libindy unit tests.