ToBeSignedCertificate

Struct ToBeSignedCertificate 

Source
pub struct ToBeSignedCertificate<'input> {
Show 16 fields pub id: CertificateId<'input>, pub craca_id: HashedId3<'input>, pub crl_series: CrlSeries, pub validity_period: ValidityPeriod, pub region: Option<GeographicRegion>, pub assurance_level: Option<SubjectAssurance<'input>>, pub app_permissions: Option<SequenceOfPsidSsp<'input>>, pub cert_issue_permissions: Option<SequenceOfPsidGroupPermissions<'input>>, pub cert_request_permissions: Option<SequenceOfPsidGroupPermissions<'input>>, pub can_request_rollover: Option<()>, pub encryption_key: Option<PublicEncryptionKey<'input>>, pub verify_key_indicator: VerificationKeyIndicator<'input>, pub flags: Option<Bits<8>>, pub app_extensions: Option<SequenceOfAppExtensions<'input>>, pub cert_issue_extensions: Option<SequenceOfCertIssueExtensions<'input>>, pub cert_request_extension: Option<SequenceOfCertRequestExtensions<'input>>,
}
Expand description

The fields in the ToBeSignedCertificate structure have the following meaning:

For both implicit and explicit certificates, when the certificate is hashed to create or recover the public key (in the case of an implicit certificate) or to generate or verify the signature (in the case of an explicit certificate), the hash is Hash (Data input) || Hash ( Signer identifier input), where:

  • Data input is the COER encoding of toBeSigned, canonicalized as described above.
  • Signer identifier input depends on the verification type, which in turn depends on the choice indicated by issuer. If the choice indicated by issuer is self, the verification type is self-signed and the signer identifier input is the empty string. If the choice indicated by issuer is not self, the verification type is certificate and the signer identifier input is the COER encoding of the canonicalization per 6.4.3 of the certificate indicated by issuer.

In other words, for implicit certificates, the value H (CertU) in SEC 4, section 3, is for purposes of this standard taken to be H [H (canonicalized ToBeSignedCertificate from the subordinate certificate) || H (entirety of issuer Certificate)]. See 5.3.2 for further discussion, including material differences between this standard and SEC 4 regarding how the hash function output is converted from a bit string to an integer.

Note: Canonicalization: This data structure is subject to canonicalization for the relevant operations specified in 6.1.2. The canonicalization applies to the PublicEncryptionKey and to the VerificationKeyIndicator. If the PublicEncryptionKey contains a BasePublicEncryptionKey that is an elliptic curve point (i.e., of type EccP256CurvePoint or EccP384CurvePoint), then the elliptic curve point is encoded in compressed form, i.e., such that the choice indicated within the Ecc*CurvePoint is compressed-y-0 or compressed-y-1.

Note: Critical information fields:

  • If present, appPermissions is a critical information field as defined in 5.2.6. If an implementation of verification does not support the number of PsidSsp in the appPermissions field of a certificate that signed a signed SPDU, that implementation shall indicate that the signed SPDU is invalid in the sense of 4.2.2.3.2, that is, it is invalid in the sense that its validity cannot be established.. A conformant implementation shall support appPermissions fields containing at least eight entries. It may be the case that an implementation of verification does not support the number of entries in the appPermissions field and the appPermissions field is not relevant to the verification: this will occur, for example, if the certificate in question is a CA certificate and so the certIssuePermissions field is relevant to the verification and the appPermissions field is not. In this case, whether the implementation indicates that the signed SPDU is valid (because it could validate all relevant fields) or invalid (because it could not parse the entire certificate) is implementation-specific.
  • If present, certIssuePermissions is a critical information field as defined in 5.2.6. If an implementation of verification does not support the number of PsidGroupPermissions in the certIssuePermissions field of a CA certificate in the chain of a signed SPDU, the implementation shall indicate that the signed SPDU is invalid in the sense of 4.2.2.3.2, that is, it is invalid in the sense that its validity cannot be established. A conformant implementation shall support certIssuePermissions fields containing at least eight entries. It may be the case that an implementation of verification does not support the number of entries in the certIssuePermissions field and the certIssuePermissions field is not relevant to the verification: this will occur, for example, if the certificate in question is the signing certificate for the SPDU and so the appPermissions field is relevant to the verification and the certIssuePermissions field is not. In this case, whether the implementation indicates that the signed SPDU is valid (because it could validate all relevant fields) or invalid (because it could not parse the entire certificate) is implementation-specific.
  • If present, certRequestPermissions is a critical information field as defined in 5.2.6. If an implementaiton of verification of a certificate request does not support the number of PsidGroupPermissions in certRequestPermissions, the implementation shall indicate that the signed SPDU is invalid in the sense of 4.2.2.3.2, that is, it is invalid in the sense that its validity cannot be established. A conformant implementation shall support certRequestPermissions fields containing at least eight entries.

It may be the case that an implementation of verification does not support the number of entries in the certRequestPermissions field and the certRequestPermissions field is not relevant to the verification: this will occur, for example, if the certificate in question is the signing certificate for the SPDU and so the appPermissions field is relevant to the verification and the certRequestPermissions field is not. In this case, whether the implementation indicates that the signed SPDU is valid (because it could validate all relevant fields) or invalid (because it could not parse the entire certificate) is implementation-specific.

Fields§

§id: CertificateId<'input>

contains information that is used to identify the certificate holder if necessary

§craca_id: HashedId3<'input>

identifies the Certificate Revocation Authorization CA (CRACA) responsible for certificate revocation lists (CRLs) on which this certificate might appear. Use of the cracaId is specified in 5.1.3. The HashedId3 is calculated with the whole-certificate hash algorithm, determined as described in 6.4.3, applied to the COER-encoded certificate, canonicalized as defined in the definition of Certificate.

§crl_series: CrlSeries

represents the CRL series relevant to a particular Certificate Revocation Authorization CA (CRACA) on which the certificate might appear. Use of this field is specified in 5.1.3.

§validity_period: ValidityPeriod

contains the validity period of the certificate

§region: Option<GeographicRegion>

if present, indicates the validity region of the certificate. If it is omitted the validity region is indicated as follows:

  • If enclosing certificate is self-signed, i.e., the choice indicated by the issuer field in the enclosing certificate structure is self, the certificate is valid worldwide.
  • Otherwise, the certificate has the same validity region as the certificate that issued it.
§assurance_level: Option<SubjectAssurance<'input>>

indicates the assurance level of the certificate holder

§app_permissions: Option<SequenceOfPsidSsp<'input>>

indicates the permissions that the certificate holder has to sign application data with this certificate. A valid instance of appPermissions contains any particular Psid value in at most one entry.

§cert_issue_permissions: Option<SequenceOfPsidGroupPermissions<'input>>

indicates the permissions that the certificate holder has to sign certificates with this certificate. A valid instance of this array contains no more than one entry whose psidSspRange field indicates all. If the array has multiple entries and one entry has its psidSspRange field indicate all, then the entry indicating all specifies the permissions for all PSIDs other than the ones explicitly specified in the other entries. See the description of PsidGroupPermissions for further discussion.

§cert_request_permissions: Option<SequenceOfPsidGroupPermissions<'input>>

indicates the permissions that the certificate holder can request in its certificate. A valid instance of this array contains no more than one entry whose psidSspRange field indicates all. If the array has multiple entries and one entry has its psidSspRange field indicate all, then the entry indicating all specifies the permissions for all PSIDs other than the ones explicitly specified in the other entries. See the description of PsidGroupPermissions for further discussion.

§can_request_rollover: Option<()>

indicates that the certificate may be used to sign a request for another certificate with the same permissions. This field is provided for future use and its use is not defined in this version of this standard.

§encryption_key: Option<PublicEncryptionKey<'input>>

contains a public key for encryption for which the certificate holder holds the corresponding private key

§verify_key_indicator: VerificationKeyIndicator<'input>

contains material that may be used to recover the public key that may be used to verify data signed by this certificate

§flags: Option<Bits<8>>

indicates additional yes/no properties of the certificate holder. The only bit with defined semantics in this string in this version of this standard is usesCubk. If set, the usesCubk bit indicates that the certificate holder supports the compact unified butterfly key response. Further material about the compact unified butterfly key response can be found in IEEE Std 1609.2.1.

Note: usesCubk is only relevant for CA certificates, and the only functionality defined associated with this field is associated with consistency checks on received certificate responses. No functionality associated with communications between peer SDEEs is defined associated with this field.

§app_extensions: Option<SequenceOfAppExtensions<'input>>

indicates additional permissions that may be applied to application activities that the certificate holder is carrying out

§cert_issue_extensions: Option<SequenceOfCertIssueExtensions<'input>>

indicates additional permissions to issue certificates containing endEntityExtensions

§cert_request_extension: Option<SequenceOfCertRequestExtensions<'input>>

indicates additional permissions to request certificates containing endEntityExtensions

Trait Implementations§

Source§

impl<'input> Clone for ToBeSignedCertificate<'input>

Source§

fn clone(&self) -> ToBeSignedCertificate<'input>

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<'input> Debug for ToBeSignedCertificate<'input>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Encode for ToBeSignedCertificate<'_>

Source§

impl<'input> PartialEq for ToBeSignedCertificate<'input>

Source§

fn eq(&self, other: &ToBeSignedCertificate<'input>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<'input> Serialize for ToBeSignedCertificate<'input>

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl<'input> StructuralPartialEq for ToBeSignedCertificate<'input>

Auto Trait Implementations§

§

impl<'input> Freeze for ToBeSignedCertificate<'input>

§

impl<'input> RefUnwindSafe for ToBeSignedCertificate<'input>

§

impl<'input> Send for ToBeSignedCertificate<'input>

§

impl<'input> Sync for ToBeSignedCertificate<'input>

§

impl<'input> Unpin for ToBeSignedCertificate<'input>

§

impl<'input> UnwindSafe for ToBeSignedCertificate<'input>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> Conv for T

Source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
Source§

impl<T> FmtForward for T

Source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
Source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
Source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
Source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
Source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
Source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
Source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
Source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
Source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Pipe for T
where T: ?Sized,

Source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
Source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
Source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
Source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
Source§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
Source§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
Source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> Tap for T

Source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
Source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
Source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
Source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
Source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
Source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
Source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
Source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
Source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
Source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> TryConv for T

Source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.