52082


研究でC言語のプログラムを書いています。  
研究内容は長くなるので省きますが、[TEPLA](http://www.cipher.risk.tsukuba.ac.jp/tepla/index.html)という暗号計算ライブラリを用いて楕円曲線上で鍵生成をするプログラムを作成しました。  
Cygwin上のgccでコンパイルは通りexeファイルも生成されているのですが、実行するとタイトル通りSegmentation fault
(コアダンプ)が出ます。

原因を探ろうとソースコードを小分けにして実行したところ、keygen.c内のgrxやgを使用した関数で止まっているようです。しかし、解決法が分からない(なぜここで止まるのかがわからない)ので考えられる問題点や解決法を教えていただけると幸いです。

以下にソースコードを記載します。  
長くなって申し訳ありませんが、よろしくおねがいします。

integrated.h

[code]

    #pragma once
    
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<time.h>
    #include<tepla/ec.h>
    
    //Path for various files
    #define KEYPATH "slot/publickey.txt"
    
    //Define global variables
    EC_PAIRING p;
    EC_POINT g;
    EC_POINT publickey;
    gmp_randstate_t state;
    mpz_t grx;
    
    //Define external function
    //extern void keygen();
    
    void Init_tepla();
    
    //To initialize tepla
    void Init_tepla()
    {
        printf("Initialize tepla\n");
        pairing_init(p, "ECBN254a");
        point_init(g, p->g1);
        point_random(g);
    
        mpz_init(grx);
        gmp_randinit_default(state);
        gmp_randseed_ui(state, (unsigned)time(NULL));
        mpz_urandomb(grx, state, 64);
    }
    
[/code]

main.c

[code]

    //Define external function
    extern void keygen();
    
    int main()
    {
        keygen();
    
        return 0;
    }
    
[/code]

keygen.c

[code]

    #include"integrated.h"
    
    void keygen()
    {
        FILE *fp;
        mpz_t x;
        int size;
    
        fp = fopen(KEYPATH, "w");
    
        Init_tepla();
    
        printf("Try to make keys.\n");
        mpz_set(x, grx);     //Aborted
        point_mul(publickey, x, g);    //Core dump
    
        size = point_get_str_length(publickey);
        char *strkey = (char*)malloc(sizeof(char)*size);
        point_get_str(strkey, publickey);     //Core dump
    
        printf("Make keys!\nSave public key to %s\n", KEYPATH);
        fputs(strkey, fp);
        free(strkey);
        fclose(fp);
    }
    
[/code]


CC BY-SA 4.0
2019-01-18T01:40:38.737
52064
2019-01-18T11:37:01.533
2019-01-18T03:32:59.677
31611
31611
question
c gcc cygwin
Segmentation fault(コアダンプ)エラーについて


質問投稿者です。

コメントにもあるように、publickeyの初期化を行うことでSegmentation faultを吐かなくなりました。  
ありがとございました！


CC BY-SA 4.0
2019-01-18T11:37:01.533
52082
2019-01-18T11:37:01.533
31611
52064
answer