63 }
else if (Item->
length == 0) {
84 if (
Length == 0 || (Contents->
data[0] & 0x80U) != 0) {
88 Value = Contents->
data[0];
104 if (Value == 0 && (Contents->
data[1] & 0x80U) == 0) {
108 for (Index = 1; Index <
Length; ++Index) {
110 Value += Contents->
data[Index];
126 assert (Contents != NULL);
134 if ((Result64 & 0xFFFFFFFF80000000U) != 0) {
160 assert (PubKeyItem != NULL);
162 assert (DataItem != NULL);
185 if (NumUnusedBits != 0) {
213DERImg4ManifestVerifyMagic (
222 if (ManItem->
length != sizeof (ItemTag)) {
240DERImg4ManifestCollectCertInfo (
257 assert (CertInfo != NULL);
286 sizeof (CertPubKeyInfo)
293 &CertPubKeyInfo.
algId,
297 sizeof (CertSigAlgoId)
317 if (NumUnusedBits != 0) {
390 assert (ChildCertInfo != NULL);
391 assert (ParentCertInfo != NULL);
406 sizeof (CertSigAlgoId)
425 if (NumUnusedBits != 0) {
463 assert (ManCertRoleItem != NULL);
464 assert (Manifest != NULL);
480 DerResult = DERImg4ManifestCollectCertInfo (&CurCertInfo);
488 Index < DER_IMG4_MAN_CERT_CHAIN_MAX && LeftCertSize > 0;
489 ++Index, LeftCertSize -= CertSize
491 CopyMem (&ParentCertInfo, &CurCertInfo,
sizeof (ParentCertInfo));
493 CertItem.
data = CertWalker;
494 CertItem.
length = LeftCertSize;
501 CertSize = NextCert - CertWalker;
505 assert (CertSize <= LeftCertSize);
513 CertWalker = NextCert;
515 DerResult = DERImg4ManifestCollectCertInfo (&CurCertInfo);
529 if (LeftCertSize != 0) {
545 sizeof (CertSigAlgoId)
582 assert (PropSetItem != NULL);
583 assert (PropItem != NULL);
591 if (PropInfo.
tag == PropName) {
616 CopyMem (PropertyItemSpec, PropertyItemSpecTpl,
sizeof (PropertyItemSpecTpl));
618 PropertyItemSpec[1].
tag = PropValueTag;
620 assert (PropSetItem != NULL);
621 assert (Property != NULL);
675 assert (PropItem != NULL);
676 assert (Property != NULL);
735 assert (PropItem != NULL);
770 assert (PropItem != NULL);
799 assert (PropItem != NULL);
842 assert (ManPropSetItem != NULL);
843 assert (ObjPropSetItem != NULL);
844 assert (ManBodyCertItem != NULL);
861 BodyPropSetItem.
data = ObjPropSetItem->
data;
864 BodyPropSetItem.
data = ManPropSetItem->
data;
947 return LoopDerResult;
965 assert (PropItem != NULL);
1165 assert (ManInfo != NULL);
1166 assert (PropSetItem != NULL);
1208 return LoopDerResult;
1232 const void *ManBuffer,
1254 assert (ManInfo != NULL);
1255 assert (ManBuffer != NULL);
1261 ManifestItem.
length = ManSize;
1277 if (DerManifestSize != ManSize) {
1283 DERNumImg4ManifestItemSpecs,
1284 DERImg4ManifestItemSpecs,
1296 DerResult = DERImg4ManifestVerifyMagic (&Manifest.
magic);
1306 if (ManVersion != 0) {
1359 &ManBodyCertRoleItem
1365 DERMemset (ManInfo, 0,
sizeof (*ManInfo));
#define ARRAY_SIZE(Array)
const DERItemSpec DERTBSCertItemSpecs[]
const DERShort DERNumSignedCertCrlItemSpecs
const DERShort DERNumTBSCertItemSpecs
const DERShort DERNumExtensionItemSpecs
const DERItemSpec DERExtensionItemSpecs[]
const DERItemSpec DERSignedCertCrlItemSpecs[]
DERReturn DERParseSequenceContent(const DERItem *content, DERShort numItems, const DERItemSpec *itemSpecs, void *dest, DERSize sizeToZero)
DERReturn DERDecodeSeqInit(const DERItem *der, DERTag *tag, DERSequence *derSeq)
DERReturn DERDecodeSeqNext(DERSequence *derSeq, DERDecodedInfo *decoded)
DERReturn DERDecodeSeqContentInit(const DERItem *content, DERSequence *derSeq)
DERReturn DERDecodeItem(const DERItem *der, DERDecodedInfo *decoded)
DERReturn DERParseBitString(const DERItem *contents, DERItem *bitStringBytes, DERByte *numUnusedBits)
DERReturn DERParseSequence(const DERItem *der, DERShort numItems, const DERItemSpec *itemSpecs, void *dest, DERSize sizeToZero)
DERReturn DERImg4FindPropertyItem(const DERItem *PropSetItem, DERTag PropName, DERItem *PropItem)
bool DERItemNull(const DERItem *Item)
DERReturn DERImg4FindDecodeProperty(const DERItem *PropSetItem, DERTag PropName, DERTag PropValueTag, DERImg4Property *Property)
DERReturn DERImg4DecodePropertyInteger32(const DERItem *PropItem, uint32_t PropName, uint32_t *Value)
DERReturn DERImg4ManifestVerifyCertIssuer(const Image4CertificateInfo *ChildCertInfo, const Image4CertificateInfo *ParentCertInfo)
DERReturn DERImg4ManifestDecodeProperty(const DERItem *PropItem, uint32_t PropName, DERImg4ManifestInfo *ManInfo, uint32_t PropSetType)
DERReturn DERImg4DecodePropertyInteger64(const DERItem *PropItem, uint32_t PropName, uint64_t *Value)
DERReturn DERImg4DecodeProperty(const DERItem *PropItem, DERTag PropName, DERImg4Property *Property)
bool DERItemCompare(const DERItem *Item1, const DERItem *Item2)
DERReturn DERImg4ParseInteger64(const DERItem *Contents, uint64_t *Result)
DERReturn DERImg4ParseInteger32(const DERItem *Contents, uint32_t *Result)
DERReturn DERImg4ManifestDecodeProperties(DERImg4ManifestInfo *ManInfo, const DERItem *PropSetItem, uint32_t PropSetType)
@ Img4ManifestPropSetTypeObjp
@ Img4ManifestPropSetTypeManp
DERReturn DERVerifySignature(const DERItem *PubKeyItem, const DERItem *SigItem, const DERItem *DataItem, const DERItem *algoOid)
DERReturn DERImg4ValidateCertificateRole(const DERItem *ManPropSetItem, const DERItem *ObjPropSetItem, const DERItem *ManBodyCertItem)
DERReturn DERImg4ManifestVerifySignature(DERItem *ManCertRoleItem, const DERImg4Manifest *Manifest)
DERReturn DERImg4ParseManifest(DERImg4ManifestInfo *ManInfo, const void *ManBuffer, size_t ManSize, uint32_t ObjType)
DERReturn DERImg4ManifestDecodePropertyBoolean(const DERItem *PropItem, uint32_t PropName, bool *Value)
#define DER_IMG4_TAG_OBJ_EKEY
#define DER_IMG4_TAG_MAN_IUOB
#define DER_IMG4_TAG_MAN_ECID
#define DER_IMG4_TAG_MAN_CHIP
#define DER_IMG4_TAG_MAN_PROPS
#define DER_IMG4_TAG_MAN_BORD
#define DER_IMG4_ENCODE_PROPERTY_NAME(Name)
#define DER_IMG4_TAG_MAN_XUGS
#define DER_IMG4_TAG_MAN_MPRO
#define DER_IMG4_TAG_OBJ_PROPS
#define DER_IMG4_TAG_OBJ_EPRO
#define DER_IMG4_TAG_MAN_MSEC
#define DER_IMG4_TAG_MAN_SDOM
#define DER_IMG4_TAG_MAN_AMNM
#define DER_IMG4_TAG_MAN_MAGIC
#define DER_IMG4_PROPERTY_SPEC_INIT
#define DER_IMG4_TAG_MAN_CEPO
#define DER_IMG4_TAG_OBJ_ESEC
#define DER_IMG4_TAG_OBJ_DGST
#define DER_IMG4_TAG_MAN_BODY
const DERItemSpec DERRSAPubKeyPKCS1ItemSpecs[]
const DERShort DERNumSubjPubKeyInfoItemSpecs
const DERItemSpec DERSubjPubKeyInfoItemSpecs[]
const DERItemSpec DERAlgorithmIdItemSpecs[]
const DERShort DERNumAlgorithmIdItemSpecs
const DERShort DERNumRSAPubKeyPKCS1ItemSpecs
const DERItem oidAppleImg4ManifestCertSpec
VOID *EFIAPI CopyMem(OUT VOID *DestinationBuffer, IN CONST VOID *SourceBuffer, IN UINTN Length)
#define ASN1_CONSTR_SEQUENCE
#define ASN1_CONTEXT_SPECIFIC
#define ASN1_OCTET_STRING
#define DERMemmove(dst, src, len)
#define DERMemcmp(b1, b2, len)
#define DERMemset(ptr, c, len)
const UINTN * DERImg4RootCertificateSize
#define DER_IMG4_MAX_CERT_SIZE
const UINT8 * DERImg4RootCertificate
bool DERImg4VerifySignature(DERByte *Modulus, DERSize ModulusSize, uint32_t Exponent, const uint8_t *Signature, size_t SignatureSize, uint8_t *Data, size_t DataSize, const DERItem *AlgoOid)
bool DEROidCompare(const DERItem *oid1, const DERItem *oid2)
bool effectiveSecurityMode
bool effectiveProductionStatus
uint32_t certificateEpoch
uint8_t imageDigest[DER_IMG4_MAX_DIGEST_SIZE]
bool hasEffectiveSecurityMode
DERImg4Environment environment
bool hasEffectiveProductionStatus
DERSignedCertCrl certCtrl