Add "extern C {...} to header files for C++ builds.
[freeradius.git] / src / include / sha1.h
index 5d2dc55..0a431a8 100644 (file)
@@ -1,25 +1,53 @@
-#ifndef _LRAD_SHA1_H
-#define _LRAD_SHA1_H
+#ifndef _FR_SHA1_H
+#define _FR_SHA1_H
+
+#ifdef WITH_OPENSSL_SHA1
+#include <openssl/sha.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef WITH_OPENSSL_SHA1
+typedef struct {
+    uint32_t state[5];
+    uint32_t count[2];
+    uint8_t buffer[64];
+} fr_SHA1_CTX;
+
+void fr_SHA1Transform(uint32_t state[5], const uint8_t buffer[64]);
+void fr_SHA1Init(fr_SHA1_CTX* context);
+void fr_SHA1Update(fr_SHA1_CTX* context, const uint8_t* data, unsigned int len);
+void fr_SHA1Final(uint8_t digest[20], fr_SHA1_CTX* context);
 
 /*
- *  FreeRADIUS defines to ensure globally unique SHA1 function names,
- *  so that we don't pick up vendor-specific broken SHA1 libraries.
+ * this version implements a raw SHA1 transform, no length is appended,
+ * nor any 128s out to the block size.
+ *
+ *     Hmm... this function doesn't appear to be used anywhere.
  */
-#define SHA1_CTX               librad_SHA1_CTX
-#define SHA1Transform          librad_SHA1Transform
-#define SHA1Init               librad_SHA1Init
-#define SHA1Update             librad_SHA1Update
-#define SHA1Final              librad_SHA1Final
+void fr_SHA1FinalNoLen(uint8_t digest[20], fr_SHA1_CTX* context);
 
-typedef struct {
-    unsigned long state[5];
-    unsigned long count[2];
-    unsigned char buffer[64];
-} SHA1_CTX;
+#else  /* WITH_OPENSSL_SHA1 */
+
+#define fr_SHA1_CTX    SHA_CTX
+#define fr_SHA1Init    SHA1_Init
+#define fr_SHA1Update  SHA1_Update
+#define fr_SHA1Final   SHA1_Final
+#define fr_SHA1Transform SHA1_Transform
+#endif
+
+/*
+ * FIPS 186-2 PRF based upon SHA1.
+ *
+ *     Hmm... this is only used in src/modules/rlm_eap/libeap/
+ *     why is the prototype here?
+ */
+extern void fips186_2prf(uint8_t mk[20], uint8_t finalkey[160]);
 
-void SHA1Transform(unsigned long state[5], const unsigned char buffer[64]);
-void SHA1Init(SHA1_CTX* context);
-void SHA1Update(SHA1_CTX* context, const unsigned char* data, unsigned int len);
-void SHA1Final(unsigned char digest[20], SHA1_CTX* context);
+#ifdef __cplusplus
+}
+#endif
 
-#endif /* _LRAD_SHA1_H */
+#endif /* _FR_SHA1_H */