OSDN Git Service

Restore OpenSSLMessageDigestJDK.digest reset behavior
authorBrian Carlstrom <bdc@google.com>
Fri, 17 Sep 2010 09:59:55 +0000 (02:59 -0700)
committerBrian Carlstrom <bdc@google.com>
Fri, 17 Sep 2010 16:31:15 +0000 (09:31 -0700)
SSLEngine tests started failing due to the recent incorrect change to
OpenSSLMessageDigestJDK.digest() that removed the reset of
MessageDigest state on call to digest(). The problem was not that the
digest was resetting, but that it was resetting to use a SHA-0
algorithm. See recent change c38b8476e7e4bd4b091d9f0e8fe8b2b972e7bc81.

Change-Id: I40ef4e18a1b546eac5a487cb8a808d4897b301b0

luni/src/main/java/org/apache/harmony/xnet/provider/jsse/OpenSSLMessageDigestJDK.java
luni/src/main/native/NativeCrypto.cpp

index 879c264..0742587 100644 (file)
@@ -1,3 +1,19 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * 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.
+ */
+
 package org.apache.harmony.xnet.provider.jsse;
 
 import java.security.MessageDigest;
@@ -46,16 +62,9 @@ public class OpenSSLMessageDigestJDK extends MessageDigest implements Cloneable
     @Override
     protected byte[] engineDigest() {
         byte[] result = new byte[NativeCrypto.EVP_MD_CTX_size(ctx)];
-        int copy = 0;
-        try {
-            copy = NativeCrypto.EVP_MD_CTX_copy(ctx);
-            NativeCrypto.EVP_DigestFinal(copy, result, 0);
-            return result;
-        } finally {
-            if (copy != 0) {
-                NativeCrypto.EVP_MD_CTX_destroy(copy);
-            }
-        }
+        NativeCrypto.EVP_DigestFinal(ctx, result, 0);
+        NativeCrypto.EVP_DigestInit(ctx, openssl);
+        return result;
     }
 
     @Override
index cd704a9..6b278f5 100644 (file)
@@ -727,7 +727,7 @@ static jint NativeCrypto_EVP_MD_CTX_block_size(JNIEnv* env, jclass, EVP_MD_CTX*
  */
 static void NativeCrypto_EVP_DigestUpdate(JNIEnv* env, jclass, EVP_MD_CTX* ctx,
                                           jbyteArray buffer, jint offset, jint length) {
-    JNI_TRACE("NativeCrypto_EVP_DigestUpdate(%p, %p, %d, %d", ctx, buffer, offset, length);
+    JNI_TRACE("NativeCrypto_EVP_DigestUpdate(%p, %p, %d, %d)", ctx, buffer, offset, length);
 
     if (offset < 0 || length < 0) {
         jniThrowException(env, "java/lang/IndexOutOfBoundsException", NULL);