Files
TransPyC/includes/openssl/x509.vp
T

178 lines
9.6 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import t, c
from openssl.types import *
# ============================================================
# openssl/x509.vp — X509 证书解析 / 校验 + 必要 ASN.1 助手
# 对应头文件: x509.h / x509_vfy.h / asn1.h
#
# 证书网络解析场景:读取 subject/issuer/SAN/有效期/公钥、链式校验。
# ============================================================
X509VOk: t.CDefine = 0
X509Version1: t.CDefine = 0
X509Version2: t.CDefine = 1
X509Version3: t.CDefine = 2
# ============================================================
# 1) 证书对象生命周期
# ============================================================
# X509 *X509_new(void) / void X509_free(X509 *a)
extern def X509_new() -> X509Ptr
extern def X509_free(a: X509Ptr)
# int i2d_X509(X509 *a, unsigned char **pp) / X509 *d2i_X509(X509 **a, const unsigned char **pp, long length)
# (pp 语义复杂,Viper 端建议用 d2i_X509_bio/i2d_X509_bio,故不暴露裸 d2i/i2d)
extern def d2i_X509_bio(bp: BioPtr, x509: bytes) -> X509Ptr
extern def i2d_X509_bio(bp: BioPtr, x509: X509Ptr) -> int
# ============================================================
# 2) 证书字段读取
# ============================================================
# long X509_get_version(const X509 *x)
extern def X509_get_version(x: X509Ptr) -> t.CInt32T
# ASN1_INTEGER *X509_get_serialNumber(X509 *x)
extern def X509_get_serialNumber(x: X509Ptr) -> Asn1IntegerPtr
# X509_NAME *X509_get_subject_name(const X509 *a)
extern def X509_get_subject_name(a: X509Ptr) -> X509NamePtr
# X509_NAME *X509_get_issuer_name(const X509 *a)
extern def X509_get_issuer_name(a: X509Ptr) -> X509NamePtr
# const ASN1_TIME *X509_get0_notBefore(const X509 *x)
extern def X509_get0_notBefore(x: X509Ptr) -> Asn1TimePtr
# const ASN1_TIME *X509_get0_notAfter(const X509 *x)
extern def X509_get0_notAfter(x: X509Ptr) -> Asn1TimePtr
# EVP_PKEY *X509_get_pubkey(X509 *x)
extern def X509_get_pubkey(x: X509Ptr) -> EvpPkeyPtr
# ASN1_BIT_STRING *X509_get0_pubkey_bitstr(const X509 *x)
extern def X509_get0_pubkey_bitstr(x: X509Ptr) -> Asn1BitStringPtr
# int X509_get_signature_nid(const X509 *x)
extern def X509_get_signature_nid(x: X509Ptr) -> int
# int X509_digest(const X509 *data, const EVP_MD *type, unsigned char *md, unsigned int *len)
extern def X509_digest(data: X509Ptr, type: EvpMdPtr, md: bytes, len: bytes) -> int
# int X509_verify(X509 *a, EVP_PKEY *r)
extern def X509_verify(a: X509Ptr, r: EvpPkeyPtr) -> int
# ============================================================
# 3) X509_NAME 读取(subject/issuer 各 RDN 段)
# ============================================================
# int X509_NAME_entry_count(const X509_NAME *name)
extern def X509_NAME_entry_count(name: X509NamePtr) -> int
# int X509_NAME_get_index_by_NID(const X509_NAME *name, int nid, int lastpos)
extern def X509_NAME_get_index_by_NID(name: X509NamePtr, nid: int, lastpos: int) -> int
# X509_NAME_ENTRY *X509_NAME_get_entry(const X509_NAME *name, int loc)
extern def X509_NAME_get_entry(name: X509NamePtr, loc: int) -> X509NameEntryPtr
# ASN1_OBJECT *X509_NAME_ENTRY_get_object(const X509_NAME_ENTRY *ne)
extern def X509_NAME_ENTRY_get_object(ne: X509NameEntryPtr) -> Asn1ObjectPtr
# ASN1_STRING *X509_NAME_ENTRY_get_data(const X509_NAME_ENTRY *ne)
extern def X509_NAME_ENTRY_get_data(ne: X509NameEntryPtr) -> Asn1StringPtr
# int X509_NAME_get_text_by_NID(const X509_NAME *name, int nid, char *buf, int len)
extern def X509_NAME_get_text_by_NID(name: X509NamePtr, nid: int, buf: bytes, len: int) -> int
# char *X509_NAME_oneline(const X509_NAME *a, char *buf, int size) → 返回指向 buf 的指针
extern def X509_NAME_oneline(a: X509NamePtr, buf: bytes, size: int) -> str
# ============================================================
# 4) 扩展(SAN 等)
# ============================================================
# int X509_get_ext_count(const X509 *x)
extern def X509_get_ext_count(x: X509Ptr) -> int
# X509_EXTENSION *X509_get_ext(const X509 *x, int loc)
extern def X509_get_ext(x: X509Ptr, loc: int) -> X509ExtensionPtr
# int X509_get_ext_by_NID(const X509 *x, int nid, int lastpos)
extern def X509_get_ext_by_NID(x: X509Ptr, nid: int, lastpos: int) -> int
# void *X509_get_ext_d2i(const X509 *x, int nid, int *crit, int *idx)
extern def X509_get_ext_d2i(x: X509Ptr, nid: int, crit: bytes, idx: bytes) -> GeneralNamesPtr
# ASN1_OBJECT *X509_EXTENSION_get_object(X509_EXTENSION *ex)
extern def X509_EXTENSION_get_object(ex: X509ExtensionPtr) -> Asn1ObjectPtr
# ASN1_OCTET_STRING *X509_EXTENSION_get_data(X509_EXTENSION *ne)
extern def X509_EXTENSION_get_data(ne: X509ExtensionPtr) -> Asn1OctetStringPtr
# int X509V3_EXT_print(BIO *out, X509_EXTENSION *ext, unsigned long flag, int indent)
extern def X509V3_EXT_print(out: BioPtr, ext: X509ExtensionPtr,
flag: t.CUInt32T, indent: int) -> int
# GENERAL_NAME 遍历(SAN:DNS/URI/IP/email)
extern def GENERAL_NAME_free(a: GeneralNamePtr)
extern def GENERAL_NAMES_free(a: GeneralNamesPtr)
# int GENERAL_NAME_print(BIO *out, GENERAL_NAME *gen)
extern def GENERAL_NAME_print(out: BioPtr, gen: GeneralNamePtr) -> int
# 通用 OPENSSL 栈访问(STACK_OF 的内核,宏 sk_xxx_num/value 最终落到这)
# int OPENSSL_sk_num(const OPENSSL_STACK *st)
extern def OPENSSL_sk_num(st: bytes) -> int
# void *OPENSSL_sk_value(const OPENSSL_STACK *st, int i)
extern def OPENSSL_sk_value(st: bytes, i: int) -> GeneralNamePtr
# void OPENSSL_sk_free(OPENSSL_STACK *st)
extern def OPENSSL_sk_free(st: bytes)
# const char *OBJ_nid2sn ... 已放 objects.vp;此处放 GNR 常量
GenEmail: t.CDefine = 1
GenDns: t.CDefine = 2
GenUri: t.CDefine = 6
GenIpadd: t.CDefine = 7
# ---- SAN 便捷读取(把某类 GENERAL_NAME 数量统计)----
def x509_san_count(gns: GeneralNamesPtr) -> int:
return OPENSSL_sk_num(gns)
# ============================================================
# 5) 证书链校验(X509_STORE_CTX)
# ============================================================
# X509_STORE *X509_STORE_new(void) / void X509_STORE_free(X509_STORE *v)
extern def X509_STORE_new() -> X509StorePtr
extern def X509_STORE_free(v: X509StorePtr)
# int X509_STORE_add_cert(X509_STORE *ctx, X509 *x)
extern def X509_STORE_add_cert(ctx: X509StorePtr, x: X509Ptr) -> int
# int X509_STORE_load_file(X509_STORE *xs, const char *file)
extern def X509_STORE_load_file(xs: X509StorePtr, file: str) -> int
# int X509_STORE_load_path(X509_STORE *xs, const char *path)
extern def X509_STORE_load_path(xs: X509StorePtr, path: str) -> int
# int X509_STORE_load_locations(X509_STORE *s, const char *file, const char *dir)
extern def X509_STORE_load_locations(s: X509StorePtr, file: str, dir: str) -> int
# int X509_STORE_set_default_paths(X509_STORE *xs)
extern def X509_STORE_set_default_paths(xs: X509StorePtr) -> int
# X509_STORE_CTX
extern def X509_STORE_CTX_new() -> X509StoreCtxPtr
extern def X509_STORE_CTX_free(ctx: X509StoreCtxPtr)
# int X509_STORE_CTX_init(X509_STORE_CTX *ctx, X509_STORE *trust_store,
# X509 *target, STACK_OF(X509) *untrusted)
extern def X509_STORE_CTX_init(ctx: X509StoreCtxPtr, trust_store: X509StorePtr,
target: X509Ptr, untrusted: bytes) -> int
# void X509_STORE_CTX_set_cert(X509_STORE_CTX *ctx, X509 *target)
extern def X509_STORE_CTX_set_cert(ctx: X509StoreCtxPtr, target: X509Ptr)
# void X509_STORE_CTX_set_chain(X509_STORE_CTX *ctx, STACK_OF(X509) *sk)
extern def X509_STORE_CTX_set_chain(ctx: X509StoreCtxPtr, sk: bytes)
# int X509_verify_cert(X509_STORE_CTX *ctx)
extern def X509_verify_cert(ctx: X509StoreCtxPtr) -> int
# int X509_STORE_CTX_get_error(const X509_STORE_CTX *ctx)
extern def X509_STORE_CTX_get_error(ctx: X509StoreCtxPtr) -> int
# int X509_STORE_CTX_get_error_depth(const X509_STORE_CTX *ctx)
extern def X509_STORE_CTX_get_error_depth(ctx: X509StoreCtxPtr) -> int
# X509 *X509_STORE_CTX_get_current_cert(const X509_STORE_CTX *ctx)
extern def X509_STORE_CTX_get_current_cert(ctx: X509StoreCtxPtr) -> X509Ptr
# const char *X509_verify_cert_error_string(long n)
extern def X509_verify_cert_error_string(n: t.CInt32T) -> str
# ============================================================
# 6) ASN.1 字符串 / 时间助手(asn1.h)
# ============================================================
# int ASN1_STRING_length(const ASN1_STRING *x)
extern def ASN1_STRING_length(x: Asn1StringPtr) -> int
# const unsigned char *ASN1_STRING_get0_data(const ASN1_STRING *x)
extern def ASN1_STRING_get0_data(x: Asn1StringPtr) -> bytes
# int ASN1_STRING_type(const ASN1_STRING *x)
extern def ASN1_STRING_type(x: Asn1StringPtr) -> int
# int ASN1_STRING_to_UTF8(unsigned char **out, const ASN1_STRING *in) → 返回长度,需 CRYPTO_free(*out)
extern def ASN1_STRING_to_UTF8(out: bytes, inn: Asn1StringPtr) -> int
# int ASN1_STRING_print(BIO *bp, const ASN1_STRING *v)
extern def ASN1_STRING_print(bp: BioPtr, v: Asn1StringPtr) -> int
# int ASN1_STRING_print_ex(BIO *out, const ASN1_STRING *str, unsigned long flags)
extern def ASN1_STRING_print_ex(out: BioPtr, str: Asn1StringPtr, flags: t.CUInt32T) -> int
# int ASN1_TIME_print(BIO *bp, const ASN1_TIME *tm)
extern def ASN1_TIME_print(bp: BioPtr, tm: Asn1TimePtr) -> int
# int ASN1_TIME_compare(const ASN1_TIME *a, const ASN1_TIME *b)
extern def ASN1_TIME_compare(a: Asn1TimePtr, b: Asn1TimePtr) -> int
# int ASN1_INTEGER_get(const ASN1_INTEGER *a)
extern def ASN1_INTEGER_get(a: Asn1IntegerPtr) -> t.CInt32T
# int ASN1_INTEGER_set(ASN1_INTEGER *a, long v)
extern def ASN1_INTEGER_set(a: Asn1IntegerPtr, v: t.CInt32T) -> int
# int i2a_ASN1_INTEGER(BIO *bp, const ASN1_INTEGER *a) → 十进制打印到 BIO
extern def i2a_ASN1_INTEGER(bp: BioPtr, a: Asn1IntegerPtr) -> int
# const char *ASN1_tag2str(int tag)
extern def ASN1_tag2str(tag: int) -> str