annotate gcc/testsuite/gcc.c-torture/compile/pr53886.c @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* PR target/53886 */
kono
parents:
diff changeset
2 typedef struct asn1_string_st ASN1_BIT_STRING;
kono
parents:
diff changeset
3 typedef struct bignum_st BIGNUM;
kono
parents:
diff changeset
4 typedef struct ec_group_st EC_GROUP;
kono
parents:
diff changeset
5 typedef struct ec_key_st EC_KEY;
kono
parents:
diff changeset
6
kono
parents:
diff changeset
7 struct ec_key_st
kono
parents:
diff changeset
8 {
kono
parents:
diff changeset
9 EC_GROUP *group;
kono
parents:
diff changeset
10 BIGNUM *priv_key;
kono
parents:
diff changeset
11 unsigned int enc_flag;
kono
parents:
diff changeset
12 }
kono
parents:
diff changeset
13 X9_62_PENTANOMIAL;
kono
parents:
diff changeset
14 typedef struct ec_privatekey_st
kono
parents:
diff changeset
15 {
kono
parents:
diff changeset
16 ASN1_BIT_STRING *publicKey;
kono
parents:
diff changeset
17 }
kono
parents:
diff changeset
18 EC_PRIVATEKEY;
kono
parents:
diff changeset
19
kono
parents:
diff changeset
20 extern EC_PRIVATEKEY* EC_PRIVATEKEY_new (void);
kono
parents:
diff changeset
21 extern void EC_PRIVATEKEY_free (EC_PRIVATEKEY*);
kono
parents:
diff changeset
22 extern unsigned char* CRYPTO_realloc (char*,int,const char*,int);
kono
parents:
diff changeset
23
kono
parents:
diff changeset
24 int
kono
parents:
diff changeset
25 i2d_ECPrivateKey (EC_KEY * a, unsigned char **out)
kono
parents:
diff changeset
26 {
kono
parents:
diff changeset
27 int ret = 0, ok = 0;
kono
parents:
diff changeset
28 unsigned char *buffer = 0;
kono
parents:
diff changeset
29 unsigned buf_len = 0, tmp_len;
kono
parents:
diff changeset
30 EC_PRIVATEKEY *priv_key = 0;
kono
parents:
diff changeset
31 if (a == 0 || a->group == 0 || a->priv_key == 0)
kono
parents:
diff changeset
32 {
kono
parents:
diff changeset
33 ERR_put_error (16, (192), ((3 | 64)),
kono
parents:
diff changeset
34 "",
kono
parents:
diff changeset
35 1234);
kono
parents:
diff changeset
36 goto err;
kono
parents:
diff changeset
37 }
kono
parents:
diff changeset
38 if ((priv_key = EC_PRIVATEKEY_new ()) == 0)
kono
parents:
diff changeset
39 {
kono
parents:
diff changeset
40 ERR_put_error (16, (192), ((1 | 64)),
kono
parents:
diff changeset
41 "",
kono
parents:
diff changeset
42 1241);
kono
parents:
diff changeset
43 goto err;
kono
parents:
diff changeset
44 }
kono
parents:
diff changeset
45 if (!(a->enc_flag & 0x002))
kono
parents:
diff changeset
46 {
kono
parents:
diff changeset
47 if (priv_key->publicKey == 0)
kono
parents:
diff changeset
48 {
kono
parents:
diff changeset
49 goto err;
kono
parents:
diff changeset
50 }
kono
parents:
diff changeset
51 if (tmp_len > buf_len)
kono
parents:
diff changeset
52 {
kono
parents:
diff changeset
53 unsigned char *tmp_buffer =
kono
parents:
diff changeset
54 CRYPTO_realloc ((char *) buffer, (int) tmp_len, "", 1293);
kono
parents:
diff changeset
55 buffer = tmp_buffer;
kono
parents:
diff changeset
56 }
kono
parents:
diff changeset
57 }
kono
parents:
diff changeset
58 if ((ret = i2d_EC_PRIVATEKEY (priv_key, out)) == 0)
kono
parents:
diff changeset
59 {
kono
parents:
diff changeset
60 }
kono
parents:
diff changeset
61 ok = 1;
kono
parents:
diff changeset
62 err:
kono
parents:
diff changeset
63 if (buffer)
kono
parents:
diff changeset
64 CRYPTO_free (buffer);
kono
parents:
diff changeset
65 if (priv_key)
kono
parents:
diff changeset
66 EC_PRIVATEKEY_free (priv_key);
kono
parents:
diff changeset
67 return (ok ? ret : 0);
kono
parents:
diff changeset
68 }