Hans Leidekker : bcrypt: Move the ASN1 buffer functions to gnutls.c.

Alexandre Julliard julliard at winehq.org
Fri Jul 20 12:14:32 CDT 2018


Module: wine
Branch: master
Commit: b6cb27ea4c38f51eda556d458b83e6d83ebcc15e
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=b6cb27ea4c38f51eda556d458b83e6d83ebcc15e

Author: Hans Leidekker <hans at codeweavers.com>
Date:   Fri Jul 20 14:51:15 2018 +0200

bcrypt: Move the ASN1 buffer functions to gnutls.c.

Signed-off-by: Hans Leidekker <hans at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/bcrypt/bcrypt_internal.h |  12 -----
 dlls/bcrypt/bcrypt_main.c     |  97 ---------------------------------------
 dlls/bcrypt/gnutls.c          | 103 ++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 103 insertions(+), 109 deletions(-)

diff --git a/dlls/bcrypt/bcrypt_internal.h b/dlls/bcrypt/bcrypt_internal.h
index 11c8b30..a40f9d1 100644
--- a/dlls/bcrypt/bcrypt_internal.h
+++ b/dlls/bcrypt/bcrypt_internal.h
@@ -105,18 +105,6 @@ VOID WINAPI A_SHAInit(SHA_CTX *ctx);
 VOID WINAPI A_SHAUpdate(SHA_CTX *ctx, const UCHAR *buffer, UINT size);
 VOID WINAPI A_SHAFinal(SHA_CTX *ctx, PULONG result);
 
-struct buffer
-{
-    BYTE  *buffer;
-    DWORD  length;
-    DWORD  pos;
-    BOOL   error;
-};
-
-void buffer_init( struct buffer * ) DECLSPEC_HIDDEN;
-void buffer_free( struct buffer * ) DECLSPEC_HIDDEN;
-void buffer_append_asn1_r_s( struct buffer *, BYTE *, DWORD, BYTE *, DWORD ) DECLSPEC_HIDDEN;
-
 #define MAGIC_ALG  (('A' << 24) | ('L' << 16) | ('G' << 8) | '0')
 #define MAGIC_HASH (('H' << 24) | ('A' << 16) | ('S' << 8) | 'H')
 #define MAGIC_KEY  (('K' << 24) | ('E' << 16) | ('Y' << 8) | '0')
diff --git a/dlls/bcrypt/bcrypt_main.c b/dlls/bcrypt/bcrypt_main.c
index 4edfbdd..2b9ae0b 100644
--- a/dlls/bcrypt/bcrypt_main.c
+++ b/dlls/bcrypt/bcrypt_main.c
@@ -718,103 +718,6 @@ NTSTATUS WINAPI BCryptHash( BCRYPT_ALG_HANDLE algorithm, UCHAR *secret, ULONG se
     return BCryptDestroyHash( handle );
 }
 
-#if defined(HAVE_GNUTLS_CIPHER_INIT)
-void buffer_init( struct buffer *buffer )
-{
-    buffer->buffer = NULL;
-    buffer->length = 0;
-    buffer->pos    = 0;
-    buffer->error  = FALSE;
-}
-
-void buffer_free( struct buffer *buffer )
-{
-    heap_free( buffer->buffer );
-}
-
-static void buffer_append( struct buffer *buffer, BYTE *data, DWORD len )
-{
-    if (!len) return;
-
-    if (buffer->pos + len > buffer->length)
-    {
-        DWORD new_length = max( max( buffer->pos + len, buffer->length * 2 ), 64 );
-        BYTE *new_buffer;
-
-        if (!(new_buffer = heap_realloc( buffer->buffer, new_length )))
-        {
-            ERR( "out of memory\n" );
-            buffer->error = TRUE;
-            return;
-        }
-
-        buffer->buffer = new_buffer;
-        buffer->length = new_length;
-    }
-
-    memcpy( &buffer->buffer[buffer->pos], data, len );
-    buffer->pos += len;
-}
-
-static void buffer_append_byte( struct buffer *buffer, BYTE value )
-{
-    buffer_append( buffer, &value, sizeof(value) );
-}
-
-static void buffer_append_asn1_length( struct buffer *buffer, DWORD length )
-{
-    DWORD num_bytes;
-
-    if (length < 128)
-    {
-        buffer_append_byte( buffer, length );
-        return;
-    }
-
-    if (length <= 0xff) num_bytes = 1;
-    else if (length <= 0xffff) num_bytes = 2;
-    else if (length <= 0xffffff) num_bytes = 3;
-    else num_bytes = 4;
-
-    buffer_append_byte( buffer, 0x80 | num_bytes );
-    while (num_bytes--) buffer_append_byte( buffer, length >> (num_bytes * 8) );
-}
-
-static void buffer_append_asn1_integer( struct buffer *buffer, BYTE *data, DWORD len )
-{
-    DWORD leading_zero = (*data & 0x80) != 0;
-
-    buffer_append_byte( buffer, 0x02 );  /* tag */
-    buffer_append_asn1_length( buffer, len + leading_zero );
-    if (leading_zero) buffer_append_byte( buffer, 0 );
-    buffer_append( buffer, data, len );
-}
-
-static void buffer_append_asn1_sequence( struct buffer *buffer, struct buffer *content )
-{
-    if (content->error)
-    {
-        buffer->error = TRUE;
-        return;
-    }
-
-    buffer_append_byte( buffer, 0x30 );  /* tag */
-    buffer_append_asn1_length( buffer, content->pos );
-    buffer_append( buffer, content->buffer, content->pos );
-}
-
-void buffer_append_asn1_r_s( struct buffer *buffer, BYTE *r, DWORD r_len, BYTE *s, DWORD s_len )
-{
-    struct buffer value;
-
-    buffer_init( &value );
-    buffer_append_asn1_integer( &value, r, r_len );
-    buffer_append_asn1_integer( &value, s, s_len );
-    buffer_append_asn1_sequence( buffer, &value );
-    buffer_free( &value );
-}
-#endif
-
 #if defined(HAVE_GNUTLS_CIPHER_INIT) || defined(HAVE_COMMONCRYPTO_COMMONCRYPTOR_H) && MAC_OS_X_VERSION_MAX_ALLOWED >= 1080
 BOOL key_is_symmetric( struct key *key )
 {
diff --git a/dlls/bcrypt/gnutls.c b/dlls/bcrypt/gnutls.c
index f5bc0e5..69276be 100644
--- a/dlls/bcrypt/gnutls.c
+++ b/dlls/bcrypt/gnutls.c
@@ -215,6 +215,109 @@ void gnutls_uninitialize(void)
     libgnutls_handle = NULL;
 }
 
+struct buffer
+{
+    BYTE  *buffer;
+    DWORD  length;
+    DWORD  pos;
+    BOOL   error;
+};
+
+static void buffer_init( struct buffer *buffer )
+{
+    buffer->buffer = NULL;
+    buffer->length = 0;
+    buffer->pos    = 0;
+    buffer->error  = FALSE;
+}
+
+static void buffer_free( struct buffer *buffer )
+{
+    heap_free( buffer->buffer );
+}
+
+static void buffer_append( struct buffer *buffer, BYTE *data, DWORD len )
+{
+    if (!len) return;
+
+    if (buffer->pos + len > buffer->length)
+    {
+        DWORD new_length = max( max( buffer->pos + len, buffer->length * 2 ), 64 );
+        BYTE *new_buffer;
+
+        if (!(new_buffer = heap_realloc( buffer->buffer, new_length )))
+        {
+            ERR( "out of memory\n" );
+            buffer->error = TRUE;
+            return;
+        }
+
+        buffer->buffer = new_buffer;
+        buffer->length = new_length;
+    }
+
+    memcpy( &buffer->buffer[buffer->pos], data, len );
+    buffer->pos += len;
+}
+
+static void buffer_append_byte( struct buffer *buffer, BYTE value )
+{
+    buffer_append( buffer, &value, sizeof(value) );
+}
+
+static void buffer_append_asn1_length( struct buffer *buffer, DWORD length )
+{
+    DWORD num_bytes;
+
+    if (length < 128)
+    {
+        buffer_append_byte( buffer, length );
+        return;
+    }
+
+    if (length <= 0xff) num_bytes = 1;
+    else if (length <= 0xffff) num_bytes = 2;
+    else if (length <= 0xffffff) num_bytes = 3;
+    else num_bytes = 4;
+
+    buffer_append_byte( buffer, 0x80 | num_bytes );
+    while (num_bytes--) buffer_append_byte( buffer, length >> (num_bytes * 8) );
+}
+
+static void buffer_append_asn1_integer( struct buffer *buffer, BYTE *data, DWORD len )
+{
+    DWORD leading_zero = (*data & 0x80) != 0;
+
+    buffer_append_byte( buffer, 0x02 );  /* tag */
+    buffer_append_asn1_length( buffer, len + leading_zero );
+    if (leading_zero) buffer_append_byte( buffer, 0 );
+    buffer_append( buffer, data, len );
+}
+
+static void buffer_append_asn1_sequence( struct buffer *buffer, struct buffer *content )
+{
+    if (content->error)
+    {
+        buffer->error = TRUE;
+        return;
+    }
+
+    buffer_append_byte( buffer, 0x30 );  /* tag */
+    buffer_append_asn1_length( buffer, content->pos );
+    buffer_append( buffer, content->buffer, content->pos );
+}
+
+static void buffer_append_asn1_r_s( struct buffer *buffer, BYTE *r, DWORD r_len, BYTE *s, DWORD s_len )
+{
+    struct buffer value;
+
+    buffer_init( &value );
+    buffer_append_asn1_integer( &value, r, r_len );
+    buffer_append_asn1_integer( &value, s, s_len );
+    buffer_append_asn1_sequence( buffer, &value );
+    buffer_free( &value );
+}
+
 NTSTATUS key_set_property( struct key *key, const WCHAR *prop, UCHAR *value, ULONG size, ULONG flags )
 {
     if (!strcmpW( prop, BCRYPT_CHAINING_MODE ))




More information about the wine-cvs mailing list