3
3
// SPDX-License-Identifier: Apache-2.0
4
4
5
5
use alloc:: vec;
6
- use der:: asn1:: { BitString , ObjectIdentifier , OctetString , SetOfVec , Utf8String } ;
7
- use der:: { Any , Encodable , Tag } ;
6
+ use der:: asn1:: { BitStringRef , ObjectIdentifier , OctetStringRef , SetOfVec , Utf8StringRef } ;
7
+ use der:: { AnyRef , Encode , Tag } ;
8
8
use global:: GLOBAL_TPM_DATA ;
9
9
use ring:: digest;
10
10
use ring:: rand:: SystemRandom ;
@@ -21,10 +21,10 @@ use crate::{
21
21
x509:: { AlgorithmIdentifier , X509Error } ,
22
22
} ;
23
23
24
- const SUBJECT_ALT_NAME : ObjectIdentifier = ObjectIdentifier :: new ( "2.5.29.17" ) ;
25
- const TCG_TPM_MANUFACTURER : ObjectIdentifier = ObjectIdentifier :: new ( "2.23.133.2.1" ) ;
26
- const TCG_TPM_MODEL : ObjectIdentifier = ObjectIdentifier :: new ( "2.23.133.2.2" ) ;
27
- const TCG_TPM_VERSION : ObjectIdentifier = ObjectIdentifier :: new ( "2.23.133.2.3" ) ;
24
+ const SUBJECT_ALT_NAME : ObjectIdentifier = ObjectIdentifier :: new_unwrap ( "2.5.29.17" ) ;
25
+ const TCG_TPM_MANUFACTURER : ObjectIdentifier = ObjectIdentifier :: new_unwrap ( "2.23.133.2.1" ) ;
26
+ const TCG_TPM_MODEL : ObjectIdentifier = ObjectIdentifier :: new_unwrap ( "2.23.133.2.2" ) ;
27
+ const TCG_TPM_VERSION : ObjectIdentifier = ObjectIdentifier :: new_unwrap ( "2.23.133.2.3" ) ;
28
28
29
29
pub fn generate_ca_cert (
30
30
td_quote : & [ u8 ] ,
@@ -41,7 +41,7 @@ pub fn generate_ca_cert(
41
41
// Generate x.509 certificate
42
42
let algorithm = AlgorithmIdentifier {
43
43
algorithm : ID_EC_PUBKEY_OID ,
44
- parameters : Some ( Any :: new ( Tag :: ObjectIdentifier , SECP384R1_OID . as_bytes ( ) ) . unwrap ( ) ) ,
44
+ parameters : Some ( AnyRef :: new ( Tag :: ObjectIdentifier , SECP384R1_OID . as_bytes ( ) ) . unwrap ( ) ) ,
45
45
} ;
46
46
47
47
let sig_alg = AlgorithmIdentifier {
@@ -52,13 +52,13 @@ pub fn generate_ca_cert(
52
52
// extended key usage
53
53
let eku: alloc:: vec:: Vec < ObjectIdentifier > = vec ! [ VTPMTD_CA_EXTENDED_KEY_USAGE ] ;
54
54
let eku = eku
55
- . to_vec ( )
55
+ . to_der ( )
56
56
. map_err ( |e| ResolveError :: GenerateCertificate ( X509Error :: DerEncoding ( e) ) ) ?;
57
57
58
58
// basic constrains
59
59
let basic_constrains: alloc:: vec:: Vec < bool > = vec ! [ true ] ;
60
60
let basic_constrains = basic_constrains
61
- . to_vec ( )
61
+ . to_der ( )
62
62
. map_err ( |e| ResolveError :: GenerateCertificate ( X509Error :: DerEncoding ( e) ) ) ?;
63
63
64
64
let x509_certificate = x509:: CertificateBuilder :: new (
@@ -95,19 +95,19 @@ pub fn generate_ca_cert(
95
95
. build ( ) ;
96
96
97
97
x509_certificate
98
- . to_vec ( )
98
+ . to_der ( )
99
99
. map_err ( |e| ResolveError :: GenerateCertificate ( X509Error :: DerEncoding ( e) ) )
100
100
}
101
101
102
102
fn gen_auth_key_identifier ( ek_pub : & [ u8 ] ) -> Result < alloc:: vec:: Vec < u8 > , ResolveError > {
103
103
// authority key identifier
104
104
let ek_pub_sha1 = digest:: digest ( & digest:: SHA1_FOR_LEGACY_USE_ONLY , ek_pub) ;
105
- let pub_sha1 = OctetString :: new ( ek_pub_sha1. as_ref ( ) )
105
+ let pub_sha1 = OctetStringRef :: new ( ek_pub_sha1. as_ref ( ) )
106
106
. map_err ( |e| ResolveError :: GenerateCertificate ( X509Error :: DerEncoding ( e) ) ) ?;
107
107
let auth_key_identifier: AuthorityKeyIdentifier = AuthorityKeyIdentifier ( pub_sha1) ;
108
108
let auth_key_identifier = vec ! [ auth_key_identifier] ;
109
109
auth_key_identifier
110
- . to_vec ( )
110
+ . to_der ( )
111
111
. map_err ( |e| ResolveError :: GenerateCertificate ( X509Error :: DerEncoding ( e) ) )
112
112
}
113
113
@@ -117,9 +117,9 @@ fn gen_subject_alt_name() -> Result<alloc::vec::Vec<u8>, ResolveError> {
117
117
let mut tcg_tpm_manufaturer = SetOfVec :: new ( ) ;
118
118
let mut manufacturer = alloc:: vec:: Vec :: new ( ) ;
119
119
manufacturer. extend_from_slice ( & tpm2_caps. manufacturer . to_be_bytes ( ) ) ;
120
- let _ = tcg_tpm_manufaturer. add ( DistinguishedName {
120
+ let _ = tcg_tpm_manufaturer. insert ( DistinguishedName {
121
121
attribute_type : TCG_TPM_MANUFACTURER ,
122
- value : Utf8String :: new ( manufacturer. as_slice ( ) ) . unwrap ( ) . into ( ) ,
122
+ value : Utf8StringRef :: new ( manufacturer. as_slice ( ) ) . unwrap ( ) . into ( ) ,
123
123
} ) ;
124
124
125
125
let mut tcg_tpm_model = SetOfVec :: new ( ) ;
@@ -128,25 +128,25 @@ fn gen_subject_alt_name() -> Result<alloc::vec::Vec<u8>, ResolveError> {
128
128
model. extend_from_slice ( & tpm2_caps. vendor_2 . to_be_bytes ( ) ) ;
129
129
model. extend_from_slice ( & tpm2_caps. vendor_3 . to_be_bytes ( ) ) ;
130
130
model. extend_from_slice ( & tpm2_caps. vendor_4 . to_be_bytes ( ) ) ;
131
- let _ = tcg_tpm_model. add ( DistinguishedName {
131
+ let _ = tcg_tpm_model. insert ( DistinguishedName {
132
132
attribute_type : TCG_TPM_MODEL ,
133
- value : Utf8String :: new ( model. as_slice ( ) ) . unwrap ( ) . into ( ) ,
133
+ value : Utf8StringRef :: new ( model. as_slice ( ) ) . unwrap ( ) . into ( ) ,
134
134
} ) ;
135
135
136
136
let mut tcg_tpm_version = SetOfVec :: new ( ) ;
137
137
let mut version = alloc:: vec:: Vec :: new ( ) ;
138
138
version. extend_from_slice ( & tpm2_caps. version_1 . to_be_bytes ( ) ) ;
139
139
version. extend_from_slice ( & tpm2_caps. version_2 . to_be_bytes ( ) ) ;
140
- let _ = tcg_tpm_version. add ( DistinguishedName {
140
+ let _ = tcg_tpm_version. insert ( DistinguishedName {
141
141
attribute_type : TCG_TPM_VERSION ,
142
- value : Utf8String :: new ( version. as_slice ( ) ) . unwrap ( ) . into ( ) ,
142
+ value : Utf8StringRef :: new ( version. as_slice ( ) ) . unwrap ( ) . into ( ) ,
143
143
} ) ;
144
144
145
145
let sub_alt_name = vec ! [ tcg_tpm_manufaturer, tcg_tpm_model, tcg_tpm_version] ;
146
146
let sub_alt_name: SubjectAltName = SubjectAltName ( sub_alt_name) ;
147
147
let sub_alt_name = vec ! [ sub_alt_name] ;
148
148
sub_alt_name
149
- . to_vec ( )
149
+ . to_der ( )
150
150
. map_err ( |e| ResolveError :: GenerateCertificate ( X509Error :: DerEncoding ( e) ) )
151
151
}
152
152
@@ -164,7 +164,7 @@ pub fn generate_ek_cert(
164
164
// Generate x.509 certificate
165
165
let algorithm = AlgorithmIdentifier {
166
166
algorithm : ID_EC_PUBKEY_OID ,
167
- parameters : Some ( Any :: new ( Tag :: ObjectIdentifier , SECP384R1_OID . as_bytes ( ) ) . unwrap ( ) ) ,
167
+ parameters : Some ( AnyRef :: new ( Tag :: ObjectIdentifier , SECP384R1_OID . as_bytes ( ) ) . unwrap ( ) ) ,
168
168
} ;
169
169
170
170
let sig_alg = AlgorithmIdentifier {
@@ -175,24 +175,24 @@ pub fn generate_ek_cert(
175
175
// basic constrains
176
176
let basic_constrains: alloc:: vec:: Vec < bool > = vec ! [ false ] ;
177
177
let basic_constrains = basic_constrains
178
- . to_vec ( )
178
+ . to_der ( )
179
179
. map_err ( |e| ResolveError :: GenerateCertificate ( X509Error :: DerEncoding ( e) ) ) ?;
180
180
181
181
// extended key usage
182
182
let eku: alloc:: vec:: Vec < ObjectIdentifier > = vec ! [ TCG_EK_CERTIFICATE ] ;
183
183
let eku = eku
184
- . to_vec ( )
184
+ . to_der ( )
185
185
. map_err ( |e| ResolveError :: GenerateCertificate ( X509Error :: DerEncoding ( e) ) ) ?;
186
186
187
187
// authority key identifier
188
188
let auth_key_identifier = gen_auth_key_identifier ( ek_pub) ?;
189
189
190
190
// follow ek-credential spec Section 3.2.
191
191
// keyAgreement (4) refers to https://datatracker.ietf.org/doc/html/rfc5280#section-4.2.1.3
192
- let ku = BitString :: new ( 0 , & [ 0x08 ] )
192
+ let ku = BitStringRef :: new ( 0 , & [ 0x08 ] )
193
193
. map_err ( |e| ResolveError :: GenerateCertificate ( X509Error :: DerEncoding ( e) ) ) ?;
194
194
let ku = ku
195
- . to_vec ( )
195
+ . to_der ( )
196
196
. map_err ( |e| ResolveError :: GenerateCertificate ( X509Error :: DerEncoding ( e) ) ) ?;
197
197
198
198
// subject alt name
@@ -228,6 +228,6 @@ pub fn generate_ek_cert(
228
228
. build ( ) ;
229
229
230
230
x509_certificate
231
- . to_vec ( )
231
+ . to_der ( )
232
232
. map_err ( |e| ResolveError :: GenerateCertificate ( X509Error :: DerEncoding ( e) ) )
233
233
}
0 commit comments