Remove CRYPTO_MUTEX from public headers

We no longer need to define CRYPTO_MUTEX in public headers. This
simplifies a pile of things. First, we can now use pthread_rwlock_t
without any fuss, rather than trying to guess the size on glibc.

As a result, CRYPTO_MUTEX and CRYPTO_STATIC_MUTEX can be merged into one
type. We can almost do this to CRYPTO_refcount_t too. BIO is the one
straggler remaining.

Fixed: 325
Change-Id: Ie93c9f553c0f02ce594b959c041b00fc15ba51d2
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/60611
Commit-Queue: David Benjamin <davidben@google.com>
Reviewed-by: Bob Beck <bbe@google.com>
diff --git a/crypto/thread_win.c b/crypto/thread_win.c
index 57e4f9b..6daa814 100644
--- a/crypto/thread_win.c
+++ b/crypto/thread_win.c
@@ -26,11 +26,6 @@
 #include <stdlib.h>
 #include <string.h>
 
-static_assert(sizeof(CRYPTO_MUTEX) >= sizeof(SRWLOCK),
-              "CRYPTO_MUTEX is too small");
-static_assert(alignof(CRYPTO_MUTEX) >= alignof(SRWLOCK),
-              "CRYPTO_MUTEX has insufficient alignment");
-
 static BOOL CALLBACK call_once_init(INIT_ONCE *once, void *arg, void **out) {
   void (**init)(void) = (void (**)(void))arg;
   (**init)();
@@ -44,45 +39,29 @@
 }
 
 void CRYPTO_MUTEX_init(CRYPTO_MUTEX *lock) {
-  InitializeSRWLock((SRWLOCK *) lock);
+  InitializeSRWLock(lock);
 }
 
 void CRYPTO_MUTEX_lock_read(CRYPTO_MUTEX *lock) {
-  AcquireSRWLockShared((SRWLOCK *) lock);
+  AcquireSRWLockShared(lock);
 }
 
 void CRYPTO_MUTEX_lock_write(CRYPTO_MUTEX *lock) {
-  AcquireSRWLockExclusive((SRWLOCK *) lock);
+  AcquireSRWLockExclusive(lock);
 }
 
 void CRYPTO_MUTEX_unlock_read(CRYPTO_MUTEX *lock) {
-  ReleaseSRWLockShared((SRWLOCK *) lock);
+  ReleaseSRWLockShared(lock);
 }
 
 void CRYPTO_MUTEX_unlock_write(CRYPTO_MUTEX *lock) {
-  ReleaseSRWLockExclusive((SRWLOCK *) lock);
+  ReleaseSRWLockExclusive(lock);
 }
 
 void CRYPTO_MUTEX_cleanup(CRYPTO_MUTEX *lock) {
   // SRWLOCKs require no cleanup.
 }
 
-void CRYPTO_STATIC_MUTEX_lock_read(struct CRYPTO_STATIC_MUTEX *lock) {
-  AcquireSRWLockShared(&lock->lock);
-}
-
-void CRYPTO_STATIC_MUTEX_lock_write(struct CRYPTO_STATIC_MUTEX *lock) {
-  AcquireSRWLockExclusive(&lock->lock);
-}
-
-void CRYPTO_STATIC_MUTEX_unlock_read(struct CRYPTO_STATIC_MUTEX *lock) {
-  ReleaseSRWLockShared(&lock->lock);
-}
-
-void CRYPTO_STATIC_MUTEX_unlock_write(struct CRYPTO_STATIC_MUTEX *lock) {
-  ReleaseSRWLockExclusive(&lock->lock);
-}
-
 static SRWLOCK g_destructors_lock = SRWLOCK_INIT;
 static thread_local_destructor_t g_destructors[NUM_OPENSSL_THREAD_LOCALS];