* Extend auth_pack
authorSam Hartman <hartmans@mit.edu>
Mon, 19 Sep 2011 00:35:10 +0000 (00:35 +0000)
committerSam Hartman <hartmans@mit.edu>
Mon, 19 Sep 2011 00:35:10 +0000 (00:35 +0000)
* extend dh_rep
* add krb5_free_octet_data
* extend pkinit free functions

pkinit: add supportedKDFs and kdfID to structures

git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@25194 dc483132-0cff-0310-8789-dd5450dbe970

src/include/k5-int-pkinit.h
src/include/krb5/krb5.hin
src/lib/krb5/krb/kfree.c
src/lib/krb5/libkrb5.exports
src/plugins/preauth/pkinit/pkinit_lib.c

index 47e16e1c34287699196e0d32e7c368bd706208ad..4f22cddb660c54fa7d09bdfe08683f865ca32b09 100644 (file)
@@ -65,12 +65,13 @@ typedef struct _krb5_subject_pk_info {
     krb5_octet_data             subjectPublicKey; /* BIT STRING */
 } krb5_subject_pk_info;
 
-/* AuthPack */
+/** AuthPack  from RFC 4556*/
 typedef struct _krb5_auth_pack {
     krb5_pk_authenticator       pkAuthenticator;
     krb5_subject_pk_info        *clientPublicValue; /* Optional */
     krb5_algorithm_identifier   **supportedCMSTypes; /* Optional */
     krb5_octet_data             clientDHNonce; /* Optional */
+krb5_octet_data **supportedKDFs; /*< object identifiers of KDFs; OPTIONAL*/
 } krb5_auth_pack;
 
 /* AuthPack draft9 */
@@ -116,10 +117,11 @@ typedef struct _krb5_pa_pk_as_req {
     krb5_octet_data kdcPkId; /* Optional */
 } krb5_pa_pk_as_req;
 
-/* DHRepInfo */
+/** Pkinit DHRepInfo */
 typedef struct _krb5_dh_rep_info {
     krb5_octet_data dhSignedData;
     krb5_octet_data serverDHNonce; /* Optional */
+    krb5_octet_data *kdfID; /**< OID of selected KDF OPTIONAL*/
 } krb5_dh_rep_info;
 
 /* KDCDHKeyInfo */
index 049bf91f10b24f7c10e524db3e2251800ef0691e..5b6f0b9c1e64566fa792688c41832c83a2ac0bd9 100644 (file)
@@ -4647,7 +4647,22 @@ void KRB5_CALLCONV
 krb5_free_data(krb5_context context, krb5_data *val);
 
 /**
- * Free the contents of a krb_data structure.
+ * @brief Free storage associated with a @c krb5_octet_data structure and its pointer.
+ *
+ * @param context           Context structure [input, output]
+ * @param val               Pointer to data structure to be freed [input, output]
+ *
+ * @return
+ * None
+ */
+void KRB5_CALLCONV
+krb5_free_octet_data(krb5_context context, krb5_octet_data *val);
+
+/**
+ * @brief Free the contents of a @c _krb5_data structure and zero the data field.
+ *
+ * @param context           Context structure [input, output]
+ * @param val               Pointer to data structure to be freed [input, output]
  *
  * @param [in] context          Library context
  * @param [in] val              Data structure to free contents of
index 72b685759a853826a9746fa663e0e5c9b98ef84f..071a9772845086019a0355865f64cddc9bdcbd05 100644 (file)
@@ -236,6 +236,16 @@ krb5_free_data(krb5_context context, krb5_data *val)
     free(val);
 }
 
+
+void KRB5_CALLCONV
+krb5_free_octet_data(krb5_context context, krb5_octet_data *val)
+{
+    if (val == NULL)
+        return;
+    free(val->data);
+    free(val);
+}
+
 void KRB5_CALLCONV
 krb5_free_data_contents(krb5_context context, krb5_data *val)
 {
index 2637712b90b0f89d068847242846451e2bdf8c76..87f462a7c1163d89718a422f7392f999fba9b19b 100644 (file)
@@ -302,6 +302,7 @@ krb5_free_keytab_entry_contents
 krb5_free_krbhst
 krb5_free_ktypes
 krb5_free_last_req
+krb5_free_octet_data
 krb5_free_pa_data
 krb5_free_pa_enc_ts
 krb5_free_pa_for_user
index fd4c0b52868e735dc0aea42f6ffb588abf9245c5..8eb64019cba532afd055cf3cb0ae0cf8994e3599 100644 (file)
@@ -163,6 +163,14 @@ free_krb5_auth_pack(krb5_auth_pack **in)
     free((*in)->pkAuthenticator.paChecksum.contents);
     if ((*in)->supportedCMSTypes != NULL)
         free_krb5_algorithm_identifiers(&((*in)->supportedCMSTypes));
+    if (*(*in)->supportedKDFs) {
+        krb5_octet_data **supportedKDFs =
+            (*in)->supportedKDFs;
+        unsigned i;
+        for (i = 0; supportedKDFs[i]; i++)
+            krb5_free_octet_data(NULL, supportedKDFs[i]);
+        free(supportedKDFs);
+    }
     free(*in);
 }
 
@@ -181,6 +189,7 @@ free_krb5_pa_pk_as_rep(krb5_pa_pk_as_rep **in)
     if (*in == NULL) return;
     switch ((*in)->choice) {
     case choice_pa_pk_as_rep_dhInfo:
+        krb5_free_octet_data(NULL, (*in)->u.dh_Info.kdfID);
         free((*in)->u.dh_Info.dhSignedData.data);
         break;
     case choice_pa_pk_as_rep_encKeyPack: