]> git.saurik.com Git - apple/security.git/blobdiff - OSX/libsecurity_codesigning/lib/reqdumper.cpp
Security-59306.140.5.tar.gz
[apple/security.git] / OSX / libsecurity_codesigning / lib / reqdumper.cpp
index d1cb94a9d7936c3fc5d06b7bbd3681b016bce37d..f0fc8dd571ed5d39d71541db3bcba509950263c1 100644 (file)
@@ -25,7 +25,9 @@
 // reqdumper - Requirement un-parsing (disassembly)
 //
 #include "reqdumper.h"
+#if TARGET_OS_OSX
 #include <security_cdsa_utilities/cssmdata.h>  // OID encoder
+#endif
 #include <cstdarg>
 
 namespace Security {
@@ -197,22 +199,35 @@ void Dumper::expr(SyntaxLevel level)
        case opCertField:
                print("certificate"); certSlot(); print("["); dotString(); print("]"); match();
                break;
+       case opCertFieldDate:
+               print("certificate"); certSlot(); print("[");
+#if TARGET_OS_OSX
+               {
+                       const unsigned char *data; size_t length;
+                       getData(data, length);
+                       print("timestamp.%s", CssmOid((unsigned char *)data, length).toOid().c_str());
+               }
+#endif
        case opCertGeneric:
                print("certificate"); certSlot(); print("[");
+#if TARGET_OS_OSX
                {
                        const unsigned char *data; size_t length;
                        getData(data, length);
                        print("field.%s", CssmOid((unsigned char *)data, length).toOid().c_str());
                }
+#endif
                print("]"); match();
                break;
        case opCertPolicy:
                print("certificate"); certSlot(); print("[");
+#if TARGET_OS_OSX
                {
                        const unsigned char *data; size_t length;
                        getData(data, length);
                        print("policy.%s", CssmOid((unsigned char *)data, length).toOid().c_str());
                }
+#endif
                print("]"); match();
                break;
        case opTrustedCert:
@@ -230,6 +245,12 @@ void Dumper::expr(SyntaxLevel level)
        case opPlatform:
                print("platform = %d", get<int32_t>());
                break;
+       case opNotarized:
+               print("notarized");
+               break;
+       case opLegacyDevID:
+               print("legacy");
+               break;
        default:
                if (op & opGenericFalse) {
                        print(" false /* opcode %d */", op & ~opFlagMask);
@@ -265,6 +286,9 @@ void Dumper::match()
        case matchExists:
                print(" /* exists */");
                break;
+       case matchAbsent:
+               print(" absent ");
+               break;
        case matchEqual:
                print(" = "); data();
                break;
@@ -289,6 +313,21 @@ void Dumper::match()
        case matchGreaterThan:
                print(" > "); data();
                break;
+       case matchOn:
+               print(" = "); timestamp();
+               break;
+       case matchBefore:
+               print(" < "); timestamp();
+               break;
+       case matchAfter:
+               print(" > "); timestamp();
+               break;
+       case matchOnOrBefore:
+               print(" <= "); timestamp();
+               break;
+       case matchOnOrAfter:
+               print(" >= "); timestamp();
+               break;
        default:
                print("MATCH OPCODE %d NOT UNDERSTOOD", op);
                break;
@@ -331,7 +370,7 @@ void Dumper::data(PrintMode bestMode /* = isSimple */, bool dotOkay /* = false *
                
        switch (bestMode) {
        case isSimple:
-               print("%.*s", length, data);
+               print("%.*s", (int)length, data);
                break;
        case isPrintable:
                print("\"");
@@ -353,6 +392,16 @@ void Dumper::data(PrintMode bestMode /* = isSimple */, bool dotOkay /* = false *
                break;
        }
 }
+       
+void Dumper::timestamp()
+{
+       CFAbsoluteTime at = static_cast<CFAbsoluteTime>(get<int64_t>());
+       CFRef<CFDateRef> date = CFDateCreate(NULL, at);
+       
+       CFRef<CFStringRef> str = CFCopyDescription(date);
+       
+       print("<%s>", cfString(str).c_str());
+}
 
 void Dumper::printBytes(const Byte *data, size_t length)
 {