]> Cypherpunks repositories - keks.git/commitdiff
Forgotten UTC conversion
authorSergey Matveev <stargrave@stargrave.org>
Fri, 18 Oct 2024 13:26:12 +0000 (16:26 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Fri, 18 Oct 2024 13:26:12 +0000 (16:26 +0300)
cyac/cmd/cer-verify/cer-verify.c
cyac/lib/pki/cer.c
cyac/lib/pki/cer.h

index 07ac5d0e8583f1777ce86275fb961a3ac2d3fdf07226a26f4710a49ec04dcd73..50c9cc1af12914764fe48c5963aceb9a50d32d9469a5026cf285a5be5a0eac9a 100644 (file)
@@ -44,6 +44,7 @@ main(int argc, char **argv)
         unsigned char *buf = NULL;
         size_t len = 0;
         if (!Mmap(&buf, &len, argv[i])) {
+            fprintf(stderr, "%s: %s\n", argv[i], strerror(errno));
             exit(EXIT_FAILURE);
         }
         fputs(argv[i], stdout);
@@ -51,7 +52,7 @@ main(int argc, char **argv)
         size_t off = 0;
         enum YACErr err = YACCerParse(&(cers[i - 1]), &off, &failReason, buf, len);
         if (err != YACErrNo) {
-            fprintf(stderr, "%s\n", failReason);
+            fprintf(stderr, "%s: %s\n", argv[i], failReason);
             return EXIT_FAILURE;
         }
         fputs("cid:", stdout);
@@ -73,9 +74,9 @@ main(int argc, char **argv)
     struct YACCerSigVerifier sigVerifiers[] = {
         {.algo = "gost3410-256A", .func = gost3410SignatureVerifier},
         {.algo = "gost3410-512C", .func = gost3410SignatureVerifier},
+        {.algo = NULL},
     };
-    struct YACCerVerifyOpts opts = {
-        .t = now, .sigVerifiers = sigVerifiers, .sigVerifiersLen = 2};
+    struct YACCerVerifyOpts opts = {.t = now, .sigVerifiers = sigVerifiers};
 
     struct YACCer *toVerify = &(cers[0]);
     struct YACCer *verifier = NULL;
index 9929bf060310931a85ba0fe6d34509d68329239c95d283897a32406d3870e5ee..0807e838a19c7a1da04b6bd67ef10014fe099d879d5749e8d8ea054ffa0ad39a 100644 (file)
@@ -195,6 +195,11 @@ YACCerParse(
                     (*failReason) = "bad /sigs/./tbs/exp/since value";
                     return YACErrUnsatisfiedSchema;
                 }
+                err = YACTimespecToUTC(&(cer->since));
+                if (err != YACErrNo) {
+                    (*failReason) = "bad /sigs/./tbs/exp/since UTC value";
+                    return YACErrUnsatisfiedSchema;
+                }
                 err = YACTAI64ToTimespec(
                     &(cer->till),
                     items->list[idx + 2].atom.v.str.ptr,
@@ -203,6 +208,11 @@ YACCerParse(
                     (*failReason) = "bad /sigs/./tbs/exp/till value";
                     return YACErrUnsatisfiedSchema;
                 }
+                err = YACTimespecToUTC(&(cer->till));
+                if (err != YACErrNo) {
+                    (*failReason) = "bad /sigs/./tbs/exp/till UTC value";
+                    return YACErrUnsatisfiedSchema;
+                }
             }
             sigIdx = items->list[sigIdx].next;
         }
@@ -262,7 +272,8 @@ YACCerVerify(
         const size_t items = 5;
         struct YACItem tbsItems[5];
         memset(&tbsItems, 0, sizeof tbsItems);
-        struct YACItems tbs = {.list = tbsItems, .offsets=NULL, .len=items, .cap=-1};
+        struct YACItems tbs = {
+            .list = tbsItems, .offsets = NULL, .len = items, .cap = -1};
         tbsItems[0].atom.typ = YACItemMap;
         tbsItems[0].atom.v.list.head = 1;
 
@@ -320,7 +331,7 @@ YACCerVerify(
         }
         off += got;
     }
-    for (size_t i = 0; i < opts.sigVerifiersLen; i++) {
+    for (size_t i = 0; opts.sigVerifiers[i].algo != NULL; i++) {
         if (!YACStrEqual(&(pubA->atom), opts.sigVerifiers[i].algo)) {
             continue;
         }
index e72b70906f65f745f5a3bd31490ea397a34e0dda88859800856e45b102a91dcd..e8ba2517ceb468751f71355743a92d0d62042ca554d1335b2d23ef42b899db8b 100644 (file)
@@ -48,7 +48,6 @@ struct YACCerSigVerifier {
 struct YACCerVerifyOpts {
     struct timespec t;
     struct YACCerSigVerifier *sigVerifiers;
-    size_t sigVerifiersLen;
 };
 
 bool