EVP bindings to new SHA algorithms.
authorAndy Polyakov <appro@openssl.org>
Mon, 31 May 2004 13:14:08 +0000 (13:14 +0000)
committerAndy Polyakov <appro@openssl.org>
Mon, 31 May 2004 13:14:08 +0000 (13:14 +0000)
crypto/evp/c_alld.c
crypto/evp/evp.h
crypto/evp/m_sha1.c

index 2334a28a5e33f2e4b823971c75b7bf51497b84f0..a935aa565e65e48618969e864bf6c27451668846 100644 (file)
@@ -102,5 +102,13 @@ void OpenSSL_add_all_digests(void)
        EVP_add_digest(EVP_ripemd160());
        EVP_add_digest_alias(SN_ripemd160,"ripemd");
        EVP_add_digest_alias(SN_ripemd160,"rmd160");
+#endif
+#ifndef OPENSSL_NO_SHA256
+       EVP_add_digest(EVP_sha224());
+       EVP_add_digest(EVP_sha256());
+#endif
+#ifndef OPENSSL_NO_SHA512
+       EVP_add_digest(EVP_sha384());
+       EVP_add_digest(EVP_sha512());
 #endif
        }
index 47c8fc72a018529eaf5931d6ca6f274de90562ef..70c79b3464153a5d15b455f76b78e1fa5c802cdd 100644 (file)
@@ -82,7 +82,7 @@
 #define EVP_CAST5_KEY_SIZE             16
 #define EVP_RC5_32_12_16_KEY_SIZE      16
 */
-#define EVP_MAX_MD_SIZE                        (16+20) /* The SSLv3 md5+sha1 type */
+#define EVP_MAX_MD_SIZE                        64      /* longest known is SHA512 */
 #define EVP_MAX_KEY_LENGTH             32
 #define EVP_MAX_IV_LENGTH              16
 #define EVP_MAX_BLOCK_LENGTH           32
@@ -598,6 +598,14 @@ const EVP_MD *EVP_dss(void);
 const EVP_MD *EVP_dss1(void);
 const EVP_MD *EVP_ecdsa(void);
 #endif
+#ifndef OPENSSL_NO_SHA256
+const EVP_MD *EVP_sha224(void);
+const EVP_MD *EVP_sha256(void);
+#endif
+#ifndef OPENSSL_NO_SHA512
+const EVP_MD *EVP_sha384(void);
+const EVP_MD *EVP_sha512(void);
+#endif
 #ifndef OPENSSL_NO_MDC2
 const EVP_MD *EVP_mdc2(void);
 #endif
index 7a791a6f71a548766b24400de957b548dd65dca1..daf6db6ebeed673f19140289cb4079bee17eb1b6 100644 (file)
@@ -96,3 +96,107 @@ const EVP_MD *EVP_sha1(void)
        return(&sha1_md);
        }
 #endif
+
+#ifndef OPENSSL_NO_SHA256
+static int init224(EVP_MD_CTX *ctx)
+       { return SHA224_Init(ctx->md_data); }
+static int init256(EVP_MD_CTX *ctx)
+       { return SHA256_Init(ctx->md_data); }
+/*
+ * Even though there're separate SHA224_[Update|Final], we call
+ * SHA256 functions even in SHA224 context. This is what happens
+ * there anyway, so we can spare few CPU cycles:-)
+ */
+static int update256(EVP_MD_CTX *ctx,const void *data,size_t count)
+       { return SHA256_Update(ctx->md_data,data,count); }
+static int final256(EVP_MD_CTX *ctx,unsigned char *md)
+       { return SHA256_Final(md,ctx->md_data); }
+
+static const EVP_MD sha224_md=
+       {
+       NID_sha224,
+       NID_sha224WithRSAEncryption,
+       SHA224_DIGEST_LENGTH,
+       0,
+       init224,
+       update256,
+       final256,
+       NULL,
+       NULL,
+       EVP_PKEY_RSA_method,
+       SHA256_CBLOCK,
+       sizeof(EVP_MD *)+sizeof(SHA256_CTX),
+       };
+
+const EVP_MD *EVP_sha224(void)
+       { return(&sha224_md); }
+
+static const EVP_MD sha256_md=
+       {
+       NID_sha256,
+       NID_sha256WithRSAEncryption,
+       SHA256_DIGEST_LENGTH,
+       0,
+       init256,
+       update256,
+       final256,
+       NULL,
+       NULL,
+       EVP_PKEY_RSA_method,
+       SHA256_CBLOCK,
+       sizeof(EVP_MD *)+sizeof(SHA256_CTX),
+       };
+
+const EVP_MD *EVP_sha256(void)
+       { return(&sha256_md); }
+#endif /* ifndef OPENSSL_NO_SHA256 */
+
+#ifndef OPENSSL_NO_SHA512
+static int init384(EVP_MD_CTX *ctx)
+       { return SHA384_Init(ctx->md_data); }
+static int init512(EVP_MD_CTX *ctx)
+       { return SHA512_Init(ctx->md_data); }
+/* See comment in SHA224/256 section */
+static int update512(EVP_MD_CTX *ctx,const void *data,size_t count)
+       { return SHA512_Update(ctx->md_data,data,count); }
+static int final512(EVP_MD_CTX *ctx,unsigned char *md)
+       { return SHA512_Final(md,ctx->md_data); }
+
+static const EVP_MD sha384_md=
+       {
+       NID_sha384,
+       NID_sha384WithRSAEncryption,
+       SHA384_DIGEST_LENGTH,
+       0,
+       init384,
+       update512,
+       final512,
+       NULL,
+       NULL,
+       EVP_PKEY_RSA_method,
+       SHA512_CBLOCK,
+       sizeof(EVP_MD *)+sizeof(SHA512_CTX),
+       };
+
+const EVP_MD *EVP_sha384(void)
+       { return(&sha384_md); }
+
+static const EVP_MD sha512_md=
+       {
+       NID_sha512,
+       NID_sha512WithRSAEncryption,
+       SHA512_DIGEST_LENGTH,
+       0,
+       init512,
+       update512,
+       final512,
+       NULL,
+       NULL,
+       EVP_PKEY_RSA_method,
+       SHA512_CBLOCK,
+       sizeof(EVP_MD *)+sizeof(SHA512_CTX),
+       };
+
+const EVP_MD *EVP_sha512(void)
+       { return(&sha512_md); }
+#endif /* ifndef OPENSSL_NO_SHA512 */