跳轉到內容

OpenSSL/EC GROUP new

來自華夏公益教科書,自由的教科書

庫中包含兩種形式的橢圓曲線,它們值得關注。第一種形式是在素數域 Fp 上定義的。Fp 的元素是 0 到 p-1 之間的整數,其中 p 是素數。這將為我們提供以下修正後的橢圓曲線方程

y^2 mod p = x^3 +ax + b mod p

第二種形式是在二進位制域 F2^m 上定義的,其中域的元素是長度最多為 m 位的整數。對於這種形式,橢圓曲線方程被修改為

y^2 + xy = x^3 + ax^2 + b (where b != 0)

可以使用 EC_GROUP_new 建立一個新的曲線,使用由傳遞的 EC_METHOD 引數提供的實現(參見 EC_GFp_simple_method)。然後,需要呼叫 EC_GROUP_set_curve_GFp 或 EC_GROUP_set_curve_GF2m(視情況而定)來建立一個分別在 Fp 上或在 F2^m 上定義的曲線。

EC_GROUP_set_curve_GFp 為儲存在 group 中的 Fp 上的曲線設定曲線引數 pab。EC_group_get_curve_GFp 獲取先前設定的曲線引數。

EC_GROUP_set_curve_GF2m 為 F2^m 上的曲線設定等效的曲線引數。在這種情況下,p = 2^m。EC_group_get_curve_GF2m 獲取先前設定的曲線引數。

函式 EC_GROUP_new_curve_GFp 和 EC_GROUP_new_curve_GF2m 是呼叫 EC_GROUP_new 和相應的 EC_group_set_curve 函式的快捷方式。將使用適當的預設實現方法。

雖然可以使用上述函式來建立任何曲線,但庫中也提供了一些預定義的曲線。要獲取所有預定義曲線的列表,請呼叫函式 EC_get_builtin_curves。引數 r 應為大小為 nitems 的 EC_builtin_curve 結構陣列。該函式將用有關內建曲線的的資訊填充 r 陣列。如果 nitems 小於可用的曲線總數,則將返回前 nitems 條曲線。否則,將提供曲線總數。返回值是可用的曲線總數(無論該數字是否已填充到 r 中)。傳遞一個 NULL r 或將 nitems 設定為 0 除了返回可用的曲線總數之外不會做任何事情。EC_builtin_curve 結構的定義如下

typedef struct { 
       int nid;
       const char *comment;
       } EC_builtin_curve;

每個 EC_builtin_curve 項都有一個唯一的整數 id (nid) 和一個描述曲線的可讀註釋字串。

要構建一個內建曲線,請使用函式 EC_GROUP_new_by_curve_name 並提供要構建的曲線的 nid

EC_GROUP_free 釋放與 EC_GROUP 關聯的記憶體。

EC_GROUP_clear_free 銷燬 EC_GROUP 中儲存的任何敏感資料,然後釋放其記憶體。

返回值

[編輯 | 編輯原始碼]

所有 EC_GROUP_new* 函式都會返回一個指向新構造的組的指標,或者在發生錯誤時返回 NULL。

EC_get_builtin_curves 返回可用的內建曲線數量。

EC_GROUP_set_curve_GFp、EC_GROUP_get_curve_GFp、EC_GROUP_set_curve_GF2m、EC_GROUP_get_curve_GF2m 在成功時返回 1,在發生錯誤時返回 0。

華夏公益教科書