1#ifndef CERTIFICATE_HPP_LWBWIAVL 
    2#define CERTIFICATE_HPP_LWBWIAVL 
    4#include <vanetza/common/byte_buffer.hpp> 
    5#include <vanetza/common/its_aid.hpp> 
    6#include <vanetza/security/backend.hpp> 
    7#include <vanetza/security/ecdsa256.hpp> 
    8#include <vanetza/security/v2/basic_elements.hpp> 
    9#include <vanetza/security/v2/ecc_point.hpp> 
   10#include <vanetza/security/v2/serialization.hpp> 
   11#include <vanetza/security/v2/signature.hpp> 
   12#include <vanetza/security/v2/signer_info.hpp> 
   13#include <vanetza/security/v2/subject_attribute.hpp> 
   14#include <vanetza/security/v2/subject_info.hpp> 
   15#include <vanetza/security/v2/validity_restriction.hpp> 
   16#include <boost/optional/optional.hpp> 
   17#include <boost/variant/get.hpp> 
   29    SignerInfo signer_info;
 
   31    std::list<SubjectAttribute> subject_attributes;
 
   32    std::list<ValidityRestriction> validity_restriction;
 
   35    uint8_t version()
 const { 
return 2; }
 
   41    const SubjectAttribute* 
get_attribute(SubjectAttributeType type) 
const;
 
   47    const ValidityRestriction* 
get_restriction(ValidityRestrictionType type) 
const;
 
   79    template<SubjectAttributeType T>
 
   82        using type = subject_attribute_type<T>;
 
   84        return boost::get<type>(field);
 
 
   92    template<Val
idityRestrictionType T>
 
   95        using type = validity_restriction_type<T>;
 
   97        return boost::get<type>(field);
 
 
 
  107size_t get_size(
const Certificate&);
 
  135ByteBuffer convert_for_signing(
const Certificate&);
 
  142void sort(Certificate& certificate);
 
  150boost::optional<Uncompressed> get_uncompressed_public_key(
const Certificate&, 
Backend& backend);
 
  158boost::optional<ecdsa256::PublicKey> get_public_key(
const Certificate&, 
Backend& backend);
 
  165HashedId8 calculate_hash(
const Certificate&);
 
described in TS 103 097 v1.2.1 (2015-06), section 6.1
void remove_attribute(SubjectAttributeType type)
const validity_restriction_type< T > * get_restriction() const
const subject_attribute_type< T > * get_attribute() const
void remove_restriction(ValidityRestrictionType type)
void add_permission(ItsAid aid)
described in TS 103 097 v1.2.1, section 6.2