summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorkn <>2022-07-16 18:36:36 +0000
committerkn <>2022-07-16 18:36:36 +0000
commit60a538c90ce96e2672ca0034b69a459f023f95f0 (patch)
tree5fba541b9e26fb4b3428ec48f9eef4b804130d4c /src
parentb0feed9914f2dcfff56098c2e8a5cb96bdb41abd (diff)
downloadopenbsd-60a538c90ce96e2672ca0034b69a459f023f95f0.tar.gz
openbsd-60a538c90ce96e2672ca0034b69a459f023f95f0.tar.bz2
openbsd-60a538c90ce96e2672ca0034b69a459f023f95f0.zip
Add ESSCertIDv2 ASN.1 boilerplate
Guard the new code under LIBRESSL_INTERNAL to defer symbol addition and minor library bump (thanks tb). ts/ts.h bits from RFC 5035 Enhanced Security Services (ESS) Update: Adding CertID Algorithm Agility ts/ts_asn1.c bits expanded from ASN1_SEQUENCE(ESS_CERT_ID_V2) = { ASN1_OPT(ESS_CERT_ID_V2, hash_alg, X509_ALGOR), ASN1_SIMPLE(ESS_CERT_ID_V2, hash, ASN1_OCTET_STRING), ASN1_OPT(ESS_CERT_ID_V2, issuer_serial, ESS_ISSUER_SERIAL) } static_ASN1_SEQUENCE_END(ESS_CERT_ID_V2) IMPLEMENT_ASN1_FUNCTIONS_const(ESS_CERT_ID_V2) IMPLEMENT_ASN1_DUP_FUNCTION(ESS_CERT_ID_V2) ASN1_SEQUENCE(ESS_SIGNING_CERT_V2) = { ASN1_SEQUENCE_OF(ESS_SIGNING_CERT_V2, cert_ids, ESS_CERT_ID_V2), ASN1_SEQUENCE_OF_OPT(ESS_SIGNING_CERT_V2, policy_info, POLICYINFO) } static_ASN1_SEQUENCE_END(ESS_SIGNING_CERT_V2) IMPLEMENT_ASN1_FUNCTIONS_const(ESS_SIGNING_CERT_V2) IMPLEMENT_ASN1_DUP_FUNCTION(ESS_SIGNING_CERT_V2) Feedback OK tb
Diffstat (limited to 'src')
-rw-r--r--src/lib/libcrypto/ts/ts.h47
-rw-r--r--src/lib/libcrypto/ts/ts_asn1.c125
2 files changed, 170 insertions, 2 deletions
diff --git a/src/lib/libcrypto/ts/ts.h b/src/lib/libcrypto/ts/ts.h
index b2fe32bf77..6d4b2dd3a6 100644
--- a/src/lib/libcrypto/ts/ts.h
+++ b/src/lib/libcrypto/ts/ts.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: ts.h,v 1.12 2022/07/16 15:02:29 kn Exp $ */ 1/* $OpenBSD: ts.h,v 1.13 2022/07/16 18:36:36 kn Exp $ */
2/* Written by Zoltan Glozik (zglozik@opentsa.org) for the OpenSSL 2/* Written by Zoltan Glozik (zglozik@opentsa.org) for the OpenSSL
3 * project 2002, 2003, 2004. 3 * project 2002, 2003, 2004.
4 */ 4 */
@@ -264,6 +264,34 @@ typedef struct ESS_signing_cert {
264 STACK_OF(POLICYINFO) *policy_info; 264 STACK_OF(POLICYINFO) *policy_info;
265} ESS_SIGNING_CERT; 265} ESS_SIGNING_CERT;
266 266
267#ifdef LIBRESSL_INTERNAL
268/*
269 * ESSCertIDv2 ::= SEQUENCE {
270 * hashAlgorithm AlgorithmIdentifier
271 * DEFAULT {algorithm id-sha256},
272 * certHash Hash,
273 * issuerSerial IssuerSerial OPTIONAL }
274 */
275
276typedef struct ESS_cert_id_v2 {
277 X509_ALGOR *hash_alg; /* Default SHA-256. */
278 ASN1_OCTET_STRING *hash;
279 ESS_ISSUER_SERIAL *issuer_serial;
280} ESS_CERT_ID_V2;
281
282DECLARE_STACK_OF(ESS_CERT_ID_V2)
283
284/*
285 * SigningCertificateV2 ::= SEQUENCE {
286 * certs SEQUENCE OF ESSCertIDv2,
287 * policies SEQUENCE OF PolicyInformation OPTIONAL }
288 */
289
290typedef struct ESS_signing_cert_v2 {
291 STACK_OF(ESS_CERT_ID_V2) *cert_ids;
292 STACK_OF(POLICYINFO) *policy_info;
293} ESS_SIGNING_CERT_V2;
294#endif /* LIBRESSL_INTERNAL */
267 295
268TS_REQ *TS_REQ_new(void); 296TS_REQ *TS_REQ_new(void);
269void TS_REQ_free(TS_REQ *a); 297void TS_REQ_free(TS_REQ *a);
@@ -351,6 +379,23 @@ ESS_SIGNING_CERT *d2i_ESS_SIGNING_CERT(ESS_SIGNING_CERT **a,
351 const unsigned char **pp, long length); 379 const unsigned char **pp, long length);
352ESS_SIGNING_CERT *ESS_SIGNING_CERT_dup(ESS_SIGNING_CERT *a); 380ESS_SIGNING_CERT *ESS_SIGNING_CERT_dup(ESS_SIGNING_CERT *a);
353 381
382#ifdef LIBRESSL_INTERNAL
383ESS_CERT_ID_V2 *ESS_CERT_ID_V2_new(void);
384void ESS_CERT_ID_V2_free(ESS_CERT_ID_V2 *a);
385int i2d_ESS_CERT_ID_V2(const ESS_CERT_ID_V2 *a, unsigned char **pp);
386ESS_CERT_ID_V2 *d2i_ESS_CERT_ID_V2(ESS_CERT_ID_V2 **a, const unsigned char **pp,
387 long length);
388ESS_CERT_ID_V2 *ESS_CERT_ID_V2_dup(ESS_CERT_ID_V2 *a);
389
390ESS_SIGNING_CERT_V2 *ESS_SIGNING_CERT_V2_new(void);
391void ESS_SIGNING_CERT_V2_free(ESS_SIGNING_CERT_V2 *a);
392int i2d_ESS_SIGNING_CERT_V2(const ESS_SIGNING_CERT_V2 *a,
393 unsigned char **pp);
394ESS_SIGNING_CERT_V2 *d2i_ESS_SIGNING_CERT_V2(ESS_SIGNING_CERT_V2 **a,
395 const unsigned char **pp, long length);
396ESS_SIGNING_CERT_V2 *ESS_SIGNING_CERT_V2_dup(ESS_SIGNING_CERT_V2 *a);
397#endif /* LIBRESSL_INTERNAL */
398
354int TS_REQ_set_version(TS_REQ *a, long version); 399int TS_REQ_set_version(TS_REQ *a, long version);
355long TS_REQ_get_version(const TS_REQ *a); 400long TS_REQ_get_version(const TS_REQ *a);
356 401
diff --git a/src/lib/libcrypto/ts/ts_asn1.c b/src/lib/libcrypto/ts/ts_asn1.c
index bc89f1368a..c4316d13f8 100644
--- a/src/lib/libcrypto/ts/ts_asn1.c
+++ b/src/lib/libcrypto/ts/ts_asn1.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ts_asn1.c,v 1.11 2017/01/29 17:49:23 beck Exp $ */ 1/* $OpenBSD: ts_asn1.c,v 1.12 2022/07/16 18:36:36 kn Exp $ */
2/* Written by Nils Larsch for the OpenSSL project 2004. 2/* Written by Nils Larsch for the OpenSSL project 2004.
3 */ 3 */
4/* ==================================================================== 4/* ====================================================================
@@ -846,6 +846,129 @@ ESS_SIGNING_CERT_dup(ESS_SIGNING_CERT *x)
846 return ASN1_item_dup(&ESS_SIGNING_CERT_it, x); 846 return ASN1_item_dup(&ESS_SIGNING_CERT_it, x);
847} 847}
848 848
849static const ASN1_TEMPLATE ESS_CERT_ID_V2_seq_tt[] = {
850 {
851 .flags = ASN1_TFLG_OPTIONAL,
852 .tag = 0,
853 .offset = offsetof(ESS_CERT_ID_V2, hash_alg),
854 .field_name = "hash_alg",
855 .item = &X509_ALGOR_it,
856 },
857 {
858 .flags = 0,
859 .tag = 0,
860 .offset = offsetof(ESS_CERT_ID_V2, hash),
861 .field_name = "hash",
862 .item = &ASN1_OCTET_STRING_it,
863 },
864 {
865 .flags = ASN1_TFLG_OPTIONAL,
866 .tag = 0,
867 .offset = offsetof(ESS_CERT_ID_V2, issuer_serial),
868 .field_name = "issuer_serial",
869 .item = &ESS_ISSUER_SERIAL_it,
870 },
871};
872
873static const ASN1_ITEM ESS_CERT_ID_V2_it = {
874 .itype = ASN1_ITYPE_SEQUENCE,
875 .utype = V_ASN1_SEQUENCE,
876 .templates = ESS_CERT_ID_V2_seq_tt,
877 .tcount = sizeof(ESS_CERT_ID_V2_seq_tt) / sizeof(ASN1_TEMPLATE),
878 .funcs = NULL,
879 .size = sizeof(ESS_CERT_ID_V2),
880 .sname = "ESS_CERT_ID_V2",
881};
882
883ESS_CERT_ID_V2 *
884d2i_ESS_CERT_ID_V2(ESS_CERT_ID_V2 **a, const unsigned char **in, long len)
885{
886 return (ESS_CERT_ID_V2 *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
887 &ESS_CERT_ID_V2_it);
888}
889
890int
891i2d_ESS_CERT_ID_V2(const ESS_CERT_ID_V2 *a, unsigned char **out)
892{
893 return ASN1_item_i2d((ASN1_VALUE *)a, out, &ESS_CERT_ID_V2_it);
894}
895
896ESS_CERT_ID_V2 *
897ESS_CERT_ID_V2_new(void)
898{
899 return (ESS_CERT_ID_V2 *)ASN1_item_new(&ESS_CERT_ID_V2_it);
900}
901
902void
903ESS_CERT_ID_V2_free(ESS_CERT_ID_V2 *a)
904{
905 ASN1_item_free((ASN1_VALUE *)a, &ESS_CERT_ID_V2_it);
906}
907
908ESS_CERT_ID_V2 *
909ESS_CERT_ID_V2_dup(ESS_CERT_ID_V2 *x)
910{
911 return ASN1_item_dup(&ESS_CERT_ID_V2_it, x);
912}
913
914static const ASN1_TEMPLATE ESS_SIGNING_CERT_V2_seq_tt[] = {
915 {
916 .flags = ASN1_TFLG_SEQUENCE_OF,
917 .tag = 0,
918 .offset = offsetof(ESS_SIGNING_CERT_V2, cert_ids),
919 .field_name = "cert_ids",
920 .item = &ESS_CERT_ID_V2_it,
921 },
922 {
923 .flags = ASN1_TFLG_SEQUENCE_OF | ASN1_TFLG_OPTIONAL,
924 .tag = 0,
925 .offset = offsetof(ESS_SIGNING_CERT_V2, policy_info),
926 .field_name = "policy_info",
927 .item = &POLICYINFO_it,
928 },
929};
930
931static const ASN1_ITEM ESS_SIGNING_CERT_V2_it = {
932 .itype = ASN1_ITYPE_SEQUENCE,
933 .utype = V_ASN1_SEQUENCE,
934 .templates = ESS_SIGNING_CERT_V2_seq_tt,
935 .tcount = sizeof(ESS_SIGNING_CERT_V2_seq_tt) / sizeof(ASN1_TEMPLATE),
936 .funcs = NULL,
937 .size = sizeof(ESS_SIGNING_CERT_V2),
938 .sname = "ESS_SIGNING_CERT_V2",
939};
940
941ESS_SIGNING_CERT_V2 *
942d2i_ESS_SIGNING_CERT_V2(ESS_SIGNING_CERT_V2 **a, const unsigned char **in, long len)
943{
944 return (ESS_SIGNING_CERT_V2 *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
945 &ESS_SIGNING_CERT_V2_it);
946}
947
948int
949i2d_ESS_SIGNING_CERT_V2(const ESS_SIGNING_CERT_V2 *a, unsigned char **out)
950{
951 return ASN1_item_i2d((ASN1_VALUE *)a, out, &ESS_SIGNING_CERT_V2_it);
952}
953
954ESS_SIGNING_CERT_V2 *
955ESS_SIGNING_CERT_V2_new(void)
956{
957 return (ESS_SIGNING_CERT_V2 *)ASN1_item_new(&ESS_SIGNING_CERT_V2_it);
958}
959
960void
961ESS_SIGNING_CERT_V2_free(ESS_SIGNING_CERT_V2 *a)
962{
963 ASN1_item_free((ASN1_VALUE *)a, &ESS_SIGNING_CERT_V2_it);
964}
965
966ESS_SIGNING_CERT_V2 *
967ESS_SIGNING_CERT_V2_dup(ESS_SIGNING_CERT_V2 *x)
968{
969 return ASN1_item_dup(&ESS_SIGNING_CERT_V2_it, x);
970}
971
849/* Getting encapsulated TS_TST_INFO object from PKCS7. */ 972/* Getting encapsulated TS_TST_INFO object from PKCS7. */
850TS_TST_INFO * 973TS_TST_INFO *
851PKCS7_to_TS_TST_INFO(PKCS7 *token) 974PKCS7_to_TS_TST_INFO(PKCS7 *token)