* - MD5, SHA1 and SHA2 in libcrypto: with _ after algorithm name
*
* Windows:
- * - MD5, SHA1 and SHA2 in archive_windows.c: with _ after algorithm name
- * and __la_ prefix.
+ * - MD5, SHA1 and SHA2 in archive_windows.c: without algorithm name
+ * and with __la_ prefix.
*/
#if defined(ARCHIVE_HASH_MD5_WIN) ||\
defined(ARCHIVE_HASH_SHA1_WIN) || defined(ARCHIVE_HASH_SHA256_WIN) ||\
HCRYPTPROV cryptProv;
HCRYPTHASH hash;
} Digest_CTX;
+extern void __la_hash_Init(Digest_CTX *, ALG_ID);
+extern void __la_hash_Final(unsigned char *, size_t, Digest_CTX *);
+extern void __la_hash_Update(Digest_CTX *, const unsigned char *, size_t);
#endif
#if defined(ARCHIVE_HASH_MD5_LIBC)
# define ARCHIVE_HAS_MD5
# define MD5_DIGEST_LENGTH 16
typedef Digest_CTX archive_md5_ctx;
-extern void __la_MD5_Init(Digest_CTX *);
-extern void __la_MD5_Final(unsigned char *, Digest_CTX *);
-extern void __la_MD5_Update(Digest_CTX *, const unsigned char *, size_t);
-# define archive_md5_init(ctx) __la_MD5_Init(ctx)
-# define archive_md5_final(ctx, buf) __la_MD5_Final(buf, ctx)
-# define archive_md5_update(ctx, buf, n) __la_MD5_Update(ctx, buf, n)
+# define archive_md5_init(ctx) __la_hash_Init(ctx, CALG_MD5)
+# define archive_md5_final(ctx, buf) __la_hash_Final(buf, MD5_DIGEST_LENGTH, ctx)
+# define archive_md5_update(ctx, buf, n) __la_hash_Update(ctx, buf, n)
#endif
#if defined(ARCHIVE_HASH_RMD160_LIBC)
# define ARCHIVE_HAS_SHA1
# define SHA1_DIGEST_LENGTH 20
typedef Digest_CTX archive_sha1_ctx;
-extern void __la_SHA1_Init(Digest_CTX *);
-extern void __la_SHA1_Final(unsigned char *, Digest_CTX *);
-extern void __la_SHA1_Update(Digest_CTX *, const unsigned char *, size_t);
-# define archive_sha1_init(ctx) __la_SHA1_Init(ctx)
-# define archive_sha1_final(ctx, buf) __la_SHA1_Final(buf, ctx)
-# define archive_sha1_update(ctx, buf, n) __la_SHA1_Update(ctx, buf, n)
+# define archive_sha1_init(ctx) __la_hash_Init(ctx, CALG_SHA1)
+# define archive_sha1_final(ctx, buf) __la_hash_Final(buf, SHA1_DIGEST_LENGTH, ctx)
+# define archive_sha1_update(ctx, buf, n) __la_hash_Update(ctx, buf, n)
#endif
#if defined(ARCHIVE_HASH_SHA256_LIBC)
# define ARCHIVE_HAS_SHA256
# define SHA256_DIGEST_LENGTH 32
typedef Digest_CTX archive_sha256_ctx;
-extern void __la_SHA256_Init(Digest_CTX *);
-extern void __la_SHA256_Final(unsigned char *, Digest_CTX *);
-extern void __la_SHA256_Update(Digest_CTX *, const unsigned char *, size_t);
-# define archive_sha256_init(ctx) __la_SHA256_Init(ctx)
-# define archive_sha256_final(ctx, buf) __la_SHA256_Final(buf, ctx)
-# define archive_sha256_update(ctx, buf, n) __la_SHA256_Update(ctx, buf, n)
+# define archive_sha256_init(ctx) __la_hash_Init(ctx, CALG_SHA_256)
+# define archive_sha256_final(ctx, buf) __la_hash_Final(buf, SHA256_DIGEST_LENGTH, ctx)
+# define archive_sha256_update(ctx, buf, n) __la_hash_Update(ctx, buf, n)
#endif
#if defined(ARCHIVE_HASH_SHA384_LIBC)
# define ARCHIVE_HAS_SHA384
# define SHA384_DIGEST_LENGTH 48
typedef Digest_CTX archive_sha384_ctx;
-extern void __la_SHA384_Init(Digest_CTX *);
-extern void __la_SHA384_Final(unsigned char *, Digest_CTX *);
-extern void __la_SHA384_Update(Digest_CTX *, const unsigned char *, size_t);
-# define archive_sha384_init(ctx) __la_SHA384_Init(ctx)
-# define archive_sha384_final(ctx, buf) __la_SHA384_Final(buf, ctx)
-# define archive_sha384_update(ctx, buf, n) __la_SHA384_Update(ctx, buf, n)
+# define archive_sha384_init(ctx) __la_hash_Init(ctx, CALG_SHA_384)
+# define archive_sha384_final(ctx, buf) __la_hash_Final(buf, SHA384_DIGEST_LENGTH, ctx)
+# define archive_sha384_update(ctx, buf, n) __la_hash_Update(ctx, buf, n)
#endif
#if defined(ARCHIVE_HASH_SHA512_LIBC)
# define ARCHIVE_HAS_SHA512
# define SHA512_DIGEST_LENGTH 64
typedef Digest_CTX archive_sha512_ctx;
-extern void __la_SHA512_Init(Digest_CTX *);
-extern void __la_SHA512_Final(unsigned char *, Digest_CTX *);
-extern void __la_SHA512_Update(Digest_CTX *, const unsigned char *, size_t);
-# define archive_sha512_init(ctx) __la_SHA512_Init(ctx)
-# define archive_sha512_final(ctx, buf) __la_SHA512_Final(buf, ctx)
-# define archive_sha512_update(ctx, buf, n) __la_SHA512_Update(ctx, buf, n)
+# define archive_sha512_init(ctx) __la_hash_Init(ctx, CALG_SHA_512)
+# define archive_sha512_final(ctx, buf) __la_hash_Final(buf, SHA512_DIGEST_LENGTH, ctx)
+# define archive_sha512_update(ctx, buf, n) __la_hash_Update(ctx, buf, n)
#endif
/*
* Message digest functions.
*/
-static void
-Digest_Init(Digest_CTX *ctx, ALG_ID algId)
+void
+__la_hash_Init(Digest_CTX *ctx, ALG_ID algId)
{
ctx->valid = 0;
ctx->valid = 1;
}
-static void
-Digest_Update(Digest_CTX *ctx, const unsigned char *buf, size_t len)
+void
+__la_hash_Update(Digest_CTX *ctx, const unsigned char *buf, size_t len)
{
if (!ctx->valid)
(DWORD)len, 0);
}
-static void
-Digest_Final(unsigned char *buf, int bufsize, Digest_CTX *ctx)
+void
+__la_hash_Final(unsigned char *buf, size_t bufsize, Digest_CTX *ctx)
{
DWORD siglen = bufsize;
ctx->valid = 0;
}
-#define DIGEST_INIT(name, algid) \
-void __la_ ## name ## _Init(Digest_CTX *ctx)\
-{\
- Digest_Init(ctx, algid);\
-}
-
-#define DIGEST_UPDATE(name) \
-void __la_ ## name ## _Update(Digest_CTX *ctx, const unsigned char *buf, size_t len)\
-{\
- Digest_Update(ctx, buf, len);\
-}
-
-#define DIGEST_FINAL(name, size) \
-void __la_ ## name ## _Final(unsigned char *buf, Digest_CTX *ctx)\
-{\
- Digest_Final(buf, size, ctx);\
-}
-
-#if defined(ARCHIVE_HASH_MD5_WIN)
-DIGEST_INIT(MD5, CALG_MD5)
-DIGEST_UPDATE(MD5)
-DIGEST_FINAL(MD5, MD5_DIGEST_LENGTH)
-#endif
-
-#if defined(ARCHIVE_HASH_SHA1_WIN)
-DIGEST_INIT(SHA1, CALG_SHA1)
-DIGEST_UPDATE(SHA1)
-DIGEST_FINAL(SHA1, SHA1_DIGEST_LENGTH)
-#endif
-
-/*
- * SHA256 nor SHA384 nor SHA512 are not supported on Windows XP and Windows 2000.
- */
-#if defined(ARCHIVE_HASH_SHA256_WIN) && defined(CALG_SHA_256)
-DIGEST_INIT(SHA256, CALG_SHA_256)
-DIGEST_UPDATE(SHA256)
-DIGEST_FINAL(SHA256, SHA256_DIGEST_LENGTH)
-#endif
-
-#if defined(ARCHIVE_HASH_SHA384_WIN) && defined(CALG_SHA_384)
-DIGEST_INIT(SHA384, CALG_SHA_384)
-DIGEST_UPDATE(SHA384)
-DIGEST_FINAL(SHA384, SHA384_DIGEST_LENGTH)
-#endif
-
-#if defined(ARCHIVE_HASH_SHA512_WIN) && defined(CALG_SHA_512)
-DIGEST_INIT(SHA512, CALG_SHA_512)
-DIGEST_UPDATE(SHA512)
-DIGEST_FINAL(SHA512, SHA384_DIGEST_LENGTH)
-#endif
-
#endif /* defined(ARCHIVE_HASH_*_WIN) */
/*