Index: /trunk/include/iprt/asn1.h
===================================================================
--- /trunk/include/iprt/asn1.h	(revision 64863)
+++ /trunk/include/iprt/asn1.h	(revision 64864)
@@ -187,4 +187,9 @@
 RTDECL(PRTASN1ALLOCATION) RTAsn1MemInitAllocation(PRTASN1ALLOCATION pAllocation, PCRTASN1ALLOCATORVTABLE pAllocator);
 
+/** Pointer to a core ASN.1 encoding info structure. */
+typedef struct RTASN1CORE *PRTASN1CORE;
+/** Pointer to a const core ASN.1 encoding info structure. */
+typedef struct RTASN1CORE const *PCRTASN1CORE;
+
 RTDECL(int)  RTAsn1ContentAllocZ(struct RTASN1CORE *pAsn1Core, size_t cb, PCRTASN1ALLOCATORVTABLE pAllocator);
 RTDECL(int)  RTAsn1ContentDup(struct RTASN1CORE *pAsn1Core, void const *pvSrc, size_t cbSrc, PCRTASN1ALLOCATORVTABLE pAllocator);
@@ -192,10 +197,4 @@
 RTDECL(void) RTAsn1ContentFree(struct RTASN1CORE *pAsn1Core);
 
-
-
-/** Pointer to a core ASN.1 encoding info structure. */
-typedef struct RTASN1CORE *PRTASN1CORE;
-/** Pointer to a const core ASN.1 encoding info structure. */
-typedef struct RTASN1CORE const *PCRTASN1CORE;
 
 
@@ -1001,4 +1000,5 @@
 RTASN1_IMPL_GEN_SEQ_OF_TYPEDEFS_AND_PROTOS(RTASN1SEQOFOBJIDS, RTASN1OBJID, RTDECL, RTAsn1SeqOfObjIds);
 RTASN1_IMPL_GEN_SET_OF_TYPEDEFS_AND_PROTOS(RTASN1SETOFOBJIDS, RTASN1OBJID, RTDECL, RTAsn1SetOfObjIds);
+RTASN1_IMPL_GEN_SET_OF_TYPEDEFS_AND_PROTOS(RTASN1SETOFOBJIDSEQS, RTASN1SEQOFOBJIDS, RTDECL, RTAsn1SetOfObjIdSeqs);
 
 
@@ -1064,8 +1064,10 @@
     /** Core ASN.1 encoding details. */
     RTASN1CORE          Asn1Core;
-    /** Pointer to user structure encapsulated in this string, if dynamically
-     * allocated the EncapsulatedAllocation member can be used to track it and
-     * trigger automatic cleanup on object destruction.  If EncapsulatedAllocation
-     * is zero, any object pointed to will only be deleted. */
+    /** Pointer to user structure encapsulated in this string.
+     *
+     * If dynamically allocated the EncapsulatedAllocation member can be used to
+     * track it and trigger automatic cleanup on object destruction.  If
+     * EncapsulatedAllocation is zero, any object pointed to will only be
+     * deleted. */
     PRTASN1CORE         pEncapsulated;
     /** Allocation tracking structure for pEncapsulated. */
Index: /trunk/include/iprt/crypto/digest.h
===================================================================
--- /trunk/include/iprt/crypto/digest.h	(revision 64863)
+++ /trunk/include/iprt/crypto/digest.h	(revision 64864)
@@ -216,4 +216,12 @@
 RTDECL(const char *) RTCrDigestTypeToName(RTDIGESTTYPE enmDigestType);
 
+/**
+ * Translates an IPRT digest type value to a hash size.
+ *
+ * @returns Hash size (in bytes).
+ * @param       enmDigestType       The IPRT digest type value to convert.
+ */
+RTDECL(uint32_t) RTCrDigestTypeToHashSize(RTDIGESTTYPE enmDigestType);
+
 /** @} */
 
Index: /trunk/include/iprt/mangling.h
===================================================================
--- /trunk/include/iprt/mangling.h	(revision 64863)
+++ /trunk/include/iprt/mangling.h	(revision 64864)
@@ -2591,4 +2591,16 @@
 # define RTAsn1SetOfObjIds_Enum                         RT_MANGLER(RTAsn1SetOfObjIds_Enum)
 # define RTAsn1SetOfObjIds_Init                         RT_MANGLER(RTAsn1SetOfObjIds_Init)
+# define RTAsn1SeqOfObjIdSeqs_CheckSanity               RT_MANGLER(RTAsn1SeqOfObjIdSeqs_CheckSanity)
+# define RTAsn1SeqOfObjIdSeqs_Clone                     RT_MANGLER(RTAsn1SeqOfObjIdSeqs_Clone)
+# define RTAsn1SeqOfObjIdSeqs_Compare                   RT_MANGLER(RTAsn1SeqOfObjIdSeqs_Compare)
+# define RTAsn1SeqOfObjIdSeqs_Delete                    RT_MANGLER(RTAsn1SeqOfObjIdSeqs_Delete)
+# define RTAsn1SeqOfObjIdSeqs_Enum                      RT_MANGLER(RTAsn1SeqOfObjIdSeqs_Enum)
+# define RTAsn1SeqOfObjIdSeqs_Init                      RT_MANGLER(RTAsn1SeqOfObjIdSeqs_Init)
+# define RTAsn1SetOfObjIdSeqs_CheckSanity               RT_MANGLER(RTAsn1SetOfObjIdSeqs_CheckSanity)
+# define RTAsn1SetOfObjIdSeqs_Clone                     RT_MANGLER(RTAsn1SetOfObjIdSeqs_Clone)
+# define RTAsn1SetOfObjIdSeqs_Compare                   RT_MANGLER(RTAsn1SetOfObjIdSeqs_Compare)
+# define RTAsn1SetOfObjIdSeqs_Delete                    RT_MANGLER(RTAsn1SetOfObjIdSeqs_Delete)
+# define RTAsn1SetOfObjIdSeqs_Enum                      RT_MANGLER(RTAsn1SetOfObjIdSeqs_Enum)
+# define RTAsn1SetOfObjIdSeqs_Init                      RT_MANGLER(RTAsn1SetOfObjIdSeqs_Init)
 # define RTAsn1ObjId_DecodeAsn1                         RT_MANGLER(RTAsn1ObjId_DecodeAsn1)
 # define RTAsn1SeqOfObjIds_DecodeAsn1                   RT_MANGLER(RTAsn1SeqOfObjIds_DecodeAsn1)
@@ -2778,4 +2790,5 @@
 # define RTCrDigestTypeToAlgorithmOid                   RT_MANGLER(RTCrDigestTypeToAlgorithmOid)
 # define RTCrDigestTypeToName                           RT_MANGLER(RTCrDigestTypeToName)
+# define RTCrDigestTypeToHashSize                       RT_MANGLER(RTCrDigestTypeToHashSize)
 # define RTCrRsaDigestInfo_DecodeAsn1                   RT_MANGLER(RTCrRsaDigestInfo_DecodeAsn1)
 # define RTCrRsaOtherPrimeInfo_DecodeAsn1               RT_MANGLER(RTCrRsaOtherPrimeInfo_DecodeAsn1)
Index: /trunk/src/VBox/Runtime/common/asn1/asn1-ut-objid-template.h
===================================================================
--- /trunk/src/VBox/Runtime/common/asn1/asn1-ut-objid-template.h	(revision 64863)
+++ /trunk/src/VBox/Runtime/common/asn1/asn1-ut-objid-template.h	(revision 64864)
@@ -44,2 +44,11 @@
 #undef RTASN1TMPL_INT_NAME
 
+
+#define RTASN1TMPL_TYPE         RTASN1SETOFOBJIDSEQS
+#define RTASN1TMPL_EXT_NAME     RTAsn1SetOfObjIdSeqs
+#define RTASN1TMPL_INT_NAME     rtAsn1SetOfObjIdSeqs
+RTASN1TMPL_SET_OF(RTASN1SEQOFOBJIDS, RTAsn1SeqOfObjIds);
+#undef RTASN1TMPL_TYPE
+#undef RTASN1TMPL_EXT_NAME
+#undef RTASN1TMPL_INT_NAME
+
Index: /trunk/src/VBox/Runtime/common/crypto/digest-core.cpp
===================================================================
--- /trunk/src/VBox/Runtime/common/crypto/digest-core.cpp	(revision 64863)
+++ /trunk/src/VBox/Runtime/common/crypto/digest-core.cpp	(revision 64864)
@@ -419,2 +419,25 @@
 }
 
+
+RTDECL(uint32_t) RTCrDigestTypeToHashSize(RTDIGESTTYPE enmDigestType)
+{
+    switch (enmDigestType)
+    {
+        case RTDIGESTTYPE_CRC32:        return  32 / 8;
+        case RTDIGESTTYPE_CRC64:        return  64 / 8;
+        case RTDIGESTTYPE_MD2:          return 128 / 8;
+        case RTDIGESTTYPE_MD4:          return 128 / 8;
+        case RTDIGESTTYPE_MD5:          return 128 / 8;
+        case RTDIGESTTYPE_SHA1:         return 160 / 8;
+        case RTDIGESTTYPE_SHA224:       return 224 / 8;
+        case RTDIGESTTYPE_SHA256:       return 256 / 8;
+        case RTDIGESTTYPE_SHA384:       return 384 / 8;
+        case RTDIGESTTYPE_SHA512:       return 512 / 8;
+        case RTDIGESTTYPE_SHA512T224:   return 224 / 8;
+        case RTDIGESTTYPE_SHA512T256:   return 256 / 8;
+        default:
+            AssertFailed();
+            return 0;
+    }
+}
+
