1use rasn::prelude::*;
5
6use rasn_pkix::AlgorithmIdentifier;
7
8pub const SHA1: &Oid = Oid::ISO_IDENTIFIED_ORGANISATION_OIW_SECSIG_ALGORITHM_SHA1;
9pub const MD5: &Oid = Oid::ISO_MEMBER_BODY_US_RSADSI_DIGEST_ALGORITHM_MD5;
10pub const DSA: &Oid = Oid::ISO_MEMBER_BODY_US_X957_X9CM_DSA;
11pub const DSA_WITH_SHA1: &Oid = Oid::ISO_MEMBER_BODY_US_X957_X9CM_DSA_SHA1;
12pub const RSA: &Oid = Oid::ISO_MEMBER_BODY_US_RSADSI_PKCS1_RSA;
13pub const MD5_WITH_RSA: &Oid = Oid::ISO_MEMBER_BODY_US_RSADSI_PKCS1_MD5_RSA;
14pub const SHA1_WITH_RSA: &Oid = Oid::ISO_MEMBER_BODY_US_RSADSI_PKCS1_SHA1_RSA;
15pub const PUBLIC_NUMBER: &Oid = Oid::ISO_MEMBER_BODY_US_ANSI_X942_NUMBER_TYPE_PUBLIC;
16
17pub const ESDH: &Oid = Oid::ISO_MEMBER_BODY_US_RSADSI_PKCS9_SMIME_ALGORITHM_ESDH;
18pub const SSDH: &Oid = Oid::ISO_MEMBER_BODY_US_RSADSI_PKCS9_SMIME_ALGORITHM_SSDH;
19pub const CMS3DESWRAP: &Oid = Oid::ISO_MEMBER_BODY_US_RSADSI_PKCS9_SMIME_ALGORITHM_CMS3DESWRAP;
20pub const CMS3RC2WRAP: &Oid = Oid::ISO_MEMBER_BODY_US_RSADSI_PKCS9_SMIME_ALGORITHM_CMS3RC2WRAP;
21
22pub const DES_EDE3_CBC: &Oid = Oid::ISO_MEMBER_BODY_US_RSADSI_ENCRYPTION_ALGORITHM_DES_EDE3_CBC;
23pub const RC2_CBC: &Oid = Oid::ISO_MEMBER_BODY_US_RSADSI_ENCRYPTION_ALGORITHM_RC2_CBC;
24
25pub const HMAC_SHA1: &Oid =
26 Oid::ISO_IDENTIFIED_ORGANISATION_DOD_INTERNET_SECURITY_MECHANISMS_HMAC_SHA1;
27pub const PBKDF2: &Oid = Oid::ISO_MEMBER_BODY_US_RSADSI_PKCS5_PBKDF2;
28
29pub const AES: &Oid = Oid::JOINT_ISO_ITU_T_COUNTRY_US_ORGANIZATION_GOV_CSOR_NIST_ALGORITHMS_AES;
30pub const AES128_CBC: &Oid =
31 Oid::JOINT_ISO_ITU_T_COUNTRY_US_ORGANIZATION_GOV_CSOR_NIST_ALGORITHMS_AES128_CBC;
32pub const AES128_WRAP: &Oid =
33 Oid::JOINT_ISO_ITU_T_COUNTRY_US_ORGANIZATION_GOV_CSOR_NIST_ALGORITHMS_AES128_WRAP;
34pub const AES192_CBC: &Oid =
35 Oid::JOINT_ISO_ITU_T_COUNTRY_US_ORGANIZATION_GOV_CSOR_NIST_ALGORITHMS_AES192_CBC;
36pub const AES192_WRAP: &Oid =
37 Oid::JOINT_ISO_ITU_T_COUNTRY_US_ORGANIZATION_GOV_CSOR_NIST_ALGORITHMS_AES192_WRAP;
38pub const AES256_CBC: &Oid =
39 Oid::JOINT_ISO_ITU_T_COUNTRY_US_ORGANIZATION_GOV_CSOR_NIST_ALGORITHMS_AES256_CBC;
40pub const AES256_WRAP: &Oid =
41 Oid::JOINT_ISO_ITU_T_COUNTRY_US_ORGANIZATION_GOV_CSOR_NIST_ALGORITHMS_AES256_WRAP;
42
43pub type DssPubKey = Integer;
44pub type AesIv = OctetString;
45
46#[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, PartialOrd, Eq, Ord, Hash)]
47pub struct RsaPublicKey {
48 pub modulus: Integer,
49 pub public_exponent: Integer,
50}
51
52pub type DhPublicKey = Integer;
53
54#[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, PartialOrd, Eq, Ord, Hash)]
55pub struct DssSigValue {
56 pub r: Integer,
57 pub s: Integer,
58}
59
60#[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, PartialOrd, Eq, Ord, Hash)]
61pub struct DssParameters {
62 pub p: Integer,
63 pub q: Integer,
64 pub g: Integer,
65}
66
67#[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, PartialOrd, Eq, Ord, Hash)]
68pub struct DhDomainParameters {
69 pub prime: Integer,
70 pub generator: Integer,
71 pub factor: Integer,
72 pub subgroup_factor: Option<Integer>,
73 pub validation_parameters: Option<ValidationParameters>,
74}
75
76#[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, PartialOrd, Eq, Ord, Hash)]
77pub struct ValidationParameters {
78 pub seed: BitString,
79 pub pgen_counter: Integer,
80}
81
82pub type KeyWrapAlgorithm = AlgorithmIdentifier;
83pub type Rc2wrapParameter = Rc2ParameterVersion;
84pub type Rc2ParameterVersion = Integer;
85pub type CbcParameter = Iv;
86pub type Iv = OctetString;
87
88#[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, PartialOrd, Eq, Ord, Hash)]
89pub struct Rc2CbcParameter {
90 pub rc2_parameter_version: Integer,
91 pub iv: OctetString,
92}
93
94#[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, PartialOrd, Eq, Ord, Hash)]
95pub struct Pbkdf2Parameters {
96 pub salt: Pbkdf2Salt,
97 pub iteration_count: Integer,
98 pub key_length: Option<Integer>,
99 #[rasn(default = "default_pbkdf2_algorithm")]
100 pub prf: AlgorithmIdentifier,
101}
102
103pub fn default_pbkdf2_algorithm() -> AlgorithmIdentifier {
104 AlgorithmIdentifier {
105 algorithm: HMAC_SHA1.into(),
106 parameters: None,
107 }
108}
109
110#[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, PartialOrd, Eq, Ord, Hash)]
111#[rasn(choice)]
112pub enum Pbkdf2Salt {
113 Specified(OctetString),
114 OtherSource(AlgorithmIdentifier),
115}