VirtualBox

Changeset 95631 in vbox for trunk/src/VBox/Runtime/tools


Ignore:
Timestamp:
Jul 13, 2022 10:53:13 PM (3 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
152273
Message:

RTSignTool: Use new setters. Corrected Ms-SpcOpusInfo. bugref:8691

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/tools/RTSignTool.cpp

    r95626 r95631  
    963963#ifndef IPRT_IN_BUILD_TOOL
    964964
     965static PRTCRPKCS7ATTRIBUTE SignToolPkcs7_AuthAttribAppend(PRTCRPKCS7ATTRIBUTES pAuthAttribs)
     966{
     967    int32_t iPos = RTCrPkcs7Attributes_Append(pAuthAttribs);
     968    if (iPos >= 0)
     969        return pAuthAttribs->papItems[iPos];
     970    RTMsgError("RTCrPkcs7Attributes_Append failed: %Rrc", iPos);
     971    return NULL;
     972}
     973
    965974static PRTCRPKCS7ATTRIBUTE SignToolPkcs7_AuthAttribAppend(PRTCRPKCS7ATTRIBUTES pAuthAttribs, const char *pszAttrId)
    966975{
     
    9911000     *                                     ^^- end 2016-10-05T07:50:30.000000000Z (161005075030Z)
    9921001     */
    993     PRTCRPKCS7ATTRIBUTE pAttr = SignToolPkcs7_AuthAttribAppend(pAuthAttribs, RTCR_PKCS9_ID_SIGNING_TIME_OID);
     1002    PRTCRPKCS7ATTRIBUTE pAttr = SignToolPkcs7_AuthAttribAppend(pAuthAttribs);
    9941003    if (!pAttr)
    9951004        return RTEXITCODE_FAILURE;
    9961005
    997     /** @todo Generalize the Type + enmType DYN stuff and generate setters. */
    998     Assert(pAttr->enmType == RTCRPKCS7ATTRIBUTETYPE_NOT_PRESENT);
    999     Assert(pAttr->uValues.pContentInfos == NULL);
    1000     pAttr->enmType = RTCRPKCS7ATTRIBUTETYPE_SIGNING_TIME;
    1001     int rc = RTAsn1MemAllocZ(&pAttr->Allocation, (void **)&pAttr->uValues.pSigningTime, sizeof(*pAttr->uValues.pSigningTime));
     1006    int rc = RTCrPkcs7Attribute_SetSigningTime(pAttr, NULL, pAuthAttribs->Allocation.pAllocator);
    10021007    if (RT_FAILURE(rc))
    1003         return RTMsgErrorExitFailure("RTAsn1MemAllocZ failed: %Rrc", rc);
    1004 
    1005     rc = RTAsn1SetOfTimes_Init(pAttr->uValues.pSigningTime, pAttr->Allocation.pAllocator);
    1006     if (RT_FAILURE(rc))
    1007         return RTMsgErrorExitFailure("RTAsn1SetOfTimes_Init failed: %Rrc", rc);
     1008        return RTMsgErrorExitFailure("RTCrPkcs7Attribute_SetSigningTime failed: %Rrc", rc);
    10081009
    10091010    /* Create the timestamp. */
     
    10211022
    10221023
    1023 static RTEXITCODE SignToolPkcs7_AuthAttribsAddObjIdSeqsEmpty(PRTCRPKCS7ATTRIBUTES pAuthAttribs, const char *pszAttrId)
    1024 {
    1025     PRTCRPKCS7ATTRIBUTE pAttr = SignToolPkcs7_AuthAttribAppend(pAuthAttribs, pszAttrId);
     1024static RTEXITCODE SignToolPkcs7_AuthAttribsAddSpcOpusInfo(PRTCRPKCS7ATTRIBUTES pAuthAttribs, void *pvInfo)
     1025{
     1026    PRTCRPKCS7ATTRIBUTE pAttr = SignToolPkcs7_AuthAttribAppend(pAuthAttribs);
    10261027    if (!pAttr)
    10271028        return RTEXITCODE_FAILURE;
    10281029
    1029     /** @todo Generalize the Type + enmType DYN stuff and generate setters. */
    1030     Assert(pAttr->enmType == RTCRPKCS7ATTRIBUTETYPE_NOT_PRESENT);
    1031     Assert(pAttr->uValues.pContentInfos == NULL);
    1032     pAttr->enmType = RTCRPKCS7ATTRIBUTETYPE_MS_STATEMENT_TYPE;
    1033     int rc = RTAsn1MemAllocZ(&pAttr->Allocation, (void **)&pAttr->uValues.pObjIdSeqs, sizeof(*pAttr->uValues.pObjIdSeqs));
     1030    int rc = RTCrPkcs7Attribute_SetMsStatementType(pAttr, NULL, pAuthAttribs->Allocation.pAllocator);
    10341031    if (RT_FAILURE(rc))
    1035         return RTMsgErrorExitFailure("RTAsn1MemAllocZ failed: %Rrc", rc);
    1036 
    1037     rc = RTAsn1SetOfObjIdSeqs_Init(pAttr->uValues.pObjIdSeqs, pAttr->Allocation.pAllocator);
     1032        return RTMsgErrorExitFailure("RTCrPkcs7Attribute_SetMsStatementType failed: %Rrc", rc);
     1033
     1034    /* Override the ID. */
     1035    rc = RTAsn1ObjId_SetFromString(&pAttr->Type, RTCR_PKCS9_ID_MS_SP_OPUS_INFO, pAuthAttribs->Allocation.pAllocator);
    10381036    if (RT_FAILURE(rc))
    1039         return RTMsgErrorExitFailure("RTAsn1SetOfObjIdSeqs_Init failed: %Rrc", rc);
    1040 
     1037        return RTMsgErrorExitFailure("RTAsn1ObjId_SetFromString failed: %Rrc", rc);
     1038
     1039    /* Add attribute value entry. */
     1040    int32_t iPos = RTAsn1SetOfObjIdSeqs_Append(pAttr->uValues.pObjIdSeqs);
     1041    if (iPos < 0)
     1042        return RTMsgErrorExitFailure("RTAsn1SetOfObjIdSeqs_Append failed: %Rrc", iPos);
     1043
     1044    RT_NOREF(pvInfo); Assert(!pvInfo);
    10411045    return RTEXITCODE_SUCCESS;
    10421046}
    10431047
    10441048
    1045 static RTEXITCODE SignToolPkcs7_AuthAttribsAddObjIdSeqsValue(PRTCRPKCS7ATTRIBUTES pAuthAttribs, const char *pszAttrId,
    1046                                                              const char *pszValueId)
    1047 {
    1048     RTEXITCODE rcExit = SignToolPkcs7_AuthAttribsAddObjIdSeqsEmpty(pAuthAttribs, pszAttrId);
    1049     if (rcExit != RTEXITCODE_SUCCESS)
    1050         return rcExit;
     1049static RTEXITCODE SignToolPkcs7_AuthAttribsAddMsStatementType(PRTCRPKCS7ATTRIBUTES pAuthAttribs, const char *pszTypeId)
     1050{
     1051    PRTCRPKCS7ATTRIBUTE pAttr = SignToolPkcs7_AuthAttribAppend(pAuthAttribs);
     1052    if (!pAttr)
     1053        return RTEXITCODE_FAILURE;
     1054
     1055    int rc = RTCrPkcs7Attribute_SetMsStatementType(pAttr, NULL, pAuthAttribs->Allocation.pAllocator);
     1056    if (RT_FAILURE(rc))
     1057        return RTMsgErrorExitFailure("RTCrPkcs7Attribute_SetMsStatementType failed: %Rrc", rc);
    10511058
    10521059    /* Add attribute value entry. */
    1053     PRTCRPKCS7ATTRIBUTE pAttr = pAuthAttribs->papItems[pAuthAttribs->cItems - 1];
    10541060    int32_t iPos = RTAsn1SetOfObjIdSeqs_Append(pAttr->uValues.pObjIdSeqs);
    10551061    if (iPos < 0)
     
    10591065    /* Add a object id to the value. */
    10601066    RTASN1OBJID ObjIdValue;
    1061     int rc = RTAsn1ObjId_InitFromString(&ObjIdValue, pszValueId, &g_RTAsn1DefaultAllocator);
     1067    rc = RTAsn1ObjId_InitFromString(&ObjIdValue, pszTypeId, &g_RTAsn1DefaultAllocator);
    10621068    if (RT_FAILURE(rc))
    1063         return RTMsgErrorExitFailure("RTAsn1ObjId_InitFromString/%s failed: %Rrc", pszAttrId, rc);
     1069        return RTMsgErrorExitFailure("RTAsn1ObjId_InitFromString/%s failed: %Rrc", pszTypeId, rc);
    10641070
    10651071    rc = RTAsn1SeqOfObjIds_InsertEx(pSeqObjIds, 0 /*iPos*/, &ObjIdValue, &g_RTAsn1DefaultAllocator, NULL);
     
    10711077}
    10721078
    1073 
    1074 static RTEXITCODE SignToolPkcs7_AuthAttribsAddObjIdValue(PRTCRPKCS7ATTRIBUTES pAuthAttribs, const char *pszAttrId,
    1075                                                          const char *pszValueId)
    1076 {
    1077     /* Create the attrib and its sub-set of object IDs. */
    1078     PRTCRPKCS7ATTRIBUTE pAttr = SignToolPkcs7_AuthAttribAppend(pAuthAttribs, pszAttrId);
     1079static RTEXITCODE SignToolPkcs7_AuthAttribsAddContentType(PRTCRPKCS7ATTRIBUTES pAuthAttribs, const char *pszContentTypeId)
     1080{
     1081    PRTCRPKCS7ATTRIBUTE pAttr = SignToolPkcs7_AuthAttribAppend(pAuthAttribs);
    10791082    if (!pAttr)
    10801083        return RTEXITCODE_FAILURE;
    10811084
    1082     /** @todo Generalize the Type + enmType DYN stuff and generate setters. */
    1083     Assert(pAttr->enmType == RTCRPKCS7ATTRIBUTETYPE_NOT_PRESENT);
    1084     Assert(pAttr->uValues.pContentInfos == NULL);
    1085     pAttr->enmType = RTCRPKCS7ATTRIBUTETYPE_OBJ_IDS;
    1086     int rc = RTAsn1MemAllocZ(&pAttr->Allocation, (void **)&pAttr->uValues.pObjIds, sizeof(*pAttr->uValues.pObjIds));
     1085    int rc = RTCrPkcs7Attribute_SetContentType(pAttr, NULL, pAuthAttribs->Allocation.pAllocator);
    10871086    if (RT_FAILURE(rc))
    1088         return RTMsgErrorExitFailure("RTAsn1MemAllocZ failed: %Rrc", rc);
    1089 
    1090     rc = RTAsn1SetOfObjIds_Init(pAttr->uValues.pObjIds, pAttr->Allocation.pAllocator);
    1091     if (RT_FAILURE(rc))
    1092         return RTMsgErrorExitFailure("RTAsn1SetOfObjIdSeqs_Init failed: %Rrc", rc);
     1087        return RTMsgErrorExitFailure("RTCrPkcs7Attribute_SetContentType failed: %Rrc", rc);
    10931088
    10941089    /* Add a object id to the value. */
    10951090    RTASN1OBJID ObjIdValue;
    1096     rc = RTAsn1ObjId_InitFromString(&ObjIdValue, pszValueId, &g_RTAsn1DefaultAllocator);
     1091    rc = RTAsn1ObjId_InitFromString(&ObjIdValue, pszContentTypeId, pAuthAttribs->Allocation.pAllocator);
    10971092    if (RT_FAILURE(rc))
    1098         return RTMsgErrorExitFailure("RTAsn1ObjId_InitFromString/%s failed: %Rrc", pszAttrId, rc);
    1099 
    1100     rc = RTAsn1SetOfObjIds_InsertEx(pAttr->uValues.pObjIds, 0 /*iPos*/, &ObjIdValue, &g_RTAsn1DefaultAllocator, NULL);
     1093        return RTMsgErrorExitFailure("RTAsn1ObjId_InitFromString/%s failed: %Rrc", pszContentTypeId, rc);
     1094
     1095    rc = RTAsn1SetOfObjIds_InsertEx(pAttr->uValues.pObjIds, 0 /*iPos*/, &ObjIdValue, pAuthAttribs->Allocation.pAllocator, NULL);
    11011096    RTAsn1ObjId_Delete(&ObjIdValue);
    11021097    if (RT_FAILURE(rc))
     
    11361131     *                   Set Of -^^    ^^- Empty Sequence.
    11371132     */
    1138     /** @todo ends up with zero byte instead of two.   */
    1139     RTEXITCODE rcExit = SignToolPkcs7_AuthAttribsAddObjIdSeqsEmpty(pAuthAttribs, RTCR_PKCS9_ID_MS_SP_OPUS_INFO);
     1133    RTEXITCODE rcExit = SignToolPkcs7_AuthAttribsAddSpcOpusInfo(pAuthAttribs, NULL /*pvInfo - none*/);
    11401134    if (rcExit != RTEXITCODE_SUCCESS)
    11411135        return rcExit;
     
    11491143     *                              ^- Set Of
    11501144     */
    1151     rcExit = SignToolPkcs7_AuthAttribsAddObjIdValue(pAuthAttribs, RTCR_PKCS9_ID_CONTENT_TYPE_OID,
    1152                                                     RTCRSPCINDIRECTDATACONTENT_OID);
     1145    rcExit = SignToolPkcs7_AuthAttribsAddContentType(pAuthAttribs, RTCRSPCINDIRECTDATACONTENT_OID);
    11531146    if (rcExit != RTEXITCODE_SUCCESS)
    11541147        return rcExit;
     
    11621155     *          Set Of -^^    ^^- Sequence Of
    11631156     */
    1164     rcExit = SignToolPkcs7_AuthAttribsAddObjIdSeqsValue(pAuthAttribs, RTCR_PKCS9_ID_MS_STATEMENT_TYPE,
    1165                                                         RTCRSPC_STMT_TYPE_INDIVIDUAL_CODE_SIGNING);
     1157    rcExit = SignToolPkcs7_AuthAttribsAddMsStatementType(pAuthAttribs, RTCRSPC_STMT_TYPE_INDIVIDUAL_CODE_SIGNING);
    11661158    if (rcExit != RTEXITCODE_SUCCESS)
    11671159        return rcExit;
     
    12011193
    12021194    /* Create the attrib and its sub-set of counter signatures. */
     1195#if 1
     1196    rc = RTCrPkcs7Attribute_SetCounterSignatures(pAttr, NULL, pAttr->Allocation.pAllocator);
     1197#else
    12031198    rc = RTAsn1ObjId_InitFromString(&pAttr->Type, RTCR_PKCS9_ID_COUNTER_SIGNATURE_OID, pAttr->Allocation.pAllocator);
    12041199    if (RT_FAILURE(rc))
     
    12171212    if (RT_FAILURE(rc))
    12181213        return RTMsgErrorExitFailure("RTCrPkcs7SignerInfos_Init failed: %Rrc", rc);
     1214#endif
    12191215
    12201216    /* Insert the counter signature. */
     
    12391235    if (!pExisting || RTCrX509Certificate_Compare(pExisting, pCertToAppend) != 0)
    12401236    {
    1241         /* Append a RTCRPKCS7CERT entry. */
    1242         //int32_t iPos = RTCrPkcs7SetOfCerts_Append(&pSignedData->Certificates);
    1243         //if (iPos < 0)
    1244         //    return RTMsgErrorExitFailure("RTCrPkcs7SetOfCerts_Append failed: %Rrc", iPos);
     1237        /* Prepend a RTCRPKCS7CERT entry. */
    12451238        uint32_t iPos;
    12461239        int rc = RTCrPkcs7SetOfCerts_InsertEx(&pSignedData->Certificates, 0 /*iPosition*/, NULL /*pToClone*/,
     
    12481241        if (RT_FAILURE(rc))
    12491242            return RTMsgErrorExitFailure("RTCrPkcs7SetOfCerts_Append failed: %Rrc", rc);
    1250 
    12511243        PRTCRPKCS7CERT pCertEntry = pSignedData->Certificates.papItems[iPos];
    12521244
    1253         /** @todo Generalize the Type + enmType DYN stuff and generate setters. */
    1254         Assert(pCertEntry->enmChoice == RTCRPKCS7CERTCHOICE_INVALID);
    1255         Assert(pCertEntry->u.pX509Cert == NULL);
    1256         pCertEntry->enmChoice = RTCRPKCS7CERTCHOICE_X509;
    1257         rc = RTAsn1MemAllocZ(&pCertEntry->Allocation, (void **)&pCertEntry->u.pX509Cert, sizeof(*pCertEntry->u.pX509Cert));
     1245        /* Set (clone) the certificate. */
     1246        rc = RTCrPkcs7Cert_SetX509Cert(pCertEntry, pCertToAppend, pCertEntry->Allocation.pAllocator);
    12581247        if (RT_FAILURE(rc))
    1259             return RTMsgErrorExitFailure("RTAsn1MemAllocZ failed: %Rrc", rc);
    1260 
    1261         /* Copy over the certificate we wish to append. */
    1262         rc = RTCrX509Certificate_Clone(pCertEntry->u.pX509Cert, pCertToAppend, pCertEntry->Allocation.pAllocator);
    1263         if (RT_FAILURE(rc))
    1264             return RTMsgErrorExitFailure("RTCrX509Certificate_Clone failed: %Rrc", rc);
     1248            return RTMsgErrorExitFailure("RTCrPkcs7Cert_X509Cert failed: %Rrc", rc);
    12651249    }
    12661250    return RTEXITCODE_SUCCESS;
     
    13391323    return RTEXITCODE_FAILURE;
    13401324}
     1325
    13411326
    13421327static RTEXITCODE SignToolPkcs7_AddTimestampSignatureEx(PRTCRPKCS7SIGNERINFO pSignerInfo, PRTCRPKCS7SIGNEDDATA pSignedData,
     
    14161401}
    14171402
     1403
    14181404static RTEXITCODE SignToolPkcs7_AddTimestampSignature(SIGNTOOLPKCS7EXE *pThis, unsigned cVerbosity, unsigned iSignature,
    14191405                                                      bool fReplaceExisting, bool fTimestampTypeOld, RTTIMESPEC SigningTime,
     
    14341420}
    14351421
     1422
    14361423static RTEXITCODE SignToolPkcs7_SignSpcIndData(SIGNTOOLPKCS7EXE *pThis, RTCRSPCINDIRECTDATACONTENT *pSpcIndData,
    1437                                                unsigned cVerbosity, bool fReplaceExisting,  SIGNTOOLKEYPAIR *pSigningCertKey,
    1438                                                RTCRSTORE hAddCerts,  bool fTimestampTypeOld, RTTIMESPEC SigningTime,
    1439                                                SIGNTOOLKEYPAIR *pTimestampCertKey)
     1424                                               unsigned cVerbosity,  RTDIGESTTYPE enmSigType, bool fReplaceExisting,
     1425                                               SIGNTOOLKEYPAIR *pSigningCertKey, RTCRSTORE hAddCerts,
     1426                                               bool fTimestampTypeOld, RTTIMESPEC SigningTime, SIGNTOOLKEYPAIR *pTimestampCertKey)
    14401427{
    14411428    /*
     
    14881475                PSIGNTOOLPKCS7 pSigDst = !pThis->pSignedData ? pThis : &Src;
    14891476                rcExit = Pkcs7SignStuff("image", pvSpcEncoded, cbSpcEncoded, &AuthAttribs, hAddCerts, 0 /*fExtraFlags*/,
    1490                                         RTDIGESTTYPE_SHA1 /** @todo */, pSigningCertKey, cVerbosity,
     1477                                        enmSigType /** @todo ?? */, pSigningCertKey, cVerbosity,
    14911478                                        (void **)&pSigDst->pbBuf, &pSigDst->cbBuf, &pSigDst->ContentInfo, &pSigDst->pSignedData);
    14921479                if (rcExit == RTEXITCODE_SUCCESS)
     
    15221509    return rcExit;
    15231510}
     1511
    15241512
    15251513static RTEXITCODE SignToolPkcs7_SpcCompleteWithoutPageHashes(RTCRSPCINDIRECTDATACONTENT *pSpcIndData)
     
    15861574}
    15871575
     1576
    15881577static RTEXITCODE SignToolPkcs7_SpcAddImagePageHashes(SIGNTOOLPKCS7EXE *pThis, RTCRSPCINDIRECTDATACONTENT *pSpcIndData,
    15891578                                                      RTDIGESTTYPE enmSigType)
     
    15921581    return RTEXITCODE_SUCCESS;
    15931582}
     1583
    15941584
    15951585static RTEXITCODE SignToolPkcs7_SpcAddImageHash(SIGNTOOLPKCS7EXE *pThis, RTCRSPCINDIRECTDATACONTENT *pSpcIndData,
     
    16891679                     */
    16901680                    if (rcExit == RTEXITCODE_SUCCESS)
    1691                         rcExit = SignToolPkcs7_SignSpcIndData(pThis, &SpcIndData, cVerbosity, fReplaceExisting, pSigningCertKey,
    1692                                                               hAddCerts, fTimestampTypeOld, SigningTime, pTimestampCertKey);
     1681                        rcExit = SignToolPkcs7_SignSpcIndData(pThis, &SpcIndData, cVerbosity,
     1682                                                              enmSigType, fReplaceExisting, pSigningCertKey, hAddCerts,
     1683                                                              fTimestampTypeOld, SigningTime, pTimestampCertKey);
    16931684                }
    16941685            }
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette