from openssl.types import * # ============================================================ # openssl/pem.vp — PEM encoding/decoding # Corresponding header: pem.h # # Everything takes BIO input (PEM_read_bio_*); the x out-parameter for certificates/keys may be NULL # (the function returns a new object). Callback cb uses bytes (Viper passes t.CPtr(0)). # ============================================================ # ---- X509 certificate ---- # X509 *PEM_read_bio_X509(BIO *bp, X509 **x, pem_password_cb *cb, void *u) extern def PEM_read_bio_X509(bp: BioPtr, x: bytes, cb: bytes, u: bytes) -> X509Ptr # int PEM_write_bio_X509(BIO *bp, X509 *x) extern def PEM_write_bio_X509(bp: BioPtr, x: X509Ptr) -> int # X509 *PEM_read_bio_X509_AUX(BIO *bp, X509 **x, pem_password_cb *cb, void *u) extern def PEM_read_bio_X509_AUX(bp: BioPtr, x: bytes, cb: bytes, u: bytes) -> X509Ptr # int PEM_write_bio_X509_AUX(BIO *bp, X509 *x) extern def PEM_write_bio_X509_AUX(bp: BioPtr, x: X509Ptr) -> int # ---- Private / public key (generic EVP_PKEY container) ---- # EVP_PKEY *PEM_read_bio_PrivateKey(BIO *bp, EVP_PKEY **x, pem_password_cb *cb, void *u) extern def PEM_read_bio_PrivateKey(bp: BioPtr, x: bytes, cb: bytes, u: bytes) -> EvpPkeyPtr # int PEM_write_bio_PrivateKey(BIO *bp, EVP_PKEY *x, const EVP_CIPHER *enc, # const unsigned char *kstr, int klen, pem_password_cb *cb, void *u) extern def PEM_write_bio_PrivateKey(bp: BioPtr, x: EvpPkeyPtr, enc: EvpCipherPtr, kstr: bytes, klen: int, cb: bytes, u: bytes) -> int # EVP_PKEY *PEM_read_bio_PUBKEY(BIO *bp, EVP_PKEY **x, pem_password_cb *cb, void *u) extern def PEM_read_bio_PUBKEY(bp: BioPtr, x: bytes, cb: bytes, u: bytes) -> EvpPkeyPtr # int PEM_write_bio_PUBKEY(BIO *bp, EVP_PKEY *x) extern def PEM_write_bio_PUBKEY(bp: BioPtr, x: EvpPkeyPtr) -> int # ---- Legacy RSA private key (still exported in OpenSSL 3.x, for old files) ---- # RSA *PEM_read_bio_RSAPrivateKey(BIO *bp, RSA **x, pem_password_cb *cb, void *u) extern def PEM_read_bio_RSAPrivateKey(bp: BioPtr, x: bytes, cb: bytes, u: bytes) -> bytes # int PEM_write_bio_RSAPrivateKey(BIO *bp, RSA *x, const EVP_CIPHER *enc, # const unsigned char *kstr, int klen, pem_password_cb *cb, void *u) extern def PEM_write_bio_RSAPrivateKey(bp: BioPtr, x: bytes, enc: EvpCipherPtr, kstr: bytes, klen: int, cb: bytes, u: bytes) -> int # ---- Certificate request / CRL ---- # X509_REQ *PEM_read_bio_X509_REQ(BIO *bp, X509_REQ **x, pem_password_cb *cb, void *u) extern def PEM_read_bio_X509_REQ(bp: BioPtr, x: bytes, cb: bytes, u: bytes) -> X509ReqPtr # X509_CRL *PEM_read_bio_X509_CRL(BIO *bp, X509_CRL **x, pem_password_cb *cb, void *u) extern def PEM_read_bio_X509_CRL(bp: BioPtr, x: bytes, cb: bytes, u: bytes) -> X509CrlPtr # ---- Convenience readers (caller passes no x out-param / cb) ---- def pem_read_bio_x509_simple(bp: BioPtr) -> X509Ptr: return PEM_read_bio_X509(bp, None, None, None) def pem_read_bio_privkey_simple(bp: BioPtr) -> EvpPkeyPtr: return PEM_read_bio_PrivateKey(bp, None, None, None) def pem_read_bio_pubkey_simple(bp: BioPtr) -> EvpPkeyPtr: return PEM_read_bio_PUBKEY(bp, None, None, None)