Histórico da Página
Composition Setup |
---|
import.css=/download/attachments/327912/newLayout.css |
...
Pagetitle | ||||
---|---|---|---|---|
|
...
Função: PrivVeryRSA
Inclusão de trecho | ||||||
---|---|---|---|---|---|---|
|
Verifica um determinado conteúdo assinado, usando a chave
...
pública.
Sintaxe
Bloco de código | ||
---|---|---|
| ||
PrivVeryRSA( <cPathKey> cKeyOrPathKey >, <cContent> cContent >, <nTipo> nType >, <cAssinado> cAssinatura >, [cErrStr @cErrStr ], [ nPad ] )--> lRet
|
Parâmetros
...
Nome | Tipo | Descrição | Obrigatório | Referência |
---|
...
cKeyOrPathKey |
...
character | Indica a string que contém o caminho |
...
para a chave privada (formato .PEM) ou o conteúdo do arquivo. | X | |
cContent |
...
character | Indica o valor que será verificado, com um conteúdo já assinado. | X |
...
nType |
...
numeric | Indica |
...
o tipo de algoritmo que será utilizado para verificar a assinatura |
...
. | X |
...
cAssinatura |
...
character | Indica uma string que contém o valor |
...
da assinatura gerada mediante a aplicação da chave privada criptografada. | X | |
cErrStr |
...
character | Indica a |
...
variável para retornar as mensagens de erro. | X | |
nPad |
...
numeric | Indica o tipo de schema de criptografia que será utilizado. |
...
Retorno
...
Nome | Tipo | Descrição |
---|---|---|
lRet | logical | Retorna verdadeiro (.T.) |
...
se o valor informado |
...
no parâmetro |
...
cContent está de acordo com o valor enviado que foi assinado |
...
pelo tipo |
...
nTipo e a chave informada |
...
cPathKey. Caso contrário, falso (.F.). |
Observações
Nota | ||||
---|---|---|---|---|
| ||||
A funcionalidade de uso da chave ao invés do path está disponível apenas em versões iguais ou superiores a 17.3.0.18. |
Essa função utiliza uma chave pública para verificar a assinatura. A chave pública correta para a validação deve ser gerada a partir da chave privada usada para realizar a assinatura, e deve ser fornecida pelo agente que gerou a assinatura. Para isso, é necessário informar o caminho (path) da chave pública
...
no parâmetro
...
cKeyOrPathKey, ou seu conteúdo, e, em seguida, o conteúdo
...
cHash a ser validado, o tipo do Hash Criptográfico informado e a assinatura a ser verificada.
Tipo de algoritmo válido para o parâmetro nType:
...
Valor | Algoritmo |
---|
...
1 |
...
MD5 |
...
2 |
...
SHA1 |
...
3 |
...
RIPEMD160 |
...
4 | MD5_ |
...
SHA1 | |
5 | SHA256WithRSA |
6 | SHA256 |
...
Tipo
...
de schema válido para o parâmetro nPad:
Valor | Schema |
---|
...
1 | PKCS1 |
...
2 | SSL |
...
3 | NO |
...
4 | PKCS1_OAEP |
5 | X931 |
Valor | Schema |
---|---|
1 | PKCS1 |
2 | SSL |
3 | NO |
4 | PKCS1_OAEP |
5 | X931 |
...
Caso não seja passado nenhum schema de criptografia (nPad), a
...
função assume
...
com padrão o schema 1 - PKCS1.
Os valores 5 e 6 no parâmetro nType estão disponíveis em versões superiores a 13.2.3.0.
Caso seja informado no parâmetro cKeyOrPathKey um caminho de arquivos no client ou não tenha o conteúdo de uma chave privada, será adicionado ao parâmetro cErrStr a mensagem "[PrivVeryRSA] Only server path or private key content are allowed." e retornará Nil.
Se forem passados valores inválidos no parâmetro nType, o programa será finalizado com a mensagem de erro fatal "Invalid hash algorithm".
Em caso de erro abrir o arquivo informado no parâmetro cKeyOrPathKey, será adicionado ao parâmetro cErrStr a mensagem "Fail open PEM file.".
Em caso de erro na leitura do arquivo informado no parâmetro cKeyOrPathKey, será adicionado ao parâmetro cErrStr a mensagem "Fail read RSAPublicKey.".
Se houver erro no processamento da assinatura, será adicionado ao parâmetro cErrStr a mensagem "Fail execute RSA verify.".
A partir da versão 20.3.3.0 o algoritmo SHA256WithRSA (valor 5 de nType) e o schema SSL (valor 2 de nPad) serão inválidos.
Em builds iguais ou superiores a 24.3.0.0 essa função é obsoleta.
Exemplos
Bloco de código | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
User Function RSA_SignRSAVeryPath() Local sPrivKeyPath := "private.pem" Local sPubKeyPath := "public.pem" Local sStr :=' "01234567890123456789' " LocalsOut cMD5 := '' Local sSign := "" // Conteudo a ser assinado varinfo( "sStr", sStr ) // Hash MD5 gerado a partir desse conteudo cMD5 := Md5( sStr ) varinfo('1' "cMD5",sStr ) sOut cMD5 ) // Assinatura gerada a partir do Hash MD5 usando a chave privada sSign := PrivSignRSA('private.pem', sStr, 1, 'assinatura' ) varinfo( 'sOut', sOut ) conout( PrivVeryRSA( 'public.pem', sStr, 1, sOut ) )Return Advanced Protheus 7.10 , Microsiga Protheus 8.11 , Protheus 10 , TOTVS Application Server 10 sPrivKeyPath, cMD5, 1, "senhachaveprivada" )
varinfo( "sSign", sSign )
// Verificando a assinatura usando a chave pública
If PrivVeryRSA( sPubKeyPath, cMD5, 1, sSign )
conout('Signature Check OK')
Else
conout('Signature Check FAILED')
Endif
Return
User Function RSAVeryKey()
Local sPrivKey
Local sPubKey
Local sStr := "01234567890123456789"
Local cMD5 := ''
Local sSign := ""
sPrivKey := "-----BEGIN PRIVATE KEY-----" + chr(10)
sPrivKey += "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAJSn+hXW9Zzz9ORB" + chr(10)
sPrivKey += "KIC9Oi6wzM4zhqwHaKW2vZAqjOeLlpUW7zXwyk4tkivwsydPNaWUm+9oDlEAB2ls" + chr(10)
sPrivKey += "QJv7jwWNsF7SGx5R03kenC+cf8Nbxlxwa+Tncjo6uruEsK/Vke244KiSCHP8BOuH" + chr(10)
sPrivKey += "I+r5CS0x9edFLgesoYlPPFoJxTs5AgMBAAECgYBL/6iiO7hr2mjrvMgZMSSqtCaw" + chr(10)
sPrivKey += "kLUcA9mjRs6ZArfwtHNymzwGZqj22ONu5WqiASPbGCO0fI09KfegFQDe/fe6wnpi" + chr(10)
sPrivKey += "rBWtawLoXCZmGrwC+x/3iqbiGJMd7UB3FaZkZOzV5Jhzomc8inSJWMcR+ywiUY37" + chr(10)
sPrivKey += "stfVDqR1sJ/jzZ1OdQJBAO8vCa2OVQBJbzjMvk8Sc0KiuVwnyqMYqVty6vYuufe9" + chr(10)
sPrivKey += "ILJfhwhYzE82wIa9LYg7UK2bPvKyyehuFfqI5oU5lU8CQQCfG5LA3gp3D1mS7xxz" + chr(10)
sPrivKey += "tqJ+cm4SPO4R6YzVybAZKqKUvTFSKNV57Kp/LL7WjtUUNr+dY+aYRlKo81Hq61y8" + chr(10)
sPrivKey += "tBT3AkAjJyak+2ZCxIg0MONHe8603HWhtbdygQ1jA2DFDdkHMCS+EowmDeb5PXLO" + chr(10)
sPrivKey += "Wr92ZkFVQpvdz6kdIBDa4YP/0JbBAkBVHLjqd1z9x7ZRBZwgwkg2gBwloXZxGpB+" + chr(10)
sPrivKey += "JMARFl+WVYa2vqVD7bhfA56qxAl0IL1sAm7ucl/xhQgDNRiM0YCNAkEAqySTBx2H" + chr(10)
sPrivKey += "O9VyzuWWbf7BYTNsxfO80GaRkZGENfqO1QgnhT1FMeK+ox7Kbi+nSaCBoPjNzyrM" + chr(10)
sPrivKey += "bU08M6nSnkDEGA==" + chr(10)
sPrivKey += "-----END PRIVATE KEY-----" + chr(10)
sPubKey := "-----BEGIN PUBLIC KEY-----" + chr(10)
sPubKey += "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCUp/oV1vWc8/TkQSiAvTousMzO" + chr(10)
sPubKey += "M4asB2iltr2QKozni5aVFu818MpOLZIr8LMnTzWllJvvaA5RAAdpbECb+48FjbBe" + chr(10)
sPubKey += "0hseUdN5HpwvnH/DW8ZccGvk53I6Orq7hLCv1ZHtuOCokghz/ATrhyPq+QktMfXn" + chr(10)
sPubKey += "RS4HrKGJTzxaCcU7OQIDAQAB" + chr(10)
sPubKey += "-----END PUBLIC KEY-----" + chr(10)
// Conteudo a ser assinado
varinfo( "sStr", sStr )
// Hash MD5 gerado a partir desse conteudo
cMD5 := Md5( sStr )
varinfo( "cMD5", cMD5 )
// Assinatura gerada a partir do Hash MD5 usando a chave privada
sSign := PrivSignRSA( sPrivKey, cMD5, 1, "senhachaveprivada" )
varinfo( "sSign", sSign )
// Verificando a assinatura usando a chave pública
If PrivVeryRSA( sPubKey, cMD5, 1, sSign )
conout('Signature Check OK')
Else
conout('Signature Check FAILED')
Endif
Return
|