static int openssl_xattr_totable(lua_State*L, X509_ATTRIBUTE *attr, int utf8) { lua_newtable(L); openssl_push_asn1object(L, attr->object); lua_setfield(L, -2, "object"); AUXILIAR_SET(L, -1, "single", attr->single, boolean); if (attr->single) { openssl_push_asn1type(L, attr->value.single); lua_setfield(L, -2, "value"); } else { int i; lua_newtable(L); for (i = 0; i < sk_ASN1_TYPE_num(attr->value.set); i++) { ASN1_TYPE* t = sk_ASN1_TYPE_value(attr->value.set, i); openssl_push_asn1type(L, t); lua_rawseti(L, -2, i + 1); } lua_setfield(L, -2, "value"); } return 1; }
static int openssl_xattr_totable(lua_State*L, X509_ATTRIBUTE *attr) { #if OPENSSL_VERSION_NUMBER < 0x10100000L lua_newtable(L); openssl_push_asn1object(L, attr->object); lua_setfield(L, -2, "object"); AUXILIAR_SET(L, -1, "single", attr->single, boolean); if (attr->single) { openssl_push_asn1type(L, attr->value.single); lua_setfield(L, -2, "value"); } else { int i; lua_newtable(L); for (i = 0; i < sk_ASN1_TYPE_num(attr->value.set); i++) { ASN1_TYPE* t = sk_ASN1_TYPE_value(attr->value.set, i); openssl_push_asn1type(L, t); lua_rawseti(L, -2, i + 1); } lua_setfield(L, -2, "value"); } return 1; #else int i; lua_newtable(L); openssl_push_asn1object(L, X509_ATTRIBUTE_get0_object(attr)); lua_setfield(L, -2, "object"); lua_newtable(L); for (i = 0; i < X509_ATTRIBUTE_count(attr); i++) { ASN1_TYPE* t = X509_ATTRIBUTE_get0_type(attr, i); openssl_push_asn1type(L, t); lua_rawseti(L, -2, i + 1); } lua_setfield(L, -2, "set"); return 1; #endif }
int openssl_push_x509_algor(lua_State*L, const X509_ALGOR* alg) { lua_newtable(L); openssl_push_asn1object(L, alg->algorithm); lua_setfield(L, -2, "algorithm"); if (alg->parameter) { openssl_push_asn1type(L, alg->parameter); lua_setfield(L, -2, "parameter"); } return 1; };
static int openssl_xattr_type(lua_State*L) { X509_ATTRIBUTE* attr = CHECK_OBJECT(1, X509_ATTRIBUTE, "openssl.x509_attribute"); int loc = luaL_optint(L, 2, 0); ASN1_TYPE *type = X509_ATTRIBUTE_get0_type(attr, loc); if (type) { openssl_push_asn1type(L, type);; return 1; } else lua_pushnil(L); return 1; }
int openssl_push_general_name(lua_State*L, const GENERAL_NAME* general_name) { lua_newtable(L); switch (general_name->type) { case GEN_OTHERNAME: { OTHERNAME *otherName = general_name->d.otherName; lua_newtable(L); openssl_push_asn1object(L, otherName->type_id); PUSH_ASN1_STRING(L, otherName->value->value.asn1_string); lua_settable(L, -3); lua_setfield(L, -2, "otherName"); lua_pushstring(L, "otherName"); lua_setfield(L, -2, "type"); break; } case GEN_EMAIL: PUSH_ASN1_STRING(L, general_name->d.rfc822Name); lua_setfield(L, -2, "rfc822Name"); lua_pushstring(L, "rfc822Name"); lua_setfield(L, -2, "type"); break; case GEN_DNS: PUSH_ASN1_STRING(L, general_name->d.dNSName); lua_setfield(L, -2, "dNSName"); lua_pushstring(L, "dNSName"); lua_setfield(L, -2, "type"); break; case GEN_X400: openssl_push_asn1type(L, general_name->d.x400Address); lua_setfield(L, -2, "x400Address"); lua_pushstring(L, "x400Address"); lua_setfield(L, -2, "type"); break; case GEN_DIRNAME: { X509_NAME* xn = general_name->d.directoryName; openssl_push_xname_asobject(L, xn); lua_setfield(L, -2, "directoryName"); lua_pushstring(L, "directoryName"); lua_setfield(L, -2, "type"); } break; case GEN_URI: PUSH_ASN1_STRING(L, general_name->d.uniformResourceIdentifier); lua_setfield(L, -2, "uniformResourceIdentifier"); lua_pushstring(L, "uniformResourceIdentifier"); lua_setfield(L, -2, "type"); break; case GEN_IPADD: lua_newtable(L); PUSH_ASN1_OCTET_STRING(L, general_name->d.iPAddress); lua_setfield(L, -2, "iPAddress"); lua_pushstring(L, "iPAddress"); lua_setfield(L, -2, "type"); break; case GEN_EDIPARTY: lua_newtable(L); PUSH_ASN1_STRING(L, general_name->d.ediPartyName->nameAssigner); lua_setfield(L, -2, "nameAssigner"); PUSH_ASN1_STRING(L, general_name->d.ediPartyName->partyName); lua_setfield(L, -2, "partyName"); lua_setfield(L, -2, "ediPartyName"); lua_pushstring(L, "ediPartyName"); lua_setfield(L, -2, "type"); break; case GEN_RID: lua_newtable(L); openssl_push_asn1object(L, general_name->d.registeredID); lua_setfield(L, -2, "registeredID"); lua_pushstring(L, "registeredID"); lua_setfield(L, -2, "type"); break; default: lua_pushstring(L, "unsupport"); lua_setfield(L, -2, "type"); } return 1; };
int openssl_xext_totable(lua_State* L, X509_EXTENSION *x, int utf8) { lua_newtable(L); openssl_push_asn1object(L, x->object); lua_setfield(L, -2, "object"); PUSH_ASN1_OCTET_STRING(L, x->value); lua_setfield(L,-2, "value"); AUXILIAR_SET(L, -1, "critical", x->critical, boolean); switch (x->object->nid) { case NID_subject_alt_name: { int i; int n_general_names; STACK_OF(GENERAL_NAME) *values = X509V3_EXT_d2i(x); if (values == NULL) break; /* Push ret[oid] */ openssl_push_asn1object(L, x->object); lua_newtable(L); n_general_names = sk_GENERAL_NAME_num(values); for (i = 0; i < n_general_names; i++) { GENERAL_NAME *general_name = sk_GENERAL_NAME_value(values, i); switch (general_name->type) { case GEN_OTHERNAME: { OTHERNAME *otherName = general_name->d.otherName; lua_newtable(L); openssl_push_asn1object(L, otherName->type_id); PUSH_ASN1_STRING(L, otherName->value->value.asn1_string, utf8); lua_settable(L, -3); lua_setfield(L, -2, "otherName"); lua_pushstring(L, "otherName"); lua_rawseti(L, -2, i+1); break; } case GEN_EMAIL: lua_newtable(L); PUSH_ASN1_STRING(L, general_name->d.rfc822Name, utf8); lua_pushstring(L, "rfc822Name"); lua_settable(L, -3); lua_pushstring(L, "rfc822Name"); lua_rawseti(L, -2, i+1); break; case GEN_DNS: lua_newtable(L); PUSH_ASN1_STRING(L, general_name->d.dNSName, utf8); lua_setfield(L, -2, "dNSName"); lua_pushstring(L, "dNSName"); lua_rawseti(L, -2, i+1); break; case GEN_X400: lua_newtable(L); openssl_push_asn1type(L, general_name->d.x400Address); lua_setfield(L, -2, "x400Address"); lua_pushstring(L, "x400Address"); lua_rawseti(L, -2, i+1); break; case GEN_DIRNAME: { X509_NAME* xn = general_name->d.directoryName; lua_newtable(L); PUSH_OBJECT(X509_NAME_dup(xn), "openssl.x509_name"); lua_setfield(L, -2, "directoryName"); lua_pushstring(L, "directoryName"); lua_rawseti(L, -2, i+1); } break; case GEN_URI: lua_newtable(L); PUSH_ASN1_STRING(L, general_name->d.uniformResourceIdentifier, utf8); lua_setfield(L, -2, "uniformResourceIdentifier"); lua_pushstring(L, "uniformResourceIdentifier"); lua_rawseti(L, -2, i+1); break; case GEN_IPADD: lua_newtable(L); PUSH_ASN1_OCTET_STRING(L, general_name->d.iPAddress); lua_setfield(L, -2, "iPAddress"); lua_pushstring(L, "iPAddress"); lua_rawseti(L, -2, i+1); break; case GEN_EDIPARTY: lua_newtable(L); lua_newtable(L); PUSH_ASN1_STRING(L, general_name->d.ediPartyName->nameAssigner,utf8); lua_setfield(L, -2, "nameAssigner"); PUSH_ASN1_STRING(L, general_name->d.ediPartyName->partyName,utf8); lua_setfield(L, -2, "partyName"); lua_setfield(L, -2, "ediPartyName"); lua_pushstring(L, "ediPartyName"); lua_rawseti(L, -2, i+1); break; case GEN_RID: lua_newtable(L); openssl_push_asn1object(L, general_name->d.registeredID); lua_setfield(L, -2, "registeredID"); lua_pushstring(L, "registeredID"); lua_rawseti(L, -2, i+1); break; } } lua_settable(L, -3); } default: break; } return 1; };