]> git.saurik.com Git - apple/security.git/blobdiff - libsecurity_smime/lib/cmsattr.c
Security-57337.60.2.tar.gz
[apple/security.git] / libsecurity_smime / lib / cmsattr.c
index 6165481b0fe5047c136a045faab9f14e230825a9..05d0033b9ef05400ed1ad7f8ab5edde42c357673 100644 (file)
 #include "cmslocal.h"
 
 #include "secoid.h"
-#include "secitem.h"
+#include "SecAsn1Item.h"
 
 #include <security_asn1/secasn1.h>
 #include <security_asn1/secerr.h>
+#include <security_asn1/secport.h>
+
+#include <Security/SecAsn1Templates.h>
 
 /*
  * -------------------------------------------------------------------
  * with SecCmsAttributeAddValue.
  */
 SecCmsAttribute *
-SecCmsAttributeCreate(PRArenaPool *poolp, SECOidTag oidtag, CSSM_DATA_PTR value, Boolean encoded)
+SecCmsAttributeCreate(PRArenaPool *poolp, SECOidTag oidtag, SecAsn1Item * value, Boolean encoded)
 {
     SecCmsAttribute *attr;
-    CSSM_DATA_PTR copiedvalue;
+    SecAsn1Item * copiedvalue;
     void *mark;
 
     PORT_Assert (poolp != NULL);
@@ -83,13 +86,14 @@ SecCmsAttributeCreate(PRArenaPool *poolp, SECOidTag oidtag, CSSM_DATA_PTR value,
        goto loser;
 
     if (value != NULL) {
-       if ((copiedvalue = SECITEM_AllocItem(poolp, NULL, (unsigned int)value->Length)) == NULL)
+       if ((copiedvalue = SECITEM_AllocItem(poolp, NULL, value->Length)) == NULL)
            goto loser;
 
        if (SECITEM_CopyItem(poolp, copiedvalue, value) != SECSuccess)
            goto loser;
 
-       SecCmsArrayAdd(poolp, (void ***)&(attr->values), (void *)copiedvalue);
+        if (SecCmsArrayAdd(poolp, (void ***)&(attr->values), (void *)copiedvalue) != SECSuccess)
+            goto loser;
     }
 
     attr->encoded = encoded;
@@ -108,9 +112,9 @@ loser:
  * SecCmsAttributeAddValue - add another value to an attribute
  */
 OSStatus
-SecCmsAttributeAddValue(PLArenaPool *poolp, SecCmsAttribute *attr, CSSM_DATA_PTR value)
+SecCmsAttributeAddValue(PLArenaPool *poolp, SecCmsAttribute *attr, SecAsn1Item * value)
 {
-    CSSM_DATA copiedvalue;
+    SecAsn1Item copiedvalue;
     void *mark;
 
     PORT_Assert (poolp != NULL);
@@ -155,10 +159,10 @@ SecCmsAttributeGetType(SecCmsAttribute *attr)
  * - Multiple values are *not* expected.
  * - Empty values are *not* expected.
  */
-CSSM_DATA_PTR
+SecAsn1Item *
 SecCmsAttributeGetValue(SecCmsAttribute *attr)
 {
-    CSSM_DATA_PTR value;
+    SecAsn1Item * value;
 
     if (attr == NULL)
        return NULL;
@@ -178,9 +182,9 @@ SecCmsAttributeGetValue(SecCmsAttribute *attr)
  * SecCmsAttributeCompareValue - compare the attribute's first value against data
  */
 Boolean
-SecCmsAttributeCompareValue(SecCmsAttribute *attr, CSSM_DATA_PTR av)
+SecCmsAttributeCompareValue(SecCmsAttribute *attr, SecAsn1Item * av)
 {
-    CSSM_DATA_PTR value;
+    SecAsn1Item * value;
     
     if (attr == NULL)
        return PR_FALSE;
@@ -201,7 +205,7 @@ SecCmsAttributeCompareValue(SecCmsAttribute *attr, CSSM_DATA_PTR av)
  * helper function for dynamic template determination of the attribute value
  */
 static const SecAsn1Template *
-cms_attr_choose_attr_value_template(void *src_or_dest, Boolean encoding, const char *buf, void *dest)
+cms_attr_choose_attr_value_template(void *src_or_dest, Boolean encoding, const char *buf, size_t len, void *dest)
 {
     const SecAsn1Template *theTemplate;
     SecCmsAttribute *attribute;
@@ -251,6 +255,7 @@ cms_attr_choose_attr_value_template(void *src_or_dest, Boolean encoding, const c
            theTemplate = SEC_ASN1_GET(kSecAsn1ObjectIDTemplate);
            break;
        case SEC_OID_PKCS9_MESSAGE_DIGEST:
+        case SEC_OID_APPLE_HASH_AGILITY:
            encoded = PR_FALSE;
            theTemplate = SEC_ASN1_GET(kSecAsn1OctetStringTemplate);
            break;
@@ -312,8 +317,8 @@ const SecAsn1Template nss_cms_set_of_attribute_template[] = {
  * and think long and hard about the implications of making it always
  * do the reordering.)
  */
-CSSM_DATA_PTR
-SecCmsAttributeArrayEncode(PRArenaPool *poolp, SecCmsAttribute ***attrs, CSSM_DATA_PTR dest)
+SecAsn1Item *
+SecCmsAttributeArrayEncode(PRArenaPool *poolp, SecCmsAttribute ***attrs, SecAsn1Item * dest)
 {
     return SEC_ASN1EncodeItem (poolp, dest, (void *)attrs, nss_cms_set_of_attribute_template);
 }
@@ -416,7 +421,7 @@ loser:
  * SecCmsAttributeArraySetAttr - set an attribute's value in a set of attributes
  */
 OSStatus
-SecCmsAttributeArraySetAttr(PLArenaPool *poolp, SecCmsAttribute ***attrs, SECOidTag type, CSSM_DATA_PTR value, Boolean encoded)
+SecCmsAttributeArraySetAttr(PLArenaPool *poolp, SecCmsAttribute ***attrs, SECOidTag type, SecAsn1Item * value, Boolean encoded)
 {
     SecCmsAttribute *attr;
     void *mark;