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 Summary
-
Constructor Summary
-
Method Summary
Modifier and Type Method Description static String
createCodeChallenge(String verifier)
Cria o challenge, que é o hash do verifier(uma string aleatória)static String
createCodeVerifier()
Cria o code verifier(uma string aleatória)String
createSignatureRequestBody(String hash, String hash_alg_OID, String alias)
Retorna o formulario JSON com o hash para ser assinadostatic String
createState(int size)
Gera um valor opaco usado pela aplicação para manter o estado entre a requisição e a resposta.void
generateAccessToken(String code)
Função pública para métodos externos solicitarem um Access Token.String
generateAuthURL(String verifier, String state, PSC.SignatureScope scope)
Cria a URL que será utilizada na requisição para obter autorização do usuárioString
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 tempoprotected String
getCert(String accessToken)
Solicita ao servidor do PSC para que retorne o certificado do assinante, através de uma requisição GET.X509Certificate
getCertificate()
Resgata o certificado do usuárioString
getState()
String
getToken()
protected String
parseAccessTokenJSON(String jsonData)
Lê o retorno JSON do método postAccessToken() e obtém o Access Tokenprotected String
parseCertJSON(String jsonData)
Lê o retorno JSON do método postCert() e obtém os bytes do certificado.protected String
parseSigJSON(String jsonData)
Lê o retorno JSON do método postSignature() e obtém os bytes de assinatura.protected String
postAccessToken(String code)
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.void
setState(String state)
void
setToken(String token)
void
setVerifier(String verifier)
byte[]
sign(byte[] data, String signatureSuite)
Pede para o PSC realizar uma assinatura RAW
-
Field Details
-
psc
-
token
-
state
-
verifier
-
scope
-
-
Constructor Details
-
PSCHelper
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
Pede para o PSC realizar uma assinatura RAW- Specified by:
sign
in interfaceInformationSigner
- Parameters:
data
- Informação para ser assinadasignatureSuite
- OID da suite de assinatura- Returns:
- Bytes da assinatura
- Throws:
SignerException
- Algum erro desconhecido ao tentar realizar a assinatura
-
getCertificate
Resgata o certificado do usuário- Specified by:
getCertificate
in interfaceCertificateInformation
- Returns:
- o certificado do usuário
- Throws:
CertificateException
-
getCert
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
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
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
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
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, NoSuchAlgorithmExceptionCria 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
Cria o code verifier(uma string aleatória)- Returns:
- O challenge em forma de String
- See Also:
- RFC7636
-
createState
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
-
setVerifier
-
generateAuthURL
public String generateAuthURL(String verifier, String state, PSC.SignatureScope scope) throws URISyntaxExceptionCria 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çãostate
- 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
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
Retorna o formulario JSON com o hash para ser assinado- Parameters:
hash
- Hash dos dados a serem assinadohash_alg_OID
- O OID em forma de string do algoritmo de hashalias
- O alias legível para o conteudo a ser assinado- Returns:
- A URL com o payload
-
generateAccessToken
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
-
setToken
-
getState
-