Class PSCHelper

java.lang.Object
br.ufsc.labsec.signature.signer.a3.PSCHelper
All Implemented Interfaces:
CertificateInformation, InformationSigner, RemoteKeyStore

public class PSCHelper
extends Object
implements RemoteKeyStore
  • Field Details

  • Constructor Details

    • PSCHelper

      public PSCHelper​(String psc)
      Seleciona qual PSC deve ser utilizado para gerar a assinatura
      Parameters:
      psc - String representando o Prestador de Serviço de Confiança a ser utilizado para a assinatura
  • Method Details

    • sign

      public byte[] sign​(byte[] data, String signatureSuite) throws SignerException
      Pede para o PSC realizar uma assinatura RAW
      Specified by:
      sign in interface InformationSigner
      Parameters:
      data - Informação para ser assinada
      signatureSuite - OID da suite de assinatura
      Returns:
      Bytes da assinatura
      Throws:
      SignerException - Algum erro desconhecido ao tentar realizar a assinatura
    • getCertificate

      public X509Certificate getCertificate() throws CertificateException
      Resgata o certificado do usuário
      Specified by:
      getCertificate in interface CertificateInformation
      Returns:
      o certificado do usuário
      Throws:
      CertificateException
    • getCert

      protected String getCert​(String accessToken) throws PscException
      Solicita ao servidor do PSC para que retorne o certificado do assinante, através de uma requisição GET. As requisições e suas respostas são regulamentadas no DOC-ICP-17, disponível em link
      Parameters:
      accessToken - Token de autenticação com o servidor.
      Returns:
      String JSON encapsulando o certificado armazenado pelo PSC.
      Throws:
      PscException - Caso ocorra algum erro na comunicação com o PSC
    • postAccessToken

      protected String postAccessToken​(String code) throws PscException
      Solicita ao servidor do PSC, através de uma requição POST, para que retorne o token de acesso, que será utilizado para as próximas requisições. As requisições e suas respostas são regulamentadas no DOC-ICP-17, disponível em link
      Parameters:
      code - Código de autorização gerado pelo PSC
      Returns:
      Access Token gerado
      Throws:
      PscException - Quando ocorre falha na requisição
    • parseAccessTokenJSON

      protected String parseAccessTokenJSON​(String jsonData)
      Lê o retorno JSON do método postAccessToken() e obtém o Access Token
      Parameters:
      jsonData - Dados retornados por postAccessToken()
      Returns:
      Access Token
      See Also:
      postAccessToken(String)
    • parseSigJSON

      protected String parseSigJSON​(String jsonData)
      Lê o retorno JSON do método postSignature() e obtém os bytes de assinatura.
      Parameters:
      jsonData - Dados retornados por postSignature()
      Returns:
      Bytes de assinatura em base hexadecimal
    • parseCertJSON

      protected String parseCertJSON​(String jsonData)
      Lê o retorno JSON do método postCert() e obtém os bytes do certificado.
      Parameters:
      jsonData - Dados retornados por postCert()
      Returns:
      Bytes do certificado em base hexadecimal
      See Also:
      getCert(String)
    • createCodeChallenge

      public static String createCodeChallenge​(String verifier) throws UnsupportedEncodingException, NoSuchAlgorithmException
      Cria o challenge, que é o hash do verifier(uma string aleatória)
      Parameters:
      verifier - A String que será hasheada e usada para verificação
      Returns:
      O challenge em forma de String
      Throws:
      UnsupportedEncodingException
      NoSuchAlgorithmException
      See Also:
      RFC7636
    • createCodeVerifier

      public static String createCodeVerifier()
      Cria o code verifier(uma string aleatória)
      Returns:
      O challenge em forma de String
      See Also:
      RFC7636
    • createState

      public static String createState​(int size)
      Gera um valor opaco usado pela aplicação para manter o estado entre a requisição e a resposta. O serviço de autorização incluirá este valor ao redirecionar o módulo do usuário de volta ao endereço da aplicação. Este parâmetro deverá ser usado para prevenir ataques de falsificação de requisições entre sites (cross-site request forgery).
      Parameters:
      size - O tamanho do state. Valor recomendado: 15
      Returns:
      O State
    • setState

      public void setState​(String state)
    • setVerifier

      public void setVerifier​(String verifier)
    • generateAuthURL

      public String generateAuthURL​(String verifier, String state, PSC.SignatureScope scope) throws URISyntaxException
      Cria a URL que será utilizada na requisição para obter autorização do usuário
      Parameters:
      verifier - Correspondendo ao code_challenge enviado na Requisição de Código de Autorização
      state - Um valor opaco usado pela aplicação para manter o estado entre a requisição e a resposta. O serviço de autorização incluirá este valor ao redirecionar o módulo do usuário de volta ao endereço da aplicação. Este parâmetro deverá ser usado para prevenir ataques de falsificação de requisições entre sites (cross-site request forgery).
      scope - O tipo de autorização que será dada
      Returns:
      A URL com o payload
      Throws:
      URISyntaxException
      See Also:
      RFC7636
    • getAccessTokenParameters

      public String getAccessTokenParameters​(String code)
      Cria a URL que será utilizada na requisição para obter um token, que da acesso ao certificado digital do usuário por um determinado tempo
      Parameters:
      code - Código de autorização gerado pelo PSC
      Returns:
      A URL com o payload
    • createSignatureRequestBody

      public String createSignatureRequestBody​(String hash, String hash_alg_OID, String alias)
      Retorna o formulario JSON com o hash para ser assinado
      Parameters:
      hash - Hash dos dados a serem assinado
      hash_alg_OID - O OID em forma de string do algoritmo de hash
      alias - O alias legível para o conteudo a ser assinado
      Returns:
      A URL com o payload
    • generateAccessToken

      public void generateAccessToken​(String code) throws PscException
      Função pública para métodos externos solicitarem um Access Token. Utiliza métodos internos para montar a requisição POST e fazer o parsing do resultado obtido.
      Parameters:
      code - Código de autorização gerado pelo PSC
      Throws:
      PscException - Caso a requisição POST falhe.
    • getToken

      public String getToken()
    • setToken

      public void setToken​(String token)
    • getState

      public String getState()