a ԏiP@sdZddlZddlmZdZdZdZdZd Zd Z d Z d Z d Z e e e Z eeee ee edZddZddZddZddZddZddZdS)z,Lists of algorithms and globbing among them.N) validation)+z AES-256-GCMz AES-256-CCMz AES-192-GCMz AES-192-CCMz AES-128-GCMz AES-128-CCMzCHACHA20-POLY1305zCAMELLIA-256-GCMzCAMELLIA-128-GCMz AES-256-CTRz AES-256-CBCz AES-192-CTRz AES-192-CBCz AES-128-CTRz AES-128-CBCz AES-256-OCBz AES-256-EAXz AES-192-OCBz AES-192-EAXz AES-128-OCBz AES-128-EAXzCAMELLIA-256-CBCzCAMELLIA-128-CBCz3DES-CBCzDES-CBCzRC4-40zRC4-128z DES40-CBCzRC2-CBCzIDEA-CBCzSEED-CBCz AES-256-CFBz AES-192-CFBz AES-128-CFBzGOST28147-TC26Z-CFBzGOST28147-CPA-CFBzGOST28147-CPB-CFBzGOST28147-CPC-CFBzGOST28147-CPD-CFBzGOST28147-TC26Z-CNTzMAGMA-CTR-ACPKMzKUZNYECHIK-CTR-ACPKMZNULL)ZAEADzUMAC-128z HMAC-SHA1z HMAC-SHA2-256z HMAC-SHA2-384z HMAC-SHA2-512zUMAC-64zHMAC-MD5zHMAC-STREEBOG-256zHMAC-STREEBOG-512zGOST28147-CPA-IMITzGOST28147-TC26Z-IMITz MAGMA-OMACzKUZNYECHIK-OMACzMAGMA-OMAC-ACPKMzKUZNYECHIK-OMAC-ACPKM)zSHA2-256zSHA2-384zSHA2-512zSHA3-256zSHA3-384zSHA3-512zSHA2-224zSHA3-224z SHAKE-256z SHAKE-128ZSHA1ZMD5z STREEBOG-256z STREEBOG-512ZGOSTR94)zMLKEM768-X25519z P256-MLKEM768zP384-MLKEM1024zMLKEM1024-X448ZX25519Z SECP256R1Z SECP384R1Z SECP521R1ZX448z FFDHE-1536z FFDHE-2048z FFDHE-3072z FFDHE-4096z FFDHE-6144z FFDHE-8192z FFDHE-1024z GOST-GC256Az GOST-GC256Bz GOST-GC256Cz GOST-GC256Dz GOST-GC512Az GOST-GC512Bz GOST-GC512CzBRAINPOOL-P256R1zBRAINPOOL-P384R1zBRAINPOOL-P512R1)9ZMLDSA44ZMLDSA65ZMLDSA87zMLDSA65-ED25519z MLDSA87-ED448zRSA-MD5zRSA-SHA1zDSA-SHA1z ECDSA-SHA1z RSA-SHA2-224z DSA-SHA2-224zECDSA-SHA2-224z RSA-SHA2-256z DSA-SHA2-256zECDSA-SHA2-256zECDSA-SHA2-256-FIDOz RSA-SHA2-384z DSA-SHA2-384zECDSA-SHA2-384z RSA-SHA2-512z DSA-SHA2-512zECDSA-SHA2-512z RSA-SHA3-224z DSA-SHA3-224zECDSA-SHA3-224z RSA-SHA3-256z DSA-SHA3-256zECDSA-SHA3-256z RSA-SHA3-384z DSA-SHA3-384zECDSA-SHA3-384z RSA-SHA3-512z DSA-SHA3-512zECDSA-SHA3-512z EDDSA-ED25519zEDDSA-ED25519-FIDOz EDDSA-ED448z RSA-PSS-SHA1zRSA-PSS-SHA2-224zRSA-PSS-SHA2-256zRSA-PSS-SHA2-384zRSA-PSS-SHA2-512zRSA-PSS-RSAE-SHA1zRSA-PSS-RSAE-SHA2-224zRSA-PSS-RSAE-SHA2-256zRSA-PSS-RSAE-SHA2-384zRSA-PSS-RSAE-SHA2-512zRSA-PSS-SHA3-224zRSA-PSS-SHA3-256zRSA-PSS-SHA3-384zRSA-PSS-SHA3-512zRSA-PSS-RSAE-SHA3-256zRSA-PSS-RSAE-SHA3-384zRSA-PSS-RSAE-SHA3-512zGOSTR341012-512zGOSTR341012-256Z GOSTR341001)zKEM-ECDHZPSKzDHE-PSKz ECDHE-PSKzRSA-PSKZECDHEZRSAZDHEzDHE-RSAzDHE-DSSZEXPORTZANONZDHZECDHz VKO-GOST-2001z VKO-GOST-2012z VKO-GOST-KDFzDHE-GSSz ECDHE-GSSZSNTRUP)zTLS1.3zTLS1.2zTLS1.1zTLS1.0zSSL3.0zSSL2.0)zDTLS1.2zDTLS1.0zDTLS0.9)ZIKEv2ZIKEv1)ZciphergrouphashZ key_exchangeZmacZprotocolsigncCs:|tvrtj|tt||}|s6tj|||S)z Lists algorithms matching a glob, in order of appearance in ALL[alg_class]. For more examples, refer to tests/unit/parsing/test_alg_lists.py >>> glob('RC4-*', 'cipher') ['RC4-40', 'RC4-128'] )ALLrZ alg_listsZAlgorithmClassUnknownErrorfnmatchfilterZAlgorithmEmptyMatchError)patternZ alg_classrr =/usr/share/crypto-policies/python/cryptopolicies/alg_lists.pyglobts  rcs8fdd|D}|sdSfdd|D}t|S)zO >>> earliest_occurrence('test', 'abcdefghijklmnopqrstuvwxyz') 'e' csg|]}|vr|qSr r .0nordered_haystackr r z'earliest_occurrence..Nc3s|]}|VqdS)N)indexrrr r rz&earliest_occurrence..)min)Zneedlesr intersectionindicesr rr earliest_occurrences rcCst|tdddS)z@ >>> min_tls_version(['SSL3.0', 'TLS1.2']) 'SSL3.0' Nr TLS_PROTOCOLSZversionsr r r min_tls_versionsr cCst|tdddS)zD >>> min_dtls_version(['DTLS1.2', 'DTLS1.0']) 'DTLS1.0' NrrDTLS_PROTOCOLSrr r r min_dtls_versionsr#cCs t|tS)z@ >>> max_tls_version(['SSL3.0', 'TLS1.2']) 'TLS1.2' rrr r r max_tls_versionsr$cCs t|tS)zD >>> max_dtls_version(['DTLS1.2', 'DTLS1.0']) 'DTLS1.2' r!rr r r max_dtls_versionsr%)__doc__rrZ ALL_CIPHERSZALL_MACSZ ALL_HASHESZ ALL_GROUPSZALL_SIGNZALL_KEY_EXCHANGESrr"Z IKE_PROTOCOLSZ ALL_PROTOCOLSrrrr r#r$r%r r r r s4