26#define WIN32_NO_STATUS
42#define MAGIC_DSS1 ('D' | ('S' << 8) | ('S' << 16) | ('1' << 24))
43#define MAGIC_DSS2 ('D' | ('S' << 8) | ('S' << 16) | ('2' << 24))
45#define MAGIC_ALG (('A' << 24) | ('L' << 16) | ('G' << 8) | '0')
46#define MAGIC_HASH (('H' << 24) | ('A' << 16) | ('S' << 8) | 'H')
47#define MAGIC_KEY (('K' << 24) | ('E' << 16) | ('Y' << 8) | '0')
48#define MAGIC_SECRET (('S' << 24) | ('C' << 16) | ('R' << 8) | 'T')
100#define HASH_FLAG_HMAC 0x01
101#define HASH_FLAG_REUSABLE 0x02
164#define BLOCK_LENGTH_RC4 1
165#define BLOCK_LENGTH_CHACHA20_POLY1305 1
166#define BLOCK_LENGTH_3DES 8
167#define BLOCK_LENGTH_AES 16
216#define KEY_FLAG_PRIVATE 0x00000001
217#define KEY_FLAG_FINALIZED 0x00000002
231#define KEY_EXPORT_FLAG_PRIVATE 0x00000001
232#define KEY_EXPORT_FLAG_RSA_FULL 0x00000002
258 return SYMCRYPT_NO_ERROR;
263 return SYMCRYPT_NO_ERROR;
272 return SYMCRYPT_NO_ERROR;
295 return (bitlen + 7) / 8;
307 FIXME(
"%#lx, %s, %#lx, %s, %s, %lu: stub\n",
table,
debugstr_w(
ctx), iface,
debugstr_w(
func),
319 const WCHAR *provider )
349#define MAX_HASH_OUTPUT_BYTES 64
436 TRACE(
"%#lx, %p, %p, %#lx\n",
type, ret_count, ret_list,
flags );
548 FIXME(
"pseudo-handle %p not supported\n",
handle );
591 FIXME(
"pseudo-handle %p not supported\n",
handle );
600 if (
flags & ~supported_flags)
601 FIXME(
"unsupported flags %#lx\n",
flags & ~supported_flags);
604 FIXME(
"ignoring selected algorithm\n");
613 FIXME(
"called with unsupported parameters, returning error\n");
640 if (
flags & ~supported_flags)
642 FIXME(
"unsupported flags %#lx\n",
flags & ~supported_flags );
662 FIXME(
"implementation %s not supported\n",
debugstr_w(implementation) );
1001 FIXME(
"unsupported 3des algorithm property %s\n",
debugstr_w(prop) );
1012 FIXME(
"unsupported CHACHA20_POLY1305 algorithm property %s\n",
debugstr_w(prop) );
1102 FIXME(
"unsupported ECDH/ECDSA algorithm property %s\n",
debugstr_w(prop) );
1106 FIXME(
"unsupported algorithm %u\n", alg->
id );
1114 UCHAR *prime, *generator;
1126 generator = prime + key_size;
1137 if (!alg)
return NULL;
1269 UCHAR *prime, *generator;
1279 generator = prime + key_size;
1285 hdr->cbLength =
sizeof(*hdr) + key_size * 2;
1287 hdr->cbKeyLength = key_size;
1330 TRACE(
"%p, %s, %p, %lu, %p, %#lx\n",
handle,
wine_dbgstr_w(prop),
buffer,
count,
res,
flags );
1344 const struct key *
key = (
const struct key *)
object;
1386 struct hash **ret_hash )
1423 TRACE(
"%p, %p, %p, %lu, %p, %lu, %#lx\n",
handle, ret_handle,
object, object_len,
secret,
secret_len,
flags );
1426 FIXME(
"unimplemented flags %#lx\n",
flags );
1429 if (
object)
FIXME(
"ignoring object buffer\n" );
1437 TRACE(
"returning handle %p\n", *ret_handle );
1445 struct hash *hash_copy;
1447 TRACE(
"%p, %p, %p, %lu, %#lx\n",
handle, handle_copy,
object, object_len,
flags );
1451 if (
object)
FIXME(
"ignoring object buffer\n" );
1455 memcpy( hash_copy, hash_orig,
sizeof(*hash_orig) );
1471 *handle_copy = hash_copy;
1472 TRACE(
"returning handle %p\n", *handle_copy );
1560 TRACE(
"%p, %p, %lu, %p, %lu, %p, %lu\n",
handle,
secret, secret_len,
input, input_len, output, output_len );
1620 key->
s.secret_len = secret_len;
1665 WARN(
"secret_len %lu exceeds key max length %lu, setting to maximum\n", secret_len,
size );
1671 WARN(
"secret_len %lu is less than minimum key length %lu\n", secret_len,
size );
1676 WARN(
"secret_len %lu is not a valid key length\n", secret_len );
1685 struct key **ret_key )
1724 key->
s.block_size =
key->
s.secret_len = secret_len;
1728 FIXME(
"unhandled algorithm %u\n", alg->
id );
1744 TRACE(
"%p, %p, %p, %lu, %p, %lu, %#lx\n",
handle, ret_handle,
object, object_len,
secret, secret_len,
flags );
1745 if (
object)
FIXME(
"ignoring object buffer\n" );
1752 TRACE(
"returning handle %p\n", *ret_handle );
1889 switch (
key->
s.mode)
1932 if (output_len <
size)
1974 TRACE(
"%p, %p, %lu, %p, %p, %lu, %p, %lu, %p, %#lx\n",
handle,
input, input_len,
padding, iv, iv_len, output,
1983 FIXME(
"flags %#lx not supported\n",
flags );
2019 for (
j = 5;
j >= 0;
j--)
2021 r = plain + (
n - 1) * 8;
2022 for (
i =
n;
i >= 1;
i--)
2053 FIXME(
"decryption of key not supported\n" );
2065 FIXME(
"unknown key data blob version %lu\n",
header->dwVersion );
2087 len = input_len - 8;
2107 const struct key *decrypt_key =
NULL;
2110 TRACE(
"%p, %p, %s, %p, %p, %lu, %p, %lu, %#lx\n",
handle, decrypt_key_handle,
debugstr_w(
type), ret_handle,
2111 object, object_len,
input, input_len,
flags );
2120 TRACE(
"returning handle %p\n", *ret_handle );
2137 offset = input_len - bytes_left;
2235 switch (
key->
s.mode)
2261 if (output_len <
size)
2313 TRACE(
"%p, %p, %lu, %p, %p, %lu, %p, %lu, %p, %#lx\n",
handle,
input, input_len,
padding, iv, iv_len, output,
2322 FIXME(
"flags %#lx not implemented\n",
flags );
2359 for (
j = 0;
j <= 5;
j++)
2362 for (
i = 1;
i <=
n;
i++)
2389 FIXME(
"encryption of key not supported\n" );
2452 SIZE_T mod_size, pubexp_size =
sizeof(pubexp), primes_sizes[2] = { 0 };
2454 SIZE_T mod_size, pubexp_size =
sizeof(pubexp), primes_sizes[2] = {};
2468 else primes_sizes[0] = primes_sizes[1] = 0;
2470 size =
sizeof(*blob) + pubexp_size + mod_size + primes_sizes[0] + primes_sizes[1];
2472 if (output_len <
size || !output)
2483 blob->Magic = magic;
2485 blob->cbPublicExp = pubexp_size;
2486 blob->cbModulus = mod_size;
2487 blob->cbPrime1 = primes_sizes[0];
2488 blob->cbPrime2 = primes_sizes[1];
2491 primes[0] =
mod + mod_size;
2492 primes[1] =
mod + mod_size + primes_sizes[0];
2501 exponents[0] = primes[1] + primes_sizes[1];
2502 exponents[1] = exponents[0] + primes_sizes[0];
2529 FIXME(
"unhandled algorithm %u\n", alg );
2541 size =
sizeof(*blob) + key_size * 2;
2546 priv = pub + key_size * 2;
2549 if (output_len <
size || !output)
2557 blob->cbKey = key_size;
2569 UCHAR *prime, *generator, *pub, *priv =
NULL;
2572 size =
sizeof(*blob) + key_size * 3;
2579 if (output_len <
size || !output)
2587 blob->cbKey = key_size;
2590 generator = prime + key_size;
2595 pub = generator + key_size;
2615 size =
sizeof(*hdr) +
sizeof(*dsskey) + key_size * 2 + 20 + 20 + 20 + 4 ;
2616 if (output_len <
size || !output)
2631 prime_p = (
UCHAR *)(dsskey + 1);
2632 prime_q = prime_p + key_size;
2633 generator = prime_q + 20;
2634 seed = generator + key_size + 20;
2643 priv = generator + key_size;
2648 pub = generator + key_size;
2664 size =
sizeof(*blob) + key_size * 3;
2668 priv_size = key_size;
2671 if (output_len <
size || !output)
2679 blob->cbKey = key_size;
2682 generator =
modulus + key_size;
2686 pub = generator + key_size;
2754 TRACE(
"%p, %p, %s, %p, %lu, %p, %#lx\n", export_key_handle, encrypt_key_handle,
debugstr_w(
type), output,
2770 params.nBitsOfModulus = bitlen;
2775 key->
a.bitlen = bitlen;
2784 SIZE_T primes_sizes[2] = { 0 };
2787 SIZE_T primes_sizes[2] = {};
2802 for (
i = 0;
i <
blob->cbPublicExp;
i++) exp64 +=
exp[
i] << ((
blob->cbPublicExp -
i - 1) * 8);
2805 size =
sizeof(*blob) +
blob->cbPublicExp +
blob->cbModulus;
2825 primes[0] =
mod +
blob->cbModulus;
2826 primes[1] = primes[0] +
blob->cbPrime1;
2828 primes_sizes[0] =
blob->cbPrime1;
2829 primes_sizes[1] =
blob->cbPrime2;
2848 const UCHAR *
mod, *primes[2] = { 0 };
2849 SIZE_T primes_sizes[2] = { 0 };
2852 SIZE_T primes_sizes[2] = {};
2867 size =
sizeof(*hdr) +
sizeof(*rsakey);
2890 primes[0] =
mod + key_size;
2891 primes[1] = primes[0] + key_size / 2;
2893 primes_sizes[0] = key_size / 2;
2894 primes_sizes[1] = key_size / 2;
2971 ERR(
"unhandled algorithm %u\n", alg );
2998 FIXME(
"unhandled algorithm %u\n", alg );
3007 0x01, 0x00, 0x00, 0x00,
3009 0x01, 0x00, 0x00, 0x00,
3011 0x00, 0x00, 0x00, 0x00,
3013 0x20, 0x00, 0x00, 0x00,
3015 0x20, 0x00, 0x00, 0x00,
3017 0x01, 0x00, 0x00, 0x00,
3019 0x00, 0x00, 0x00, 0x00,
3021 0xa9, 0xfb, 0x57, 0xdb, 0xa1, 0xee, 0xa9, 0xbc,
3022 0x3e, 0x66, 0x0a, 0x90, 0x9d, 0x83, 0x8d, 0x72,
3023 0x6e, 0x3b, 0xf6, 0x23, 0xd5, 0x26, 0x20, 0x28,
3024 0x20, 0x13, 0x48, 0x1d, 0x1f, 0x6e, 0x53, 0x77,
3026 0x7d, 0x5a, 0x09, 0x75, 0xfc, 0x2c, 0x30, 0x57,
3027 0xee, 0xf6, 0x75, 0x30, 0x41, 0x7a, 0xff, 0xe7,
3028 0xfb, 0x80, 0x55, 0xc1, 0x26, 0xdc, 0x5c, 0x6c,
3029 0xe9, 0x4a, 0x4b, 0x44, 0xf3, 0x30, 0xb5, 0xd9,
3031 0x26, 0xdc, 0x5c, 0x6c, 0xe9, 0x4a, 0x4b, 0x44,
3032 0xf3, 0x30, 0xb5, 0xd9, 0xbb, 0xd7, 0x7c, 0xbf,
3033 0x95, 0x84, 0x16, 0x29, 0x5c, 0xf7, 0xe1, 0xce,
3034 0x6b, 0xcc, 0xdc, 0x18, 0xff, 0x8c, 0x07, 0xb6,
3036 0x8b, 0xd2, 0xae, 0xb9, 0xcb, 0x7e, 0x57, 0xcb,
3037 0x2c, 0x4b, 0x48, 0x2f, 0xfc, 0x81, 0xb7, 0xaf,
3038 0xb9, 0xde, 0x27, 0xe1, 0xe3, 0xbd, 0x23, 0xc2,
3039 0x3a, 0x44, 0x53, 0xbd, 0x9a, 0xce, 0x32, 0x62,
3041 0x54, 0x7e, 0xf8, 0x35, 0xc3, 0xda, 0xc4, 0xfd,
3042 0x97, 0xf8, 0x46, 0x1a, 0x14, 0x61, 0x1d, 0xc9,
3043 0xc2, 0x77, 0x45, 0x13, 0x2d, 0xed, 0x8e, 0x54,
3044 0x5c, 0x1d, 0x54, 0xc7, 0x2f, 0x04, 0x69, 0x97,
3046 0xa9, 0xfb, 0x57, 0xdb, 0xa1, 0xee, 0xa9, 0xbc,
3047 0x3e, 0x66, 0x0a, 0x90, 0x9d, 0x83, 0x8d, 0x71,
3048 0x8c, 0x39, 0x7a, 0xa3, 0xb5, 0x61, 0xa6, 0xf7,
3049 0x90, 0x1e, 0x0e, 0x82, 0x97, 0x48, 0x56, 0xa7,
3058 0x01, 0x00, 0x00, 0x00,
3060 0x01, 0x00, 0x00, 0x00,
3062 0x00, 0x00, 0x00, 0x00,
3064 0x30, 0x00, 0x00, 0x00,
3066 0x30, 0x00, 0x00, 0x00,
3068 0x01, 0x00, 0x00, 0x00,
3070 0x00, 0x00, 0x00, 0x00,
3072 0x8c, 0xb9, 0x1e, 0x82, 0xa3, 0x38, 0x6d, 0x28,
3073 0x0f, 0x5d, 0x6f, 0x7e, 0x50, 0xe6, 0x41, 0xdf,
3074 0x15, 0x2f, 0x71, 0x09, 0xed, 0x54, 0x56, 0xb4,
3075 0x12, 0xb1, 0xda, 0x19, 0x7f, 0xb7, 0x11, 0x23,
3076 0xac, 0xd3, 0xa7, 0x29, 0x90, 0x1d, 0x1a, 0x71,
3077 0x87, 0x47, 0x00, 0x13, 0x31, 0x07, 0xec, 0x53,
3079 0x7b, 0xc3, 0x82, 0xc6, 0x3d, 0x8c, 0x15, 0x0c,
3080 0x3c, 0x72, 0x08, 0x0a, 0xce, 0x05, 0xaf, 0xa0,
3081 0xc2, 0xbe, 0xa2, 0x8e, 0x4f, 0xb2, 0x27, 0x87,
3082 0x13, 0x91, 0x65, 0xef, 0xba, 0x91, 0xf9, 0x0f,
3083 0x8a, 0xa5, 0x81, 0x4a, 0x50, 0x3a, 0xd4, 0xeb,
3084 0x04, 0xa8, 0xc7, 0xdd, 0x22, 0xce, 0x28, 0x26,
3086 0x04, 0xa8, 0xc7, 0xdd, 0x22, 0xce, 0x28, 0x26,
3087 0x8b, 0x39, 0xb5, 0x54, 0x16, 0xf0, 0x44, 0x7c,
3088 0x2f, 0xb7, 0x7d, 0xe1, 0x07, 0xdc, 0xd2, 0xa6,
3089 0x2e, 0x88, 0x0e, 0xa5, 0x3e, 0xeb, 0x62, 0xd5,
3090 0x7c, 0xb4, 0x39, 0x02, 0x95, 0xdb, 0xc9, 0x94,
3091 0x3a, 0xb7, 0x86, 0x96, 0xfa, 0x50, 0x4c, 0x11,
3093 0x1d, 0x1c, 0x64, 0xf0, 0x68, 0xcf, 0x45, 0xff,
3094 0xa2, 0xa6, 0x3a, 0x81, 0xb7, 0xc1, 0x3f, 0x6b,
3095 0x88, 0x47, 0xa3, 0xe7, 0x7e, 0xf1, 0x4f, 0xe3,
3096 0xdb, 0x7f, 0xca, 0xfe, 0x0c, 0xbd, 0x10, 0xe8,
3097 0xe8, 0x26, 0xe0, 0x34, 0x36, 0xd6, 0x46, 0xaa,
3098 0xef, 0x87, 0xb2, 0xe2, 0x47, 0xd4, 0xaf, 0x1e,
3100 0x8a, 0xbe, 0x1d, 0x75, 0x20, 0xf9, 0xc2, 0xa4,
3101 0x5c, 0xb1, 0xeb, 0x8e, 0x95, 0xcf, 0xd5, 0x52,
3102 0x62, 0xb7, 0x0b, 0x29, 0xfe, 0xec, 0x58, 0x64,
3103 0xe1, 0x9c, 0x05, 0x4f, 0xf9, 0x91, 0x29, 0x28,
3104 0x0e, 0x46, 0x46, 0x21, 0x77, 0x91, 0x81, 0x11,
3105 0x42, 0x82, 0x03, 0x41, 0x26, 0x3c, 0x53, 0x15,
3107 0x8c, 0xb9, 0x1e, 0x82, 0xa3, 0x38, 0x6d, 0x28,
3108 0x0f, 0x5d, 0x6f, 0x7e, 0x50, 0xe6, 0x41, 0xdf,
3109 0x15, 0x2f, 0x71, 0x09, 0xed, 0x54, 0x56, 0xb3,
3110 0x1f, 0x16, 0x6e, 0x6c, 0xac, 0x04, 0x25, 0xa7,
3111 0xcf, 0x3a, 0xb6, 0xaf, 0x6b, 0x7f, 0xc3, 0x10,
3112 0x3b, 0x88, 0x32, 0x02, 0xe9, 0x04, 0x65, 0x65,
3175 struct key **ret_key )
3189 size =
sizeof(*blob) +
blob->cbKey * 2;
3192 priv = pub +
blob->cbKey * 2;
3221 key->
a.bitlen = bitlen;
3229 const UCHAR *prime, *generator, *pub, *priv =
NULL;
3239 size =
sizeof(*blob) +
blob->cbKey * 3;
3250 generator = prime +
blob->cbKey;
3261 pub = generator +
blob->cbKey;
3264 priv = pub +
blob->cbKey;
3272 key->
a.dsa.handle ))
3290 const UCHAR *prime_p, *prime_q, *generator, *pub =
NULL, *priv =
NULL, *seed, *
count;
3302 size =
sizeof(*hdr) +
sizeof(*dsskey);
3306 size += key_size * 2 + 20 + 20 + 20 + 4 ;
3315 prime_p = (
const UCHAR *)(dsskey + 1);
3316 prime_q = prime_p + key_size;
3317 generator = prime_q + 20;
3318 seed = generator + key_size + 20;
3331 priv = generator + key_size;
3336 pub = generator + key_size;
3341 key->
a.dsa.handle ))
3367 size =
sizeof(*blob) +
blob->cbKey * 3;
3388 pub = generator +
blob->cbKey;
3391 priv = pub +
blob->cbKey;
3392 priv_size =
blob->cbKey;
3396 key->
a.dsa.handle ))
3407 struct key **ret_key )
3457 if (input_len <
sizeof(*
blob))
return NULL;
3459 switch (
blob->Magic)
3476 FIXME(
"unsupported key magic %#lx\n",
blob->Magic );
3488 TRACE(
"%p, %p, %s, %p, %p, %lu, %#lx\n",
handle, decrypt_key_handle,
debugstr_w(
type), ret_handle,
input,
3493 if (decrypt_key_handle)
3495 FIXME(
"decryption of key not yet supported\n" );
3502 TRACE(
"returning handle %p\n", *ret_handle );
3541 key->
a.bitlen = bitlen;
3562 FIXME(
"unhandled algorithm %u\n", alg->
id );
3586 TRACE(
"returning handle %p\n", *ret_handle );
3639 if (!(
key->
a.dsa.group))
3674 switch (
src->alg_id)
3696 dst->s.mode =
src->s.mode;
3697 dst->s.block_size =
src->s.block_size;
3698 if (
src->s.secret_len && !(
dst->s.secret =
malloc(
src->s.secret_len )))
3704 dst->s.secret_len =
src->s.secret_len;
3709 FIXME(
"algorithm %u not supported\n",
src->alg_id );
3721 struct key *key_copy;
3724 TRACE(
"%p, %p, %p, %lu, %#lx\n",
handle, handle_copy,
object, object_len,
flags );
3725 if (
object)
FIXME(
"ignoring object buffer\n" );
3731 *handle_copy = key_copy;
3733 TRACE(
"returning handle %p\n", *handle_copy );
3786 if (signature_len < required_len)
3835 if (signature_len < required_len)
3853 ULONG required_len = hash_len * 2;
3855 if (signature_len < required_len)
3875 TRACE(
"%p, %p, %p, %lu, %p, %lu, %p, %#lx\n",
handle,
padding,
hash, hash_len,
signature, signature_len,
3980 TRACE(
"%p, %p, %p, %lu, %p, %lu, %#lx\n",
handle,
padding,
hash, hash_len,
signature, signature_len,
flags );
4020#define HMAC_PAD_LEN 64
4033 FIXME(
"algorithm handle not supported\n" );
4044 for (
i = 0;
i <
sizeof(pad1);
i++)
4078 TRACE(
"%p, %p, %p, %#lx\n", privkey_handle, pubkey_handle, ret_handle,
flags );
4117 FIXME(
"algorithm %u not supported\n", privkey->
alg_id );
4123 TRACE(
"returning handle %p\n", *ret_handle );
4148 FIXME(
"hash algorithm %u not supported\n", alg );
4159 TRACE(
"%p, %p, %lu, %p, %lu, %s, %p, %lu, %#lx\n",
handle,
pwd,
pwd_len,
salt,
salt_len,
4176 if (!
desc)
return alg;
4177 for (
i = 0;
i <
desc->cBuffers;
i++)
4194 else FIXME(
"buffer type %lu not supported\n",
desc->pBuffers[
i].BufferType );
4226 derived_key_len = 0;
4230 memcpy( derived_key + derived_key_len,
desc->pBuffers[
i].pvBuffer,
desc->pBuffers[
i].cbBuffer );
4231 derived_key_len +=
desc->pBuffers[
i].cbBuffer;
4271 TRACE(
"%p, %s, %p, %p, %lu, %p, %#lx\n",
secret,
debugstr_w(kdf),
desc, output, output_len,
ret_len,
flags );
4300 for (
i = 0;
i <
desc->cBuffers;
i++)
4302 switch (
desc->pBuffers[
i].BufferType)
4316 WARN(
"unexpected buffer type %lu\n",
desc->pBuffers[
i].BufferType );
4334 ULONG label_len = 0, seed_len = 0,
i;
4340 for (
i = 0;
i <
desc->cBuffers;
i++)
4342 switch (
desc->pBuffers[
i].BufferType)
4346 label_len =
desc->pBuffers[
i].cbBuffer;
4349 seed =
desc->pBuffers[
i].pvBuffer;
4350 seed_len =
desc->pBuffers[
i].cbBuffer;
4356 WARN(
"unexpected buffer type %lu\n",
desc->pBuffers[
i].BufferType );
4365 output, output_len );
4383 for (
i = 0;
i <
desc->cBuffers;
i++)
4385 switch (
desc->pBuffers[
i].BufferType)
4389 info_len =
desc->pBuffers[
i].cbBuffer;
4392 WARN(
"unexpected buffer type %lu\n",
desc->pBuffers[
i].BufferType );
4410 TRACE(
"%p, %p, %p, %lu, %p, %#lx\n",
key,
desc, output, output_len,
ret_len,
flags );
std::map< E_MODULE, HMODULE > mod
COMPILER_DEPENDENT_UINT64 UINT64
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
#define BCRYPT_MD4_ALGORITHM
#define BCRYPT_KEY_LENGTHS
#define LEGACY_RSAPRIVATE_BLOB
#define BCRYPT_RSAPUBLIC_BLOB
#define BCRYPT_RNG_ALG_HANDLE
#define LEGACY_DSA_V2_PRIVATE_BLOB
#define BCRYPT_HKDF_HASH_ALGORITHM
#define BCRYPT_ECDH_P384_ALGORITHM
#define BCRYPT_SECRET_AGREEMENT_OPERATION
#define BCRYPT_3DES_ALGORITHM
#define BCRYPT_CHAIN_MODE_GCM
#define BCRYPT_SIGNATURE_OPERATION
#define BCRYPT_HASH_OPERATION
#define BCRYPT_DH_PUBLIC_MAGIC
#define BCRYPT_ECDH_PRIVATE_P256_MAGIC
#define BCRYPT_KEY_DATA_BLOB_MAGIC
#define BCRYPT_ECDSA_PUBLIC_GENERIC_MAGIC
#define BCRYPT_ECDSA_PUBLIC_P256_MAGIC
#define BCRYPT_SIGNATURE_LENGTH
#define BCRYPT_ECDSA_P384_ALGORITHM
#define BCRYPT_ECCPUBLIC_BLOB
#define BCRYPT_RSA_ALGORITHM
#define BCRYPT_KEY_DERIVATION_INTERFACE
#define BCRYPT_ECDH_PUBLIC_P384_MAGIC
#define BCRYPT_SHA256_ALG_HANDLE
#define LEGACY_DSA_V2_PUBLIC_BLOB
#define BCRYPT_SHA384_ALG_HANDLE
#define BCRYPT_HKDF_ALGORITHM
#define BCRYPT_ECDH_P521_ALGORITHM
#define BCRYPT_HASH_BLOCK_LENGTH
#define BCRYPT_OBJECT_LENGTH
#define BCRYPT_RC4_ALGORITHM
#define BCRYPT_ECDSA_PUBLIC_P384_MAGIC
#define BCRYPT_ECDSA_ALGORITHM
#define BCRYPT_KEY_LENGTH
#define BCRYPT_AUTH_TAG_LENGTH
#define BCRYPT_CHAINING_MODE
#define BCRYPT_CHAIN_MODE_CFB
#define BCRYPT_CHAIN_MODE_CBC
#define KDF_ITERATION_COUNT
#define BCRYPT_KEY_DATA_BLOB
#define BCRYPT_SHA512_ALGORITHM
#define BCRYPT_ALGORITHM_NAME
#define BCRYPT_DH_PARAMETERS
#define BCRYPT_DSA_ALGORITHM
#define BCRYPT_KEY_STRENGTH
#define BCRYPT_ECC_CURVE_NAME
#define BCRYPT_ECC_CURVE_25519
#define BCRYPT_ECC_CURVE_SECP384R1
#define BCRYPT_AES_ALGORITHM
#define BCRYPT_PBKDF2_ALGORITHM
#define BCRYPT_ECC_CURVE_BRAINPOOLP256R1
#define BCRYPT_SUPPORTED_PAD_PKCS1_SIG
struct _BCRYPT_KEY_DATA_BLOB_HEADER BCRYPT_KEY_DATA_BLOB_HEADER
#define BCRYPT_RSAFULLPRIVATE_MAGIC
#define BCRYPT_BLOCK_LENGTH
#define BCRYPT_MD2_ALGORITHM
#define BCRYPT_SECRET_AGREEMENT_INTERFACE
#define BCRYPT_PUBLIC_KEY_BLOB
#define BCRYPT_SHA256_ALGORITHM
#define BCRYPT_CHAIN_MODE_NA
#define BCRYPT_RSAPRIVATE_MAGIC
#define BCRYPT_CIPHER_INTERFACE
#define BCRYPT_RSAPRIVATE_BLOB
#define KDF_SECRET_PREPEND
#define BCRYPT_DSA_PUBLIC_BLOB
#define BCRYPT_SUPPORTED_PAD_OAEP
#define BCRYPT_ASYMMETRIC_ENCRYPTION_INTERFACE
#define BCRYPT_RNG_OPERATION
#define BCRYPT_ECDH_PUBLIC_P256_MAGIC
#define BCRYPT_ALG_HANDLE_HMAC_FLAG
#define BCRYPT_ECCPRIVATE_BLOB
#define KDF_HASH_ALGORITHM
#define BCRYPT_ECDSA_PRIVATE_P521_MAGIC
#define BCRYPT_CIPHER_OPERATION
#define BCRYPT_ECDSA_P256_ALGORITHM
#define BCRYPT_HKDF_PRK_AND_FINALIZE
#define BCRYPT_RNG_ALGORITHM
#define BCRYPT_DSA_PRIVATE_MAGIC
#define BCRYPT_AES_WRAP_KEY_BLOB
#define BCRYPT_HKDF_SALT_AND_FINALIZE
#define BCRYPT_ECDSA_P521_ALGORITHM
#define BCRYPT_DSA_PRIVATE_BLOB
#define BCRYPT_HASH_LENGTH
#define BCRYPT_ECDSA_PRIVATE_P256_MAGIC
#define BCRYPT_ECDH_ALGORITHM
#define BCRYPT_SIGNATURE_INTERFACE
#define BCRYPT_KDF_RAW_SECRET
#define BCRYPT_ECDSA_PRIVATE_P384_MAGIC
#define BCRYPT_ECC_CURVE_BRAINPOOLP384R1
#define BCRYPT_BLOCK_PADDING
#define BCRYPT_SHA512_ALG_HANDLE
#define BCRYPT_ECDSA_PUBLIC_P521_MAGIC
#define BCRYPT_AES_GMAC_ALGORITHM
#define BCRYPT_PADDING_SCHEMES
#define BCRYPT_DH_PARAMETERS_MAGIC
#define BCRYPT_ECDSA_PRIVATE_GENERIC_MAGIC
#define BCRYPT_RSAPUBLIC_MAGIC
#define BCRYPT_ECDH_PRIVATE_P384_MAGIC
#define BCRYPT_KEY_DERIVATION_OPERATION
#define BCRYPT_TLS1_2_KDF_ALGORITHM
#define BCRYPT_HASH_REUSABLE_FLAG
#define BCRYPT_KEY_DATA_BLOB_VERSION1
#define BCRYPT_INITIALIZATION_VECTOR
#define BCRYPT_HASH_INTERFACE
#define BCRYPT_ECC_CURVE_SECP256R1
#define MS_PRIMITIVE_PROVIDER
#define BCRYPT_ECDH_PUBLIC_P521_MAGIC
#define KDF_TLS_PRF_LABEL
#define BCRYPT_DH_PRIVATE_BLOB
#define BCRYPT_AUTH_MODE_CHAIN_CALLS_FLAG
#define BCRYPT_ECDH_P256_ALGORITHM
#define BCRYPT_ASYMMETRIC_ENCRYPTION_OPERATION
#define BCRYPT_CHACHA20_POLY1305_ALGORITHM
#define BCRYPT_ECDH_PRIVATE_P521_MAGIC
#define BCRYPT_RSA_SIGN_ALGORITHM
#define BCRYPT_SHA384_ALGORITHM
#define BCRYPT_DSA_PUBLIC_MAGIC
#define BCRYPT_OPAQUE_KEY_BLOB
#define BCRYPT_DH_ALGORITHM
#define BCRYPT_TLS1_1_KDF_ALGORITHM
#define BCRYPT_CHAIN_MODE_ECB
#define BCRYPT_SHA1_ALGORITHM
#define BCRYPT_RNG_INTERFACE
#define BCRYPT_RSAFULLPRIVATE_BLOB
#define BCRYPT_MESSAGE_BLOCK_LENGTH
#define BCRYPT_ECC_CURVE_SECP521R1
#define BCRYPT_ECDH_PUBLIC_GENERIC_MAGIC
#define BCRYPT_MD5_ALGORITHM
#define BCRYPT_ECDH_PRIVATE_GENERIC_MAGIC
#define BCRYPT_SHA1_ALG_HANDLE
#define BCRYPT_DH_PUBLIC_BLOB
#define BCRYPT_DH_PRIVATE_MAGIC
#define BCRYPT_USE_SYSTEM_PREFERRED_RNG
NTSTATUS WINAPI BCryptAddContextFunctionProvider(ULONG table, const WCHAR *ctx, ULONG iface, const WCHAR *func, const WCHAR *provider, ULONG pos)
#define MAX_HASH_OUTPUT_BYTES
static const struct algorithm pseudo_algorithms[]
static NTSTATUS export_rsa_key(const struct key *key, UCHAR *output, ULONG output_len, ULONG flags, ULONG *ret_len)
NTSTATUS WINAPI BCryptSecretAgreement(BCRYPT_KEY_HANDLE privkey_handle, BCRYPT_KEY_HANDLE pubkey_handle, BCRYPT_SECRET_HANDLE *ret_handle, ULONG flags)
static NTSTATUS get_hash_oid(const WCHAR *str, const SYMCRYPT_OID **oid, UINT32 *oid_count)
NTSTATUS WINAPI BCryptRemoveContextFunctionProvider(ULONG table, const WCHAR *ctx, ULONG iface, const WCHAR *func, const WCHAR *provider)
static NTSTATUS get_rsa_property(const WCHAR *prop, UCHAR *buf, ULONG size, ULONG *ret_size)
static const SYMCRYPT_HASH * get_hash_from_alg(enum alg_id alg_id)
static NTSTATUS derive_key_hash(const struct secret *secret, const BCryptBufferDesc *desc, UCHAR *output, ULONG output_len, ULONG *ret_len)
void SYMCRYPT_CALL SymCryptEcDsaSelftest(void)
NTSTATUS WINAPI BCryptGenRandom(BCRYPT_ALG_HANDLE handle, UCHAR *buffer, ULONG count, ULONG flags)
static NTSTATUS get_rc4_property(const WCHAR *prop, UCHAR *buf, ULONG size, ULONG *ret_size)
NTSTATUS WINAPI BCryptDuplicateKey(BCRYPT_KEY_HANDLE handle, BCRYPT_KEY_HANDLE *handle_copy, UCHAR *object, ULONG object_len, ULONG flags)
static NTSTATUS export_dh_key(const struct key *key, UCHAR *output, ULONG output_len, ULONG flags, ULONG *ret_len)
static NTSTATUS validate_len_aes(const BCRYPT_KEY_LENGTHS_STRUCT *key_lengths, ULONG secret_len, ULONG *ret_len)
static void destroy_key(struct key *key)
static const BYTE brainpoolP384r1[]
static NTSTATUS get_key_property(const struct key *key, const WCHAR *prop, UCHAR *buf, ULONG size, ULONG *ret_size)
static ULONG curve_strength(enum ecc_curve_id curve_id)
NTSTATUS WINAPI BCryptHashData(BCRYPT_HASH_HANDLE handle, UCHAR *input, ULONG size, ULONG flags)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptRsaSignVerifyPct(const SYMCRYPT_RSAKEY *key)
NTSTATUS WINAPI BCryptGetProperty(BCRYPT_HANDLE handle, const WCHAR *prop, UCHAR *buffer, ULONG count, ULONG *res, ULONG flags)
static NTSTATUS get_pbkdf2_property(const WCHAR *prop, UCHAR *buf, ULONG size, ULONG *ret_size)
const SYMCRYPT_ECURVE_PARAMS * SymCryptEcurveParamsBrainpoolP256r1
static NTSTATUS set_dh_parameters(struct key *key, const UCHAR *buf, ULONG size)
static void finish_hash(struct hash *hash, UCHAR *output)
static const struct @409 builtin_algorithms[]
static ULONG curve_size(enum ecc_curve_id curve_id)
static NTSTATUS set_key_property(struct key *key, const WCHAR *prop, UCHAR *value, ULONG size, ULONG flags)
#define KEY_EXPORT_FLAG_PRIVATE
NTSTATUS WINAPI BCryptCreateHash(BCRYPT_ALG_HANDLE handle, BCRYPT_HASH_HANDLE *ret_handle, UCHAR *object, ULONG object_len, UCHAR *secret, ULONG secret_len, ULONG flags)
static NTSTATUS alloc_dsa_key(struct key *key, ULONG bitlen)
NTSTATUS WINAPI BCryptDecrypt(BCRYPT_KEY_HANDLE handle, UCHAR *input, ULONG input_len, void *padding, UCHAR *iv, ULONG iv_len, UCHAR *output, ULONG output_len, ULONG *ret_len, ULONG flags)
enum ecc_curve_id curve_id
NTSTATUS WINAPI BCryptUnregisterProvider(const WCHAR *provider)
static NTSTATUS encrypt_rsa(const struct key *key, const UCHAR *input, ULONG input_len, const void *padding, UCHAR *output, ULONG output_len, ULONG *ret_len, ULONG flags)
#define KEY_FLAG_FINALIZED
void SYMCRYPT_CALL SymCryptDsaSelftest(void)
static NTSTATUS decrypt_symmetric(struct key *key, const UCHAR *input, ULONG input_len, const BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO *info, UCHAR *iv, ULONG iv_len, UCHAR *output, ULONG output_len, ULONG *ret_len, ULONG flags)
static NTSTATUS duplicate_key(const struct key *src, struct key **ret_key)
NTSTATUS WINAPI BCryptRemoveContextFunction(ULONG table, const WCHAR *ctx, ULONG iface, const WCHAR *func)
static struct algorithm * get_alg_object(BCRYPT_ALG_HANDLE handle)
static NTSTATUS import_dh_key(enum alg_id alg, const UCHAR *input, ULONG input_len, struct key **ret_key)
NTSTATUS WINAPI BCryptImportKeyPair(BCRYPT_ALG_HANDLE handle, BCRYPT_KEY_HANDLE decrypt_key_handle, const WCHAR *type, BCRYPT_KEY_HANDLE *ret_handle, UCHAR *input, ULONG input_len, ULONG flags)
static NTSTATUS get_3des_property(enum chain_mode mode, const WCHAR *prop, UCHAR *buf, ULONG size, ULONG *ret_size)
NTSTATUS WINAPI BCryptGenerateKeyPair(BCRYPT_ALG_HANDLE handle, BCRYPT_KEY_HANDLE *ret_handle, ULONG bitlen, ULONG flags)
static NTSTATUS key_derivation_hkdf(const struct key *key, BCryptBufferDesc *desc, UCHAR *output, ULONG output_len, ULONG *ret_len)
static NTSTATUS import_ecc_key(enum alg_id alg, enum ecc_curve_id curve, const UCHAR *input, ULONG input_len, struct key **ret_key)
static ULONG len_from_bitlen(ULONG bitlen)
NTSTATUS WINAPI BCryptRegisterProvider(const WCHAR *provider, ULONG flags, CRYPT_PROVIDER_REG *reg)
static NTSTATUS get_dsa_property(const WCHAR *prop, UCHAR *buf, ULONG size, ULONG *ret_size)
NTSTATUS WINAPI BCryptDeriveKeyPBKDF2(BCRYPT_ALG_HANDLE handle, UCHAR *pwd, ULONG pwd_len, UCHAR *salt, ULONG salt_len, ULONGLONG iterations, UCHAR *key, ULONG key_len, ULONG flags)
NTSTATUS WINAPI BCryptDestroyHash(BCRYPT_HASH_HANDLE handle)
static NTSTATUS key_derivation_pbkdf2(const struct key *key, BCryptBufferDesc *desc, UCHAR *output, ULONG output_len, ULONG *ret_len)
static NTSTATUS alloc_ecc_key(struct key *key, enum ecc_curve_id curve_id)
static const SYMCRYPT_MAC * get_hmac_from_hash(const WCHAR *alg)
BOOL WINAPI DllMain(HINSTANCE hinst, DWORD reason, LPVOID reserved)
static NTSTATUS get_dh_parameters(const struct key *key, UCHAR *buf, ULONG size, ULONG *ret_size)
NTSTATUS WINAPI BCryptGenerateSymmetricKey(BCRYPT_ALG_HANDLE handle, BCRYPT_KEY_HANDLE *ret_handle, UCHAR *object, ULONG object_len, UCHAR *secret, ULONG secret_len, ULONG flags)
static void destroy_secret(struct secret *secret)
static NTSTATUS decrypt_aes_vector(struct key *key, const UCHAR *input, ULONG input_len, UCHAR *iv, UCHAR *output, ULONG output_len, ULONG *ret_len, ULONG flags)
static NTSTATUS get_alg_property(const struct algorithm *alg, const WCHAR *prop, UCHAR *buf, ULONG size, ULONG *ret_size)
static NTSTATUS get_tls_kdf_property(const WCHAR *prop, UCHAR *buf, ULONG size, ULONG *ret_size)
static void destroy_object(struct object *obj)
static NTSTATUS import_dsa_key(enum alg_id alg, const UCHAR *input, ULONG input_len, struct key **ret_key)
static NTSTATUS alloc_aes_key(struct key *key, enum chain_mode mode, ULONG block_size, const UCHAR *secret, ULONG secret_len)
NTSTATUS WINAPI BCryptExportKey(BCRYPT_KEY_HANDLE export_key_handle, BCRYPT_KEY_HANDLE encrypt_key_handle, const WCHAR *type, UCHAR *output, ULONG output_len, ULONG *size, ULONG flags)
static SYMCRYPT_ECURVE * alloc_ecc_curve(enum ecc_curve_id curve_id)
static NTSTATUS get_hkdf_property(const WCHAR *prop, UCHAR *buf, ULONG size, ULONG *ret_size)
static NTSTATUS key_derivation_tls_prf(const struct key *key, BCryptBufferDesc *desc, UCHAR *output, ULONG output_len, ULONG *ret_len, BOOL tls1_2)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptEcDsaPct(const SYMCRYPT_ECKEY *key)
static NTSTATUS set_alg_property(struct algorithm *alg, const WCHAR *prop, UCHAR *value, ULONG size, ULONG flags)
static NTSTATUS create_hash(const struct algorithm *alg, UCHAR *secret, ULONG secret_len, ULONG flags, struct hash **ret_hash)
static NTSTATUS get_hash_property(const struct hash *hash, const WCHAR *prop, UCHAR *buf, ULONG size, ULONG *ret_size)
void SYMCRYPT_CALL SymCryptDhSecretAgreementSelftest(void)
static NTSTATUS sign_hash_ecc(const struct key *key, const UCHAR *hash, ULONG hash_len, UCHAR *signature, ULONG signature_len, ULONG *ret_len)
NTSTATUS WINAPI BCryptDuplicateHash(BCRYPT_HASH_HANDLE handle, BCRYPT_HASH_HANDLE *handle_copy, UCHAR *object, ULONG object_len, ULONG flags)
static NTSTATUS sign_hash_dsa(const struct key *key, const UCHAR *hash, ULONG hash_len, UCHAR *signature, ULONG signature_len, ULONG *ret_len)
static NTSTATUS unwrap_aes(const UCHAR *secret, ULONG secret_len, const UCHAR *cipher, ULONG cipher_len, UCHAR *plain)
static struct secret * get_secret_object(BCRYPT_SECRET_HANDLE handle)
void SYMCRYPT_CALL SymCryptCallbackFree(void *ptr)
static NTSTATUS wrap_aes(const UCHAR *secret, ULONG secret_len, const UCHAR *plain, ULONG plain_len, UCHAR *cipher)
#define BLOCK_LENGTH_CHACHA20_POLY1305
static struct algorithm * create_algorithm(enum alg_id id, DWORD flags)
static NTSTATUS hash_single(const struct algorithm *alg, UCHAR *secret, ULONG secret_len, UCHAR *input, ULONG input_len, UCHAR *output)
static NTSTATUS export_ecc_key(const struct key *key, UCHAR *output, ULONG output_len, ULONG flags, ULONG *ret_len)
NTSTATUS WINAPI BCryptEncrypt(BCRYPT_KEY_HANDLE handle, UCHAR *input, ULONG input_len, void *padding, UCHAR *iv, ULONG iv_len, UCHAR *output, ULONG output_len, ULONG *ret_len, ULONG flags)
#define BLOCK_LENGTH_3DES
UINT32 g_SymCryptFipsSelftestsPerformed
static NTSTATUS get_generic_alg_property(enum alg_id id, const WCHAR *prop, UCHAR *buf, ULONG size, ULONG *ret_size)
static NTSTATUS export_dsa_key(const struct key *key, UCHAR *output, ULONG output_len, ULONG flags, ULONG *ret_len)
static NTSTATUS decrypt_aes_ecb(const struct key *key, const UCHAR *input, ULONG input_len, UCHAR *output, ULONG output_len, ULONG *ret_len, ULONG flags)
static const SYMCRYPT_MAC * get_mac_from_alg(enum alg_id alg)
static const WCHAR * resolve_blob_type(const WCHAR *type, const UCHAR *input, ULONG input_len)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptDsaPct(const SYMCRYPT_DLKEY *key)
NTSTATUS WINAPI BCryptOpenAlgorithmProvider(BCRYPT_ALG_HANDLE *handle, const WCHAR *id, const WCHAR *implementation, DWORD flags)
NTSTATUS WINAPI BCryptEnumAlgorithms(ULONG type, ULONG *ret_count, BCRYPT_ALGORITHM_IDENTIFIER **ret_list, ULONG flags)
NTSTATUS WINAPI BCryptAddContextFunction(ULONG table, const WCHAR *ctx, ULONG iface, const WCHAR *func, ULONG pos)
void *SYMCRYPT_CALL SymCryptCallbackAlloc(SIZE_T size)
NTSTATUS WINAPI BCryptKeyDerivation(BCRYPT_KEY_HANDLE handle, BCryptBufferDesc *desc, UCHAR *output, ULONG output_len, ULONG *ret_len, ULONG flags)
static BOOL is_symmetric_alg(const struct algorithm *alg)
static void prepare_hash(struct hash *hash)
NTSTATUS WINAPI BCryptSetProperty(BCRYPT_HANDLE handle, const WCHAR *prop, UCHAR *value, ULONG size, ULONG flags)
static struct hash * get_hash_object(BCRYPT_HASH_HANDLE handle)
static const BYTE brainpoolP256r1[]
static NTSTATUS import_key_pair(const struct algorithm *alg, const WCHAR *type, const UCHAR *input, ULONG input_len, struct key **ret_key)
static NTSTATUS export_asymmetric_key(const struct key *key, const WCHAR *type, UCHAR *output, ULONG output_len, ULONG *ret_len)
static UINT32 get_ecc_import_flags(enum alg_id alg)
static NTSTATUS import_rsa_key(enum alg_id alg, const UCHAR *input, ULONG input_len, struct key **ret_key)
static NTSTATUS decrypt_aes_gcm(struct key *key, const UCHAR *input, ULONG input_len, const BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO *info, UCHAR *output, ULONG output_len, ULONG *ret_len)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptCallbackRandom(BYTE *buf, SIZE_T size)
static void destroy_hash(struct hash *hash)
static NTSTATUS generate_key_pair(const struct algorithm *alg, ULONG bitlen, ULONG flags, struct key **ret_key)
static NTSTATUS encrypt_symmetric(struct key *key, const UCHAR *input, ULONG input_len, const BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO *info, UCHAR *iv, ULONG iv_len, UCHAR *output, ULONG output_len, ULONG *ret_len, ULONG flags)
static BOOL is_symmetric_key(const struct key *key)
static NTSTATUS generate_symmetric_key(const struct algorithm *alg, const UCHAR *secret, ULONG secret_len, struct key **ret_key)
static NTSTATUS export_legacy_dsa_key(const struct key *key, UCHAR *output, ULONG output_len, ULONG flags, ULONG *ret_len)
NTSTATUS WINAPI BCryptFinalizeKeyPair(BCRYPT_KEY_HANDLE handle, ULONG flags)
static const struct algorithm * get_hash_from_desc(const BCryptBufferDesc *desc)
static NTSTATUS alloc_key(enum alg_id alg_id, ULONG flags, struct key **ret_key)
NTSTATUS WINAPI BCryptDeriveKeyCapi(BCRYPT_HASH_HANDLE handle, BCRYPT_ALG_HANDLE halg, UCHAR *key, ULONG keylen, ULONG flags)
NTSTATUS WINAPI BCryptCloseAlgorithmProvider(BCRYPT_ALG_HANDLE handle, DWORD flags)
static DWORD get_ecc_magic(enum alg_id alg, BOOL private)
static NTSTATUS encrypt_aes_gcm(struct key *key, const UCHAR *input, ULONG input_len, const BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO *info, UCHAR *output, ULONG output_len, ULONG *ret_len)
static NTSTATUS export_symmetric_key(const struct key *key, const struct key *encrypt_key, const WCHAR *type, UCHAR *output, ULONG output_len, ULONG *ret_len)
static NTSTATUS finalize_key_pair(struct key *key)
NTSTATUS WINAPI BCryptDeriveKey(BCRYPT_SECRET_HANDLE handle, const WCHAR *kdf, BCryptBufferDesc *desc, UCHAR *output, ULONG output_len, ULONG *ret_len, ULONG flags)
NTSTATUS WINAPI BCryptDestroySecret(BCRYPT_SECRET_HANDLE handle)
static NTSTATUS verify_signature_rsa(const struct key *key, const void *padding, const UCHAR *hash, ULONG hash_len, const UCHAR *signature, ULONG signature_len, ULONG flags)
NTSTATUS WINAPI BCryptVerifySignature(BCRYPT_KEY_HANDLE handle, void *padding, UCHAR *hash, ULONG hash_len, UCHAR *signature, ULONG signature_len, ULONG flags)
NTSTATUS WINAPI BCryptImportKey(BCRYPT_ALG_HANDLE handle, BCRYPT_KEY_HANDLE decrypt_key_handle, const WCHAR *type, BCRYPT_KEY_HANDLE *ret_handle, UCHAR *object, ULONG object_len, UCHAR *input, ULONG input_len, ULONG flags)
static NTSTATUS verify_signature_dsa(const struct key *key, const UCHAR *hash, ULONG hash_len, const UCHAR *signature, ULONG signature_len, ULONG flags)
#define KEY_EXPORT_FLAG_RSA_FULL
static NTSTATUS derive_key_raw(const struct secret *secret, UCHAR *output, ULONG output_len, ULONG *ret_len)
static enum ecc_curve_id get_ecc_blob_curve(enum alg_id alg, const BCRYPT_ECCKEY_BLOB *blob, ULONG *size, ULONG *flags)
static NTSTATUS import_legacy_rsa_key(enum alg_id alg, const UCHAR *input, ULONG input_len, struct key **ret_key)
@ ECC_CURVE_BRAINPOOLP384R1
@ ECC_CURVE_BRAINPOOLP256R1
static NTSTATUS verify_signature_ecc(const struct key *key, const UCHAR *hash, ULONG hash_len, const UCHAR *signature, ULONG signature_len, ULONG flags)
static NTSTATUS import_key(const struct algorithm *alg, const struct key *decrypt_key, const WCHAR *type, const UCHAR *input, ULONG input_len, struct key **ret_key)
static NTSTATUS get_dword_property(UCHAR *buf, ULONG size, ULONG *ret_size, DWORD value)
static NTSTATUS sign_hash_rsa(const struct key *key, const void *padding, const UCHAR *hash, ULONG hash_len, UCHAR *signature, ULONG signature_len, ULONG *ret_len, ULONG flags)
NTSTATUS WINAPI BCryptSignHash(BCRYPT_KEY_HANDLE handle, void *padding, UCHAR *hash, ULONG hash_len, UCHAR *signature, ULONG signature_len, ULONG *ret_len, ULONG flags)
static struct object * get_object(BCRYPT_HANDLE handle, ULONG magic)
NTSTATUS WINAPI BCryptDestroyKey(BCRYPT_KEY_HANDLE handle)
static void secure_zero(void *ptr, SIZE_T size)
static NTSTATUS encrypt_aes_vector(struct key *key, const UCHAR *input, ULONG input_len, UCHAR *iv, UCHAR *output, ULONG output_len, ULONG *ret_len, ULONG flags)
static NTSTATUS get_chacha20_poly1305_property(const WCHAR *prop, UCHAR *buf, ULONG size, ULONG *ret_size)
void SYMCRYPT_CALL SymCryptRsaSelftest(void)
void SYMCRYPT_CALL SymCryptEcDhSecretAgreementSelftest(void)
static NTSTATUS hkdf_finalize(struct key *key, UCHAR *salt, ULONG salt_len)
static NTSTATUS encrypt_aes_ecb(const struct key *key, const UCHAR *input, ULONG input_len, UCHAR *output, ULONG output_len, ULONG *ret_len, ULONG flags)
static BOOL is_alg_pseudo_handle(BCRYPT_ALG_HANDLE handle)
static NTSTATUS import_legacy_dsa_key(enum alg_id alg, const UCHAR *input, ULONG input_len, struct key **ret_key)
static struct key * get_key_object(BCRYPT_KEY_HANDLE handle)
static NTSTATUS decrypt_rsa(const struct key *key, const UCHAR *input, ULONG input_len, const void *padding, UCHAR *output, ULONG output_len, ULONG *ret_len, ULONG flags)
NTSTATUS WINAPI BCryptFinishHash(BCRYPT_HASH_HANDLE handle, UCHAR *output, ULONG size, ULONG flags)
void WINAPI BCryptFreeBuffer(void *buffer)
const SYMCRYPT_ECURVE_PARAMS * SymCryptEcurveParamsBrainpoolP384r1
static BOOL match_operation_type(ULONG type, ULONG class)
NTSTATUS WINAPI BCryptHash(BCRYPT_ALG_HANDLE handle, UCHAR *secret, ULONG secret_len, UCHAR *input, ULONG input_len, UCHAR *output, ULONG output_len)
static NTSTATUS get_aes_property(enum chain_mode mode, const WCHAR *prop, UCHAR *buf, ULONG size, ULONG *ret_size)
#define HASH_FLAG_REUSABLE
static NTSTATUS alloc_rsa_key(struct key *key, ULONG bitlen)
NTSTATUS WINAPI BCryptGetFipsAlgorithmMode(BOOLEAN *enabled)
@ ALG_ID_CHACHA20_POLY1305
NTSTATUS WINAPI BCryptEnumContextFunctions(ULONG table, const WCHAR *ctx, ULONG iface, ULONG *buflen, CRYPT_CONTEXT_FUNCTIONS **buffer)
static const SYMCRYPT_HASH * get_hash_from_str(const WCHAR *str)
#define STATUS_INVALID_HANDLE
#define STATUS_NOT_IMPLEMENTED
#define STATUS_NOT_SUPPORTED
static WCHAR reason[MAX_STRING_RESOURCE_LEN]
#define DLL_PROCESS_ATTACH
#define DLL_PROCESS_DETACH
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
static const WCHAR pubkey[]
BOOL WINAPI DisableThreadLibraryCalls(IN HMODULE hLibModule)
void *CDECL _aligned_malloc(size_t size, size_t alignment)
void CDECL _aligned_free(void *memblock)
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
_ACRTIMP int __cdecl wcscmp(const wchar_t *, const wchar_t *)
GLuint GLuint GLsizei count
GLuint GLuint GLsizei GLenum type
GLdouble GLdouble GLdouble r
GLenum GLenum GLsizei const GLuint GLboolean enabled
GLboolean GLboolean GLboolean b
GLenum GLuint GLenum GLsizei const GLchar * buf
GLboolean GLboolean GLboolean GLboolean a
GLenum const GLfloat * params
GLenum GLenum GLenum input
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
static DWORD block_size(DWORD block)
#define memcpy(s1, s2, n)
static const WCHAR label[]
D3D11_SHADER_VARIABLE_DESC desc
static JOBOBJECTINFOCLASS LPVOID DWORD LPDWORD ret_len
static const struct @1962 hash_data[]
static const DWORD padding[]
static void ULONG ULONG * ret_size
#define TYPE_ALIGNMENT(t)
#define STATUS_INTERNAL_ERROR
#define STATUS_AUTH_TAG_MISMATCH
#define STATUS_INVALID_BUFFER_SIZE
#define STATUS_INVALID_SIGNATURE
#define STATUS_BUFFER_TOO_SMALL
SYMCRYPT_AES_EXPANDED_KEY handle
enum ecc_curve_id curve_id
enum chain_mode chain_mode
enum ecc_curve_id curve_id
SYMCRYPT_GCM_EXPANDED_KEY handle
SYMCRYPT_HASH_STATE state
SYMCRYPT_HMAC_EXPANDED_KEY hmac
SYMCRYPT_HMAC_STATE hmac_state
const SYMCRYPT_HASH * desc
SYMCRYPT_HKDF_EXPANDED_KEY handle
const SYMCRYPT_MAC * hmac
PSYMCRYPT_RSAKEY SYMCRYPT_CALL SymCryptRsakeyAllocate(_In_ PCSYMCRYPT_RSA_PARAMS pParams, _In_ UINT32 flags)
VOID SYMCRYPT_CALL SymCryptEcurveFree(_Out_ PSYMCRYPT_ECURVE pCurve)
VOID SYMCRYPT_CALL SymCryptGcmInit(_Out_ PSYMCRYPT_GCM_STATE pState, _In_ PCSYMCRYPT_GCM_EXPANDED_KEY pExpandedKey, _In_reads_(cbNonce) PCBYTE pbNonce, SIZE_T cbNonce)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptHkdfExpandKey(_Out_ PSYMCRYPT_HKDF_EXPANDED_KEY pExpandedKey, _In_ PCSYMCRYPT_MAC macAlgorithm, _In_reads_(cbIkm) PCBYTE pbIkm, SIZE_T cbIkm, _In_reads_opt_(cbSalt) PCBYTE pbSalt, SIZE_T cbSalt)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptRsakeySetValue(_In_reads_bytes_(cbModulus) PCBYTE pbModulus, SIZE_T cbModulus, _In_reads_(nPubExp) PCUINT64 pu64PubExp, UINT32 nPubExp, _In_reads_opt_(nPrimes) PCBYTE *ppPrimes, _In_reads_opt_(nPrimes) SIZE_T *pcbPrimes, UINT32 nPrimes, SYMCRYPT_NUMBER_FORMAT numFormat, UINT32 flags, _Inout_ PSYMCRYPT_RSAKEY pkRsakey)
SYMCRYPT_NOINLINE VOID SYMCRYPT_CALL SymCryptHmacResult(_Inout_ PSYMCRYPT_HMAC_STATE pState, _Out_writes_(pState->pKey->pHash->resultSize) PBYTE pbResult)
VOID SYMCRYPT_CALL SymCryptEckeyFree(_Out_ PSYMCRYPT_ECKEY pkObj)
VOID SYMCRYPT_CALL SymCryptGcmEncryptPart(_Inout_ PSYMCRYPT_GCM_STATE pState, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
#define SYMCRYPT_FLAG_RSA_PKCS1_NO_ASN1
UINT32 SYMCRYPT_CALL SymCryptRsakeySizeofPrime(_In_ PCSYMCRYPT_RSAKEY pkRsakey, UINT32 index)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptDlkeySetValue(_In_reads_bytes_(cbPrivateKey) PCBYTE pbPrivateKey, SIZE_T cbPrivateKey, _In_reads_bytes_(cbPublicKey) PCBYTE pbPublicKey, SIZE_T cbPublicKey, SYMCRYPT_NUMBER_FORMAT numFormat, UINT32 flags, _Inout_ PSYMCRYPT_DLKEY pkDlkey)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptEcDhSecretAgreement(_In_ PCSYMCRYPT_ECKEY pkPrivate, _In_ PCSYMCRYPT_ECKEY pkPublic, SYMCRYPT_NUMBER_FORMAT format, UINT32 flags, _Out_writes_(cbAgreedSecret) PBYTE pbAgreedSecret, SIZE_T cbAgreedSecret)
VOID SYMCRYPT_CALL SymCryptEcbEncrypt(_In_ PCSYMCRYPT_BLOCKCIPHER pBlockCipher, _In_ PCVOID pExpandedKey, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptRsakeyGenerate(_Inout_ PSYMCRYPT_RSAKEY pkRsakey, _In_reads_opt_(nPubExp) PCUINT64 pu64PubExp, UINT32 nPubExp, _In_ UINT32 flags)
const PCSYMCRYPT_ECURVE_PARAMS SymCryptEcurveParamsNistP521
VOID SYMCRYPT_CALL SymCryptCfbDecrypt(_In_ PCSYMCRYPT_BLOCKCIPHER pBlockCipher, SIZE_T cbShift, _In_ PCVOID pExpandedKey, _Inout_updates_(pBlockCipher->blockSize) PBYTE pbChainingValue, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptRsakeyGetValue(_In_ PCSYMCRYPT_RSAKEY pkRsakey, _Out_writes_bytes_(cbModulus) PBYTE pbModulus, SIZE_T cbModulus, _Out_writes_opt_(nPubExp) PUINT64 pu64PubExp, UINT32 nPubExp, _Out_writes_opt_(nPrimes) PBYTE *ppPrimes, _In_reads_opt_(nPrimes) SIZE_T *pcbPrimes, UINT32 nPrimes, SYMCRYPT_NUMBER_FORMAT numFormat, UINT32 flags)
#define SYMCRYPT_FLAG_DLKEY_DSA
VOID SYMCRYPT_CALL SymCryptHashAppend(_In_ PCSYMCRYPT_HASH pHash, _Inout_updates_bytes_(pHash->stateSize) PVOID pState, _In_reads_(cbData) PCBYTE pbData, SIZE_T cbData)
@ SYMCRYPT_DLGROUP_FIPS_186_2
@ SYMCRYPT_DLGROUP_FIPS_NONE
UINT32 SYMCRYPT_CALL SymCryptEckeySizeofPrivateKey(_In_ PCSYMCRYPT_ECKEY pkEckey)
const PCSYMCRYPT_BLOCKCIPHER SymCryptAesBlockCipher
VOID SYMCRYPT_CALL SymCryptGcmKeyCopy(_In_ PCSYMCRYPT_GCM_EXPANDED_KEY pSrc, _Out_ PSYMCRYPT_GCM_EXPANDED_KEY pDst)
VOID SYMCRYPT_CALL SymCryptCbcEncrypt(_In_ PCSYMCRYPT_BLOCKCIPHER pBlockCipher, _In_ PCVOID pExpandedKey, _Inout_updates_(pBlockCipher->blockSize) PBYTE pbChainingValue, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
VOID SYMCRYPT_CALL SymCryptRsakeyFree(_Out_ PSYMCRYPT_RSAKEY pkObj)
const PCSYMCRYPT_MAC SymCryptHmacSha1Algorithm
const PCSYMCRYPT_ECURVE_PARAMS SymCryptEcurveParamsNistP384
VOID SYMCRYPT_CALL SymCryptHmacKeyCopy(_In_ PCSYMCRYPT_HMAC_EXPANDED_KEY pSrc, _Out_ PSYMCRYPT_HMAC_EXPANDED_KEY pDst)
const PCSYMCRYPT_MAC SymCryptHmacSha512Algorithm
const PCSYMCRYPT_MAC SymCryptHmacSha256Algorithm
VOID SYMCRYPT_CALL SymCryptGcmEncryptFinal(_Inout_ PSYMCRYPT_GCM_STATE pState, _Out_writes_(cbTag) PBYTE pbTag, SIZE_T cbTag)
const PCSYMCRYPT_HASH SymCryptSha256Algorithm
VOID SYMCRYPT_CALL SymCryptHashInit(_In_ PCSYMCRYPT_HASH pHash, _Out_writes_bytes_(pHash->stateSize) PVOID pState)
VOID SYMCRYPT_CALL SymCryptInit(void)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptRsaPkcs1Verify(_In_ PCSYMCRYPT_RSAKEY pkRsakey, _In_reads_bytes_(cbHashValue) PCBYTE pbHashValue, SIZE_T cbHashValue, _In_reads_bytes_(cbSignature) PCBYTE pbSignature, SIZE_T cbSignature, SYMCRYPT_NUMBER_FORMAT nfSignature, _In_reads_opt_(nOIDCount) PCSYMCRYPT_OID pHashOID, _In_ SIZE_T nOIDCount, UINT32 flags)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptRsaPssSign(_In_ PCSYMCRYPT_RSAKEY pkRsakey, _In_reads_bytes_(cbHashValue) PCBYTE pbHashValue, SIZE_T cbHashValue, _In_ PCSYMCRYPT_HASH hashAlgorithm, SIZE_T cbSalt, UINT32 flags, SYMCRYPT_NUMBER_FORMAT nfSignature, _Out_writes_opt_(cbSignature) PBYTE pbSignature, SIZE_T cbSignature, _Out_ SIZE_T *pcbSignature)
#define SYMCRYPT_FLAG_ECKEY_ECDSA
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptRsaRawEncrypt(_In_ PCSYMCRYPT_RSAKEY pkRsakey, _In_reads_bytes_(cbSrc) PCBYTE pbSrc, SIZE_T cbSrc, SYMCRYPT_NUMBER_FORMAT numFormat, UINT32 flags, _Out_writes_(cbDst) PBYTE pbDst, SIZE_T cbDst)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptAesExpandKey(_Out_ PSYMCRYPT_AES_EXPANDED_KEY pExpandedKey, _In_reads_(cbKey) PCBYTE pbKey, SIZE_T cbKey)
VOID SYMCRYPT_CALL SymCryptGcmDecryptPart(_Inout_ PSYMCRYPT_GCM_STATE pState, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
VOID SYMCRYPT_CALL SymCryptGcmStateCopy(_In_ PCSYMCRYPT_GCM_STATE pSrc, _In_opt_ PCSYMCRYPT_GCM_EXPANDED_KEY pExpandedKeyCopy, _Out_ PSYMCRYPT_GCM_STATE pDst)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptRsaPssVerify(_In_ PCSYMCRYPT_RSAKEY pkRsakey, _In_reads_bytes_(cbHashValue) PCBYTE pbHashValue, SIZE_T cbHashValue, _In_reads_bytes_(cbSignature) PCBYTE pbSignature, SIZE_T cbSignature, SYMCRYPT_NUMBER_FORMAT nfSignature, _In_ PCSYMCRYPT_HASH hashAlgorithm, SIZE_T cbSalt, UINT32 flags)
VOID SYMCRYPT_CALL SymCryptHmacAppend(_Inout_ PSYMCRYPT_HMAC_STATE pState, _In_reads_(cbData) PCBYTE pbData, SIZE_T cbData)
UINT32 SYMCRYPT_CALL SymCryptRsakeySizeofModulus(_In_ PCSYMCRYPT_RSAKEY pkRsakey)
VOID SYMCRYPT_CALL SymCryptHmacStateCopy(_In_ PCSYMCRYPT_HMAC_STATE pSrc, _In_opt_ PCSYMCRYPT_HMAC_EXPANDED_KEY pExpandedKey, _Out_ PSYMCRYPT_HMAC_STATE pDst)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptDlgroupGenerate(_In_ PCSYMCRYPT_HASH hashAlgorithm, _In_ SYMCRYPT_DLGROUP_FIPS fipsStandard, _Inout_ PSYMCRYPT_DLGROUP pDlgroup)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptPbkdf2(PCSYMCRYPT_MAC macAlgorithm, _In_reads_(cbKey) PCBYTE pbKey, SIZE_T cbKey, _In_reads_opt_(cbSalt) PCBYTE pbSalt, SIZE_T cbSalt, UINT64 iterationCnt, _Out_writes_(cbResult) PBYTE pbResult, SIZE_T cbResult)
VOID SYMCRYPT_CALL SymCryptHashStateCopy(_In_ PCSYMCRYPT_HASH pHash, _In_reads_(pHash->stateSize) PCVOID pSrc, _Out_writes_(pHash->stateSize) PVOID pDst)
UINT32 SYMCRYPT_CALL SymCryptEckeySizeofPublicKey(_In_ PCSYMCRYPT_ECKEY pkEckey, _In_ SYMCRYPT_ECPOINT_FORMAT ecPointFormat)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptRsaPkcs1Sign(_In_ PCSYMCRYPT_RSAKEY pkRsakey, _In_reads_bytes_(cbHashValue) PCBYTE pbHashValue, SIZE_T cbHashValue, _In_ PCSYMCRYPT_OID pHashOIDs, _In_ SIZE_T nOIDCount, UINT32 flags, SYMCRYPT_NUMBER_FORMAT nfSignature, _Out_writes_opt_(cbSignature) PBYTE pbSignature, SIZE_T cbSignature, _Out_ SIZE_T *pcbSignature)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptRsaPkcs1Decrypt(_In_ PCSYMCRYPT_RSAKEY pkRsakey, _In_reads_bytes_(cbSrc) PCBYTE pbSrc, SIZE_T cbSrc, SYMCRYPT_NUMBER_FORMAT nfSrc, UINT32 flags, _Out_writes_opt_(cbDst) PBYTE pbDst, SIZE_T cbDst, _Out_ SIZE_T *pcbDst)
const PCSYMCRYPT_HASH SymCryptSha1Algorithm
const PCSYMCRYPT_HASH SymCryptMd2Algorithm
const PCSYMCRYPT_HASH SymCryptMd5Algorithm
#define SYMCRYPT_FLAG_RSAKEY_SIGN
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptEckeySetRandom(_In_ UINT32 flags, _Inout_ PSYMCRYPT_ECKEY pEckey)
#define SYMCRYPT_FLAG_RSAKEY_ENCRYPT
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptHmacExpandKey(_In_ PCSYMCRYPT_HASH pHash, _Out_ PSYMCRYPT_HMAC_EXPANDED_KEY pExpandedKey, _In_reads_opt_(cbKey) PCBYTE pbKey, SIZE_T cbKey)
VOID SYMCRYPT_CALL SymCryptEcbDecrypt(_In_ PCSYMCRYPT_BLOCKCIPHER pBlockCipher, _In_ PCVOID pExpandedKey, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptTlsPrf1_2(_In_ PCSYMCRYPT_MAC macAlgorithm, _In_reads_(cbKey) PCBYTE pbKey, _In_ SIZE_T cbKey, _In_reads_opt_(cbLabel) PCBYTE pbLabel, _In_ SIZE_T cbLabel, _In_reads_(cbSeed) PCBYTE pbSeed, _In_ SIZE_T cbSeed, _Out_writes_(cbResult) PBYTE pbResult, SIZE_T cbResult)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptRsaRawDecrypt(_In_ PCSYMCRYPT_RSAKEY pkRsakey, _In_reads_bytes_(cbSrc) PCBYTE pbSrc, SIZE_T cbSrc, SYMCRYPT_NUMBER_FORMAT numFormat, UINT32 flags, _Out_writes_(cbDst) PBYTE pbDst, SIZE_T cbDst)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptDlgroupGetValue(_In_ PCSYMCRYPT_DLGROUP pDlgroup, _Out_writes_bytes_(cbPrimeP) PBYTE pbPrimeP, SIZE_T cbPrimeP, _Out_writes_bytes_(cbPrimeQ) PBYTE pbPrimeQ, SIZE_T cbPrimeQ, _Out_writes_bytes_(cbGenG) PBYTE pbGenG, SIZE_T cbGenG, SYMCRYPT_NUMBER_FORMAT numFormat, _Out_ PCSYMCRYPT_HASH *ppHashAlgorithm, _Out_writes_bytes_(cbSeed) PBYTE pbSeed, SIZE_T cbSeed, _Out_ PUINT32 pGenCounter)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptHkdfDerive(_In_ PCSYMCRYPT_HKDF_EXPANDED_KEY pExpandedKey, _In_reads_opt_(cbInfo) PCBYTE pbInfo, SIZE_T cbInfo, _Out_writes_(cbResult) PBYTE pbResult, SIZE_T cbResult)
PSYMCRYPT_DLKEY SYMCRYPT_CALL SymCryptDlkeyAllocate(_In_ PCSYMCRYPT_DLGROUP pDlgroup)
SYMCRYPT_NOINLINE VOID SYMCRYPT_CALL SymCryptHmacInit(_Out_ PSYMCRYPT_HMAC_STATE pState, _In_ PCSYMCRYPT_HMAC_EXPANDED_KEY pExpandedKey)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptDsaSign(_In_ PCSYMCRYPT_DLKEY pKey, _In_reads_bytes_(cbHashValue) PCBYTE pbHashValue, SIZE_T cbHashValue, SYMCRYPT_NUMBER_FORMAT format, UINT32 flags, _Out_writes_bytes_(cbSignature) PBYTE pbSignature, SIZE_T cbSignature)
@ SYMCRYPT_ECPOINT_FORMAT_XY
VOID SYMCRYPT_CALL SymCryptDlgroupFree(_Out_ PSYMCRYPT_DLGROUP pgObj)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptGcmExpandKey(_Out_ PSYMCRYPT_GCM_EXPANDED_KEY pExpandedKey, _In_ PCSYMCRYPT_BLOCKCIPHER pBlockCipher, _In_reads_(cbKey) PCBYTE pbKey, SIZE_T cbKey)
UINT32 SYMCRYPT_CALL SymCryptRsakeySizeofPublicExponent(_In_ PCSYMCRYPT_RSAKEY pRsakey, UINT32 index)
#define SYMCRYPT_FLAG_RSA_PKCS1_OPTIONAL_HASH_OID
#define SYMCRYPT_FLAG_DLKEY_DH
VOID SYMCRYPT_CALL SymCryptHash(_In_ PCSYMCRYPT_HASH pHash, _In_reads_(cbData) PCBYTE pbData, SIZE_T cbData, _Out_writes_(SYMCRYPT_MIN(cbResult, pHash->resultSize)) PBYTE pbResult, SIZE_T cbResult)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptTlsPrf1_1(_In_reads_(cbKey) PCBYTE pbKey, _In_ SIZE_T cbKey, _In_reads_opt_(cbLabel) PCBYTE pbLabel, _In_ SIZE_T cbLabel, _In_reads_(cbSeed) PCBYTE pbSeed, _In_ SIZE_T cbSeed, _Out_writes_(cbResult) PBYTE pbResult, SIZE_T cbResult)
const PCSYMCRYPT_ECURVE_PARAMS SymCryptEcurveParamsNistP256
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptDlkeyGenerate(_In_ UINT32 flags, _Inout_ PSYMCRYPT_DLKEY pkDlkey)
VOID SYMCRYPT_CALL SymCryptCfbEncrypt(_In_ PCSYMCRYPT_BLOCKCIPHER pBlockCipher, SIZE_T cbShift, _In_ PCVOID pExpandedKey, _Inout_updates_(pBlockCipher->blockSize) PBYTE pbChainingValue, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
const PCSYMCRYPT_MAC SymCryptHmacSha384Algorithm
VOID SYMCRYPT_CALL SymCryptDlkeyFree(_Out_ PSYMCRYPT_DLKEY pkObj)
#define SYMCRYPT_FLAG_KEY_NO_FIPS
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptEckeySetValue(_In_reads_bytes_(cbPrivateKey) PCBYTE pbPrivateKey, SIZE_T cbPrivateKey, _In_reads_bytes_(cbPublicKey) PCBYTE pbPublicKey, SIZE_T cbPublicKey, SYMCRYPT_NUMBER_FORMAT numFormat, SYMCRYPT_ECPOINT_FORMAT ecPointFormat, UINT32 flags, _Inout_ PSYMCRYPT_ECKEY pEckey)
VOID SYMCRYPT_CALL SymCryptGcmAuthPart(_Inout_ PSYMCRYPT_GCM_STATE pState, _In_reads_opt_(cbData) PCBYTE pbAuthData, SIZE_T cbData)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptDlgroupSetValue(_In_reads_bytes_(cbPrimeP) PCBYTE pbPrimeP, SIZE_T cbPrimeP, _In_reads_bytes_(cbPrimeQ) PCBYTE pbPrimeQ, SIZE_T cbPrimeQ, _In_reads_bytes_(cbGenG) PCBYTE pbGenG, SIZE_T cbGenG, SYMCRYPT_NUMBER_FORMAT numFormat, _In_opt_ PCSYMCRYPT_HASH pHashAlgorithm, _In_reads_bytes_(cbSeed) PCBYTE pbSeed, SIZE_T cbSeed, UINT32 genCounter, SYMCRYPT_DLGROUP_FIPS fipsStandard, _Inout_ PSYMCRYPT_DLGROUP pDlgroup)
PSYMCRYPT_ECURVE SYMCRYPT_CALL SymCryptEcurveAllocate(_In_ PCSYMCRYPT_ECURVE_PARAMS pParams, _In_ UINT32 flags)
PSYMCRYPT_ECKEY SYMCRYPT_CALL SymCryptEckeyAllocate(_In_ PCSYMCRYPT_ECURVE pCurve)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptEcDsaVerify(_In_ PCSYMCRYPT_ECKEY pKey, _In_reads_bytes_(cbHashValue) PCBYTE pbHashValue, SIZE_T cbHashValue, _In_reads_bytes_(cbSignature) PCBYTE pbSignature, SIZE_T cbSignature, SYMCRYPT_NUMBER_FORMAT format, UINT32 flags)
const PCSYMCRYPT_ECURVE_PARAMS SymCryptEcurveParamsCurve25519
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptEckeyGetValue(_In_ PCSYMCRYPT_ECKEY pEckey, _Out_writes_bytes_(cbPrivateKey) PBYTE pbPrivateKey, SIZE_T cbPrivateKey, _Out_writes_bytes_(cbPublicKey) PBYTE pbPublicKey, SIZE_T cbPublicKey, SYMCRYPT_NUMBER_FORMAT numFormat, SYMCRYPT_ECPOINT_FORMAT ecPointFormat, UINT32 flags)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptEcDsaSign(_In_ PCSYMCRYPT_ECKEY pKey, _In_reads_bytes_(cbHashValue) PCBYTE pbHashValue, SIZE_T cbHashValue, SYMCRYPT_NUMBER_FORMAT format, UINT32 flags, _Out_writes_bytes_(cbSignature) PBYTE pbSignature, SIZE_T cbSignature)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptDlkeyGetValue(_In_ PCSYMCRYPT_DLKEY pkDlkey, _Out_writes_bytes_(cbPrivateKey) PBYTE pbPrivateKey, SIZE_T cbPrivateKey, _Out_writes_bytes_(cbPublicKey) PBYTE pbPublicKey, SIZE_T cbPublicKey, SYMCRYPT_NUMBER_FORMAT numFormat, UINT32 flags)
const PCSYMCRYPT_HASH SymCryptSha512Algorithm
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptGcmDecryptFinal(_Inout_ PSYMCRYPT_GCM_STATE pState, _In_reads_(cbTag) PCBYTE pbTag, SIZE_T cbTag)
const PCSYMCRYPT_HASH SymCryptSha384Algorithm
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptRsakeyGetCrtValue(_In_ PCSYMCRYPT_RSAKEY pkRsakey, _Out_writes_opt_(nCrtExponents) PBYTE *ppCrtExponents, _In_reads_(nCrtExponents) SIZE_T *pcbCrtExponents, UINT32 nCrtExponents, _Out_writes_bytes_opt_(cbCrtCoefficient) PBYTE pbCrtCoefficient, SIZE_T cbCrtCoefficient, _Out_writes_bytes_opt_(cbPrivateExponent) PBYTE pbPrivateExponent, SIZE_T cbPrivateExponent, SYMCRYPT_NUMBER_FORMAT numFormat, UINT32 flags)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptRsaOaepEncrypt(_In_ PCSYMCRYPT_RSAKEY pkRsakey, _In_reads_bytes_(cbSrc) PCBYTE pbSrc, SIZE_T cbSrc, _In_ PCSYMCRYPT_HASH hashAlgorithm, _In_reads_bytes_(cbLabel) PCBYTE pbLabel, SIZE_T cbLabel, UINT32 flags, SYMCRYPT_NUMBER_FORMAT nfDst, _Out_writes_opt_(cbDst) PBYTE pbDst, SIZE_T cbDst, _Out_ SIZE_T *pcbDst)
@ SYMCRYPT_NUMBER_FORMAT_MSB_FIRST
@ SYMCRYPT_NUMBER_FORMAT_LSB_FIRST
VOID SYMCRYPT_CALL SymCryptHashResult(_In_ PCSYMCRYPT_HASH pHash, _Inout_updates_bytes_(pHash->stateSize) PVOID pState, _Out_writes_(SYMCRYPT_MIN(cbResult, pHash->resultSize)) PBYTE pbResult, SIZE_T cbResult)
PSYMCRYPT_DLGROUP SYMCRYPT_CALL SymCryptDlgroupAllocate(UINT32 nBitsOfP, UINT32 nBitsOfQ)
SYMCRYPT_NOINLINE VOID SYMCRYPT_CALL SymCryptHmac(_In_ PCSYMCRYPT_HMAC_EXPANDED_KEY pExpandedKey, _In_reads_(cbData) PCBYTE pbData, SIZE_T cbData, _Out_writes_(pExpandedKey->pHash->resultSize) PBYTE pbResult)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptDsaVerify(_In_ PCSYMCRYPT_DLKEY pKey, _In_reads_bytes_(cbHashValue) PCBYTE pbHashValue, SIZE_T cbHashValue, _In_reads_bytes_(cbSignature) PCBYTE pbSignature, SIZE_T cbSignature, SYMCRYPT_NUMBER_FORMAT format, UINT32 flags)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptRsaOaepDecrypt(_In_ PCSYMCRYPT_RSAKEY pkRsakey, _In_reads_bytes_(cbSrc) PCBYTE pbSrc, SIZE_T cbSrc, SYMCRYPT_NUMBER_FORMAT nfSrc, _In_ PCSYMCRYPT_HASH hashAlgorithm, _In_reads_bytes_(cbLabel) PCBYTE pbLabel, SIZE_T cbLabel, UINT32 flags, _Out_writes_opt_(cbDst) PBYTE pbDst, SIZE_T cbDst, _Out_ SIZE_T *pcbDst)
VOID SYMCRYPT_CALL SymCryptAesKeyCopy(_In_ PCSYMCRYPT_AES_EXPANDED_KEY pSrc, _Out_ PSYMCRYPT_AES_EXPANDED_KEY pDst)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptDhSecretAgreement(_In_ PCSYMCRYPT_DLKEY pkPrivate, _In_ PCSYMCRYPT_DLKEY pkPublic, SYMCRYPT_NUMBER_FORMAT format, UINT32 flags, _Out_writes_(cbAgreedSecret) PBYTE pbAgreedSecret, SIZE_T cbAgreedSecret)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptRsaPkcs1Encrypt(_In_ PCSYMCRYPT_RSAKEY pkRsakey, _In_reads_bytes_(cbSrc) PCBYTE pbSrc, SIZE_T cbSrc, UINT32 flags, SYMCRYPT_NUMBER_FORMAT nfDst, _Out_writes_opt_(cbDst) PBYTE pbDst, SIZE_T cbDst, _Out_ SIZE_T *pcbDst)
VOID SYMCRYPT_CALL SymCryptCbcDecrypt(_In_ PCSYMCRYPT_BLOCKCIPHER pBlockCipher, _In_ PCVOID pExpandedKey, _Inout_updates_(pBlockCipher->blockSize) PBYTE pbChainingValue, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
#define SYMCRYPT_FLAG_KEY_MINIMAL_VALIDATION
const PCSYMCRYPT_HASH SymCryptMd4Algorithm
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptHkdfPrkExpandKey(_Out_ PSYMCRYPT_HKDF_EXPANDED_KEY pExpandedKey, _In_ PCSYMCRYPT_MAC macAlgorithm, _In_reads_(cbPrk) PCBYTE pbPrk, SIZE_T cbPrk)
#define SYMCRYPT_FLAG_ECKEY_ECDH
SYMCRYPT_MAGIC_FIELD SYMCRYPT_DLGROUP
#define SYMCRYPT_ENVIRONMENT_DEFS(envName)
struct _SYMCRYPT_HASH SYMCRYPT_HASH
SYMCRYPT_MAGIC_FIELD SYMCRYPT_HMAC_STATE
const SYMCRYPT_OID SymCryptMd5OidList[SYMCRYPT_MD5_OID_COUNT]
SYMCRYPT_MAGIC_FIELD SYMCRYPT_RSAKEY
const SYMCRYPT_OID SymCryptSha384OidList[SYMCRYPT_SHA384_OID_COUNT]
SYMCRYPT_MAGIC_FIELD SYMCRYPT_ECKEY
const SYMCRYPT_OID SymCryptSha512OidList[SYMCRYPT_SHA512_OID_COUNT]
SYMCRYPT_MAGIC_FIELD SYMCRYPT_AES_EXPANDED_KEY
SYMCRYPT_MAGIC_FIELD SYMCRYPT_HMAC_EXPANDED_KEY
#define SYMCRYPT_ASYM_ALIGN_VALUE
SYMCRYPT_MAGIC_FIELD SYMCRYPT_GCM_EXPANDED_KEY
const SYMCRYPT_OID SymCryptSha256OidList[SYMCRYPT_SHA256_OID_COUNT]
const SYMCRYPT_OID SymCryptSha1OidList[SYMCRYPT_SHA1_OID_COUNT]
SYMCRYPT_MAGIC_FIELD SYMCRYPT_ECURVE
SYMCRYPT_MAGIC_FIELD SYMCRYPT_GCM_STATE
SYMCRYPT_MAGIC_FIELD SYMCRYPT_DLKEY
VOID WINAPI InitializeCriticalSection(OUT LPCRITICAL_SECTION lpCriticalSection)
#define STATUS_ACCESS_DENIED
#define STATUS_INVALID_PARAMETER
#define STATUS_UNSUCCESSFUL
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
void WINAPI DeleteCriticalSection(PCRITICAL_SECTION)
size_t const buffer_count