swagger: '2.0'
info:
  title: Zarządca Kluczy
  description: >-
    Moduł Zarządca Kluczy jest odpowiedzialny za generowanie, przechowywanie
    i udostępnianie kluczy szyfrujących w celu realizacji zabezpieczeń
    kryptograficznych ofert.
  version: '1.0'
schemes:
  - https
host: api.ezamowienia.gov.pl
basePath: /zk
consumes:
  - application/json
produces:
  - application/json
tags:
  - name: Klucze
paths:
  '/klucz-publiczny/{idPostepowania}':
    parameters:
      - $ref: '#/parameters/IdPostepowania'
    get:
      summary: Pobranie klucza publicznego
      description: >-
        Metoda służy do pobrania kryptograficznego klucza publicznego dla
        podanego postępowania.
      operationId: PobierzKluczPubliczny
      tags:
        - Klucze
      responses:
        '200':
          description: Informacja o kluczu publicznym
          schema:
            $ref: '#/definitions/PobierzKluczPublicznyResponse'
        '400':
          description: Niepoprawne żądanie
          schema:
            $ref: '#/definitions/Blad'
        '401':
          description: Niezalogowany
          schema:
            $ref: '#/definitions/Blad'
        '403':
          description: Brak uprawnień
          schema:
            $ref: '#/definitions/Blad'
        '404':
          description: Postępowanie nie istnieje
          schema:
            $ref: '#/definitions/Blad'
  '/klucz-publiczny/{idPostepowania}/potwierdzenie':
    parameters:
      - $ref: '#/parameters/IdPostepowania'
    post:
      summary: Potwierdzenie pobrania klucza publicznego
      description: >-
        Metoda służy do potwierdzenia pobrania kryptograficznego klucza publicznego dla
        podanego postępowania.
      operationId: PotwierdzPobranieKluczaPublicznego
      tags:
        - Klucze
      parameters:
        - name: body
          description: Informacje o ofertach
          in: body
          required: true
          schema:
            $ref: '#/definitions/PotwierdzPobranieKluczaPublicznegoRequest'
      responses:
        '200':
          description: potwierdzenie
          schema:
            $ref: '#/definitions/PotwierdzPobranieKluczaPublicznegoResponse'
        '400':
          description: Niepoprawne żądanie
          schema:
            $ref: '#/definitions/Blad'
        '401':
          description: Niezalogowany
          schema:
            $ref: '#/definitions/Blad'
        '403':
          description: Brak uprawnień
          schema:
            $ref: '#/definitions/Blad'
        '404':
          description: Postępowanie nie istnieje
          schema:
            $ref: '#/definitions/Blad'
  '/klucz-prywatny/{idPostepowania}':
    parameters:
      - $ref: '#/parameters/IdPostepowania'
    get:
      summary: Pobranie klucza prywatnego
      description: >-
        Metoda służy do pobrania kryptograficznego klucza prywatnego dla
        podanego postępowania. Klucz prywatny jest zwracany tylko wtedy, gdy
        żądanie wysłał Zamawiający oraz upłynął termin składania
        ofert.
      operationId: PobierzKluczPrywatny
      tags:
        - Klucze
      parameters:
        - in: query
          name: kwotaJakaZamawiajacyPrzeznaczaNaSfinansowanie
          schema:
            type: number
            format: double
          required: true
      responses:
        '200':
          description: Informacja o kluczu prywatnym
          schema:
            $ref: '#/definitions/PobierzKluczPrywatnyResponse'
        '400':
          description: Niepoprawne żądanie
          schema:
            $ref: '#/definitions/Blad'
        '401':
          description: Niezalogowany
          schema:
            $ref: '#/definitions/Blad'
        '403':
          description: Brak uprawnień
          schema:
            $ref: '#/definitions/Blad'
        '404':
          description: Postępowanie nie istnieje
          schema:
            $ref: '#/definitions/Blad'
  '/klucz-prywatny/{idPostepowania}/potwierdzenie':
    parameters:
      - $ref: '#/parameters/IdPostepowania'
    post:
      summary: Potwierdzenie pobrania klucza prywatnego
      description: >-
        Metoda służy do potwierdzenia pobrania kryptograficznego klucza prywatnego dla
        podanego postępowania.
      operationId: PotwierdzPobranieKluczaPrywatnego
      tags:
        - Klucze
      parameters:
        - name: body
          description: Informacje o ofertach
          in: body
          required: true
          schema:
            $ref: '#/definitions/PotwierdzPobranieKluczaPrywatnegoRequest'
      responses:
        '200':
          description: potwierdzenie
          schema:
            $ref: '#/definitions/PotwierdzPobranieKluczaPrywatnegoResponse'
        '400':
          description: Niepoprawne żądanie
          schema:
            $ref: '#/definitions/Blad'
        '401':
          description: Niezalogowany
          schema:
            $ref: '#/definitions/Blad'
        '403':
          description: Brak uprawnień
          schema:
            $ref: '#/definitions/Blad'
        '404':
          description: Postępowanie nie istnieje
          schema:
            $ref: '#/definitions/Blad'
parameters:
  IdPostepowania:
    name: idPostepowania
    in: path
    description: Identyfikator postepowania
    required: true
    type: string
    format: uuid
definitions:
  IdPostepowania:
    description: Identyfikator postępowania
    type: string
    format: uuid
  PobierzKluczPublicznyResponse:
    type: object
    required:
      - idPostepowania
      - kluczPubliczny
      - links
    properties:
      idPostepowania:
        $ref: '#/definitions/IdPostepowania'
      kluczPubliczny:
        description: Klucz publiczny w formie base64
        type: string
        format: byte
    example:
      idPostepowania: e63bf835-224a-4b3b-a564-160640911f0a
      kluczPubliczny: NEYUeineC/Oxpv8rEZQ0rDdIICcSVWt85yRaWHXmcVjIR0g3y7
  PobierzKluczPrywatnyResponse:
    type: object
    required:
      - idPostepowania
      - kluczPrywatny
      - links
    properties:
      idPostepowania:
        $ref: '#/definitions/IdPostepowania'
      kluczPrywatny:
        description: Klucz prywatny w formie base64
        type: string
        format: byte
    example:
      idPostepowania: e63bf835-224a-4b3b-a564-160640911f0a
      kluczPrywatny: NEYUeineC/Oxpv8rEZQ0rDdIICcSVWt85yRaWHXmcVjIR0g3y7
  PotwierdzPobranieKluczaPublicznegoRequest:
    type: object
    required:
      - idPostepowania
      - dataOdebrania
      - IdentyfikatorPortalu
    properties:
      idPostepowania:
        $ref: '#/definitions/IdPostepowania'
      dataOdebrania:
        description: Znacznik czasu otrzymania klucza publicznego
        type: string
        format: date-time
      IdentyfikatorPortalu:
        type: string
        format: uuid
  PotwierdzPobranieKluczaPrywatnegoResponse:
    type: object
    required:
      - idPostepowania
    properties:
      idPostepowania:
        $ref: '#/definitions/IdPostepowania'
    example:
      idPostepowania: e63bf835-224a-4b3b-a564-160640911f0a
  PotwierdzPobranieKluczaPrywatnegoRequest:
    type: object
    required:
      - idPostepowania
      - dataOdebrania
      - IdentyfikatorPortalu
    properties:
      idPostepowania:
        $ref: '#/definitions/IdPostepowania'
      dataOdebrania:
        description: Znacznik czasu otrzymania klucza prywatnego
        type: string
        format: date-time
      IdentyfikatorPortalu:
        type: string
        format: uuid
  PotwierdzPobranieKluczaPublicznegoResponse:
    type: object
    required:
      - idPostepowania
    properties:
      idPostepowania:
        $ref: '#/definitions/IdPostepowania'
    example:
      idPostepowania: e63bf835-224a-4b3b-a564-160640911f0a
  Blad:
    description: Błąd
    type: object
    required:
      - blad
    properties:
      blad:
        type: object
        required:
          - id
          - podsystem
          - kod
          - opis
          - czas
        properties:
          id:
            description: Unikalny identyfikator błędu
            type: string
            format: uuid
          podsystem:
            description: ID modułu Platformy, w ramach którego wystąpił błąd
            type: string
          kod:
            description: Kod błędu
            type: string
          opis:
            description: Opis błędu
            type: string
          czas:
            description: Znacznik czasu wystąpienia błędu
            type: string
            format: date-time
    example:
      blad:
        id: e63bf835-224a-4b3b-a564-160640911f0a
        podsystem: ZK
        kod: 123
        opis: Szczegółowy opis błędu
        czas: '2018-04-05T11:51:20.123'
