ó
/<õ\c           @` s  d  d l  m Z m Z m Z d  d l Z d  d l Z d  d l Z d  d l m Z m	 Z	 d  d l
 m Z m Z m Z d  d l m Z d  d l m Z m Z m Z d „  Z d „  Z d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z  d „  Z! d „  Z" d „  Z# d „  Z$ d „  Z% d „  Z& d „  Z' d „  Z( d „  Z) d „  Z* d „  Z+ d „  Z, d  „  Z- d! „  Z. d" „  Z/ d# „  Z0 i d$ e	 j1 j2 6d% e	 j1 j3 6d& e	 j1 j4 6d' e	 j1 j5 6d( e	 j1 j6 6d) e	 j1 j7 6d* e	 j1 j8 6d+ e	 j1 j9 6Z: d, „  Z; d- „  Z< d. „  Z= d/ „  Z> d0 „  Z? d1 „  Z@ d2 „  ZA d3 „  ZB i e) e jC 6e- e jD 6e' e jE 6e, e jF 6e, e jG 6e0 e jH 6e( e jI 6e" e jJ 6e* e jK 6e> e jL 6e> e jM 6e e jN 6e& e jO 6e? e jP 6e@ e jQ 6ZR i e, e jG 6e( e jI 6e* e jK 6e e jS 6e e jT 6e e jU 6ZV i e, e jW 6e  e jX 6e! e jY 6ZZ i eB e j[ 6Z\ i eB e j[ 6Z] d S(4   i    (   t   absolute_importt   divisiont   print_functionN(   t   utilst   x509(   t   _CRL_ENTRY_REASON_ENUM_TO_CODEt   _DISTPOINT_TYPE_FULLNAMEt   _DISTPOINT_TYPE_RELATIVENAME(   t	   _ASN1Type(   t   CRLEntryExtensionOIDt   ExtensionOIDt   OCSPExtensionOIDc         C` sb   |  j  | ƒ } |  j j | |  j j ƒ } |  j j | |  j j ƒ } |  j | |  j j k ƒ | S(   s  
    Converts a python integer to an ASN1_INTEGER. The returned ASN1_INTEGER
    will not be garbage collected (to support adding them to structs that take
    ownership of the object). Be sure to register it for GC if it will be
    discarded after use.

    (   t
   _int_to_bnt   _ffit   gct   _libt   BN_freet   BN_to_ASN1_INTEGERt   NULLt   openssl_assert(   t   backendt   xt   i(    (    sO   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/encode_asn1.pyt   _encode_asn1_int   s
    c         C` s.   t  |  | ƒ } |  j j | |  j j ƒ } | S(   N(   R   R   R   R   t   ASN1_INTEGER_free(   R   R   R   (    (    sO   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/encode_asn1.pyt   _encode_asn1_int_gc+   s    c         C` sD   |  j  j ƒ  } |  j  j | | t | ƒ ƒ } |  j | d k ƒ | S(   s@   
    Create an ASN1_OCTET_STRING from a Python byte string.
    i   (   R   t   ASN1_OCTET_STRING_newt   ASN1_OCTET_STRING_sett   lenR   (   R   t   datat   st   res(    (    sO   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/encode_asn1.pyt   _encode_asn1_str1   s    c         C` sV   |  j  j ƒ  } |  j  j | | j d ƒ t | j d ƒ ƒ ƒ } |  j | d k ƒ | S(   s³   
    Create an ASN1_UTF8STRING from a Python unicode string.
    This object will be an ASN1_STRING with UTF8 type in OpenSSL and
    can be decoded with ASN1_STRING_to_UTF8.
    t   utf8i   (   R   t   ASN1_UTF8STRING_newt   ASN1_STRING_sett   encodeR   R   (   R   t   stringR   R   (    (    sO   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/encode_asn1.pyt   _encode_asn1_utf8_str;   s
    	'c         C` s.   t  |  | ƒ } |  j j | |  j j ƒ } | S(   N(   R    R   R   R   t   ASN1_OCTET_STRING_free(   R   R   R   (    (    sO   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/encode_asn1.pyt   _encode_asn1_str_gcI   s    c         C` s   t  |  | j ƒ S(   N(   R   t
   skip_certs(   R   t   inhibit_any_policy(    (    sO   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/encode_asn1.pyt   _encode_inhibit_any_policyO   s    c         C` sœ   |  j  j ƒ  } x† | j D]{ } d } xl | D]d } t |  | ƒ } |  j j | |  j  j ƒ } |  j  j | | d | ƒ } |  j | d k ƒ d } q, Wq W| S(   sP   
    The X509_NAME created will not be gc'd. Use _encode_name_gc if needed.
    i    iÿÿÿÿi   (	   R   t   X509_NAME_newt   rdnst   _encode_name_entryR   R   t   X509_NAME_ENTRY_freet   X509_NAME_add_entryR   (   R   t   namet   subjectt   rdnt   set_flagt	   attributet
   name_entryR   (    (    sO   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/encode_asn1.pyt   _encode_nameS   s    		c         C` s.   t  |  | ƒ } |  j j | |  j j ƒ } | S(   N(   R7   R   R   R   t   X509_NAME_free(   R   t
   attributesR2   (    (    sO   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/encode_asn1.pyt   _encode_name_gcg   s    c         C` s[   |  j  j ƒ  } xE | D]= } t |  | ƒ } |  j  j | | ƒ } |  j | d k ƒ q W| S(   s:   
    The sk_X509_NAME_ENTRY created will not be gc'd.
    i   (   R   t   sk_X509_NAME_ENTRY_new_nullR.   t   sk_X509_NAME_ENTRY_pushR   (   R   R9   t   stackR5   R6   R   (    (    sO   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/encode_asn1.pyt   _encode_sk_name_entrym   s    c         C` s‚   | j  t j k r' | j j d ƒ } n | j j d ƒ } t |  | j j ƒ } |  j j	 |  j
 j | | j  j | t | ƒ ƒ } | S(   Nt	   utf_16_beR!   (   t   _typeR   t	   BMPStringt   valueR$   t   _txt2obj_gct   oidt   dotted_stringR   t   X509_NAME_ENTRY_create_by_OBJR   R   R   (   R   R5   RB   t   objR6   (    (    sO   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/encode_asn1.pyR.   y   s    	'c         C` s   t  |  | j ƒ S(   N(   R   t
   crl_number(   R   t   ext(    (    sO   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/encode_asn1.pyt&   _encode_crl_number_delta_crl_indicator‡   s    c         C` s
  |  j  j ƒ  } |  j | |  j j k ƒ |  j j | |  j  j ƒ } | j rR d n d | _ | j	 rj d n d | _
 | j r‚ d n d | _ | j rš d n d | _ | j rÄ t |  | j ƒ | _ n  | j rå t |  | j ƒ | _ n  | j rt |  | j ƒ | _ n  | S(   Niÿ   i    (   R   t   ISSUING_DIST_POINT_newR   R   R   R   t   ISSUING_DIST_POINT_freet   only_contains_user_certst   onlyusert   only_contains_ca_certst   onlyCAt   indirect_crlt   indirectCRLt   only_contains_attribute_certst   onlyattrt   only_some_reasonst   _encode_reasonflagst   onlysomereasonst	   full_namet   _encode_full_namet	   distpointt   relative_namet   _encode_relative_name(   R   RI   t   idp(    (    sO   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/encode_asn1.pyt   _encode_issuing_dist_point‹   s    			c         C` sv   |  j  j ƒ  } |  j | |  j j k ƒ |  j j | |  j  j ƒ } |  j  j | t | j	 ƒ } |  j | d k ƒ | S(   Ni   (
   R   t   ASN1_ENUMERATED_newR   R   R   R   t   ASN1_ENUMERATED_freet   ASN1_ENUMERATED_setR   t   reason(   R   t
   crl_reasont   asn1enumR   (    (    sO   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/encode_asn1.pyt   _encode_crl_reason¡   s    	c         C` se   |  j  j |  j j t j | j j ƒ  ƒ ƒ } |  j | |  j j k ƒ |  j j	 | |  j  j
 ƒ } | S(   N(   R   t   ASN1_GENERALIZEDTIME_setR   R   t   calendart   timegmt   invalidity_datet	   timetupleR   R   t   ASN1_GENERALIZEDTIME_free(   R   Ri   t   time(    (    sO   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/encode_asn1.pyt   _encode_invalidity_date­   s    	c         C` sL  |  j  j ƒ  } |  j | |  j j k ƒ |  j j | |  j  j ƒ } x| D]ú} |  j  j ƒ  } |  j | |  j j k ƒ |  j  j | | ƒ } |  j | d k ƒ t	 |  | j
 j ƒ } | | _ | j rJ |  j  j ƒ  } |  j | |  j j k ƒ xF| j D];} |  j  j ƒ  }	 |  j |	 |  j j k ƒ |  j  j | |	 ƒ } |  j | d k ƒ t | t j ƒ ršt	 |  t j j ƒ |	 _ t |  | j d ƒ ƒ |	 j _ qù t | t j ƒ s²t ‚ t	 |  t j j ƒ |	 _ |  j  j ƒ  }
 |  j |
 |  j j k ƒ |
 |	 j _ | j  rt! |  | j  ƒ |
 _" n  t# |  | j$ ƒ |
 _% qù W| | _& qJ qJ W| S(   Ni   t   ascii('   R   t   sk_POLICYINFO_new_nullR   R   R   R   t   sk_POLICYINFO_freet   POLICYINFO_newt   sk_POLICYINFO_pusht   _txt2objt   policy_identifierRE   t   policyidt   policy_qualifierst   sk_POLICYQUALINFO_new_nullt   POLICYQUALINFO_newt   sk_POLICYQUALINFO_pusht
   isinstancet   sixt	   text_typeR   t   OID_CPS_QUALIFIERt   pqualidR    R$   t   dt   cpsurit
   UserNoticet   AssertionErrort   OID_CPS_USER_NOTICEt   USERNOTICE_newt
   usernoticet   explicit_textR&   t   exptextt   _encode_notice_referencet   notice_referencet	   noticereft
   qualifiers(   R   t   certificate_policiest   cpt   policy_infot   piR   RD   t   pqist	   qualifiert   pqit   un(    (    sO   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/encode_asn1.pyt   _encode_certificate_policies¹   sJ    			c         C` s¾   | d  k r |  j j S|  j j ƒ  } |  j | |  j j k ƒ t |  | j ƒ | _ |  j j ƒ  } | | _	 xH | j
 D]= } t |  | ƒ } |  j j | | ƒ } |  j | d k ƒ qu W| Sd  S(   Ni   (   t   NoneR   R   R   t   NOTICEREF_newR   R&   t   organizationt   sk_ASN1_INTEGER_new_nullt	   noticenost   notice_numbersR   t   sk_ASN1_INTEGER_push(   R   t   noticet   nrt   notice_stackt   numbert   numR   (    (    sO   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/encode_asn1.pyRˆ   ê   s    
	c         C` sA   | j  d ƒ } |  j j | d ƒ } |  j | |  j j k ƒ | S(   s_   
    Converts a Python string with an ASN.1 object ID in dotted form to a
    ASN1_OBJECT.
    Rn   i   (   R$   R   t   OBJ_txt2objR   R   R   (   R   R1   RG   (    (    sO   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/encode_asn1.pyRs   ý   s    c         C` s.   t  |  | ƒ } |  j j | |  j j ƒ } | S(   N(   Rs   R   R   R   t   ASN1_OBJECT_free(   R   R1   RG   (    (    sO   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/encode_asn1.pyRC     s    c         C` s   |  j  j ƒ  S(   N(   R   t   ASN1_NULL_new(   R   RI   (    (    sO   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/encode_asn1.pyt   _encode_ocsp_nocheck  s    c         C` sø  |  j  j } |  j  j ƒ  } |  j j | |  j  j ƒ } | | d | j ƒ } |  j | d k ƒ | | d | j ƒ } |  j | d k ƒ | | d | j	 ƒ } |  j | d k ƒ | | d | j
 ƒ } |  j | d k ƒ | | d | j ƒ } |  j | d k ƒ | | d | j ƒ } |  j | d k ƒ | | d | j ƒ } |  j | d k ƒ | j rª| | d | j ƒ } |  j | d k ƒ | | d	 | j ƒ } |  j | d k ƒ nJ | | d d ƒ } |  j | d k ƒ | | d	 d ƒ } |  j | d k ƒ | S(
   Ni    i   i   i   i   i   i   i   i   (   R   t   ASN1_BIT_STRING_set_bitt   ASN1_BIT_STRING_newR   R   t   ASN1_BIT_STRING_freet   digital_signatureR   t   content_commitmentt   key_enciphermentt   data_enciphermentt   key_agreementt   key_cert_signt   crl_signt   encipher_onlyt   decipher_only(   R   t	   key_usaget   set_bitt   kuR   (    (    sO   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/encode_asn1.pyt   _encode_key_usage  s6    	c         C` s¼   |  j  j ƒ  } |  j | |  j j k ƒ |  j j | |  j  j ƒ } | j d  k	 rj t	 |  | j ƒ | _
 n  | j d  k	 r‘ t |  | j ƒ | _ n  | j d  k	 r¸ t |  | j ƒ | _ n  | S(   N(   R   t   AUTHORITY_KEYID_newR   R   R   R   t   AUTHORITY_KEYID_freet   key_identifierR•   R    t   keyidt   authority_cert_issuert   _encode_general_namest   issuert   authority_cert_serial_numberR   t   serial(   R   t   authority_keyidt   akid(    (    sO   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/encode_asn1.pyt    _encode_authority_key_identifier3  s    c         C` sv   |  j  j ƒ  } |  j j | |  j  j ƒ } | j r9 d n d | _ | j rr | j d  k	 rr t |  | j ƒ | _	 n  | S(   Niÿ   i    (
   R   t   BASIC_CONSTRAINTS_newR   R   t   BASIC_CONSTRAINTS_freet   cat   path_lengthR•   R   t   pathlen(   R   t   basic_constraintst   constraints(    (    sO   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/encode_asn1.pyt   _encode_basic_constraintsJ  s    	c         ` sÆ   ˆ  j  j ƒ  } ˆ  j | ˆ  j j k ƒ ˆ  j j | ‡  f d †  ƒ } xy | D]q } ˆ  j  j ƒ  } t ˆ  | j j	 ƒ } t
 ˆ  | j | j ƒ | | _ ˆ  j  j | | ƒ } ˆ  j | d k ƒ qM W| S(   Nc         ` s(   ˆ  j  j |  ˆ  j j ˆ  j  j d ƒ ƒ S(   Nt   ACCESS_DESCRIPTION_free(   R   t   sk_ACCESS_DESCRIPTION_pop_freeR   t	   addressoft   _original_lib(   R   (   R   (    sO   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/encode_asn1.pyt   <lambda>]  s   	i   (   R   t   sk_ACCESS_DESCRIPTION_new_nullR   R   R   R   t   ACCESS_DESCRIPTION_newRs   t   access_methodRE   t!   _encode_general_name_preallocatedt   access_locationt   locationt   methodt   sk_ACCESS_DESCRIPTION_push(   R   t   authority_info_accesst   aiat   access_descriptiont   adRÔ   R   (    (   R   sO   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/encode_asn1.pyt$   _encode_authority_information_accessX  s    		c         C` st   |  j  j ƒ  } |  j | |  j j k ƒ xE | D]= } t |  | ƒ } |  j  j | | ƒ } |  j | d k ƒ q/ W| S(   Ni    (   R   t   GENERAL_NAMES_newR   R   R   t   _encode_general_namet   sk_GENERAL_NAME_push(   R   t   namest   general_namesR1   t   gnR   (    (    sO   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/encode_asn1.pyRº   r  s    c         C` s.   t  |  | ƒ } |  j j | |  j j ƒ } | S(   N(   Rº   R   R   R   t   GENERAL_NAMES_free(   R   t   sanRß   (    (    sO   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/encode_asn1.pyt   _encode_alt_name}  s    	c         C` s   t  |  | j ƒ S(   N(   R(   t   digest(   R   t   ski(    (    sO   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/encode_asn1.pyt   _encode_subject_key_identifier…  s    c         C` s#   |  j  j ƒ  } t |  | | ƒ | S(   N(   R   t   GENERAL_NAME_newRÑ   (   R   R1   Rà   (    (    sO   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/encode_asn1.pyRÜ   ‰  s    c         C` s®  t  | t j ƒ r´ |  j | |  j j k ƒ |  j j | _ |  j j	 ƒ  } |  j | |  j j k ƒ | j
 j d ƒ } |  j j | | t | ƒ ƒ } |  j | d k ƒ | | j _ nöt  | t j ƒ r:|  j | |  j j k ƒ |  j j | _ |  j j | j
 j j d ƒ d ƒ } |  j | |  j j k ƒ | | j _ npt  | t j ƒ r•|  j | |  j j k ƒ t |  | j
 ƒ } |  j j | _ | | j _ nt  | t j ƒ r{|  j | |  j j k ƒ t  | j
 t j ƒ r| j
 j j t j d | j
 j  d ƒ } nM t  | j
 t j! ƒ rB| j
 j j t j d | j
 j  d ƒ } n | j
 j } t" |  | ƒ }	 |  j j# | _ |	 | j _$ n/t  | t j% ƒ rÁ|  j | |  j j k ƒ |  j j& ƒ  }
 |  j |
 |  j j k ƒ |  j j | j' j j d ƒ d ƒ } |  j | |  j j k ƒ |  j j( d | j
 ƒ } |  j j( d	 ƒ } | | d
 <|  j j) |  j j | t | j
 ƒ ƒ } | |  j j k r‘|  j* ƒ  t+ d ƒ ‚ n  | |
 _' | |
 _
 |  j j, | _ |
 | j _- né t  | t j. ƒ r+|  j | |  j j k ƒ | j
 j d ƒ } t" |  | ƒ } |  j j/ | _ | | j _0 n t  | t j1 ƒ r•|  j | |  j j k ƒ | j
 j d ƒ } t" |  | ƒ } |  j j2 | _ | | j _3 n t+ d j4 | ƒ ƒ ‚ d  S(   NR!   i   Rn   i    i   i€   i   s   unsigned char[]s   unsigned char **i    s   Invalid ASN.1 datas!   {} is an unknown GeneralName typeI       l	                    (5   Rz   R   t   DNSNameR   R   R   R   t   GEN_DNSt   typet   ASN1_IA5STRING_newRB   R$   R#   R   R   t   dNSNamet   RegisteredIDt   GEN_RIDR¡   RE   t   registeredIDt   DirectoryNameR7   t   GEN_DIRNAMEt   directoryNamet	   IPAddresst	   ipaddresst   IPv4Networkt   network_addresst   packedR   t   int_to_bytest   num_addressest   IPv6NetworkR    t	   GEN_IPADDt	   iPAddresst	   OtherNamet   OTHERNAME_newt   type_idt   newt   d2i_ASN1_TYPEt   _consume_errorst
   ValueErrort   GEN_OTHERNAMEt	   otherNamet
   RFC822Namet	   GEN_EMAILt
   rfc822Namet   UniformResourceIdentifiert   GEN_URIt   uniformResourceIdentifiert   format(   R   R1   Rà   t   ia5RB   R   RG   t   dir_nameR÷   t   ipaddrt
   other_nameRÿ   R   t   data_ptr_ptrt   asn1_str(    (    sO   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/encode_asn1.pyRÑ     s„    	  	
	
		c         C` sy   |  j  j ƒ  } |  j j | |  j  j ƒ } xH | D]@ } t |  | j ƒ } |  j  j | | ƒ } |  j | d k ƒ q1 W| S(   Ni   (	   R   t   sk_ASN1_OBJECT_new_nullR   R   t   sk_ASN1_OBJECT_freeRs   RE   t   sk_ASN1_OBJECT_pushR   (   R   t   extended_key_usaget   ekuRD   RG   R   (    (    sO   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/encode_asn1.pyt   _encode_extended_key_usageç  s    i   i   i   i   i   i   i   i   c         C` sl   |  j  j ƒ  } |  j | |  j j k ƒ x= | D]5 } |  j  j | t | d ƒ } |  j | d k ƒ q/ W| S(   Ni   (   R   R¦   R   R   R   R¥   t   _CRLREASONFLAGS(   R   t   reasonst   bitmaskRb   R   (    (    sO   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/encode_asn1.pyRV   þ  s    	c         C` sJ   |  j  j ƒ  } |  j | |  j j k ƒ t | _ t |  | ƒ | j _	 | S(   N(
   R   t   DIST_POINT_NAME_newR   R   R   R   Rê   Rº   R1   t   fullname(   R   RX   t   dpn(    (    sO   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/encode_asn1.pyRY   
  s
    	c         C` sJ   |  j  j ƒ  } |  j | |  j j k ƒ t | _ t |  | ƒ | j _	 | S(   N(
   R   R  R   R   R   R   Rê   R>   R1   t   relativename(   R   R[   R  (    (    sO   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/encode_asn1.pyR\     s
    	c         C` s  |  j  j ƒ  } |  j j | |  j  j ƒ } xâ | D]Ú } |  j  j ƒ  } |  j | |  j j k ƒ | j r€ t	 |  | j ƒ | _ n  | j
 r¡ t |  | j
 ƒ | _ n  | j rÂ t |  | j ƒ | _ n  | j rã t |  | j ƒ | _ n  |  j  j | | ƒ } |  j | d k ƒ q1 W| S(   Ni   (   R   t   sk_DIST_POINT_new_nullR   R   t   sk_DIST_POINT_freet   DIST_POINT_newR   R   R  RV   RX   RY   RZ   R[   R\   t
   crl_issuerRº   t	   CRLissuert   sk_DIST_POINT_push(   R   t   cdpst   cdpt   pointt   dpR   (    (    sO   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/encode_asn1.pyt   _encode_cdps_freshest_crl  s     				c         C` s}   |  j  j ƒ  } |  j | |  j j k ƒ |  j j | |  j  j ƒ } t |  | j ƒ } | | _	 t |  | j
 ƒ } | | _ | S(   N(   R   t   NAME_CONSTRAINTS_newR   R   R   R   t   NAME_CONSTRAINTS_freet   _encode_general_subtreet   permitted_subtreest   permittedSubtreest   excluded_subtreest   excludedSubtrees(   R   t   name_constraintst   nct	   permittedt   excluded(    (    sO   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/encode_asn1.pyt   _encode_name_constraints3  s    		c         C` s•   |  j  j ƒ  } |  j | |  j j k ƒ |  j j | |  j  j ƒ } | j d  k	 rj t	 |  | j ƒ | _
 n  | j d  k	 r‘ t	 |  | j ƒ | _ n  | S(   N(   R   t   POLICY_CONSTRAINTS_newR   R   R   R   t   POLICY_CONSTRAINTS_freet   require_explicit_policyR•   R   t   requireExplicitPolicyt   inhibit_policy_mappingt   inhibitPolicyMapping(   R   t   policy_constraintst   pc(    (    sO   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/encode_asn1.pyt   _encode_policy_constraintsC  s    c         C` s†   | d  k r |  j j S|  j j ƒ  } xV | D]N } |  j j ƒ  } t |  | ƒ | _ |  j j | | ƒ } | d k s, t	 ‚ q, W| Sd  S(   Ni   (
   R•   R   R   R   t   sk_GENERAL_SUBTREE_new_nullt   GENERAL_SUBTREE_newRÜ   t   baset   sk_GENERAL_SUBTREE_pushR‚   (   R   t   subtreest   general_subtreesR1   t   gsR   (    (    sO   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/encode_asn1.pyR-  T  s    
c         C` s   t  |  | j ƒ S(   N(   R(   t   nonce(   R   RG  (    (    sO   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/encode_asn1.pyt   _encode_nonceb  s    (^   t
   __future__R    R   R   Rg   Rô   R{   t   cryptographyR   R   t0   cryptography.hazmat.backends.openssl.decode_asn1R   R   R   t   cryptography.x509.nameR   t   cryptography.x509.oidR	   R
   R   R   R   R    R&   R(   R+   R7   R:   R>   R.   RJ   R^   Re   Rm   R”   Rˆ   Rs   RC   R¤   R´   RÀ   RÈ   RÚ   Rº   Rã   Ræ   RÜ   RÑ   R  t   ReasonFlagst   key_compromiset   ca_compromiset   affiliation_changedt
   supersededt   cessation_of_operationt   certificate_holdt   privilege_withdrawnt   aa_compromiseR  RV   RY   R\   R*  R6  R?  R-  RH  t   BASIC_CONSTRAINTSt   SUBJECT_KEY_IDENTIFIERt	   KEY_USAGEt   SUBJECT_ALTERNATIVE_NAMEt   ISSUER_ALTERNATIVE_NAMEt   EXTENDED_KEY_USAGEt   AUTHORITY_KEY_IDENTIFIERt   CERTIFICATE_POLICIESt   AUTHORITY_INFORMATION_ACCESSt   CRL_DISTRIBUTION_POINTSt   FRESHEST_CRLt   INHIBIT_ANY_POLICYt   OCSP_NO_CHECKt   NAME_CONSTRAINTSt   POLICY_CONSTRAINTSt   _EXTENSION_ENCODE_HANDLERSt
   CRL_NUMBERt   DELTA_CRL_INDICATORt   ISSUING_DISTRIBUTION_POINTt   _CRL_EXTENSION_ENCODE_HANDLERSt   CERTIFICATE_ISSUERt
   CRL_REASONt   INVALIDITY_DATEt$   _CRL_ENTRY_EXTENSION_ENCODE_HANDLERSt   NONCEt'   _OCSP_REQUEST_EXTENSION_ENCODE_HANDLERSt)   _OCSP_BASICRESP_EXTENSION_ENCODE_HANDLERS(    (    (    sO   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/encode_asn1.pyt   <module>   s¨   			
												1					 								X									




















