Skip to content
buybitcoinsmart

Glossary / Developer reference

PP pki data

Definition
PP pki data was the field in a BIP70 payment request that carried the merchant's certificates, DER encoded, leaf first, with any intermediates behind it and the root left out.

Specified in BIP-70.

A signature is worthless without the public key that checks it, and BIP70 shipped that key inside a certificate rather than on its own. The field held a small protobuf wrapper around a list of raw DER certificates, ordered from the merchant outward. What it contained decided whether a wallet showed a company name or a bare warning.

How it works

Status: historical. PP pki data was field 3 of the five in a PaymentRequest message, and Bitcoin Core deleted the code that read it in version 0.20.0, released June 3, 2020.

Inside the bytes sat a protobuf message named X509Certificates with exactly one repeated field, each entry a complete certificate in binary form. The order was specified rather than left to taste: the merchant's own certificate came first, then whatever intermediates were needed to reach a public root.

The root itself was deliberately absent, and the reasoning generalizes far beyond BIP70. A root you receive from the party you are trying to verify proves nothing, since anyone can generate one and sign anything they like with it. Trust has to arrive from a list your device already holds.

DER, the encoding used, is the canonical binary form of ASN.1: one structure, exactly one legal byte sequence. The familiar PEM format with its BEGIN CERTIFICATE lines is those same bytes in base64, which costs about a third more space, so the wire format is always the raw one.

Certificates dominated the size of a request. Outputs, a timestamp and a note might come to a couple of hundred bytes, while an RSA-2048 certificate alone carries a 256-byte modulus and a 256-byte signature before any names or extensions are counted, and two of them in sequence run into thousands. Where the pki type was "none" the field was simply empty and a wallet had nothing to display but the destination.

Where you see it

The same certificate list, in the same leaf-first order, arrives on every HTTPS connection you make.

A TLS server sends its own certificate first and the intermediates after it, omitting the root for the reason above. You can read the exact list any site sends with one command, openssl s_client -showcerts -connect example.com:443, and what prints is the identical material BIP70 was carrying, shown in PEM rather than binary.

For someone buying bitcoin, the lesson is in what those bytes do not tell you. A valid chain proves that some authority checked control of a domain name at the moment of issuance. It says nothing about who owns the company, whether the page is a clone of an exchange, or whether that exchange can meet withdrawals. Phishing sites carry entirely valid certificates, obtained free and in seconds, and the padlock they produce is indistinguishable from the real one.

So read the domain, not the lock. Reach an exchange through a bookmark you made once rather than through a search advertisement, and treat a certificate warning on a site holding your money as a full stop rather than a prompt.

PP pki data vs certificate chain

PP pki data was a container; the certificate chain is what went in it. Naming pki data only makes sense while reading BIP70 documentation or archived wallet source, because nothing else has ever used the term. A chain, by contrast, is a live thing you depend on daily, and the ordering rule BIP70 wrote down, leaf first with the root omitted, is the rule TLS still follows.

Not to be confused with

Frequently asked questions

Why was the root certificate never included in a payment request?

Because a root supplied by the sender proves nothing. Anyone can create a root and sign anything with it, so trust has to come from the list already installed on your device, not from bytes the merchant chose to attach.

Does a valid certificate mean an exchange is safe to use?

No. It means somebody proved control of that domain name to a certificate authority. It carries no information about the company's licensing, solvency, or honesty, and a lookalike domain gets a valid certificate just as easily.

Related terms

More in Developer reference