verdict_parser/x509/
alg_param.rs

1use super::*;
2use vstd::prelude::*;
3
4verus! {
5
6asn1! {
7    // Dss-Parms  ::=  SEQUENCE  {
8    //     p             INTEGER,
9    //     q             INTEGER,
10    //     g             INTEGER
11    // }
12    seq DSAParam {
13        p: ASN1<BigInt> = ASN1(BigInt),
14        q: ASN1<BigInt> = ASN1(BigInt),
15        g: ASN1<BigInt> = ASN1(BigInt),
16    }
17
18    // NOTE: This is the format of the public key field of subject public key info
19    // not the format of AlgorithmIdentifier.param
20    //
21    // RSAPublicKey ::= SEQUENCE {
22    //     modulus            INTEGER, -- n
23    //     publicExponent     INTEGER  -- e --
24    // }
25    seq RSAParam {
26        modulus: ASN1<BigInt> = ASN1(BigInt),
27        exponent: ASN1<BigInt> = ASN1(BigInt),
28    }
29}
30
31// TODO: DSA, ECDSA, etc.
32oid_match_continuation! {
33    continuation AlgorithmParam {
34        // Signature algorithms
35        // NOTE: for some of these, technically the param field should
36        // be NULL (or for some should be empty), but some certificates
37        // do not comply with this
38        // oid(RSA_SIGNATURE_MD2) => RSASignatureWithMD2(OrdChoice(ASN1(Null), End)): OrdChoice<ASN1<Null>, End>,
39        // oid(RSA_SIGNATURE_MD5) => RSASignatureWithMD5(OrdChoice(ASN1(Null), End)): OrdChoice<ASN1<Null>, End>,
40        // oid(RSA_SIGNATURE_SHA1) => RSASignatureWithSHA1(OrdChoice(ASN1(Null), End)): OrdChoice<ASN1<Null>, End>,
41
42        oid(RSA_SIGNATURE_SHA256) => RSASignatureWithSHA256(OrdChoice(ASN1(Null), End)): OrdChoice<ASN1<Null>, End>,
43        oid(RSA_SIGNATURE_SHA384) => RSASignatureWithSHA384(OrdChoice(ASN1(Null), End)): OrdChoice<ASN1<Null>, End>,
44        oid(RSA_SIGNATURE_SHA512) => RSASignatureWithSHA512(OrdChoice(ASN1(Null), End)): OrdChoice<ASN1<Null>, End>,
45        oid(RSA_SIGNATURE_SHA224) => RSASignatureWithSHA224(OrdChoice(ASN1(Null), End)): OrdChoice<ASN1<Null>, End>,
46
47        oid(DSA_SIGNATURE) => DSASignature(OrdChoice(ASN1(DSAParam), End)): OrdChoice<ASN1<DSAParam>, End>,
48
49        oid(ECDSA_SIGNATURE_SHA224) => ECDSASignatureWithSHA224(End): End,
50        oid(ECDSA_SIGNATURE_SHA256) => ECDSASignatureWithSHA256(End): End,
51        oid(ECDSA_SIGNATURE_SHA384) => ECDSASignatureWithSHA384(End): End,
52        oid(ECDSA_SIGNATURE_SHA512) => ECDSASignatureWithSHA512(End): End,
53
54        // Subject public key algorithms
55        oid(RSA_ENCRYPTION) => RSAEncryption(OrdChoice(ASN1(Null), End)): OrdChoice<ASN1<Null>, End>,
56        oid(EC_PUBLIC_KEY) => ECPublicKey(ASN1(ObjectIdentifier)): ASN1<ObjectIdentifier>, // Currently only support named curves
57
58        _ => Other(Tail): Tail,
59    }
60}
61
62impl<'a> PolyfillEq for DSAParamValue<'a> {
63    fn polyfill_eq(&self, other: &Self) -> bool {
64        self.p.polyfill_eq(&other.p) && self.q.polyfill_eq(&other.q) && self.g.polyfill_eq(&other.g)
65    }
66}
67
68impl<'a> PolyfillEq for AlgorithmParamValue<'a> {
69    fn polyfill_eq(&self, other: &Self) -> bool {
70        match (self, other) {
71            // (AlgorithmParamValue::RSASignatureWithMD2(a), AlgorithmParamValue::RSASignatureWithMD2(b)) => a.polyfill_eq(b),
72            // (AlgorithmParamValue::RSASignatureWithMD5(a), AlgorithmParamValue::RSASignatureWithMD5(b)) => a.polyfill_eq(b),
73            // (AlgorithmParamValue::RSASignatureWithSHA1(a), AlgorithmParamValue::RSASignatureWithSHA1(b)) => a.polyfill_eq(b),
74            (AlgorithmParamValue::RSASignatureWithSHA256(a), AlgorithmParamValue::RSASignatureWithSHA256(b)) => a.polyfill_eq(b),
75            (AlgorithmParamValue::RSASignatureWithSHA384(a), AlgorithmParamValue::RSASignatureWithSHA384(b)) => a.polyfill_eq(b),
76            (AlgorithmParamValue::RSASignatureWithSHA512(a), AlgorithmParamValue::RSASignatureWithSHA512(b)) => a.polyfill_eq(b),
77            (AlgorithmParamValue::RSASignatureWithSHA224(a), AlgorithmParamValue::RSASignatureWithSHA224(b)) => a.polyfill_eq(b),
78            (AlgorithmParamValue::DSASignature(a), AlgorithmParamValue::DSASignature(b)) => a.polyfill_eq(b),
79            (AlgorithmParamValue::ECDSASignatureWithSHA224(a), AlgorithmParamValue::ECDSASignatureWithSHA224(b)) => a.polyfill_eq(b),
80            (AlgorithmParamValue::ECDSASignatureWithSHA256(a), AlgorithmParamValue::ECDSASignatureWithSHA256(b)) => a.polyfill_eq(b),
81            (AlgorithmParamValue::ECDSASignatureWithSHA384(a), AlgorithmParamValue::ECDSASignatureWithSHA384(b)) => a.polyfill_eq(b),
82            (AlgorithmParamValue::ECDSASignatureWithSHA512(a), AlgorithmParamValue::ECDSASignatureWithSHA512(b)) => a.polyfill_eq(b),
83            (AlgorithmParamValue::RSAEncryption(a), AlgorithmParamValue::RSAEncryption(b)) => a.polyfill_eq(b),
84            (AlgorithmParamValue::ECPublicKey(a), AlgorithmParamValue::ECPublicKey(b)) => a.polyfill_eq(b),
85            (AlgorithmParamValue::Other(a), AlgorithmParamValue::Other(b)) => a.polyfill_eq(b),
86            (AlgorithmParamValue::Unreachable, AlgorithmParamValue::Unreachable) => true,
87            _ => false,
88        }
89    }
90}
91
92}