static int ExportPublicKey(FILE *outFile, CERTCertificate *cert) { char *data; SECKEYPublicKey *publicKey; SECItem *item; if (!cert) return -1; publicKey = CERT_ExtractPublicKey(cert); if (!publicKey) return -1; item = SECKEY_EncodeDERSubjectPublicKeyInfo(publicKey); SECKEY_DestroyPublicKey(publicKey); if (!item) return -1; data = PL_Base64Encode((const char*)item->data, item->len, NULL); SECITEM_FreeItem(item, PR_TRUE); if (!data) return -1; fputs("pubkey:\n", outFile); fputs(data, outFile); fputs("\n", outFile); PR_Free(data); return 0; }
std::string pubKeyHash(SECKEYPublicKey* key) { auto derPubKey = to_unique(SECKEY_EncodeDERSubjectPublicKeyInfo(key)); return hash(derPubKey->data, derPubKey->data + derPubKey->len); }