Assina um determinado conteúdo usando chave privada.
Sintaxe
PrivSignRSA( < cKeyOrPathKey >, < cContent >, < nType >, < cSenha >, [ @cErrStr ], [ nPad ] )
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 a string que será assinada. | X | |
nType | numeric | Indica o tipo de algoritmo que será utilizado para realizar a assinatura da chave. | X | |
cSenha | character | Indica uma string que contém o valor da senha usada na geraçã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 |
---|---|---|
cRet | character | Retorna o valor do parâmetro cContent, assinado, de acordo com o tipo nType e a chave privada informada cPathKey. |
Observações
Atençã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.
Aviso
Essa função utiliza a chave privada para realizar a assinatura. Para isso, é necessário informar o caminho (path) da chave privada (formato .PEM), ou seu conteúdo, no parâmetro cKeyOrPathKey e, em seguida, o Hash Criptoráfico cHash que se deseja assinar e o tipo de Hash Criptográfico informado. O Hash Criptográfico a ser assinado deve ser gerado sobre o conteúdo antes de chamar esta função.
O arquivo (no formato .PEM) informado no parâmetro cKeyOrPathKey deve ser ou conter uma chave privada, tais como:
Chave Privada |
Certificado |
CA (Certificate Authority) |
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 |
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 builds superiores a 121227P.
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 "[PrivSignRSA] Only server path or private key content are allowed." e retornará Nil.
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.
Exemplos
User Function RSASignPath() Local sPrivKeyPath := "private.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 ) Return User Function RSASignKey() Local sPrivKey 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) // 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 ) Return