Operaciones criptográficas: API de GREP11
IBM Cloud® Hyper Protect Crypto Services proporciona un conjunto de funciones de criptografía que se ejecutan en un Módulo de seguridad de hardware(HSM)A physical appliance that provides on-demand encryption, key management, and key storage as a managed service. en la nube. Puede realizar operaciones criptográficas accediendo de forma remota a estas funciones con Enterprise PKCS #11 (EP11) a través de llamadas de API de gRPC (también denominada GREP11).
Para obtener más información sobre la relación que guardan las funciones de GREP11 con PKCS #11 y EP11, consulte Introducción a GREP11.
La API GREP11 puede procesar hasta 500 solicitudes/segundo para una única unidad criptográfica.
Acceso a la API
Un punto final de API GREP11, una clave de API de ID de servicio, un punto final de IAM son necesarios para la inicialización antes de realizar cualquier llamada de función de API GREP11. Para obtener más información, consulte Generación de una solicitud de API de GREP11.
Manejo de errores
GREP11 se basa en la especificación gRPC para el manejo de errores. Cuando se produce un error, los clientes gRPC reciben un almacenamiento intermedio de protocolo message Status.
message Status {
int32 code = 1;
string message = 2;
repeated google.protobuf.Any details = 3;
}
En el mensaje de error,
codeincluye el código de estado, que debe ser un valor de tipo enumerado (enum) del campogoogle.rpc.Code.messageincluye un mensaje de error para el desarrollador en inglés. Cualquier mensaje de error dirigido al usuario debe ser localizado y enviado en el campogoogle.rpc.Status.details, o localizado por el usuario.detailsofrece una lista de mensajes con los detalles del error. Hay disponible un conjunto típico de tipos de mensajes para que lo utilice la API.
GREP11 utiliza el campo Detail para adjuntar información de código de error adicional.
message Grep11Error {
uint64 Code = 1;
string Detail = 2;
bool Retry = 3;
}
El campo Code se puede convertir al valor CK_RV en PKCS #11. Este campo contiene los códigos de error definidos por la especificación PKCS #11 o las extensiones de proveedor definidas por EP11. EP11 utiliza solamente un subconjunto de valores de devolución que define PKCS #11. Para obtener más información, consulte la sección
Valores de retorno 10.1.6 en la publicación Enterprise PKCS #11 Library structure.
Hay disponible un ejemplo en Golang que trata los errores.
Lista de funciones de GREP11
Las funciones de PKCS #11 que están marcadas con un asterisco (*) en la tabla se implementan mediante EP11 a través de gRPC. Otras no se implementan.
| PKCS #11 | Enterprise PKCS #11 | Enterprise PKCS #11 a través de gRPC | Descripción |
|---|---|---|---|
| C_Initialize | N/D | N/D | Inicializa Cryptoki. |
| C_Finalize | N/D | N/D | Limpia los recursos varios asociados con Cryptoki. |
| C_GetInfo | N/D | N/D | Obtiene información general a través de Cryptoki. |
| C_GetFunctionList | N/D | N/D | Obtiene puntos de entrada de las funciones de biblioteca de Cryptoki. |
| C_GetSlotList | N/D | N/D | Obtiene una lista de ranuras en el sistema. |
| C_GetSlotInfo | N/D | N/D | Obtiene información sobre una ranura en particular. |
| C_GetTokenInfo | N/D | N/D | Obtiene información sobre una señal en particular. |
| C_WaitForSlotEvent | N/D | N/D | Espera a que se genere un suceso de ranura (inserción de señal, eliminación, etc.). |
| C_GetMechanismList* | m_GetMechanismList | GetMechanismList | Obtiene una lista de los mecanismos soportados por una señal. |
| C_GetMechanismInfo* | m_GetMechanismInfo | GetMechanismInfo | Obtiene información sobre un mecanismo en particular. |
| C_InitToken | N/D | N/D | Inicializa una señal. |
| C_InitPIN | N/D | N/D | Inicializa el PIN de usuario normal. |
| C_SetPIN | N/D | N/D | Modifica el PIN del usuario actual. |
| C_OpenSession | N/D | N/D | Abre una conexión entre una aplicación y una señal en particular o configurar una devolución de llamada de aplicación para la inserción de señales. |
| C_CloseSession | N/D | N/D | Cierra una sesión. |
| C_CloseAllSessions | N/D | N/D | Cierra todas las sesiones con una señal. |
| C_GetSessionInfo | N/D | N/D | Obtiene información sobre la sesión. |
| C_GetOperationState | N/D | N/D | Obtiene el estado de las operaciones criptográficas de una sesión. |
| C_SetOperationState | N/D | N/D | Defina el estado de las operaciones criptográficas de una sesión. |
| C_Login | N/D | N/D | Inicia sesión en una señal. |
| C_Logout | N/D | N/D | Finaliza la sesión de una señal. |
| C_CreateObject | N/D | N/D | Crea un objeto. |
| C_CopyObject | N/D | N/D | Crea una copia de un objeto. |
| C_DestroyObject | N/D | N/D | Destruye un objeto. |
| C_GetObjectSize | N/D | N/D | Obtiene el tamaño de un objeto en bytes. |
| C_GetAttributeValue* | m_GetAttributeValue | GetAttributeValue | Obtiene un valor de atributo de un objeto. |
| C_SetAttributeValue* | m_SetAttributeValue | SetAttributeValue | Modifica un valor de atributo de un objeto. Sólo se pueden modificar los atributos booleanos. |
| C_FindObjectsInit | N/D | N/D | Inicializa una operación de búsqueda de objetos. |
| C_FindObjects | N/D | N/D | Continúa una operación de búsqueda de objetos. |
| C_FindObjectsFinal | N/D | N/D | Finaliza una operación de búsqueda de objetos. |
| C_EncryptInit* | m_EncryptInit | EncryptInit | Inicializa una operación de cifrado. |
| C_Encrypt* | m_Encrypt | Cifrar | Cifra los datos de una sola parte. |
| C_EncryptUpdate* | m_EncryptUpdate | EncryptUpdate | Continúa una operación de cifrado de varias partes. |
| C_EncryptFinal* | m_EncryptFinal | EncryptFinal | Finaliza una operación de cifrado de varias partes. |
| N/D | m_EncryptSingle | EncryptSingle | Extensión de IBM, variante no estándar de Encrypt. Procesa los datos de un paso con una llamada. No devuelve ningún estado al host que no sean datos cifrados. |
| N/D | m_ReencryptSingle | ReencryptSingle | Extensión de IBM, variante no estándar de Encrypt. Descifra los datos con la clave original y cifra los datos en bruto con una clave diferente en una sola llamada dentro de la nube de HSM. No devuelve ningún estado al host
que no sea los datos que se han vuelto a cifrar. |
| C_DecryptInit* | m_DecryptInit | DecryptInit | Inicializa una operación de descifrado. |
| C_Decrypt* | m_Decrypt | Descifrar | Descifra datos cifrados de una sola parte. |
| C_DecryptUpdate* | m_DecryptUpdate | DecryptUpdate | Continúa una operación de descifrado de varias partes. |
| C_DecryptFinal* | m_DecryptFinal | DecryptFinal | Finaliza una operación de descifrado de varias partes. |
| N/D | m_DecryptSingle | DecryptSingle | Extensión de IBM, variante no estándar de Decrypt. Procesa los datos de un paso con una llamada. No devuelve ningún estado al host que no sean datos descifrados. |
| C_DigestInit* | m_DigestInit | DigestInit | Inicializa una operación de resumen de mensajes. |
| C_Digest* | m_Digest | Digest | Resume los datos de una sola parte. La longitud de los datos de entrada no puede ser cero y el puntero que apunta a la ubicación de datos de entrada no puede ser NULL. |
| C_DigestUpdate* | m_DigestUpdate | DigestUpdate | Continúa una operación de resumen de varias partes. La longitud de los datos de entrada no puede ser cero y el puntero que apunta a la ubicación de datos de entrada no puede ser NULL. |
| C_DigestKey | N/D | N/D | Resume una clave. |
| C_DigestFinal* | m_DigestFinal | DigestFinal | Finaliza una operación de resumen de varias partes. |
| N/D | m_DigestSingle | DigestSingle | Combinación de extensión no estándar y extensión de IBM de DigestInit y Digest. Resume datos de un paso con una llamada, sin crear un estado de resumen intermedio ni viajes de ida y vuelta innecesarios |
| C_SignInit* | m_SignInit | SignInit | Inicializa una operación de firma. |
| C_Sign* | m_Sign | Signo | Firma datos de una sola parte. |
| C_SignUpdate* | m_SignUpdate | SignUpdate | Continúa una operación de firma de varias partes. |
| C_SignFinal* | m_SignFinal | SignFinal | Finaliza una operación de firma de varias partes. |
| C_SignRecoverInit | N/D | N/D | Inicializa una operación de firma, donde los datos se recuperan de la firma. |
| C_SignRecover | N/D | N/D | Firma datos de una sola parte, donde los datos se recuperan de la firma. |
| N/D | m_SignSingle | SignSingle | Combinación de extensión no estándar y extensión de IBM de SignInit y Sign. Firma o calcula el MAC de los datos de un paso con una llamada sin crear ningún estado de resumen intermedio. No devuelve ningún estado al host que no sea el resultado. |
| C_VerifyInit* | m_VerifyInit | VerifyInit | Inicializa una operación de verificación. |
| C_Verify* | m_Verify | Verificar | Verifica una firma en datos de una sola parte. |
| C_VerifyUpdate* | m_VerifyUpdate | VerifyUpdate | Continúa una operación de verificación de varias partes. |
| C_VerifyFinal* | m_VerifyFinal | VerifyFinal | Finaliza una operación de verificación de varias partes. |
| C_VerifyRecoverInit | N/D | N/D | Inicializa una operación de verificación en la que los datos se recuperan de la firma. |
| C_VerifyRecover | N/D | N/D | Verifica una firma en datos de una sola parte, donde los datos se recuperan de la firma. |
| N/D | m_VerifySingle | VerifySingle | Combinación de extensión no estándar y extensión de IBM de VerifyInit y Verify. Firma o calcula el MAC de los datos de un paso con una llamada sin crear ningún estado de resumen intermedio. No devuelve ningún estado al host que no sea el resultado de la verificación. |
| C_DigestEncryptUpdate | N/D | N/D | Continúa las operaciones simultáneas de resumen y cifrado de varias partes. |
| C_DecryptDigestUpdate | N/D | N/D | Continúa las operaciones simultáneas de descifrado y resumen de varias partes. |
| C_SignEncryptUpdate | N/D | N/D | Continúa las operaciones simultáneas de firma y cifrado de varias partes. |
| C_DecryptVerifyUpdate | N/D | N/D | Continúa las operaciones simultáneas de descifrado y verificación de varias partes. |
| C_GenerateKey* | m_GenerateKey | GenerateKey | Genera una clave secreta. |
| C_GenerateKeyPair* | m_GenerateKeyPair | GenerateKeyPair | Genera un par de clave pública y clave privada. |
| C_WrapKey* | m_WrapKey | WrapKey | Envuelve (cifra) una clave. |
| C_UnwrapKey* | m_UnwrapKey | UnwrapKey | Desenvuelve (descifra) una clave. |
| N/D | N/D | RewrapKeyBlob | Transfiere la propiedad de un BLOB controlado por la clave maestra actual a la nueva clave maestra cuando se confirma la nueva clave maestra. Esta función es un mandato de administración especial que solo está soportado por GREP11. |
| C_DeriveKey* | m_DeriveKey | DeriveKey | Deriva una clave de una clave base. |
| C_SeedRandom | N/D | N/D | Añade material de inicio al generador de números aleatorios. |
| C_GenerateRandom* | m_GenerateRandom | GenerateRandom | Genera datos aleatorios. La longitud de los datos aleatorios no puede ser cero y el valor del puntero que apunta a la ubicación de los datos aleatorios no puede ser NULL. La longitud máxima de los datos aleatorios que se pueden solicitar es de 1 millón de bytes. |
| C_GetFunctionStatus | N/D | N/D | Función heredada que siempre devuelve CKR_FUNCTION_NOT_PARALLEL. |
| C_CancelFunction | N/D | N/D | Función heredada que siempre devuelve CKR_FUNCTION_NOT_PARALLEL. |
Mecanismos soportados
Un mecanismo se conoce como un proceso para implementar una operación criptográfica. Puede variar en función del nivel de firmware en la tarjeta criptográfica. En la tabla siguiente se muestran los mecanismos soportados actualmente y cómo se relacionan con las categorías de función de GREP11 comunes.
| Grupo de funciones | Mecanismos soportados |
|---|---|
| Cifrar y descifrar | CKM_RSA_PKCS1, CKM_RSA_PKCS_OAEP1, CKM_AES_ECB, CKM_AES_CBC, CKM_AES_CBC_PAD, CKM_DES3_ECB, CKM_DES3_CBC, CKM_DES3_CBC_PAD |
| Firmar y verificar | CKM_RSA_PKCS1, CKM_RSA_PKCS_PSS1, CKM_RSA_X9_311, CKM_SHA1_RSA_PKCS, CKM_SHA256_RSA_PKCS, CKM_SHA224_RSA_PKCS, CKM_SHA384_RSA_PKCS, CKM_SHA512_RSA_PKCS, CKM_SHA1_RSA_PKCS_PSS, CKM_SHA224_RSA_PKCS_PSS, CKM_SHA256_RSA_PKCS_PSS, CKM_SHA384_RSA_PKCS_PSS, CKM_SHA512_RSA_PKCS_PSS, CKM_SHA1_RSA_X9_31, CKM_DSA1, CKM_DSA_SHA1, CKM_ECDSA1, CKM_ECDSA_SHA1, CKM_ECDSA_SHA224, CKM_ECDSA_SHA256, CKM_ECDSA_SHA384, CKM_ECDSA_SHA512, CKM_SHA1_HMAC, CKM_SHA256_HMAC, CKM_SHA384_HMAC, CKM_SHA512_HMAC, CKM_SHA512_224_HMAC, CKM_SHA512_256_HMAC, CKM_IBM_ED25519_SHA5124, CKM_IBM_ECDSA_OTHER2, CKM_IBM_DILITHIUM3 |
| Digest | CKM_SHA_1, CKM_SHA224, CKM_SHA256, CKM_SHA384, CKM_SHA512, CKM_SHA512_224, CKM_SHA512_256 |
| Generar clave o generar par de claves | CKM_RSA_PKCS_KEY_PAIR_GEN, CKM_RSA_X9_31_KEY_PAIR_GEN, CKM_DSA_KEY_PAIR_GEN, CKM_DSA_PARAMETER_GEN, CKM_EC_KEY_PAIR_GEN (CKM_ECDSA_KEY_PAIR_GEN), CKM_DH_PKCS_KEY_PAIR_GEN, CKM_DH_PKCS_PARAMETER_GEN, CKM_GENERIC_SECRET_KEY_GEN, CKM_AES_KEY_GEN, CKM_DES2_KEY_GEN, CKM_DES3_KEY_GEN, CKM_IBM_DILITHIUM |
| Envolver y desenvolver | CKM_RSA_PKCS, CKM_RSA_PKCS_OAEP, CKM_AES_ECB, CKM_AES_CBC, CKM_AES_CBC_PAD, CKM_DES3_ECB, CKM_DES3_CBC, CKM_DES3_CBC_PAD |
| Derive | CKM_ECDH1_DERIVE, CKM_DH_PKCS_DERIVE, CKM_DES3_ECB_ENCRYPT_DATA, CKM_SHA1_KEY_DERIVATION, CKM_SHA224_KEY_DERIVATION, CKM_SHA256_KEY_DERIVATION, CKM_SHA384_KEY_DERIVATION, CKM_SHA512_KEY_DERIVATION, CKM_IBM_BTC_DERIVE |
1: Este mecanismo sólo da soporte a operaciones de una sola parte que no pueden utilizar ninguna de las funciones de actualización de GREP11, como EncryptUpdate, DecryptUpdate y DigestUpdate.
2: Este mecanismo sólo está disponible para las operaciones de GREP11 SignSingle y VerifySingle.
3: Este mecanismo no está soportado por la tarjeta criptográfica IBM 4768 y no está disponible para las operaciones SignUpdate y VerifyUpdate.
4: Este mecanismo da soporte a operaciones de una sola parte (SignInit, Sign, VerifyInit, Verify), SignSingle y VerifySingle.
Atributos y tipos de claves soportados
Los atributos de GREP11 definen características de objeto que configuran cómo se puede utilizar y acceder a un objeto. En la tabla siguiente se muestran los atributos soportados y su relación con los distintos tipos de claves soportados.
| Atributo | Descripción | Tipos de claves soportados |
|---|---|---|
| CKA_CHECK_VALUE | La suma de comprobación de la clave | Claves AES, claves DES |
| CKA_COPYABLE | Si se establece en CKA_TRUE, el objeto se puede copiar utilizando la función PKCS#11 C_CopyObject | Claves privadas EC, claves públicas CE, claves privadas RSA, claves públicas RSA, claves privadas DH, claves públicas DH, claves privadas DSA, claves públicas DSA, claves AES, claves DES, claves genéricas |
| CKA_DECRYPT | CK_TRUE si la clave da soporte al descifrado. | Claves privadas EC, claves privadas RSA, claves privadas DH, claves privadas DSA, claves AES, claves DES, claves genéricas |
| CKA_DERIVE | CK_TRUE si la clave da soporte a la derivación de claves (otras claves se pueden derivar de esta clave). El valor predeterminado es CK_FALSE. | Claves privadas EC, claves públicas CE, claves privadas RSA, claves públicas RSA, claves privadas DH, claves públicas DH, claves privadas DSA, claves públicas DSA, claves AES, claves DES, claves genéricas |
| CKA_EC_PARAMS (CKA_ECDSA_PARAMS) | Codificación DER de un valor de parámetros ANSI X9.62. | Claves privadas CE, claves públicas CE |
| CKA_ENCRYPT | CK_TRUE si la clave da soporte al cifrado. | Claves públicas EC, claves públicas RSA, claves públicas DH, claves públicas DSA, claves AES, claves DES, claves genéricas |
| CKA_EXTRACTABLE | CK_TRUE si la clave es extraíble y se puede encapsular. | Claves privadas EC, claves privadas RSA, claves privadas DH, claves privadas DSA, claves AES, claves DES, claves genéricas |
| CKA_IBM_PQC_PARAMS | Parámetros de soporte para mecanismos de criptografía postcuántica. En el caso del mecanismo de Dilithium CKM_IBM_DILITHIUM, proporciona un identificador de objeto convertido (OID) que representa la intensidad del algoritmo
Dilithium que se va a utilizar. Actualmente, solo se admite la fuerza de Dilithium 4 round 2. |
Claves de Dilithium |
| CKA_KEY_TYPE | Tipo de clave. | Claves privadas EC, claves públicas CE, claves privadas RSA, claves públicas RSA, claves privadas DH, claves públicas DH, claves privadas DSA, claves públicas DSA, claves AES, claves DES, claves genéricas |
| CKA_LOCAL | CK_TRUE sólo si la clave se ha generado localmente (en la señal) con una llamada de C_GenerateKey o C_GenerateKeyPair o se ha creado con una llamada de C_CopyObject como una copia de una clave, que
tenía su atributo CKA_LOCAL establecido en CK_TRUE. |
Claves privadas EC, claves públicas CE, claves privadas RSA, claves públicas RSA, claves privadas DH, claves públicas DH, claves privadas DSA, claves públicas DSA, claves AES, claves DES, claves genéricas |
| CKA_MODIFIABLE | Establézcalo en CK_TRUE si el objeto se puede modificar. | Claves privadas EC, claves públicas CE, claves privadas RSA, claves públicas RSA, claves privadas DH, claves públicas DH, claves privadas DSA, claves públicas DSA, claves AES, claves DES, claves genéricas |
| CKA_MODULUS_BITS | Longitud en bits del módulo n. | Claves públicas RSA |
| CKA_PUBLIC_EXPONENT | Exponente público e. | Claves privadas RSA |
| INFORMACIÓN_CLAVE_PÚBLICA_CKM | Codificación DER de SubjectPublicKeyInfo para la clave pública. El valor se deriva de los datos de clave pública subyacentes y está vacío de forma predeterminada. | Claves públicas RSA, claves públicas EC |
| CKA_SIGN | CK_TRUE si la clave da soporte a la firma donde la firma es un apéndice de los datos. | Claves privadas EC, claves privadas RSA, claves privadas DH, claves privadas DSA, claves AES, claves DES, claves genéricas |
| CKA_TRUSTED | Se puede confiar en el certificado o la clave para la aplicación que se ha creado. | Claves públicas EC, claves públicas RSA, claves públicas DH, claves públicas DSA, claves AES, claves DES, claves genéricas |
| CKA_UNWRAP | CK_TRUE si la clave da soporte al desenvolvimiento (se puede utilizar para desenvolver otras claves). | Claves privadas EC, claves privadas RSA, claves privadas DH, claves privadas DSA, claves AES, claves DES, claves genéricas |
| CKA_VALUE_LEN | Longitud en bytes del valor de clave. | Claves AES |
| CKA_VERIFY | CK_TRUE si la clave da soporte a la verificación donde la firma es un apéndice de los datos. | Claves públicas EC, claves públicas RSA, claves públicas DH, claves públicas DSA, claves AES, claves DES, claves genéricas |
| CKA_WRAP | CK_TRUE si la clave da soporte al envolmimiento (se puede utilizar para envolver otras claves). | Claves públicas EC, claves públicas RSA, claves públicas DH, claves públicas DSA, claves AES, claves DES, claves genéricas |
| CKA_WRAP_WITH_TRUSTED | CK_TRUE si la clave solo se puede envolver con una clave de envoltura que tiene establecido CKA_TRUSTED en CK_TRUE. El valor predeterminado es CK_FALSE. | Claves privadas EC, claves privadas RSA, claves privadas DH, claves privadas DSA, claves AES, claves DES, claves genéricas |
Curvas soportadas
La biblioteca EP11 admite tipos de curvas limitados para determinados mecanismos. En la tabla siguiente se muestran los nombres de curvas soportados para diferentes mecanismos. El número en el nombre de la curva significa el recuento de bits principal soportado.
Curvas soportadas para generar las claves de curva elíptica (EC)
El mecanismo CKM_EC_KEY_PAIR_GEN está soportado cuando se invoca la función GenerateKeyPair para generar claves de curva elíptica (EC). Los parámetros de nombre de curva se deben especificar como identificadores de
objetos (OID) utilizando CKA_EC_PARAMS. Puede obtener el OID buscando el nombre de curva en el repositorio de OID.
| Mecanismo de GREP11 | Tipos de curva soportados | Nombres de curva soportados |
|---|---|---|
| CKM_EC_KEY_PAIR_GEN | Curvas del Instituto Nacional de Estándares y Tecnología(NIST) |
|
| CKM_EC_KEY_PAIR_GEN | Curvas de agrupación cerebral regular(BP) |
|
| CKM_EC_KEY_PAIR_GEN | Curvas de agrupación de cerebros retorcidos(BP) |
|
| CKM_EC_KEY_PAIR_GEN | Curvas SEC(Standards for Eficiente Cryptography) |
|
| CKM_EC_KEY_PAIR_GEN | Curvas de Edwards |
|
Curvas soportadas para cifrar activos digitales y generar firmas
Las curvas siguientes están soportadas para los mecanismos relacionados con el activo digital y la firma digital.
| Norma y régimen | Mecanismo de GREP11 | Tipos de curva soportados | Nombres de curva soportados |
|---|---|---|---|
| BIP32/BIP44 | CKM_IBM_BTC_XX_ENCODE_CASE_ONE derivE | Curvas SEC(Standards for Eficiente Cryptography) |
|
| SLIP10 | CKM_IBM_BTC_XX_ENCODE_CASE_ONE derivE | Curvas del Instituto Nacional de Estándares y Tecnología(NIST) |
|
| SLIP10 | CKM_IBM_BTC_XX_ENCODE_CASE_ONE derivE | Curvas SEC(Standards for Eficiente Cryptography) |
|
| SLIP10 | CKM_IBM_BTC_XX_ENCODE_CASE_ONE derivE | Curvas de Edwards |
|
| EdDSA | CKM_IBM_ED25519_SHA512 | Curvas de Edwards |
|
| Schnorr | CKM_IBM_ECDSA_OTHER | Curvas SEC(Standards for Eficiente Cryptography) |
|
| Schnorr | CKM_IBM_ECDSA_OTHER | Curvas del Instituto Nacional de Estándares y Tecnología(NIST) |
|
| Schnorr | CKM_IBM_ECDSA_OTHER | Curvas de agrupación cerebral regular(BP) |
|
| Schnorr | CKM_IBM_ECDSA_OTHER | Curvas de agrupación de cerebros retorcidos(BP) |
|
| Schnorr | ECSG_IBM_ECSDSA_S256 |
|
|
| Schnorr-Zilliqa | ECSG_IBM_ECSDSA_COMPR_MULTI |
|
Realización de operaciones criptográficas con funciones de GREP11
Puede realizar operaciones criptográficas llamando a las funciones de GREP11 definidas en función de la implementación EP11 de la especificación PKCS #11. Las siguientes descripciones de función se crean basándose en la especificación PKCS #11, con notas específicas de EP11. Todas las definiciones de parámetros están en el formato original de EP11. Para obtener más información sobre EP11, consulte Estructura de biblioteca de Enterprise PKCS #11(EP11).
Los parámetros de las funciones de EP11 se correlacionan con los tipos de almacenamiento intermedio de protocolos que se pueden hallar en las siguientes funciones. Puede obtener más información sobre los tipos de almacenamiento intermedio de protocolo en Google Developers.
Como la biblioteca de EP11 es un subconjunto de la biblioteca de API de PKCS #11 y las funciones de GREP11 son variantes de las correspondientes funciones de EP11, estas funciones de EP11 y las de PKCS #11 también aparecen en la lista de las tablas de funciones de GREP11 para su referencia.
GREP11 da soporte a cualquier lenguaje de programación con una biblioteca gRPC. En la etapa actual, en la referencia de API solo se incluyen fragmentos de código o ejemplos para Golang y JavaScript. El contenido se enriquece en fases posteriores. Los fragmentos de código están basados en los siguientes repositorios de GitHub externos que proporcionan ejemplos completos para utilizar la API de GREP11. Algunos fragmentos de código hacen referencia a las funciones de ayuda en los repositorios de ejemplos.
Recuperación de algoritmos criptográficos soportados
Puede utilizar las siguientes funciones para recuperar algoritmos criptográficos o mecanismos soportados por GREP11. Con esta información, puede comprender los mecanismos específicos que se pueden establecer cuando se llama a una función. Para ver la lista completa de mecanismos soportados, también puede consultar los mecanismos categorizados por grupos de funciones.
GetMechanismList
La función GetMechanismList obtiene una lista de tipos de mecanismos soportados por una señal.
| Descripción | Enlaza a EP11 m_GetMechanismList, que es una implementación de PKCS #11 C_GetMechanismList. |
|
|---|---|---|
| Parámetros |
message GetMechanismListRequest {
}
message GetMechanismListResponse {
repeated uint64 Mechs = 2;
}
|
|
| Valores de retorno | Envuelve el error de EP11 en el mensaje Grep11Error. |
| Descripción | Implementación de C_GetMechanismList de PKCS #11.
|
|---|---|
| Parámetros |
CK_RV m_GetMechanismList (
CK_SLOT_ID slot,
CK_MECHANISM_TYPE_PTR mechs, CK_ULONG_PTR mechslen,
destino target_t
);
|
| Valores de retorno | Un subconjunto de los valores de retorno de C_GetMechanismList. Para obtener más información, consulte el capítulo Valores de retorno del documento de estructura de biblioteca PKCS #11 (EP11) Enterprise. |
| Descripción |
Hay dos formas disponibles para que una aplicación llame a
Dado que |
|---|---|
| Parámetros |
CK_DEFINE_FUNCTION(CK_RV, C_GetMechanismList)(
CK_SLOT_ID slotID,
CK_MECHANISM_TYPE_PTR pMechanismList,
CK_ULONG_PTR pulCount
);
|
| Valores de retorno | CKR_BUFFER_TOO_SMALL, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_SLOT_ID_INVALID, CKR_TOKEN_NOT_PRESENT, CKR_TOKEN_NOT_RECOGNIZED, CKR_ARGUMENTS_BAD. |
Fragmentos de código
-
Fragmento de código de Golang
GetMechanismListRequest := &pb.GetMechanismListRequest { } GetMechanismListResponse, err := cryptoClient.GetMechanismList(context.Background(), GetMechanismListRequest) -
Fragmento de código de JavaScript
client.GetMechanismList({}, (err, data) => { if (err) throw err; console.log('MECHANISMS:', data.Mechs); });
GetMechanismInfo
La función GetMechanismInfo obtiene información sobre un mecanismo en particular.
| Descripción | Enlaza a EP11 m_GetMechanismInfo, que es una implementación de PKCS #11 C_GetMechanismInfo. |
|
|---|---|---|
| Parámetros |
message GetMechanismInfoRequest {
uint64 Mech = 2;
}
message GetMechanismInfoResponse {
MechanismInfo MechInfo = 3;
}
|
|
| Valores de retorno | Envuelve el error de EP11 en el mensaje Grep11Error. |
| Descripción | Implementación de C_GetMechanismInfo de PKCS #11.
|
|---|---|
| Parámetros |
CK_RV m_GetMechanismInfo (
CK_SLOT_ID slot,
CK_MECHANISM_TYPE mech,
CK_MECHANISM_INFO_PTR mechInfo,
destino target_t
);
|
| Valores de retorno | Un subconjunto de los valores de retorno de C_GetMechanismInfo. Para obtener más información, consulte el capítulo Valores de retorno del documento de estructura de biblioteca PKCS #11 (EP11) Enterprise. |
| Descripción |
|
|---|---|
| Parámetros |
CK_DEFINE_FUNCTION(CK_RV, C_GetMechanismInfo)(
CK_SLOT_ID slotID,
CK_MECHANISM_TYPE type,
CK_MECHANISM_INFO_PTR pInfo
);
|
| Valores de retorno | CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_MECHANISM_INVALID, CKR_OK, CKR_SLOT_ID_INVALID, CKR_TOKEN_NOT_PRESENT, CKR_TOKEN_NOT_RECOGNIZED, CKR_ARGUMENTS_BAD. |
Fragmentos de código
-
Fragmento de código de Golang
GetMechanismInfoRequest := &pb.GetMechanismInfoRequest { Mech: ep11.CKM_RSA_PKCS, } GetMechanismInfoResponse, err := cryptoClient.GetMechanismInfo(context.Background(), GetMechanismInfoRequest) -
Fragmento de código de JavaScript
client.GetMechanismInfo({ Mech: ep11.CKM_AES_KEY_GEN }, (err, data) => { if (err) throw err; console.log('MECHANISM INFO:', data.MechInfo); });
Generación y derivación de claves
GREP11 proporciona las funciones siguientes para generar claves criptográficas simétricas y asimétricas. En función del mecanismo y la longitud de clave que especifique, puede generar varios tipos de claves para diferentes usos. También puede derivar una clave de una clave base para estirar claves en claves más largas o para obtener claves de un formato necesario.
GenerateKey
La función GenerateKey genera una clave secreta para el cifrado simétrico.
| Descripción | Enlaza con m_GenerateKey de EP11, que es una implementación de C_GenerateKey de PKCS #11. |
|
|---|---|---|
| Parámetros |
message GenerateKeyRequest {
Mechanism Mech = 1;
map<uint64,AttributeValue> Template = 6;
}
message GenerateKeyResponse {
bytes KeyBytes = 4;
bytes CheckSum = 5;
}
|
|
| Valores de retorno | Envuelve el error de EP11 en el mensaje Grep11Error. |
| Descripción |
Implementación de Las claves TDES se generan con una paridad adecuada, que no puede observar el host. Pero es necesaria para una interoperatividad adecuada: otras implementaciones de PKCS #11 se necesitan para rechazar las claves DES con problemas de paridad. Si un objeto está vinculado a una sesión,
La generación de parámetros DSA y DH hace caso omiso de Parámetros DSA, DH ( El blob PKCS #11 |
|---|---|
| Parámetros |
CK_RV m_GenerateKey (
CK_MECHANISM_PTR mech,
CK_ATTRIBUTE_PTR template, CK_ULONG templatelen,
const unsigned char *pin, size_t pinlen,
unsigned char * key, size_t * keylen,
unsigned char *checkSum, size_t *checkSumlen,
destino target_t
);
|
| Valores de retorno | Un subconjunto de los valores de retorno de C_GenerateKey. Para obtener más información, consulte el capítulo Valores de retorno del documento de estructura de biblioteca PKCS #11 (EP11) Enterprise. |
| Descripción |
Si el mecanismo de generación es para la generación de parámetros de dominio, el atributo Puesto que el tipo de parámetros de clave o dominio que se han de generar está implícito en el mecanismo de generación, no es necesario que la plantilla proporcione ningún tipo de clave. Si proporciona un tipo de clave que es incoherente
con el mecanismo de generación, Si una llamada a El objeto creado por una llamada a |
|---|---|
| Parámetros |
CK_DEFINE_FUNCTION(CK_RV, C_GenerateKey)(
CK_SESSION_HANDLE hSession
CK_MECHANISM_PTR pMechanism,
CK_ATTRIBUTE_PTR pTemplate,
CK_ULONG ulCount,
CK_OBJECT_HANDLE_PTR phKey
);
|
| Valores de retorno | CKR_ARGUMENTS_BAD, CKR_ATTRIBUTE_READ_ONLY, CKR_ATTRIBUTE_TYPE_INVALID, CKR_ATTRIBUTE_VALUE_INVALID, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_CURVE_NOT_SUPPORTED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_MECHANISM_INVALID, CKR_MECHANISM_PARAM_INVALID, CKR_OK, CKR_OPERATION_ACTIVE, CKR_PIN_EXPIRED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_SESSION_READ_ONLY, CKR_TEMPLATE_INCOMPLETE, CKR_TEMPLATE_INCONSISTENT, CKR_TOKEN_WRITE_PROTECTED, CKR_USER_NOT_LOGGED_IN. |
Fragmentos de código
-
Fragmento de código de Golang
// Setup the AES key's attributes keyTemplate := ep11.EP11Attributes{ ep11.CKA_VALUE_LEN: keyLen / 8, ep11.CKA_WRAP: false, ep11.CKA_UNWRAP: false, ep11.CKA_ENCRYPT: true, ep11.CKA_DECRYPT: true, ep11.CKA_EXTRACTABLE: false, } GenerateKeyRequest := &pb.GenerateKeyRequest{ Mech: &pb.Mechanism{Mechanism: ep11.CKM_AES_KEY_GEN}, Template: util.AttributeMap(keyTemplate), } GenerateKeyResponse, err := cryptoClient.GenerateKey(context.Background(), GenerateKeyRequest) -
Fragmento de código de JavaScript
let keyLen = 128; let keyTemplate = new util.AttributeMap( new util.Attribute(ep11.CKA_VALUE_LEN, keyLen / 8), new util.Attribute(ep11.CKA_WRAP, false), new util.Attribute(ep11.CKA_UNWRAP, false), new util.Attribute(ep11.CKA_ENCRYPT, true), new util.Attribute(ep11.CKA_DECRYPT, true), new util.Attribute(ep11.CKA_EXTRACTABLE, false), new util.Attribute(ep11.CKA_TOKEN, true) ); client.GenerateKey({ Mech: { Mechanism: ep11.CKM_AES_KEY_GEN }, Template: keyTemplate, KeyId: uuidv4() }, (err, data={}) => { cb(err, data.KeyBytes, data.CheckSum); });
GenerateKeyPair
La función GenerateKeyPair genera un par de claves públicas y claves privadas.
| Descripción | Enlaza con m_GenerateKeyPair de EP11, que es una implementación de C_GenerateKeyPair de PKCS #11. |
|
|---|---|---|
| Parámetros |
message GenerateKeyPairRequest {
Mechanism Mech = 1;
map<uint64,AttributeValue> PrivKeyTemplate = 7;
map<uint64,AttributeValue> PubKeyTemplate = 8;
}
message GenerateKeyPairResponse {
bytes PrivKeyBytes = 5;
bytes PubKeyBytes = 6;
}
|
|
| Valores de retorno | Envuelve el error de EP11 en el mensaje Grep11Error. |
| Descripción |
Implementación de Los parámetros de par de claves se recuperan de los parámetros En modalidad FIPS, sólo se da soporte a los módulos RSA de 1024+256 La clave pública está formateada como una SPKI estándar (información de clave pública), legible por la mayoría de las bibliotecas. Un MAC específico de la clave de transporte protege la integridad. Dicho MAC no forma parte del propio SPKI. La generación de parámetros DSA devuelve una estructura no SPKI en el campo de clave pública. Si vincula un objeto a una sesión, Devuelve una clave privada envuelta en Las siguientes combinaciones de parámetros soportadas con notas especiales van más allá de lo documentado por PKCS #11: Las claves RSA rechazan los exponentes públicos por debajo de 17 (0x11). Los puntos de control pueden restringir más adelante el mínimo aceptado. El exponente Fermat4, 0x10001, se controla mediante un punto de control específico, que coincide con las restricciones de exponente público de FIPS 186-3 (sección B.3.1). Las claves de EC ( Claves DSA ( Claves DH ( El uso del estado de sesión (Inicio de sesión) sustituye al uso estándar de las sesiones. La correlación está fuera del ámbito de la biblioteca. El blob PKCS #11 PKCS #11 PKCS #11 |
|---|---|
| Parámetros |
CK_RV m_GenerateKeyPair (
CK_MECHANISM_PTR mech,
CK_ATTRIBUTE_PTR pubKeyTemplate, CK_ULONG pubKeyTemplatelen,
CK_ATTRIBUTE_PTR privKeyTemplate, CK_ULONG privKeyTemplatelen,
const unsigned char *pin, size_t pinlen,
unsigned char *privKey, size_t *privKeylen,
unsigned char *pubKey, size_t *pubKeylen,
destino target_t
);
|
| Valores de retorno | Un subconjunto de los valores de retorno de C_GenerateKeyPair. Para obtener más información, consulte el capítulo Valores de retorno del documento de estructura de biblioteca PKCS #11 (EP11) Enterprise. |
| Descripción |
Puesto que los tipos de claves que se van a generar están implícitos en el mecanismo de generación de pares de claves, las plantillas no necesitan proporcionar tipos de clave. Si una de las plantillas proporciona un tipo de clave que
es incoherente con el mecanismo de generación de claves, Si una llamada a Una llamada a Los objetos de clave creados por una llamada satisfactoria a Anote minuciosamente el orden de los argumentos en |
|---|---|
| Parámetros |
CK_DEFINE_FUNCTION(CK_RV, C_GenerateKeyPair)(
CK_SESSION_HANDLE hSession,
CK_MECHANISM_PTR pMechanism,
CK_ATTRIBUTE_PTR pPublicKeyTemplate,
CK_ULONG ulPublicKeyAttributeCount,
CK_ATTRIBUTE_PTR pPrivateKeyTemplate,
CK_ULONG ulPrivateKeyAttributeCount,
CK_OBJECT_HANDLE_PTR phPublicKey,
CK_OBJECT_HANDLE_PTR phPrivateKey
);
|
| Valores de retorno | CKR_ARGUMENTS_BAD, CKR_ATTRIBUTE_READ_ONLY, CKR_ATTRIBUTE_TYPE_INVALID, CKR_ATTRIBUTE_VALUE_INVALID, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_CURVE_NOT_SUPPORTED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_DOMAIN_PARAMS_INVALID, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_MECHANISM_INVALID, CKR_MECHANISM_PARAM_INVALID, CKR_OK, CKR_OPERATION_ACTIVE, CKR_PIN_EXPIRED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_SESSION_READ_ONLY, CKR_TEMPLATE_INCOMPLETE, CKR_TEMPLATE_INCONSISTENT, CKR_TOKEN_WRITE_PROTECTED, CKR_USER_NOT_LOGGED_IN. |
Fragmentos de código
-
Fragmento de código de Golang
// Generate RSA key pair publicExponent := []byte{0x11} publicKeyTemplate := ep11.EP11Attributes{ ep11.CKA_ENCRYPT: true, ep11.CKA_VERIFY: true, ep11.CKA_MODULUS_BITS: 2048, ep11.CKA_PUBLIC_EXPONENT: publicExponent, ep11.CKA_EXTRACTABLE: false, } privateKeyTemplate := ep11.EP11Attributes{ ep11.CKA_PRIVATE: true, ep11.CKA_SENSITIVE: true, ep11.CKA_DECRYPT: true, ep11.CKA_SIGN: true, ep11.CKA_EXTRACTABLE: false, } GenerateKeypairRequest := &pb.GenerateKeyPairRequest{ Mech: &pb.Mechanism{Mechanism: ep11.CKM_RSA_PKCS_KEY_PAIR_GEN}, PubKeyTemplate: util.AttributeMap(publicKeyTemplate), PrivKeyTemplate: util.AttributeMap(privateKeyTemplate), } GenerateKeyPairResponse, err := cryptoClient.GenerateKeyPair(context.Background(), GenerateKeypairRequest) -
Fragmento de código de JavaScript
const publicKeyTemplate = new util.AttributeMap( new util.Attribute(ep11.CKA_ENCRYPT, true), new util.Attribute(ep11.CKA_VERIFY, true), new util.Attribute(ep11.CKA_MODULUS_BITS, 2048), new util.Attribute(ep11.CKA_PUBLIC_EXPONENT, publicExponent), new util.Attribute(ep11.CKA_EXTRACTABLE, false) ); const privateKeyTemplate = new util.AttributeMap( new util.Attribute(ep11.CKA_PRIVATE, true), new util.Attribute(ep11.CKA_SENSITIVE, true), new util.Attribute(ep11.CKA_DECRYPT, true), new util.Attribute(ep11.CKA_SIGN, true), new util.Attribute(ep11.CKA_EXTRACTABLE, false), ); client.GenerateKeyPair({ Mech: { Mechanism: ep11.CKM_RSA_PKCS_KEY_PAIR_GEN }, PubKeyTemplate: publicKeyTemplate, PrivKeyTemplate: privateKeyTemplate, PubKeyId: uuidv4(), PrivKeyId: uuidv4() }, (err, response) => { callback(err, response); });
DeriveKey
La función DeriveKey deriva una clave de una clave base.
| Descripción | Enlaza a EP11 m_DeriveKey, que es una implementación de PKCS #11 C_DeriveKey. |
|
|---|---|---|
| Parámetros |
message DeriveKeyRequest {
Mechanism Mech = 1;
bytes BaseKey = 3;
bytes Data = 4;
map<uint64,AttributeValue> Template = 8;
}
message DeriveKeyResponse {
bytes NewKeyBytes = 6;
bytes CheckSum = 7;
}
|
|
| Valores de retorno | Envuelve el error de EP11 en el mensaje Grep11Error. |
| Descripción |
Implementación de El blob PKCS #11 PKCS #11 |
|---|---|
| Parámetros |
CK_RV m_DeriveKey (
CK_MECHANISM_PTR mech,
CK_ATTRIBUTE_PTR template, CK_ULONG templatelen,
const unsigned char *baseKey, size_t baseKeylen,
const unsigned char *data, size_t datalen,
const unsigned char *pin, size_t pinlen,
unsigned char *newKey, size_t *newKeylen,
unsigned char *checkSum, size_t *checkSumlen,
destino target_t
);
|
| Valores de retorno | Un subconjunto de los valores de retorno de C_DeriveKey. Para obtener más información, consulte el capítulo Valores de retorno del documento de estructura de biblioteca PKCS #11 (EP11) Enterprise. |
| Descripción |
Los valores de los atributos Si una llamada a El objeto creado por una llamada a |
|---|---|
| Parámetros |
CK_DEFINE_FUNCTION(CK_RV, C_DeriveKey)(
CK_SESSION_HANDLE hSession,
CK_MECHANISM_PTR pMechanism,
CK_OBJECT_HANDLE hBaseKey,
CK_ATTRIBUTE_PTR pTemplate,
CK_ULONG ulAttributeCount,
CK_OBJECT_HANDLE_PTR phKey
);
|
| Valores de retorno | CKR_ARGUMENTS_BAD, CKR_ATTRIBUTE_READ_ONLY, CKR_ATTRIBUTE_TYPE_INVALID, CKR_ATTRIBUTE_VALUE_INVALID, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_CURVE_NOT_SUPPORTED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_DOMAIN_PARAMS_INVALID, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_KEY_HANDLE_INVALID, CKR_KEY_SIZE_RANGE, CKR_KEY_TYPE_INCONSISTENT, CKR_MECHANISM_INVALID, CKR_MECHANISM_PARAM_INVALID, CKR_OK, CKR_OPERATION_ACTIVE, CKR_PIN_EXPIRED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_SESSION_READ_ONLY, CKR_TEMPLATE_INCOMPLETE, CKR_TEMPLATE_INCONSISTENT, CKR_TOKEN_WRITE_PROTECTED, CKR_USER_NOT_LOGGED_IN. |
Fragmentos de código
-
Fragmento de código de Golang
// Derive AES key for Alice deriveKeyTemplate := ep11.EP11Attributes{ ep11.CKA_CLASS: ep11.CKO_SECRET_KEY, ep11.CKA_KEY_TYPE: ep11.CKK_AES, ep11.CKA_VALUE_LEN: 128 / 8, ep11.CKA_ENCRYPT: true, ep11.CKA_DECRYPT: true, } // Extract Bob's EC coordinates combinedCoordinates, err := util.GetPubkeyBytesFromSPKI(bobECKeypairResponse.PubKeyBytes) if err != nil { return nil, fmt.Errorf("Bob's EC public key cannot obtain coordinates: %s", err) } aliceDeriveKeyRequest := &pb.DeriveKeyRequest{ Mech: &pb.Mechanism{Mechanism: ep11.CKM_ECDH1_DERIVE, Parameter: util.SetMechParm(combinedCoordinates)}, Template: util.AttributeMap(deriveKeyTemplate), BaseKey: aliceECKeypairResponse.PrivKeyBytes, } // Derive AES key for Alice aliceDeriveKeyResponse, err := cryptoClient.DeriveKey(context.Background(), aliceDeriveKeyRequest) -
Fragmento de código de JavaScript
//results are created through GenerateKeyPair const [alice, bob] = results; const deriveKeyTemplate = new util.AttributeMap( new util.Attribute(ep11.CKA_CLASS, ep11.CKO_SECRET_KEY), new util.Attribute(ep11.CKA_KEY_TYPE, ep11.CKK_AES), new util.Attribute(ep11.CKA_VALUE_LEN, 128/8), new util.Attribute(ep11.CKA_ENCRYPT, true), new util.Attribute(ep11.CKA_DECRYPT, true), ); const derived = []; async.eachSeries([ { PubKey: bob.PubKeyBytes, PrivKey: alice.PrivKeyBytes }, { PubKey: alice.PubKeyBytes, PrivKey: bob.PrivKeyBytes } ], (data, cb) => { const combinedCoordinates = util.getPubKeyBytesFromSPKI(data.PubKey); client.DeriveKey({ Mech: { Mechanism: ep11.CKM_ECDH1_DERIVE, ParameterB: combinedCoordinates }, Template: deriveKeyTemplate, BaseKey: data.PrivKey }, (err, data={}) => { if (!err) { derived.push(data); } cb(err); }); }
Protección de claves
Puede proteger una clave envolviéndola y luego descifrarla invocando la característica de desenvolver.
WrapKey
La función WrapKey envuelve (cifra) una clave.
| Descripción | Enlaza a EP11 m_WrapKey, que es una implementación de PKCS #11 C_WrapKey. |
|
|---|---|---|
| Parámetros |
message WrapKeyRequest {
bytes Key = 1;
bytes KeK = 2;
bytes MacKey = 3;
Mechanism Mech = 4;
}
message WrapKeyResponse {
bytes Wrapped = 5;
}
|
|
| Valores de retorno | Envuelve el error de EP11 en el mensaje Grep11Error. |
| Descripción | Implementación del valor C_WrapKey de PKCS #11.
|
|---|---|
| Parámetros |
CK_RV m_WrapKey (
const unsigned char *key, size_t keylen,
const unsigned char *keK, size_t keKlen,
const unsigned char *macKey, size_t macKeylen,
const CK_MECHANISM_PTR mech,
CK_BYTE_PTR wrapped, CK_ULONG_PTR wrappedlen,
destino target_t
);
|
| Valores de retorno | Un subconjunto de los valores de retorno de C_WrapKey. Para obtener más información, consulte el capítulo Valores de retorno del documento de estructura de biblioteca PKCS #11 (EP11) Enterprise. |
| Descripción |
El atributo Si la clave que se ha de envolver no se puede envolver por algún motivo específico de la señal, a pesar de que tenga el atributo
Las señales varían en función de los tipos de claves se pueden envolver con qué mecanismos. Para particionar las claves de encapsulado de modo que sólo puedan envolver un subconjunto de claves extraíbles, el atributo |
|---|---|
| Parámetros |
CK_DEFINE_FUNCTION(CK_RV, C_WrapKey)(
CK_SESSION_HANDLE hSession,
CK_MECHANISM_PTR pMechanism,
CK_OBJECT_HANDLE hWrappingKey,
CK_OBJECT_HANDLE hKey,
CK_BYTE_PTR pWrappedKey,
CK_ULONG_PTR pulWrappedKeyLen
);
|
| Valores de retorno | CKR_ARGUMENTS_BAD, CKR_BUFFER_TOO_SMALL, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_KEY_HANDLE_INVALID, CKR_KEY_NOT_WRAPPABLE, CKR_KEY_SIZE_RANGE, CKR_KEY_UNEXTRACTABLE, CKR_MECHANISM_INVALID, CKR_MECHANISM_PARAM_INVALID, CKR_OK, CKR_OPERATION_ACTIVE, CKR_PIN_EXPIRED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_USER_NOT_LOGGED_IN, CKR_WRAPPING_KEY_HANDLE_INVALID, CKR_WRAPPING_KEY_SIZE_RANGE, CKR_WRAPPING_KEY_TYPE_INCONSISTENT. |
Fragmentos de código
-
Fragmento de código de Golang
WrapKeyRequest := &pb.WrapKeyRequest { Mech: &pb.Mechanism{Mechanism: ep11.CKM_RSA_PKCS}, KeK: GenerateKeyPairResponse.PubKeyBytes, Key: GenerateKeyResponse.KeyBytes, } WrapKeyResponse, err := cryptoClient.WrapKey(context.Background(), WrapKeyRequest) -
Fragmento de código de JavaScript
client.WrapKey({ Mech: { Mechanism: ep11.CKM_RSA_PKCS }, KeK: rsa.PubKeyBytes, Key: aes.KeyBytes }, (err, data={}) => { cb(err, data.Wrapped); });
UnwrapKey
La función UnwrapKey desenvuelve (descifra) una clave.
| Descripción | Enlaza a EP11 m_UnwrapKey, que es una implementación de PKCS #11 C_UnwrapKey. |
|
|---|---|---|
| Parámetros |
message UnwrapKeyRequest {
bytes Wrapped = 1;
bytes KeK = 2;
bytes MacKey = 3;
Mechanism Mech = 5;
map<uint64,AttributeValue> Template = 9;
}
message UnwrapKeyResponse {
bytes UnwrappedBytes = 7;
bytes CheckSum = 8;
}
|
|
| Valores de retorno | Envuelve el error de EP11 en el mensaje Grep11Error. |
| Descripción |
Implementación de
El objeto generado se devuelve en Cuando un SPKI se está transformando en una SPKI MACed, se debe utilizar CKM_IBM_TRANSPORTKEY como mecanismo para desenvolver. Esta modalidad proporciona el SPKI sin formato, como datos envueltos, y hace caso omiso de KEK.
|
|---|---|
| Parámetros |
CK_RV m_UnwrapKey (
const CK_BYTE_PTR wrapped, CK_ULONG wrappedlen,
const unsigned char *keK, size_t keKlen,
const unsigned char *macKey, size_t macKeylen,
const unsigned char *pin, size_t pinlen,
const CK_MECHANISM_PTR mech,
const CK_ATTRIBUTE_PTR template, CK_ULONG templatelen,
unsigned char * unwrapped, size_t * unwrappedlen,
CK_BYTE_PTR checkSum, CK_ULONG *checkSumlen,
destino target_t
);
|
| Valores de retorno | Un subconjunto de los valores de retorno de C_UnwrapKey. Para obtener más información, consulte el capítulo Valores de retorno del documento de estructura de biblioteca PKCS #11 (EP11) Enterprise. |
| Descripción |
El atributo La nueva clave tiene el atributo Algunos mecanismos pueden modificar o intentar modificar. El contenido de la estructura Si una llamada a El objeto de clave creado mediante una llamada a Para particionar las claves de desenvolver para que sólo puedan desenvolver un subconjunto de claves, el atributo |
|---|---|
| Parámetros |
CK_DEFINE_FUNCTION(CK_RV, C_UnwrapKey)(
CK_SESSION_HANDLE hSession,
CK_MECHANISM_PTR pMechanism,
CK_OBJECT_HANDLE hUnwrappingKey,
CK_BYTE_PTR pWrappedKey,
CK_ULONG ulWrappedKeyLen,
CK_ATTRIBUTE_PTR pTemplate,
CK_ULONG ulAttributeCount,
CK_OBJECT_HANDLE_PTR phKey
);
|
| Valores de retorno | CKR_ARGUMENTS_BAD, CKR_ATTRIBUTE_READ_ONLY, CKR_ATTRIBUTE_TYPE_INVALID, CKR_ATTRIBUTE_VALUE_INVALID, CKR_BUFFER_TOO_SMALL, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_CURVE_NOT_SUPPORTED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_DOMAIN_PARAMS_INVALID, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_MECHANISM_INVALID, CKR_MECHANISM_PARAM_INVALID, CKR_OK, CKR_OPERATION_ACTIVE, CKR_PIN_EXPIRED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_SESSION_READ_ONLY, CKR_TEMPLATE_INCOMPLETE, CKR_TEMPLATE_INCONSISTENT, CKR_TOKEN_WRITE_PROTECTED, CKR_UNWRAPPING_KEY_HANDLE_INVALID, CKR_UNWRAPPING_KEY_SIZE_RANGE, CKR_UNWRAPPING_KEY_TYPE_INCONSISTENT, CKR_USER_NOT_LOGGED_IN, CKR_WRAPPED_KEY_INVALID, CKR_WRAPPED_KEY_LEN_RANGE. |
Fragmentos de código
-
Fragmento de código de Golang
aesUnwrapKeyTemplate := ep11.EP11Attributes{ ep11.CKA_CLASS: ep11.CKO_SECRET_KEY, ep11.CKA_KEY_TYPE: ep11.CKK_AES, ep11.CKA_VALUE_LEN: 128 / 8, ep11.CKA_ENCRYPT: true, ep11.CKA_DECRYPT: true, ep11.CKA_EXTRACTABLE: true, // must be true to be wrapped } UnwrapKeyRequest := &pb.UnwrapKeyRequest{ Mech: &pb.Mechanism{Mechanism: ep11.CKM_RSA_PKCS}, KeK: GenerateKeyPairResponse.PrivKeyBytes, Wrapped: WrapKeyResponse.Wrapped, Template: util.AttributeMap(aesUnwrapKeyTemplate), } // Unwrap the AES key UnwrapKeyResponse, err := cryptoClient.UnwrapKey(context.Background(), UnwrapKeyRequest) -
Fragmento de código de JavaScript
const aesUnwrapKeyTemplate = new util.AttributeMap( new util.Attribute(ep11.CKA_CLASS, ep11.CKO_SECRET_KEY), new util.Attribute(ep11.CKA_KEY_TYPE, ep11.CKK_AES), new util.Attribute(ep11.CKA_VALUE_LEN, 128/8), new util.Attribute(ep11.CKA_ENCRYPT, true), new util.Attribute(ep11.CKA_DECRYPT, true), new util.Attribute(ep11.CKA_EXTRACTABLE, true) ); client.UnwrapKey({ Mech: { Mechanism: ep11.CKM_RSA_PKCS }, KeK: rsa.PrivKeyBytes, Wrapped: wrapped, Template: aesUnwrapKeyTemplate }, (err, data={}) => { cb(err, wrapped, data.UnwrappedBytes, data.CheckSum); });
RewrapKeyBlob
La función RewrapKeyBlob vuelve a cifrar los objetos binarios grandes (BLOB) de clave generados con la nueva clave maestra confirmada contenida en el HSM. Las claves que se vuelven a cifrar solo se pueden utilizar después de que
se haya finalizado el HSM con la nueva clave maestra confirmada.
Esta función es un mandato de administración especial que solo está soportado por GREP11. No hay ninguna función EP11 o PKCS #11 correspondiente para RewrapKeyBlob.
| Descripción | Transfiere la propiedad de un BLOB controlado por la clave maestra actual a la nueva clave maestra cuando se confirma la nueva clave maestra. | |
|---|---|---|
| Parámetros |
message RewrapKeyBlobRequest {
bytes WrappedKey = 1;
}
message RewrapKeyBlobResponse {
bytes RewrappedKey = 1;
}
|
|
| Valores de retorno | Envuelve el error de EP11 en el mensaje Grep11Error. |
Fragmentos de código
-
Fragmento de código de Golang
RewrapKeyBlobRequest := &pb.RewrapKeyBlobRequest { WrappedKey: GenerateKeyResponse.KeyBytes, } // Rewrap an existing key blob using the HSM's new wrapping key RewrapKeyBlobResponse, err := cryptoClient.RewrapKeyBlob(context.Background(), RewrapKeyBlobRequest) -
Fragmento de código de JavaScript
client.RewrapKeyBlob({ WrappedKey: wrappedKey }, (err, response) => { callback(err, response); });
Recuperación y modificación de atributos para claves
Cuando se generan claves o se realizan operaciones de claves, se define una plantilla de atributo como uno de los parámetros. Puede recuperar los atributos de un objeto de clave específico y modificar algunos atributos una vez que se haya creado la clave.
GetAttributeValue
La función GetAttributeValue obtiene un valor de atributo de un objeto.
| Descripción | Enlaza a EP11 m_GetAttributeValue, que es una implementación de PKCS #11 C_GetAttributeValue. |
|
|---|---|---|
| Parámetros |
message GetAttributeValueRequest {
bytes Object = 1;
map<uint64,AttributeValue> Attributes = 3;
}
message GetAttributeValueResponse {
map<uint64,AttributeValue> Attributes = 4;
}
|
|
| Valores de retorno | Envuelve el error de EP11 en el mensaje Grep11Error. |
| Descripción |
Implementación de No representa ni necesita sesiones (parte de blob); por lo tanto, no utiliza el parámetro EP11 utiliza más formas directas para decodificar como, por ejemplo, la enumeración de los valores reales en lugar de ser más genérico. |
|---|---|
| Parámetros |
CK_RV m_GetAttributeValue (
const unsigned char *object, size_t objectlen,
CK_ATTRIBUTE_PTR attributes, CK_ULONG attributeslen,
destino target_t
);
|
| Valores de retorno | Un subconjunto de los valores de retorno de C_GetAttributeValue. Para obtener más información, consulte el capítulo Valores de retorno del documento de estructura de biblioteca PKCS #11 (EP11) Enterprise. |
| Descripción |
Para cada triplete en la plantilla (
Si se aplica el caso 1 a cualquiera de los atributos solicitados, la llamada debe devolver el valor En el caso especial de un atributo cuyo valor es una matriz de atributos, por ejemplo Los códigos de error |
|---|---|
| Parámetros |
CK_DEFINE_FUNCTION(CK_RV, C_GetAttributeValue)(
CK_SESSION_HANDLE hSession,
CK_OBJECT_HANDLE hObject,
CK_ATTRIBUTE_PTR pTemplate,
CK_ULONG ulCount
);
|
| Valores de retorno | CKR_ARGUMENTS_BAD, CKR_ATTRIBUTE_SENSITIVE, CKR_ATTRIBUTE_TYPE_INVALID, CKR_BUFFER_TOO_SMALL, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OBJECT_HANDLE_INVALID, CKR_OK, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID. |
Fragmentos de código
-
Fragmento de código de Golang
// Only retrieve supported EP11 attributes attributeList := ep11.EP11Attributes{ ep11.CKA_DECRYPT: false, // attribute where you would like to retrieve its current value } GetAttributeValueRequest := &pb.GetAttributeValueRequest{ Object: GenerateKeyPairResponse.PrivKeyBytes, Attributes: util.AttributeMap(attributeList), } GetAttributeValueResponse, err := cryptoClient.GetAttributeValue(context.Background(), GetAttributeValueRequest) -
Fragmento de código de JavaScript
const attributeTemplate = new util.AttributeMap( new util.Attribute(ep11.CKA_SIGN, 0) ); client.GetAttributeValue({ Object: keys.PrivKey, Attributes: attributeTemplate }, (err, response) => { callback(err, response); console.log('ATTRIBUTE:', response.Attributes); });
SetAttributeValue
La función SetAttributeValue modifica un valor de atributo de un objeto.
| Descripción | Enlaza con m_SetAttributeValue de EP11, que es una implementación de C_SetAttributeValue de PKCS #11. |
|
|---|---|---|
| Parámetros |
message SetAttributeValueRequest {
bytes Object = 1;
map<uint64,AttributeValue> Attributes = 3;
}
message SetAttributeValueResponse {
bytes Object = 1;
}
|
|
| Valores de retorno | Envuelve el error de EP11 en el mensaje Grep11Error. |
| Descripción |
Implementación de Empaquetado de atributos: consulte _GetAttrValue Actualmente, Ep11 envía solamente atributos booleanos, todos los demás atributos los gestiona el host (y EP11 no modifica las matrices como, por ejemplo, WRAP_TEMPLATE). No representa ni necesita sesiones (parte de blob); por lo tanto, no utiliza el parámetro |
|---|---|
| Parámetros |
CK_RV m_SetAttributeValue (
unsigned char *object, size_t objectlen,
CK_ATTRIBUTE_PTR attributes, CK_ULONG attributeslen,
destino target_t
);
|
| Valores de retorno | Un subconjunto de los valores de retorno de C_SetAttributeValue. Para obtener más información, consulte el capítulo Valores de retorno del documento de estructura de biblioteca PKCS #11 (EP11) Enterprise. |
| Descripción |
Es posible que algunos objetos no se puedan modificar. Cuando se invoca Solamente se pueden modificar los objetos de sesión durante una sesión de solo lectura. La plantilla puede especificar valores nuevos para los atributos del objeto que se pueden modificar. Si la plantilla especifica un valor de un atributo que es incompatible con otros atributos existentes del objeto, la llamada falla con
el código de retorno No todos los atributos se pueden modificar; consulte la Sección 4.1.2 de la especificación de API PKCS #11 para obtener más información. |
|---|---|
| Parámetros |
CK_DEFINE_FUNCTION(CK_RV, C_SetAttributeValue)(
CK_SESSION_HANDLE hSession,
CK_OBJECT_HANDLE hObject,
CK_ATTRIBUTE_PTR pTemplate,
CK_ULONG ulCount
);
|
| Valores de retorno | CKR_ACTION_PROHIBITED, CKR_ARGUMENTS_BAD, CKR_ATTRIBUTE_READ_ONLY, CKR_ATTRIBUTE_TYPE_INVALID, CKR_ATTRIBUTE_VALUE_INVALID, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OBJECT_HANDLE_INVALID, CKR_OK, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_SESSION_READ_ONLY, CKR_TEMPLATE_INCONSISTENT, CKR_TOKEN_WRITE_PROTECTED, CKR_USER_NOT_LOGGED_IN. |
Fragmentos de código
-
Fragmento de código de Golang
// Only set supported R/W EP11 attributes attributeList := ep11.EP11AttributeP{ CKA_DECRYPT: true, } SetAttributeValueRequest := &pb.SetAttributeValueRequest{ Object: GenerateKeyPair.PrivKeyBytes, Attributes: util.AttributeMap(attributeList), } SetAttributeValueResponse, err := cryptoClient.SetAttributeValue(context.Background(), SetAttributeValueRequest) -
Fragmento de código de JavaScript
const attributeTemplate = new util.AttributeMap( new util.Attribute(ep11.CKA_SIGN, true) ); client.SetAttributeValue({ Object: keys.PrivKey, Attributes: attributeTemplate }, (err, response) => { callback(err, response); });
Generación de datos aleatorios
Puede generar datos aleatorios de alta calidad, como valores de inicialización (IVs), PIN y contraseña, para su uso en operaciones criptográficas.
GenerateRandom
La función GenerateRandom genera datos aleatorios. Cuando utilice esta función, asegúrese de no establecer la longitud de los datos aleatorios en cero y el puntero que apunta a la ubicación de datos aleatorios no debe ser NULL.
| Descripción | Enlaza con m_GenerateRandom de EP11, que es una implementación de C_GenerateRandom de PKCS #11. |
|
|---|---|---|
| Parámetros |
message GenerateRandomRequest {
uint64 Len = 1;
}
message GenerateRandomResponse {
bytes Rnd = 1;
}
|
|
| Valores de retorno | Envuelve el error de EP11 en el mensaje Grep11Error. |
| Descripción |
Implementación de
La biblioteca del host podría generar números aleatorios sin asignarlos al programa de fondo, si la funcionalidad adecuada estuviera disponible en el host. Esto no ocurre en la implementación actual. Esta función no da soporte a la consulta de tamaño. |
|---|---|
| Parámetros |
CK_RV m_GenerateRandom (
CK_BYTE_PTR rnd, CK_ULONG rndlen,
destino target_t
);
|
| Valores de retorno | Un subconjunto de los valores de retorno de C_GenerateRandom. Para obtener más información, consulte el capítulo Valores de retorno del documento de estructura de biblioteca PKCS #11 (EP11) Enterprise. |
| Descripción | C_GenerateRandom genera datos aleatorios o pseudoaleatorios. hSession es el manejador de sesiones; pRandomData apunta a la ubicación que recibe los datos aleatorios; y ulRandomLen es
la longitud en bytes de los datos aleatorios o pseudoaleatorios que se van a generar. |
|---|---|
| Parámetros |
CK_DEFINE_FUNCTION(CK_RV, C_GenerateRandom)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pRandomData,
CK_ULONG ulRandomLen
);
|
| Valores de retorno | CKR_ARGUMENTS_BAD, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCEL, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_ACTIVE, CKR_RANDOM_NO_RNG, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_USER_NOT_LOGGED_IN. |
Fragmentos de código
-
Fragmento de código de Golang
GenerateRandomRequest := &pb.GenerateRandomRequest { Len: 1024, } GenerateRandomResponse, err := cryptoClient.GenerateRandom(context.Background(), GenerateRandomRequest) -
Fragmento de código de JavaScript
client.GenerateRandom({ Len: ep11.AES_BLOCK_SIZE }, (err, response) => { callback(err, response); });
Cifrado y descifrado de datos
Al especificar el mecanismo criptográfico, puede realizar funciones de cifrado y descifrado simétricas o asimétricas. Es posible que tenga que invocar a una serie de subfunciones para cifrar o descifrar datos. Por ejemplo, la operación de cifrado
de datos de varias partes consta de las suboperaciones EncryptInit, EncryptUpdate y EncryptFinal.
EncryptInit
La función EncryptInit inicializa una operación de cifrado. Debe llamar a esta función primero para realizar un cifrado.
| Descripción | Enlaza con m_EncryptInit de EP11, que es una implementación de C_EncryptInit de PKCS #11. |
|
|---|---|---|
| Parámetros |
message EncryptInitRequest {
Mechanism Mech = 2;
bytes Key = 3;
}
message EncryptInitResponse {
bytes State = 1;
}
|
|
| Valores de retorno | Envuelve el error de EP11 en el mensaje Grep11Error. |
| Descripción |
Implementación de El blob Para los mecanismos de clave pública, Para los mecanismos de clave secreta, el estado de cifrado hereda las restricciones de sesión de objeto de El blob
|
|---|---|
| Parámetros |
CK_RV m_EncryptInit (
unsigned char * state, size_t * statelen,
CK_MECHANISM_PTR mech,
const unsigned char *key, size_t keylen,
destino target_t
);
|
| Valores de retorno | Un subconjunto de los valores de retorno de C_EncryptInit. Para obtener más información, consulte el capítulo Valores de retorno del documento de estructura de biblioteca PKCS #11 (EP11) Enterprise. |
| Descripción |
El atributo Después de llamar a |
|---|---|
| Parámetros |
CK_DEFINE_FUNCTION(CK_RV, C_EncryptInit)(
CK_SESSION_HANDLE hSession,
CK_MECHANISM_PTR pMechanism,
CK_OBJECT_HANDLE hKey
);
|
| Valores de retorno | CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_KEY_FUNCTION_NOT_PERMITTED, CKR_KEY_HANDLE_INVALID, CKR_KEY_SIZE_RANGE, CKR_KEY_TYPE_INCONSISTENT, CKR_MECHANISM_INVALID, CKR_MECHANISM_PARAM_INVALID, CKR_OK, CKR_OPERATION_ACTIVE, CKR_PIN_EXPIRED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_USER_NOT_LOGGED_IN. |
Fragmentos de código
-
Fragmento de código de Golang
// Generate 16 bytes of random data for the initialization vector GenerateRandomRequest := &pb.GenerateRandomRequest{ Len: (uint64)(ep11.AES_BLOCK_SIZE), } GenerateRandomResponse, err := cryptoClient.GenerateRandom(context.Background(), GenerateRandomRequest) if err != nil { return nil, fmt.Errorf("GenerateRandom error: %s", err) } iv := GenerateRandomResponse.Rnd[:ep11.AES_BLOCK_SIZE] fmt.Println("Generated IV") EncryptInitRequest := &pb.EncryptInitRequest{ Mech: &pb.Mechanism{Mechanism: ep11.CKM_AES_CBC_PAD, Parameter: util.SetMechParm(iv)}, Key: GenerateKeyResponse.KeyBytes, } EncryptInitResponse, err := cryptoClient.EncryptInit(context.Background(), EncryptInitRequest) -
Fragmento de código de JavaScript
client.EncryptInit({ Mech: { Mechanism: ep11.CKM_AES_CBC_PAD, ParameterB: iv }, Key: key }, (err, data={}) => { cb(err, data.State); });
Cifrar
La función Encrypt cifra datos de una sola parte. No es necesario realizar las suboperaciones EncryptUpdate y EncryptFinal para un cifrado de una única parte. Antes de invocar esta función, asegúrese
de que primero ejecuta EncryptInit.
| Descripción | Enlaza con m_Encrypt de EP11, que es una implementación de C_Encrypt de PKCS #11. |
|
|---|---|---|
| Parámetros |
message EncryptRequest {
bytes State = 1;
bytes Plain = 2;
}
message EncryptResponse {
bytes Ciphered = 3;
}
|
|
| Valores de retorno | Envuelve el error de EP11 en el mensaje Grep11Error. |
| Descripción |
Implementación de No actualiza El blob El blob |
|---|---|
| Parámetros |
CK_RV m_Encrypt (
const unsigned char *state, size_t statelen,
CK_BYTE_PTR plain, CK_ULONG plainlen,
CK_BYTE_PTR ciphered, CK_ULONG_PTR cipheredlen,
destino target_t
);
|
| Valores de retorno | Un subconjunto de los valores de retorno de C_Encrypt. Para obtener más información, consulte el capítulo Valores de retorno del documento de estructura de biblioteca PKCS #11 (EP11) Enterprise. |
| Descripción |
La operación de cifrado debe inicializarse con
Para algunos mecanismos de cifrado, los datos de texto sin formato de entrada tienen ciertas restricciones de longitud (ya sea porque el mecanismo sólo puede cifrar partes relativamente cortas de texto sin formato, o porque los datos
de entrada del mecanismo deben constar de un número integral de bloques). Si no se cumplen estas restricciones, El texto sin formato y el texto cifrado pueden estar en el mismo lugar, es decir, es correcto si Para la mayoría de los mecanismos, |
|---|---|
| Parámetros |
CK_DEFINE_FUNCTION(CK_RV, C_Encrypt)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pData,
CK_ULONG ulDataLen,
CK_BYTE_PTR pEncryptedData,
CK_ULONG_PTR pulEncryptedDataLen
);
|
| Valores de retorno | CKR_ARGUMENTS_BAD, CKR_BUFFER_TOO_SMALL, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DATA_INVALID, CKR_DATA_LEN_RANGE, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCEL, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOT_INITIALIZED, HANDR_SESSION_CLOSED |
Fragmentos de código
-
Fragmento de código de Golang
plainText := "Encrypt this message" EncryptRequest := &pb.EncryptRequest { State: EncryptInitResponse.State, Plain: plainText, } EncryptResponse, err := cryptoClient.Encrypt(context.Background(), EncryptRequest) -
Fragmento de código de JavaScript
client.Encrypt({ State: state, Plain: Buffer.from(message) }, (err, response) => { callback(err, response); });
EncryptUpdate
La función EncryptUpdate continúa una operación de cifrado de varias partes. Antes de invocar esta función, asegúrese de que primero ejecuta EncryptInit.
| Descripción | Enlaza con m_EncryptUpdate de EP11, que es una implementación de C_EncryptUpdate de PKCS #11. |
|
|---|---|---|
| Parámetros |
message EncryptUpdateRequest {
bytes State = 1;
bytes Plain = 2;
}
message EncryptUpdateResponse {
bytes State = 1;
bytes Ciphered = 3;
}
|
|
| Valores de retorno | Envuelve el error de EP11 en el mensaje Grep11Error. |
| Descripción |
Implementación de El blob El blob |
|---|---|
| Parámetros |
CK_RV m_EncryptUpdate (
unsigned char *state, size_t statelen,
CK_BYTE_PTR plain, CK_ULONG plainlen,
CK_BYTE_PTR ciphered, CK_ULONG_PTR cipheredlen,
destino target_t
);
|
| Valores de retorno | Un subconjunto de los valores de retorno de C_EncryptUpdate. Para obtener más información, consulte el capítulo Valores de retorno del documento de estructura de biblioteca PKCS #11 (EP11) Enterprise. |
| Descripción |
La operación de cifrado debe inicializarse con
|
|---|---|
| Parámetros |
CK_DEFINE_FUNCTION(CK_RV, C_EncryptUpdate)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pPart,
CK_ULONG ulPartLen,
CK_BYTE_PTR pEncryptedPart,
CK_ULONG_PTR pulEncryptedPartLen
);
|
| Valores de retorno | CKR_ARGUMENTS_BAD, CKR_BUFFER_TOO_SMALL, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DATA_LEN_RANGE, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOT_INITIALIZED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID. |
Fragmentos de código
-
Fragmento de código de Golang
plainText := ` This is a very long message that needs to be encrypted by performing multiple EncrypytUpdate functions` // Use EncryptUpdate if you would like to breakup // the encrypt operation into multiple suboperations EncryptUpdateRequest1 := &pb.EncryptUpdateRequest { State: EncryptInitResponse.State, Plain: plainText[:20], } EncryptUpdateResponse, err := cryptoClient.EncryptUpdate(context.Background(), EncryptUpdateRequest1) ciphertext := EncryptUpdateResponse.Ciphered[:] EncryptUpdateRequest2 := &pb.EncryptUpdateRequest { State: EncryptUpdateResponse.State, Plain: plainText[20:], } EncryptUpdateResponse, err := cryptoClient.EncryptUpdate(context.Background(), EncryptUpdateRequest2) ciphertext = append(ciphertext, EncryptUpdateResponse.Ciphered...) -
Fragmento de código de JavaScript
client.EncryptUpdate({ State: state, Plain: Buffer.from(message.substr(20)) }, (err, data={}) => { cb(err, data.State, Buffer.concat([ciphertext, data.Ciphered])); });
EncryptFinal
La función EncryptFinal finaliza una operación de cifrado de varias partes.
| Descripción | Enlaza con m_EncryptFinal de EP11, que es una implementación de C_EncryptFinal de PKCS #11. |
|
|---|---|---|
| Parámetros |
message EncryptFinalRequest {
bytes State = 1;
}
message EncryptFinalResponse {
bytes Ciphered = 2;
}
|
|
| Valores de retorno | Envuelve el error de EP11 en el mensaje Grep11Error. |
| Descripción |
Implementación de No actualiza El blob El blob |
|---|---|
| Parámetros |
CK_RV m_EncryptFinal (
const unsigned char *state, size_t statelen,
CK_BYTE_PTR ciphered, CK_ULONG_PTR cipheredlen,
destino target_t
);
|
| Valores de retorno | Un subconjunto de los valores de retorno de C_EncryptFinal. Para obtener más información, consulte el capítulo Valores de retorno del documento de estructura de biblioteca PKCS #11 (EP11) Enterprise. |
| Descripción |
La operación de cifrado debe inicializarse con Para algunos mecanismos de cifrado de varias partes, los datos de texto sin formato de entrada tienen ciertas restricciones de longitud porque los datos de entrada del mecanismo deben constar de un número integral de bloques. Si no se
cumplen estas restricciones, |
|---|---|
| Parámetros |
CK_DEFINE_FUNCTION(CK_RV, C_EncryptFinal)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pLastEncryptedPart,
CK_ULONG_PTR pulLastEncryptedPartLen
);
|
| Valores de retorno | CKR_ARGUMENTS_BAD, CKR_BUFFER_TOO_SMALL, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DATA_LEN_RANGE, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOT_INITIALIZED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID. |
Fragmentos de código
-
Fragmento de código de Golang
EncryptFinalRequest := &pb.EncryptFinalRequest { State: EncryptUpdateResponse.State, } EncryptFinalResponse, err := cryptoClient.EncryptFinal(context.Background(), EncryptFinalRequest) -
Fragmento de código de JavaScript
client.EncryptFinal({ State: state }, (err, data={}) => { cb(err, Buffer.concat([ciphertext, data.Ciphered])); });
EncryptSingle
La función EncryptSingle procesa datos en un paso con una llamada. No devuelve ningún estado al host y solo devuelve los datos cifrados. Esta función es una extensión de IBM EP11 a la especificación estándar PKCS #11 y es una
combinación de las funciones EncryptInit y Encrypt. Le permite completar una operación de cifrado con una sola llamada en lugar de una serie de llamadas.
| Descripción | Enlaza con m_EncryptSingle de EP11 |
|
|---|---|---|
| Parámetros |
message EncryptSingleRequest {
bytes Key = 1;
Mechanism Mech = 2;
bytes Plain = 3;
}
message EncryptSingleResponse {
bytes Ciphered = 4;
}
|
|
| Valores de retorno | Envuelve el error de EP11 en el mensaje Grep11Error. |
| Descripción |
Variante no estándar de Se trata del método preferido a la hora de realizar el cifrado de datos en un paso para aplicaciones compatibles con XCP. Funcionalmente, equivale a Si el programa de fondo admite claves residentes, la clave también puede ser un controlador de claves residentes. Consulte también: El blob |
|---|---|
| Parámetros |
CK_RV m_EncryptSingle (
const unsigned char *key, size_t keylen,
CK_MECHANISM_PTR mech,
CK_BYTE_PTR plain, CK_ULONG plainlen,
CK_BYTE_PTR ciphered, CK_ULONG_PTR cipheredlen,
destino target_t
);
|
| Valores de retorno | Un subconjunto de los valores de retorno de C_Encrypt. Para obtener más información, consulte el capítulo Valores de retorno del documento de estructura de biblioteca PKCS #11 (EP11) Enterprise. |
Fragmentos de código
-
Fragmento de código de Golang
// Generate 16 bytes of random data for the initialization vector GenerateRandomRequest := &pb.GenerateRandomRequest{ Len: (uint64)(ep11.AES_BLOCK_SIZE), } GenerateRandomResponse, err := cryptoClient.GenerateRandom(context.Background(), GenerateRandomRequest) if err != nil { return nil, fmt.Errorf("GenerateRandom error: %s", err) } iv := GenerateRandomResponse.Rnd[:ep11.AES_BLOCK_SIZE] fmt.Println("Generated IV") plainText := "Encrypt this message" EncryptSingleRequest := &pb.EncryptSingleRequest{ Mech: &pb.Mechanism{Mechanism: ep11.CKM_AES_CBC_PAD, Parameter: util.SetMechParm(iv)}, Key: GenerateKeyResponse.KeyBytes, Plain: plainText, } EncryptSingleResponse, err := cryptoClient.EncryptSingle(context.Background(), EncryptSingleRequest) -
Fragmento de código de JavaScript
client.EncryptSingle({ Mech: { Mechanism: ep11.CKM_AES_CBC_PAD, ParameterB: iv }, Key: aliceDerived.NewKey, Plain: Buffer.from(message) }, (err, response) => { callback(err, response); });
ReencryptSingle
Con la función ReencryptSingle, puede descifrar datos con la clave original y, a continuación, cifrar los datos en bruto con una clave diferente en una sola llamada dentro del HSM de nube. Los tipos de clave que se utilizan para
esta operación pueden ser iguales o diferentes. Esta función es una extensión de IBM EP11 a la especificación estándar PKCS #11. Esta sola llamada es una opción viable en la que una gran cantidad de datos se deben volver a cifrar con distintas
claves, y pasa por alto la necesidad de realizar una combinación de funciones de DecryptSingle y EncryptSingle para cada elemento de datos que se debe volver a cifrar. No devuelve ningún estado al host y solo devuelve
los datos que se han vuelto a cifrar.
| Descripción | Se enlaza a EP11 m_ReencryptSingle. |
|
|---|---|---|
| Parámetros |
message ReencryptSingleRequest {
bytes DecKey = 1;
bytes EncKey = 2;
Mechanism DecMech = 3;
Mechanism EncMech = 4;
bytes Ciphered = 5;
}
message ReencryptSingleResponse {
bytes Reciphered = 6;
}
|
|
| Valores de retorno | Envuelve el error de EP11 en el mensaje Grep11Error. |
| Descripción |
Variante no estándar de Descifra los datos con la clave original y, a continuación, cifra los datos sin formato con una clave diferente dentro del HSM de nube. |
|---|---|
| Parámetros |
CK_RV m_ReencryptSingle (
const unsigned char * dkey, size_t idkeylen,
const unsigned char * ekey, size_t ekeylen
CK_MECHANISM_PTR decmech,
CK_MECHANISM_PTR encmech,
CK_BYTE_PTR in, CK_ULONG inlen,
CK_BYTE_PTR ciphered, CK_ULONG_PTR cipheredlen,
destino target_t
);
|
| Valores de retorno | Un subconjunto de los valores de retorno de C_Encrypt y C_Decrypt. Para obtener más información, consulte el capítulo Valores de retorno del documento de estructura de biblioteca PKCS #11 (EP11) Enterprise. |
Fragmentos de código
-
Fragmento de código de Golang
var msg = []byte("Data to encrypt") EncryptKey1Request := &pb.EncryptSingleRequest{ Key: GenerateKey1Response.KeyBytes, Mech: &pb.Mechanism{Mechanism: ep11.CKM_AES_CBC_PAD, Parameter: util.SetMechParm(iv)}, Plain: msg, } EncryptKey1Response, err := cryptoClient.EncryptSingle(context.Background(), EncryptKey1Request) if err != nil { return nil, fmt.Errorf("Encrypt error: %s", err) } ReencryptSingleRequest := &pb.ReencryptSingleRequest{ DecKey: GenerateKey1Response.KeyBytes, // original key EncKey: GenerateKey2Response.KeyBytes, // new key DecMech: &pb.Mechanism{Mechanism: ep11.CKM_AES_CBC_PAD, Parameter: util.SetMechParm(iv)}, EncMech: &pb.Mechanism{Mechanism: ep11.CKM_AES_CBC_PAD, Parameter: util.SetMechParm(iv)}, Ciphered: RencryptKey1Response.Ciphered, } ReencryptSingleResponse, err := cryptoClient.ReencryptSingle(context.Background(), ReencryptSingleRequest) -
Fragmento de código de JavaScript
client.ReencryptSingle({ Decmech: { Mechanism: mech1, ParameterB: iv }, Encmech: { Mechanism: mech2, ParameterB: iv }, In: encipherState.Ciphered, DKey: keyBlob1, Ekey: keyBlob2, }, (err, response) => { callback(err, response); });
DecryptInit
La función DecryptInit inicializa una operación de descifrado. Debe llamar a esta función primero para realizar un descifrado.
| Descripción | Enlaza con m_DecryptInit de EP11, que es una implementación de C_DecryptInit de PKCS #11. |
|
|---|---|---|
| Parámetros |
message DecryptInitRequest {
Mechanism Mech = 2;
bytes Key = 3;
}
message DecryptInitResponse {
bytes State = 1;
}
|
|
| Valores de retorno | Envuelve el error de EP11 en el mensaje Grep11Error. |
| Descripción | Implementación de C_DecryptInit de PKCS #11.
|
|---|---|
| Parámetros |
CK_RV m_DecryptInit (
unsigned char * state, size_t * statelen,
CK_MECHANISM_PTR mech,
const unsigned char *key, size_t keylen,
destino target_t
);
|
| Valores de retorno | Un subconjunto de los valores de retorno de C_DecryptInit. Para obtener más información, consulte el capítulo Valores de retorno del documento de estructura de biblioteca PKCS #11 (EP11) Enterprise. |
| Descripción |
El atributo Después de que la aplicación llame a |
|---|---|
| Parámetros |
CK_DEFINE_FUNCTION(CK_RV, C_DecryptInit)(
K_SESSION_HANDLE hSession,
CK_MECHANISM_PTR pMechanism,
CK_OBJECT_HANDLE hKey
);
|
| Valores de retorno | CKR_ARGUMENTS_BAD, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_KEY_FUNCTION_NOT_PERMITTED, CKR_KEY_HANDLE_INVALID, CKR_KEY_SIZE_RANGE, CKR_KEY_TYPE_INCONSISTENT, CKR_MECHANISM_INVALID, CKR_MECHANISM_PARAM_INVALID, CKR_OK, CKR_OPERATION_ACTIVE, CKR_PIN_EXPIRED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_USER_NOT_LOGGED_IN. |
Fragmentos de código
-
Fragmento de código de Golang
// Generate 16 bytes of random data for the initialization vector GenerateRandomRequest := &pb.GenerateRandomRequest{ Len: (uint64)(ep11.AES_BLOCK_SIZE), } GenerateRandomResponse, err := cryptoClient.GenerateRandom(context.Background(), GenerateRandomRequest) if err != nil { return nil, fmt.Errorf("GenerateRandom error: %s", err) } iv := GenerateRandomResponse.Rnd[:ep11.AES_BLOCK_SIZE] fmt.Println("Generated IV") DecryptInitRequest := &pb.DecryptInitRequest{ Mech: &pb.Mechanism{Mechanism: ep11.CKM_AES_CBC_PAD, Parameter: util.SetMechParm(iv)}, Key: GenerateKeyResponse.KeyBytes, } DecryptInitResponse, err := cryptoClient.DecryptInit(context.Background(), DecryptInitRequest) -
Fragmento de código de JavaScript
client.DecryptInit({ Mech: { Mechanism: ep11.CKM_AES_CBC_PAD, ParameterB: iv }, Key: key }, (err, data={}) => { cb(err, data.State); });
Descifrar
La función Decrypt descifra los datos en una sola parte. No es necesario realizar las suboperaciones DecryptUpdate y DecryptFinal para un descifrado de una única parte. Antes de invocar esta función,
asegúrese de que primero ejecuta DecryptInit.
| Descripción | Enlaza con m_Decrypt de EP11, que es una implementación de C_Decrypt de PKCS #11. |
|
|---|---|---|
| Parámetros |
message DecryptRequest {
bytes State = 1;
bytes Ciphered = 2;
}
message DecryptResponse {
bytes Plain = 3;
}
|
|
| Valores de retorno | Envuelve el error de EP11 en el mensaje Grep11Error. |
| Descripción |
Implementación de PKCS #11 El objeto binario grande (BLOB) state, slen debe correlacionarse con el parámetro |
|---|---|
| Parámetros |
CK_RV m_Decrypt (const unsigned char *state, size_t slen,
CK_BYTE_PTR cipher, CK_ULONG clen,
CK_BYTE_PTR plain, CK_ULONG_PTR plen,
destino target_t
);
|
| Valores de retorno | Un subconjunto de los valores de retorno de C_Decrypt. Para obtener más información, consulte el capítulo Valores de retorno del documento de estructura de biblioteca PKCS #11 (EP11) Enterprise. |
| Descripción |
La operación de descifrado se debe inicializar con
El texto cifrado y el texto sin formato pueden estar en el mismo lugar, lo que significa que es aceptable si pEncryptedData y pData apuntan a la misma ubicación. Si los datos de texto cifrado de entrada no se pueden descifrar debido a que tienen una longitud inadecuada, es posible que se devuelva |
|---|---|
| Parámetros |
CK_DEFINE_FUNCTION(CK_RV, C_Decrypt)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pEncryptedData,
CK_ULONG ulEncryptedDataLen,
CK_BYTE_PTR pData,
CK_ULONG_PTR pulDataLen
);
|
| Valores de retorno | CKR_ARGUMENTS_BAD, CKR_BUFFER_TOO_SMALL, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_ENCRYPTED_DATA_INVALID, CKR_ENCRYPTED_DATA_LEN_RANGE, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOT_INITIALIZED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_USER_NOT_LOGGED_IN. |
Fragmentos de código
-
Fragmento de código de Golang
DecryptRequest := &pb.DecryptRequest{ State: DecryptInitResponse.State, Ciphered: ciphertext, // encrypted data from a previous encrypt operation } DecryptResponse, err := cryptoClient.Decrypt(context.Background(), DecryptRequest) -
Fragmento de código de JavaScript
client.Decrypt({ State: state, Ciphered: ciphertext }, (err, response) => { callback(err, response); });
DecryptUpdate
La función DecryptUpdate continúa una operación de descifrado de varias partes. Antes de invocar esta función, asegúrese de que primero ejecuta DecryptInit.
| Descripción | Enlaza con m_DecryptUpdate de EP11, que es una implementación de C_DecryptUpdate de PKCS #11. |
|
|---|---|---|
| Parámetros |
message DecryptUpdateRequest {
bytes State = 1;
bytes Ciphered = 2;
}
message DecryptUpdateResponse {
bytes State = 1;
bytes Plain = 3;
}
|
|
| Valores de retorno | Envuelve el error de EP11 en el mensaje Grep11Error. |
| Descripción |
Implementación de El blob El blob |
|---|---|
| Parámetros |
CK_RV m_DecryptUpdate (
unsigned char *state, size_t statelen,
CK_BYTE_PTR ciphered, CK_ULONG cipheredlen,
CK_BYTE_PTR plain, CK_ULONG_PTR plainlen,
destino target_t
);
|
| Valores de retorno | Un subconjunto de los valores de retorno de C_DecryptUpdate. Para obtener más información, consulte el capítulo Valores de retorno del documento de estructura de biblioteca PKCS #11 (EP11) Enterprise. |
| Descripción |
La operación de descifrado se debe inicializar con El texto cifrado y el texto sin formato pueden estar en el mismo lugar, es decir, es correcto si |
|---|---|
| Parámetros |
CK_DEFINE_FUNCTION(CK_RV, C_DecryptUpdate)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pEncryptedPart,
CK_ULONG ulEncryptedPartLen,
CK_BYTE_PTR pPart,
CK_ULONG_PTR pulPartLen
);
|
| Valores de retorno | CKR_ARGUMENTS_BAD, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_KEY_FUNCTION_NOT_PERMITTED, CKR_KEY_HANDLE_INVALID, CKR_KEY_SIZE_RANGE, CKR_KEY_TYPE_INCONSISTENT, CKR_MECHANISM_INVALID, CKR_MECHANISM_PARAM_INVALID, CKR_OK, CKR_OPERATION_ACTIVE, CKR_PIN_EXPIRED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_USER_NOT_LOGGED_IN. |
Fragmentos de código
-
Fragmento de código de Golang
// Use DecryptUpdate if you would like to breakup // the decrypt operation into multiple suboperations DecryptUpdateRequest1 := &pb.DecryptUpdateRequest{ State: DecryptInitResponse.State, Ciphered: ciphertext[:16], // encrypted data from a previous encrypt operation } DecryptUpdateResponse, err := cryptoClient.DecryptUpdate(context.Background(), DecryptUpdateRequest1) plaintext := DecryptUpdateResponse.Plain[:] DecryptUpdateRequest2 := &pb.DecryptUpdateRequest{ State: DecryptUpdateResponse.State, Ciphered: ciphertext[16:], // encrypted data from a previous encrypt operation } DecryptUpdateResponse, err := cryptoClient.DecryptUpdate(context.Background(), DecryptUpdateRequest2) plaintext = append(plaintext, DecryptUpdateResponse.Plain...) -
Fragmento de código de JavaScript
client.DecryptUpdate({ State: state, Ciphered: ciphertext.slice(0, 16) }, (err, data={}) => { cb(err, data.State, data.Plain); });
DecryptFinal
La función DecryptFinal finaliza una operación de descifrado de varias partes.
| Descripción | Enlaza con m_DecryptFinal de EP11, que es una implementación de C_DecryptFinal de PKCS #11. |
|
|---|---|---|
| Parámetros |
message DecryptFinalRequest {
bytes State = 1;
}
message DecryptFinalResponse {
bytes Plain = 2;
}
|
|
| Valores de retorno | Envuelve el error de EP11 en el mensaje Grep11Error. |
| Descripción |
Implementación de No actualiza El blob El blob |
|---|---|
| Parámetros |
CK_RV m_DecryptFinal (
const unsigned char *state, size_t statelen,
CK_BYTE_PTR plain, CK_ULONG_PTR plainlen,
destino target_t
);
|
| Valores de retorno | Un subconjunto de los valores de retorno de C_DecryptFinal. Para obtener más información, consulte el capítulo Valores de retorno del documento de estructura de biblioteca PKCS #11 (EP11) Enterprise. |
| Descripción |
La operación de descifrado se debe inicializar con Si los datos de texto cifrado de entrada no se pueden descifrar debido a que tienen una longitud inadecuada, es posible que se devuelva |
|---|---|
| Parámetros |
CK_DEFINE_FUNCTION(CK_RV, C_DecryptFinal)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pLastPart,
CK_ULONG_PTR pulLastPartLen
);
|
| Valores de retorno | CKR_ARGUMENTS_BAD, CKR_BUFFER_TOO_SMALL, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_ENCRYPTED_DATA_INVALID, CKR_ENCRYPTED_DATA_LEN_RANGE, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOT_INITIALIZED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_USER_NOT_LOGGED_IN. |
Fragmentos de código
-
Fragmento de código de Golang
DecryptFinalRequest := &pb.DecryptFinalRequest { State: DecrypUpdateResponse.State, } DecryptFinalResponse, err := cryptoClient.DecryptFinal(context.Background(), DecryptFinalRequest) -
Fragmento de código de JavaScript
client.DecryptFinal({ State: state }, (err, data={}) => { cb(err, Buffer.concat([plaintext, data.Plain])); });
DecryptSingle
La función DecryptSingle procesa datos en un paso con una llamada. No devuelve ningún estado al host y solo devuelve los datos descifrados. Esta función es una extensión de IBM EP11 a la especificación estándar PKCS #11 y es una
combinación de las funciones DecryptInit y Decrypt. Le permite completar una operación de descifrado con una sola llamada en lugar de una serie de llamadas.
| Descripción | Se enlaza a EP11 m_DecryptSingle. |
|
|---|---|---|
| Parámetros |
message DecryptSingleRequest {
bytes Key = 1;
Mechanism Mech = 2;
bytes Ciphered = 3;
}
message DecryptSingleResponse {
bytes Plain = 4;
}
|
|
| Valores de retorno | Envuelve el error de EP11 en el mensaje Grep11Error. |
| Descripción |
Variante no estándar de Se trata del método preferido a la hora de realizar el cifrado de datos en un paso para aplicaciones compatibles con XCP. Funcionalmente, equivale a Si el programa de fondo admite claves residentes, la clave también puede ser un controlador de claves residentes. Consulte también: El blob |
|---|---|
| Parámetros |
CK_RV m_DecryptSingle (
const unsigned char *key, size_t keylen,
CK_MECHANISM_PTR mech,
CK_BYTE_PTR ciphered, CK_ULONG cipheredlen,
CK_BYTE_PTR plain, CK_ULONG_PTR plainlen,
destino target_t
);
|
| Valores de retorno | Un subconjunto de los valores de retorno de C_Decrypt. Para obtener más información, consulte el capítulo Valores de retorno del documento de estructura de biblioteca PKCS #11 (EP11) Enterprise. |
Fragmentos de código
-
Fragmento de código de Golang
// Generate 16 bytes of random data for the initialization vector GenerateRandomRequest := &pb.GenerateRandomRequest{ Len: (uint64)(ep11.AES_BLOCK_SIZE), } GenerateRandomResponse, err := cryptoClient.GenerateRandom(context.Background(), GenerateRandomRequest) if err != nil { return nil, fmt.Errorf("GenerateRandom error: %s", err) } iv := GenerateRandomResponse.Rnd[:ep11.AES_BLOCK_SIZE] fmt.Println("Generated IV") DecryptSingleRequest := &pb.DecryptSingleRequest { Key: GenerateKeyResponse.KeyBytes, Mech: &pb.Mechanism{Mechanism: ep11.CKM_AES_CBC_PAD, Parameter: util.SetMechParm(iv)}, Ciphered: EncryptSingleResponse.Ciphered, // encrypted data from a previous encrypt operation } DecryptSingleResponse, err := cryptoClient.DecryptSingle(context.Background(), DecryptSingleRequest) -
Fragmento de código de JavaScript
client.DecryptSingle({ Mech: { Mechanism: ep11.CKM_AES_CBC_PAD, ParameterB: iv }, Key: bobDerived.NewKey, Ciphered: ciphertext }, (err, response) => { callback(err, response); });
Firma y verificación de datos
GREP11 proporciona un conjunto de funciones para firmar datos y verificar firmas o códigos de autenticación de mensajes (MAC). Es posible que tenga que invocar una serie de subfunciones para realizar una operación de firma. Por ejemplo, la operación
de firma de datos de varias partes consta de las suboperaciones SignInit, SignUpdatey SignFinal.
SignInit
La función SignInit inicializa una operación de firma. Debe llamar a esta función primero para realizar una operación de firma.
| Descripción | Se enlaza a EP11 m_SignInit, que es una implementación de PKCS #11 C_SignInit. |
|
|---|---|---|
| Parámetros |
message SignInitRequest {
Mechanism Mech = 2;
bytes PrivKey = 3;
}
message SignInitResponse {
bytes State = 1;
}
|
|
| Valores de retorno | Envuelve el error de EP11 en el mensaje Grep11Error. |
| Descripción | Implementación de C_SignInit de PKCS #11.
|
|---|---|
| Parámetros |
CK_RV m_SignInit (
unsigned char * state, size_t * statelen,
CK_MECHANISM_PTR mech,
const unsigned char *privKey, size_t privKeylen,
destino target_t
);
|
| Valores de retorno | Un subconjunto de los valores de retorno de C_Decrypt. Para obtener más información, consulte el capítulo Valores de retorno del documento de estructura de biblioteca PKCS #11 (EP11) Enterprise. |
| Descripción |
El atributo Después de llamar a |
|---|---|
| Parámetros |
CK_DEFINE_FUNCTION(CK_RV, C_SignInit)(
CK_SESSION_HANDLE hSession,
CK_MECHANISM_PTR pMechanism,
CK_OBJECT_HANDLE hKey
);
|
| Valores de retorno | CKR_ARGUMENTS_BAD, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_KEY_FUNCTION_NOT_PERMITTED, CKR_KEY_HANDLE_INVALID, CKR_KEY_SIZE_RANGE, CKR_KEY_TYPE_INCONSISTENT, CKR_MECHANISM_INVALID, CKR_MECHANISM_PARAM_INVALID, CKR_OK, CKR_OPERATION_ACTIVE, CKR_PIN_EXPIRED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_USER_NOT_LOGGED_IN. |
Fragmentos de código
-
Fragmento de código de Golang
SignInitRequest := &pb.SignInitRequest { Mech: &pb.Mechanism{Mechanism: ep11.CKM_SHA1_RSA_PKCS}, PrivKey: GenerateKeyPairResponse.PrivKeyBytes, } SignInitResponse, err := cryptoClient.SignInit(context.Background(), SignInitRequest) -
Fragmento de código de JavaScript
client.SignInit({ Mech: { Mechanism: ep11.CKM_SHA1_RSA_PKCS }, PrivKey: keys.PrivKeyBytes }, (err, data={}) => { cb(err, data.State); });
Signo
La función Sign firma datos de una sola parte. No es necesario realizar las suboperaciones SignUpdate y SignFinal para una firma de una única parte. Antes de invocar esta función, asegúrese de que primero
ejecuta SignInit.
| Descripción | Enlaza con m_Sign de EP11, que es una implementación de C_Sign de PKCS #11. |
|
|---|---|---|
| Parámetros |
message SignRequest {
bytes State = 1;
bytes Data = 2;
}
message SignResponse {
bytes Signature = 3;
}
|
|
| Valores de retorno | Envuelve el error de EP11 en el mensaje Grep11Error. |
| Descripción |
Implementación de No actualiza El blob El blob |
|---|---|
| Parámetros |
CK_RV m_Sign (
const unsigned char *state, size_t statelen,
CK_BYTE_PTR data, CK_ULONG datalen,
CK_BYTE_PTR signature, CK_ULONG_PTR signaturelen,
destino target_t
);
|
| Valores de retorno | Un subconjunto de los valores de retorno de C_Sign. Para obtener más información, consulte el capítulo Valores de retorno del documento de estructura de biblioteca PKCS #11 (EP11) Enterprise. |
| Descripción |
La operación de firma se debe inicializar con
Para la mayoría de los mecanismos, |
|---|---|
| Parámetros |
CK_DEFINE_FUNCTION(CK_RV, C_Sign)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pData,
CK_ULONG ulDataLen,
CK_BYTE_PTR pSignature,
CK_ULONG_PTR pulSignatureLen
);
|
| Valores de retorno | CKR_ARGUMENTS_BAD, CKR_BUFFER_TOO_SMALL, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DATA_INVALID, CKR_DATA_LEN_RANGE, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOT_INITIALIZED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_USER_NOT_LOGGED_IN, CKR_FUNCTION_REJECTED. |
Fragmentos de código
-
Fragmento de código de Golang
msgHash := sha256.Sum256([]byte("This data needs to be signed")) SignRequest := &pb.SignRequest{ State: SignInitResponse.State, Data: msgHash[:], } // Sign the data SignResponse, err := cryptoClient.Sign(context.Background(), SignRequest) -
Fragmento de código de JavaScript
client.Sign({ State: state, Data: dataToSign }, (err, data={}) => { cb(err, data.Signature); });
SignUpdate
La función SignUpdate continúa una operación de firma de varias partes. Antes de invocar esta función, asegúrese de que primero ejecuta SignInit.
| Descripción | Enlaza con m_SignUpdate de EP11, que es una implementación de C_SignUpdate de PKCS #11. |
|
|---|---|---|
| Parámetros |
message SignUpdateRequest {
bytes State = 1;
bytes Data = 2;
}
message SignUpdateResponse {
bytes State = 1;
}
|
|
| Valores de retorno | Envuelve el error de EP11 en el mensaje Grep11Error. |
| Descripción |
Implementación de C_SignUpdate de PKCS #11.
El blob El blob |
|---|---|
| Parámetros |
CK_RV m_SignUpdate (
unsigned char *state, size_t statelen,
CK_BYTE_PTR data, CK_ULONG datalen,
destino target_t
);
|
| Valores de retorno | Un subconjunto de los valores de retorno de C_SignUpdate. Para obtener más información, consulte el capítulo Valores de retorno del documento de estructura de biblioteca PKCS #11 (EP11) Enterprise. |
| Descripción |
La operación de firma se debe inicializar con |
|---|---|
| Parámetros |
CK_DEFINE_FUNCTION(CK_RV, C_SignUpdate)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pPart,
CK_ULONG ulPartLen
);
|
| Valores de retorno | CKR_ARGUMENTS_BAD, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DATA_LEN_RANGE, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOT_INITIALIZED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_USER_NOT_LOGGED_IN. |
Fragmentos de código
-
Fragmento de código de Golang
// Use SignUpdate if you would like to breakup // the sign operation into multiple suboperations SignUpdateRequest1 := &pb.SignUpdateRequest { State: SignInitResponse.State, Data: msgHash[:16], } SignUpdateResponse, err := cryptoClient.SignUpdate(context.Background(), SignUpdateRequest1) SignUpdateRequest2 := &pb.SignUpdateRequest { State: SignUpdateResponse.State, Data: msgHash[16:], } SignUpdateResponse, err := cryptoClient.SignUpdate(context.Background(), SignUpdateRequest2) -
Fragmento de código de JavaScript
client.SignUpdate({ State: state, Data: digest }, (err, response) => { callback(err, response); });
SignFinal
La función SignFinal finaliza una operación de firma de varias partes.
| Descripción | Enlaza con m_SignFinal de EP11, que es una implementación de C_SignFinal de PKCS #11. |
|
|---|---|---|
| Parámetros |
message SignFinalRequest {
bytes State = 1;
}
message SignFinalResponse {
bytes Signature = 2;
}
|
|
| Valores de retorno | Envuelve el error de EP11 en el mensaje Grep11Error. |
| Descripción |
Implementación de No actualiza El blob El blob |
|---|---|
| Parámetros |
CK_RV m_SignFinal (
const unsigned char *state, size_t statelen,
CK_BYTE_PTR signature, CK_ULONG_PTR signaturelen,
destino target_t
);
|
| Valores de retorno | Un subconjunto de los valores de retorno de C_SignFinal. Para obtener más información, consulte el capítulo Valores de retorno del documento de estructura de biblioteca PKCS #11 (EP11) Enterprise. |
| Descripción |
La operación de firma se debe inicializar con |
|---|---|
| Parámetros |
CK_DEFINE_FUNCTION(CK_RV, C_SignFinal)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pSignature,
CK_ULONG_PTR pulSignatureLen
);
|
| Valores de retorno | CKR_ARGUMENTS_BAD, CKR_BUFFER_TOO_SMALL, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DATA_LEN_RANGE, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOT_INITIALIZED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_USER_NOT_LOGGED_IN, CKR_FUNCTION_REJECTED. |
Fragmentos de código
-
Fragmento de código de Golang
SignFinalRequest := &pb.SignFinalRequest { State: SignUpdateResponse.State, } SignFinalResponse, err := cryptoClient.SignFinal(context.Background(), SignFinalRequest) -
Fragmento de código de JavaScript
client.SignFinal({ State: state }, (err, response) => { callback(err, response); });
SignSingle
La función SignSingle firma o calcula el MAC de los datos en un paso con una llamada y sin crear ningún estado de resumen intermedio. No devuelve ningún estado al host y solo devuelve el resultado. Esta función es una extensión
de IBM EP11 a la especificación estándar PKCS #11 y es una combinación de las funciones SignInit y Sign. Le permite completar una operación de firma con una sola llamada en lugar de una serie de llamadas.
| Descripción | Se enlaza a EP11 m_signSingle. |
|
|---|---|---|
| Parámetros |
message SignSingleRequest {
bytes PrivKey = 1;
Mechanism Mech = 2;
bytes Data = 3;
}
message SignSingleResponse {
bytes Signature = 4;
}
|
|
| Valores de retorno | Envuelve el error de EP11 en el mensaje Grep11Error. |
| Descripción |
Combinación de extensión no estándar de Este es el modo preferido de firmar, sin un viaje de ida y vuelta adicional, de cifrado y descifrado. Funcionalmente, El blob Se admiten solicitudes de datos múltiples para firmas HMAC y CMAC (subvariantes 2 y 3). Consulte también: |
|---|---|
| Parámetros |
CK_RV m_SignSingle (
const unsigned char *privKey, size_t privKeylen,
CK_MECHANISM_PTR mech,
CK_BYTE_PTR data, CK_ULONG datalen,
CK_BYTE_PTR signature, CK_ULONG_PTR signaturelen,
destino target_t
);
|
| Valores de retorno | Un subconjunto de los valores de retorno de C_Decrypt. Para obtener más información, consulte el capítulo Valores de retorno del documento de estructura de biblioteca PKCS #11 (EP11) Enterprise. |
Fragmentos de código
-
Fragmento de código de Golang
msgHash := sha256.Sum256([]byte("This data needs to be signed")) SignSingleRequest := &pb.SignSingleRequest { PrivKey: GenerateKeyPairResponse.PrivKeyBytes, Mech: &pb.Mechanism{Mechanism: ep11.CKM_SHA256_RSA_PKCS}, Data: msgHash[:], } SignSingleResponse, err := cryptoClient.SignSingle(context.Background(), SignSingleRequest) -
Fragmento de código de JavaScript
client.SignSingle({ Mech: { Mechanism: ep11.CKM_ECDSA }, PrivKey: key, Data: digest }, (err, response) => { callback(err, response); });
VerifyInit
La función VerifyInit inicializa una operación de verificación. Debe llamar a esta función primero para verificar una firma.
| Descripción | Enlaza con m_VerifyInit de EP11, que es una implementación de C_VerifyInit de PKCS #11. |
|
|---|---|---|
| Parámetros |
message VerifyInitRequest {
Mechanism Mech = 2;
bytes PubKey = 3;
}
message VerifyInitResponse {
bytes State = 1;
}
|
|
| Valores de retorno | Envuelve el error de EP11 en el mensaje Grep11Error. |
| Descripción |
Implementación de Para los mecanismos de clave pública, Si se inicializa una operación de HMAC, las restricciones de sesión del objeto El blob Nota: |
|---|---|
| Parámetros |
CK_RV m_VerifyInit (
unsigned char * state, size_t * statelen,
CK_MECHANISM_PTR mech,
const unsigned char *pubKey, size_t pubKeylen,
destino target_t
);
|
| Valores de retorno | Un subconjunto de los valores de retorno de C_VerifyInit. Para obtener más información, consulte el capítulo Valores de retorno del documento de estructura de biblioteca PKCS #11 (EP11) Enterprise. |
| Descripción |
El atributo Después de llamar a |
|---|---|
| Parámetros |
CK_DEFINE_FUNCTION(CK_RV, C_VerifyInit)(
CK_SESSION_HANDLE hSession,
CK_MECHANISM_PTR pMechanism,
CK_OBJECT_HANDLE hKey
);
|
| Valores de retorno | CKR_ARGUMENTS_BAD, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_KEY_FUNCTION_NOT_PERMITTED, CKR_KEY_HANDLE_INVALID, CKR_KEY_SIZE_RANGE, CKR_KEY_TYPE_INCONSISTENT, CKR_MECHANISM_INVALID, CKR_MECHANISM_PARAM_INVALID, CKR_OK, CKR_OPERATION_ACTIVE, CKR_PIN_EXPIRED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_USER_NOT_LOGGED_IN. |
Fragmentos de código
-
Fragmento de código de Golang
VerifyInitRequest := &pb.VerifyInitRequest { Mech: &pb.Mechanism{Mechanism: ep11.CKM_SHA1_RSA_PKCS}, PubKey: GenerateKeyPairResponse.PubKeyBytes, } VerifyInitResponse, err := cryptoClient.VerifyInit(context.Background(), VerifyInitRequest) -
Fragmento de código de JavaScript
client.VerifyInit({ Mech: { Mechanism: ep11.CKM_SHA1_RSA_PKCS }, PubKey: keys.PubKeyBytes }, (err, data={}) => { cb(err, signature, data.State); });
Verificar
La función Verify verifica una firma de los datos de una sola parte. No es necesario realizar las suboperaciones VerifyUpdate y VerifyFinal para la verificación de una única parte. Antes de invocar esta
función, asegúrese de que primero ejecuta VerifyInit.
| Descripción | Enlaza con m_Verify de EP11, que es una implementación de C_Verify de PKCS #11. |
|
|---|---|---|
| Parámetros |
message VerifyRequest {
bytes State = 1;
bytes Data = 2;
bytes Signature = 3;
}
message VerifyResponse {
}
|
|
| Valores de retorno | Envuelve el error de EP11 en el mensaje Grep11Error. |
| Descripción |
Implementación de No actualiza El orden relativo de los datos y la firma son relativos invertidos a El blob El blob |
|---|---|
| Parámetros |
CK_RV m_Verify (
const unsigned char *state, size_t statelen,
CK_BYTE_PTR data, CK_ULONG datalen,
CK_BYTE_PTR signature, CK_ULONG signaturelen,
destino target_t
);
|
| Valores de retorno | Un subconjunto de los valores de retorno de C_Verify. Para obtener más información, consulte el capítulo Valores de retorno del documento de estructura de biblioteca PKCS #11 (EP11) Enterprise. |
| Descripción |
La operación de verificación se debe inicializar con Una llamada satisfactoria a
Para la mayoría de los mecanismos, |
|---|---|
| Parámetros |
CK_DEFINE_FUNCTION(CK_RV, C_Verify)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pData,
CK_ULONG ulDataLen,
CK_BYTE_PTR pSignature,
CK_ULONG ulSignatureLen
);
|
| Valores de retorno | CKR_ARGUMENTS_BAD, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DATA_INVALID, CKR_DATA_LEN_RANGE, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOT_INITIALIZED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_SIGNATURE_INVALID, CKR_SIGNATURE_LEN_RANGE. |
Fragmentos de código
-
Fragmento de código de Golang
VerifyRequest := &pb.VerifyRequest { State: VerifyInitResponse.State, Data: msgHash[:], Signature: SignResponse.Signature, } VerifyResponse, err := cryptoClient.Verify(context.Background(), VerifyRequest) -
Fragmento de código de JavaScript
client.Verify({ State: state, Data: dataToSign, Signature: signature }, (err, data={}) => { cb(err, signature); });
VerifyUpdate
La función VerifyUpdate continúa una operación de verificación de varias partes. Antes de invocar esta función, asegúrese de que primero ejecuta VerifyInit.
| Descripción | Enlaza con m_VerifyUpdate de EP11, que es una implementación de C_VerifyUpdate de PKCS #11. |
|
|---|---|---|
| Parámetros |
message VerifyUpdateRequest {
bytes State = 1;
bytes Data = 2;
}
message VerifyUpdateResponse {
bytes State = 1;
}
|
|
| Valores de retorno | Envuelve el error de EP11 en el mensaje Grep11Error. |
| Descripción |
Implementación de El blob El blob |
|---|---|
| Parámetros |
CK_RV m_VerifyUpdate (
unsigned char *state, size_t statelen,
CK_BYTE_PTR data, CK_ULONG datalen,
destino target_t
);
|
| Valores de retorno | Un subconjunto de los valores de retorno de C_VerifyUpdate. Para obtener más información, consulte el capítulo Valores de retorno del documento de estructura de biblioteca PKCS #11 (EP11) Enterprise. |
| Descripción |
La operación de verificación se debe inicializar con |
|---|---|
| Parámetros |
CK_DEFINE_FUNCTION(CK_RV, C_VerifyUpdate)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pPart,
CK_ULONG ulPartLen
);
|
| Valores de retorno | CKR_ARGUMENTS_BAD, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DATA_LEN_RANGE, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOT_INITIALIZED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID. |
Fragmentos de código
-
Fragmento de código de Golang
// Use VerifyUpdate if you would like to breakup // the verify operation into multiple suboperations VerifyUpdateRequest1 := &pb.VerifyUpdateRequest { State: VerifyInitResponse.State, Data: msgHash[:16], } VerifyUpdateResponse, err := cryptoClient.VerifyUpdate(context.Background(), VerifyUpdateRequest1) VerifyUpdateRequest2 := &pb.VerifyUpdateRequest { State: VerifyUpdateResponse.State, Data: msgHash[16:], } VerifyUpdateResponse, err := cryptoClient.VerifyUpdate(context.Background(), VerifyUpdateRequest2) -
Fragmento de código de JavaScript
client.VerifyUpdate({ State: state, Data: digest }, (err, response) => { callback(err, response); });
VerifyFinal
La función VerifyFinal finaliza una operación de verificación de varias partes.
| Descripción | Enlaza con m_VerifyFinal de EP11, que es una implementación de C_VerifyFinal de PKCS #11. |
|
|---|---|---|
| Parámetros |
message VerifyFinalRequest {
bytes State = 1;
bytes Signature = 2;
}
message VerifyFinalResponse {
}
|
|
| Valores de retorno | Envuelve el error de EP11 en el mensaje Grep11Error. |
| Descripción |
Implementación de No actualiza El blob El blob |
|---|---|
| Parámetros |
CK_RV m_VerifyFinal (
const unsigned char *state, size_t statelen,
CK_BYTE_PTR signature, CK_ULONG signaturelen,
destino target_t
);
|
| Valores de retorno | Un subconjunto de los valores de retorno de C_VerifyFinal. Para obtener más información, consulte el capítulo Valores de retorno del documento de estructura de biblioteca PKCS #11 (EP11) Enterprise. |
| Descripción |
La operación de verificación se debe inicializar con Una llamada satisfactoria a |
|---|---|
| Parámetros |
CK_DEFINE_FUNCTION(CK_RV, C_VerifyFinal)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pSignature,
CK_ULONG ulSignatureLen
);
|
| Valores de retorno | CKR_ARGUMENTS_BAD, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DATA_LEN_RANGE, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOT_INITIALIZED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_SIGNATURE_INVALID, CKR_SIGNATURE_LEN_RANGE. |
Fragmentos de código
-
Fragmento de código de Golang
VerifyFinalRequest := &pb.VerifyFinalRequest { State: VerifyUpdateResponse.State, Signature: SignResponse.Signature, } VerifyFinalResponse, err := cryptoClient.VerifyFinal(context.Background(), VerifyFinalRequest) -
Fragmento de código de JavaScript
client.VerifyFinal({ State: state, Signature: signature }, (err, response) => { callback(err, response); });
VerifySingle
La función VerifySingle firma o calcula el MAC de los datos en un paso con una llamada y sin crear ningún estado de resumen intermedio. No devuelve ningún estado al host y solo devuelve el resultado de la verificación. Esta función
es una extensión de IBM EP11 a la especificación estándar PKCS #11 y es una combinación de las funciones VerifyInit y Verify. Le permite completar una operación de verificación con una sola llamada en lugar de una
serie de llamadas.
| Descripción | Se enlaza a EP11 m_VerifySingle. |
|
|---|---|---|
| Parámetros |
message VerifySingleRequest {
bytes PubKey = 1;
Mechanism Mech = 2;
bytes Data = 3;
bytes Signature = 4;
}
message VerifySingleResponse {
}
|
|
| Valores de retorno | Envuelve el error de EP11 en el mensaje Grep11Error. |
| Descripción |
Combinación de extensión no estándar de Este es el modo preferido de verificar una firma, sin un viaje de ida y vuelta adicional, de cifrado, descifrado. Funcionalmente, El blob Para los mecanismos de clave pública, Consulte también: |
|---|---|
| Parámetros |
CK_RV m_VerifySingle (
const unsigned char *pubKey, size_t pubKeylen,
CK_MECHANISM_PTR mech,
CK_BYTE_PTR data, CK_ULONG datalen,
CK_BYTE_PTR signature, CK_ULONG signaturelen,
destino target_t
);
|
| Valores de retorno | Un subconjunto de los valores de retorno de C_VerifySingle. Para obtener más información, consulte el capítulo Valores de retorno del documento de estructura de biblioteca PKCS #11 (EP11) Enterprise. |
Fragmentos de código
-
Fragmento de código de Golang
VerifySingleRequest := &pb.VerifySingleRequest { PubKey: GenerateKeyPairResponse.PubKeyByytes, Mech: &pb.Mechanism{Mechanism: ep11.CKM_SHA256_RSA_PKCS}, Data: msgHash[:], Signature: SignSingleResponse.Signature, } VerifySingleResponse, err := cryptoClient.VerifySingle(context.Background(), VerifySingleRequest) -
Fragmento de código de JavaScript
client.VerifySingle({ Mech: { Mechanism: ep11.CKM_SHA256_RSA_PKCS }, PubKey: keys.PubKey, Data: digest, Signature: signature }, (err, response) => { callback(err, response); });
Protección de la integridad de los datos mediante un resumen de mensaje
GREP11 proporciona un conjunto de funciones para crear resúmenes de mensajes diseñados para proteger la integridad de una pieza de datos. Es posible que tenga que invocar una serie de subfunciones para realizar una operación de resumen. Por
ejemplo, la operación de resumen de varias partes consta de las suboperaciones DigestInit, DigestUpdate y DigestFinal.
DigestInit
La función DigestInit inicializa una operación de resumen de mensajes. Debe ejecutar esta función primero para realizar una operación de resumen.
| Descripción | Enlaza con m_DigestInit de EP11, que es una implementación de C_DigestInit de PKCS #11. |
|
|---|---|---|
| Parámetros |
message DigestInitRequest {
Mechanism Mech = 2;
}
message DigestInitResponse {
bytes State = 1;
}
|
|
| Valores de retorno | Envuelve el error de EP11 en el mensaje Grep11Error. |
| Descripción |
Implementación de Crea el estado de resumen envuelto. Nota: las consultas de tamaño reciben soporte pero el estado envuelto siempre lo devuelve el programa de fondo, al contrario que ocurre con la mayoría de las consultas de tamaño (que se devuelve un tamaño de salida,
en lugar de la salida real). Los estados Durante las consultas de tamaño, el host solamente descarta el estado devuelto e informa del tamaño del blob (en El blob |
|---|---|
| Parámetros |
CK_RV m_DigestInit (
unsigned char * state, size_t * len,
const CK_MECHANISM_PTR mech,
destino target_t
);
|
| Valores de retorno | Un subconjunto de los valores de retorno de C_DigestInit. Para obtener más información, consulte el capítulo Valores de retorno del documento de estructura de biblioteca PKCS #11 (EP11) Enterprise. |
| Descripción |
Después de llamar a |
|---|---|
| Parámetros |
CK_DEFINE_FUNCTION(CK_RV, C_DigestInit)(
CK_SESSION_HANDLE hSession,
CK_MECHANISM_PTR pMechanism
);
|
| Valores de retorno | CKR_ARGUMENTS_BAD, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_MECHANISM_INVALID, CKR_MECHANISM_PARAM_INVALID, CKR_OK, CKR_OPERATION_ACTIVE, CKR_PIN_EXPIRED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_USER_NOT_LOGGED_IN. |
Fragmentos de código
-
Fragmento de código de Golang
DigestInitRequest := &pb.DigestInitRequest { Mech: &pb.Mechanism{Mechanism: ep11.CKM_SHA256}, } DigestInitResponse, err := cryptoClient.DigestInit(context.Background(), DigestInitRequest) -
Fragmento de código de JavaScript
client.DigestInit({ Mech: { Mechanism: ep11.CKM_SHA256 } }, (err, response) => { callback(err, response); });
Digest
La función Digest realiza un resumen de datos de una sola parte. No es necesario llamar a las funciones DigestUpdate y DigestFinal para resumir los datos de una sola parte. Antes de invocar esta función,
asegúrese de que primero ejecuta DigestInit. Cuando establezca parámetros, tenga en cuenta que la longitud de los datos de entrada es cero y el puntero que apunta a la ubicación de datos de entrada es NULL.
| Descripción | Enlaza con m_Digest de EP11, que es una implementación de C_Digest de PKCS #11. |
|
|---|---|---|
| Parámetros |
message DigestRequest {
bytes State = 1;
bytes Data = 2;
}
message DigestResponse {
bytes Digest = 3;
}
|
|
| Valores de retorno | Envuelve el error de EP11 en el mensaje Grep11Error. |
| Descripción |
Implementación de Si un objeto de resumen tiene exactamente 0 (cero) bytes que se le añaden después de crearlo, en cualquier combinación de transferencias de cero bytes, todavía puede realizar un resumen de un paso, incluso si es necesario rechazarlo mediante una implementación estricta. No actualiza Las implementaciones pueden realizar
El blob |
|---|---|
| Parámetros |
CK_RV m_Digest (
const unsigned char *state, size_t statelen,
CK_BYTE_PTR data, CK_ULONG datalen,
CK_BYTE_PTR digest, CK_ULONG_PTR digestlen,
destino target_t
);
|
| Valores de retorno | Un subconjunto de los valores de retorno de C_Digest. Para obtener más información, consulte el capítulo Valores de retorno del documento de estructura de biblioteca PKCS #11 (EP11) Enterprise. |
| Descripción |
La operación de resumen se debe inicializar con
Los datos de entrada y la salida de resumen pueden estar en el mismo lugar, es decir, estaría bien si pData y pDigest apuntaran a la misma ubicación.
|
|---|---|
| Parámetros |
CK_DEFINE_FUNCTION(CK_RV, C_Digest)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pData,
CK_ULONG ulDataLen,
CK_BYTE_PTR pDigest,
CK_ULONG_PTR pulDigestLen
);
|
| Valores de retorno | CKR_ARGUMENTS_BAD, CKR_BUFFER_TOO_SMALL, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOT_INITIALIZED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID. |
Fragmentos de código
-
Fragmento de código de Golang
digestData := []byte("Create a digest for this string") DigestRequest := &pb.DigestRequest { State: DigestInitResponse.State, Data: digestData, } DigestResponse, err := cryptoClient.Digest(context.Background(), DigestRequest) -
Fragmento de código de JavaScript
client.Digest({ State: state, Data: Buffer.from(digestData) }, (err, data={}) => { cb(err, data.Digest); }); }
DigestUpdate
La función DigestUpdate continúa una operación de resumen de varias partes. Antes de invocar esta función, asegúrese de que primero ejecuta DigestInit. Cuando establezca parámetros, tenga en cuenta que la longitud
de los datos de entrada es cero y el puntero que apunta a la ubicación de datos de entrada es NULL.
| Descripción | Enlaza con m_DigestUpdate de EP11, que es una implementación de C_DigestUpdate de PKCS #11. |
|
|---|---|---|
| Parámetros |
message DigestUpdateRequest {
bytes State = 1;
bytes Data = 2;
}
message DigestUpdateResponse {
bytes State = 1;
}
|
|
| Valores de retorno | Envuelve el error de EP11 en el mensaje Grep11Error. |
| Descripción |
Implementación de
El blob El blob Consulte también: |
|---|---|
| Parámetros |
CK_RV m_DigestUpdate (
unsigned char *state, size_t statelen,
CK_BYTE_PTR data, CK_ULONG datalen,
destino target_t
);
|
| Valores de retorno | Un subconjunto de los valores de retorno de C_DigestUpdate. Para obtener más información, consulte el capítulo Valores de retorno del documento de estructura de biblioteca PKCS #11 (EP11) Enterprise. |
| Descripción |
La operación de resumen de mensajes se debe inicializar con |
|---|---|
| Parámetros |
CK_DEFINE_FUNCTION(CK_RV, C_DigestUpdate)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pPart,
CK_ULONG ulPartLen
);
|
| Valores de retorno | CKR_ARGUMENTS_BAD, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOT_INITIALIZED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID. |
Fragmentos de código
-
Fragmento de código de Golang
// Use DigestUpdate if you would like to breakup // the digest operation into multiple suboperations DigestUpdateRequest1 := &pb.DigestUpdateRequest { State: DigestInitResponse.State, Data: digestData[:16], } DigestUpdateResponse, err := cryptoClient.DigestUpdate(context.Background(), DigestUpdateRequest1) DigestUpdateRequest2 := &pb.DigestUpdateRequest { State: DigestUpdateResponse.State, Data: digestData[16:], } DigestUpdateResponse, err := cryptoClient.DigestUpdate(context.Background(), DigestUpdateRequest2) -
Fragmento de código de JavaScript
client.DigestUpdate({ State: state, Data: Buffer.from(digestData.substr(0, 64)) }, (err, data={}) => { cb(err, data.State); });
DigestFinal
La función DigestFinal finaliza una operación de resumen de varias partes.
| Descripción | Enlaza con m_DigestFinal de EP11, que es una implementación de C_DigestFinal de PKCS #11. |
|
|---|---|---|
| Parámetros |
message DigestFinalRequest {
bytes State = 1;
}
message DigestFinalResponse {
bytes Digest = 2;
}
|
|
| Valores de retorno | Envuelve el error de EP11 en el mensaje Grep11Error. |
| Descripción |
Implementación de
No actualiza El blob El blob |
|---|---|
| Parámetros |
CK_RV m_DigestFinal (
const unsigned char *state, size_t statelen,
CK_BYTE_PTR digest, CK_ULONG_PTR digestlen,
destino target_t
);
|
| Valores de retorno | Un subconjunto de los valores de retorno de C_DigestFinal. Para obtener más información, consulte el capítulo Valores de retorno del documento de estructura de biblioteca PKCS #11 (EP11) Enterprise. |
| Descripción |
La operación de resumen se debe inicializar con |
|---|---|
| Parámetros |
CK_DEFINE_FUNCTION(CK_RV, C_DigestFinal)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pDigest,
CK_ULONG_PTR pulDigestLen
);
|
| Valores de retorno | CKR_ARGUMENTS_BAD, CKR_BUFFER_TOO_SMALL, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOT_INITIALIZED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID. |
Fragmentos de código
-
Fragmento de código de Golang
DigestFinalRequest := &pb.DigestFinalRequest { State: DigestUpdateResponse.State, } DigestFinalResponse, err := cryptoClient.DigestFinal(context.Background(), DigestFinalRequest) -
Fragmento de código de JavaScript
client.DigestFinal({ State: state }, (err, response) => { callback(err, response); });
DigestSingle
La función DigestSingle resumen datos en un paso con una llamada y sin crear ningún estado de resumen intermedio ni viajes de ida y vuelta innecesarios. Esta función es una extensión de IBM EP11 a la especificación estándar PKCS
#11 y es una combinación de las funciones DigestInit y Digest. Le permite completar una operación de resumen con una sola llamada en lugar de una serie de llamadas.
| Descripción | Se enlaza a EP11 m_DigestSingle. |
|
|---|---|---|
| Parámetros |
message DigestSingleRequest {
Mechanism Mech = 1;
bytes Data = 2;
}
message DigestSingleResponse {
bytes Digest = 3;
}
|
|
| Valores de retorno | Envuelve el error de EP11 en el mensaje Grep11Error. |
| Descripción |
Combinación de extensión no estándar de Se trata del método preferido a la hora de realizar un resumen de texto simple para aplicaciones compatibles con XCP. Funcionalmente, Si se tiene que resumir un clave, se debe utilizar No devuelve ningún estado al host, solamente el resultado del resumen. No hay parámetros que no sean de PKCS #11 porque todo se utiliza directamente a partir de la llamada de PKCS #11. |
|---|---|
| Parámetros |
CK_RV m_DigestSingle (
CK_MECHANISM_PTR mech,
CK_BYTE_PTR data, CK_ULONG datalen,
CK_BYTE_PTR digest, CK_ULONG_PTR digestlen,
destino target_t
);
|
| Valores de retorno | Un subconjunto de los valores de retorno de C_DigestSingle. Para obtener más información, consulte el capítulo Valores de retorno del documento de estructura de biblioteca PKCS #11 (EP11) Enterprise. |
Fragmentos de código
-
Fragmento de código de Golang
digestData := []byte("Create a digest for this string") DigestSingleRequest := &pb.DigestSingleRequest { Mech: &pb.Mechanism{Mechanism: ep11.CKM_SHA256}, Data: digestData, } DigestSingleResponse, err := cryptoClient.DigestSingle(context.Background(), DigestSingleRequest) -
Fragmento de código de JavaScript
client.DigestSingle({ Mech: { Mechanism: ep11.CKM_SHA256 }, Data: Buffer.from(digestData) }, (err, response) => { callback(err, response); });
Ejemplos de código
La API GREP11 soporta lenguajes de programación con bibliotecas gRPC. Se proporcionan dos repositorios GitHub de ejemplo para probar la API de GREP11: