使用DSA证书签署数组的内容

时间:2012-06-07 07:14:49

标签: c security certificate

我从来没有这样做过,所以我需要基础知识(以及在哪里找到这些库)。

  • 我有一个char数组(二进制,可能包含NULL值)。
  • 我有一个带有证书的PEM文件(打开密钥和私钥)。这些是用JAVA的'keytool'创建的。
  • 我已将开放密钥发送给收件人

现在该怎么办?如何使用证书和驻留在keystore.jks中的私钥来签署我的字节数组?

我能用普通的C做到这一点吗? 我必须自动签署很多这些数组。所以我的心理问题是,密码不是很秘密,因为我的软件必须知道它?

感谢您提供任何帮助,或者将我推送到正确的网站,该网站可以解答我所有初学者的问题。

EDITH:

现在我可以更多地指出我的问题:我知道,如何使用openssl在命令行上签署我的消息:

openssl dgst -dss1 -sign privkey.pem -out message.txt.sha1 message.txt

我需要的是一个C-Functioncall(我的遗留操作系统和大量包含的内容我得到了crypto.lib和ssl.lib(版本0.9.8h)),类似于

openssl(&my_signature, &my_signatureLen, my_message, my_messageLen, "dgst", "-dss1", "-sign", my_privkey_pem_file, my_privkey_pem_password);

将sha1-signature存储到ByteArray my_signature中。谁能把我推到正确的头文件?

由于

EDTH 2:

我离目标更近了一步,但现在我没有得到任何错误,但签名结果为0长

#include "../include/openssl/dsa.h"
#include "../include/openssl/pem.h"
#include "../include/openssl/evp.h"
#include "../include/openssl/err.h"


    ERR_load_crypto_strings();
    OpenSSL_add_all_algorithms();
--> here any more initialization I miss?

    short fehler = 0;
    FILE *fp = fopen("u:\\keys\\privkey.pem", "rb"); //unsecure
    if (fp) {
      DSA *dsa = PEM_read_DSAPrivateKey(fp, NULL, NULL, "password"); //unsecure
--> here anything more to do with the dsa-structure?!?
      if (dsa) {
--> here I am, so i cannot be so wrong
        fehler = !DSA_sign(0, data, dataLen, signatur, &signaturLen, dsa);
        if (fehler) {
--> error:0A070064:dsa routines:DSA_do_sign:data too large for key size
          ps("ERROR: no signing");
          ps(ERR_error_string(ERR_get_error(), buf));
        }

        DSA_free(dsa);
      } else {
        ps("ERROR: no dsa");
        ps(ERR_error_string(ERR_get_error(), buf));
      }

      fclose (fp);
    } else {
      ps("ERROR: File not open");
    }

    EVP_cleanup();
    ERR_free_strings();

0 个答案:

没有答案