Skip to content

bcrypt: Add basic support for pseudo-handles

Support constant values for algorithm handles in BCryptGenRandom and make no attempt to dereference such handles (which would cause "Unhandled page fault on read access").

MSDN Documentation: https://docs.microsoft.com/en-us/windows/win32/seccng/cng-algorithm-pseudo-handles


Values of any constants are taken from this MIT licensed repository:

https://github.com/microsoft/windows-rs

I used a Python script to examine the pseudo-handles:

import re
handles = []
p = re.compile('pub const (BCRYPT_[A-Z0-9_]+_ALG_HANDLE): BCRYPT_ALG_HANDLE = ([0-9]+)u32 as _;')
with open('crates/libs/sys/src/Windows/Win32/Security/Cryptography/mod.rs') as f:
    t = f.read()
    for match in p.finditer(t):
        name = match.group(1)
        value = int(match.group(2))
        handles.append((name, value))
handles.sort(key=lambda x: x[1])

for (name, value) in handles:
    print(f"{value:>3}\t{hex(value):>5}\t{bin(value):>12}\t{name}")

Output:

  1	  0x1	         0b1	BCRYPT_MD2_ALG_HANDLE
 17	 0x11	     0b10001	BCRYPT_MD4_ALG_HANDLE
 33	 0x21	    0b100001	BCRYPT_MD5_ALG_HANDLE
 49	 0x31	    0b110001	BCRYPT_SHA1_ALG_HANDLE
 65	 0x41	   0b1000001	BCRYPT_SHA256_ALG_HANDLE
 81	 0x51	   0b1010001	BCRYPT_SHA384_ALG_HANDLE
 97	 0x61	   0b1100001	BCRYPT_SHA512_ALG_HANDLE
113	 0x71	   0b1110001	BCRYPT_RC4_ALG_HANDLE
129	 0x81	  0b10000001	BCRYPT_RNG_ALG_HANDLE
145	 0x91	  0b10010001	BCRYPT_HMAC_MD5_ALG_HANDLE
161	 0xa1	  0b10100001	BCRYPT_HMAC_SHA1_ALG_HANDLE
177	 0xb1	  0b10110001	BCRYPT_HMAC_SHA256_ALG_HANDLE
193	 0xc1	  0b11000001	BCRYPT_HMAC_SHA384_ALG_HANDLE
209	 0xd1	  0b11010001	BCRYPT_HMAC_SHA512_ALG_HANDLE
225	 0xe1	  0b11100001	BCRYPT_RSA_ALG_HANDLE
241	 0xf1	  0b11110001	BCRYPT_ECDSA_ALG_HANDLE
257	0x101	 0b100000001	BCRYPT_AES_CMAC_ALG_HANDLE
273	0x111	 0b100010001	BCRYPT_AES_GMAC_ALG_HANDLE
289	0x121	 0b100100001	BCRYPT_HMAC_MD2_ALG_HANDLE
305	0x131	 0b100110001	BCRYPT_HMAC_MD4_ALG_HANDLE
321	0x141	 0b101000001	BCRYPT_3DES_CBC_ALG_HANDLE
337	0x151	 0b101010001	BCRYPT_3DES_ECB_ALG_HANDLE
353	0x161	 0b101100001	BCRYPT_3DES_CFB_ALG_HANDLE
369	0x171	 0b101110001	BCRYPT_3DES_112_CBC_ALG_HANDLE
385	0x181	 0b110000001	BCRYPT_3DES_112_ECB_ALG_HANDLE
401	0x191	 0b110010001	BCRYPT_3DES_112_CFB_ALG_HANDLE
417	0x1a1	 0b110100001	BCRYPT_AES_CBC_ALG_HANDLE
433	0x1b1	 0b110110001	BCRYPT_AES_ECB_ALG_HANDLE
449	0x1c1	 0b111000001	BCRYPT_AES_CFB_ALG_HANDLE
465	0x1d1	 0b111010001	BCRYPT_AES_CCM_ALG_HANDLE
481	0x1e1	 0b111100001	BCRYPT_AES_GCM_ALG_HANDLE
497	0x1f1	 0b111110001	BCRYPT_DES_CBC_ALG_HANDLE
513	0x201	0b1000000001	BCRYPT_DES_ECB_ALG_HANDLE
529	0x211	0b1000010001	BCRYPT_DES_CFB_ALG_HANDLE
545	0x221	0b1000100001	BCRYPT_DESX_CBC_ALG_HANDLE
561	0x231	0b1000110001	BCRYPT_DESX_ECB_ALG_HANDLE
577	0x241	0b1001000001	BCRYPT_DESX_CFB_ALG_HANDLE
593	0x251	0b1001010001	BCRYPT_RC2_CBC_ALG_HANDLE
609	0x261	0b1001100001	BCRYPT_RC2_ECB_ALG_HANDLE
625	0x271	0b1001110001	BCRYPT_RC2_CFB_ALG_HANDLE
641	0x281	0b1010000001	BCRYPT_DH_ALG_HANDLE
657	0x291	0b1010010001	BCRYPT_ECDH_ALG_HANDLE
673	0x2a1	0b1010100001	BCRYPT_ECDH_P256_ALG_HANDLE
689	0x2b1	0b1010110001	BCRYPT_ECDH_P384_ALG_HANDLE
705	0x2c1	0b1011000001	BCRYPT_ECDH_P521_ALG_HANDLE
721	0x2d1	0b1011010001	BCRYPT_DSA_ALG_HANDLE
737	0x2e1	0b1011100001	BCRYPT_ECDSA_P256_ALG_HANDLE
753	0x2f1	0b1011110001	BCRYPT_ECDSA_P384_ALG_HANDLE
769	0x301	0b1100000001	BCRYPT_ECDSA_P521_ALG_HANDLE
785	0x311	0b1100010001	BCRYPT_RSA_SIGN_ALG_HANDLE
801	0x321	0b1100100001	BCRYPT_CAPI_KDF_ALG_HANDLE
817	0x331	0b1100110001	BCRYPT_PBKDF2_ALG_HANDLE
833	0x341	0b1101000001	BCRYPT_SP800108_CTR_HMAC_ALG_HANDLE
849	0x351	0b1101010001	BCRYPT_SP80056A_CONCAT_ALG_HANDLE
865	0x361	0b1101100001	BCRYPT_TLS1_1_KDF_ALG_HANDLE
881	0x371	0b1101110001	BCRYPT_TLS1_2_KDF_ALG_HANDLE
897	0x381	0b1110000001	BCRYPT_XTS_AES_ALG_HANDLE
913	0x391	0b1110010001	BCRYPT_HKDF_ALG_HANDLE
929	0x3a1	0b1110100001	BCRYPT_CHACHA20_POLY1305_ALG_HANDLE

Merge request reports

Loading