API .NET
HSM Dinamo
Carregando...
Procurando...
Nenhuma entrada encontrado
Criptografia

Descrição detalhada

Operações de hash de criptogragia simétrica e assimétrica.

Funções

void Encrypt (IntPtr hKey, bool Final, byte[] byData, ref int DataLen, int BufferLen)
 Encrypt blocos ou arquivos passando a referencia da chave. Utiliza o mode/padding default, ou seja, MODE CBC e padding PKCS#5.
 
void Encrypt (String strKeyId, byte[] byData)
 Encripta um bloco no modo ECB sem nenhum Padding. Essa funcao e util para PIN BLOCK. Tamanho do array de dados precisa ser compativel com o tipo de chave.
 
byte[] EncryptDefault (String strKeyId, byte[] byData)
 Encripta um bloco utilizando a parametrização padrão do HSM.
 
void Encrypt (string strKeyId, IntPtr hHash, bool Final, byte[] iv, MODE_TYPE mode, PADDING_TYPE padding, byte[] byData, ref int DataLen, int BufferLen)
 Encripta um hash, dado geral ou um arquivo.
 
void Encrypt (IntPtr hKey, IntPtr hHash, bool Final, int dwFlags, byte[] iv, MODE_TYPE mode, PADDING_TYPE padding, byte[] byData, ref int DataLen, int BufferLen)
 Encripta um hash, dado geral ou um arquivo.
 
void EncryptDefault (IntPtr hKey, IntPtr hHash, bool Final, int dwFlags, byte[] iv, byte[] byData, ref int DataLen, int BufferLen)
 Encripta utilizando a parametrização padrão do HSM.
 
int GetEncryptBuffLen (IntPtr hKey, IntPtr hHash, int DataLen)
 Retorna o tamanho do buffer de criptografia.
 
byte[] KEKEncode (String strKeyId, byte[] byKey)
 Codifica uma chave simetrica que está fora do HSM usando uma RSA dentro do HSM.
 
byte[] KEKDecode (String strKeyId, byte[] byKey)
 Decodifica uma chave simétrica que está fora do HSM usando uma RSA dentro do HSM.
 
void Decrypt (string strKeyId, IntPtr hHash, bool Final, byte[] byData, ref int DataLen)
 Decripta um hash, dado geral ou um arquivo.
 
void Decrypt (IntPtr hKey, IntPtr hHash, bool Final, byte[] byData, ref int DataLen)
 Decripta um hash, dado geral ou um arquivo.
 
void Decrypt (string strKeyId, byte[] byData)
 Decripta um bloco no modo ECB sem nenhum Padding. Essa funcao e util para PIN BLOCK. Tamanho do array de dados precisa ser compativel com o tipo de chave.
 
byte[] DecryptDefault (string strKeyId, byte[] byData)
 Decripta um bloco utilizando a parametrização padrão do HSM.
 
void Decrypt (string strKeyId, IntPtr hHash, bool Final, byte[] iv, MODE_TYPE mode, PADDING_TYPE padding, byte[] byData, ref int DataLen)
 Decripta um hash, dado geral ou um arquivo.
 
void Decrypt (IntPtr hKey, IntPtr hHash, bool Final, int dwFlags, byte[] iv, MODE_TYPE mode, PADDING_TYPE padding, byte[] byData, ref int DataLen)
 Decripta um hash, dado geral ou um arquivo.
 
void DecryptDefault (IntPtr hKey, IntPtr hHash, bool Final, int dwFlags, byte[] iv, byte[] byData, ref int DataLen)
 Decripta utilizando a parametrização padrão do HSM.
 
IntPtr CreateHash (HASH_ALG AlgId)
 Cria um handle para um hash.
 
byte[] generateHash (HASH_ALG AlgId, byte[] Data, int Flags)
 Gera um HASH em apenas uma chamada.
 
byte[] generateHash (HASH_ALG AlgId, byte[] Data)
 Gera um HASH em apenas uma chamada.
 
byte[] generateMAC (HASH_ALG AlgId, String KeyId, byte[] Data, int Flags)
 Gera um MAC em apenas uma chamada.
 
byte[] generateMAC (HASH_ALG AlgId, String KeyId, byte[] Data)
 Gera um MAC em apenas uma chamada.
 
void initMAC (HASH_ALG AlgId, String KeyId, int Flags)
 Inicializa uma operação MAC por partes. Deve ser finalizada com endMAC.
 
void initMAC (HASH_ALG AlgId, String KeyId)
 Inicializa uma operação MAC por partes. Deve ser finalizada com endMAC.
 
void updateMAC (byte[] Data)
 Atualiza uma operação de MAC com mais dados.
 
byte[] endMAC ()
 Finaliza uma operação de MAC.
 
void initHash (HASH_ALG AlgId, int Flags)
 Inicializa uma operação HASH por partes. Deve ser finalizada com endHash.
 
void initHash (HASH_ALG AlgId)
 Inicializa uma operação HASH por partes. Deve ser finalizada com endHash.
 
void updateHash (byte[] Data)
 Atualiza uma operação de HASH com mais dados.
 
byte[] endHash ()
 Finaliza uma operação de HASH.
 
void HashData (IntPtr hHash, byte[] byData)
 Encontra o hash para um dado e o associa ao handle de hash.
 
byte[] Hash (HASH_ALG alg, byte[] data)
 Retorna o hash de um dado.
 
void DestroyHash (IntPtr hHash)
 Libera o handle do recurso de hash.
 
void BatchSign (string strKeyId, byte[] pbBlock, Int32 dwBlockCount, Int32 dwFlags)
 Envia um lote de blocos para assinatura no HSM.
 
void BatchSign (IntPtr hPrivateKey, byte[] pbBlock, Int32 dwBlockCount, Int32 dwFlags)
 Envia um lote de blocos para assinatura no HSM.
 
byte[] SignHash (String keyId, byte[] bHash, DinamoClient.HASH_ALG algHash)
 Assina um hash.
 
byte[] SignHash (String keyId, byte[] bHash, DinamoClient.HASH_ALG algHash, Int32 dwFlags)
 Assina um hash.
 
byte[] SignHash (String keyId, IntPtr pHash, DinamoClient.HASH_ALG algHash)
 
byte[] SignHash (IntPtr hPrivateKey, IntPtr hHash)
 Assina um hash.
 
byte[] SignHash (IntPtr hPrivateKey, IntPtr hHash, int dwFlags)
 Assina um hash.
 
bool VerifySignature (IntPtr hHash, IntPtr hPublicKey, byte[] bySignature)
 Verifica uma assinatura.
 
void SetHashValue (IntPtr hHash, byte[] Value)
 Armazena um hash.
 
byte[] GetHashValue (IntPtr hHash)
 Retorna o valor do hash.
 
byte[] GetRandom (Int32 dwReturnLen)
 Retorna um número aleatório do gerador do HSM.
 
DinamoApi.DN_M_OF_N_SPLIT_INFO MofNSplit (byte bM, byte bN, byte[] pbSecret)
 Faz a divisão M de N de um segredo. De acordo com o padrão de compartilhamento de segredos de Shamir.
 
byte[] MofNRecover (DinamoApi.DN_M_OF_N_PART[] parts)
 Reconstrói o segredo M de N a partir das partes dos custodiantes. De acordo com o padrão de compartilhamento de segredos de Shamir.
 

Funções

◆ Encrypt() [1/4]

void Encrypt ( IntPtr hKey,
bool Final,
byte[] byData,
ref int DataLen,
int BufferLen )
inline

Encrypt blocos ou arquivos passando a referencia da chave. Utiliza o mode/padding default, ou seja, MODE CBC e padding PKCS#5.

Parâmetros
hKeyHandle da chave
FinalIndica se o bloco é o último
byDataDados a serem criptografados. Quando a função retorna, os dados originais são sobrescritos pelo resultado da operação de criptografia. O tamanho buffer é especificado pelo parâmetro dwBufLen, o número de bytes a serem processados é especificado pelo parâmetro pdwDataLen. O tamanho do buffer deve ser grande o suficiente para conter os dados criptografados mais o padding.
DataLenTamanho do bloco.Quando parâmetro de entrada, contém o número de bytes que serão processados, quando parâmetro de saída, contém o número de bytes dos dados criptografados.Se o buffer alocado não for suficiente para receber todo o dado cifrado (faltar, por exemplo, espaço para o padding) a função irá falhar retornando D_MORE_DATA.
BufferLenTamanho do buffer.Para operações simétricas que exijam padding o buffer deve ter o tamanho mínimo do comprimento do dado mais o tamanho do bloco de operação do algoritmo a ser utilizado.
Exceções
DinamoExceptionLança exceção em caso de erro.
Exemplos
enc_dec.cs e rsa_enc_dec.cs.

◆ Encrypt() [2/4]

void Encrypt ( String strKeyId,
byte[] byData )
inline

Encripta um bloco no modo ECB sem nenhum Padding. Essa funcao e util para PIN BLOCK. Tamanho do array de dados precisa ser compativel com o tipo de chave.

Parâmetros
strKeyIdReferencia da chave
byDataDados a serem criptografados. Quando a função retorna, os dados originais são sobrescritos pelo resultado da operação de criptografia. O tamanho buffer é especificado pelo parâmetro dwBufLen, o número de bytes a serem processados é especificado pelo parâmetro pdwDataLen. O tamanho do buffer deve ser grande o suficiente para conter os dados criptografados mais o padding.
Exceções
DinamoExceptionLança exceção em caso de erro.

◆ EncryptDefault() [1/2]

byte[] EncryptDefault ( String strKeyId,
byte[] byData )
inline

Encripta um bloco utilizando a parametrização padrão do HSM.

Para chaves simétricas: MODE_CBC: Cipher Block Chain (CBC) PKCS5_PADDING: O padding é feito seguindo o padrão definido no PKCS#5. IV: Preenchido com zeros.

Para chaves assimétricas RSA: PKCS1_PADDING: É utilizado o padding PKCS#1 v1.5.

Parâmetros
strKeyIdReferencia da chave
byDataDados a serem criptografados.
Retorna
Os dados encriptados.
Exceções
DinamoExceptionLança exceção em caso de erro.

◆ Encrypt() [3/4]

void Encrypt ( string strKeyId,
IntPtr hHash,
bool Final,
byte[] iv,
MODE_TYPE mode,
PADDING_TYPE padding,
byte[] byData,
ref int DataLen,
int BufferLen )
inline

Encripta um hash, dado geral ou um arquivo.

Parâmetros
strKeyIdReferencia da chave
hHashPonteiro para um hash
FinalIndica se o bloco é o último
ivVetor de inicialização usado com algoritmos de bloco de acordo com o seu modo de operação de criptografia simétrica. O tamanho do vetor de inicialização depende do algoritmo simétrico utilizado, já que tem o mesmo comprimento do bloco de operação. Mais detalhes na sessão Observações. Válido apenas para chaves simétricas.
modeIndica o modo de operação de criptografia do algoritmo de bloco.
Valor Significado
MODE_NONE Não define o modo de operação. Caso o algoritmo suporte modo de operação, o padrão MODE_CBC será utilizado. Para chaves assimétricas passar esta flag.
MODE_ECB Eletronic Codebook (ECB)
MODE_CBC Cipher Block Chain (CBC)
MODE_OFB Output-Feedback. Ainda não suportada.
Válido apenas para chaves simétricas e algoritmos de bloco.
paddingA biblioteca pode trabalhar com 3 formas de padding simétricos:
Valor Significado
NO_PADDING Não é feito padding, os dados passados para criptografia já deve ter comprimento múltiplo do tamanho do bloco de operação.
PKCS5_PADDING O padding é feito seguindo o padrão definido no PKCS#5.
ZERO_PADDING Caso o comprimento dos dados não seja múltiplo do tamanho do bloco de operação, ele é completado com zeros a direita até que tenha um tamanho suportado pelo algoritmo. Este tipo de padding não deve ser usado com dados onde pode haver bytes com valor zero, pois pode gerar ambigüidade na operação de decriptografia. Caso os dados contenham apenas texto ASCII, por exemplo, não há problema.
Os seguintes valores são aceitos para padding assimétrico.
Valor Significado
NO_RSA_PADDING Para não utilizar padding.
PKCS1_PADDING Utiliza o padding PKCS#1 v1.5 type 2.
byDataDados a serem criptografados. Quando a função retorna, os dados originais são sobrescritos pelo resultado da operação de criptografia. O tamanho buffer é especificado pelo parâmetro dwBufLen, o número de bytes a serem processados é especificado pelo parâmetro pdwDataLen. O tamanho do buffer deve ser grande o suficiente para conter os dados criptografados mais o padding.
DataLenTamanho do bloco.Quando parâmetro de entrada, contém o número de bytes que serão processados, quando parâmetro de saída, contém o número de bytes dos dados criptografados.Se o buffer alocado não for suficiente para receber todo o dado cifrado (faltar, por exemplo, espaço para o padding) a função irá falhar retornando D_MORE_DATA.
BufferLenTamanho do buffer.Para operações simétricas que exijam padding o buffer deve ter o tamanho mínimo do comprimento do dado mais o tamanho do bloco de operação do algoritmo a ser utilizado.
Exceções
DinamoExceptionLança exceção em caso de erro.

◆ Encrypt() [4/4]

void Encrypt ( IntPtr hKey,
IntPtr hHash,
bool Final,
int dwFlags,
byte[] iv,
MODE_TYPE mode,
PADDING_TYPE padding,
byte[] byData,
ref int DataLen,
int BufferLen )
inline

Encripta um hash, dado geral ou um arquivo.

Parâmetros
hKeyContexto da chave
hHashPonteiro para um hash
FinalIndica se o bloco é o último
dwFlagsReservado para uso futuro (deve ser 0).
ivVetor de inicialização usado com algoritmos de bloco de acordo com o seu modo de operação de criptografia simétrica. O tamanho do vetor de inicialização depende do algoritmo simétrico utilizado, já que tem o mesmo comprimento do bloco de operação. Mais detalhes na sessão Observações. Válido apenas para chaves simétricas.
modeIndica o modo de operação de criptografia do algoritmo de bloco.
Valor Significado
MODE_NONE Não define o modo de operação. Caso o algoritmo suporte modo de operação, o padrão MODE_CBC será utilizado. Para chaves assimétricas passar esta flag.
MODE_ECB Eletronic Codebook (ECB)
MODE_CBC Cipher Block Chain (CBC)
MODE_OFB Output-Feedback. Ainda não suportada.
Válido apenas para chaves simétricas e algoritmos de bloco.
paddingA biblioteca pode trabalhar com 3 formas de padding simétricos:
Valor Significado
NO_PADDING Não é feito padding, os dados passados para criptografia já deve ter comprimento múltiplo do tamanho do bloco de operação.
PKCS5_PADDING O padding é feito seguindo o padrão definido no PKCS#5.
ZERO_PADDING Caso o comprimento dos dados não seja múltiplo do tamanho do bloco de operação, ele é completado com zeros a direita até que tenha um tamanho suportado pelo algoritmo. Este tipo de padding não deve ser usado com dados onde pode haver bytes com valor zero, pois pode gerar ambigüidade na operação de decriptografia. Caso os dados contenham apenas texto ASCII, por exemplo, não há problema.
Os seguintes valores são aceitos para padding assimétrico.
Valor Significado
NO_RSA_PADDING Para não utilizar padding.
PKCS1_PADDING Utiliza o padding PKCS#1 v1.5 type 2.
byDataDados a serem criptografados. Quando a função retorna, os dados originais são sobrescritos pelo resultado da operação de criptografia. O tamanho buffer é especificado pelo parâmetro dwBufLen, o número de bytes a serem processados é especificado pelo parâmetro pdwDataLen. O tamanho do buffer deve ser grande o suficiente para conter os dados criptografados mais o padding.
DataLenTamanho do bloco. Quando parâmetro de entrada, contém o número de bytes que serão processados, quando parâmetro de saída, contém o número de bytes dos dados criptografados.Se o buffer alocado não for suficiente para receber todo o dado cifrado (faltar, por exemplo, espaço para o padding) a função irá falhar retornando D_MORE_DATA.
BufferLenTamanho do buffer.Para operações simétricas que exijam padding o buffer deve ter o tamanho mínimo do comprimento do dado mais o tamanho do bloco de operação do algoritmo a ser utilizado.
Exceções
DinamoExceptionLança exceção em caso de erro.
Anotações
Se uma quantidade grande de dados for cifrada, ela pode ser feita em parte, com chamadas subsequentes de DEncrypt. Na última chamada o parâmetro bFinal deve ser passado com valor verdadeiro.
Apenas no último bloco o padding é feito(quando se aplicar), assim, os demais blocos devem ter tamanho condizente com o algoritmo usado.O buffer onde os dados são passados deve ter tamanho suficiente para acondicionar também o padding.
Essa API suporta operações RSA feitas diretamente nesta função. Os dados para serem operados devem ter comprimento igual ou menor que o tamanho da chave menos 11 bytes.Quando utilizada a chave pública para criptografia o padding utilizado é PKCS#1 tipo 2 e no processo de decriptografia, o padding é verificado e retirado. Para operações com a chave privada, utiliza-se o padding PKCS#1 tipo 1. O HSM irá verificar a formatação do padding mesmo quando a operação não tem padding definido como em D_NO_RSA_PADDING. As operações de encriptação e decriptação RSA só são habilitadas em modo não restrito (NRM).

◆ EncryptDefault() [2/2]

void EncryptDefault ( IntPtr hKey,
IntPtr hHash,
bool Final,
int dwFlags,
byte[] iv,
byte[] byData,
ref int DataLen,
int BufferLen )
inline

Encripta utilizando a parametrização padrão do HSM.

Para chaves simétricas: MODE_CBC: Cipher Block Chain (CBC) PKCS5_PADDING: O padding é feito seguindo o padrão definido no PKCS#5.

Para chaves assimétricas RSA: PKCS1_PADDING: É utilizado o padding PKCS#1 v1.5.

Parâmetros
hKeyContexto da chave
hHashPonteiro para um hash
FinalIndica se o bloco é o último
dwFlagsReservado para uso futuro (deve ser 0).
ivVetor de inicialização usado com algoritmos de bloco de acordo com o seu modo de operação de criptografia simétrica. O tamanho do vetor de inicialização depende do algoritmo simétrico utilizado, já que tem o mesmo comprimento do bloco de operação. Mais detalhes na sessão Observações. Válido apenas para chaves simétricas. Caso seja passado null, será utilizado o IV preenchido com zeros.
byDataDados a serem criptografados. Quando a função retorna, os dados originais são sobrescritos pelo resultado da operação de criptografia. O tamanho buffer é especificado pelo parâmetro dwBufLen, o número de bytes a serem processados é especificado pelo parâmetro pdwDataLen. O tamanho do buffer deve ser grande o suficiente para conter os dados criptografados mais o padding.
DataLenTamanho do bloco. Quando parâmetro de entrada, contém o número de bytes que serão processados, quando parâmetro de saída, contém o número de bytes dos dados criptografados.Se o buffer alocado não for suficiente para receber todo o dado cifrado (faltar, por exemplo, espaço para o padding) a função irá falhar retornando D_MORE_DATA.
BufferLenTamanho do buffer.Para operações simétricas que exijam padding o buffer deve ter o tamanho mínimo do comprimento do dado mais o tamanho do bloco de operação do algoritmo a ser utilizado.
Exceções
DinamoExceptionLança exceção em caso de erro.

◆ GetEncryptBuffLen()

int GetEncryptBuffLen ( IntPtr hKey,
IntPtr hHash,
int DataLen )
inline

Retorna o tamanho do buffer de criptografia.

Parâmetros
hKeyContexto da chave
hHashPonteiro para um hash
DataLenTamanho do dado a ser criptografado
Retorna
Tamanho do buffer de criptografia
Exceções
DinamoExceptionLança exceção em caso de erro.

◆ KEKEncode()

byte[] KEKEncode ( String strKeyId,
byte[] byKey )
inline

Codifica uma chave simetrica que está fora do HSM usando uma RSA dentro do HSM.

Parâmetros
strKeyIdIdentificação da Chave RSA
byKeyConteúdo da chave simétrica
Retorna
Chave simétrica criptografada
Exceções
DinamoExceptionLança exceção em caso de erro.

◆ KEKDecode()

byte[] KEKDecode ( String strKeyId,
byte[] byKey )
inline

Decodifica uma chave simétrica que está fora do HSM usando uma RSA dentro do HSM.

Parâmetros
strKeyIdIdentificação da Chave RSA
byKeyConteúdo da chave simétrica criptografada
Exceções
DinamoExceptionLança exceção em caso de erro.

◆ Decrypt() [1/5]

void Decrypt ( string strKeyId,
IntPtr hHash,
bool Final,
byte[] byData,
ref int DataLen )
inline

Decripta um hash, dado geral ou um arquivo.

Parâmetros
strKeyIdReferencia da chave
hHashPonteiro para um hash
FinalIndica se o bloco é o último
byDataBuffer que contem os dados a serem decriptografados. Quando a função retorna, os dados originais são sobrescritos pelo resultado da operação de criptografia. Para operações simétricas de bloco, é necessário que o tamanho dos dados seja sempre múltiplo do bloco usado pelo algoritmo em questão.
DataLenRetorna o tamanho dos dados em byData. Quando parâmetro de entrada, contém o número de bytes que serão processados, quando parâmetro de saída, contém o número de bytes dos dados em texto claro.
Exceções
DinamoExceptionLança exceção em caso de erro.
Exemplos
enc_dec.cs e rsa_enc_dec.cs.

◆ Decrypt() [2/5]

void Decrypt ( IntPtr hKey,
IntPtr hHash,
bool Final,
byte[] byData,
ref int DataLen )
inline

Decripta um hash, dado geral ou um arquivo.

Parâmetros
hKeyContexto da chave
hHashPonteiro para um hash
FinalIndica se o bloco é o último
byDataBuffer que contem os dados a serem decriptografados. Quando a função retorna, os dados originais são sobrescritos pelo resultado da operação de criptografia. Para operações simétricas de bloco, é necessário que o tamanho dos dados seja sempre múltiplo do bloco usado pelo algoritmo em questão.
DataLenRetorna o tamanho dos dados em byData. Quando parâmetro de entrada, contém o número de bytes que serão processados, quando parâmetro de saída, contém o número de bytes dos dados em texto claro.
Exceções
DinamoExceptionLança exceção em caso de erro.

◆ Decrypt() [3/5]

void Decrypt ( string strKeyId,
byte[] byData )
inline

Decripta um bloco no modo ECB sem nenhum Padding. Essa funcao e util para PIN BLOCK. Tamanho do array de dados precisa ser compativel com o tipo de chave.

Parâmetros
strKeyIdReferencia da chave
byDataBuffer de dados
Exceções
DinamoExceptionLança exceção em caso de erro.

◆ DecryptDefault() [1/2]

byte[] DecryptDefault ( string strKeyId,
byte[] byData )
inline

Decripta um bloco utilizando a parametrização padrão do HSM.

Para chaves simétricas: MODE_CBC: Cipher Block Chain (CBC) PKCS5_PADDING: O padding é feito seguindo o padrão definido no PKCS#5. IV: Preenchido com zeros.

Para chaves assimétricas RSA: PKCS1_PADDING: É utilizado o padding PKCS#1 v1.5.

Parâmetros
strKeyIdReferencia da chave
byDataBuffer de dados
Retorna
Os dados decriptados.
Exceções
DinamoExceptionLança exceção em caso de erro.

◆ Decrypt() [4/5]

void Decrypt ( string strKeyId,
IntPtr hHash,
bool Final,
byte[] iv,
MODE_TYPE mode,
PADDING_TYPE padding,
byte[] byData,
ref int DataLen )
inline

Decripta um hash, dado geral ou um arquivo.

Parâmetros
strKeyIdReferencia da chave
hHashPonteiro para um hash
FinalIndica se o bloco é o último
ivVetor de inicialização usado com algoritmos de bloco de acordo com o seu modo de operação de criptografia simétrica. O tamanho do vetor de inicialização depende do algoritmo simétrico utilizado, já que tem o mesmo comprimento do bloco de operação. Mais detalhes na sessão Observações. Válido apenas para chaves simétricas.
modeIndica o modo de operação de criptografia do algoritmo de bloco.
Valor Significado
MODE_NONE Não define o modo de operação. Caso o algoritmo suporte modo de operação, o padrão MODE_CBC será utilizado. Para chaves assimétricas passar esta flag.
MODE_ECB Eletronic Codebook (ECB)
MODE_CBC Cipher Block Chain (CBC)
MODE_OFB Output-Feedback. Ainda não suportada.
Válido apenas para chaves simétricas e algoritmos de bloco.
paddingA biblioteca pode trabalhar com 3 formas de padding simétricos:
Valor Significado
NO_PADDING Não é feito padding, os dados passados para criptografia já deve ter comprimento múltiplo do tamanho do bloco de operação.
PKCS5_PADDING O padding é feito seguindo o padrão definido no PKCS#5.
ZERO_PADDING Caso o comprimento dos dados não seja múltiplo do tamanho do bloco de operação, ele é completado com zeros a direita até que tenha um tamanho suportado pelo algoritmo. Este tipo de padding não deve ser usado com dados onde pode haver bytes com valor zero, pois pode gerar ambigüidade na operação de decriptografia. Caso os dados contenham apenas texto ASCII, por exemplo, não há problema.
Os seguintes valores são aceitos para padding assimétrico.
Valor Significado
NO_RSA_PADDING Para não utilizar padding.
PKCS1_PADDING Utiliza o padding PKCS#1 v1.5 type 2.
byDataBuffer que contem os dados a serem decriptografados. Quando a função retorna, os dados originais são sobrescritos pelo resultado da operação de criptografia. Para operações simétricas de bloco, é necessário que o tamanho dos dados seja sempre múltiplo do bloco usado pelo algoritmo em questão.
DataLenRetorna o tamanho dos dados em byData. Quando parâmetro de entrada, contém o número de bytes que serão processados, quando parâmetro de saída, contém o número de bytes dos dados em texto claro.
Exceções
DinamoExceptionLança exceção em caso de erro.
Anotações
Se uma quantidade grande de dados for decifrada, ela pode ser feita em parte, com chamadas subsequentes de Decrypt.Na última chamada o parâmetro bFinal deve ser passado com valor verdadeiro.
Apenas no último bloco o padding é desfeito (quando se aplicar), assim, os demais blocos devem ter tamanho condizentes com algoritmo usado, e se o modo de operação de criptografia simétrica CBC estiver sendo usado, o vetor de incialização será zerado.
Essa API suporta operações RSA feitas diretamente nesta função.Os dados para serem operados devem ter comprimento igual ao tamanho da chave. Quando utilizada a chave pública para criptografia o padding utilizado é PKCS#1 tipo 2 e no processo de decriptografia, o padding é verificado e retirado. Para operações com a chave privada, utiliza-se o padding PKCS#1 tipo 1. O HSM irá verificar a formatação do padding mesmo quando a operação não tem padding definido como em D_NO_RSA_PADDING. As operações de encriptação e decriptação RSA só são habilitadas em modo não restrito (NRM).

◆ Decrypt() [5/5]

void Decrypt ( IntPtr hKey,
IntPtr hHash,
bool Final,
int dwFlags,
byte[] iv,
MODE_TYPE mode,
PADDING_TYPE padding,
byte[] byData,
ref int DataLen )
inline

Decripta um hash, dado geral ou um arquivo.

Parâmetros
hKeyConexto da chave
hHashPonteiro para um hash
FinalIndica se o bloco é o último
dwFlagsReservado para uso futuro (deve ser 0).
ivVetor de inicialização usado com algoritmos de bloco de acordo com o seu modo de operação de criptografia simétrica. O tamanho do vetor de inicialização depende do algoritmo simétrico utilizado, já que tem o mesmo comprimento do bloco de operação. Mais detalhes na sessão Observações. Válido apenas para chaves simétricas.
modeIndica o modo de operação de criptografia do algoritmo de bloco.
Valor Significado
MODE_NONE Não define o modo de operação. Caso o algoritmo suporte modo de operação, o padrão MODE_CBC será utilizado. Para chaves assimétricas passar esta flag.
MODE_ECB Eletronic Codebook (ECB)
MODE_CBC Cipher Block Chain (CBC)
MODE_OFB Output-Feedback. Ainda não suportada.
Válido apenas para chaves simétricas e algoritmos de bloco.
paddingA biblioteca pode trabalhar com 3 formas de padding simétricos:
Valor Significado
NO_PADDING Não é feito padding, os dados passados para criptografia já deve ter comprimento múltiplo do tamanho do bloco de operação.
PKCS5_PADDING O padding é feito seguindo o padrão definido no PKCS#5.
ZERO_PADDING Caso o comprimento dos dados não seja múltiplo do tamanho do bloco de operação, ele é completado com zeros a direita até que tenha um tamanho suportado pelo algoritmo. Este tipo de padding não deve ser usado com dados onde pode haver bytes com valor zero, pois pode gerar ambigüidade na operação de decriptografia. Caso os dados contenham apenas texto ASCII, por exemplo, não há problema.
Os seguintes valores são aceitos para padding assimétrico.
Valor Significado
NO_RSA_PADDING Para não utilizar padding.
PKCS1_PADDING Utiliza o padding PKCS#1 v1.5 type 2.
byDataBuffer que contem os dados a serem decriptografados. Quando a função retorna, os dados originais são sobrescritos pelo resultado da operação de criptografia. Para operações simétricas de bloco, é necessário que o tamanho dos dados seja sempre múltiplo do bloco usado pelo algoritmo em questão.
DataLenRetorna o tamanho dos dados em byData. Quando parâmetro de entrada, contém o número de bytes que serão processados, quando parâmetro de saída, contém o número de bytes dos dados em texto claro.
Exceções
DinamoExceptionLança exceção em caso de erro.
Anotações
Se uma quantidade grande de dados for decifrada, ela pode ser feita em parte, com chamadas subsequentes de Decrypt.Na última chamada o parâmetro bFinal deve ser passado com valor verdadeiro.
Apenas no último bloco o padding é desfeito (quando se aplicar), assim, os demais blocos devem ter tamanho condizentes com algoritmo usado, e se o modo de operação de criptografia simétrica CBC estiver sendo usado, o vetor de incialização será zerado.
Essa API suporta operações RSA feitas diretamente nesta função.Os dados para serem operados devem ter comprimento igual ao tamanho da chave. Quando utilizada a chave pública para criptografia o padding utilizado é PKCS#1 tipo 2 e no processo de decriptografia, o padding é verificado e retirado. Para operações com a chave privada, utiliza-se o padding PKCS#1 tipo 1. O HSM irá verificar a formatação do padding mesmo quando a operação não tem padding definido como em D_NO_RSA_PADDING. As operações de encriptação e decriptação RSA só são habilitadas em modo não restrito (NRM).

◆ DecryptDefault() [2/2]

void DecryptDefault ( IntPtr hKey,
IntPtr hHash,
bool Final,
int dwFlags,
byte[] iv,
byte[] byData,
ref int DataLen )
inline

Decripta utilizando a parametrização padrão do HSM.

Para chaves simétricas: MODE_CBC: Cipher Block Chain (CBC) PKCS5_PADDING: O padding é feito seguindo o padrão definido no PKCS#5.

Para chaves assimétricas RSA: PKCS1_PADDING: É utilizado o padding PKCS#1 v1.5.

Parâmetros
hKeyConexto da chave
hHashPonteiro para um hash
FinalIndica se o bloco é o último
dwFlagsReservado para uso futuro (deve ser 0).
ivVetor de inicialização usado com algoritmos de bloco de acordo com o seu modo de operação de criptografia simétrica. O tamanho do vetor de inicialização depende do algoritmo simétrico utilizado, já que tem o mesmo comprimento do bloco de operação. Mais detalhes na sessão Observações. Válido apenas para chaves simétricas. Caso seja passado null, será utilizado o IV preenchido com zeros.
byDataBuffer que contem os dados a serem decriptografados. Quando a função retorna, os dados originais são sobrescritos pelo resultado da operação de criptografia. Para operações simétricas de bloco, é necessário que o tamanho dos dados seja sempre múltiplo do bloco usado pelo algoritmo em questão.
DataLenRetorna o tamanho dos dados em byData. Quando parâmetro de entrada, contém o número de bytes que serão processados, quando parâmetro de saída, contém o número de bytes dos dados em texto claro.
Exceções
DinamoExceptionLança exceção em caso de erro.

◆ CreateHash()

IntPtr CreateHash ( HASH_ALG AlgId)
inline

Cria um handle para um hash.

Parâmetros
AlgIdAlgoritmo de hash
Retorna
IntPtr Ponteiro para o recurso de hash
Exceções
DinamoExceptionLança exceção em caso de erro.

◆ generateHash() [1/2]

byte[] generateHash ( HASH_ALG AlgId,
byte[] Data,
int Flags )
inline

Gera um HASH em apenas uma chamada.

Parâmetros
AlgIdAlgoritmo de hash
DataMensagem
FlagsDeve ser passado zero
Retorna
HASH gerado
Exceções
DinamoExceptionLança exceção em caso de erro.
Exemplos
generate_hash.cs.

◆ generateHash() [2/2]

byte[] generateHash ( HASH_ALG AlgId,
byte[] Data )
inline

Gera um HASH em apenas uma chamada.

Parâmetros
AlgIdAlgoritmo de hash
DataMensagem
Retorna
HASH gerado
Exceções
DinamoExceptionLança exceção em caso de erro.

◆ generateMAC() [1/2]

byte[] generateMAC ( HASH_ALG AlgId,
String KeyId,
byte[] Data,
int Flags )
inline

Gera um MAC em apenas uma chamada.

Parâmetros
AlgIdAlgoritmo de hash
KeyIdNome da chave MAC
DataMensagem
FlagsDever ser passado zero
Retorna
MAC gerado
Exceções
DinamoExceptionLança exceção em caso de erro.
Exemplos
generate_hmac.cs e generate_hmac_lau.cs.

◆ generateMAC() [2/2]

byte[] generateMAC ( HASH_ALG AlgId,
String KeyId,
byte[] Data )
inline

Gera um MAC em apenas uma chamada.

Parâmetros
AlgIdAlgoritmo de hash
KeyIdNome da chave MAC
DataMensagem
Retorna
MAC gerado
Exceções
DinamoExceptionLança exceção em caso de erro.

◆ initMAC() [1/2]

void initMAC ( HASH_ALG AlgId,
String KeyId,
int Flags )
inline

Inicializa uma operação MAC por partes. Deve ser finalizada com endMAC.

Parâmetros
AlgIdAlgoritmo de hash
KeyIdNome da chave MAC
FlagsDeve ser passado zero
Anotações
A operação por partes DEVE ser inicializada com initMAC, os dados passados com updateMAC e finalizada com endMAC.
updateMAC pode ser chamada uma ou várias vezes até que todo o conteúdo da mensagem seja enviado e logo após endMAC para finalizar a operação e gerar o MAC.
Uma operação de múltiplas partes não pode ser intercalada com outras operações, dentro da mesma sessão, até que ela seja finalizada com endMAC.
Exceções
DinamoExceptionLança exceção em caso de erro.
Exemplos
generate_hmac.cs.

◆ initMAC() [2/2]

void initMAC ( HASH_ALG AlgId,
String KeyId )
inline

Inicializa uma operação MAC por partes. Deve ser finalizada com endMAC.

Parâmetros
AlgIdAlgoritmo de hash
KeyIdNome da chave MAC
Anotações
A operação por partes DEVE ser inicializada com initMAC, os dados passados com updateMAC e finalizada com endMAC.
updateMAC pode ser chamada uma ou várias vezes até que todo o conteúdo da mensagem seja enviado e logo após endMAC para finalizar a operação e gerar o MAC.
Uma operação de múltiplas partes não pode ser intercalada com outras operações, dentro da mesma sessão, até que ela seja finalizada com endMAC.
Exceções
DinamoExceptionLança exceção em caso de erro.

◆ updateMAC()

void updateMAC ( byte[] Data)
inline

Atualiza uma operação de MAC com mais dados.

Parâmetros
DataMensagem
Anotações
A operação por partes DEVE ser inicializada com initMAC, os dados passados com updateMAC e finalizada com endMAC.
updateMAC pode ser chamada uma ou várias vezes até que todo o conteúdo da mensagem seja enviado e logo após endMAC para finalizar a operação e gerar o MAC.
Uma operação de múltiplas partes não pode ser intercalada com outras operações, dentro da mesma sessão, até que ela seja finalizada com endMAC.
Exceções
DinamoExceptionLança exceção em caso de erro.
Exemplos
generate_hmac.cs.

◆ endMAC()

byte[] endMAC ( )
inline

Finaliza uma operação de MAC.

Retorna
MAC gerado
Anotações
A operação por partes DEVE ser inicializada com initMAC, os dados passados com updateMAC e finalizada com endMAC.
updateMAC pode ser chamada uma ou várias vezes até que todo o conteúdo da mensagem seja enviado e logo após endMAC para finalizar a operação e gerar o MAC.
Uma operação de múltiplas partes não pode ser intercalada com outras operações, dentro da mesma sessão, até que ela seja finalizada com endMAC.
Exceções
DinamoExceptionLança exceção em caso de erro.
Exemplos
generate_hash.cs e generate_hmac.cs.

◆ initHash() [1/2]

void initHash ( HASH_ALG AlgId,
int Flags )
inline

Inicializa uma operação HASH por partes. Deve ser finalizada com endHash.

Parâmetros
AlgIdAlgoritmo de hash
FlagsDeve ser passado zero
Anotações
A operação por partes DEVE ser inicializada com initHash, os dados passados com updateHash e finalizada com endHash.
updateHash pode ser chamada uma ou várias vezes até que todo o conteúdo da mensagem seja enviado e logo após endHash para finalizar a operação e gerar o Hash.
Uma operação de múltiplas partes não pode ser intercalada com outras operações, dentro da mesma sessão, até que ela seja finalizada com endHash.
Exceções
DinamoExceptionLança exceção em caso de erro.
Exemplos
generate_hash.cs.

◆ initHash() [2/2]

void initHash ( HASH_ALG AlgId)
inline

Inicializa uma operação HASH por partes. Deve ser finalizada com endHash.

Parâmetros
AlgIdAlgoritmo de hash
Anotações
A operação por partes DEVE ser inicializada com initHash, os dados passados com updateHash e finalizada com endHash.
updateHash pode ser chamada uma ou várias vezes até que todo o conteúdo da mensagem seja enviado e logo após endHash para finalizar a operação e gerar o Hash.
Uma operação de múltiplas partes não pode ser intercalada com outras operações, dentro da mesma sessão, até que ela seja finalizada com endHash.
Exceções
DinamoExceptionLança exceção em caso de erro.

◆ updateHash()

void updateHash ( byte[] Data)
inline

Atualiza uma operação de HASH com mais dados.

Parâmetros
DataMensagem
Anotações
A operação por partes DEVE ser inicializada com initHash, os dados passados com updateHash e finalizada com endHash.
updateHash pode ser chamada uma ou várias vezes até que todo o conteúdo da mensagem seja enviado e logo após endHash para finalizar a operação e gerar o Hash.
Uma operação de múltiplas partes não pode ser intercalada com outras operações, dentro da mesma sessão, até que ela seja finalizada com endHash.
Exceções
DinamoExceptionLança exceção em caso de erro.
Exemplos
generate_hash.cs.

◆ endHash()

byte[] endHash ( )
inline

Finaliza uma operação de HASH.

Retorna
HASH gerado
Anotações
A operação por partes DEVE ser inicializada com initHash, os dados passados com updateHash e finalizada com endHash.
updateHash pode ser chamada uma ou várias vezes até que todo o conteúdo da mensagem seja enviado e logo após endHash para finalizar a operação e gerar o Hash.
Uma operação de múltiplas partes não pode ser intercalada com outras operações, dentro da mesma sessão, até que ela seja finalizada com endHash.
Exceções
DinamoExceptionLança exceção em caso de erro.

◆ HashData()

void HashData ( IntPtr hHash,
byte[] byData )
inline

Encontra o hash para um dado e o associa ao handle de hash.

Parâmetros
hHashIntPtr Ponteiro para o recurso de hash
byDataDado em bytes
Exceções
DinamoExceptionLança exceção em caso de erro.

◆ Hash()

byte[] Hash ( HASH_ALG alg,
byte[] data )
inline

Retorna o hash de um dado.

Parâmetros
algAlgoritmo de hash
dataDado em bytes
Retorna
Valor do hash em bytes
Exceções
DinamoExceptionLança exceção em caso de erro.
Exemplos
sign_hash.cs.

◆ DestroyHash()

void DestroyHash ( IntPtr hHash)
inline

Libera o handle do recurso de hash.

Parâmetros
hHashIntPtr Ponteiro para o recurso de hash
Exceções
DinamoExceptionLança exceção em caso de erro.

◆ BatchSign() [1/2]

void BatchSign ( string strKeyId,
byte[] pbBlock,
Int32 dwBlockCount,
Int32 dwFlags )
inline

Envia um lote de blocos para assinatura no HSM.

Parâmetros
strKeyIdNome da chave.
pbBlockArray de bytes contendo os blocos que serão assinados concatenados e com os devidos paddings feitos. Adicionar no início deste array de blocos o padding zero de tamanho DN_BATCH_SIGN_BLOCK_HEADER. A estrutura deverá ser como a seguinte. Padding zero de tamanho DN_BATCH_SIGN_BLOCK_HEADER | BLOCO 1 | BLOCO 2 | BLOCO 3 | ... Os blocos assinados serão retornados nas mesmas posições dos blocos de entrada.
dwBlockCountQuantidade de blocos contidos em pbBlock.
dwFlagsReservado para uso futuro (deve ser 0).
Exceções
DinamoExceptionLança exceção em caso de erro.
Exemplos
batchsign.cs.

◆ BatchSign() [2/2]

void BatchSign ( IntPtr hPrivateKey,
byte[] pbBlock,
Int32 dwBlockCount,
Int32 dwFlags )
inline

Envia um lote de blocos para assinatura no HSM.

Parâmetros
hPrivateKeyContexto da chave.
pbBlockArray de bytes contendo os blocos que serão assinados concatenados e com os devidos paddings feitos. Adicionar no início deste array de blocos o padding zero de tamanho DN_BATCH_SIGN_BLOCK_HEADER. A estrutura deverá ser como a seguinte. Padding zero de tamanho DN_BATCH_SIGN_BLOCK_HEADER | BLOCO 1 | BLOCO 2 | BLOCO 3 | ... Os blocos assinados serão retornados nas mesmas posições dos blocos de entrada.
dwBlockCountQuantidade de blocos contidos em pbBlock.
dwFlagsReservado para uso futuro (deve ser 0).
Exceções
DinamoExceptionLança exceção em caso de erro.

◆ SignHash() [1/5]

byte[] SignHash ( String keyId,
byte[] bHash,
DinamoClient.HASH_ALG algHash )
inline

Assina um hash.

Parâmetros
keyIdIdentificador da chave privada
bHashArray com o hash
algHashAlgoritmo de hash utilizado. Veja: HASH_ALG
Retorna
array de bytes
Exceções
DinamoExceptionLança exceção em caso de erro.
Exemplos
block_object.cs e sign_hash.cs.

◆ SignHash() [2/5]

byte[] SignHash ( String keyId,
byte[] bHash,
DinamoClient.HASH_ALG algHash,
Int32 dwFlags )
inline

Assina um hash.

Parâmetros
keyIdIdentificador da chave privada
bHashArray com o hash
algHashAlgoritmo de hash utilizado. Veja: HASH_ALG
dwFlagsOpções de assinatura, pode ser 0 ou ou mais de um dos valores abaixo:
Valor Significado
DinamoApi.DN_SIGN_NO_HASH_OID Quando essa flag é especificada, o identificador do objeto (OID) não é colocado na frente do valor do hash, como previsto no PKCS#7, atributo DigestInfo.
Por padrão, esse valor é sempre acrescentado à assinatura. Apenas para assinaturas RSA.
DinamoApi.DN_SIGN_DISABLE_LEGACY_OPERATION Quando esta flag é especificada, a API cliente utiliza as versões mais novas de implementação de assinatura do HSM. Utilizar com HSMs versão 4.0 ou superior.
Por padrão, esta flag é desabilitada por motivos de compatibilidade. Algoritmos mais novos de assinatura utilizarão automaticamente a implementação mais nova e podem não ser suportados por HSMs mais antigos.
DinamoApi.DN_SIGN_ECC_P11_FMT Utiliza o formato de assinatura ECC PKCS#11 v2.40 seção 2.3.1.
Retorna
array de bytes
Exceções
DinamoExceptionLança exceção em caso de erro.

◆ SignHash() [3/5]

byte[] SignHash ( String keyId,
IntPtr pHash,
DinamoClient.HASH_ALG algHash )
inline

◆ SignHash() [4/5]

byte[] SignHash ( IntPtr hPrivateKey,
IntPtr hHash )
inline

Assina um hash.

Parâmetros
hHashPonteiro para o recurso de hash
hPrivateKeyPonteiro para a chave privada
Retorna
Assinatura como um array de bytes.
Exceções
DinamoExceptionLança exceção em caso de erro.

◆ SignHash() [5/5]

byte[] SignHash ( IntPtr hPrivateKey,
IntPtr hHash,
int dwFlags )
inline

Assina um hash.

Parâmetros
hHashPonteiro para o recurso de hash
hPrivateKeyPonteiro para a chave privada
dwFlagsOpções de assinatura, pode ser 0 ou ou mais de um dos valores abaixo:
Valor Significado
DinamoApi.DN_SIGN_NO_HASH_OID Quando essa flag é especificada, o identificador do objeto (OID) não é colocado na frente do valor do hash, como previsto no PKCS#7, atributo DigestInfo.
Por padrão, esse valor é sempre acrescentado à assinatura. Apenas para assinaturas RSA.
DinamoApi.DN_SIGN_DISABLE_LEGACY_OPERATION Quando esta flag é especificada, a API cliente utiliza as versões mais novas de implementação de assinatura do HSM. Utilizar com HSMs versão 4.0 ou superior.
Por padrão, esta flag é desabilitada por motivos de compatibilidade. Algoritmos mais novos de assinatura utilizarão automaticamente a implementação mais nova e podem não ser suportados por HSMs mais antigos.
DinamoApi.DN_SIGN_ECC_P11_FMT Utiliza o formato de assinatura ECC PKCS#11 v2.40 seção 2.3.1.
Retorna
Assinatura como um array de bytes.
Exceções
DinamoExceptionLança exceção em caso de erro.

◆ VerifySignature()

bool VerifySignature ( IntPtr hHash,
IntPtr hPublicKey,
byte[] bySignature )
inline

Verifica uma assinatura.

Parâmetros
hHashPonteiro para o recurso de hash
hPublicKeyPonteiro para o recurso da chave pública
bySignatureArray da assinatura
Retorna
Verdadeiro em caso de validação ok da assinatura
Exceções
DinamoExceptionLança exceção em caso de erro.

◆ SetHashValue()

void SetHashValue ( IntPtr hHash,
byte[] Value )
inline

Armazena um hash.

Parâmetros
hHashPonteiro para o recurso de hash
ValueValor do hash
Exceções
DinamoExceptionLança exceção em caso de erro.

◆ GetHashValue()

byte[] GetHashValue ( IntPtr hHash)
inline

Retorna o valor do hash.

Parâmetros
hHashPonteiro para o recurso de hash
Retorna
Array com o hash
Exceções
DinamoExceptionLança exceção em caso de erro.

◆ GetRandom()

byte[] GetRandom ( Int32 dwReturnLen)
inline

Retorna um número aleatório do gerador do HSM.

Parâmetros
dwReturnLenTamanho em bytes do número aleatório
Retorna
Array de bytes do número aleatório encontrado
Exceções
DinamoExceptionLança exceção em caso de erro.

◆ MofNSplit()

DinamoApi.DN_M_OF_N_SPLIT_INFO MofNSplit ( byte bM,
byte bN,
byte[] pbSecret )
inline

Faz a divisão M de N de um segredo. De acordo com o padrão de compartilhamento de segredos de Shamir.

Parâmetros
bMNúmero mínimo de partes necessárias para reconstruir o segredo. Mínimo de DinamoApi.DN_M_OF_N_S_MIN e máximo de DinamoApi.DN_M_OF_N_S_MAX.
bNNúmero total de partes que serão geradas.
pbSecretSegredo a ser dividido. Deve ter tamanho DinamoApi.DN_M_OF_N_S_LEN. Pode ser passado null para que um segredo seja gerado randomicamente pelo HSM.
Retorna
Informações sobre a divisão do segredo.
Exceções
DinamoExceptionLança exceção em caso de erro.
Exemplos
m_of_n.cs.

◆ MofNRecover()

byte[] MofNRecover ( DinamoApi.DN_M_OF_N_PART[] parts)
inline

Reconstrói o segredo M de N a partir das partes dos custodiantes. De acordo com o padrão de compartilhamento de segredos de Shamir.

Parâmetros
partsArray de partes do segredo.
Retorna
Segredo reconstruído.
Exceções
DinamoExceptionLança exceção em caso de erro.
Exemplos
m_of_n.cs.