Imported Upstream version 1.20.1
[platform/upstream/krb5.git] / src / lib / gssapi / krb5 / util_cksum.c
index 5228df3..2d6b50b 100644 (file)
 
 /* Checksumming the channel bindings always uses plain MD5.  */
 krb5_error_code
-kg_checksum_channel_bindings(context, cb, cksum, bigend)
+kg_checksum_channel_bindings(context, cb, cksum)
     krb5_context context;
     gss_channel_bindings_t cb;
     krb5_checksum *cksum;
-    int bigend;
 {
     size_t len;
     char *buf = 0;
@@ -40,7 +39,6 @@ kg_checksum_channel_bindings(context, cb, cksum, bigend)
     size_t sumlen;
     krb5_data plaind;
     krb5_error_code code;
-    void *temp;
 
     /* initialize the the cksum */
     code = krb5_c_checksum_length(context, CKSUMTYPE_RSA_MD5, &sumlen);
@@ -49,6 +47,7 @@ kg_checksum_channel_bindings(context, cb, cksum, bigend)
 
     cksum->checksum_type = CKSUMTYPE_RSA_MD5;
     cksum->length = sumlen;
+    cksum->magic = KV5M_CHECKSUM;
 
     /* generate a buffer full of zeros if no cb specified */
 
@@ -75,11 +74,11 @@ kg_checksum_channel_bindings(context, cb, cksum, bigend)
 
     ptr = buf;
 
-    TWRITE_INT(ptr, cb->initiator_addrtype, bigend);
-    TWRITE_BUF(ptr, cb->initiator_address, bigend);
-    TWRITE_INT(ptr, cb->acceptor_addrtype, bigend);
-    TWRITE_BUF(ptr, cb->acceptor_address, bigend);
-    TWRITE_BUF(ptr, cb->application_data, bigend);
+    TWRITE_INT(ptr, cb->initiator_addrtype, 0);
+    TWRITE_BUF(ptr, cb->initiator_address, 0);
+    TWRITE_INT(ptr, cb->acceptor_addrtype, 0);
+    TWRITE_BUF(ptr, cb->acceptor_address, 0);
+    TWRITE_BUF(ptr, cb->application_data, 0);
 
     /* checksum the data */
 
@@ -88,21 +87,6 @@ kg_checksum_channel_bindings(context, cb, cksum, bigend)
 
     code = krb5_c_make_checksum(context, CKSUMTYPE_RSA_MD5, 0, 0,
                                 &plaind, cksum);
-    if (code)
-        goto cleanup;
-
-    if ((temp = xmalloc(cksum->length)) == NULL) {
-        krb5_free_checksum_contents(context, cksum);
-        code = ENOMEM;
-        goto cleanup;
-    }
-
-    memcpy(temp, cksum->contents, cksum->length);
-    krb5_free_checksum_contents(context, cksum);
-    cksum->contents = (krb5_octet *)temp;
-
-    /* success */
-cleanup:
     if (buf)
         xfree(buf);
     return code;
@@ -123,15 +107,13 @@ kg_make_checksum_iov_v1(krb5_context context,
     krb5_error_code code;
     gss_iov_buffer_desc *header;
     krb5_crypto_iov *kiov;
-    size_t kiov_count;
     int i = 0, j;
     size_t conf_len = 0, token_header_len;
 
-    header = kg_locate_iov(iov, iov_count, GSS_IOV_BUFFER_TYPE_HEADER);
+    header = kg_locate_header_iov(iov, iov_count, toktype);
     assert(header != NULL);
 
-    kiov_count = 3 + iov_count;
-    kiov = (krb5_crypto_iov *)xmalloc(kiov_count * sizeof(krb5_crypto_iov));
+    kiov = calloc(iov_count + 3, sizeof(krb5_crypto_iov));
     if (kiov == NULL)
         return ENOMEM;
 
@@ -173,7 +155,7 @@ kg_make_checksum_iov_v1(krb5_context context,
         i++;
     }
 
-    code = krb5_k_make_checksum_iov(context, type, seq, sign_usage, kiov, kiov_count);
+    code = krb5_k_make_checksum_iov(context, type, seq, sign_usage, kiov, i);
     if (code == 0) {
         checksum->length = kiov[0].data.length;
         checksum->contents = (unsigned char *)kiov[0].data.data;
@@ -193,6 +175,7 @@ checksum_iov_v3(krb5_context context,
                 krb5_keyusage sign_usage,
                 gss_iov_buffer_desc *iov,
                 int iov_count,
+                int toktype,
                 krb5_boolean verify,
                 krb5_boolean *valid)
 {
@@ -211,7 +194,7 @@ checksum_iov_v3(krb5_context context,
     if (code != 0)
         return code;
 
-    header = kg_locate_iov(iov, iov_count, GSS_IOV_BUFFER_TYPE_HEADER);
+    header = kg_locate_header_iov(iov, iov_count, toktype);
     assert(header != NULL);
 
     trailer = kg_locate_iov(iov, iov_count, GSS_IOV_BUFFER_TYPE_TRAILER);
@@ -274,10 +257,11 @@ kg_make_checksum_iov_v3(krb5_context context,
                         krb5_key key,
                         krb5_keyusage sign_usage,
                         gss_iov_buffer_desc *iov,
-                        int iov_count)
+                        int iov_count,
+                        int toktype)
 {
     return checksum_iov_v3(context, type, rrc, key,
-                           sign_usage, iov, iov_count, 0, NULL);
+                           sign_usage, iov, iov_count, toktype, 0, NULL);
 }
 
 krb5_error_code
@@ -288,8 +272,9 @@ kg_verify_checksum_iov_v3(krb5_context context,
                           krb5_keyusage sign_usage,
                           gss_iov_buffer_desc *iov,
                           int iov_count,
+                          int toktype,
                           krb5_boolean *valid)
 {
     return checksum_iov_v3(context, type, rrc, key,
-                           sign_usage, iov, iov_count, 1, valid);
+                           sign_usage, iov, iov_count, toktype, 1, valid);
 }