Operazioni crittografiche: API GREP11
IBM Cloud® Hyper Protect Crypto Services fornisce una serie di funzioni di crittografia eseguite in un HSM(Hardware Security Module)A physical appliance that provides on-demand encryption, key management, and key storage as a managed service. nel cloud. Puoi eseguire operazioni di crittografia accedendo in remoto a queste funzioni con le chiamate API Enterprise PKCS #11 (EP11) su gRPC (noto anche come GREP11).
Per ulteriori informazioni su come le funzioni GREP11 sono correlate a PKCS #11 e EP11, vedi GREP11.
L'API GREP11 può elaborare fino a 500 richieste al secondo per una singola unità di crittografia.
Accesso all'API
Un endpoint API GREP11, una chiave API dell'ID servizio e un endpoint IAM sono necessari per l'inizializzazione prima di eseguire qualsiasi chiamata della funzione API GREP11. Per ulteriori informazioni, vedi Generazione di una richiesta API GREP11.
Gestione degli errori
GREP11 si basa sulla specifica gRPC per la gestione degli errori. Quando si verifica un errore, i client gRPC ricevono un Buffer di protocollo message Status.
message Status {
int32 code = 1;
string message = 2;
repeated google.protobuf.Any details = 3;
}
Nel messaggio di errore,
codeinclude il codice di stato, che deve essere un valore di tipo enumerato (enum) del campogoogle.rpc.Code.messageinclude un messaggio di errore rivolto agli sviluppatori in inglese. Qualsiasi messaggio di errore rivolto all'utente deve essere localizzato e inviato nel campogoogle.rpc.Status.detailso localizzato dall'utente.detailselenca i messaggi che trasportano i dettagli dell'errore. Per l'API è disponibile una serie comune di tipi di messaggi.
GREP11 utilizza il campo Detail per collegare ulteriori informazioni sul codice di errore.
message Grep11Error {
uint64 Code = 1;
string Detail = 2;
bool Retry = 3;
}
È possibile eseguire il cast del campo Code sul valore CK_RV in PKCS #11. Questo campo contiene i codici di errore definiti dalla specifica PKCS #11 o le estensioni del fornitore definite da EP11. EP11 utilizza solo un sottoinsieme di valori restituiti che sono definiti da PKCS #11. Per ulteriori informazioni, consultare la sezione
10.1.6 Valori di ritorno in Enterprise PKCS #11 Struttura della libreria.
È disponibile un esempio in Golang che tratta gli errori.
Elenco di funzioni GREP11
Le funzioni PKCS #11 contrassegnate con un asterisco (*) nella tabella sono implementate da EP11 su gRPC. Le altre non sono implementate,
| PKCS #11 | Enterprise PKCS #11 | Enterprise PKCS #11 su gRPC | Descrizione |
|---|---|---|---|
| C_Initialize | N/D | N/D | Inizializza Cryptoki. |
| C_Finalize | N/D | N/D | Ripulisce varie risorse associate a Cryptoki. |
| C_GetInfo | N/D | N/D | Ottiene informazioni generali su Cryptoki. |
| C_GetFunctionList | N/D | N/D | Ottiene i punti di ingresso delle funzioni libreria Cryptoki. |
| C_GetSlotList | N/D | N/D | Ottiene un elenco di slot nel sistema. |
| C_GetSlotInfo | N/D | N/D | Ottiene informazioni su uno specifico slot. |
| C_GetTokenInfo | N/D | N/D | Ottiene informazioni su uno specifico token. |
| C_WaitForSlotEvent | N/D | N/D | Attende che si verifichi un evento di slot (inserimento token, rimozione e così via). |
| C_GetMechanismList* | m_GetMechanismList | GetMechanismList | Ottiene un elenco di meccanismi supportati da un token. |
| C_GetMechanismInfo* | m_GetMechanismInfo | GetMechanismInfo | Ottiene informazioni su uno specifico meccanismo. |
| C_InitToken | N/D | N/D | Inizializza un token. |
| C_InitPIN | N/D | N/D | Inizializza il PIN dell'utente normale. |
| C_SetPIN | N/D | N/D | Modifica il PIN dell'utente corrente. |
| C_OpenSession | N/D | N/D | Apre una connessione tra un'applicazione e uno specifico token o configura un callback dell'applicazione per l'inserimento del token. |
| C_CloseSession | N/D | N/D | Chiude una sessione. |
| C_CloseAllSessions | N/D | N/D | Chiude tutte le sessioni con un token. |
| C_GetSessionInfo | N/D | N/D | Ottiene le informazioni sulla sessione. |
| C_GetOperationState | N/D | N/D | Ottiene lo stato delle operazioni crittografiche di una sessione. |
| C_SetOperationState | N/D | N/D | Imposta lo stato delle operazioni crittografiche di una sessione. |
| C_Login | N/D | N/D | Accede a un token. |
| C_Logout | N/D | N/D | Esegue la disconnessione da un token. |
| C_CreateObject | N/D | N/D | Crea un oggetto. |
| C_CopyObject | N/D | N/D | Crea una copia di un oggetto. |
| C_DestroyObject | N/D | N/D | Elimina un oggetto. |
| C_GetObjectSize | N/D | N/D | Ottiene la dimensione di un oggetto in byte. |
| C_GetAttributeValue* | m_GetAttributeValue | GetAttributeValue | Ottiene un valore di attributo di un oggetto. |
| C_SetAttributeValue* | m_SetAttributeValue | SetAttributeValue | Modifica un valore di attributo di un oggetto. È possibile modificare solo gli attributi booleani. |
| C_FindObjectsInit | N/D | N/D | Inizializza un'operazione di ricerca oggetto. |
| C_FindObjects | N/D | N/D | Continua un'operazione di ricerca oggetto. |
| C_FindObjectsFinal | N/D | N/D | Termina un'operazione di ricerca oggetto. |
| C_EncryptInit* | m_EncryptInit | EncryptInit | Inizializza un'operazione di crittografia. |
| C_Encrypt* | m_Encrypt | Encrypt | Crittografa i dati di una singola parte. |
| C_EncryptUpdate* | m_EncryptUpdate | EncryptUpdate | Continua un'operazione di crittografia di più parti. |
| C_EncryptFinal* | m_EncryptFinal | EncryptFinal | Termina un'operazione di crittografia di più parti. |
| N/D | m_EncryptSingle | EncryptSingle | Estensione IBM, variante non standard di Encrypt. Elabora i dati in un singolo passaggio, con una singola chiamata. Non restituisce alcuno stato all'host, fatta eccezione per i dati crittografati. |
| N/D | m_ReencryptSingle | ReencryptSingle | Estensione IBM, variante non standard di Encrypt. Decodifica i dati con la chiave originale e crittografa i dati non elaborati con una chiave differente in una singola chiamata all'interno del cloud HSM. Non restituisce alcuno
stato all'host diverso dai dati crittografati. |
| C_DecryptInit* | m_DecryptInit | DecryptInit | Inizializza un'operazione di decrittografia. |
| C_Decrypt* | m_Decrypt | Decrypt | Decrittografa i dati crittografati di una singola parte. |
| C_DecryptUpdate* | m_DecryptUpdate | DecryptUpdate | Continua un'operazione di decrittografia di più parti. |
| C_DecryptFinal* | m_DecryptFinal | DecryptFinal | Termina un'operazione di decrittografia di più parti. |
| N/D | m_DecryptSingle | DecryptSingle | Estensione IBM, variante non standard di Decrypt. Elabora i dati in un singolo passaggio, con una singola chiamata. Non restituisce alcuno stato all'host, fatta eccezione per i dati decrittografati. |
| C_DigestInit* | m_DigestInit | DigestInit | Inizializza un'operazione di digest dei messaggi. |
| C_Digest* | m_Digest | Digest | Esegue il digest di dati di una singola parte. La lunghezza dei dati di input non può essere zero e il puntatore che punta all'ubicazione dei dati di input non può essere NULL. |
| C_DigestUpdate* | m_DigestUpdate | DigestUpdate | Continua un'operazione di digest di più parti. La lunghezza dei dati di input non può essere zero e il puntatore che punta all'ubicazione dei dati di input non può essere NULL. |
| C_DigestKey | N/D | N/D | Esegue il digest di una chiave. |
| C_DigestFinal* | m_DigestFinal | DigestFinal | Termina un'operazione di digest di più parti. |
| N/D | m_DigestSingle | DigestSingle | Estensione IBM, estensione non standard, combinazione di DigestInit e Digest. Esegue il digest dei dati in un singolo passaggio, senza creare uno stato di digest intermedio e roundtrip non necessari |
| C_SignInit* | m_SignInit | SignInit | Inizializza un'operazione di firma. |
| C_Sign* | m_Sign | Firma | Firma i dati di una singola parte. |
| C_SignUpdate* | m_SignUpdate | SignUpdate | Continua un'operazione di firma di più parti. |
| C_SignFinal* | m_SignFinal | SignFinal | Termina un'operazione di firma di più parti. |
| C_SignRecoverInit | N/D | N/D | Inizializza un'operazione di firma, in cui i dati vengono recuperati dalla firma. |
| C_SignRecover | N/D | N/D | Firma i dati a parte singola, dove i dati vengono recuperati dalla firma. |
| N/D | m_SignSingle | SignSingle | Estensione IBM, estensione non standard, combinazione di SignInit e Sign. Firma o protegge con una chiave MAC i dati in un singolo passaggio, con una singola chiamata, senza creare uno stato di digest intermedio. Non restituisce alcuno stato all'host diverso dal risultato. |
| C_VerifyInit* | m_VerifyInit | VerifyInit | Inizializza un'operazione di verifica. |
| C_Verify* | m_Verify | Verifica | Verifica una firma sui dati di una singola parte. |
| C_VerifyUpdate* | m_VerifyUpdate | VerifyUpdate | Continua un'operazione di verifica di più parti. |
| C_VerifyFinal* | m_VerifyFinal | VerifyFinal | Termina un'operazione di verifica di più parti. |
| C_VerifyRecoverInit | N/D | N/D | Inizializza un'operazione di verifica, dove i dati vengono ripristinati dalla firma. |
| C_VerifyRecover | N/D | N/D | Verifica una firma sui dati di una singola parte, dove i dati vengono ripristinati dalla firma. |
| N/D | m_VerifySingle | VerifySingle | Estensione IBM, estensione non standard, combinazione di VerifyInit e Verify. Firma o protegge con una chiave MAC i dati in un singolo passaggio, con una singola chiamata, senza creare uno stato di digest intermedio. Non restituisce alcuno stato all'host, fatta eccezione per il risultato della verifica. |
| C_DigestEncryptUpdate | N/D | N/D | Continua le operazioni di digest e crittografia di più parti simultanee. |
| C_DecryptDigestUpdate | N/D | N/D | Continua le operazioni di digest e decrittografia di più parti simultanee. |
| C_SignEncryptUpdate | N/D | N/D | Continua le operazioni di firma e crittografia di più parti simultanee. |
| C_DecryptVerifyUpdate | N/D | N/D | Continua le operazioni di decrittografia e verifica di più parti simultanee. |
| C_GenerateKey* | m_GenerateKey | GenerateKey | Genera una chiave segreta. |
| C_GenerateKeyPair* | m_GenerateKeyPair | GenerateKeyPair | Genera una coppia chiave pubblica e chiave privata. |
| C_WrapKey* | m_WrapKey | WrapKey | Impacchetta (crittografa) una chiave. |
| C_UnwrapKey* | m_UnwrapKey | UnwrapKey | Spacchetta (decrittografa) una chiave. |
| N/D | N/D | Blob RewrapKey | Trasferisce la proprietà di un BLOB controllato dalla chiave principale corrente alla nuova chiave principale quando viene eseguito il commit della nuova chiave principale. Questa funzione è un comando di amministrazione speciale supportato solo da GREP11. |
| C_DeriveKey* | m_DeriveKey | DeriveKey | Deriva una chiave da una chiave di base. |
| C_SeedRandom | N/D | N/D | Aggiunge materiale di seeding al generatore di numeri casuale. |
| C_GenerateRandom* | m_GenerateRandom | GenerateRandom | Genera dei dati casuali. La lunghezza dei dati casuali non può essere zero e il puntatore che punta alla posizione dei dati casuali non può essere NULL. La lunghezza massima dei dati casuali che possono essere richiesti è 1 milione di byte. |
| C_GetFunctionStatus | N/D | N/D | Funzione legacy che restituisce sempre CKR_FUNCTION_NOT_PARALLEL. |
| C_CancelFunction | N/D | N/D | Funzione legacy che restituisce sempre CKR_FUNCTION_NOT_PARALLEL. |
Meccanismi supportati
Un meccanismo viene indicato come un processo per implementare un'operazione crittografica. Può variare a seconda del livello di firmware nella scheda crittografica. La seguente tabella mostra i meccanismi attualmente supportati e come sono correlati alle categorie di funzione GREP11 comuni.
| Gruppo di funzioni | Meccanismi supportati |
|---|---|
| Crittografare e decrittografare | CKM_RSA_PKCS1, CKM_RSA_PKCS_OAEP1, CKM_AES_ECB, CKM_CBC, CKM_AES_CBC_PAD, CKM_DES3_ECB, CKM_DES3_CBC, CKM_DES3_CBC_PAD |
| Firmare e verificare | CKM_RSA_PKCS1, CKM_RSA_PKCS_PSS1, CKM_RS 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 |
| Genera chiave o genera coppia di chiavi | 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 |
| A capo e a capo | CKM_RSA_PKCS, CKM_RSA_PKCS_OAEP, CKM_AES_ECB, CKM_AES_CBC, CKM_CBC_PAD, CKM_DES3_ECB, CKM_DES3_CBC, CKM_DES3_CBC_PAD |
| Ricava | 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, TCKM_derivation |
1: questo meccanismo supporta solo le operazioni a parte singola che non sono in grado di utilizzare alcuna delle funzioni Update GREP11, come EncryptUpdate, DecryptUpdate e DigestUpdate.
2: questo meccanismo è solo disponibile per operazioni GREP11 SignSingle e VerifySingle.
3: questo meccanismo non è supportato dalla scheda crittografica IBM 4768 e non è disponibile per operazioni SignUpdate e VerifyUpdate.
4: Questo meccanismo supporta operazioni a parte singola (SignInit, Sign, VerifyInit, Verify), SignSingle e VerifySingle.
Attributi e tipi di chiavi supportati
Gli attributi GREP11 definiscono le caratteristiche dell'oggetto che impostano il modo in cui un oggetto può essere utilizzato e a cui è possibile accedere. La seguente tabella mostra gli attributi supportati e la loro relazione con i diversi tipi di chiave supportati.
| Attributo | Descrizione | Tipi di chiave supportati |
|---|---|---|
| VALORE_CHECK_CKA | Il checksum della chiave | chiavi AES, chiavi DES |
| CKA_COPYABLE | Se impostato su CKA_TRUE, l'oggetto può essere copiato utilizzando la funzione PKCS#11 C_CopyObject | Chiavi private EC, chiavi pubbliche EC, chiavi private RSA, chiavi pubbliche RSA, chiavi private DH, chiavi pubbliche DH, chiavi private DSA, chiavi pubbliche DSA, chiavi AES, chiavi DES, chiavi generiche |
| CKA_DECRYPT | CK_TRUE se la chiave supporta la decrittografia. | Chiavi private EC, chiavi private RSA, chiavi private DH, chiavi private DSA, chiavi AES, chiavi DES, chiavi generiche |
| RICAVA | CK_TRUE se la chiave supporta la derivazione della chiave (altre chiavi possono essere derivate da questa chiave). Il valore predefinito è CK_FALSE. | Chiavi private EC, chiavi pubbliche EC, chiavi private RSA, chiavi pubbliche RSA, chiavi private DH, chiavi pubbliche DH, chiavi private DSA, chiavi pubbliche DSA, chiavi AES, chiavi DES, chiavi generiche |
| CKA_EC_PARAMS (CKA_ECDSA_PARAMS) | Codifica DER di un valore parametri ANSI X9.62. | Chiavi private EC, chiavi pubbliche EC |
| CODIFICA_CKI | CK_TRUE se la chiave supporta la crittografia. | chiavi pubbliche EC, chiavi pubbliche RSA, chiavi pubbliche DH, chiavi pubbliche DSA, chiavi AES, chiavi DES, chiavi generiche |
| ESTRAIBILE | CK_TRUE se la chiave è estraibile e può essere protetta. | Chiavi private EC, chiavi private RSA, chiavi private DH, chiavi private DSA, chiavi AES, chiavi DES, chiavi generiche |
| CKA_IBM_PQC_PARAMS | Parametri di supporto per i meccanismi di crittografia post - quantistica. Nel caso del meccanismo Dilithium CKM_IBM_DILITHIUM, fornisce un OID (marshaled object identifier) che rappresenta la forza dell'algoritmo Dilithium
da utilizzare. Attualmente, è supportato solo il livello di Dilithium 4 round 2. |
Chiavi Dilithium |
| TIPO_CHIAVE_CA | Tipo di chiave. | Chiavi private EC, chiavi pubbliche EC, chiavi private RSA, chiavi pubbliche RSA, chiavi private DH, chiavi pubbliche DH, chiavi private DSA, chiavi pubbliche DSA, chiavi AES, chiavi DES, chiavi generiche |
| CKA_LOCALE | CK_TRUE solo se la chiave è stata generata localmente (sul token) con una chiamata C_GenerateKey o C_GenerateKeyPair o creata con una chiamata C_CopyObject come copia di una chiave, il cui attributo
CKA_LOCAL era impostato su CK_TRUE. |
Chiavi private EC, chiavi pubbliche EC, chiavi private RSA, chiavi pubbliche RSA, chiavi private DH, chiavi pubbliche DH, chiavi private DSA, chiavi pubbliche DSA, chiavi AES, chiavi DES, chiavi generiche |
| CKA_MODIFICABILE | Impostare su CK_TRUE se l'oggetto può essere modificato. | Chiavi private EC, chiavi pubbliche EC, chiavi private RSA, chiavi pubbliche RSA, chiavi private DH, chiavi pubbliche DH, chiavi private DSA, chiavi pubbliche DSA, chiavi AES, chiavi DES, chiavi generiche |
| BIT_MODULO_CKA_ | Lunghezza, in bit, del modulo n. | Chiavi pubbliche RSA |
| CKA_PUBLIC_EXPONENT | Esponente pubblico e. | Chiavi private RSA |
| CKA_PUBLIC_KEY_INFO | Codifica DER di SubjectPublicKeyInfo per la chiave pubblica. Il valore deriva dai dati chiave pubblica sottostanti ed è vuoto per impostazione predefinita. | chiavi pubbliche RSA, chiavi pubbliche EC |
| CKA_SIGN | CK_TRUE se la chiave supporta le firme dove la firma è un'appendice ai dati. | Chiavi private EC, chiavi private RSA, chiavi private DH, chiavi private DSA, chiavi AES, chiavi DES, chiavi generiche |
| CKA_TRUSTED | Il certificato o la chiave possono essere ritenuti attendibili per l'applicazione per la quale sono stati creati. | chiavi pubbliche EC, chiavi pubbliche RSA, chiavi pubbliche DH, chiavi pubbliche DSA, chiavi AES, chiavi DES, chiavi generiche |
| CKA_UNWRAP | CK_TRUE se la chiave supporta lo spacchettamento (può essere utilizzato per spacchettare altre chiavi). | Chiavi private EC, chiavi private RSA, chiavi private DH, chiavi private DSA, chiavi AES, chiavi DES, chiavi generiche |
| CKA_VALUE_LEN | Lunghezza, in byte, del valore chiave. | chiavi AES |
| CKA_VERIFY | CK_TRUE se la chiave supporta la verifica in cui la firma è un'appendice dei dati. | chiavi pubbliche EC, chiavi pubbliche RSA, chiavi pubbliche DH, chiavi pubbliche DSA, chiavi AES, chiavi DES, chiavi generiche |
| IMPACCHETTAMENTO | CK_TRUE se la chiave supporta l'impacchettamento (può essere utilizzato per impacchettare altre chiavi). | chiavi pubbliche EC, chiavi pubbliche RSA, chiavi pubbliche DH, chiavi pubbliche DSA, chiavi AES, chiavi DES, chiavi generiche |
| CKA_WRAP_WITH_TRUSTED | CK_TRUE se la chiave può essere impacchettata solo con una chiave impacchettata che ha CKA_TRUSTED impostata su CK_TRUE. Il valore predefinito è CK_FALSE. | Chiavi private EC, chiavi private RSA, chiavi private DH, chiavi private DSA, chiavi AES, chiavi DES, chiavi generiche |
Curve supportate
La libreria EP11 supporta tipi limitati di curve per determinati meccanismi. La seguente tabella elenca i nomi di curva supportati per meccanismi differenti. Il numero nel nome della curva indica il bitcount principale supportato.
Curve supportate per la creazione di chiavi EC (Elliptic Curve)
Il meccanismo CKM_EC_KEY_PAIR_GEN è supportato quando si richiama la funzione GenerateKeyPair per generare i tasti EC (Elliptic Curve). I parametri del nome della curva devono essere specificati come OID (object identifier)
utilizzando CKA_EC_PARAMS. È possibile ottenere l'OID ricercando il nome della curva nel repository OID.
| Meccanismo GREP11 | Tipi di curva supportati | Nomi curva supportati |
|---|---|---|
| CKM_EC_KEY_PAIR_GEN | Curve NIST(National Institute of Standards and Technology) |
|
| CKM_EC_KEY_PAIR_GEN | Curve del pool di cervelli regolari |
|
| CKM_EC_KEY_PAIR_GEN | Curve BP(Twisted Brain pool) |
|
| CKM_EC_KEY_PAIR_GEN | Standard per curve SEC(Efficient Cryptography) |
|
| CKM_EC_KEY_PAIR_GEN | Curve Edwards |
|
Curve supportate per la crittografia degli asset digitali e la creazione di firme
Le seguenti curve sono supportate per i meccanismi correlati all'asset digitale e alla firma digitale.
| Standard e schema | Meccanismo GREP11 | Tipi di curva supportati | Nomi curva supportati |
|---|---|---|---|
| BIP32/BIP44 | CKM_IBM_BTC_DERIVE | Standard per curve SEC(Efficient Cryptography) |
|
| SLIP10 | CKM_IBM_BTC_DERIVE | Curve NIST(National Institute of Standards and Technology) |
|
| SLIP10 | CKM_IBM_BTC_DERIVE | Standard per curve SEC(Efficient Cryptography) |
|
| SLIP10 | CKM_IBM_BTC_DERIVE | Curve Edwards |
|
| EdDSA | CKM_IBM_ED25519_SHA512 | Curve Edwards |
|
| Schnorr | CKM_IBM_ECDSA_ALTRO | Standard per curve SEC(Efficient Cryptography) |
|
| Schnorr | CKM_IBM_ECDSA_ALTRO | Curve NIST(National Institute of Standards and Technology) |
|
| Schnorr | CKM_IBM_ECDSA_ALTRO | Curve del pool di cervelli regolari |
|
| Schnorr | CKM_IBM_ECDSA_ALTRO | Curve BP(Twisted Brain pool) |
|
| Schnorr | ECSG_IBM_ECSDSA_S256 |
|
|
| Schnorr-Zilliqa | ECSG_IBM_ECSDSA_COMPR_MULTI |
|
Esecuzione di operazioni crittografiche con funzioni GREP11
È possibile eseguire operazioni di crittografia richiamando funzioni GREP11 che sono definite in base all'implementazione EP11 della specifica PKCS #11 . Le descrizioni delle seguenti funzioni vengono create in base alla specifica PKCS #11, con note specifiche per EP11. Tutte le definizioni di parametro sono nel formato originale di EP11. Per ulteriori informazioni su EP11, consultare Enterprise PKCS #11(EP11)Library structure.
I parametri di funzione EP11 sono associati ai tipi di buffer di protocollo che sono disponibili nelle seguenti funzioni. Puoi ottenere ulteriori informazioni sui tipi di buffer di protocollo in Google Developers.
Poiché la libreria EP11 è un sottoinsieme della libreria API PKCS #11, e le funzioni GREP11 sono varianti dalle corrispondenti funzioni EP11, le funzioni corrispondenti di EP11 e PKCS #11 sono elencate anche nelle tabelle delle funzioni GREP11 come riferimento per te.
GREP11 supporta qualsiasi linguaggio di programmazione con una libreria gRPC. Nella fase corrente, solo i frammenti di codice o gli esempi per Golang e JavaScript sono inclusi nella guida di riferimento API. Il contenuto è arricchito in fasi successive. I frammenti di codice si basano sui seguenti repository GitHub esterni che forniscono esempi completi per utilizzare l'API GREP11. Alcuni frammenti di codice fanno riferimento alle funzioni helper all'interno dei repository di esempio.
Richiamo degli algoritmi di crittografia supportati
Puoi utilizzare le seguenti funzioni per richiamare i meccanismi o gli algoritmi crittografici supportati da GREP11. Con queste informazioni, è possibile comprendere i meccanismi specifici che possono essere impostati quando si richiama una funzione. Per l'elenco completo dei meccanismi supportati, è possibile visualizzare anche i meccanismi categorizzati per gruppi di funzioni.
GetMechanismList
La funzione GetMechanismList ottiene un elenco di tipi di meccanismi supportati da un token.
| Descrizione | Esegue il bind a m_GetMechanismList EP11, che è un'implementazione di C_GetMechanismList PKCS #11. |
|
|---|---|---|
| Parametri |
message GetMechanismListRequest {
}
message GetMechanismListResponse {
repeated uint64 Mechs = 2;
}
|
|
| Valori restituiti | Impacchetta l'errore EP11 in message Grep11Error. |
| Descrizione | Implementazione di C_GetMechanismList PKCS #11.
|
|---|---|
| Parametri |
CK_RV m_GetMechanismList (
CK_SLOT_ID slot,
CK_MECHANISM_TYPE_PTR mechs, CK_ULONG_PTR mechslen,
destinazione_t
);
|
| Valori restituiti | Un sottoinsieme dei valori restituiti C_GetMechanismList. Per ulteriori informazioni, consultare il capitolo Valori di ritorno del documento Enterprise PKCS #11 (EP11) Library structure. |
| Descrizione |
Sono disponibili due modi per un'applicazione per richiamare
Poiché |
|---|---|
| Parametri |
CK_DEFINE_FUNCTION(CK_RV, C_GetMechanismList)(
CK_SLOT_ID slotID,
CK_MECHANISM_TYPE_PTR pMechanismList,
CK_ULONG_PTR pulCount
);
|
| Valori restituiti | 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_RICONOSCIUTE, CKR_ARGUMENTS_BAD. |
Frammenti di codice
-
Frammento di codice Golang
GetMechanismListRequest := &pb.GetMechanismListRequest { } GetMechanismListResponse, err := cryptoClient.GetMechanismList(context.Background(), GetMechanismListRequest) -
Frammento di codice JavaScript
client.GetMechanismList({}, (err, data) => { if (err) throw err; console.log('MECHANISMS:', data.Mechs); });
GetMechanismInfo
La funzione GetMechanismInfo ottiene le informazioni su uno specifico meccanismo.
| Descrizione | Esegue il bind a m_GetMechanismInfo EP11, che è un'implementazione di C_GetMechanismInfo PKCS #11. |
|
|---|---|---|
| Parametri |
message GetMechanismInfoRequest {
uint64 Mech = 2;
}
message GetMechanismInfoResponse {
MechanismInfo MechInfo = 3;
}
|
|
| Valori restituiti | Impacchetta l'errore EP11 in message Grep11Error. |
| Descrizione | Implementazione di C_GetMechanismInfo PKCS #11.
|
|---|---|
| Parametri |
CK_RV m_GetMechanismInfo (
CK_SLOT_ID slot,
CK_MECHANISM_TYPE mech,
CK_MECHANISM_INFO_PTR mechInfo,
destinazione_t
);
|
| Valori restituiti | Un sottoinsieme dei valori restituiti C_GetMechanismInfo. Per ulteriori informazioni, consultare il capitolo Valori di ritorno del documento Enterprise PKCS #11 (EP11) Library structure. |
| Descrizione |
|
|---|---|
| Parametri |
CK_DEFINE_FUNCTION(CK_RV, C_GetMechanismInfo)(
CK_SLOT_ID slotID,
CK_MECHANISM_TYPE type,
CK_MECHANISM_INFO_PTR pInfo
);
|
| Valori restituiti | 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_FOUND, CKR_ARGUMENTS_BAD. |
Frammenti di codice
-
Frammento di codice Golang
GetMechanismInfoRequest := &pb.GetMechanismInfoRequest { Mech: ep11.CKM_RSA_PKCS, } GetMechanismInfoResponse, err := cryptoClient.GetMechanismInfo(context.Background(), GetMechanismInfoRequest) -
Frammento di codice JavaScript
client.GetMechanismInfo({ Mech: ep11.CKM_AES_KEY_GEN }, (err, data) => { if (err) throw err; console.log('MECHANISM INFO:', data.MechInfo); });
Generazione e derivazione di chiavi
GREP11 fornisce le seguenti funzioni per generare chiavi crittografiche simmetriche e asimmetriche. In base al meccanismo e alla lunghezza della chiave specificati, è possibile generare vari tipi di chiavi per vari utilizzi. È anche possibile derivare una chiave da una chiave di base per estendere le chiavi in chiavi più lunghe o per ottenere le chiavi di un formato richiesto.
GenerateKey
La funzione GenerateKey genera una chiave segreta per la crittografia simmetrica.
| Descrizione | Esegue il bind a m_GenerateKey EP11, che è un'implementazione di C_GenerateKey PKCS #11. |
|
|---|---|---|
| Parametri |
message GenerateKeyRequest {
Mechanism Mech = 1;
map<uint64,AttributeValue> Modello = 6;
}
message GenerateKeyResponse {
byte KeyBytes = 4;
bytes CheckSum = 5;
}
|
|
| Valori restituiti | Impacchetta l'errore EP11 in message Grep11Error. |
| Descrizione |
Implementazione di Le chiavi TDES vengono generate con la parità appropriata, che non può essere osservata dall'host. Ma è necessario per una corretta interoperabilità: altre implementazioni PKCS #11 devono rifiutare le chiavi DES con problemi di parità. Se un oggetto è collegato a una sessione,
La generazione di parametri DSA e DH ignora Parametri DSA, DH ( Il blob
|
|---|---|
| Parametri |
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,
destinazione_t
);
|
| Valori restituiti | Un sottoinsieme dei valori restituiti C_GenerateKey. Per ulteriori informazioni, consultare il capitolo Valori di ritorno del documento Enterprise PKCS #11 (EP11) Library structure. |
| Descrizione |
Se il meccanismo di creazione è per la creazione di parametri di dominio, l'attributo Poiché il tipo di parametri di dominio o chiave da generare è implicito nel meccanismo di generazione, il template non ha bisogno di fornire un tipo di chiave. Se fornisce un tipo di chiave che non è congruente con il meccanismo di generazione,
Se una chiamata a L'oggetto creato da una chiamata eseguita correttamente a |
|---|---|
| Parametri |
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
);
|
| Valori restituiti | 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_EXPIRED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_MECHANIS_INVALID, CKR_PAR_MECHANISION_INVALID CKR_TEMPLATE_INCONSISTENTE, CKR_TOKEN_WRITE_PROTECTED, CKR_USER_NOT_LOGGED_IN. |
Frammenti di codice
-
Frammento di codice 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) -
Frammento di codice 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 funzione GenerateKeyPair genera una coppia di chiavi pubblica e privata.
| Descrizione | Esegue il bind a m_GenerateKeyPair EP11, che è un'implementazione di C_GenerateKeyPair PKCS #11. |
|
|---|---|---|
| Parametri |
message GenerateKeyPairRequest {
Mechanism Mech = 1;
map<uint64,AttributeValue> PrivKeyTemplate = 7;
map<uint64,AttributeValue> PubKeyTemplate = 8;
}
message GenerateKeyPairResponse {
byte PrivKeyByte = 5;
byte PubKeyByte = 6;
}
|
|
| Valori restituiti | Impacchetta l'errore EP11 in message Grep11Error. |
| Descrizione |
Implementazione di I parametri di coppia di chiavi vengono richiamati dai parametri In modalità FIPS, sono supportati solo i moduli RSA di 1024 + 256 La chiave pubblica è formattata come SPKI standard (informazioni sulla chiave pubblica dell'oggetto), leggibile dalla maggior parte delle librerie. È protetta a livello di integrità da una chiave MAC specifica per la chiave di trasporto, che non fa parte della SPKI stessa. La generazione dei parametri DSA restituisce una struttura non SPKI nel campo della chiave pubblica. Se si collega un oggetto a una sessione, Restituisce la chiave privata impacchettata a Le seguenti combinazioni di parametri supportate con note speciali vanno oltre quanto documentato da PKCS #11: Le chiavi RSA rifiutano gli esponenti pubblici al di sotto di 17 (0x11). I punti di controllo possono limitare ulteriormente il minimo accettato. L'esponente Fermat4, 0x10001, è controllato da un punto di controllo specifico, corrispondente alle restrizioni dell'esponente pubblico di FIPS 186-3 (sezione B.3.1). Chiavi EC ( Le chiavi DSA ( Le chiavi DH ( L'uso dello stato della sessione (Login) sostituisce l'uso standard delle sessioni. L'associazione è esterna all'ambito della libreria. Il blob
|
|---|---|
| Parametri |
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,
destinazione_t
);
|
| Valori restituiti | Un sottoinsieme dei valori restituiti C_GenerateKeyPair. Per ulteriori informazioni, consultare il capitolo Valori di ritorno del documento Enterprise PKCS #11 (EP11) Library structure. |
| Descrizione |
Poiché i tipi di chiave da generare sono impliciti nel meccanismo di generazione di coppie di chiavi, i template non hanno bisogno di fornire i tipi di chiave. Se uno dei modelli fornisce un tipo di chiave che non è congruente con il
meccanismo di generazione chiavi, Se una chiamata a Una chiamata a Gli oggetti chiave creati da una chiamata riuscita a Osserva attentamente l'ordine degli argomenti per |
|---|---|
| Parametri |
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
);
|
| Valori restituiti | CKRREAD_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, CKRR_FUNCTION_ANNULLA, CKR_FUNCTION_FAILED, CKRR_GENERAL_ERROR CKR_TEMPLATE_INCOMPLETE, CKR_TEMPLATE_INCOMPATIBILI, CKR_TOKEN_WRITE_PROTECTED, CKR_USER_NOT_LOGGED_IN. |
Frammenti di codice
-
Frammento di codice 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) -
Frammento di codice 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 funzione DeriveKey deriva una chiave da una chiave di base.
| Descrizione | Esegue il bind a m_DeriveKey EP11, che è un'implementazione di C_DeriveKey PKCS #11. |
|
|---|---|---|
| Parametri |
message DeriveKeyRequest {
Mechanism Mech = 1;
bytes BaseKey = 3;
bytes Data = 4;
map<uint64,AttributeValue> Modello = 8;
}
message DeriveKeyResponse {
byte NewKeyByte = 6;
bytes CheckSum = 7;
}
|
|
| Valori restituiti | Impacchetta l'errore EP11 in message Grep11Error. |
| Descrizione |
Implementazione di Il blob
|
|---|---|
| Parametri |
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,
destinazione_t
);
|
| Valori restituiti | Un sottoinsieme dei valori restituiti C_DeriveKey. Per ulteriori informazioni, consultare il capitolo Valori di ritorno del documento Enterprise PKCS #11 (EP11) Library structure. |
| Descrizione |
I valori degli attributi Se una chiamata a L'oggetto chiave creato da una chiamata riuscita a |
|---|---|
| Parametri |
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
);
|
| Valori restituiti | 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_EXPIRED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR CKR_SESSION_HANDLE_INVALID, CKR_SESSION_READ_ONLY, CKR_TEMPLATE_INCOMPLETE, CKR_TEMPLATE, CKR_TOKEN_WRITE_PROTECTED, CKR_USER_NOT_LOGGED_IN. |
Frammenti di codice
-
Frammento di codice 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) -
Frammento di codice 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); }); }
Protezione delle chiavi
Puoi proteggere una chiave impacchettandola e quindi decodificarla richiamando la funzione di spacchettamento.
WrapKey
La funzione WrapKey impacchetta (crittografa) una chiave.
| Descrizione | Esegue il bind a m_WrapKey EP11, che è un'implementazione di C_WrapKey PKCS #11. |
|
|---|---|---|
| Parametri |
message WrapKeyRequest {
bytes Key = 1;
bytes KeK = 2;
bytes MacKey = 3;
Mechanism Mech = 4;
}
message WrapKeyResponse {
bytes Wrapped = 5;
}
|
|
| Valori restituiti | Impacchetta l'errore EP11 in message Grep11Error. |
| Descrizione | Implementazione di C_WrapKey PKCS #11.
|
|---|---|
| Parametri |
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,
destinazione_t
);
|
| Valori restituiti | Un sottoinsieme dei valori restituiti C_WrapKey. Per ulteriori informazioni, consultare il capitolo Valori di ritorno del documento Enterprise PKCS #11 (EP11) Library structure. |
| Descrizione |
L'attributo Se la chiave da impacchettare non può essere impacchettata da per qualche motivo specifico del token, nonostante abbia il suo attributo
I token variano in base a quali tipi di chiavi possono essere impacchettati con quali meccanismi. Per partizionare le chiavi di impacchettamento in modo che possano impacchettare solo un sottoinsieme di chiavi estraibili, è possibile utilizzare l'attributo |
|---|---|
| Parametri |
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
);
|
| Valori restituiti | CKR_ARGUMENTS_BAD, CKR_BUFFER_TOO_SMALL, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELLATO, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_KEY_HANDLE_INVALID, CKR_KEY_NOT_WRAPPABLE, CKR_KEY_SIZE_RANGE, CKR_KEY_INVALID NON VALIDO, CKR_WRAPPING_KEY_SIZE_RANGE, CKR_WRAPPING_KEY_TYPE_CONSISTENTI. |
Frammenti di codice
-
Frammento di codice 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) -
Frammento di codice JavaScript
client.WrapKey({ Mech: { Mechanism: ep11.CKM_RSA_PKCS }, KeK: rsa.PubKeyBytes, Key: aes.KeyBytes }, (err, data={}) => { cb(err, data.Wrapped); });
UnwrapKey
La funzione UnwrapKey spacchetta (decrittografa) una chiave.
| Descrizione | Esegue il bind a m_UnwrapKey EP11, che è un'implementazione di C_UnwrapKey PKCS #11. |
|
|---|---|---|
| Parametri |
message UnwrapKeyRequest {
bytes Wrapped = 1;
bytes KeK = 2;
bytes MacKey = 3;
Mechanism Mech = 5;
map<uint64,AttributeValue> Modello = 9;
}
message UnwrapKeyResponse {
byte UnwrappedBytes = 7;
bytes CheckSum = 8;
}
|
|
| Valori restituiti | Impacchetta l'errore EP11 in message Grep11Error. |
| Descrizione |
Implementazione di
L'oggetto generato viene restituito in Quando un SPKI viene trasformato in un SPKI MACed, è necessario utilizzare CKM_IBM_TRANSPORTKEY come meccanismo di unwrapping. Questa modalità fornisce la SPKI non elaborata come dati impacchettati, e ignora la KEK.
|
|---|---|
| Parametri |
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,
destinazione_t
);
|
| Valori restituiti | Un sottoinsieme dei valori restituiti C_UnwrapKey. Per ulteriori informazioni, consultare il capitolo Valori di ritorno del documento Enterprise PKCS #11 (EP11) Library structure. |
| Descrizione |
L'attributo La nuova chiave ha l'attributo Alcuni meccanismi possono modificare o tentare di modificare. Il contenuto della struttura Se una chiamata a L'oggetto chiave creato da una chiamata riuscita a Per partizionare le chiavi di spacchettamento in modo che possano spacchettare solo un sottoinsieme di chiavi, è possibile utilizzare l'attributo |
|---|---|
| Parametri |
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
);
|
| Valori restituiti | 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_FAILED, CKR_FUNZION_CKR_INVALID, CKR_GENERAL_MEMORY CKR_TEMPLATE_INCOMPLETE, CKR_TEMPLATE_INCONGRUENTE, CKR_TOKEN_WRITE_PROTECTED, CKR_UNWRAPPING_KEY_HANDLE_INVALID, CKR_UNWRAPPING_KEY_SIZE_RANGE, CKR_UNWRAPPING_KEY_TYPE_CONSISTENTI, CKR_USER_NOT_LOGGED_IN, CKR_WRAPPED_KEY_INVALID, CKR_WRAPPED_KEY_LEN_RANGE. |
Frammenti di codice
-
Frammento di codice 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) -
Frammento di codice 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); });
Blob RewrapKey
La funzione RewrapKeyBlob ricodifica i BLOB (binary large object) della chiave generata con la nuova chiave principale di cui è stato eseguito il commit contenuta in HSM. Le chiavi ricodificate possono essere utilizzate solo dopo
che l'HSM è stato finalizzato con la nuova chiave principale di cui è stato eseguito il commit.
Questa funzione è un comando di amministrazione speciale supportato solo da GREP11. Non esiste alcuna funzione EP11 o funzione PKCS #11 corrispondente per RewrapKeyBlob.
| Descrizione | Trasferisce la proprietà di un BLOB controllato dalla chiave principale corrente alla nuova chiave principale quando viene eseguito il commit della nuova chiave principale. | |
|---|---|---|
| Parametri |
messaggio RewrapKeyBlobRequest {
byte WrappedKey = 1;
}
messaggio RewrapKeyBlobResponse {
byte RewrappedKey = 1;
}
|
|
| Valori restituiti | Impacchetta l'errore EP11 in message Grep11Error. |
Frammenti di codice
-
Frammento di codice 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) -
Frammento di codice JavaScript
client.RewrapKeyBlob({ WrappedKey: wrappedKey }, (err, response) => { callback(err, response); });
Richiamo e modifica degli attributi per le chiavi
Quando si generano le chiavi o si eseguono le operazioni chiave, si definisce un modello di attributo come uno dei parametri. È possibile richiamare gli attributi per un oggetto chiave specifico e modificare alcuni attributi dopo la creazione della chiave.
GetAttributeValue
La funzione GetAttributeValue ottiene un valore di attributo di un oggetto.
| Descrizione | Esegue il bind a m_GetAttributeValue EP11, che è un'implementazione di C_GetAttributeValue PKCS #11. |
|
|---|---|---|
| Parametri |
message GetAttributeValueRequest {
bytes Object = 1;
map<uint64,AttributeValue> Attributi = 3;
}
message GetAttributeValueResponse {
map<uint64,AttributeValue> Attributi = 4;
}
|
|
| Valori restituiti | Impacchetta l'errore EP11 in message Grep11Error. |
| Descrizione |
Implementazione di Non rappresenta o ha bisogno di sessioni (parte di blob), quindi non utilizza il parametro EP11 utilizza modi più semplici per eseguire la decodifica, come ad esempio l'enumerazione di valori effettivi, invece di essere più generica. |
|---|---|
| Parametri |
CK_RV m_GetAttributeValue (
const unsigned char *object, size_t objectlen,
CK_ATTRIBUTE_PTR attributes, CK_ULONG attributeslen,
destinazione_t
);
|
| Valori restituiti | Un sottoinsieme dei valori restituiti C_GetAttributeValue. Per ulteriori informazioni, consultare il capitolo Valori di ritorno del documento Enterprise PKCS #11 (EP11) Library structure. |
| Descrizione |
Per ogni tripla (
Se il caso 1 si applica a uno qualsiasi degli attributi richiesti, la chiamata deve restituire il valore Nel caso speciale di un attributo il cui valore è un array di attributi, ad esempio I codici di errore |
|---|---|
| Parametri |
CK_DEFINE_FUNCTION(CK_RV, C_GetAttributeValue)(
CK_SESSION_HANDLE hSession,
CK_OBJECT_HANDLE hObject,
CK_ATTRIBUTE_PTR pTemplate,
CK_ULONG ulCount
);
|
| Valori restituiti | 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. |
Frammenti di codice
-
Frammento di codice 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) -
Frammento di codice 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 funzione SetAttributeValue modifica un valore di attributo di un oggetto.
| Descrizione | Esegue il bind a m_SetAttributeValue EP11, che è un'implementazione di C_SetAttributeValue PKCS #11. |
|
|---|---|---|
| Parametri |
message SetAttributeValueRequest {
bytes Object = 1;
map<uint64,AttributeValue> Attributi = 3;
}
message SetAttributeValueResponse {
bytes Object = 1;
}
|
|
| Valori restituiti | Impacchetta l'errore EP11 in message Grep11Error. |
| Descrizione |
Implementazione di impacchettamento di attributo: vedi _GetAttrValue Attualmente, EP11 invia solo attributi booleani; tutti gli altri attributi sono gestiti dall'host (e EP11 non modifica gli array, come ad esempio WRAP_TEMPLATE). Non rappresenta o necessita di sessioni (parte di blob), quindi non utilizza il parametro PKCS #11 |
|---|---|
| Parametri |
CK_RV m_SetAttributeValue (
unsigned char *object, size_t objectlen,
CK_ATTRIBUTE_PTR attributes, CK_ULONG attributeslen,
destinazione_t
);
|
| Valori restituiti | Un sottoinsieme dei valori restituiti C_SetAttributeValue. Per ulteriori informazioni, consultare il capitolo Valori di ritorno del documento Enterprise PKCS #11 (EP11) Library structure. |
| Descrizione |
Alcuni oggetti potrebbero non essere modificati. Il richiamo di Solo gli oggetti di sessione possono essere modificati durante una sessione di sola lettura. Il modello può specificare nuovi valori per qualsiasi attributo dell'oggetto che può essere modificato. Se il modello specifica un valore di un attributo che non è compatibile con altri attributi esistenti dell'oggetto, la chiamata ha
esito negativo con il codice di ritorno Non è possibile modificare tutti gli attributi; per ulteriori informazioni, consultare la sezione 4.1.2 della specifica API PKCS #11 . |
|---|---|
| Parametri |
CK_DEFINE_FUNCTION(CK_RV, C_SetAttributeValue)(
CK_SESSION_HANDLE hSession,
CK_OBJECT_HANDLE hObject,
CK_ATTRIBUTE_PTR pTemplate,
CK_ULONG ulCount
);
|
| Valori restituiti | CKR_ACTION_PROIBITA, 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_READR_INVALID, CKR_CLOSED |
Frammenti di codice
-
Frammento di codice 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) -
Frammento di codice 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); });
Generazione di dati casuali
È possibile generare dati casuali di alta qualità, come valori di inizializzazione (IVs), PIN e password, da utilizzare nelle operazioni di codifica.
GenerateRandom
La funzione GenerateRandom genera dati casuali. Quando si utilizza questa funzione, assicurarsi di non impostare la lunghezza dei dati casuali su zero e il puntatore che punta all'ubicazione dei dati casuali su NULL.
| Descrizione | Esegue il bind a m_GenerateRandom EP11, che è un'implementazione di C_GenerateRandom PKCS #11. |
|
|---|---|---|
| Parametri |
message GenerateRandomRequest {
uint64 Len = 1;
}
message GenerateRandomResponse {
bytes Rnd = 1;
}
|
|
| Valori restituiti | Impacchetta l'errore EP11 in message Grep11Error. |
| Descrizione |
Implementazione di
La libreria host può generare dei numeri casuali senza distribuzione al backend, in caso di disponibilità sull'host di funzionalità adatta. Nell'attuale implementazione, tale operazione non viene eseguita. Questa funzione non supporta una query di dimensione. |
|---|---|
| Parametri |
CK_RV m_GenerateRandom (
CK_BYTE_PTR rnd, CK_ULONG rndlen,
destinazione_t
);
|
| Valori restituiti | Un sottoinsieme dei valori restituiti C_GenerateRandom. Per ulteriori informazioni, consultare il capitolo Valori di ritorno del documento Enterprise PKCS #11 (EP11) Library structure. |
| Descrizione | C_GenerateRandom genera dati casuali o pseudo - casuali. hSession è l'handle delle sessioni; pRandomData punta all'ubicazione che riceve i dati casuali e ulRandomLen è la lunghezza in
byte dei dati casuali o pseudo - casuali da generare. |
|---|---|
| Parametri |
CK_DEFINE_FUNCTION(CK_RV, C_GenerateRandom)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pRandomData,
CK_ULONG ulRandomLen
);
|
| Valori restituiti | CKR_ARGUMENTS_BAD, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_ANNULLATO, 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. |
Frammenti di codice
-
Frammento di codice Golang
GenerateRandomRequest := &pb.GenerateRandomRequest { Len: 1024, } GenerateRandomResponse, err := cryptoClient.GenerateRandom(context.Background(), GenerateRandomRequest) -
Frammento di codice JavaScript
client.GenerateRandom({ Len: ep11.AES_BLOCK_SIZE }, (err, response) => { callback(err, response); });
Crittografia e decrittografia dei dati
Specificando il meccanismo crittografico, è possibile eseguire funzioni di codifica e decodifica simmetriche o asimmetriche. Potrebbe essere necessario richiamare una serie di funzioni secondarie per codificare o decodificare i dati. Ad esempio,
l'operazione di codifica dati in più parti è composta dalle operazioni secondarie EncryptInit, EncryptUpdate e EncryptFinal.
EncryptInit
La funzione EncryptInit inizializza un'operazione di crittografia. È necessario richiamare prima questa funzione per eseguire una codifica.
| Descrizione | Esegue il bind a m_EncryptInit EP11, che è un'implementazione di C_EncryptInit PKCS #11. |
|
|---|---|---|
| Parametri |
message EncryptInitRequest {
Mechanism Mech = 2;
bytes Key = 3;
}
message EncryptInitResponse {
bytes State = 1;
}
|
|
| Valori restituiti | Impacchetta l'errore EP11 in message Grep11Error. |
| Descrizione |
Implementazione di Il blob Per i meccanismi a chiave pubblica, Per i meccanismi della chiave segreta, lo stato Codifica eredita le limitazioni della sessione oggetto da Il blob
|
|---|---|
| Parametri |
CK_RV m_EncryptInit (
unsigned char * state, size_t * statelen,
CK_MECHANISM_PTR mech,
const unsigned char *key, size_t keylen,
destinazione_t
);
|
| Valori restituiti | Un sottoinsieme dei valori restituiti C_EncryptInit. Per ulteriori informazioni, consultare il capitolo Valori di ritorno del documento della struttura della libreria Enterprise PKCS #11 (EP11). |
| Descrizione |
L'attributo Dopo che l'applicazione ha richiamato |
|---|---|
| Parametri |
CK_DEFINE_FUNCTION(CK_RV, C_EncryptInit)(
CK_SESSION_HANDLE hSession,
CK_MECHANISM_PTR pMechanism,
CK_OBJECT_HANDLE hKey
);
|
| Valori restituiti | CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELLATO, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_KEY_FUNCTION_NOT_CONSENTE, CKR_KEY_HANDLE_INVALID, CKR_KEY_SIZE_RANGE, CKR_KEY_TYPE_INCONGRUENTE, CKR_MECHANISM_INVALID, CKR_MECHANISM_PARACTIVE |
Frammenti di codice
-
Frammento di codice 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) -
Frammento di codice JavaScript
client.EncryptInit({ Mech: { Mechanism: ep11.CKM_AES_CBC_PAD, ParameterB: iv }, Key: key }, (err, data={}) => { cb(err, data.State); });
Encrypt
La funzione Encrypt crittografa dati di una singola parte. Non è necessario eseguire le operazioni secondarie di EncryptUpdate e EncryptFinal per una codifica a parte singola. Prima di richiamare questa
funzione, assicurarsi di eseguire prima EncryptInit.
| Descrizione | Esegue il bind a m_Encrypt EP11, che è un'implementazione di C_Encrypt PKCS #11. |
|
|---|---|---|
| Parametri |
message EncryptRequest {
bytes State = 1;
bytes Plain = 2;
}
message EncryptResponse {
bytes Ciphered = 3;
}
|
|
| Valori restituiti | Impacchetta l'errore EP11 in message Grep11Error. |
| Descrizione |
Implementazione di Non aggiorna Il blob Il blob |
|---|---|
| Parametri |
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,
destinazione_t
);
|
| Valori restituiti | Un sottoinsieme dei valori restituiti C_Encrypt. Per ulteriori informazioni, consultare il capitolo Valori di ritorno del documento Enterprise PKCS #11 (EP11) Library structure. |
| Descrizione |
L'operazione di codifica deve essere inizializzata con
Per alcuni meccanismi di crittografia, i dati di input in testo semplice hanno determinati vincoli di lunghezza (perché il meccanismo può crittografare solo parti relativamente brevi di testo semplice, o perché i dati di input del meccanismo
devono essere costituiti da un numero integrale di blocchi). Se questi vincoli non vengono soddisfatti, Il testo semplice e il testo cifrato possono trovarsi nella stessa posizione, vale a dire, se Per la maggior parte dei meccanismi, |
|---|---|
| Parametri |
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
);
|
| Valori restituiti | 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_ANNULLATO, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_LE_NOT_INITIALIZED, CKR_SESSION_INVALID, ckr_session_closed |
Frammenti di codice
-
Frammento di codice Golang
plainText := "Encrypt this message" EncryptRequest := &pb.EncryptRequest { State: EncryptInitResponse.State, Plain: plainText, } EncryptResponse, err := cryptoClient.Encrypt(context.Background(), EncryptRequest) -
Frammento di codice JavaScript
client.Encrypt({ State: state, Plain: Buffer.from(message) }, (err, response) => { callback(err, response); });
EncryptUpdate
La funzione EncryptUpdate continua un'operazione di crittografia di più parti. Prima di richiamare questa funzione, assicurarsi di eseguire prima EncryptInit.
| Descrizione | Esegue il bind a m_EncryptUpdate EP11, che è un'implementazione di C_EncryptUpdate PKCS #11. |
|
|---|---|---|
| Parametri |
message EncryptUpdateRequest {
bytes State = 1;
bytes Plain = 2;
}
message EncryptUpdateResponse {
bytes State = 1;
bytes Ciphered = 3;
}
|
|
| Valori restituiti | Impacchetta l'errore EP11 in message Grep11Error. |
| Descrizione |
Implementazione di Il blob Il blob |
|---|---|
| Parametri |
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,
destinazione_t
);
|
| Valori restituiti | Un sottoinsieme dei valori restituiti C_EncryptUpdate. Per ulteriori informazioni, consultare il capitolo Valori di ritorno del documento Enterprise PKCS #11 (EP11) Library structure. |
| Descrizione |
L'operazione di codifica deve essere inizializzata con Il |
|---|---|
| Parametri |
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
);
|
| Valori restituiti | 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_ANNULLATO, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOT_INITIALIZED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID. |
Frammenti di codice
-
Frammento di codice 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...) -
Frammento di codice JavaScript
client.EncryptUpdate({ State: state, Plain: Buffer.from(message.substr(20)) }, (err, data={}) => { cb(err, data.State, Buffer.concat([ciphertext, data.Ciphered])); });
EncryptFinal
La funzione EncryptFinal termina un'operazione di crittografia di più parti.
| Descrizione | Esegue il bind a m_EncryptFinal EP11, che è un'implementazione di C_EncryptFinal PKCS #11. |
|
|---|---|---|
| Parametri |
message EncryptFinalRequest {
bytes State = 1;
}
message EncryptFinalResponse {
bytes Ciphered = 2;
}
|
|
| Valori restituiti | Impacchetta l'errore EP11 in message Grep11Error. |
| Descrizione |
Implementazione di Non aggiorna Il blob Il blob |
|---|---|
| Parametri |
CK_RV m_EncryptFinal (
const unsigned char *state, size_t statelen,
CK_BYTE_PTR ciphered, CK_ULONG_PTR cipheredlen,
destinazione_t
);
|
| Valori restituiti | Un sottoinsieme dei valori restituiti C_EncryptFinal. Per ulteriori informazioni, consultare il capitolo Valori di ritorno del documento Enterprise PKCS #11 (EP11) Library structure. |
| Descrizione |
L'operazione di codifica deve essere inizializzata con Per alcuni meccanismi di crittografia multi - parte, i dati di testo semplice di input hanno alcuni vincoli di lunghezza perché i dati di immissione del meccanismo devono essere costituiti da un numero integrale di blocchi. Se questi
vincoli non vengono soddisfatti, |
|---|---|
| Parametri |
CK_DEFINE_FUNCTION(CK_RV, C_EncryptFinal)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pLastEncryptedPart,
CK_ULONG_PTR pulLastEncryptedPartLen
);
|
| Valori restituiti | 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_ANNULLATO, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOT_INITIALIZED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID. |
Frammenti di codice
-
Frammento di codice Golang
EncryptFinalRequest := &pb.EncryptFinalRequest { State: EncryptUpdateResponse.State, } EncryptFinalResponse, err := cryptoClient.EncryptFinal(context.Background(), EncryptFinalRequest) -
Frammento di codice JavaScript
client.EncryptFinal({ State: state }, (err, data={}) => { cb(err, Buffer.concat([ciphertext, data.Ciphered])); });
EncryptSingle
La funzione EncryptSingle elabora i dati in un unico passaggio con una chiamata. Non restituisce alcuno stato all'host e restituisce solo i dati codificati. Questa funzione è un'estensione IBM EP11 alla specifica PKCS #11 standard
ed è una combinazione delle funzioni EncryptInit e Encrypt. Consente di completare un'operazione di crittografia con una singola chiamata invece di una serie di chiamate.
| Descrizione | Esegue il bind a m_EncryptSingle EP11 |
|
|---|---|---|
| Parametri |
message EncryptSingleRequest {
bytes Key = 1;
Mechanism Mech = 2;
bytes Plain = 3;
}
message EncryptSingleResponse {
bytes Ciphered = 4;
}
|
|
| Valori restituiti | Impacchetta l'errore EP11 in message Grep11Error. |
| Descrizione |
Variante non standard di Questo è il metodo preferito per crittografare i dati in un singolo passaggio per le applicazioni in grado di riconoscere XCP. Funzionalmente è equivalente a Se il backend supporta le chiavi residenti, la chiave può essere anche un handle di chiave residente. Vedi anche: Il blob |
|---|---|
| Parametri |
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,
destinazione_t
);
|
| Valori restituiti | Un sottoinsieme dei valori restituiti C_Encrypt. Per ulteriori informazioni, consultare il capitolo Valori di ritorno del documento Enterprise PKCS #11 (EP11) Library structure. |
Frammenti di codice
-
Frammento di codice 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) -
Frammento di codice 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 funzione ReencryptSingle, puoi decrittografare i dati con la chiave originale e quindi crittografare i dati non elaborati con una chiave differente in una singola chiamata all'interno dell'HSM cloud. I tipi di chiave utilizzati
per questa operazione possono essere uguali o differenti. Questa funzione è un'estensione IBM EP11 alla specifica PKCS #11 standard. Questa singola chiamata è un'opzione valida in cui una grande quantità di dati deve essere codificata nuovamente
con chiavi differenti e ignora la necessità di eseguire una combinazione di funzioni DecryptSingle e EncryptSingle per ciascun elemento di dati che deve essere codificato nuovamente. Non restituisce alcuno stato
all'host e restituisce solo i dati crittografati.
| Descrizione | Esegue il bind a EP11 m_ReencryptSingle. |
|
|---|---|---|
| Parametri |
Richiesta ReencryptSinglemessaggio {
byte DecKey = 1;
byte EncKey = 2;
Meccanismo DecMech = 3;
Meccanismo EncMech = 4;
byte cifrati = 5;
}
messaggio ReencryptSingleRisposta {
byte cifrati = 6;
}
|
|
| Valori restituiti | Impacchetta l'errore EP11 in message Grep11Error. |
| Descrizione |
Variante non standard di Decodifica i dati con la chiave originale e quindi crittografa i dati non elaborati con una chiave diversa all'interno del cloud HSM. |
|---|---|
| Parametri |
CK_RV m_ReencryptSingle (
const unsigned char * dkey, size_t dkeylen,
const unsigned char * ekey, size_t ekeylen,
CK_MECHANISM_PTR decmech,
Mech CK_MECHANISM_PTR,
CK_BYTE_PTR in, CK_ULONG inlen,
CK_BYTE_PTR ciphered, CK_ULONG_PTR cipheredlen,
destinazione_t
);
|
| Valori restituiti | Un sottoinsieme di valori restituiti C_Encrypt e C_Decrypt . Per ulteriori informazioni, consultare il capitolo Valori di ritorno del documento Enterprise PKCS #11 (EP11) Library structure. |
Frammenti di codice
-
Frammento di codice 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) -
Frammento di codice 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 funzione DecryptInit inizializza un'operazione di decrittografia. È necessario richiamare prima questa funzione per eseguire una decrittografia.
| Descrizione | Esegue il bind a m_DecryptInit EP11, che è un'implementazione di C_DecryptInit PKCS #11. |
|
|---|---|---|
| Parametri |
message DecryptInitRequest {
Mechanism Mech = 2;
bytes Key = 3;
}
message DecryptInitResponse {
bytes State = 1;
}
|
|
| Valori restituiti | Impacchetta l'errore EP11 in message Grep11Error. |
| Descrizione | Implementazione di C_DecryptInit PKCS #11.
|
|---|---|
| Parametri |
CK_RV m_DecryptInit (
unsigned char * state, size_t * statelen,
CK_MECHANISM_PTR mech,
const unsigned char *key, size_t keylen,
destinazione_t
);
|
| Valori restituiti | Un sottoinsieme dei valori restituiti C_DecryptInit. Per ulteriori informazioni, consultare il capitolo Valori di ritorno del documento Enterprise PKCS #11 (EP11) Library structure. |
| Descrizione |
L'attributo Dopo che l'applicazione ha richiamato |
|---|---|
| Parametri |
CK_DEFINE_FUNCTION(CK_RV, C_DecryptInit)(
K_SESSION_HANDLE hSession,
CK_MECHANISM_PTR pMechanism,
CK_OBJECT_HANDLE hKey
);
|
| Valori restituiti | CKR_ARGUMENTS_BAD, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELLATO, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_KEY_FUNCTION_NOT_CONSENTE, CKR_KEY_HANDLE_INVALID, CKR_KEY_SIZE_RANGE, CKR_KEY_TYPE_INCONSISTENTE, CKR_MECHANISM_INVALID, _SESS_INVALID, |
Frammenti di codice
-
Frammento di codice 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) -
Frammento di codice JavaScript
client.DecryptInit({ Mech: { Mechanism: ep11.CKM_AES_CBC_PAD, ParameterB: iv }, Key: key }, (err, data={}) => { cb(err, data.State); });
Decrypt
La funzione Decrypt decodifica i dati in una singola parte. Non è necessario eseguire le operazioni secondarie DecryptUpdate e DecryptFinal per una decodifica a parte singola. Prima di richiamare questa
funzione, assicurarsi di eseguire prima DecryptInit.
| Descrizione | Esegue il bind a m_Decrypt EP11, che è un'implementazione di C_Decrypt PKCS #11. |
|
|---|---|---|
| Parametri |
message DecryptRequest {
bytes State = 1;
bytes Ciphered = 2;
}
message DecryptResponse {
bytes Plain = 3;
}
|
|
| Valori restituiti | Impacchetta l'errore EP11 in message Grep11Error. |
| Descrizione |
Implementazione di PKCS #11 IL BLOB (binary large object) state, slen deve essere associato dal parametro |
|---|---|
| Parametri |
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,
destinazione_t
);
|
| Valori restituiti | Un sottoinsieme dei valori restituiti C_Decrypt. Per ulteriori informazioni, consultare il capitolo Valori di ritorno del documento Enterprise PKCS #11 (EP11) Library structure. |
| Descrizione |
L'operazione di decodifica deve essere inizializzata con
Il testo cifrato e il testo semplice possono essere nella stessa posizione, il che significa che è accettabile se i dati pEncryptede pData puntano alla stessa ubicazione. Se i dati del testo cifrato di input non possono essere decrittografati perché hanno una lunghezza inappropriata, possono essere restituiti |
|---|---|
| Parametri |
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
);
|
| Valori restituiti | 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_ANNULLA, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_SESSION_NOT_INITIALIZED, ckr_closed |
Frammenti di codice
-
Frammento di codice Golang
DecryptRequest := &pb.DecryptRequest{ State: DecryptInitResponse.State, Ciphered: ciphertext, // encrypted data from a previous encrypt operation } DecryptResponse, err := cryptoClient.Decrypt(context.Background(), DecryptRequest) -
Frammento di codice JavaScript
client.Decrypt({ State: state, Ciphered: ciphertext }, (err, response) => { callback(err, response); });
DecryptUpdate
La funzione DecryptUpdate continua un'operazione di decrittografia di più parti. Prima di richiamare questa funzione, assicurarsi di eseguire prima DecryptInit.
| Descrizione | Esegue il bind a m_DecryptUpdate EP11, che è un'implementazione di C_DecryptUpdate PKCS #11. |
|
|---|---|---|
| Parametri |
message DecryptUpdateRequest {
bytes State = 1;
bytes Ciphered = 2;
}
message DecryptUpdateResponse {
bytes State = 1;
bytes Plain = 3;
}
|
|
| Valori restituiti | Impacchetta l'errore EP11 in message Grep11Error. |
| Descrizione |
Implementazione di Il blob Il blob |
|---|---|
| Parametri |
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,
destinazione_t
);
|
| Valori restituiti | Un sottoinsieme dei valori restituiti C_DecryptUpdate. Per ulteriori informazioni, consultare il capitolo Valori di ritornodel documento Enterprise PKCS #11 (EP11) Library structure. |
| Descrizione |
L'operazione di decodifica deve essere inizializzata con Il testo cifrato e il testo semplice possono trovarsi nella stessa posizione, vale a dire, è corretto se |
|---|---|
| Parametri |
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
);
|
| Valori restituiti | CKR_ARGUMENTS_BAD, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELLATO, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_KEY_FUNCTION_NOT_CONSENTE, CKR_KEY_HANDLE_INVALID, CKR_KEY_SIZE_RANGE, CKR_KEY_TYPE_INCONSISTENTE, CKR_MECHANISM_INVALID, _SESS_INVALID, |
Frammenti di codice
-
Frammento di codice 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...) -
Frammento di codice JavaScript
client.DecryptUpdate({ State: state, Ciphered: ciphertext.slice(0, 16) }, (err, data={}) => { cb(err, data.State, data.Plain); });
DecryptFinal
La funzione DecryptFinal termina un'operazione di decrittografia di più parti.
| Descrizione | Esegue il bind a m_DecryptFinal EP11, che è un'implementazione di C_DecryptFinal PKCS #11. |
|
|---|---|---|
| Parametri |
message DecryptFinalRequest {
bytes State = 1;
}
message DecryptFinalResponse {
bytes Plain = 2;
}
|
|
| Valori restituiti | Impacchetta l'errore EP11 in message Grep11Error. |
| Descrizione |
Implementazione di Non aggiorna Il blob Il blob |
|---|---|
| Parametri |
CK_RV m_DecryptFinal (
const unsigned char *state, size_t statelen,
CK_BYTE_PTR plain, CK_ULONG_PTR plainlen,
destinazione_t
);
|
| Valori restituiti | Un sottoinsieme dei valori restituiti C_DecryptFinal. Per ulteriori informazioni, consultare il capitolo Valori di ritorno del documento Enterprise PKCS #11 (EP11) Library structure. |
| Descrizione |
L'operazione di decodifica deve essere inizializzata con Se i dati del testo cifrato di input non possono essere decodificati perché hanno una lunghezza inappropriata, è possibile restituire |
|---|---|
| Parametri |
CK_DEFINE_FUNCTION(CK_RV, C_DecryptFinal)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pLastPart,
CK_ULONG_PTR pulLastPartLen
);
|
| Valori restituiti | 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_ANNULLA, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_SESSION_NOT_INITIALIZED, ckr_closed |
Frammenti di codice
-
Frammento di codice Golang
DecryptFinalRequest := &pb.DecryptFinalRequest { State: DecrypUpdateResponse.State, } DecryptFinalResponse, err := cryptoClient.DecryptFinal(context.Background(), DecryptFinalRequest) -
Frammento di codice JavaScript
client.DecryptFinal({ State: state }, (err, data={}) => { cb(err, Buffer.concat([plaintext, data.Plain])); });
DecryptSingle
La funzione DecryptSingle elabora i dati in un unico passaggio con una chiamata. Non restituisce alcuno stato all'host e restituisce solo i dati decodificati. Questa funzione è un'estensione IBM EP11 alla specifica PKCS #11 standard
ed è una combinazione delle funzioni DecryptInit e Decrypt. Consente di completare un'operazione di decrittografia con una singola chiamata invece di una serie di chiamate.
| Descrizione | Si collega a EP11 m_DecryptSingle. |
|
|---|---|---|
| Parametri |
message DecryptSingleRequest {
bytes Key = 1;
Mechanism Mech = 2;
bytes Ciphered = 3;
}
message DecryptSingleResponse {
bytes Plain = 4;
}
|
|
| Valori restituiti | Impacchetta l'errore EP11 in message Grep11Error. |
| Descrizione |
Variante non standard di Questo è il metodo preferito per crittografare i dati in un singolo passaggio per le applicazioni in grado di riconoscere XCP. Funzionalmente è equivalente a Se il backend supporta le chiavi residenti, la chiave può essere anche un handle di chiave residente. Vedi anche: Il blob |
|---|---|
| Parametri |
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,
destinazione_t
);
|
| Valori restituiti | Un sottoinsieme dei valori restituiti C_Decrypt. Per ulteriori informazioni, consultare il capitolo Valori di ritorno del documento Enterprise PKCS #11 (EP11) Library structure. |
Frammenti di codice
-
Frammento di codice 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) -
Frammento di codice JavaScript
client.DecryptSingle({ Mech: { Mechanism: ep11.CKM_AES_CBC_PAD, ParameterB: iv }, Key: bobDerived.NewKey, Ciphered: ciphertext }, (err, response) => { callback(err, response); });
Firma e verifica dei dati
GREP11 fornisce una serie di funzioni per firmare i dati e verificare le firme o i codici di autenticazione dei messaggi (MAC). Potrebbe essere necessario richiamare una serie di funzioni secondarie per eseguire un'operazione di firma. Ad esempio,
l'operazione di firma dei dati in più parti consiste nelle operazioni secondarie SignInit, SignUpdate e SignFinal.
SignInit
La funzione SignInit inizializza un'operazione di firma. È necessario richiamare prima questa funzione per eseguire un'operazione di firma.
| Descrizione | Si collega a EP11 m_SignInit , che è un'implementazione di PKCS #11 C_SignInit. |
|
|---|---|---|
| Parametri |
message SignInitRequest {
Mechanism Mech = 2;
bytes PrivKey = 3;
}
message SignInitResponse {
bytes State = 1;
}
|
|
| Valori restituiti | Impacchetta l'errore EP11 in message Grep11Error. |
| Descrizione | Implementazione di C_SignInit PKCS #11.
|
|---|---|
| Parametri |
CK_RV m_SignInit (
unsigned char * state, size_t * statelen,
CK_MECHANISM_PTR mech,
const unsigned char *privKey, size_t privKeylen,
destinazione_t
);
|
| Valori restituiti | Un sottoinsieme dei valori restituiti C_Decrypt. Per ulteriori informazioni, consultare il capitolo Valori di ritorno del documento Enterprise PKCS #11 (EP11) Library structure. |
| Descrizione |
L'attributo Dopo che l'applicazione ha richiamato |
|---|---|
| Parametri |
CK_DEFINE_FUNCTION(CK_RV, C_SignInit)(
CK_SESSION_HANDLE hSession,
CK_MECHANISM_PTR pMechanism,
CK_OBJECT_HANDLE hKey
);
|
| Valori restituiti | CKR_ARGUMENTS_BAD, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELLATO, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_KEY_FUNCTION_NOT_CONSENTE, CKR_KEY_HANDLE_INVALID, CKR_KEY_SIZE_RANGE, CKR_KEY_TYPE_INCONSISTENTE, CKR_MECHANISM_INVALID, _SESS_INVALID, |
Frammenti di codice
-
Frammento di codice Golang
SignInitRequest := &pb.SignInitRequest { Mech: &pb.Mechanism{Mechanism: ep11.CKM_SHA1_RSA_PKCS}, PrivKey: GenerateKeyPairResponse.PrivKeyBytes, } SignInitResponse, err := cryptoClient.SignInit(context.Background(), SignInitRequest) -
Frammento di codice JavaScript
client.SignInit({ Mech: { Mechanism: ep11.CKM_SHA1_RSA_PKCS }, PrivKey: keys.PrivKeyBytes }, (err, data={}) => { cb(err, data.State); });
Firma
La funzione Sign firma i dati di una singola parte. Non è necessario eseguire le operazioni secondarie SignUpdate e SignFinal per una firma a parte singola. Prima di richiamare questa funzione, assicurarsi
di eseguire prima SignInit.
| Descrizione | Esegue il bind a m_Sign EP11, che è un'implementazione di C_Sign PKCS #11. |
|
|---|---|---|
| Parametri |
message SignRequest {
bytes State = 1;
bytes Data = 2;
}
message SignResponse {
bytes Signature = 3;
}
|
|
| Valori restituiti | Impacchetta l'errore EP11 in message Grep11Error. |
| Descrizione |
Implementazione di Non aggiorna Il blob Il blob |
|---|---|
| Parametri |
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,
destinazione_t
);
|
| Valori restituiti | Un sottoinsieme dei valori restituiti C_Sign. Per ulteriori informazioni, consultare il capitolo Valori di ritorno del documento Enterprise PKCS #11 (EP11) Library structure. |
| Descrizione |
L'operazione di firma deve essere inizializzata con
Per la maggior parte dei meccanismi, |
|---|---|
| Parametri |
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
);
|
| Valori restituiti | 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_ANNULLA, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOT_INITIALIZED, CKR_SESSION_INVALID, CKR_SESSION_CLOSED |
Frammenti di codice
-
Frammento di codice 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) -
Frammento di codice JavaScript
client.Sign({ State: state, Data: dataToSign }, (err, data={}) => { cb(err, data.Signature); });
SignUpdate
La funzione SignUpdate contiene un'operazione di firma di più parti. Prima di richiamare questa funzione, assicurarsi di eseguire prima SignInit.
| Descrizione | Esegue il bind a m_SignUpdate EP11, che è un'implementazione di C_SignUpdate PKCS #11. |
|
|---|---|---|
| Parametri |
message SignUpdateRequest {
bytes State = 1;
bytes Data = 2;
}
message SignUpdateResponse {
bytes State = 1;
}
|
|
| Valori restituiti | Impacchetta l'errore EP11 in message Grep11Error. |
| Descrizione |
Implementazione di C_SignUpdate PKCS #11.
Il blob Il blob |
|---|---|
| Parametri |
CK_RV m_SignUpdate (
unsigned char *state, size_t statelen,
CK_BYTE_PTR data, CK_ULONG datalen,
destinazione_t
);
|
| Valori restituiti | Un sottoinsieme dei valori restituiti C_SignUpdate. Per ulteriori informazioni, consultare il capitolo Valori di ritorno del documento Enterprise PKCS #11 (EP11) Library structure. |
| Descrizione |
L'operazione di firma deve essere inizializzata con |
|---|---|
| Parametri |
CK_DEFINE_FUNCTION(CK_RV, C_SignUpdate)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pPart,
CK_ULONG ulPartLen
);
|
| Valori restituiti | CKR_ARGUMENTS_BAD, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DATA_LEN_RANGE, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_ANNULLATI, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOT_INITIALIZED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_USER_NOTEDIN. |
Frammenti di codice
-
Frammento di codice 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) -
Frammento di codice JavaScript
client.SignUpdate({ State: state, Data: digest }, (err, response) => { callback(err, response); });
SignFinal
La funzione SignFinal termina un'operazione di firma di più parti.
| Descrizione | Esegue il bind a m_SignFinal EP11, che è un'implementazione di C_SignFinal PKCS #11. |
|
|---|---|---|
| Parametri |
message SignFinalRequest {
bytes State = 1;
}
message SignFinalResponse {
bytes Signature = 2;
}
|
|
| Valori restituiti | Impacchetta l'errore EP11 in message Grep11Error. |
| Descrizione |
Implementazione di Non aggiorna Il blob Il blob |
|---|---|
| Parametri |
CK_RV m_SignFinal (
const unsigned char *state, size_t statelen,
CK_BYTE_PTR signature, CK_ULONG_PTR signaturelen,
destinazione_t
);
|
| Valori restituiti | Un sottoinsieme dei valori restituiti C_SignFinal. Per ulteriori informazioni, consultare il capitolo Valori di ritorno del documento Enterprise PKCS #11 (EP11) Library structure. |
| Descrizione |
L'operazione di firma deve essere inizializzata con |
|---|---|
| Parametri |
CK_DEFINE_FUNCTION(CK_RV, C_SignFinal)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pSignature,
CK_ULONG_PTR pulSignatureLen
);
|
| Valori restituiti | 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_CANCELLALIZED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOT_INITIALIZED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID |
Frammenti di codice
-
Frammento di codice Golang
SignFinalRequest := &pb.SignFinalRequest { State: SignUpdateResponse.State, } SignFinalResponse, err := cryptoClient.SignFinal(context.Background(), SignFinalRequest) -
Frammento di codice JavaScript
client.SignFinal({ State: state }, (err, response) => { callback(err, response); });
SignSingle
La funzione SignSingle firma i dati MAC in un unico passaggio con una chiamata e senza costruire lo stato intermedio del digest. Non restituisce alcuno stato all'host e restituisce solo il risultato. Questa funzione è un'estensione
IBM EP11 alla specifica PKCS #11 standard ed è una combinazione delle funzioni SignInit e Sign. Consente di completare un'operazione di firma con una singola chiamata invece di una serie di chiamate.
| Descrizione | Esegue il bind a EP11 m_SignSingle. |
|
|---|---|---|
| Parametri |
message SignSingleRequest {
bytes PrivKey = 1;
Mechanism Mech = 2;
bytes Data = 3;
}
message SignSingleResponse {
bytes Signature = 4;
}
|
|
| Valori restituiti | Impacchetta l'errore EP11 in message Grep11Error. |
| Descrizione |
Estensione non standard, combinazione di Questo è il modo preferito di firma, senza un ulteriore roundtrip, crittografia e decrittografia. Funzionalmente, Il blob Sono supportate le richieste multi - dati per le firme HMAC e CMAC (sottovariante 2 e 3). Vedi anche: |
|---|---|
| Parametri |
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,
destinazione_t
);
|
| Valori restituiti | Un sottoinsieme dei valori restituiti C_Decrypt. Per ulteriori informazioni, consultare il capitolo Valori di ritorno del documento Enterprise PKCS #11 (EP11) Library structure. |
Frammenti di codice
-
Frammento di codice 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) -
Frammento di codice JavaScript
client.SignSingle({ Mech: { Mechanism: ep11.CKM_ECDSA }, PrivKey: key, Data: digest }, (err, response) => { callback(err, response); });
VerifyInit
La funzione VerifyInit inizializza un'operazione di verifica. È necessario richiamare prima questa funzione per verificare una firma.
| Descrizione | Esegue il bind a m_VerifyInit EP11, che è un'implementazione di C_VerifyInit PKCS #11. |
|
|---|---|---|
| Parametri |
message VerifyInitRequest {
Mechanism Mech = 2;
bytes PubKey = 3;
}
message VerifyInitResponse {
bytes State = 1;
}
|
|
| Valori restituiti | Impacchetta l'errore EP11 in message Grep11Error. |
| Descrizione |
Implementazione di Per i meccanismi a chiave pubblica, Se viene inizializzata un'operazione HMAC, le limitazioni di sessione dell'oggetto Il blob Nota: |
|---|---|
| Parametri |
CK_RV m_VerifyInit (
unsigned char * state, size_t * statelen,
CK_MECHANISM_PTR mech,
const unsigned char *pubKey, size_t pubKeylen,
destinazione_t
);
|
| Valori restituiti | Un sottoinsieme dei valori restituiti C_VerifyInit. Per ulteriori informazioni, consultare il capitolo Valori di ritorno del documento Enterprise PKCS #11 (EP11) Library structure. |
| Descrizione |
L'attributo Dopo che l'applicazione ha richiamato |
|---|---|
| Parametri |
CK_DEFINE_FUNCTION(CK_RV, C_VerifyInit)(
CK_SESSION_HANDLE hSession,
CK_MECHANISM_PTR pMechanism,
CK_OBJECT_HANDLE hKey
);
|
| Valori restituiti | CKR_ARGUMENTS_BAD, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELLATO, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_KEY_FUNCTION_NOT_CONSENTE, CKR_KEY_HANDLE_INVALID, CKR_KEY_SIZE_RANGE, CKR_KEY_TYPE_INCONSISTENTE, CKR_MECHANISM_INVALID, _SESS_INVALID, |
Frammenti di codice
-
Frammento di codice Golang
VerifyInitRequest := &pb.VerifyInitRequest { Mech: &pb.Mechanism{Mechanism: ep11.CKM_SHA1_RSA_PKCS}, PubKey: GenerateKeyPairResponse.PubKeyBytes, } VerifyInitResponse, err := cryptoClient.VerifyInit(context.Background(), VerifyInitRequest) -
Frammento di codice JavaScript
client.VerifyInit({ Mech: { Mechanism: ep11.CKM_SHA1_RSA_PKCS }, PubKey: keys.PubKeyBytes }, (err, data={}) => { cb(err, signature, data.State); });
Verifica
La funzione Verify verifica una firma sui dati di una singola parte. Non è necessario eseguire le operazioni secondarie VerifyUpdate e VerifyFinal per una verifica di una singola parte. Prima di richiamare
questa funzione, assicurarsi di eseguire prima VerifyInit.
| Descrizione | Esegue il bind a m_Verify EP11, che è un'implementazione di C_Verify PKCS #11. |
|
|---|---|---|
| Parametri |
message VerifyRequest {
bytes State = 1;
bytes Data = 2;
bytes Signature = 3;
}
message VerifyResponse {
}
|
|
| Valori restituiti | Impacchetta l'errore EP11 in message Grep11Error. |
| Descrizione |
Implementazione di Non aggiorna L'ordine relativo dei dati e della firma sono invertiti in Il blob Il blob |
|---|---|
| Parametri |
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,
destinazione_t
);
|
| Valori restituiti | Un sottoinsieme dei valori restituiti C_Verify. Per ulteriori informazioni, consultare il capitolo Valori di ritorno del documento Enterprise PKCS #11 (EP11) Library structure. |
| Descrizione |
L'operazione di verifica deve essere inizializzata con Una chiamata eseguita correttamente a
Per la maggior parte dei meccanismi, |
|---|---|
| Parametri |
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
);
|
| Valori restituiti | CKR_ARGUMENTS_BAD, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DATA_INVALID, CKR_DATA_LEN_RANGE, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_OPERATION_NOTALIZED, CKR_SESSION_CLOSED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOTALIZED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKRR_RANGE |
Frammenti di codice
-
Frammento di codice Golang
VerifyRequest := &pb.VerifyRequest { State: VerifyInitResponse.State, Data: msgHash[:], Signature: SignResponse.Signature, } VerifyResponse, err := cryptoClient.Verify(context.Background(), VerifyRequest) -
Frammento di codice JavaScript
client.Verify({ State: state, Data: dataToSign, Signature: signature }, (err, data={}) => { cb(err, signature); });
VerifyUpdate
La funzione VerifyUpdate continua un'operazione di verifica di più parti. Prima di richiamare questa funzione, assicurarsi di eseguire prima VerifyInit.
| Descrizione | Esegue il bind a m_VerifyUpdate EP11, che è un'implementazione di C_VerifyUpdate PKCS #11. |
|
|---|---|---|
| Parametri |
message VerifyUpdateRequest {
bytes State = 1;
bytes Data = 2;
}
message VerifyUpdateResponse {
bytes State = 1;
}
|
|
| Valori restituiti | Impacchetta l'errore EP11 in message Grep11Error. |
| Descrizione |
Implementazione di Il blob Il blob |
|---|---|
| Parametri |
CK_RV m_VerifyUpdate (
unsigned char *state, size_t statelen,
CK_BYTE_PTR data, CK_ULONG datalen,
destinazione_t
);
|
| Valori restituiti | Un sottoinsieme dei valori restituiti C_VerifyUpdate. Per ulteriori informazioni, consultare il capitolo Valori di ritorno del documento Enterprise PKCS #11 (EP11) Library structure. |
| Descrizione |
L'operazione di verifica deve essere inizializzata con |
|---|---|
| Parametri |
CK_DEFINE_FUNCTION(CK_RV, C_VerifyUpdate)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pPart,
CK_ULONG ulPartLen
);
|
| Valori restituiti | CKR_ARGUMENTS_BAD, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DATA_LEN_RANGE, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELLATO, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOT_INITIALIZED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID. |
Frammenti di codice
-
Frammento di codice 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) -
Frammento di codice JavaScript
client.VerifyUpdate({ State: state, Data: digest }, (err, response) => { callback(err, response); });
VerifyFinal
La funzione VerifyFinal termina un'operazione di verifica di più parti.
| Descrizione | Esegue il bind a m_VerifyFinal EP11, che è un'implementazione di C_VerifyFinal PKCS #11. |
|
|---|---|---|
| Parametri |
message VerifyFinalRequest {
bytes State = 1;
bytes Signature = 2;
}
message VerifyFinalResponse {
}
|
|
| Valori restituiti | Impacchetta l'errore EP11 in message Grep11Error. |
| Descrizione |
Implementazione di Non aggiorna Il blob Il blob |
|---|---|
| Parametri |
CK_RV m_VerifyFinal (
const unsigned char *state, size_t statelen,
CK_BYTE_PTR signature, CK_ULONG signaturelen,
destinazione_t
);
|
| Valori restituiti | Un sottoinsieme dei valori restituiti C_VerifyFinal. Per ulteriori informazioni, consultare il capitolo Valori di ritorno del documento Enterprise PKCS #11 (EP11) Library structure. |
| Descrizione |
L'operazione di verifica deve essere inizializzata con Una chiamata eseguita correttamente a |
|---|---|
| Parametri |
CK_DEFINE_FUNCTION(CK_RV, C_VerifyFinal)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pSignature,
CK_ULONG ulSignatureLen
);
|
| Valori restituiti | CKR_ARGUMENTS_BAD, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DATA_LEN_RANGE, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_ANNULLATI, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOT_INITIALIZED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_SIGNATURE_RANGE NON VALIDO, |
Frammenti di codice
-
Frammento di codice Golang
VerifyFinalRequest := &pb.VerifyFinalRequest { State: VerifyUpdateResponse.State, Signature: SignResponse.Signature, } VerifyFinalResponse, err := cryptoClient.VerifyFinal(context.Background(), VerifyFinalRequest) -
Frammento di codice JavaScript
client.VerifyFinal({ State: state, Signature: signature }, (err, response) => { callback(err, response); });
VerifySingle
La funzione VerifySingle firma i dati MAC in un unico passaggio con una chiamata e senza costruire lo stato intermedio del digest. Non restituisce alcuno stato all'host e restituisce solo il risultato della verifica. Questa funzione
è un'estensione IBM EP11 alla specifica PKCS #11 standard ed è una combinazione delle funzioni VerifyInit e Verify. Consente di completare un'operazione di verifica con una singola chiamata invece di una serie di
chiamate.
| Descrizione | Si collega a EP11 m_VerifySingle. |
|
|---|---|---|
| Parametri |
message VerifySingleRequest {
bytes PubKey = 1;
Mechanism Mech = 2;
bytes Data = 3;
bytes Signature = 4;
}
message VerifySingleResponse {
}
|
|
| Valori restituiti | Impacchetta l'errore EP11 in message Grep11Error. |
| Descrizione |
Estensione non standard, combinazione di Questo è il modo preferito di verificare una firma, senza un ulteriore roundtrip, crittografia, decrittografia. Funzionalmente, Il blob Per i meccanismi a chiave pubblica, Vedi anche: |
|---|---|
| Parametri |
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,
destinazione_t
);
|
| Valori restituiti | Un sottoinsieme dei valori restituiti C_VerifySingle. Per ulteriori informazioni, consultare il capitolo Valori di ritorno del documento Enterprise PKCS #11 (EP11) Library structure. |
Frammenti di codice
-
Frammento di codice 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) -
Frammento di codice JavaScript
client.VerifySingle({ Mech: { Mechanism: ep11.CKM_SHA256_RSA_PKCS }, PubKey: keys.PubKey, Data: digest, Signature: signature }, (err, response) => { callback(err, response); });
Protezione dell'integrità dei dati attraverso i digest dei messaggi
GREP11 fornisce una serie di funzioni per creare digest di messaggi progettati per proteggere l'integrità di una parte di dati. Potrebbe essere necessario richiamare una serie di funzioni secondarie per eseguire un'operazione di digestione.
Ad esempio, l'operazione di digest a più parti è costituita dalle operazioni secondarie DigestInit, DigestUpdate e DigestFinal.
DigestInit
La funzione DigestInit inizializza un'operazione di esecuzione del digest dei messaggi. È necessario eseguire questa funzione prima di eseguire un'operazione di digestione.
| Descrizione | Esegue il bind a m_DigestInit EP11, che è un'implementazione di C_DigestInit PKCS #11. |
|
|---|---|---|
| Parametri |
message DigestInitRequest {
Mechanism Mech = 2;
}
message DigestInitResponse {
bytes State = 1;
}
|
|
| Valori restituiti | Impacchetta l'errore EP11 in message Grep11Error. |
| Descrizione |
Implementazione di Crea uno stato di digest impacchettato. Nota: le query di dimensione sono supportate ma lo stato impacchettato viene sempre restituito dal backend, a differenza della maggior parte delle query di dimensione (che restituiscono una dimensione di output, invece
dell'output effettivo). Gli stati Durante le query di dimensione, l'host semplicemente scarta lo stato restituito e notifica la dimensione di blob (in Il blob |
|---|---|
| Parametri |
CK_RV m_DigestInit (
unsigned char * state, siz_t * len,
const CK_MECHANISM_PTR mech,
destinazione_t
);
|
| Valori restituiti | Un sottoinsieme dei valori restituiti C_DigestInit. Per ulteriori informazioni, consultare il capitolo Valori di ritorno del documento Enterprise PKCS #11 (EP11) Library structure. |
| Descrizione |
Dopo che l'applicazione ha richiamato |
|---|---|
| Parametri |
CK_DEFINE_FUNCTION(CK_RV, C_DigestInit)(
CK_SESSION_HANDLE hSession,
CK_MECHANISM_PTR pMechanism
);
|
| Valori restituiti | CKR_ARGUMENTS_BAD, CKR_CRYPTOKI_NOTALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_ANNULLATO, 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_invalid |
Frammenti di codice
-
Frammento di codice Golang
DigestInitRequest := &pb.DigestInitRequest { Mech: &pb.Mechanism{Mechanism: ep11.CKM_SHA256}, } DigestInitResponse, err := cryptoClient.DigestInit(context.Background(), DigestInitRequest) -
Frammento di codice JavaScript
client.DigestInit({ Mech: { Mechanism: ep11.CKM_SHA256 } }, (err, response) => { callback(err, response); });
Digest
La funzione Digest esegue il digest di dati di una singola parte. Non è necessario richiamare le funzioni di DigestUpdate e DigestFinal per la gestione dei dati a parte singola. Prima di richiamare questa
funzione, assicurarsi di eseguire prima DigestInit. Quando si impostano i parametri, non specificare la lunghezza dei dati di input come zero e il puntatore che punta all'ubicazione dei dati di input come NULL.
| Descrizione | Esegue il bind a m_Digest EP11, che è un'implementazione di C_Digest PKCS #11. |
|
|---|---|---|
| Parametri |
message DigestRequest {
bytes State = 1;
bytes Data = 2;
}
message DigestResponse {
bytes Digest = 3;
}
|
|
| Valori restituiti | Impacchetta l'errore EP11 in message Grep11Error. |
| Descrizione |
Implementazione di Se un oggetto digest ha esattamente 0 (zero) byte che vengono accodati ad esso dopo la creazione, in qualsiasi combinazione di trasferimenti zero - byte, può ancora eseguire un Digest one - pass, anche se deve essere rifiutato da un'implementazione rigorosa. Non aggiorna Le implementazioni potrebbero essere eseguite
Il blob |
|---|---|
| Parametri |
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,
destinazione_t
);
|
| Valori restituiti | Un sottoinsieme dei valori restituiti C_Digest. Per ulteriori informazioni, consultare il capitolo Valori di ritorno del documento Enterprise PKCS #11 (EP11) Library structure. |
| Descrizione |
L'operazione digest deve essere inizializzata con
I dati di input e l'output del digest possono essere nello stesso posto, vale a dire, è OK se pData e pDigest puntano alla stessa ubicazione.
|
|---|---|
| Parametri |
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
);
|
| Valori restituiti | CKR_ARGUMENTS_BAD, CKR_BUFFER_TOO_SMALL, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_ANNULLATO, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOT_INITIALIZED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID. |
Frammenti di codice
-
Frammento di codice Golang
digestData := []byte("Create a digest for this string") DigestRequest := &pb.DigestRequest { State: DigestInitResponse.State, Data: digestData, } DigestResponse, err := cryptoClient.Digest(context.Background(), DigestRequest) -
Frammento di codice JavaScript
client.Digest({ State: state, Data: Buffer.from(digestData) }, (err, data={}) => { cb(err, data.Digest); }); }
DigestUpdate
La funzione DigestUpdate continua un'operazione di digest di più parti. Prima di richiamare questa funzione, assicurarsi di eseguire prima DigestInit. Quando si impostano i parametri, non specificare la lunghezza
dei dati di input come zero e il puntatore che punta all'ubicazione dei dati di input come NULL.
| Descrizione | Esegue il bind a m_DigestUpdate EP11, che è un'implementazione di C_DigestUpdate PKCS #11. |
|
|---|---|---|
| Parametri |
message DigestUpdateRequest {
bytes State = 1;
bytes Data = 2;
}
message DigestUpdateResponse {
bytes State = 1;
}
|
|
| Valori restituiti | Impacchetta l'errore EP11 in message Grep11Error. |
| Descrizione |
Implementazione di
Il blob Il blob Vedi anche: |
|---|---|
| Parametri |
CK_RV m_DigestUpdate (
unsigned char *state, size_t statelen,
CK_BYTE_PTR data, CK_ULONG datalen,
destinazione_t
);
|
| Valori restituiti | Un sottoinsieme dei valori restituiti C_DigestUpdate. Per ulteriori informazioni, consultare il capitolo Valori di ritorno del documento Enterprise PKCS #11 (EP11) Library structure. |
| Descrizione |
L'operazione di digest del messaggio deve essere inizializzata con |
|---|---|
| Parametri |
CK_DEFINE_FUNCTION(CK_RV, C_DigestUpdate)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pPart,
CK_ULONG ulPartLen
);
|
| Valori restituiti | CKR_ARGUMENTS_BAD, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_ANNULLATO, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOT_INITIALIZED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID. |
Frammenti di codice
-
Frammento di codice 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) -
Frammento di codice JavaScript
client.DigestUpdate({ State: state, Data: Buffer.from(digestData.substr(0, 64)) }, (err, data={}) => { cb(err, data.State); });
DigestFinal
La funzione DigestFinal termina un'operazione di digest di più parti.
| Descrizione | Esegue il bind a m_DigestFinal EP11, che è un'implementazione di C_DigestFinal PKCS #11. |
|
|---|---|---|
| Parametri |
message DigestFinalRequest {
bytes State = 1;
}
message DigestFinalResponse {
bytes Digest = 2;
}
|
|
| Valori restituiti | Impacchetta l'errore EP11 in message Grep11Error. |
| Descrizione |
Implementazione di
Non aggiorna Il blob Il blob |
|---|---|
| Parametri |
CK_RV m_DigestFinal (
const unsigned char *state, size_t statelen,
CK_BYTE_PTR digest, CK_ULONG_PTR digestlen,
destinazione_t
);
|
| Valori restituiti | Un sottoinsieme dei valori restituiti C_DigestFinal. Per ulteriori informazioni, consultare il capitolo Valori di ritorno del documento Enterprise PKCS #11 (EP11) Library structure. |
| Descrizione |
L'operazione digest deve essere inizializzata con |
|---|---|
| Parametri |
CK_DEFINE_FUNCTION(CK_RV, C_DigestFinal)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pDigest,
CK_ULONG_PTR pulDigestLen
);
|
| Valori restituiti | CKR_ARGUMENTS_BAD, CKR_BUFFER_TOO_SMALL, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_ANNULLATO, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOT_INITIALIZED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID. |
Frammenti di codice
-
Frammento di codice Golang
DigestFinalRequest := &pb.DigestFinalRequest { State: DigestUpdateResponse.State, } DigestFinalResponse, err := cryptoClient.DigestFinal(context.Background(), DigestFinalRequest) -
Frammento di codice JavaScript
client.DigestFinal({ State: state }, (err, response) => { callback(err, response); });
DigestSingle
La funzione DigestSingle esegue il digest dei dati in un unico passaggio con una chiamata e senza costruire uno stato di digest intermedio e roundtrip non necessari. Questa funzione è un'estensione IBM EP11 alla specifica PKCS
#11 standard ed è una combinazione delle funzioni DigestInit e Digest. Consente di completare un'operazione di digestione con una singola chiamata invece di una serie di chiamate.
| Descrizione | Collega a EP11 m_DigestSingle. |
|
|---|---|---|
| Parametri |
message DigestSingleRequest {
Mechanism Mech = 1;
bytes Data = 2;
}
message DigestSingleResponse {
bytes Digest = 3;
}
|
|
| Valori restituiti | Impacchetta l'errore EP11 in message Grep11Error. |
| Descrizione |
Estensione non standard, combinazione di Questo è il metodo preferito di esecuzione di digest di testo non crittografato per le applicazioni in grado di riconoscere XCP. Funzionalmente, Se deve essere eseguito il digest di una chiave, devi utilizzare Non restituisce alcuno stato all'host, fatta eccezione per il risultato del digest. Non ci sono parametri non PKCS #11 poiché tutto viene utilizzato direttamente dalla chiamata PKCS #11. |
|---|---|
| Parametri |
CK_RV m_DigestSingle (
CK_MECHANISM_PTR mech,
CK_BYTE_PTR data, CK_ULONG datalen,
CK_BYTE_PTR digest, CK_ULONG_PTR digestlen,
destinazione_t
);
|
| Valori restituiti | Un sottoinsieme dei valori restituiti C_DigestSingle. Per ulteriori informazioni, consultare il capitolo Valori di ritorno del documento Enterprise PKCS #11 (EP11) Library structure. |
Frammenti di codice
-
Frammento di codice 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) -
Frammento di codice JavaScript
client.DigestSingle({ Mech: { Mechanism: ep11.CKM_SHA256 }, Data: Buffer.from(digestData) }, (err, response) => { callback(err, response); });
Esempi di codice
L'API GREP11 supporta i linguaggi di programmazione con le librerie gRPC. Vengono forniti due repository GitHub di esempio per testare l'API GREP11: