diff --git a/bcprov/src/main/java/org/bouncycastle/crypto/digests/OpenSSLDigest.java b/bcprov/src/main/java/org/bouncycastle/crypto/digests/OpenSSLDigest.java
index d2f9f25..3e7c0e7 100644
--- a/bcprov/src/main/java/org/bouncycastle/crypto/digests/OpenSSLDigest.java
+++ b/bcprov/src/main/java/org/bouncycastle/crypto/digests/OpenSSLDigest.java
@@ -32,7 +32,7 @@
     /**
      * Holds the EVP_MD for the hashing algorithm, e.g. EVP_get_digestbyname("sha1");
      */
-    private final int evp_md;
+    private final long evp_md;
 
     /**
      * Holds the output size of the message digest.
@@ -49,7 +49,7 @@
      * lazily initialized to avoid having to reallocate on reset when
      * its unlikely to be reused.
      */
-    private int ctx;
+    private long ctx;
 
     /**
      * Holds a dummy buffer for writing single bytes to the digest.
@@ -60,7 +60,7 @@
      * Creates a new OpenSSLMessageDigest instance for the given algorithm
      * name.
      */
-    private OpenSSLDigest(String algorithm, int evp_md, int size, int blockSize) {
+    private OpenSSLDigest(String algorithm, long evp_md, int size, int blockSize) {
         this.algorithm = algorithm;
         this.evp_md = evp_md;
         this.size = size;
@@ -99,7 +99,7 @@
         return i;
     }
 
-    private int getCtx() {
+    private long getCtx() {
         if (ctx == 0) {
             ctx = NativeCrypto.EVP_DigestInit(evp_md);
         }
@@ -123,35 +123,35 @@
     }
 
     public static class MD5 extends OpenSSLDigest {
-        private static final int EVP_MD = NativeCrypto.EVP_get_digestbyname("md5");
+        private static final long EVP_MD = NativeCrypto.EVP_get_digestbyname("md5");
         private static final int SIZE = NativeCrypto.EVP_MD_size(EVP_MD);
         private static final int BLOCK_SIZE = NativeCrypto.EVP_MD_block_size(EVP_MD);
         public MD5() { super("MD5", EVP_MD, SIZE, BLOCK_SIZE); }
     }
 
     public static class SHA1 extends OpenSSLDigest {
-        private static final int EVP_MD = NativeCrypto.EVP_get_digestbyname("sha1");
+        private static final long EVP_MD = NativeCrypto.EVP_get_digestbyname("sha1");
         private static final int SIZE = NativeCrypto.EVP_MD_size(EVP_MD);
         private static final int BLOCK_SIZE = NativeCrypto.EVP_MD_block_size(EVP_MD);
         public SHA1() { super("SHA-1", EVP_MD, SIZE, BLOCK_SIZE); }
     }
 
     public static class SHA256 extends OpenSSLDigest {
-        private static final int EVP_MD = NativeCrypto.EVP_get_digestbyname("sha256");
+        private static final long EVP_MD = NativeCrypto.EVP_get_digestbyname("sha256");
         private static final int SIZE = NativeCrypto.EVP_MD_size(EVP_MD);
         private static final int BLOCK_SIZE = NativeCrypto.EVP_MD_block_size(EVP_MD);
         public SHA256() { super("SHA-256", EVP_MD, SIZE, BLOCK_SIZE); }
     }
 
     public static class SHA384 extends OpenSSLDigest {
-        private static final int EVP_MD = NativeCrypto.EVP_get_digestbyname("sha384");
+        private static final long EVP_MD = NativeCrypto.EVP_get_digestbyname("sha384");
         private static final int SIZE = NativeCrypto.EVP_MD_size(EVP_MD);
         private static final int BLOCK_SIZE = NativeCrypto.EVP_MD_block_size(EVP_MD);
         public SHA384() { super("SHA-384", EVP_MD, SIZE, BLOCK_SIZE); }
     }
 
     public static class SHA512 extends OpenSSLDigest {
-        private static final int EVP_MD = NativeCrypto.EVP_get_digestbyname("sha512");
+        private static final long EVP_MD = NativeCrypto.EVP_get_digestbyname("sha512");
         private static final int SIZE = NativeCrypto.EVP_MD_size(EVP_MD);
         private static final int BLOCK_SIZE = NativeCrypto.EVP_MD_block_size(EVP_MD);
         public SHA512() { super("SHA-512", EVP_MD, SIZE, BLOCK_SIZE); }
diff --git a/patches/bcprov.patch b/patches/bcprov.patch
index 628b381..c1d1bcc 100644
--- a/patches/bcprov.patch
+++ b/patches/bcprov.patch
@@ -508,7 +508,7 @@
 +}
 diff -Naur bcprov-jdk15on-148.orig/org/bouncycastle/crypto/digests/OpenSSLDigest.java bcprov-jdk15on-148/org/bouncycastle/crypto/digests/OpenSSLDigest.java
 --- bcprov-jdk15on-148.orig/org/bouncycastle/crypto/digests/OpenSSLDigest.java	1970-01-01 00:00:00.000000000 +0000
-+++ bcprov-jdk15on-148/org/bouncycastle/crypto/digests/OpenSSLDigest.java	2012-09-17 23:04:47.000000000 +0000
++++ bcprov-jdk15on-148/org/bouncycastle/crypto/digests/OpenSSLDigest.java	2013-02-28 01:42:11.000000000 +0000
 @@ -0,0 +1,159 @@
 +/*
 + * Copyright (C) 2008 The Android Open Source Project
@@ -544,7 +544,7 @@
 +    /**
 +     * Holds the EVP_MD for the hashing algorithm, e.g. EVP_get_digestbyname("sha1");
 +     */
-+    private final int evp_md;
++    private final long evp_md;
 +
 +    /**
 +     * Holds the output size of the message digest.
@@ -561,7 +561,7 @@
 +     * lazily initialized to avoid having to reallocate on reset when
 +     * its unlikely to be reused.
 +     */
-+    private int ctx;
++    private long ctx;
 +
 +    /**
 +     * Holds a dummy buffer for writing single bytes to the digest.
@@ -572,7 +572,7 @@
 +     * Creates a new OpenSSLMessageDigest instance for the given algorithm
 +     * name.
 +     */
-+    private OpenSSLDigest(String algorithm, int evp_md, int size, int blockSize) {
++    private OpenSSLDigest(String algorithm, long evp_md, int size, int blockSize) {
 +        this.algorithm = algorithm;
 +        this.evp_md = evp_md;
 +        this.size = size;
@@ -611,7 +611,7 @@
 +        return i;
 +    }
 +
-+    private int getCtx() {
++    private long getCtx() {
 +        if (ctx == 0) {
 +            ctx = NativeCrypto.EVP_DigestInit(evp_md);
 +        }
@@ -635,35 +635,35 @@
 +    }
 +
 +    public static class MD5 extends OpenSSLDigest {
-+        private static final int EVP_MD = NativeCrypto.EVP_get_digestbyname("md5");
++        private static final long EVP_MD = NativeCrypto.EVP_get_digestbyname("md5");
 +        private static final int SIZE = NativeCrypto.EVP_MD_size(EVP_MD);
 +        private static final int BLOCK_SIZE = NativeCrypto.EVP_MD_block_size(EVP_MD);
 +        public MD5() { super("MD5", EVP_MD, SIZE, BLOCK_SIZE); }
 +    }
 +
 +    public static class SHA1 extends OpenSSLDigest {
-+        private static final int EVP_MD = NativeCrypto.EVP_get_digestbyname("sha1");
++        private static final long EVP_MD = NativeCrypto.EVP_get_digestbyname("sha1");
 +        private static final int SIZE = NativeCrypto.EVP_MD_size(EVP_MD);
 +        private static final int BLOCK_SIZE = NativeCrypto.EVP_MD_block_size(EVP_MD);
 +        public SHA1() { super("SHA-1", EVP_MD, SIZE, BLOCK_SIZE); }
 +    }
 +
 +    public static class SHA256 extends OpenSSLDigest {
-+        private static final int EVP_MD = NativeCrypto.EVP_get_digestbyname("sha256");
++        private static final long EVP_MD = NativeCrypto.EVP_get_digestbyname("sha256");
 +        private static final int SIZE = NativeCrypto.EVP_MD_size(EVP_MD);
 +        private static final int BLOCK_SIZE = NativeCrypto.EVP_MD_block_size(EVP_MD);
 +        public SHA256() { super("SHA-256", EVP_MD, SIZE, BLOCK_SIZE); }
 +    }
 +
 +    public static class SHA384 extends OpenSSLDigest {
-+        private static final int EVP_MD = NativeCrypto.EVP_get_digestbyname("sha384");
++        private static final long EVP_MD = NativeCrypto.EVP_get_digestbyname("sha384");
 +        private static final int SIZE = NativeCrypto.EVP_MD_size(EVP_MD);
 +        private static final int BLOCK_SIZE = NativeCrypto.EVP_MD_block_size(EVP_MD);
 +        public SHA384() { super("SHA-384", EVP_MD, SIZE, BLOCK_SIZE); }
 +    }
 +
 +    public static class SHA512 extends OpenSSLDigest {
-+        private static final int EVP_MD = NativeCrypto.EVP_get_digestbyname("sha512");
++        private static final long EVP_MD = NativeCrypto.EVP_get_digestbyname("sha512");
 +        private static final int SIZE = NativeCrypto.EVP_MD_size(EVP_MD);
 +        private static final int BLOCK_SIZE = NativeCrypto.EVP_MD_block_size(EVP_MD);
 +        public SHA512() { super("SHA-512", EVP_MD, SIZE, BLOCK_SIZE); }
