x509: Split :decode() method into two methods, :subject() and :extensions()

Fri, 05 Nov 2010 23:59:34 +0000

author
Matthew Wild <mwild1@gmail.com>
date
Fri, 05 Nov 2010 23:59:34 +0000
changeset 22
c4452dfd6ade
parent 21
c3755cb3d246
child 23
20528cb40c4a

x509: Split :decode() method into two methods, :subject() and :extensions()

src/x509.c file | annotate | diff | comparison | revisions
--- a/src/x509.c	Fri Nov 05 23:14:54 2010 +0000
+++ b/src/x509.c	Fri Nov 05 23:59:34 2010 +0000
@@ -71,23 +71,19 @@
         return 0;
 }
 
-int meth_decode(lua_State* L)
+int meth_subject(lua_State* L)
 {
   X509 *peer;
   X509_NAME *subject;
-  int i, j, n_entries;
+  int i, n_entries;
 
   peer = luasec_to_x509(L, 1);
 
   lua_newtable(L); /* ret */
 
   subject = X509_get_subject_name(peer);
-
   n_entries = X509_NAME_entry_count(subject);
 
-  lua_newtable(L); /* {} */
-  lua_pushvalue(L, -1);
-  lua_setfield(L, -3, "subject"); /* ret.subject = {} */
   for(i = 0; i <= n_entries; i++)
   {
     X509_NAME_ENTRY *entry;
@@ -96,26 +92,31 @@
     entry = X509_NAME_get_entry(subject, i);
     object = X509_NAME_ENTRY_get_object(entry);
 
-    luasec_push_asn1_objname(L, object, 1);
+    lua_newtable(L);
 
-    if(luasec_push_subtable(L, -2))
-    {
-      /* Get short/long name of the entry */
-      luasec_push_asn1_objname(L, object, 0);
-      lua_setfield(L, -2, "name");
-    }
+    luasec_push_asn1_objname(L, object, 1);
+    lua_setfield(L, -2, "oid");
+
+    luasec_push_asn1_objname(L, object, 0);
+    lua_setfield(L, -2, "name");
 
     luasec_push_asn1_string(L, X509_NAME_ENTRY_get_data(entry));
+    lua_setfield(L, -2, "value");
+
     lua_rawseti(L, -2, lua_objlen(L, -2)+1);
 
-    lua_pop(L, 1);
   }
+  return 1;
+}
 
-  lua_pop(L, 1); /* ret.subject */
+int meth_extensions(lua_State* L)
+{
+  X509 *peer;
+  int i, j;
 
-  lua_newtable(L); /* {} */
-  lua_pushvalue(L, -1);
-  lua_setfield(L, -3, "extensions"); /* ret.extensions = {} */
+  peer = luasec_to_x509(L, 1);
+
+  lua_newtable(L); /* ret */
 
   i = -1;
   while((i = X509_get_ext_by_NID(peer, NID_subject_alt_name, i)) != -1)
@@ -132,10 +133,10 @@
     if(values == NULL)
       break;
 
-    /* Push ret.extensions[oid] */
+    /* Push ret[oid] */
     luasec_push_asn1_objname(L, extension->object, 1);
     luasec_push_subtable(L, -2);
-    /* Set ret.extensions[oid].name = name */
+    /* Set ret[oid].name = name */
     luasec_push_asn1_objname(L, extension->object, 0);
     lua_setfield(L, -2, "name");
 
@@ -180,10 +181,9 @@
       }
     }
 
-    lua_pop(L, 1); /* array */
+    lua_pop(L, 1); /* ret[oid] */
     i++; /* Next extension */
   }
-  lua_pop(L, 1); /* ret.extensions */
   return 1;
 }
 
@@ -248,7 +248,8 @@
  * Certificate metamethods
  */
 static luaL_Reg meta[] = {
-  {"decode",        meth_decode},
+  {"subject",       meth_subject},
+  {"extensions",    meth_extensions},
   {"pem",           meth_pem},
   {"digest",        meth_digest},
   {NULL,            NULL}

mercurial