非對稱簽名演算法定義

struct sig_alg

通用公鑰簽名演算法

定義:

struct sig_alg {
    int (*sign)(struct crypto_sig *tfm,const void *src, unsigned int slen, void *dst, unsigned int dlen);
    int (*verify)(struct crypto_sig *tfm,const void *src, unsigned int slen, const void *digest, unsigned int dlen);
    int (*set_pub_key)(struct crypto_sig *tfm, const void *key, unsigned int keylen);
    int (*set_priv_key)(struct crypto_sig *tfm, const void *key, unsigned int keylen);
    unsigned int (*key_size)(struct crypto_sig *tfm);
    unsigned int (*digest_size)(struct crypto_sig *tfm);
    unsigned int (*max_size)(struct crypto_sig *tfm);
    int (*init)(struct crypto_sig *tfm);
    void (*exit)(struct crypto_sig *tfm);
    struct crypto_alg base;
};

成員

sign

函式執行公鑰演算法定義的簽名操作。 成功時,返回簽名大小。 可選。

verify

函式執行公鑰演算法定義的完整驗證操作,返回驗證狀態。 可選。

set_pub_key

函式呼叫演算法特定的設定公鑰函式,該函式知道如何解碼和解釋 BER 編碼的公鑰和引數。 必需。

set_priv_key

函式呼叫演算法特定的設定私鑰函式,該函式知道如何解碼和解釋 BER 編碼的私鑰和引數。 可選。

key_size

函式返回金鑰大小。 必需。

digest_size

函式返回最大摘要大小。 可選。

max_size

函式返回最大簽名大小。 可選。

init

初始化加密轉換物件。 此函式用於初始化加密轉換物件。 此函式僅在例項化時呼叫一次,就在分配轉換上下文之後。 如果加密硬體有一些特殊的軟體處理要求,則此函式應檢查轉換的精確要求並將任何軟體回退到位。

exit

取消初始化加密轉換物件。 這是 init 的對應項,用於刪除在 init 中設定的各種更改。

base

通用加密 API 演算法資料結構

非對稱簽名 API

公鑰簽名 API 與 CRYPTO_ALG_TYPE_SIG 型別的演算法一起使用(在 /proc/crypto 中列為“sig”型別)

struct crypto_sig *crypto_alloc_sig(const char *alg_name, u32 type, u32 mask)

分配簽名 tfm 控制代碼

引數

const char *alg_name

是簽名演算法的 cra_name / 名稱或 cra_driver_name / 驅動程式名稱,例如“ecdsa”

u32 type

指定演算法的型別

u32 mask

指定演算法的掩碼

描述

為公鑰簽名演算法分配控制代碼。 返回的 struct crypto_sig 是簽名操作的任何後續 API 呼叫所需的控制代碼。

返回

成功時分配的控制代碼; 如果發生錯誤,則 IS_ERR() 為真,PTR_ERR() 返回錯誤程式碼。

如果是錯誤,PTR_ERR() 會返回錯誤程式碼。

void crypto_free_sig(struct crypto_sig *tfm)

釋放簽名 tfm 控制代碼

引數

struct crypto_sig *tfm

使用 crypto_alloc_sig() 分配的簽名 tfm 控制代碼

描述

如果 tfm 是 NULL 或錯誤指標,則此函式不執行任何操作。

unsigned int crypto_sig_keysize(struct crypto_sig *tfm)

獲取金鑰大小

引數

struct crypto_sig *tfm

使用 crypto_alloc_sig() 分配的簽名 tfm 控制代碼

描述

函式返回金鑰大小(以位為單位)。 函式假定金鑰已在轉換中設定。 如果在沒有設定金鑰或設定金鑰失敗的情況下呼叫此函式,則最終可能會出現 NULL 解引用。

unsigned int crypto_sig_digestsize(struct crypto_sig *tfm)

獲取最大摘要大小

引數

struct crypto_sig *tfm

使用 crypto_alloc_sig() 分配的簽名 tfm 控制代碼

描述

函式返回最大摘要大小(以位元組為單位)。 函式假定金鑰已在轉換中設定。 如果在沒有設定金鑰或設定金鑰失敗的情況下呼叫此函式,則最終可能會出現 NULL 解引用。

unsigned int crypto_sig_maxsize(struct crypto_sig *tfm)

獲取最大簽名大小

引數

struct crypto_sig *tfm

使用 crypto_alloc_sig() 分配的簽名 tfm 控制代碼

描述

函式返回最大簽名大小(以位元組為單位)。 函式假定金鑰已在轉換中設定。 如果在沒有設定金鑰或設定金鑰失敗的情況下呼叫此函式,則最終可能會出現 NULL 解引用。

int crypto_sig_sign(struct crypto_sig *tfm, const void *src, unsigned int slen, void *dst, unsigned int dlen)

呼叫簽名操作

引數

struct crypto_sig *tfm

使用 crypto_alloc_sig() 分配的簽名 tfm 控制代碼

const void *src

源緩衝區

unsigned int slen

源長度

void *dst

目標緩衝區

unsigned int dlen

目標長度

描述

函式呼叫給定演算法的特定簽名操作

返回

成功時返回簽名大小; 錯誤時返回錯誤程式碼

int crypto_sig_verify(struct crypto_sig *tfm, const void *src, unsigned int slen, const void *digest, unsigned int dlen)

呼叫簽名驗證

引數

struct crypto_sig *tfm

使用 crypto_alloc_sig() 分配的簽名 tfm 控制代碼

const void *src

源緩衝區

unsigned int slen

源長度

const void *digest

摘要

unsigned int dlen

摘要長度

描述

函式呼叫給定演算法的特定簽名驗證操作。

返回

驗證成功時返回零; 錯誤時返回錯誤程式碼。

int crypto_sig_set_pubkey(struct crypto_sig *tfm, const void *key, unsigned int keylen)

呼叫設定公鑰操作

引數

struct crypto_sig *tfm

tfm 控制代碼

const void *key

BER 編碼的公鑰、演算法 OID、引數長度、BER 編碼的引數

unsigned int keylen

金鑰的長度(不包括其他資料)

描述

函式呼叫演算法特定的設定金鑰函式,該函式知道如何解碼和解釋編碼的金鑰和引數

返回

成功時返回零; 錯誤時返回錯誤程式碼

int crypto_sig_set_privkey(struct crypto_sig *tfm, const void *key, unsigned int keylen)

呼叫設定私鑰操作

引數

struct crypto_sig *tfm

tfm 控制代碼

const void *key

BER 編碼的私鑰、演算法 OID、引數長度、BER 編碼的引數

unsigned int keylen

金鑰的長度(不包括其他資料)

描述

函式呼叫演算法特定的設定金鑰函式,該函式知道如何解碼和解釋編碼的金鑰和引數

返回

成功時返回零; 錯誤時返回錯誤程式碼