Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
Composition Setup
import.css=/download/attachments/6062824/tecnologia.css
Portuguese

Pagetitle
PrivVeryRSA
PrivVeryRSA

Verifica

...

um determinado conteúdo assinado, usando a chave pública.

Sintaxe

language
Bloco de código
cpp
collapsefalse
PrivVeryRSA( < 
cPathKey
cKeyOrPathKey >, < 
cHash
cContent >, < nTipo >, < cAssinatura >, [ @cErrStr ], [ nPad ] )
--> lRet

Parâmetros

Nome

Tipo

Descrição

Obrigatório

Referência

...

cKeyOrPathKey

caractere

Indica a string que contém o caminho

...

para a chave

...

privada (formato .PEM) ou o conteúdo do arquivo.

...

X

...


cContent

caractere

Indica o valor

...

que será verificado, com um conteúdo já assinado.

X


nTipo

numérico

Indica o tipo de algoritmo

...

que será utilizado para verificar a assinatura.

X


cAssinatura

caractere

...

Indica uma string que contém o valor da assinatura gerada mediante a aplicação da chave privada criptografada.

X


cErrStr

caractere

Indica a variável para retornar as mensagens de erro.


X

nPad

numérico

Indica o tipo de schema de criptografia que será utilizado.



Retorno

Nome

Tipo

Descrição

lRet

...

bloco de código

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.).

Informações
icontrue
titleObservações
Nota
icontrue
titleAtenção

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.

a assinatura informada corresponde ao Hash Criptográfico informado e se ela foi gerada pela chave privada correspondente à chave pública informada. Caso a o Hash Criptográfico tenha sido alterado, ou a assinatura tenha sido alterada, ou não seja compatível com a chave pública informada, a função retorna .F. 

Observações

  • 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 cPathKey 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 nTipo:

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

  • Caso não seja passado nenhum schema de criptografia (nPad), a rotina assume com padrão o schema 1 - PKCS1.
  • O valor 5 e 6 no parâmetro nTipo estão disponíveis em builds superiores a 121227P.

  • Caso seja informado no parâmetro cPathKey caminho de arquivos no client, será adicionado ao parâmetro cErrStr a mensagem "[PrivVeryRSA] Only server path are allowed." e retornará Nil.
  • Exemplos

    title
    Bloco de código
    languagecpp
    themeEclipse
    Exemplo 1
    linenumberstrue
    collapsefalse
    User Function 
    RSA_Very
    RSAVeryPath()
      Local sPrivKeyPath := "private.pem"
      Local sPubKeyPath := "public.pem"
      Local sStr := "01234567890123456789"
    
      Local cMD5 := ''
      Local sSign := ""
      // 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( 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)
      
    "private.pem"
    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( 
    "public.pem"
    sPubKey, cMD5, 1, sSign )
        conout('Signature Check OK')
      Else
        conout('Signature Check FAILED')
      Endif
    Return
    
    

    Abrangência

    Advanced Protheus 7.10, Microsiga Protheus 8.11, Protheus 10, TOTVS Application Server 10

    Veja também