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