IコードSHA_CTXのshashにSHA1_Final(ハッシュ、& shash)を記述する場合、私はセグメンテーション違反のエラーを持っている、または別の場合には、私は255の戻り値が、私はありませんなぜ起こるのか理解する。これは簡単な例です。SHA1 OpenSSLのセグメンテーション違反
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <malloc.h>
#include <openssl/sha.h>
#include <openssl/bn.h>
#include <openssl/ec.h>
#include <openssl/obj_mac.h>
int main() {
BIGNUM *x=BN_new();
BIGNUM *y=BN_new();
BIGNUM *n=BN_new();
BIGNUM *e=BN_new();
EC_POINT *P;
BN_CTX *ctx;//Buffer
const EC_POINT *G; //Generator Point
unsigned char hash[SHA_DIGEST_LENGTH];
SHA_CTX shash;
SHA1_Init(&shash);
SHA1_Update(&shash, "abc", 3);
SHA1_Final(hash, &shash);
const EC_GROUP *curve = EC_GROUP_new_by_curve_name(NID_secp224r1);
P=EC_POINT_new(curve);
G=EC_GROUP_get0_generator(curve);
EC_GROUP_get_order(curve,n,ctx);
BN_rand_range(e,n);
EC_POINT_mul(curve,P,e,NULL,NULL,ctx);
if (!EC_POINT_is_on_curve(curve,P,ctx)) return -1;
if (!EC_POINT_get_affine_coordinates_GFp(curve, P, x, y, ctx)) return -1;
for(int i=0;i<SHA_DIGEST_LENGTH;i++)
{
printf("%02x",hash[i]);
}
return 0;
}
によってコンパイルしました。私がSHA_CTXからSHA1_Finalにコードをコメントすると、このコードは動作します。 – JLo
1.0.2と1.1.0のようなOpenSSLのそれ以降のバージョンでこれを行うための推奨される方法は、EVPインターフェイスです。 OpenSSL wikiの[EVP Message Digests](http://wiki.openssl.org/index.php/EVP_Message_Digests)も参照してください。 – jww