bcrypt: Move the public key initialization to the generic code.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
d70c8e464a
commit
54c1b0ac26
|
@ -229,6 +229,13 @@ struct key_symmetric
|
||||||
enum mode_id mode;
|
enum mode_id mode;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct key_asymmetric
|
||||||
|
{
|
||||||
|
ULONG bitlen; /* ignored for ECC keys */
|
||||||
|
UCHAR *pubkey;
|
||||||
|
ULONG pubkey_len;
|
||||||
|
};
|
||||||
|
|
||||||
struct key
|
struct key
|
||||||
{
|
{
|
||||||
struct object hdr;
|
struct object hdr;
|
||||||
|
@ -236,6 +243,7 @@ struct key
|
||||||
union
|
union
|
||||||
{
|
{
|
||||||
struct key_symmetric s;
|
struct key_symmetric s;
|
||||||
|
struct key_asymmetric a;
|
||||||
} u;
|
} u;
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
@ -254,7 +262,7 @@ NTSTATUS key_symmetric_set_auth_data( struct key *, UCHAR *, ULONG ) DECLSPEC_HI
|
||||||
NTSTATUS key_symmetric_encrypt( struct key *, const UCHAR *, ULONG, UCHAR *, ULONG ) DECLSPEC_HIDDEN;
|
NTSTATUS key_symmetric_encrypt( struct key *, const UCHAR *, ULONG, UCHAR *, ULONG ) DECLSPEC_HIDDEN;
|
||||||
NTSTATUS key_symmetric_decrypt( struct key *, const UCHAR *, ULONG, UCHAR *, ULONG ) DECLSPEC_HIDDEN;
|
NTSTATUS key_symmetric_decrypt( struct key *, const UCHAR *, ULONG, UCHAR *, ULONG ) DECLSPEC_HIDDEN;
|
||||||
NTSTATUS key_symmetric_get_tag( struct key *, UCHAR *, ULONG ) DECLSPEC_HIDDEN;
|
NTSTATUS key_symmetric_get_tag( struct key *, UCHAR *, ULONG ) DECLSPEC_HIDDEN;
|
||||||
NTSTATUS key_asymmetric_init( struct key *, struct algorithm *, ULONG, const UCHAR *, ULONG ) DECLSPEC_HIDDEN;
|
NTSTATUS key_asymmetric_init( struct key * ) DECLSPEC_HIDDEN;
|
||||||
NTSTATUS key_asymmetric_generate( struct key * ) DECLSPEC_HIDDEN;
|
NTSTATUS key_asymmetric_generate( struct key * ) DECLSPEC_HIDDEN;
|
||||||
NTSTATUS key_asymmetric_sign( struct key *, void *, UCHAR *, ULONG, UCHAR *, ULONG, ULONG *, ULONG ) DECLSPEC_HIDDEN;
|
NTSTATUS key_asymmetric_sign( struct key *, void *, UCHAR *, ULONG, UCHAR *, ULONG, ULONG *, ULONG ) DECLSPEC_HIDDEN;
|
||||||
NTSTATUS key_asymmetric_verify( struct key *, void *, UCHAR *, ULONG, UCHAR *, ULONG, DWORD ) DECLSPEC_HIDDEN;
|
NTSTATUS key_asymmetric_verify( struct key *, void *, UCHAR *, ULONG, UCHAR *, ULONG, DWORD ) DECLSPEC_HIDDEN;
|
||||||
|
|
|
@ -862,9 +862,22 @@ static NTSTATUS key_asymmetric_create( struct key **ret_key, struct algorithm *a
|
||||||
|
|
||||||
if (!(key = heap_alloc_zero( sizeof(*key) ))) return STATUS_NO_MEMORY;
|
if (!(key = heap_alloc_zero( sizeof(*key) ))) return STATUS_NO_MEMORY;
|
||||||
key->hdr.magic = MAGIC_KEY;
|
key->hdr.magic = MAGIC_KEY;
|
||||||
|
key->alg_id = alg->id;
|
||||||
|
key->u.a.bitlen = bitlen;
|
||||||
|
|
||||||
if ((status = key_asymmetric_init( key, alg, bitlen, pubkey, pubkey_len )))
|
if (pubkey_len)
|
||||||
{
|
{
|
||||||
|
if (!(key->u.a.pubkey = heap_alloc( pubkey_len )))
|
||||||
|
{
|
||||||
|
heap_free( key );
|
||||||
|
return STATUS_NO_MEMORY;
|
||||||
|
}
|
||||||
|
memcpy( key->u.a.pubkey, pubkey, pubkey_len );
|
||||||
|
key->u.a.pubkey_len = pubkey_len;
|
||||||
|
}
|
||||||
|
if ((status = key_asymmetric_init( key )))
|
||||||
|
{
|
||||||
|
heap_free( key->u.a.pubkey );
|
||||||
heap_free( key );
|
heap_free( key );
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
@ -1321,8 +1334,7 @@ static NTSTATUS key_duplicate( struct key *key_orig, struct key *key_copy )
|
||||||
return STATUS_NOT_IMPLEMENTED;
|
return STATUS_NOT_IMPLEMENTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS key_asymmetric_init( struct key *key, struct algorithm *alg, ULONG bitlen, const UCHAR *pubkey,
|
NTSTATUS key_asymmetric_init( struct key *key )
|
||||||
ULONG pubkey_len )
|
|
||||||
{
|
{
|
||||||
ERR( "support for keys not available at build time\n" );
|
ERR( "support for keys not available at build time\n" );
|
||||||
return STATUS_NOT_IMPLEMENTED;
|
return STATUS_NOT_IMPLEMENTED;
|
||||||
|
|
|
@ -1121,12 +1121,11 @@ NTSTATUS key_import_dsa_capi( struct key *key, UCHAR *buf, ULONG len )
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS key_asymmetric_init( struct key *key, struct algorithm *alg, ULONG bitlen, const UCHAR *pubkey,
|
NTSTATUS key_asymmetric_init( struct key *key )
|
||||||
ULONG pubkey_len )
|
|
||||||
{
|
{
|
||||||
if (!libgnutls_handle) return STATUS_INTERNAL_ERROR;
|
if (!libgnutls_handle) return STATUS_INTERNAL_ERROR;
|
||||||
|
|
||||||
switch (alg->id)
|
switch (key->alg_id)
|
||||||
{
|
{
|
||||||
case ALG_ID_ECDH_P256:
|
case ALG_ID_ECDH_P256:
|
||||||
case ALG_ID_ECDSA_P256:
|
case ALG_ID_ECDSA_P256:
|
||||||
|
@ -1134,23 +1133,12 @@ NTSTATUS key_asymmetric_init( struct key *key, struct algorithm *alg, ULONG bitl
|
||||||
case ALG_ID_RSA:
|
case ALG_ID_RSA:
|
||||||
case ALG_ID_RSA_SIGN:
|
case ALG_ID_RSA_SIGN:
|
||||||
case ALG_ID_DSA:
|
case ALG_ID_DSA:
|
||||||
break;
|
return STATUS_SUCCESS;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
FIXME( "algorithm %u not supported\n", alg->id );
|
FIXME( "algorithm %u not supported\n", key->alg_id );
|
||||||
return STATUS_NOT_SUPPORTED;
|
return STATUS_NOT_SUPPORTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pubkey_len)
|
|
||||||
{
|
|
||||||
if (!(key->u.a.pubkey = heap_alloc( pubkey_len ))) return STATUS_NO_MEMORY;
|
|
||||||
memcpy( key->u.a.pubkey, pubkey, pubkey_len );
|
|
||||||
key->u.a.pubkey_len = pubkey_len;
|
|
||||||
}
|
|
||||||
key->alg_id = alg->id;
|
|
||||||
key->u.a.bitlen = bitlen;
|
|
||||||
|
|
||||||
return STATUS_SUCCESS;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static NTSTATUS import_gnutls_pubkey_ecc( struct key *key, gnutls_pubkey_t *gnutls_key )
|
static NTSTATUS import_gnutls_pubkey_ecc( struct key *key, gnutls_pubkey_t *gnutls_key )
|
||||||
|
|
|
@ -219,8 +219,7 @@ NTSTATUS key_symmetric_get_tag( struct key *key, UCHAR *tag, ULONG len )
|
||||||
return STATUS_NOT_IMPLEMENTED;
|
return STATUS_NOT_IMPLEMENTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS key_asymmetric_init( struct key *key, struct algorithm *alg, ULONG bitlen, const UCHAR *pubkey,
|
NTSTATUS key_asymmetric_init( struct key *key )
|
||||||
ULONG pubkey_len )
|
|
||||||
{
|
{
|
||||||
FIXME( "not implemented on Mac\n" );
|
FIXME( "not implemented on Mac\n" );
|
||||||
return STATUS_NOT_IMPLEMENTED;
|
return STATUS_NOT_IMPLEMENTED;
|
||||||
|
|
Loading…
Reference in New Issue