description: >
    Implement to create Certificate Signing Request(CSR).

methods:
    - name: GenerateCSR
      description: >
          This command is used to initiate a certificate signing request.
          This command only returns the D-Bus path name for the new CSR object.
          User need to listen on InterfacesAdded signal emitted by
          /xyz/openbmc_project/Certs to retrieve the CSR string after
          successful CSR creation.

          Note: Following Parameters are mandatory or optional based on the
                Redfish documentation.

                Caller is responsible for the input parameter validation.

                If the caller does not wish a field to be included in the
                CSR Request, initialize the Parameter with blank for strings
                and zero for integers.

      parameters:
        - name: AlternativeNames
          type: array[string]
          description: >
              Additional hostnames of the component that is being secured.
        - name: ChallengePassword
          type: string
          description: >
              The challenge password to be applied to the certificate for
              revocation requests.
        - name: City
          type: string
          description: >
              The city or locality of the organization making the request.
              For Example Austin
              This is a required parameter.
        - name: CommonName
          type: string
          description: >
              The fully qualified domain name of the component that is being
              secured.
              This is a required parameter.
        - name: ContactPerson
          type: string
          description: >
              The name of the user making the request.
        - name: Country
          type: string
          description: >
              The country of the organization making the request.
              This is a required parameter.
        - name: Email
          type: string
          description: >
              The email address of the contact within the organization
              making the request.
        - name: GivenName
          type: string
          description: >
              The given name of the user making the request.
        - name: Initials
          type: string
          description: >
              The initials of the user making the request.
        - name: KeyBitLength
          type: int64
          description: >
              The length of the key in bits, if needed based on the value
              of the KeyPairAlgorithm parameter.

              Refer https://www.openssl.org/docs/man1.0.2/man1/genpkey.html
        - name: KeyCurveId
          type: string
          description: >
              The curve ID to be used with the key, if needed based on the
              value of the KeyPairAlgorithm parameter.

              Refer https://www.openssl.org/docs/man1.0.2/man1/genpkey.html
        - name: KeyPairAlgorithm
          type: string
          description: >
             The type of key pair for use with signing algorithms.

             Valid built-in algorithm names for private key generation are
             RSA and EC.
        - name: KeyUsage
          type: array[string]
          description: >
             Key usage extensions define the purpose of the public key contained
             in a certificate.

             Valid Key usage extensions and its usage description.

             ClientAuthentication: The public key is used for TLS WWW client
                                   authentication.
             CodeSigning: The public key is used for the signing of executable code.
             CRLSigning: The public key is used for verifying signatures on
                         certificate revocation lists (CLRs).
             DataEncipherment: The public key is used for directly enciphering
                               raw user data without the use of an intermediate
                               symmetric cipher.
             DecipherOnly: The public key could be used for deciphering data
                           while performing key agreement.
             DigitalSignature: The public key is used for verifying digital
                               signatures, other than signatures on certificates
                               and CRLs.
             EmailProtection: The public key is used for email protection.
             EncipherOnly: The public key could be used for enciphering data
                           while performing key agreement.
             KeyCertSign: The public key is used for verifying signatures on
                          public key certificates.
             KeyEncipherment: The public key is used for enciphering private or
                              secret keys.
             NonRepudiation: The public key is used to verify digital signatures,
                             other than signatures on certificates and CRLs,
                             and used to provide a non- repudiation service that
                             protects against the signing entity falsely denying
                             some action.
             OCSPSigning: The public key is used for signing OCSP responses.
             ServerAuthentication: The public key is used for TLS WWW server
                                   authentication.
             Timestamping: The public key is used for binding the hash of an
                           object to a time.
        - name: Organization
          type: string
          description: >
              The legal name of the organization. This should not be abbreviated
              and should include suffixes such as Inc, Corp, or LLC.
              For example, IBM Corp.
              This is a required parameter.
        - name: OrganizationalUnit
          type: string
          description: >
              The name of the unit or division of the organization making the
              request.
              This is a required parameter.
        - name: State
          type: string
          description: >
              The state or province where the organization is located.
              This should not be abbreviated. For example, Texas.
              This is a required parameter.
        - name: Surname
          type: string
          description: >
              The surname of the user making the request.
        - name: UnstructuredName
          type: string
          description: >
              The unstructured name of the subject.
      returns:
        - name: path
          type: string
          description: >
              The object path of the D-Bus object to be watch for retrieving
              the CSR string.
      errors:
        - xyz.openbmc_project.Common.Error.InternalFailure
