summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjob <>2023-04-26 10:34:08 +0000
committerjob <>2023-04-26 10:34:08 +0000
commit41c9f16934ae99ecfc32bd972bf7394e2dc01283 (patch)
tree82528203592cdfd5fc86a738d83d8ac5a998a3fa /src
parent1f0e06ee4a973473f7ae0f571f87db2d6c23f5dd (diff)
downloadopenbsd-41c9f16934ae99ecfc32bd972bf7394e2dc01283.tar.gz
openbsd-41c9f16934ae99ecfc32bd972bf7394e2dc01283.tar.bz2
openbsd-41c9f16934ae99ecfc32bd972bf7394e2dc01283.zip
Replace macros with functions
Requested by tb@
Diffstat (limited to 'src')
-rw-r--r--src/regress/lib/libcrypto/x509/x509_asn1.c214
1 files changed, 115 insertions, 99 deletions
diff --git a/src/regress/lib/libcrypto/x509/x509_asn1.c b/src/regress/lib/libcrypto/x509/x509_asn1.c
index e3a703bc9f..93d617a7c7 100644
--- a/src/regress/lib/libcrypto/x509/x509_asn1.c
+++ b/src/regress/lib/libcrypto/x509/x509_asn1.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: x509_asn1.c,v 1.1 2023/04/26 08:58:03 job Exp $ */ 1/* $OpenBSD: x509_asn1.c,v 1.2 2023/04/26 10:34:08 job Exp $ */
2/* 2/*
3 * Copyright (c) 2023 Job Snijders <job@openbsd.org> 3 * Copyright (c) 2023 Job Snijders <job@openbsd.org>
4 * 4 *
@@ -29,55 +29,73 @@
29#include <openssl/rsa.h> 29#include <openssl/rsa.h>
30#include <openssl/x509.h> 30#include <openssl/x509.h>
31 31
32#define SETUP() \ 32static void
33 derp = der; \ 33x509_setup(unsigned char **der, unsigned char **der2, X509 **x,
34 if ((a = d2i_X509(NULL, &derp, dersz)) == NULL) \ 34 const unsigned char **cpder, const unsigned char **cpder2, long dersz,
35 errx(1, "d2i_X509"); \ 35 long *der2sz)
36 if ((der2sz = i2d_X509(a, &der2)) <= 0) \ 36{
37 errx(1, "i2d_X509"); \ 37 *cpder = *der;
38 der2p = der2; 38 if ((*x = d2i_X509(NULL, cpder, dersz)) == NULL)
39 39 errx(1, "d2i_X509");
40#define CLEANUP() \ 40 if ((*der2sz = i2d_X509(*x, der2)) <= 0)
41 X509_free(a); \ 41 errx(1, "i2d_X509");
42 a = NULL; \ 42 *cpder2 = *der2;
43 free(der2); \ 43}
44 der2 = NULL; 44
45 45static void
46#define CLEANUPSETUP() \ 46x509_cleanup(X509 **x, unsigned char **der)
47 CLEANUP() \ 47{
48 SETUP() 48 X509_free(*x);
49 49 *x = NULL;
50#define SETX509NAME(fname, value, cert) \ 50 free(*der);
51 if ((xn = X509_NAME_new()) == NULL) \ 51 *der = NULL;
52 err(1, NULL); \ 52}
53 if (!X509_NAME_add_entry_by_txt(xn, "C", MBSTRING_ASC, \ 53
54 (const unsigned char*) value, -1, -1, 0)) \ 54static void
55 errx(1, "X509_NAME_add_entry_by_txt"); \ 55x509_set_integer(int (*f)(X509 *x, ASN1_INTEGER *ai), X509 **x, int i)
56 if (!fname(cert, xn)) \ 56{
57 errx(1, "fname"); \ 57 ASN1_INTEGER *ai;
58 X509_NAME_free(xn); \ 58
59 xn = NULL; 59 if ((ai = ASN1_INTEGER_new()) == NULL)
60 60 err(1, NULL);
61#define SETASN1TIME(fname, value, cert) \ 61 if (!ASN1_INTEGER_set(ai, i))
62 if ((at = ASN1_TIME_new()) == NULL) \ 62 errx(1, "ASN1_INTEGER_set");
63 err(1, NULL); \ 63 if (!(*f)(*x, ai))
64 if ((at = X509_gmtime_adj(NULL, value)) == NULL) \ 64 err(1, NULL);
65 errx(1, "X509_gmtime_adj"); \ 65
66 if (!fname(cert, at)) \ 66 ASN1_INTEGER_free(ai);
67 errx(1, "fname"); \ 67}
68 ASN1_TIME_free(at); \ 68
69 at = NULL; 69static void
70 70x509_set_name(int (*f)(X509 *x, X509_NAME *name), X509 **x,
71#define SETINTEGER(fname, value, cert) \ 71 const unsigned char *n)
72 if ((ai = ASN1_INTEGER_new()) == NULL) \ 72{
73 err(1, NULL); \ 73 X509_NAME *xn;
74 if (!ASN1_INTEGER_set(ai, value)) \ 74
75 errx(1, "ASN1_INTEGER_set"); \ 75 if ((xn = X509_NAME_new()) == NULL)
76 if (!fname(cert, ai)) \ 76 err(1, NULL);
77 errx(1, "fname"); \ 77 if (!X509_NAME_add_entry_by_txt(xn, "C", MBSTRING_ASC, n, -1, -1, 0))
78 ASN1_INTEGER_free(ai); \ 78 errx(1, "X509_NAME_add_entry_by_txt");
79 ai = NULL; 79 if (!(*f)(*x, xn))
80 err(1, NULL);
81
82 X509_NAME_free(xn);
83}
80 84
85static void
86x509_set_time(int (*f)(X509 *x, const ASN1_TIME *tm), X509 **x, int t)
87{
88 ASN1_TIME *at;
89
90 if ((at = ASN1_TIME_new()) == NULL)
91 err(1, NULL);
92 if ((at = X509_gmtime_adj(NULL, t)) == NULL)
93 errx(1, "X509_gmtime_adj");
94 if (!(*f)(*x, at))
95 err(1, NULL);
96
97 ASN1_TIME_free(at);
98}
81 99
82static int 100static int
83x509_compare(char *f, X509 *a, const unsigned char *der, long dersz) 101x509_compare(char *f, X509 *a, const unsigned char *der, long dersz)
@@ -105,13 +123,10 @@ x509_compare(char *f, X509 *a, const unsigned char *der, long dersz)
105int 123int
106main(void) 124main(void)
107{ 125{
108 ASN1_INTEGER *ai = NULL;
109 ASN1_TIME *at = NULL;
110 EVP_PKEY *pkey = NULL; 126 EVP_PKEY *pkey = NULL;
111 EVP_PKEY_CTX *pkey_ctx = NULL; 127 EVP_PKEY_CTX *pkey_ctx = NULL;
112 X509_NAME *xn = NULL;
113 X509 *a, *x; 128 X509 *a, *x;
114 const unsigned char *derp, *der2p; 129 const unsigned char *cpder, *cpder2;
115 unsigned char *der = NULL, *der2 = NULL; 130 unsigned char *der = NULL, *der2 = NULL;
116 long dersz, der2sz; 131 long dersz, der2sz;
117 int ret = 0; 132 int ret = 0;
@@ -130,11 +145,11 @@ main(void)
130 if (X509_set_pubkey(x, pkey) != 1) 145 if (X509_set_pubkey(x, pkey) != 1)
131 errx(1, "X509_set_pubkey"); 146 errx(1, "X509_set_pubkey");
132 147
133 SETINTEGER(X509_set_serialNumber, 1, x) 148 x509_set_integer(X509_set_serialNumber, &x, 1);
134 SETASN1TIME(X509_set_notBefore, 0, x) 149 x509_set_time(X509_set_notBefore, &x, 0);
135 SETASN1TIME(X509_set_notAfter, 60, x) 150 x509_set_time(X509_set_notAfter, &x, 60);
136 SETX509NAME(X509_set_issuer_name, "NL", x) 151 x509_set_name(X509_set_issuer_name, &x, "NL");
137 SETX509NAME(X509_set_subject_name, "BE", x) 152 x509_set_name(X509_set_subject_name, &x, "BE");
138 153
139 // one time creation of the original DER 154 // one time creation of the original DER
140 if (!X509_sign(x, pkey, EVP_sha256())) 155 if (!X509_sign(x, pkey, EVP_sha256()))
@@ -142,54 +157,55 @@ main(void)
142 if ((dersz = i2d_X509(x, &der)) <= 0) 157 if ((dersz = i2d_X509(x, &der)) <= 0)
143 errx(1, "i2d_X509"); 158 errx(1, "i2d_X509");
144 159
145 SETUP() 160 /* test X509_set_version */
146 161 x509_setup(&der, &der2, &a, &cpder, &cpder2, dersz, &der2sz);
147 // test X509_set_version
148 if (!X509_set_version(a, 2)) 162 if (!X509_set_version(a, 2))
149 errx(1, "X509_set_version"); 163 errx(1, "X509_set_version");
150 ret += x509_compare("X509_set_version", a, der2p, der2sz); 164 ret += x509_compare("X509_set_version", a, cpder2, der2sz);
151 165 x509_cleanup(&a, &der2);
152 CLEANUPSETUP() 166
153 167 /* test X509_set_serialNumber */
154 // test X509_set_serialNumber 168 x509_setup(&der, &der2, &a, &cpder, &cpder2, dersz, &der2sz);
155 SETINTEGER(X509_set_serialNumber, 2, a) 169 x509_set_integer(X509_set_serialNumber, &a, 2);
156 ret += x509_compare("X509_set_serialNumber", a, der2p, der2sz); 170 ret += x509_compare("X509_set_serialNumber", a, cpder2, der2sz);
157 171 x509_cleanup(&a, &der2);
158 CLEANUPSETUP() 172
159 173 /* test X509_set_issuer_name */
160 // test X509_set_issuer_name 174 x509_setup(&der, &der2, &a, &cpder, &cpder2, dersz, &der2sz);
161 SETX509NAME(X509_set_issuer_name, "DE", a) 175 x509_set_name(X509_set_issuer_name, &a, "DE");
162 ret += x509_compare("X509_set_issuer_name", a, der2p, der2sz); 176 ret += x509_compare("X509_set_issuer_name", a, cpder2, der2sz);
163 177 x509_cleanup(&a, &der2);
164 CLEANUPSETUP() 178
165 179 /* test X509_set_subject_name */
166 // test X509_set_subject_name 180 x509_setup(&der, &der2, &a, &cpder, &cpder2, dersz, &der2sz);
167 SETX509NAME(X509_set_subject_name, "FR", a) 181 x509_set_name(X509_set_subject_name, &a, "FR");
168 ret += x509_compare("X509_set_subject_name", a, der2p, der2sz); 182 ret += x509_compare("X509_set_subject_name", a, cpder2, der2sz);
169 183 x509_cleanup(&a, &der2);
170 CLEANUPSETUP() 184
171 185 /* test X509_set_notBefore */
172 // test X509_set_notBefore 186 x509_setup(&der, &der2, &a, &cpder, &cpder2, dersz, &der2sz);
173 SETASN1TIME(X509_set_notBefore, 120, a) 187 x509_set_time(X509_set_notBefore, &a, 120);
174 ret += x509_compare("X509_set_notBefore", a, der2p, der2sz); 188 ret += x509_compare("X509_set_notBefore", a, cpder2, der2sz);
175 189 x509_cleanup(&a, &der2);
176 CLEANUPSETUP() 190
177 191 /* test X509_set_notAfter */
178 // test X509_set_notAfter 192 x509_setup(&der, &der2, &a, &cpder, &cpder2, dersz, &der2sz);
179 SETASN1TIME(X509_set_notAfter, 180, a) 193 x509_set_time(X509_set_notAfter, &a, 180);
180 ret += x509_compare("X509_set_notAfter", a, der2p, der2sz); 194 ret += x509_compare("X509_set_notAfter", a, cpder2, der2sz);
181 195 x509_cleanup(&a, &der2);
182 CLEANUPSETUP() 196
183 197 /* test X509_set_pubkey */
184 // test X509_set_pubkey 198 x509_setup(&der, &der2, &a, &cpder, &cpder2, dersz, &der2sz);
185 if (EVP_PKEY_keygen(pkey_ctx, &pkey) <= 0) 199 if (EVP_PKEY_keygen(pkey_ctx, &pkey) <= 0)
186 errx(1, "EVP_PKEY_keygen"); 200 errx(1, "EVP_PKEY_keygen");
187 if (X509_set_pubkey(a, pkey) != 1) 201 if (X509_set_pubkey(a, pkey) != 1)
188 errx(1, "X509_set_pubkey"); 202 errx(1, "X509_set_pubkey");
189 ret += x509_compare("X509_set_pubkey", a, der2p, der2sz); 203 EVP_PKEY_CTX_free(pkey_ctx);
190 204 EVP_PKEY_free(pkey);
191 CLEANUP() 205 ret += x509_compare("X509_set_pubkey", a, cpder2, der2sz);
206 x509_cleanup(&a, &der2);
192 207
193 if (ret) 208 if (ret)
194 return 1; 209 return 1;
210 return 0;
195} 211}