| 915 | # Public key wrapper # |
| 916 | |
| 917 | class X509_AlgorithmIdentifier(ASN1_Packet): |
| 918 | ASN1_codec = ASN1_Codecs.BER |
| 919 | ASN1_root = ASN1F_SEQUENCE( |
| 920 | ASN1F_OID("algorithm", "1.2.840.113549.1.1.11"), |
| 921 | MultipleTypeField( |
| 922 | [ |
| 923 | ( |
| 924 | # RFC4055: |
| 925 | # "The correct encoding is to omit the parameters field" |
| 926 | # "All implementations MUST accept both NULL and absent |
| 927 | # parameters as legal and equivalent encodings." |
| 928 | |
| 929 | # RFC8017: |
| 930 | # "should generally be omitted, but if present, it shall have a |
| 931 | # value of type NULL." |
| 932 | ASN1F_optional(ASN1F_NULL("parameters", None)), |
| 933 | lambda pkt: ( |
| 934 | pkt.algorithm.val[:19] == "1.2.840.113549.1.1." or |
| 935 | pkt.algorithm.val[:21] == "2.16.840.1.101.3.4.2." or |
| 936 | pkt.algorithm.val[:11] == "1.3.14.3.2." |
| 937 | ) |
| 938 | ), |
| 939 | ( |
| 940 | # RFC5758: |
| 941 | # "the encoding MUST omit the parameters field" |
| 942 | |
| 943 | # RFC8410: |
| 944 | # "For all of the OIDs, the parameters MUST be absent." |
| 945 | ASN1F_omit("parameters", None), |
| 946 | lambda pkt: ( |
| 947 | pkt.algorithm.val[:16] == "1.2.840.10045.4." or |
| 948 | pkt.algorithm.val in ["1.3.101.112", "1.3.101.113"] |
| 949 | ) |
| 950 | ), |
| 951 | # RFC5480 |
| 952 | ( |
| 953 | ASN1F_PACKET( |
| 954 | "parameters", |
| 955 | ECParameters(), |
| 956 | ECParameters, |
| 957 | ), |
| 958 | lambda pkt: pkt.algorithm.val == "1.2.840.10045.2.1", |
| 959 | ), |
| 960 | # RFC3279 |
| 961 | ( |
| 962 | ASN1F_PACKET( |
| 963 | "parameters", |
| 964 | DomainParameters(), |
| 965 | DomainParameters, |
| 966 | ), |
| 967 | lambda pkt: pkt.algorithm.val == "1.2.840.10046.2.1", |
| 968 | ), |
| 969 | # PKCS#3 |
| 970 | ( |
| 971 | ASN1F_PACKET( |
| 972 | "parameters", |
| 973 | DHParameter(), |
| 974 | DHParameter, |
no test coverage detected
searching dependent graphs…