Skip to content
Snippets Groups Projects
Commit 2d48ce8c authored by deuce's avatar deuce
Browse files

Deal with having more properties than a tinyid can hold by exposing the

attribute_get/set[_string|_time]? interface.  This is way easier than a
bunch of tiny getter/setter functions, and most of these certificate
extensions aren't actually going to be used anyway.

Also, surface the attribte cursor constants for more advanced certificate
parsing/creation.
parent dcd58ef1
No related branches found
No related tags found
No related merge requests found
......@@ -165,6 +165,298 @@ js_export(JSContext *cx, uintN argc, jsval *arglist)
return JS_TRUE;
}
static JSBool
js_get_attribute(JSContext *cx, uintN argc, jsval *arglist)
{
struct js_cryptcert_private_data* p;
JSObject *obj=JS_THIS_OBJECT(cx, arglist);
jsrefcount rc;
int status;
int attr;
int val;
jsval *argv=JS_ARGV(cx, arglist);
if(argc != 1) {
JS_ReportError(cx, "Incorrect number of arguments. Got %d, expected 1.", argc);
return JS_FALSE;
}
if (!JS_ValueToInt32(cx,argv[0],&attr)) {
JS_ReportError(cx, "Invalid attribute.");
return JS_FALSE;
}
if ((p=(struct js_cryptcert_private_data *)JS_GetPrivate(cx,obj))==NULL) {
JS_ReportError(cx, getprivate_failure, WHERE);
return JS_FALSE;
}
rc = JS_SUSPENDREQUEST(cx);
status = cryptGetAttribute(p->cert, attr, &val);
JS_RESUMEREQUEST(cx, rc);
if (cryptStatusError(status)) {
js_cryptcert_error(cx, p->cert, status);
return JS_FALSE;
}
JS_SET_RVAL(cx, arglist, INT_TO_JSVAL(val));
return JS_TRUE;
}
static JSBool
js_get_attribute_string(JSContext *cx, uintN argc, jsval *arglist)
{
struct js_cryptcert_private_data* p;
JSObject *obj=JS_THIS_OBJECT(cx, arglist);
jsrefcount rc;
int status;
int attr;
char *val;
int len;
JSString *js_str;
jsval *argv=JS_ARGV(cx, arglist);
if(argc != 1) {
JS_ReportError(cx, "Incorrect number of arguments. Got %d, expected 1.", argc);
return JS_FALSE;
}
if (!JS_ValueToInt32(cx,argv[0],&attr)) {
JS_ReportError(cx, "Invalid attribute.");
return JS_FALSE;
}
if ((p=(struct js_cryptcert_private_data *)JS_GetPrivate(cx,obj))==NULL) {
JS_ReportError(cx, getprivate_failure, WHERE);
return JS_FALSE;
}
rc = JS_SUSPENDREQUEST(cx);
status = cryptGetAttributeString(p->cert, attr, NULL, &len);
if (cryptStatusError(status)) {
JS_RESUMEREQUEST(cx, rc);
js_cryptcert_error(cx, p->cert, status);
return JS_FALSE; // Do not return JS_FALSE here, or jsdocs build will break.
}
if ((val = (char *)malloc(len)) == NULL) {
JS_RESUMEREQUEST(cx, rc);
JS_ReportError(cx, "malloc(%d) failure", len);
return JS_FALSE;
}
status = cryptGetAttributeString(p->cert, attr, val, &len);
if (cryptStatusError(status)) {
JS_RESUMEREQUEST(cx, rc);
js_cryptcert_error(cx, p->cert, status);
return JS_FALSE;
}
JS_RESUMEREQUEST(cx, rc);
if((js_str=JS_NewStringCopyN(cx, val, len))==NULL) {
free(val);
return(JS_FALSE);
}
free(val);
JS_SET_RVAL(cx, arglist, STRING_TO_JSVAL(js_str));
return JS_TRUE;
}
static JSBool
js_get_attribute_time(JSContext *cx, uintN argc, jsval *arglist)
{
struct js_cryptcert_private_data* p;
JSObject *obj=JS_THIS_OBJECT(cx, arglist);
jsrefcount rc;
int status;
int attr;
time_t val;
int len;
JSObject *dobj;
jsval *argv=JS_ARGV(cx, arglist);
jsdouble msec;
if(argc != 1) {
JS_ReportError(cx, "Incorrect number of arguments. Got %d, expected 1.", argc);
return JS_FALSE;
}
if (!JS_ValueToInt32(cx,argv[0],&attr)) {
JS_ReportError(cx, "Invalid attribute.");
return JS_FALSE;
}
if ((p=(struct js_cryptcert_private_data *)JS_GetPrivate(cx,obj))==NULL) {
JS_ReportError(cx, getprivate_failure, WHERE);
return JS_FALSE;
}
rc = JS_SUSPENDREQUEST(cx);
status = cryptGetAttributeString(p->cert, attr, NULL, &len);
if (cryptStatusError(status)) {
JS_RESUMEREQUEST(cx, rc);
js_cryptcert_error(cx, p->cert, status);
return JS_FALSE;
}
if (len != sizeof(val)) {
JS_RESUMEREQUEST(cx, rc);
JS_ReportError(cx, "Time size %d not sizeof(time_t) (%d)\n", len, sizeof(val));
return JS_FALSE;
}
status = cryptGetAttributeString(p->cert, attr, &val, &len);
if (cryptStatusError(status)) {
JS_RESUMEREQUEST(cx, rc);
js_cryptcert_error(cx, p->cert, status);
return JS_FALSE;
}
msec = val;
msec *= 1000;
dobj = JS_NewDateObjectMsec(cx, msec);
if(dobj==NULL)
return(JS_FALSE);
JS_SET_RVAL(cx, arglist, OBJECT_TO_JSVAL(dobj));
return JS_TRUE;
}
static JSBool
js_set_attribute(JSContext *cx, uintN argc, jsval *arglist)
{
struct js_cryptcert_private_data* p;
JSObject *obj=JS_THIS_OBJECT(cx, arglist);
jsrefcount rc;
int status;
int attr;
int val;
jsval *argv=JS_ARGV(cx, arglist);
if(argc != 2) {
JS_ReportError(cx, "Incorrect number of arguments. Got %d, expected 2.", argc);
return JS_FALSE;
}
if (!JS_ValueToInt32(cx,argv[0],&attr)) {
JS_ReportError(cx, "Invalid attribute.");
return JS_FALSE;
}
if (!JS_ValueToInt32(cx,argv[1],&val)) {
JS_ReportError(cx, "Invalid value.");
return JS_FALSE;
}
if ((p=(struct js_cryptcert_private_data *)JS_GetPrivate(cx,obj))==NULL) {
JS_ReportError(cx, getprivate_failure, WHERE);
return JS_FALSE;
}
rc = JS_SUSPENDREQUEST(cx);
status = cryptSetAttribute(p->cert, attr, val);
JS_RESUMEREQUEST(cx, rc);
if (cryptStatusError(status)) {
js_cryptcert_error(cx, p->cert, status);
return JS_FALSE;
}
return JS_TRUE;
}
static JSBool
js_set_attribute_string(JSContext *cx, uintN argc, jsval *arglist)
{
struct js_cryptcert_private_data* p;
JSObject *obj=JS_THIS_OBJECT(cx, arglist);
jsrefcount rc;
int status;
int attr;
char *val;
size_t len;
jsval *argv=JS_ARGV(cx, arglist);
if(argc != 2) {
JS_ReportError(cx, "Incorrect number of arguments. Got %d, expected 2.", argc);
return JS_FALSE;
}
if (!JS_ValueToInt32(cx,argv[0],&attr)) {
JS_ReportError(cx, "Invalid attribute.");
return JS_FALSE;
}
if ((p=(struct js_cryptcert_private_data *)JS_GetPrivate(cx,obj))==NULL) {
JS_ReportError(cx, getprivate_failure, WHERE);
return JS_FALSE;
}
JSVALUE_TO_MSTRING(cx, argv[1], val, &len);
HANDLE_PENDING(cx, val);
if (val == NULL)
return JS_FALSE;
rc = JS_SUSPENDREQUEST(cx);
status = cryptSetAttributeString(p->cert, attr, val, len);
free(val);
JS_RESUMEREQUEST(cx, rc);
if (cryptStatusError(status)) {
js_cryptcert_error(cx, p->cert, status);
return JS_FALSE;
}
return JS_TRUE;
}
static JSBool
js_set_attribute_time(JSContext *cx, uintN argc, jsval *arglist)
{
struct js_cryptcert_private_data* p;
JSObject *obj=JS_THIS_OBJECT(cx, arglist);
jsrefcount rc;
int status;
int attr;
time_t val;
jsdouble sec;
jsval *argv=JS_ARGV(cx, arglist);
if(argc != 2) {
JS_ReportError(cx, "Incorrect number of arguments. Got %d, expected 2.", argc);
return JS_FALSE;
}
if (!JS_ValueToInt32(cx,argv[0],&attr)) {
JS_ReportError(cx, "Invalid attribute.");
return JS_FALSE;
}
if (JSVAL_IS_OBJECT(argv[1])) {
if (!JS_ObjectIsDate(cx, JSVAL_TO_OBJECT(argv[1]))) {
JS_ReportError(cx, "Invalid Date");
return JS_FALSE;
}
if (!JS_ValueToNumber(cx, argv[1], &sec)) {
JS_ReportError(cx, "Invalid Date");
return JS_FALSE;
}
sec /= 1000;
}
else {
if (JSVAL_IS_NUMBER(argv[1])) {
if (!JS_ValueToNumber(cx, argv[1], &sec)) {
JS_ReportError(cx, "Invalid Date");
return JS_FALSE;
}
}
else {
JS_ReportError(cx, "Invalid Date");
return JS_FALSE;
}
}
val = sec;
if ((p=(struct js_cryptcert_private_data *)JS_GetPrivate(cx,obj))==NULL) {
JS_ReportError(cx, getprivate_failure, WHERE);
return JS_FALSE;
}
rc = JS_SUSPENDREQUEST(cx);
status = cryptSetAttributeString(p->cert, attr, &val, sizeof(val));
JS_RESUMEREQUEST(cx, rc);
if (cryptStatusError(status)) {
js_cryptcert_error(cx, p->cert, status);
return JS_FALSE;
}
return JS_TRUE;
}
static JSBool
js_sign(JSContext *cx, uintN argc, jsval *arglist)
{
......@@ -2603,6 +2895,30 @@ static jsSyncMethodSpec js_cryptcert_functions[] = {
,JSDOCSTR("Exports the certificate in the format chosen from CryptCert.CERTFORMAT.")
,316
},
{"get_attribute", js_get_attribute, 0, JSTYPE_VOID, "attr, value"
,JSDOCSTR("Sets the specified attribute to the specified value")
,316
},
{"get_attribute_string", js_get_attribute_string, 0, JSTYPE_VOID, "attr, value"
,JSDOCSTR("Sets the specified attribute to the specified value")
,316
},
{"get_attribute_time", js_get_attribute_time, 0, JSTYPE_VOID, "attr, value"
,JSDOCSTR("Sets the specified attribute to the specified value")
,316
},
{"set_attribute", js_set_attribute, 0, JSTYPE_VOID, "attr, value"
,JSDOCSTR("Sets the specified attribute to the specified value")
,316
},
{"set_attribute_string", js_set_attribute_string, 0, JSTYPE_VOID, "attr, value"
,JSDOCSTR("Sets the specified attribute to the specified value")
,316
},
{"set_attribute_time", js_set_attribute_time, 0, JSTYPE_VOID, "attr, value"
,JSDOCSTR("Sets the specified attribute to the specified value")
,316
},
{"sign", js_sign, 0, JSTYPE_VOID, "key"
,JSDOCSTR("Signs the certificate with the specified CryptContext")
,316
......@@ -2751,6 +3067,8 @@ JSObject* DLLCALL js_CreateCryptCertClass(JSContext* cx, JSObject* parent)
JSObject* constructor;
JSObject* type;
JSObject* format;
JSObject* attr;
JSObject* cursor;
jsval val;
cksobj = JS_InitClass(cx, parent, NULL
......@@ -2763,6 +3081,18 @@ JSObject* DLLCALL js_CreateCryptCertClass(JSContext* cx, JSObject* parent)
if(JS_GetProperty(cx, parent, js_cryptcert_class.name, &val) && !JSVAL_NULL_OR_VOID(val)) {
JS_ValueToObject(cx,val,&constructor);
cursor = JS_DefineObject(cx, constructor, "CURSOR", NULL, NULL, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
if(cursor != NULL) {
JS_DefineProperty(cx, cursor, "FIRST", INT_TO_JSVAL(CRYPT_CURSOR_FIRST), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, cursor, "PREVIOUS", INT_TO_JSVAL(CRYPT_CURSOR_PREVIOUS), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, cursor, "NEXT", INT_TO_JSVAL(CRYPT_CURSOR_NEXT), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, cursor, "LAST", INT_TO_JSVAL(CRYPT_CURSOR_LAST), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DeepFreezeObject(cx, cursor);
}
type = JS_DefineObject(cx, constructor, "TYPE", NULL, NULL, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
if(type != NULL) {
JS_DefineProperty(cx, type, "NONE", INT_TO_JSVAL(CRYPT_CERTTYPE_NONE), NULL, NULL
......@@ -2813,6 +3143,650 @@ JSObject* DLLCALL js_CreateCryptCertClass(JSContext* cx, JSObject* parent)
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DeepFreezeObject(cx, format);
}
attr = JS_DefineObject(cx, constructor, "ATTR", NULL, NULL, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
if(attr != NULL) {
JS_DefineProperty(cx, attr, "SELFSIGNED", INT_TO_JSVAL(CRYPT_CERTINFO_SELFSIGNED), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "IMMUTABLE", INT_TO_JSVAL(CRYPT_CERTINFO_IMMUTABLE), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "XYZZY", INT_TO_JSVAL(CRYPT_CERTINFO_XYZZY), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CERTTYPE", INT_TO_JSVAL(CRYPT_CERTINFO_CERTTYPE), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "FINGERPRINT_SHA1", INT_TO_JSVAL(CRYPT_CERTINFO_FINGERPRINT_SHA1), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "FINGERPRINT_SHA2", INT_TO_JSVAL(CRYPT_CERTINFO_FINGERPRINT_SHA2), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "FINGERPRINT_SHAng", INT_TO_JSVAL(CRYPT_CERTINFO_FINGERPRINT_SHAng), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CURRENT_CERTIFICATE", INT_TO_JSVAL(CRYPT_CERTINFO_CURRENT_CERTIFICATE), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "TRUSTED_USAGE", INT_TO_JSVAL(CRYPT_CERTINFO_TRUSTED_USAGE), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "TRUSTED_IMPLICIT", INT_TO_JSVAL(CRYPT_CERTINFO_TRUSTED_IMPLICIT), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SIGNATURELEVEL", INT_TO_JSVAL(CRYPT_CERTINFO_SIGNATURELEVEL), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "VERSION", INT_TO_JSVAL(CRYPT_CERTINFO_VERSION), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SERIALNUMBER", INT_TO_JSVAL(CRYPT_CERTINFO_SERIALNUMBER), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SUBJECTPUBLICKEYINFO", INT_TO_JSVAL(CRYPT_CERTINFO_SUBJECTPUBLICKEYINFO), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CERTIFICATE", INT_TO_JSVAL(CRYPT_CERTINFO_CERTIFICATE), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CACERTIFICATE", INT_TO_JSVAL(CRYPT_CERTINFO_CACERTIFICATE), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "ISSUERNAME", INT_TO_JSVAL(CRYPT_CERTINFO_ISSUERNAME), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "VALIDFROM", INT_TO_JSVAL(CRYPT_CERTINFO_VALIDFROM), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "VALIDTO", INT_TO_JSVAL(CRYPT_CERTINFO_VALIDTO), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SUBJECTNAME", INT_TO_JSVAL(CRYPT_CERTINFO_SUBJECTNAME), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "ISSUERUNIQUEID", INT_TO_JSVAL(CRYPT_CERTINFO_ISSUERUNIQUEID), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SUBJECTUNIQUEID", INT_TO_JSVAL(CRYPT_CERTINFO_SUBJECTUNIQUEID), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CERTREQUEST", INT_TO_JSVAL(CRYPT_CERTINFO_CERTREQUEST), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "THISUPDATE", INT_TO_JSVAL(CRYPT_CERTINFO_THISUPDATE), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "NEXTUPDATE", INT_TO_JSVAL(CRYPT_CERTINFO_NEXTUPDATE), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "REVOCATIONDATE", INT_TO_JSVAL(CRYPT_CERTINFO_REVOCATIONDATE), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "REVOCATIONSTATUS", INT_TO_JSVAL(CRYPT_CERTINFO_REVOCATIONSTATUS), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CERTSTATUS", INT_TO_JSVAL(CRYPT_CERTINFO_CERTSTATUS), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "DN", INT_TO_JSVAL(CRYPT_CERTINFO_DN), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "PKIUSER_ID", INT_TO_JSVAL(CRYPT_CERTINFO_PKIUSER_ID), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "PKIUSER_ISSUEPASSWORD", INT_TO_JSVAL(CRYPT_CERTINFO_PKIUSER_ISSUEPASSWORD), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "PKIUSER_REVPASSWORD", INT_TO_JSVAL(CRYPT_CERTINFO_PKIUSER_REVPASSWORD), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "PKIUSER_RA", INT_TO_JSVAL(CRYPT_CERTINFO_PKIUSER_RA), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "COUNTRYNAME", INT_TO_JSVAL(CRYPT_CERTINFO_COUNTRYNAME), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "STATEORPROVINCENAME", INT_TO_JSVAL(CRYPT_CERTINFO_STATEORPROVINCENAME), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "LOCALITYNAME", INT_TO_JSVAL(CRYPT_CERTINFO_LOCALITYNAME), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "ORGANIZATIONNAME", INT_TO_JSVAL(CRYPT_CERTINFO_ORGANIZATIONNAME), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "ORGANIZATIONALUNITNAME", INT_TO_JSVAL(CRYPT_CERTINFO_ORGANIZATIONALUNITNAME), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "COMMONNAME", INT_TO_JSVAL(CRYPT_CERTINFO_COMMONNAME), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "OTHERNAME_TYPEID", INT_TO_JSVAL(CRYPT_CERTINFO_OTHERNAME_TYPEID), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "OTHERNAME_VALUE", INT_TO_JSVAL(CRYPT_CERTINFO_OTHERNAME_VALUE), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "RFC822NAME", INT_TO_JSVAL(CRYPT_CERTINFO_RFC822NAME), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "DNSNAME", INT_TO_JSVAL(CRYPT_CERTINFO_DNSNAME), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "DIRECTORYNAME", INT_TO_JSVAL(CRYPT_CERTINFO_DIRECTORYNAME), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "EDIPARTYNAME_NAMEASSIGNER", INT_TO_JSVAL(CRYPT_CERTINFO_EDIPARTYNAME_NAMEASSIGNER), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "EDIPARTYNAME_PARTYNAME", INT_TO_JSVAL(CRYPT_CERTINFO_EDIPARTYNAME_PARTYNAME), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "UNIFORMRESOURCEIDENTIFIER", INT_TO_JSVAL(CRYPT_CERTINFO_UNIFORMRESOURCEIDENTIFIER), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "IPADDRESS", INT_TO_JSVAL(CRYPT_CERTINFO_IPADDRESS), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "REGISTEREDID", INT_TO_JSVAL(CRYPT_CERTINFO_REGISTEREDID), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CHALLENGEPASSWORD", INT_TO_JSVAL(CRYPT_CERTINFO_CHALLENGEPASSWORD), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CRLEXTREASON", INT_TO_JSVAL(CRYPT_CERTINFO_CRLEXTREASON), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "KEYFEATURES", INT_TO_JSVAL(CRYPT_CERTINFO_KEYFEATURES), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "AUTHORITYINFOACCESS", INT_TO_JSVAL(CRYPT_CERTINFO_AUTHORITYINFOACCESS), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "AUTHORITYINFO_RTCS", INT_TO_JSVAL(CRYPT_CERTINFO_AUTHORITYINFO_RTCS), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "AUTHORITYINFO_OCSP", INT_TO_JSVAL(CRYPT_CERTINFO_AUTHORITYINFO_OCSP), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "AUTHORITYINFO_CAISSUERS", INT_TO_JSVAL(CRYPT_CERTINFO_AUTHORITYINFO_CAISSUERS), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "AUTHORITYINFO_CERTSTORE", INT_TO_JSVAL(CRYPT_CERTINFO_AUTHORITYINFO_CERTSTORE), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "AUTHORITYINFO_CRLS", INT_TO_JSVAL(CRYPT_CERTINFO_AUTHORITYINFO_CRLS), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "BIOMETRICINFO", INT_TO_JSVAL(CRYPT_CERTINFO_BIOMETRICINFO), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "BIOMETRICINFO_TYPE", INT_TO_JSVAL(CRYPT_CERTINFO_BIOMETRICINFO_TYPE), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "BIOMETRICINFO_HASHALGO", INT_TO_JSVAL(CRYPT_CERTINFO_BIOMETRICINFO_HASHALGO), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "BIOMETRICINFO_HASH", INT_TO_JSVAL(CRYPT_CERTINFO_BIOMETRICINFO_HASH), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "BIOMETRICINFO_URL", INT_TO_JSVAL(CRYPT_CERTINFO_BIOMETRICINFO_URL), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "QCSTATEMENT", INT_TO_JSVAL(CRYPT_CERTINFO_QCSTATEMENT), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "QCSTATEMENT_SEMANTICS", INT_TO_JSVAL(CRYPT_CERTINFO_QCSTATEMENT_SEMANTICS), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "QCSTATEMENT_REGISTRATIONAUTHORITY", INT_TO_JSVAL(CRYPT_CERTINFO_QCSTATEMENT_REGISTRATIONAUTHORITY), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "IPADDRESSBLOCKS", INT_TO_JSVAL(CRYPT_CERTINFO_IPADDRESSBLOCKS), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "IPADDRESSBLOCKS_ADDRESSFAMILY", INT_TO_JSVAL(CRYPT_CERTINFO_IPADDRESSBLOCKS_ADDRESSFAMILY), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "IPADDRESSBLOCKS_PREFIX", INT_TO_JSVAL(CRYPT_CERTINFO_IPADDRESSBLOCKS_PREFIX), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "IPADDRESSBLOCKS_MIN", INT_TO_JSVAL(CRYPT_CERTINFO_IPADDRESSBLOCKS_MIN), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "IPADDRESSBLOCKS_MAX", INT_TO_JSVAL(CRYPT_CERTINFO_IPADDRESSBLOCKS_MAX), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "AUTONOMOUSSYSIDS", INT_TO_JSVAL(CRYPT_CERTINFO_AUTONOMOUSSYSIDS), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "AUTONOMOUSSYSIDS_ASNUM_ID", INT_TO_JSVAL(CRYPT_CERTINFO_AUTONOMOUSSYSIDS_ASNUM_ID), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "AUTONOMOUSSYSIDS_ASNUM_MIN", INT_TO_JSVAL(CRYPT_CERTINFO_AUTONOMOUSSYSIDS_ASNUM_MIN), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "AUTONOMOUSSYSIDS_ASNUM_MAX", INT_TO_JSVAL(CRYPT_CERTINFO_AUTONOMOUSSYSIDS_ASNUM_MAX), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "OCSP_NONCE", INT_TO_JSVAL(CRYPT_CERTINFO_OCSP_NONCE), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "OCSP_RESPONSE", INT_TO_JSVAL(CRYPT_CERTINFO_OCSP_RESPONSE), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "OCSP_RESPONSE_OCSP", INT_TO_JSVAL(CRYPT_CERTINFO_OCSP_RESPONSE_OCSP), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "OCSP_NOCHECK", INT_TO_JSVAL(CRYPT_CERTINFO_OCSP_NOCHECK), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "OCSP_ARCHIVECUTOFF", INT_TO_JSVAL(CRYPT_CERTINFO_OCSP_ARCHIVECUTOFF), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SUBJECTINFOACCESS", INT_TO_JSVAL(CRYPT_CERTINFO_SUBJECTINFOACCESS), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SUBJECTINFO_TIMESTAMPING", INT_TO_JSVAL(CRYPT_CERTINFO_SUBJECTINFO_TIMESTAMPING), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SUBJECTINFO_CAREPOSITORY", INT_TO_JSVAL(CRYPT_CERTINFO_SUBJECTINFO_CAREPOSITORY), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SUBJECTINFO_SIGNEDOBJECTREPOSITORY", INT_TO_JSVAL(CRYPT_CERTINFO_SUBJECTINFO_SIGNEDOBJECTREPOSITORY), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SUBJECTINFO_RPKIMANIFEST", INT_TO_JSVAL(CRYPT_CERTINFO_SUBJECTINFO_RPKIMANIFEST), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SUBJECTINFO_SIGNEDOBJECT", INT_TO_JSVAL(CRYPT_CERTINFO_SUBJECTINFO_SIGNEDOBJECT), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SIGG_DATEOFCERTGEN", INT_TO_JSVAL(CRYPT_CERTINFO_SIGG_DATEOFCERTGEN), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SIGG_PROCURATION", INT_TO_JSVAL(CRYPT_CERTINFO_SIGG_PROCURATION), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SIGG_PROCURE_COUNTRY", INT_TO_JSVAL(CRYPT_CERTINFO_SIGG_PROCURE_COUNTRY), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SIGG_PROCURE_TYPEOFSUBSTITUTION", INT_TO_JSVAL(CRYPT_CERTINFO_SIGG_PROCURE_TYPEOFSUBSTITUTION), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SIGG_PROCURE_SIGNINGFOR", INT_TO_JSVAL(CRYPT_CERTINFO_SIGG_PROCURE_SIGNINGFOR), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SIGG_ADMISSIONS", INT_TO_JSVAL(CRYPT_CERTINFO_SIGG_ADMISSIONS), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SIGG_ADMISSIONS_AUTHORITY", INT_TO_JSVAL(CRYPT_CERTINFO_SIGG_ADMISSIONS_AUTHORITY), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SIGG_ADMISSIONS_NAMINGAUTHID", INT_TO_JSVAL(CRYPT_CERTINFO_SIGG_ADMISSIONS_NAMINGAUTHID), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SIGG_ADMISSIONS_NAMINGAUTHURL", INT_TO_JSVAL(CRYPT_CERTINFO_SIGG_ADMISSIONS_NAMINGAUTHURL), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SIGG_ADMISSIONS_NAMINGAUTHTEXT", INT_TO_JSVAL(CRYPT_CERTINFO_SIGG_ADMISSIONS_NAMINGAUTHTEXT), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SIGG_ADMISSIONS_PROFESSIONITEM", INT_TO_JSVAL(CRYPT_CERTINFO_SIGG_ADMISSIONS_PROFESSIONITEM), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SIGG_ADMISSIONS_PROFESSIONOID", INT_TO_JSVAL(CRYPT_CERTINFO_SIGG_ADMISSIONS_PROFESSIONOID), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SIGG_ADMISSIONS_REGISTRATIONNUMBER", INT_TO_JSVAL(CRYPT_CERTINFO_SIGG_ADMISSIONS_REGISTRATIONNUMBER), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SIGG_MONETARYLIMIT", INT_TO_JSVAL(CRYPT_CERTINFO_SIGG_MONETARYLIMIT), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SIGG_MONETARY_CURRENCY", INT_TO_JSVAL(CRYPT_CERTINFO_SIGG_MONETARY_CURRENCY), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SIGG_MONETARY_AMOUNT", INT_TO_JSVAL(CRYPT_CERTINFO_SIGG_MONETARY_AMOUNT), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SIGG_MONETARY_EXPONENT", INT_TO_JSVAL(CRYPT_CERTINFO_SIGG_MONETARY_EXPONENT), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SIGG_DECLARATIONOFMAJORITY", INT_TO_JSVAL(CRYPT_CERTINFO_SIGG_DECLARATIONOFMAJORITY), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SIGG_DECLARATIONOFMAJORITY_COUNTRY", INT_TO_JSVAL(CRYPT_CERTINFO_SIGG_DECLARATIONOFMAJORITY_COUNTRY), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SIGG_RESTRICTION", INT_TO_JSVAL(CRYPT_CERTINFO_SIGG_RESTRICTION), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SIGG_CERTHASH", INT_TO_JSVAL(CRYPT_CERTINFO_SIGG_CERTHASH), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SIGG_ADDITIONALINFORMATION", INT_TO_JSVAL(CRYPT_CERTINFO_SIGG_ADDITIONALINFORMATION), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "STRONGEXTRANET", INT_TO_JSVAL(CRYPT_CERTINFO_STRONGEXTRANET), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "STRONGEXTRANET_ZONE", INT_TO_JSVAL(CRYPT_CERTINFO_STRONGEXTRANET_ZONE), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "STRONGEXTRANET_ID", INT_TO_JSVAL(CRYPT_CERTINFO_STRONGEXTRANET_ID), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SUBJECTDIRECTORYATTRIBUTES", INT_TO_JSVAL(CRYPT_CERTINFO_SUBJECTDIRECTORYATTRIBUTES), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SUBJECTDIR_TYPE", INT_TO_JSVAL(CRYPT_CERTINFO_SUBJECTDIR_TYPE), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SUBJECTDIR_VALUES", INT_TO_JSVAL(CRYPT_CERTINFO_SUBJECTDIR_VALUES), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SUBJECTKEYIDENTIFIER", INT_TO_JSVAL(CRYPT_CERTINFO_SUBJECTKEYIDENTIFIER), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "KEYUSAGE", INT_TO_JSVAL(CRYPT_CERTINFO_KEYUSAGE), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "PRIVATEKEYUSAGEPERIOD", INT_TO_JSVAL(CRYPT_CERTINFO_PRIVATEKEYUSAGEPERIOD), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "PRIVATEKEY_NOTBEFORE", INT_TO_JSVAL(CRYPT_CERTINFO_PRIVATEKEY_NOTBEFORE), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "PRIVATEKEY_NOTAFTER", INT_TO_JSVAL(CRYPT_CERTINFO_PRIVATEKEY_NOTAFTER), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SUBJECTALTNAME", INT_TO_JSVAL(CRYPT_CERTINFO_SUBJECTALTNAME), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "ISSUERALTNAME", INT_TO_JSVAL(CRYPT_CERTINFO_ISSUERALTNAME), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "BASICCONSTRAINTS", INT_TO_JSVAL(CRYPT_CERTINFO_BASICCONSTRAINTS), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CA", INT_TO_JSVAL(CRYPT_CERTINFO_CA), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "PATHLENCONSTRAINT", INT_TO_JSVAL(CRYPT_CERTINFO_PATHLENCONSTRAINT), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CRLNUMBER", INT_TO_JSVAL(CRYPT_CERTINFO_CRLNUMBER), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CRLREASON", INT_TO_JSVAL(CRYPT_CERTINFO_CRLREASON), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "HOLDINSTRUCTIONCODE", INT_TO_JSVAL(CRYPT_CERTINFO_HOLDINSTRUCTIONCODE), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "INVALIDITYDATE", INT_TO_JSVAL(CRYPT_CERTINFO_INVALIDITYDATE), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "DELTACRLINDICATOR", INT_TO_JSVAL(CRYPT_CERTINFO_DELTACRLINDICATOR), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "ISSUINGDISTRIBUTIONPOINT", INT_TO_JSVAL(CRYPT_CERTINFO_ISSUINGDISTRIBUTIONPOINT), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "ISSUINGDIST_FULLNAME", INT_TO_JSVAL(CRYPT_CERTINFO_ISSUINGDIST_FULLNAME), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "ISSUINGDIST_USERCERTSONLY", INT_TO_JSVAL(CRYPT_CERTINFO_ISSUINGDIST_USERCERTSONLY), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "ISSUINGDIST_CACERTSONLY", INT_TO_JSVAL(CRYPT_CERTINFO_ISSUINGDIST_CACERTSONLY), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "ISSUINGDIST_SOMEREASONSONLY", INT_TO_JSVAL(CRYPT_CERTINFO_ISSUINGDIST_SOMEREASONSONLY), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "ISSUINGDIST_INDIRECTCRL", INT_TO_JSVAL(CRYPT_CERTINFO_ISSUINGDIST_INDIRECTCRL), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CERTIFICATEISSUER", INT_TO_JSVAL(CRYPT_CERTINFO_CERTIFICATEISSUER), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "NAMECONSTRAINTS", INT_TO_JSVAL(CRYPT_CERTINFO_NAMECONSTRAINTS), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "PERMITTEDSUBTREES", INT_TO_JSVAL(CRYPT_CERTINFO_PERMITTEDSUBTREES), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "EXCLUDEDSUBTREES", INT_TO_JSVAL(CRYPT_CERTINFO_EXCLUDEDSUBTREES), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CRLDISTRIBUTIONPOINT", INT_TO_JSVAL(CRYPT_CERTINFO_CRLDISTRIBUTIONPOINT), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CRLDIST_FULLNAME", INT_TO_JSVAL(CRYPT_CERTINFO_CRLDIST_FULLNAME), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CRLDIST_REASONS", INT_TO_JSVAL(CRYPT_CERTINFO_CRLDIST_REASONS), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CRLDIST_CRLISSUER", INT_TO_JSVAL(CRYPT_CERTINFO_CRLDIST_CRLISSUER), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CERTIFICATEPOLICIES", INT_TO_JSVAL(CRYPT_CERTINFO_CERTIFICATEPOLICIES), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CERTPOLICYID", INT_TO_JSVAL(CRYPT_CERTINFO_CERTPOLICYID), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CERTPOLICY_CPSURI", INT_TO_JSVAL(CRYPT_CERTINFO_CERTPOLICY_CPSURI), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CERTPOLICY_ORGANIZATION", INT_TO_JSVAL(CRYPT_CERTINFO_CERTPOLICY_ORGANIZATION), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CERTPOLICY_NOTICENUMBERS", INT_TO_JSVAL(CRYPT_CERTINFO_CERTPOLICY_NOTICENUMBERS), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CERTPOLICY_EXPLICITTEXT", INT_TO_JSVAL(CRYPT_CERTINFO_CERTPOLICY_EXPLICITTEXT), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "POLICYMAPPINGS", INT_TO_JSVAL(CRYPT_CERTINFO_POLICYMAPPINGS), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "ISSUERDOMAINPOLICY", INT_TO_JSVAL(CRYPT_CERTINFO_ISSUERDOMAINPOLICY), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SUBJECTDOMAINPOLICY", INT_TO_JSVAL(CRYPT_CERTINFO_SUBJECTDOMAINPOLICY), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "AUTHORITYKEYIDENTIFIER", INT_TO_JSVAL(CRYPT_CERTINFO_AUTHORITYKEYIDENTIFIER), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "AUTHORITY_KEYIDENTIFIER", INT_TO_JSVAL(CRYPT_CERTINFO_AUTHORITY_KEYIDENTIFIER), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "AUTHORITY_CERTISSUER", INT_TO_JSVAL(CRYPT_CERTINFO_AUTHORITY_CERTISSUER), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "AUTHORITY_CERTSERIALNUMBER", INT_TO_JSVAL(CRYPT_CERTINFO_AUTHORITY_CERTSERIALNUMBER), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "POLICYCONSTRAINTS", INT_TO_JSVAL(CRYPT_CERTINFO_POLICYCONSTRAINTS), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "REQUIREEXPLICITPOLICY", INT_TO_JSVAL(CRYPT_CERTINFO_REQUIREEXPLICITPOLICY), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "INHIBITPOLICYMAPPING", INT_TO_JSVAL(CRYPT_CERTINFO_INHIBITPOLICYMAPPING), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "EXTKEYUSAGE", INT_TO_JSVAL(CRYPT_CERTINFO_EXTKEYUSAGE), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "EXTKEY_MS_INDIVIDUALCODESIGNING", INT_TO_JSVAL(CRYPT_CERTINFO_EXTKEY_MS_INDIVIDUALCODESIGNING), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "EXTKEY_MS_COMMERCIALCODESIGNING", INT_TO_JSVAL(CRYPT_CERTINFO_EXTKEY_MS_COMMERCIALCODESIGNING), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "EXTKEY_MS_CERTTRUSTLISTSIGNING", INT_TO_JSVAL(CRYPT_CERTINFO_EXTKEY_MS_CERTTRUSTLISTSIGNING), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "EXTKEY_MS_TIMESTAMPSIGNING", INT_TO_JSVAL(CRYPT_CERTINFO_EXTKEY_MS_TIMESTAMPSIGNING), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "EXTKEY_MS_SERVERGATEDCRYPTO", INT_TO_JSVAL(CRYPT_CERTINFO_EXTKEY_MS_SERVERGATEDCRYPTO), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "EXTKEY_MS_ENCRYPTEDFILESYSTEM", INT_TO_JSVAL(CRYPT_CERTINFO_EXTKEY_MS_ENCRYPTEDFILESYSTEM), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "EXTKEY_SERVERAUTH", INT_TO_JSVAL(CRYPT_CERTINFO_EXTKEY_SERVERAUTH), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "EXTKEY_CLIENTAUTH", INT_TO_JSVAL(CRYPT_CERTINFO_EXTKEY_CLIENTAUTH), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "EXTKEY_CODESIGNING", INT_TO_JSVAL(CRYPT_CERTINFO_EXTKEY_CODESIGNING), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "EXTKEY_EMAILPROTECTION", INT_TO_JSVAL(CRYPT_CERTINFO_EXTKEY_EMAILPROTECTION), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "EXTKEY_IPSECENDSYSTEM", INT_TO_JSVAL(CRYPT_CERTINFO_EXTKEY_IPSECENDSYSTEM), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "EXTKEY_IPSECTUNNEL", INT_TO_JSVAL(CRYPT_CERTINFO_EXTKEY_IPSECTUNNEL), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "EXTKEY_IPSECUSER", INT_TO_JSVAL(CRYPT_CERTINFO_EXTKEY_IPSECUSER), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "EXTKEY_TIMESTAMPING", INT_TO_JSVAL(CRYPT_CERTINFO_EXTKEY_TIMESTAMPING), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "EXTKEY_OCSPSIGNING", INT_TO_JSVAL(CRYPT_CERTINFO_EXTKEY_OCSPSIGNING), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "EXTKEY_DIRECTORYSERVICE", INT_TO_JSVAL(CRYPT_CERTINFO_EXTKEY_DIRECTORYSERVICE), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "EXTKEY_ANYKEYUSAGE", INT_TO_JSVAL(CRYPT_CERTINFO_EXTKEY_ANYKEYUSAGE), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "EXTKEY_NS_SERVERGATEDCRYPTO", INT_TO_JSVAL(CRYPT_CERTINFO_EXTKEY_NS_SERVERGATEDCRYPTO), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "EXTKEY_VS_SERVERGATEDCRYPTO_CA", INT_TO_JSVAL(CRYPT_CERTINFO_EXTKEY_VS_SERVERGATEDCRYPTO_CA), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CRLSTREAMIDENTIFIER", INT_TO_JSVAL(CRYPT_CERTINFO_CRLSTREAMIDENTIFIER), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "FRESHESTCRL", INT_TO_JSVAL(CRYPT_CERTINFO_FRESHESTCRL), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "FRESHESTCRL_FULLNAME", INT_TO_JSVAL(CRYPT_CERTINFO_FRESHESTCRL_FULLNAME), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "FRESHESTCRL_REASONS", INT_TO_JSVAL(CRYPT_CERTINFO_FRESHESTCRL_REASONS), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "FRESHESTCRL_CRLISSUER", INT_TO_JSVAL(CRYPT_CERTINFO_FRESHESTCRL_CRLISSUER), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "ORDEREDLIST", INT_TO_JSVAL(CRYPT_CERTINFO_ORDEREDLIST), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "BASEUPDATETIME", INT_TO_JSVAL(CRYPT_CERTINFO_BASEUPDATETIME), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "DELTAINFO", INT_TO_JSVAL(CRYPT_CERTINFO_DELTAINFO), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "DELTAINFO_LOCATION", INT_TO_JSVAL(CRYPT_CERTINFO_DELTAINFO_LOCATION), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "DELTAINFO_NEXTDELTA", INT_TO_JSVAL(CRYPT_CERTINFO_DELTAINFO_NEXTDELTA), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "INHIBITANYPOLICY", INT_TO_JSVAL(CRYPT_CERTINFO_INHIBITANYPOLICY), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "TOBEREVOKED", INT_TO_JSVAL(CRYPT_CERTINFO_TOBEREVOKED), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "TOBEREVOKED_CERTISSUER", INT_TO_JSVAL(CRYPT_CERTINFO_TOBEREVOKED_CERTISSUER), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "TOBEREVOKED_REASONCODE", INT_TO_JSVAL(CRYPT_CERTINFO_TOBEREVOKED_REASONCODE), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "TOBEREVOKED_REVOCATIONTIME", INT_TO_JSVAL(CRYPT_CERTINFO_TOBEREVOKED_REVOCATIONTIME), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "TOBEREVOKED_CERTSERIALNUMBER", INT_TO_JSVAL(CRYPT_CERTINFO_TOBEREVOKED_CERTSERIALNUMBER), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "REVOKEDGROUPS", INT_TO_JSVAL(CRYPT_CERTINFO_REVOKEDGROUPS), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "REVOKEDGROUPS_CERTISSUER", INT_TO_JSVAL(CRYPT_CERTINFO_REVOKEDGROUPS_CERTISSUER), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "REVOKEDGROUPS_REASONCODE", INT_TO_JSVAL(CRYPT_CERTINFO_REVOKEDGROUPS_REASONCODE), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "REVOKEDGROUPS_INVALIDITYDATE", INT_TO_JSVAL(CRYPT_CERTINFO_REVOKEDGROUPS_INVALIDITYDATE), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "REVOKEDGROUPS_STARTINGNUMBER", INT_TO_JSVAL(CRYPT_CERTINFO_REVOKEDGROUPS_STARTINGNUMBER), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "REVOKEDGROUPS_ENDINGNUMBER", INT_TO_JSVAL(CRYPT_CERTINFO_REVOKEDGROUPS_ENDINGNUMBER), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "EXPIREDCERTSONCRL", INT_TO_JSVAL(CRYPT_CERTINFO_EXPIREDCERTSONCRL), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "AAISSUINGDISTRIBUTIONPOINT", INT_TO_JSVAL(CRYPT_CERTINFO_AAISSUINGDISTRIBUTIONPOINT), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "AAISSUINGDIST_FULLNAME", INT_TO_JSVAL(CRYPT_CERTINFO_AAISSUINGDIST_FULLNAME), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "AAISSUINGDIST_SOMEREASONSONLY", INT_TO_JSVAL(CRYPT_CERTINFO_AAISSUINGDIST_SOMEREASONSONLY), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "AAISSUINGDIST_INDIRECTCRL", INT_TO_JSVAL(CRYPT_CERTINFO_AAISSUINGDIST_INDIRECTCRL), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "AAISSUINGDIST_USERATTRCERTS", INT_TO_JSVAL(CRYPT_CERTINFO_AAISSUINGDIST_USERATTRCERTS), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "AAISSUINGDIST_AACERTS", INT_TO_JSVAL(CRYPT_CERTINFO_AAISSUINGDIST_AACERTS), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "AAISSUINGDIST_SOACERTS", INT_TO_JSVAL(CRYPT_CERTINFO_AAISSUINGDIST_SOACERTS), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "NS_CERTTYPE", INT_TO_JSVAL(CRYPT_CERTINFO_NS_CERTTYPE), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "NS_BASEURL", INT_TO_JSVAL(CRYPT_CERTINFO_NS_BASEURL), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "NS_REVOCATIONURL", INT_TO_JSVAL(CRYPT_CERTINFO_NS_REVOCATIONURL), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "NS_CAREVOCATIONURL", INT_TO_JSVAL(CRYPT_CERTINFO_NS_CAREVOCATIONURL), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "NS_CERTRENEWALURL", INT_TO_JSVAL(CRYPT_CERTINFO_NS_CERTRENEWALURL), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "NS_CAPOLICYURL", INT_TO_JSVAL(CRYPT_CERTINFO_NS_CAPOLICYURL), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "NS_SSLSERVERNAME", INT_TO_JSVAL(CRYPT_CERTINFO_NS_SSLSERVERNAME), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "NS_COMMENT", INT_TO_JSVAL(CRYPT_CERTINFO_NS_COMMENT), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SET_HASHEDROOTKEY", INT_TO_JSVAL(CRYPT_CERTINFO_SET_HASHEDROOTKEY), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SET_ROOTKEYTHUMBPRINT", INT_TO_JSVAL(CRYPT_CERTINFO_SET_ROOTKEYTHUMBPRINT), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SET_CERTIFICATETYPE", INT_TO_JSVAL(CRYPT_CERTINFO_SET_CERTIFICATETYPE), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SET_MERCHANTDATA", INT_TO_JSVAL(CRYPT_CERTINFO_SET_MERCHANTDATA), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SET_MERID", INT_TO_JSVAL(CRYPT_CERTINFO_SET_MERID), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SET_MERACQUIRERBIN", INT_TO_JSVAL(CRYPT_CERTINFO_SET_MERACQUIRERBIN), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SET_MERCHANTLANGUAGE", INT_TO_JSVAL(CRYPT_CERTINFO_SET_MERCHANTLANGUAGE), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SET_MERCHANTNAME", INT_TO_JSVAL(CRYPT_CERTINFO_SET_MERCHANTNAME), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SET_MERCHANTCITY", INT_TO_JSVAL(CRYPT_CERTINFO_SET_MERCHANTCITY), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SET_MERCHANTSTATEPROVINCE", INT_TO_JSVAL(CRYPT_CERTINFO_SET_MERCHANTSTATEPROVINCE), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SET_MERCHANTPOSTALCODE", INT_TO_JSVAL(CRYPT_CERTINFO_SET_MERCHANTPOSTALCODE), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SET_MERCHANTCOUNTRYNAME", INT_TO_JSVAL(CRYPT_CERTINFO_SET_MERCHANTCOUNTRYNAME), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SET_MERCOUNTRY", INT_TO_JSVAL(CRYPT_CERTINFO_SET_MERCOUNTRY), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SET_MERAUTHFLAG", INT_TO_JSVAL(CRYPT_CERTINFO_SET_MERAUTHFLAG), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SET_CERTCARDREQUIRED", INT_TO_JSVAL(CRYPT_CERTINFO_SET_CERTCARDREQUIRED), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SET_TUNNELING", INT_TO_JSVAL(CRYPT_CERTINFO_SET_TUNNELING), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SET_TUNNELINGFLAG", INT_TO_JSVAL(CRYPT_CERTINFO_SET_TUNNELINGFLAG), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SET_TUNNELINGALGID", INT_TO_JSVAL(CRYPT_CERTINFO_SET_TUNNELINGALGID), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_CONTENTTYPE", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_CONTENTTYPE), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_MESSAGEDIGEST", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_MESSAGEDIGEST), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SIGNINGTIME", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SIGNINGTIME), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_COUNTERSIGNATURE", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_COUNTERSIGNATURE), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SIGNINGDESCRIPTION", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SIGNINGDESCRIPTION), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SMIMECAPABILITIES", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SMIMECAPABILITIES), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SMIMECAP_3DES", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SMIMECAP_3DES), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SMIMECAP_AES", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SMIMECAP_AES), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SMIMECAP_CAST128", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SMIMECAP_CAST128), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SMIMECAP_SHAng", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SMIMECAP_SHAng), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SMIMECAP_SHA2", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SMIMECAP_SHA2), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SMIMECAP_SHA1", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SMIMECAP_SHA1), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SMIMECAP_HMAC_SHAng", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SMIMECAP_HMAC_SHAng), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SMIMECAP_HMAC_SHA2", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SMIMECAP_HMAC_SHA2), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SMIMECAP_HMAC_SHA1", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SMIMECAP_HMAC_SHA1), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SMIMECAP_AUTHENC256", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SMIMECAP_AUTHENC256), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SMIMECAP_AUTHENC128", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SMIMECAP_AUTHENC128), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SMIMECAP_RSA_SHAng", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SMIMECAP_RSA_SHAng), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SMIMECAP_RSA_SHA2", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SMIMECAP_RSA_SHA2), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SMIMECAP_RSA_SHA1", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SMIMECAP_RSA_SHA1), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SMIMECAP_DSA_SHA1", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SMIMECAP_DSA_SHA1), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SMIMECAP_ECDSA_SHAng", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SMIMECAP_ECDSA_SHAng), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SMIMECAP_ECDSA_SHA2", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SMIMECAP_ECDSA_SHA2), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SMIMECAP_ECDSA_SHA1", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SMIMECAP_ECDSA_SHA1), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SMIMECAP_PREFERSIGNEDDATA", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SMIMECAP_PREFERSIGNEDDATA), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SMIMECAP_CANNOTDECRYPTANY", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SMIMECAP_CANNOTDECRYPTANY), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SMIMECAP_PREFERBINARYINSIDE", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SMIMECAP_PREFERBINARYINSIDE), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_RECEIPTREQUEST", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_RECEIPTREQUEST), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_RECEIPT_CONTENTIDENTIFIER", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_RECEIPT_CONTENTIDENTIFIER), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_RECEIPT_FROM", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_RECEIPT_FROM), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_RECEIPT_TO", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_RECEIPT_TO), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SECURITYLABEL", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SECURITYLABEL), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SECLABEL_POLICY", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SECLABEL_POLICY), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SECLABEL_CLASSIFICATION", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SECLABEL_CLASSIFICATION), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SECLABEL_PRIVACYMARK", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SECLABEL_PRIVACYMARK), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SECLABEL_CATTYPE", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SECLABEL_CATTYPE), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SECLABEL_CATVALUE", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SECLABEL_CATVALUE), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_MLEXPANSIONHISTORY", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_MLEXPANSIONHISTORY), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_MLEXP_ENTITYIDENTIFIER", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_MLEXP_ENTITYIDENTIFIER), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_MLEXP_TIME", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_MLEXP_TIME), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_MLEXP_NONE", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_MLEXP_NONE), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_MLEXP_INSTEADOF", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_MLEXP_INSTEADOF), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_MLEXP_INADDITIONTO", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_MLEXP_INADDITIONTO), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_CONTENTHINTS", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_CONTENTHINTS), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_CONTENTHINT_DESCRIPTION", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_CONTENTHINT_DESCRIPTION), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_CONTENTHINT_TYPE", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_CONTENTHINT_TYPE), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_EQUIVALENTLABEL", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_EQUIVALENTLABEL), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_EQVLABEL_POLICY", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_EQVLABEL_POLICY), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_EQVLABEL_CLASSIFICATION", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_EQVLABEL_CLASSIFICATION), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_EQVLABEL_PRIVACYMARK", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_EQVLABEL_PRIVACYMARK), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_EQVLABEL_CATTYPE", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_EQVLABEL_CATTYPE), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_EQVLABEL_CATVALUE", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_EQVLABEL_CATVALUE), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SIGNINGCERTIFICATE", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SIGNINGCERTIFICATE), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SIGNINGCERT_ESSCERTID", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SIGNINGCERT_ESSCERTID), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SIGNINGCERT_POLICIES", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SIGNINGCERT_POLICIES), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SIGNINGCERTIFICATEV2", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SIGNINGCERTIFICATEV2), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SIGNINGCERTV2_ESSCERTIDV2", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SIGNINGCERTV2_ESSCERTIDV2), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SIGNINGCERTV2_POLICIES", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SIGNINGCERTV2_POLICIES), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SIGNATUREPOLICYID", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SIGNATUREPOLICYID), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SIGPOLICYID", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SIGPOLICYID), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SIGPOLICYHASH", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SIGPOLICYHASH), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SIGPOLICY_CPSURI", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SIGPOLICY_CPSURI), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SIGPOLICY_ORGANIZATION", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SIGPOLICY_ORGANIZATION), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SIGPOLICY_NOTICENUMBERS", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SIGPOLICY_NOTICENUMBERS), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SIGPOLICY_EXPLICITTEXT", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SIGPOLICY_EXPLICITTEXT), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SIGTYPEIDENTIFIER", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SIGTYPEIDENTIFIER), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SIGTYPEID_ORIGINATORSIG", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SIGTYPEID_ORIGINATORSIG), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SIGTYPEID_DOMAINSIG", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SIGTYPEID_DOMAINSIG), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SIGTYPEID_ADDITIONALATTRIBUTES", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SIGTYPEID_ADDITIONALATTRIBUTES), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SIGTYPEID_REVIEWSIG", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SIGTYPEID_REVIEWSIG), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_NONCE", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_NONCE), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SCEP_MESSAGETYPE", INT_TO_JSVAL(CRYPT_CERTINFO_SCEP_MESSAGETYPE), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SCEP_PKISTATUS", INT_TO_JSVAL(CRYPT_CERTINFO_SCEP_PKISTATUS), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SCEP_FAILINFO", INT_TO_JSVAL(CRYPT_CERTINFO_SCEP_FAILINFO), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SCEP_SENDERNONCE", INT_TO_JSVAL(CRYPT_CERTINFO_SCEP_SENDERNONCE), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SCEP_RECIPIENTNONCE", INT_TO_JSVAL(CRYPT_CERTINFO_SCEP_RECIPIENTNONCE), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "SCEP_TRANSACTIONID", INT_TO_JSVAL(CRYPT_CERTINFO_SCEP_TRANSACTIONID), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SPCAGENCYINFO", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SPCAGENCYINFO), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SPCAGENCYURL", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SPCAGENCYURL), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SPCSTATEMENTTYPE", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SPCSTATEMENTTYPE), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SPCSTMT_INDIVIDUALCODESIGNING", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SPCSTMT_INDIVIDUALCODESIGNING), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SPCSTMT_COMMERCIALCODESIGNING", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SPCSTMT_COMMERCIALCODESIGNING), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SPCOPUSINFO", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SPCOPUSINFO), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SPCOPUSINFO_NAME", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SPCOPUSINFO_NAME), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, attr, "CMS_SPCOPUSINFO_URL", INT_TO_JSVAL(CRYPT_CERTINFO_CMS_SPCOPUSINFO_URL), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DeepFreezeObject(cx, attr);
}
}
return(cksobj);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment