]> git.saurik.com Git - apple/security.git/blobdiff - Security/libsecurity_cryptkit/lib/feeDigitalSignature.h
Security-57031.1.35.tar.gz
[apple/security.git] / Security / libsecurity_cryptkit / lib / feeDigitalSignature.h
diff --git a/Security/libsecurity_cryptkit/lib/feeDigitalSignature.h b/Security/libsecurity_cryptkit/lib/feeDigitalSignature.h
new file mode 100644 (file)
index 0000000..7429cba
--- /dev/null
@@ -0,0 +1,111 @@
+/* Copyright (c) 1998,2011,2014 Apple Inc.  All Rights Reserved.
+ *
+ * NOTICE: USE OF THE MATERIALS ACCOMPANYING THIS NOTICE IS SUBJECT
+ * TO THE TERMS OF THE SIGNED "FAST ELLIPTIC ENCRYPTION (FEE) REFERENCE
+ * SOURCE CODE EVALUATION AGREEMENT" BETWEEN APPLE, INC. AND THE
+ * ORIGINAL LICENSEE THAT OBTAINED THESE MATERIALS FROM APPLE,
+ * INC.  ANY USE OF THESE MATERIALS NOT PERMITTED BY SUCH AGREEMENT WILL
+ * EXPOSE YOU TO LIABILITY.
+ ***************************************************************************
+ *
+ * feeDigitalSignature.h - generic, portable FEE Digital Signature object
+ *
+ * Revision History
+ * ----------------
+ * 22 Aug 96 at NeXT
+ *     Created.
+ */
+
+#ifndef        _CK_FEEDIGITALSIG_H_
+#define _CK_FEEDIGITALSIG_H_
+
+#if    !defined(__MACH__)
+#include <feeTypes.h>
+#include <feePublicKey.h>
+#else
+#include <security_cryptkit/feeTypes.h>
+#include <security_cryptkit/feePublicKey.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define FEE_SIG_MAGIC          0xfee00516
+
+/*
+ * Opaque signature handle.
+ */
+typedef void *feeSig;
+
+/*
+ * Create new feeSig object, including a random large integer 'Pm' for
+ * possible use in salting a feeHash object.
+ */
+feeSig feeSigNewWithKey(
+       feePubKey               pubKey,
+       feeRandFcn              randFcn,                /* optional */
+       void                    *randRef);              /* optional */
+
+void feeSigFree(
+       feeSig                  sig);
+
+/*
+ * Obtain a malloc'd Pm after or feeSigNewWithKey() feeSigParse()
+ */
+unsigned char *feeSigPm(
+       feeSig                  sig,
+       unsigned                *PmLen);                /* RETURNED */
+
+/*
+ * Sign specified block of data (most likely a hash result) using
+ * specified feePubKey.
+ */
+feeReturn feeSigSign(
+       feeSig                  sig,
+       const unsigned char     *data,          // data to be signed
+       unsigned                dataLen,        // in bytes
+       feePubKey               pubKey);
+
+/*
+ * Given a feeSig processed by feeSigSign, obtain a malloc'd byte
+ * array representing the signature.
+ */
+feeReturn feeSigData(
+       feeSig                  sig,
+       unsigned char           **sigData,      // malloc'd and RETURNED
+       unsigned                *sigDataLen);   // RETURNED
+
+/*
+ * Obtain a feeSig object by parsing an existing signature block.
+ * Note that if Pm is used to salt a hash of the signed data, this must
+ * be performed prior to hashing.
+ */
+feeReturn feeSigParse(
+       const unsigned char     *sigData,
+       size_t                  sigDataLen,
+       feeSig                  *sig);          // RETURNED
+
+/*
+ * Verify signature, obtained via feeSigParse, for specified
+ * data (most likely a hash result) and feePubKey. Returns FR_Success or
+ * FR_InvalidSignature.
+ */
+feeReturn feeSigVerify(
+       feeSig                  sig,
+       const unsigned char     *data,
+       unsigned                dataLen,
+       feePubKey               pubKey);
+
+/*
+ * For given key, calculate maximum signature size. 
+ */
+feeReturn feeSigSize(
+       feePubKey               pubKey,
+       unsigned                *maxSigLen);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*_CK_FEEDIGITALSIG_H_*/