2013-03-07 52 views
0

我想創建C程序,我可以從菜單中選擇哪些選項我希望從簽名消息和驗證消息。我有簽署該消息並在同一時間驗證的代碼。我想要的是能夠解析消息並簽名,並輸出證書。接下來,當我選擇驗證時,我會插入相同的消息和證書,以便實際驗證或不驗證消息。C實現的ECDSA簽名和驗證與openssl

我使用的代碼: Signing a message using ECDSA in OpenSSL

PS:基本上我不知道如何實際打印簽名,私鑰和公鑰。

非常感謝。

回答

1

使用這些功能:

int i2d_ECDSA_SIG(const ECDSA_SIG *sig, unsigned char **pp); 

ECDSA_SIG* d2i_ECDSA_SIG(ECDSA_SIG **sig, const unsigned char **pp, long len); 

作爲每OpenSSL的文檔:

「i2d_ECDSA_SIG()創建ECDSA簽名Sig的DER編碼並且將編碼簽名寫入* PP(注:如果頁是NULL i2d_ECDSA_SIG返回在DER的字節預期長度編碼簽名)。 i2d_ECDSA_SIG返回DER編碼簽名的長度(或錯誤時爲0)。

d2i_ECDSA_SIG()解碼DER編碼的ECDSA簽名,並在新分配的ECDSA_SIG結構中返回解碼的簽名。 * sig指向包含大小爲len的DER編碼簽名的緩衝區。 「

如果你想在屏幕上打印簽名比你將不得不Base64它:)

0

我想我找到了打印r和s值的方法。從簽名密鑰對(R,S)

後,我們有簽名它的自我:

ECDSA_SIG *signature = ECDSA_do_sign(hash, strlen(hash), eckey); 

我們可以打印R和S值是這樣的:

printf("(sig->r, sig->s): (%s,%s)\n", BN_bn2hex(signature->r), BN_bn2hex(signature->s)); 

感謝 最好的問候