# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

scenario Extension2

entity Root
  type Root

entity CA1
  type Intermediate
  issuer Root 
    policy OID.1.0
    policy OID.2.0

entity CA2
  type Intermediate
  issuer CA1
    policy OID.1.0
    policy OID.2.0

entity User1
  type EE
  issuer CA2
    policy OID.1.0

entity User2
  type EE
  issuer CA2
    policy OID.1.0
    policy OID.2.0

db All

verify User1:CA2
  cert CA2:CA1
  cert CA1:Root
  cert Root:
  trust Root:
  policy OID.1.0
  result pass

verify User1:CA2
  cert CA2:CA1
  cert CA1:Root
  cert Root:
  trust Root:
  policy OID.2.0
  result fail

verify User1:CA2
  cert CA2:CA1
  cert CA1:Root
  trust CA1:Root
  policy OID.1.0
  result pass

verify User1:CA2
  cert CA2:CA1
  cert CA1:Root
  trust CA1:Root
  policy OID.2.0
  result fail

verify User1:CA2
  cert CA2:CA1
  trust CA2:CA1
  policy OID.1.0
  result pass

verify User1:CA2
  cert CA2:CA1
  trust CA2:CA1
  policy OID.2.0
  result fail

import Root::
import CA1:Root:
import CA2:CA1:

verify User1:CA2
  trust Root
  policy OID.1.0
  result pass

verify User1:CA2
  trust Root
  policy OID.2.0
  result fail

verify User1:CA2
  trust CA1
  policy OID.1.0
  result pass

verify User1:CA2
  trust CA1
  policy OID.2.0
  result fail

verify User1:CA2
  trust CA2
  policy OID.1.0
  result pass

verify User1:CA2
  trust CA2
  policy OID.2.0
  result fail

verify User2:CA2
  trust Root
  policy OID.1.0
  result pass

verify User2:CA2
  trust Root
  policy OID.2.0
  result pass

verify User2:CA2
  trust CA1
  policy OID.1.0
  result pass

verify User2:CA2
  trust CA1
  policy OID.2.0
  result pass

verify User2:CA2
  trust CA2
  policy OID.1.0
  result pass

verify User2:CA2
  trust CA2
  policy OID.2.0
  result pass

