NET API
HSM Dinamo
Cargando...
Buscando...
No se han encontrado entradas
Criptografía

Descripción detallada

Operaciones hash criptográficas simétricas y asimétricas.

Funciones

void Encrypt (IntPtr hKey, bool Final, byte[] byData, ref int DataLen, int BufferLen)
 Cifra bloques o archivos pasando la referencia de la clave. Utiliza el modo/relleno por defecto, es decir, MODO CBC y relleno PKCS#5.
 
void Encrypt (String strKeyId, byte[] byData)
 Cifra un bloque en modo ECB sin relleno. Esta función es útil para PIN BLOCK. El tamaño de la matriz de datos debe ser compatible con el tipo de clave.
 
byte[] EncryptDefault (String strKeyId, byte[] byData)
 Cifra un bloque utilizando la parametrización HSM estándar.
 
void Encrypt (string strKeyId, IntPtr hHash, bool Final, byte[] iv, MODE_TYPE mode, PADDING_TYPE padding, byte[] byData, ref int DataLen, int BufferLen)
 Cifra un hash, datos generales o un archivo.
 
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)
 Cifra un hash, datos generales o un archivo.
 
void EncryptDefault (IntPtr hKey, IntPtr hHash, bool Final, int dwFlags, byte[] iv, byte[] byData, ref int DataLen, int BufferLen)
 Cifra utilizando la parametrización HSM estándar.
 
int GetEncryptBuffLen (IntPtr hKey, IntPtr hHash, int DataLen)
 Devuelve el tamaño del búfer de encriptación.
 
byte[] KEKEncode (String strKeyId, byte[] byKey)
 Cifra una clave simétrica que está fuera del HSM utilizando una RSA dentro del HSM.
 
byte[] KEKDecode (cadena strKeyId, byte[] byKey)
 Descifra una clave simétrica que está fuera del HSM utilizando una RSA dentro del HSM.
 
void Decrypt (string strKeyId, IntPtr hHash, bool Final, byte[] byData, ref int DataLen)
 Desencripta un hash, datos generales o un archivo.
 
void Decrypt (IntPtr hKey, IntPtr hHash, bool Final, byte[] byData, ref int DataLen)
 Desencripta un hash, datos generales o un archivo.
 
void Decrypt (cadena strKeyId, byte[] byData)
 Descifra un bloque en modo ECB sin relleno. Esta función es útil para PIN BLOCK. El tamaño de la matriz de datos debe ser compatible con el tipo de clave.
 
byte[] DecryptDefault (cadena strKeyId, byte[] byData)
 Descifra un bloque utilizando la parametrización HSM estándar.
 
void Decrypt (string strKeyId, IntPtr hHash, bool Final, byte[] iv, MODE_TYPE mode, PADDING_TYPE padding, byte[] byData, ref int DataLen)
 Desencripta un hash, datos generales o un archivo.
 
void Decrypt (IntPtr hKey, IntPtr hHash, bool Final, int dwFlags, byte[] iv, MODE_TYPE mode, PADDING_TYPE padding, byte[] byData, ref int DataLen)
 Desencripta un hash, datos generales o un archivo.
 
void DecryptDefault (IntPtr hKey, IntPtr hHash, bool Final, int dwFlags, byte[] iv, byte[] byData, ref int DataLen)
 Descifrado mediante la parametrización HSM estándar.
 
IntPtr CreateHash(HASH_ALG AlgId)
 Crea un manejador para un hash.
 
byte[] generateHash(HASH_ALG AlgId, byte[] Datos, int Banderas)
 Genera un HASH en una sola llamada.
 
byte[] generateHash(HASH_ALG AlgId, byte[] Datos)
 Genera un HASH en una sola llamada.
 
byte[] generateMAC(HASH_ALG AlgId, String KeyId, byte[] Data, int Flags)
 Genera un MAC en una sola llamada.
 
byte[] generateMAC(HASH_ALG AlgId, String KeyId, byte[] Data)
 Genera un MAC en una sola llamada.
 
void initMAC(HASH_ALG AlgId, String KeyId, int Flags)
 Inicializa una operación MAC por partes. Debe finalizarse con endMAC.
 
void initMAC(HASH_ALG AlgId, String KeyId)
 Inicializa una operación MAC por partes. Debe finalizarse con endMAC.
 
void updateMAC (byte[] Datos)
 Actualiza una operación MAC con más datos.
 
byte[] endMAC ()
 Finaliza una operación MAC.
 
void initHash(HASH_ALG AlgId, int Banderas)
 Inicializa una operación HASH por partes. Debe finalizarse con endHash.
 
void initHash(HASH_ALG AlgId)
 Inicializa una operación HASH por partes. Debe finalizarse con endHash.
 
void updateHash (byte[] Datos)
 Actualiza una operación HASH con más datos.
 
byte[] endHash ()
 Finaliza una operación HASH.
 
void HashData (IntPtr hHash, byte[] byData)
 Busca el hash de un dato y lo asocia al manejador del hash.
 
byte[] Hash(HASH_ALG alg, byte[] data)
 Devuelve el hash de un dato.
 
void DestroyHash (IntPtr hHash)
 Libera el manejador del recurso hash.
 
void BatchSign (string strKeyId, byte[] pbBlock, Int32 dwBlockCount, Int32 dwFlags)
 Envía un lote de bloques para su firma en el HSM.
 
void BatchSign (IntPtr hPrivateKey, byte[] pbBlock, Int32 dwBlockCount, Int32 dwFlags)
 Envía un lote de bloques para su firma en el HSM.
 
byte[] SignHash (String keyId, byte[] bHash, DinamoClient.HASH_ALG algHash)
 Firma un hash.
 
byte[] SignHash (String keyId, byte[] bHash, DinamoClient.HASH_ALG algHash, Int32 dwFlags)
 Firma un hash.
 
byte[] SignHash (String keyId, IntPtr pHash, DinamoClient.HASH_ALG algHash)
 
byte[] SignHash (IntPtr hPrivateKey, IntPtr hHash)
 Firma un hash.
 
byte[] SignHash (IntPtr hPrivateKey, IntPtr hHash, int dwFlags)
 Firma un hash.
 
bool VerifySignature (IntPtr hHash, IntPtr hPublicKey, byte[] bySignature)
 Comprueba una firma.
 
void SetHashValue (IntPtr hHash, byte[] Valor)
 Almacena un hash.
 
byte[] GetHashValue (IntPtr hHash)
 Devuelve el valor hash.
 
byte[] GetRandom (Int32 dwReturnLen)
 Devuelve un número aleatorio del generador HSM.
 
DinamoApi.DN_M_OF_N_SPLIT_INFO MofNSplit (byte bM, byte bN, byte[] pbSecret)
 Divide M de N en secreto. Según el estándar de compartición de secretos de Shamir.
 
byte[] MofNRecover(DinamoApi.DN_M_OF_N_PART[] parts)
 Reconstruye el secreto M de N a partir de las partes de los custodios. Según el patrón de compartición de secretos de Shamir.
 

Funciones

Cifrar() [1/4]

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

Cifra bloques o archivos pasando la referencia de la clave. Utiliza el modo/relleno por defecto, es decir, MODO CBC y relleno PKCS#5.

Parámetros
hKeyTirador de llave
FinalIndica si el bloque es el último
byDataDatos que se van a cifrar. Cuando la función regresa, los datos originales se sobrescriben con el resultado de la operación de encriptación. El tamaño del búfer se especifica mediante el parámetro dwBufLen, el número de bytes que se procesarán se especifica mediante el parámetro pdwDataLen. El tamaño del búfer debe ser suficiente para contener los datos cifrados más el relleno.
DataLenCuando el parámetro de entrada contiene el número de bytes que serán procesados, cuando el parámetro de salida contiene el número de bytes de datos encriptados. Si el búfer asignado no es suficiente para recibir todos los datos encriptados (falta de espacio de relleno, por ejemplo) la función fallará devolviendo D_MORE_DATA.
BufferLenTamaño del búfer: Para las operaciones simétricas que requieren relleno, el búfer debe tener al menos la longitud de los datos más el tamaño del bloque de operaciones del algoritmo que se vaya a utilizar.
Excepciones
DinamoExceptionLanza una excepción en caso de error.
Ejemplos
enc_dec.cs y rsa_enc_dec.cs.

Cifrar() [2/4]

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

Cifra un bloque en modo ECB sin relleno. Esta función es útil para PIN BLOCK. El tamaño de la matriz de datos debe ser compatible con el tipo de clave.

Parámetros
strKeyIdReferencia clave
byDataDatos que se van a cifrar. Cuando la función regresa, los datos originales se sobrescriben con el resultado de la operación de encriptación. El tamaño del búfer se especifica mediante el parámetro dwBufLen, el número de bytes que se procesarán se especifica mediante el parámetro pdwDataLen. El tamaño del búfer debe ser suficiente para contener los datos cifrados más el relleno.
Excepciones
DinamoExceptionLanza una excepción en caso de error.

EncryptDefault() [1/2]

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

Cifra un bloque utilizando la parametrización HSM estándar.

Para claves simétricas: MODE_CBC: Cadena de bloques cifrados (CBC) PKCS5_PADDING: El relleno se realiza siguiendo el patrón definido en PKCS#5. IV: Relleno de ceros.

Para claves asimétricas RSA: PKCS1_PADDING: se utiliza el relleno PKCS#1 v1.5.

Parámetros
strKeyIdReferencia clave
byDataDatos que deben encriptarse.
Devolución
Datos encriptados.
Excepciones
DinamoExceptionLanza una excepción en caso de error.

Cifrar() [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

Cifra un hash, datos generales o un archivo.

Parámetros
strKeyIdReferencia clave
hHashPuntero a un hash
FinalIndica si el bloque es el último
ivVector de inicialización utilizado con los algoritmos de bloque según su modo de funcionamiento de cifrado simétrico. El tamaño del vector de inicialización depende del algoritmo simétrico utilizado, ya que tiene la misma longitud que la operación de bloque. Más detalles en el apartado Observaciones. Sólo válido para claves simétricas.
modeIndica el modo de funcionamiento de cifrado del algoritmo de bloques.
Valor Significado
MODO_NINGUNO No define el modo de funcionamiento. Si el algoritmo admite el modo de funcionamiento, se utilizará el patrón MODE_CBC. Para claves asimétricas, pase esta bandera.
MODO_ECB Libro de códigos electrónico (BCE)
MODE_CBC Cadena de bloques cifrados (CBC)
MODO_OFB Salida-Feedback. Aún no compatible.
Sólo válido para claves simétricas y algoritmos de bloque.
paddingLa biblioteca puede trabajar con 3 formas de relleno simétrico:
Valor Significado
NO_PADDING No se realiza ningún relleno, los datos pasados para la encriptación deben ser ya un múltiplo del tamaño del bloque de la operación.
PKCS5_PADDING El relleno se realiza siguiendo la norma definida en PKCS#5.
ZERO_PADDING Si la longitud de los datos no es múltiplo del tamaño del bloque de operación, se completa con ceros a la izquierda hasta alcanzar un tamaño soportado por el algoritmo. Este tipo de relleno no debe utilizarse con datos en los que pueda haber bytes con valor cero, ya que puede crear ambigüedad en la operación de descifrado. Si los datos sólo contienen texto ASCII, por ejemplo, no hay ningún problema.
Se aceptan los siguientes valores para el relleno asimétrico.
Valor Significado
NO_RSA_PADDING Para no utilizar relleno.
PKCS1_PADDING Utiliza relleno PKCS#1 v1.5 tipo 2.
byDataDatos que se van a cifrar. Cuando la función regresa, los datos originales se sobrescriben con el resultado de la operación de encriptación. El tamaño del búfer se especifica mediante el parámetro dwBufLen, el número de bytes que se procesarán se especifica mediante el parámetro pdwDataLen. El tamaño del búfer debe ser suficiente para contener los datos cifrados más el relleno.
DataLenCuando el parámetro de entrada contiene el número de bytes que serán procesados, cuando el parámetro de salida contiene el número de bytes de datos encriptados. Si el búfer asignado no es suficiente para recibir todos los datos encriptados (falta de espacio de relleno, por ejemplo) la función fallará devolviendo D_MORE_DATA.
BufferLenTamaño del búfer: Para las operaciones simétricas que requieren relleno, el búfer debe tener al menos la longitud de los datos más el tamaño del bloque de operaciones del algoritmo que se vaya a utilizar.
Excepciones
DinamoExceptionLanza una excepción en caso de error.

Cifrar() [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

Cifra un hash, datos generales o un archivo.

Parámetros
hKeyContexto clave
hHashPuntero a un hash
FinalIndica si el bloque es el último
dwFlagsReservado para uso futuro (debe ser 0).
ivVector de inicialización utilizado con los algoritmos de bloque según su modo de funcionamiento de cifrado simétrico. El tamaño del vector de inicialización depende del algoritmo simétrico utilizado, ya que tiene la misma longitud que la operación de bloque. Más detalles en el apartado Observaciones. Sólo válido para claves simétricas.
modeIndica el modo de funcionamiento de cifrado del algoritmo de bloques.
Valor Significado
MODO_NINGUNO No define el modo de funcionamiento. Si el algoritmo admite el modo de funcionamiento, se utilizará el patrón MODE_CBC. Para claves asimétricas, pase esta bandera.
MODO_ECB Libro de códigos electrónico (BCE)
MODE_CBC Cadena de bloques cifrados (CBC)
MODO_OFB Salida-Feedback. Aún no compatible.
Sólo válido para claves simétricas y algoritmos de bloque.
paddingLa biblioteca puede trabajar con 3 formas de relleno simétrico:
Valor Significado
NO_PADDING No se realiza ningún relleno, los datos pasados para la encriptación deben ser ya un múltiplo del tamaño del bloque de la operación.
PKCS5_PADDING El relleno se realiza siguiendo la norma definida en PKCS#5.
ZERO_PADDING Si la longitud de los datos no es múltiplo del tamaño del bloque de operación, se completa con ceros a la izquierda hasta alcanzar un tamaño soportado por el algoritmo. Este tipo de relleno no debe utilizarse con datos en los que pueda haber bytes con valor cero, ya que puede crear ambigüedad en la operación de descifrado. Si los datos sólo contienen texto ASCII, por ejemplo, no hay ningún problema.
Se aceptan los siguientes valores para el relleno asimétrico.
Valor Significado
NO_RSA_PADDING Para no utilizar relleno.
PKCS1_PADDING Utiliza relleno PKCS#1 v1.5 tipo 2.
byDataDatos que se van a cifrar. Cuando la función regresa, los datos originales se sobrescriben con el resultado de la operación de encriptación. El tamaño del búfer se especifica mediante el parámetro dwBufLen, el número de bytes que se procesarán se especifica mediante el parámetro pdwDataLen. El tamaño del búfer debe ser suficiente para contener los datos cifrados más el relleno.
DataLenTamaño del bloque. Cuando el parámetro de entrada, contiene el número de bytes que serán procesados, cuando el parámetro de salida, contiene el número de bytes de datos encriptados.Si el buffer asignado no es suficiente para recibir todos los datos encriptados (falta de espacio para relleno, por ejemplo) la función fallará devolviendo D_MORE_DATA.
BufferLenTamaño del búfer: Para las operaciones simétricas que requieren relleno, el búfer debe tener al menos la longitud de los datos más el tamaño del bloque de operaciones del algoritmo que se vaya a utilizar.
Excepciones
DinamoExceptionLanza una excepción en caso de error.
Notas
Si se va a cifrar una gran cantidad de datos, se puede hacer en parte con sucesivas llamadas a DEncrypt. En la última llamada, el parámetro bFinal debe pasarse con un valor verdadero.
Sólo en el último bloque se realiza el relleno (cuando procede), por lo que los demás bloques deben tener un tamaño coherente con el algoritmo utilizado. El búfer por el que se pasan los datos debe ser lo suficientemente grande como para albergar también el relleno.
Esta API soporta operaciones RSA realizadas directamente sobre esta función. Cuando se utiliza la clave pública para el cifrado, el relleno utilizado es PKCS#1 tipo 2 y en el proceso de descifrado, el relleno se comprueba y se elimina. Para las operaciones con la clave privada, se utiliza el relleno PKCS#1 tipo 1. El HSM comprobará el formato del relleno incluso cuando la operación no tenga relleno definido, como en D_NO_RSA_PADDING. Las operaciones de cifrado y descifrado RSA sólo están habilitadas en modo no restringido (NRM).

EncryptDefault() [2/2]

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

Cifra utilizando la parametrización HSM estándar.

Para claves simétricas: MODE_CBC: Cipher Block Chain (CBC) PKCS5_PADDING: El relleno se realiza siguiendo el patrón definido en PKCS#5.

Para claves asimétricas RSA: PKCS1_PADDING: se utiliza el relleno PKCS#1 v1.5.

Parámetros
hKeyContexto clave
hHashPuntero a un hash
FinalIndica si el bloque es el último
dwFlagsReservado para uso futuro (debe ser 0).
ivVector de inicialización utilizado con los algoritmos de bloque según su modo de funcionamiento de cifrado simétrico. El tamaño del vector de inicialización depende del algoritmo simétrico utilizado, ya que tiene la misma longitud que la operación de bloque. Más detalles en el apartado Observaciones. Sólo válido para claves simétricas. Si se pasa null, se utilizará el IV relleno a cero.
byDataDatos que se van a cifrar. Cuando la función regresa, los datos originales se sobrescriben con el resultado de la operación de encriptación. El tamaño del búfer se especifica mediante el parámetro dwBufLen, el número de bytes que se procesarán se especifica mediante el parámetro pdwDataLen. El tamaño del búfer debe ser suficiente para contener los datos cifrados más el relleno.
DataLenTamaño del bloque. Cuando el parámetro de entrada, contiene el número de bytes que serán procesados, cuando el parámetro de salida, contiene el número de bytes de datos encriptados.Si el buffer asignado no es suficiente para recibir todos los datos encriptados (falta de espacio para relleno, por ejemplo) la función fallará devolviendo D_MORE_DATA.
BufferLenTamaño del búfer: Para las operaciones simétricas que requieren relleno, el búfer debe tener al menos la longitud de los datos más el tamaño del bloque de operaciones del algoritmo que se vaya a utilizar.
Excepciones
DinamoExceptionLanza una excepción en caso de error.

GetEncryptBuffLen()

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

Devuelve el tamaño del búfer de encriptación.

Parámetros
hKeyContexto clave
hHashPuntero a un hash
DataLenTamaño de los datos a encriptar
Devolución
Tamaño del búfer de cifrado
Excepciones
DinamoExceptionLanza una excepción en caso de error.

KEKEncode()

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

Cifra una clave simétrica que está fuera del HSM utilizando una RSA dentro del HSM.

Parámetros
strKeyIdIdentificación de claves RSA
byKeyContenido de la clave simétrica
Devolución
Clave simétrica cifrada
Excepciones
DinamoExceptionLanza una excepción en caso de error.

KEKDecode()

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

Descifra una clave simétrica que está fuera del HSM utilizando una RSA dentro del HSM.

Parámetros
strKeyIdIdentificación de claves RSA
byKeyContenido de la clave simétrica cifrada
Excepciones
DinamoExceptionLanza una excepción en caso de error.

Descifrar() [1/5]

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

Desencripta un hash, datos generales o un archivo.

Parámetros
strKeyIdReferencia clave
hHashPuntero a un hash
FinalIndica si el bloque es el último
byDataBuffer que contiene los datos a descifrar. Cuando la función regresa, los datos originales se sobrescriben con el resultado de la operación de cifrado. Para las operaciones simétricas de bloque, el tamaño de los datos debe ser siempre múltiplo del bloque utilizado por el algoritmo en cuestión.
DataLenDevuelve el tamaño de los datos en byData. Cuando parámetro de entrada, contiene el número de bytes a procesar, cuando parámetro de salida, contiene el número de bytes de datos en texto claro.
Excepciones
DinamoExceptionLanza una excepción en caso de error.
Ejemplos
enc_dec.cs y rsa_enc_dec.cs.

Descifrar() [2/5]

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

Desencripta un hash, datos generales o un archivo.

Parámetros
hKeyContexto clave
hHashPuntero a un hash
FinalIndica si el bloque es el último
byDataBuffer que contiene los datos a descifrar. Cuando la función regresa, los datos originales se sobrescriben con el resultado de la operación de cifrado. Para las operaciones simétricas de bloque, el tamaño de los datos debe ser siempre múltiplo del bloque utilizado por el algoritmo en cuestión.
DataLenDevuelve el tamaño de los datos en byData. Cuando parámetro de entrada, contiene el número de bytes a procesar, cuando parámetro de salida, contiene el número de bytes de datos en texto claro.
Excepciones
DinamoExceptionLanza una excepción en caso de error.

Descifrar() [3/5]

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

Descifra un bloque en modo ECB sin relleno. Esta función es útil para PIN BLOCK. El tamaño de la matriz de datos debe ser compatible con el tipo de clave.

Parámetros
strKeyIdReferencia clave
byDataBúfer de datos
Excepciones
DinamoExceptionLanza una excepción en caso de error.

DecryptDefault() [1/2]

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

Descifra un bloque utilizando la parametrización HSM estándar.

Para claves simétricas: MODE_CBC: Cadena de bloques cifrados (CBC) PKCS5_PADDING: El relleno se realiza siguiendo el patrón definido en PKCS#5. IV: Relleno de ceros.

Para claves asimétricas RSA: PKCS1_PADDING: se utiliza el relleno PKCS#1 v1.5.

Parámetros
strKeyIdReferencia clave
byDataBúfer de datos
Devolución
Los datos descifrados.
Excepciones
DinamoExceptionLanza una excepción en caso de error.

Descifrar() [4/5]

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

Desencripta un hash, datos generales o un archivo.

Parámetros
strKeyIdReferencia clave
hHashPuntero a un hash
FinalIndica si el bloque es el último
ivVector de inicialización utilizado con los algoritmos de bloque según su modo de funcionamiento de cifrado simétrico. El tamaño del vector de inicialización depende del algoritmo simétrico utilizado, ya que tiene la misma longitud que la operación de bloque. Más detalles en el apartado Observaciones. Sólo válido para claves simétricas.
modeIndica el modo de funcionamiento de cifrado del algoritmo de bloques.
Valor Significado
MODO_NINGUNO No define el modo de funcionamiento. Si el algoritmo admite el modo de funcionamiento, se utilizará el patrón MODE_CBC. Para claves asimétricas, pase esta bandera.
MODO_ECB Libro de códigos electrónico (BCE)
MODE_CBC Cadena de bloques cifrados (CBC)
MODO_OFB Salida-Feedback. Aún no compatible.
Sólo válido para claves simétricas y algoritmos de bloque.
paddingLa biblioteca puede trabajar con 3 formas de relleno simétrico:
Valor Significado
NO_PADDING No se realiza ningún relleno, los datos pasados para la encriptación deben ser ya un múltiplo del tamaño del bloque de la operación.
PKCS5_PADDING El relleno se realiza siguiendo la norma definida en PKCS#5.
ZERO_PADDING Si la longitud de los datos no es múltiplo del tamaño del bloque de operación, se completa con ceros a la izquierda hasta alcanzar un tamaño soportado por el algoritmo. Este tipo de relleno no debe utilizarse con datos en los que pueda haber bytes con valor cero, ya que puede crear ambigüedad en la operación de descifrado. Si los datos sólo contienen texto ASCII, por ejemplo, no hay ningún problema.
Se aceptan los siguientes valores para el relleno asimétrico.
Valor Significado
NO_RSA_PADDING Para no utilizar relleno.
PKCS1_PADDING Utiliza relleno PKCS#1 v1.5 tipo 2.
byDataBuffer que contiene los datos a descifrar. Cuando la función regresa, los datos originales se sobrescriben con el resultado de la operación de cifrado. Para las operaciones simétricas de bloque, el tamaño de los datos debe ser siempre múltiplo del bloque utilizado por el algoritmo en cuestión.
DataLenDevuelve el tamaño de los datos en byData. Cuando parámetro de entrada, contiene el número de bytes a procesar, cuando parámetro de salida, contiene el número de bytes de datos en texto claro.
Excepciones
DinamoExceptionLanza una excepción en caso de error.
Notas
Si se va a descifrar una gran cantidad de datos, se puede hacer en parte, con sucesivas llamadas a Descifrar. En la última llamada, se debe pasar el parámetro bFinal con un valor de true.
Sólo en el último bloque se deshace el relleno (cuando procede), por lo que los bloques restantes deben tener un tamaño acorde con el algoritmo utilizado, y si se está utilizando el modo de funcionamiento de cifrado simétrico CBC, el vector de inicialización se pondrá a cero.
Esta API soporta operaciones RSA realizadas directamente sobre esta función. Los datos sobre los que se va a operar deben tener una longitud igual al tamaño de la clave. Cuando se utiliza la clave pública para el cifrado, el relleno utilizado es PKCS#1 tipo 2 y en el proceso de descifrado, el relleno se comprueba y se elimina. Para las operaciones con la clave privada, se utiliza el relleno PKCS#1 tipo 1. El HSM comprobará el formato del relleno incluso cuando la operación no tenga relleno definido, como en D_NO_RSA_PADDING. Las operaciones de cifrado y descifrado RSA sólo están habilitadas en modo no restringido (NRM).

Descifrar() [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

Desencripta un hash, datos generales o un archivo.

Parámetros
hKeyConexión clave
hHashPuntero a un hash
FinalIndica si el bloque es el último
dwFlagsReservado para uso futuro (debe ser 0).
ivVector de inicialización utilizado con los algoritmos de bloque según su modo de funcionamiento de cifrado simétrico. El tamaño del vector de inicialización depende del algoritmo simétrico utilizado, ya que tiene la misma longitud que la operación de bloque. Más detalles en el apartado Observaciones. Sólo válido para claves simétricas.
modeIndica el modo de funcionamiento de cifrado del algoritmo de bloques.
Valor Significado
MODO_NINGUNO No define el modo de funcionamiento. Si el algoritmo admite el modo de funcionamiento, se utilizará el patrón MODE_CBC. Para claves asimétricas, pase esta bandera.
MODO_ECB Libro de códigos electrónico (BCE)
MODE_CBC Cadena de bloques cifrados (CBC)
MODO_OFB Salida-Feedback. Aún no compatible.
Sólo válido para claves simétricas y algoritmos de bloque.
paddingLa biblioteca puede trabajar con 3 formas de relleno simétrico:
Valor Significado
NO_PADDING No se realiza ningún relleno, los datos pasados para la encriptación deben ser ya un múltiplo del tamaño del bloque de la operación.
PKCS5_PADDING El relleno se realiza siguiendo la norma definida en PKCS#5.
ZERO_PADDING Si la longitud de los datos no es múltiplo del tamaño del bloque de operación, se completa con ceros a la izquierda hasta alcanzar un tamaño soportado por el algoritmo. Este tipo de relleno no debe utilizarse con datos en los que pueda haber bytes con valor cero, ya que puede crear ambigüedad en la operación de descifrado. Si los datos sólo contienen texto ASCII, por ejemplo, no hay ningún problema.
Se aceptan los siguientes valores para el relleno asimétrico.
Valor Significado
NO_RSA_PADDING Para no utilizar relleno.
PKCS1_PADDING Utiliza relleno PKCS#1 v1.5 tipo 2.
byDataBuffer que contiene los datos a descifrar. Cuando la función regresa, los datos originales se sobrescriben con el resultado de la operación de cifrado. Para las operaciones simétricas de bloque, el tamaño de los datos debe ser siempre múltiplo del bloque utilizado por el algoritmo en cuestión.
DataLenDevuelve el tamaño de los datos en byData. Cuando parámetro de entrada, contiene el número de bytes a procesar, cuando parámetro de salida, contiene el número de bytes de datos en texto claro.
Excepciones
DinamoExceptionLanza una excepción en caso de error.
Notas
Si se va a descifrar una gran cantidad de datos, se puede hacer en parte, con sucesivas llamadas a Descifrar. En la última llamada, se debe pasar el parámetro bFinal con un valor de true.
Sólo en el último bloque se deshace el relleno (cuando procede), por lo que los bloques restantes deben tener un tamaño acorde con el algoritmo utilizado, y si se está utilizando el modo de funcionamiento de cifrado simétrico CBC, el vector de inicialización se pondrá a cero.
Esta API soporta operaciones RSA realizadas directamente sobre esta función. Los datos sobre los que se va a operar deben tener una longitud igual al tamaño de la clave. Cuando se utiliza la clave pública para el cifrado, el relleno utilizado es PKCS#1 tipo 2 y en el proceso de descifrado, el relleno se comprueba y se elimina. Para las operaciones con la clave privada, se utiliza el relleno PKCS#1 tipo 1. El HSM comprobará el formato del relleno incluso cuando la operación no tenga relleno definido, como en D_NO_RSA_PADDING. Las operaciones de cifrado y descifrado RSA sólo están habilitadas en modo no restringido (NRM).

DecryptDefault() [2/2]

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

Descifrado mediante la parametrización HSM estándar.

Para claves simétricas: MODE_CBC: Cipher Block Chain (CBC) PKCS5_PADDING: El relleno se realiza siguiendo el patrón definido en PKCS#5.

Para claves asimétricas RSA: PKCS1_PADDING: se utiliza el relleno PKCS#1 v1.5.

Parámetros
hKeyConexión clave
hHashPuntero a un hash
FinalIndica si el bloque es el último
dwFlagsReservado para uso futuro (debe ser 0).
ivVector de inicialización utilizado con los algoritmos de bloque según su modo de funcionamiento de cifrado simétrico. El tamaño del vector de inicialización depende del algoritmo simétrico utilizado, ya que tiene la misma longitud que la operación de bloque. Más detalles en el apartado Observaciones. Sólo válido para claves simétricas. Si se pasa null, se utilizará el IV relleno a cero.
byDataBuffer que contiene los datos a descifrar. Cuando la función regresa, los datos originales se sobrescriben con el resultado de la operación de cifrado. Para las operaciones simétricas de bloque, el tamaño de los datos debe ser siempre múltiplo del bloque utilizado por el algoritmo en cuestión.
DataLenDevuelve el tamaño de los datos en byData. Cuando parámetro de entrada, contiene el número de bytes a procesar, cuando parámetro de salida, contiene el número de bytes de datos en texto claro.
Excepciones
DinamoExceptionLanza una excepción en caso de error.

CrearHash()

IntPtr CreateHash ( HASH_ALG AlgId)
inline

Crea un manejador para un hash.

Parámetros
AlgIdAlgoritmo hash
Devolución
IntPtr Puntero al recurso hash
Excepciones
DinamoExceptionLanza una excepción en caso de error.

generateHash() [1/2]

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

Genera un HASH en una sola llamada.

Parámetros
AlgIdAlgoritmo hash
DataMensaje
FlagsDebe pasarse el cero
Devolución
HASH generado
Excepciones
DinamoExceptionLanza una excepción en caso de error.
Ejemplos
generar_hash.cs.

generateHash() [2/2]

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

Genera un HASH en una sola llamada.

Parámetros
AlgIdAlgoritmo hash
DataMensaje
Devolución
HASH generado
Excepciones
DinamoExceptionLanza una excepción en caso de error.

generateMAC() [1/2]

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

Genera un MAC en una sola llamada.

Parámetros
AlgIdAlgoritmo hash
KeyIdNombre de la clave MAC
DataMensaje
FlagsSe debe pasar el cero
Devolución
MAC generado
Excepciones
DinamoExceptionLanza una excepción en caso de error.
Ejemplos
generate_hmac.cs y generate_hmac_lau.cs.

generateMAC() [2/2]

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

Genera un MAC en una sola llamada.

Parámetros
AlgIdAlgoritmo hash
KeyIdNombre de la clave MAC
DataMensaje
Devolución
MAC generado
Excepciones
DinamoExceptionLanza una excepción en caso de error.

initMAC() [1/2]

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

Inicializa una operación MAC por partes. Debe finalizarse con endMAC.

Parámetros
AlgIdAlgoritmo hash
KeyIdNombre de la clave MAC
FlagsDebe pasarse el cero
Notas
La operación a trozos DEBE inicializarse con initMAC, los datos pasados con updateMAC y finalizarse con endMAC.
updateMAC puede llamarse una o varias veces hasta que se haya enviado todo el contenido del mensaje y, a continuación, endMAC para finalizar la operación y generar la MAC.
Una operación multiparte no puede intercalarse con otras operaciones dentro de la misma sesión hasta que finalice con endMAC.
Excepciones
DinamoExceptionLanza una excepción en caso de error.
Ejemplos
generar_hmac.cs.

initMAC() [2/2]

void initMAC ( HASH_ALG AlgId,
String KeyId )
inline

Inicializa una operación MAC por partes. Debe finalizarse con endMAC.

Parámetros
AlgIdAlgoritmo hash
KeyIdNombre de la clave MAC
Notas
La operación a trozos DEBE inicializarse con initMAC, los datos pasados con updateMAC y finalizarse con endMAC.
updateMAC puede llamarse una o varias veces hasta que se haya enviado todo el contenido del mensaje y, a continuación, endMAC para finalizar la operación y generar la MAC.
Una operación multiparte no puede intercalarse con otras operaciones dentro de la misma sesión hasta que finalice con endMAC.
Excepciones
DinamoExceptionLanza una excepción en caso de error.

updateMAC()

void updateMAC ( byte[] Data)
inline

Actualiza una operación MAC con más datos.

Parámetros
DataMensaje
Notas
La operación a trozos DEBE inicializarse con initMAC, los datos pasados con updateMAC y finalizarse con endMAC.
updateMAC puede llamarse una o varias veces hasta que se haya enviado todo el contenido del mensaje y, a continuación, endMAC para finalizar la operación y generar la MAC.
Una operación multiparte no puede intercalarse con otras operaciones dentro de la misma sesión hasta que finalice con endMAC.
Excepciones
DinamoExceptionLanza una excepción en caso de error.
Ejemplos
generar_hmac.cs.

endMAC()

byte[] endMAC ( )
inline

Finaliza una operación MAC.

Devolución
MAC generado
Notas
La operación a trozos DEBE inicializarse con initMAC, los datos pasados con updateMAC y finalizarse con endMAC.
updateMAC puede llamarse una o varias veces hasta que se haya enviado todo el contenido del mensaje y, a continuación, endMAC para finalizar la operación y generar la MAC.
Una operación multiparte no puede intercalarse con otras operaciones dentro de la misma sesión hasta que finalice con endMAC.
Excepciones
DinamoExceptionLanza una excepción en caso de error.
Ejemplos
generate_hash.cs y generate_hmac.cs.

initHash() [1/2]

void initHash ( HASH_ALG AlgId,
int Flags )
inline

Inicializa una operación HASH por partes. Debe finalizarse con endHash.

Parámetros
AlgIdAlgoritmo hash
FlagsDebe pasarse el cero
Notas
La operación piecewise DEBE ser inicializada con initHash, los datos pasados con updateHash y finalizada con endHash.
updateHash puede llamarse una o varias veces hasta que se envíe todo el contenido del mensaje y, a continuación, endHash para finalizar la operación y generar el hash.
Una operación multiparte no puede intercalarse con otras operaciones dentro de la misma sesión hasta que finalice con endHash.
Excepciones
DinamoExceptionLanza una excepción en caso de error.
Ejemplos
generar_hash.cs.

initHash() [2/2]

void initHash ( HASH_ALG AlgId)
inline

Inicializa una operación HASH por partes. Debe finalizarse con endHash.

Parámetros
AlgIdAlgoritmo hash
Notas
La operación piecewise DEBE ser inicializada con initHash, los datos pasados con updateHash y finalizada con endHash.
updateHash puede llamarse una o varias veces hasta que se envíe todo el contenido del mensaje y, a continuación, endHash para finalizar la operación y generar el hash.
Una operación multiparte no puede intercalarse con otras operaciones dentro de la misma sesión hasta que finalice con endHash.
Excepciones
DinamoExceptionLanza una excepción en caso de error.

updateHash()

void updateHash ( byte[] Data)
inline

Actualiza una operación HASH con más datos.

Parámetros
DataMensaje
Notas
La operación piecewise DEBE ser inicializada con initHash, los datos pasados con updateHash y finalizada con endHash.
updateHash puede llamarse una o varias veces hasta que se envíe todo el contenido del mensaje y, a continuación, endHash para finalizar la operación y generar el hash.
Una operación multiparte no puede intercalarse con otras operaciones dentro de la misma sesión hasta que finalice con endHash.
Excepciones
DinamoExceptionLanza una excepción en caso de error.
Ejemplos
generar_hash.cs.

endHash()

byte[] endHash ( )
inline

Finaliza una operación HASH.

Devolución
HASH generado
Notas
La operación piecewise DEBE ser inicializada con initHash, los datos pasados con updateHash y finalizada con endHash.
updateHash puede llamarse una o varias veces hasta que se envíe todo el contenido del mensaje y, a continuación, endHash para finalizar la operación y generar el hash.
Una operación multiparte no puede intercalarse con otras operaciones dentro de la misma sesión hasta que finalice con endHash.
Excepciones
DinamoExceptionLanza una excepción en caso de error.

HashData()

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

Busca el hash de un dato y lo asocia al manejador del hash.

Parámetros
hHashIntPtr Puntero al recurso hash
byDataDatos en bytes
Excepciones
DinamoExceptionLanza una excepción en caso de error.

Hash()

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

Devuelve el hash de un dato.

Parámetros
algAlgoritmo hash
dataDatos en bytes
Devolución
Valor hash en bytes
Excepciones
DinamoExceptionLanza una excepción en caso de error.
Ejemplos
sign_hash.cs.

DestruirHash()

void DestroyHash ( IntPtr hHash)
inline

Libera el manejador del recurso hash.

Parámetros
hHashIntPtr Puntero al recurso hash
Excepciones
DinamoExceptionLanza una excepción en caso de error.

FirmaLote() [1/2]

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

Envía un lote de bloques para su firma en el HSM.

Parámetros
strKeyIdNombre clave.
pbBlockMatriz de bytes que contiene los bloques que serán concatenados con signo y con los rellenos apropiados realizados. Añade el relleno cero de tamaño DN_BATCH_SIGN_BLOCK_HEADER al principio de esta matriz de bloques. La estructura debe ser la siguiente Relleno cero de tamaño DN_BATCH_SIGN_BLOCK_HEADER | BLOQUE 1 | BLOQUE 2 | BLOQUE 3 | ... Los bloques con signo se devolverán en las mismas posiciones que los bloques de entrada.
dwBlockCountNúmero de bloques contenidos en pbBlock.
dwFlagsReservado para uso futuro (debe ser 0).
Excepciones
DinamoExceptionLanza una excepción en caso de error.
Ejemplos
batchsign.cs.

FirmaLote() [2/2]

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

Envía un lote de bloques para su firma en el HSM.

Parámetros
hPrivateKeyContexto clave.
pbBlockMatriz de bytes que contiene los bloques que serán concatenados con signo y con los rellenos apropiados realizados. Añade el relleno cero de tamaño DN_BATCH_SIGN_BLOCK_HEADER al principio de esta matriz de bloques. La estructura debe ser la siguiente Relleno cero de tamaño DN_BATCH_SIGN_BLOCK_HEADER | BLOQUE 1 | BLOQUE 2 | BLOQUE 3 | ... Los bloques con signo se devolverán en las mismas posiciones que los bloques de entrada.
dwBlockCountNúmero de bloques contenidos en pbBlock.
dwFlagsReservado para uso futuro (debe ser 0).
Excepciones
DinamoExceptionLanza una excepción en caso de error.

SignHash() [1/5]

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

Firma un hash.

Parámetros
keyIdIdentificador de clave privada
bHashMatriz con hash
algHashAlgoritmo hash utilizado. Ver: HASH_ALG
Devolución
matriz de bytes
Excepciones
DinamoExceptionLanza una excepción en caso de error.
Ejemplos
block_object.cs y sign_hash.cs.

SignHash() [2/5]

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

Firma un hash.

Parámetros
keyIdIdentificador de clave privada
bHashMatriz con hash
algHashAlgoritmo hash utilizado. Ver: HASH_ALG
dwFlagsOpciones de suscripción, puede ser 0 o más de uno de los valores siguientes:
Valor Significado
DinamoApi.DN_SIGN_NO_HASH_OID Cuando se especifica este indicador, el identificador de objeto (OID) no se coloca delante del valor hash, como se prevé en PKCS#7, atributo DigestInfo.
Por defecto, este valor se añade siempre a la firma. Sólo para firmas RSA.
DinamoApi.DN_SIGN_DISABLE_LEGACY_OPERATION Cuando se especifica este indicador, la API de cliente utiliza las versiones más recientes de la implementación de firma del HSM. Se utiliza con HSM de la versión 4.0 o superior.
Por defecto, este indicador está desactivado por motivos de compatibilidad. Los algoritmos de firma más recientes utilizarán automáticamente la implementación más reciente y es posible que los HSM más antiguos no los admitan.
DinamoApi.DN_SIGN_ECC_P11_FMT Utiliza el formato de firma ECC PKCS#11 v2.40 sección 2.3.1.
Devolución
matriz de bytes
Excepciones
DinamoExceptionLanza una excepción en caso de error.

SignHash() [3/5]

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

SignHash() [4/5]

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

Firma un hash.

Parámetros
hHashPuntero al recurso hash
hPrivateKeyPuntero a la clave privada
Devolución
Firma como matriz de bytes.
Excepciones
DinamoExceptionLanza una excepción en caso de error.

SignHash() [5/5]

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

Firma un hash.

Parámetros
hHashPuntero al recurso hash
hPrivateKeyPuntero a la clave privada
dwFlagsOpciones de suscripción, puede ser 0 o más de uno de los valores siguientes:
Valor Significado
DinamoApi.DN_SIGN_NO_HASH_OID Cuando se especifica este indicador, el identificador de objeto (OID) no se coloca delante del valor hash, como se prevé en PKCS#7, atributo DigestInfo.
Por defecto, este valor se añade siempre a la firma. Sólo para firmas RSA.
DinamoApi.DN_SIGN_DISABLE_LEGACY_OPERATION Cuando se especifica este indicador, la API de cliente utiliza las versiones más recientes de la implementación de firma del HSM. Se utiliza con HSM de la versión 4.0 o superior.
Por defecto, este indicador está desactivado por motivos de compatibilidad. Los algoritmos de firma más recientes utilizarán automáticamente la implementación más reciente y es posible que los HSM más antiguos no los admitan.
DinamoApi.DN_SIGN_ECC_P11_FMT Utiliza el formato de firma ECC PKCS#11 v2.40 sección 2.3.1.
Devolución
Firma como matriz de bytes.
Excepciones
DinamoExceptionLanza una excepción en caso de error.

VerificarFirma()

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

Comprueba una firma.

Parámetros
hHashPuntero al recurso hash
hPublicKeyPuntero al recurso de clave pública
bySignatureConjunto de firmas
Devolución
True en caso de validación de firma ok
Excepciones
DinamoExceptionLanza una excepción en caso de error.

SetHashValue()

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

Almacena un hash.

Parámetros
hHashPuntero al recurso hash
ValueValor hash
Excepciones
DinamoExceptionLanza una excepción en caso de error.

GetHashValue()

byte[] GetHashValue ( IntPtr hHash)
inline

Devuelve el valor hash.

Parámetros
hHashPuntero al recurso hash
Devolución
Matriz con hash
Excepciones
DinamoExceptionLanza una excepción en caso de error.

GetRandom()

byte[] GetRandom ( Int32 dwReturnLen)
inline

Devuelve un número aleatorio del generador HSM.

Parámetros
dwReturnLenTamaño en bytes del número aleatorio
Devolución
Matriz de bytes del número aleatorio encontrado
Excepciones
DinamoExceptionLanza una excepción en caso de error.

MofNSplit()

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

Divide M de N en secreto. Según el estándar de compartición de secretos de Shamir.

Parámetros
bMNúmero mínimo de partes necesarias para reconstruir el secreto. Mínimo de DinamoApi . DN_M_OF_N_S_MIN y máximo de DinamoApi.DN_M_OF_N_S_MAX.
bNNúmero total de piezas a generar.
pbSecretSecreto que se va a compartir. Debe tener el tamaño DinamoApi.DN_M_OF_N_S_LEN. Se puede pasar nulo para que el HSM genere un secreto aleatoriamente.
Devolución
Información sobre la división del secreto.
Excepciones
DinamoExceptionLanza una excepción en caso de error.
Ejemplos
m_de_n.cs.

MofNRecuperar()

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

Reconstruye el secreto M de N a partir de las partes de los custodios. Según el patrón de compartición de secretos de Shamir.

Parámetros
partsConjunto de piezas secretas.
Devolución
Secreto reconstruido.
Excepciones
DinamoExceptionLanza una excepción en caso de error.
Ejemplos
m_de_n.cs.