]> git.saurik.com Git - apple/mdnsresponder.git/blobdiff - ServiceRegistration/hmac-macos.c
mDNSResponder-1310.40.42.tar.gz
[apple/mdnsresponder.git] / ServiceRegistration / hmac-macos.c
diff --git a/ServiceRegistration/hmac-macos.c b/ServiceRegistration/hmac-macos.c
new file mode 100644 (file)
index 0000000..949261d
--- /dev/null
@@ -0,0 +1,99 @@
+/* hash.c
+ *
+ * Copyright (c) 2019 Apple Computer, Inc. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * DNS SIG(0) signature generation for DNSSD SRP using Security Framework.
+ *
+ * Functions required for loading, saving, and generating public/private keypairs, extracting the public key
+ * into KEY RR data, and computing hashatures.
+ */
+
+#include <stdio.h>
+#include <arpa/inet.h>
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+
+#include "srp.h"
+#include "dns-msg.h"
+#define SRP_CRYPTO_MACOS_INTERNAL
+#include "srp-crypto.h"
+
+// Function to generate a signature given some data and a private key
+void
+srp_hmac_iov(hmac_key_t *key, uint8_t *output, size_t max, struct iovec *iov, int count)
+{
+    // int digest_size = 0;
+    // int i, line;
+    (void)count;(void)iov;(void)output; (void)key; (void)max;
+#define KABLOOIE line = __LINE__ - 1; goto kablooie
+#if 0
+    switch(key->algorithm) {
+    case  SRP_HMAC_TYPE_SHA256:
+        // digest_size = mbedtls_md_get_size(md_type);
+        // break;
+    default:
+        ERROR("srp_hmac_iov: unsupported HMAC hash algorithm: %d", key->algorithm);
+        return;
+    }
+    if (max < digest_size) {
+        ERROR("srp_hmac_iov: not enough space in output buffer (%lu) for hash (%d).",
+              (unsigned long)max, digest_size);
+        return;
+    }
+#endif
+    // if ((status = mbedtls_md_hmac_starts(&ctx, key->secret, key->length)) != 0) {
+    //     KABLOOIE;
+    // }
+       // for (i = 0; i < count; i++) {
+    //     if ((status = mbedtls_md_hmac_update(&ctx, iov[i].iov_base, iov[i].iov_len)) != 0) {
+    //         KABLOOIE;
+    //     }
+       // }
+       // if ((status = mbedtls_md_hmac_finish(&ctx, output)) != 0) {
+    //     KABLOOIE;
+       // }
+}
+
+int
+srp_base64_parse(char *src, size_t *len_ret, uint8_t *buf, size_t buflen)
+{
+    (void)src; (void)len_ret; (void)buf; (void)buflen;
+#if 0
+    size_t slen = strlen(src);
+    int ret = mbedtls_base64_decode(buf, buflen, len_ret, (const unsigned char *)src, slen);
+    if (ret == MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL) {
+        return ENOBUFS;
+    } else if (ret == MBEDTLS_ERR_BASE64_INVALID_CHARACTER) {
+        return EILSEQ;
+    } else if (ret < 0) {
+        return EINVAL;
+    }
+    return 0;
+#else
+    return EINVAL;
+#endif
+}
+
+// Local Variables:
+// mode: C
+// tab-width: 4
+// c-file-style: "bsd"
+// c-basic-offset: 4
+// fill-column: 108
+// indent-tabs-mode: nil
+// End: