openssl 3.2.1 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +180 -29
  3. data/History.md +76 -0
  4. data/README.md +11 -7
  5. data/ext/openssl/extconf.rb +7 -9
  6. data/ext/openssl/openssl_missing.c +1 -1
  7. data/ext/openssl/openssl_missing.h +1 -1
  8. data/ext/openssl/ossl.c +7 -9
  9. data/ext/openssl/ossl.h +12 -8
  10. data/ext/openssl/ossl_asn1.c +46 -237
  11. data/ext/openssl/ossl_asn1.h +1 -19
  12. data/ext/openssl/ossl_bio.c +1 -1
  13. data/ext/openssl/ossl_bio.h +1 -1
  14. data/ext/openssl/ossl_bn.c +12 -12
  15. data/ext/openssl/ossl_bn.h +1 -2
  16. data/ext/openssl/ossl_cipher.c +5 -5
  17. data/ext/openssl/ossl_cipher.h +1 -4
  18. data/ext/openssl/ossl_config.c +10 -9
  19. data/ext/openssl/ossl_config.h +1 -1
  20. data/ext/openssl/ossl_digest.c +39 -21
  21. data/ext/openssl/ossl_digest.h +1 -4
  22. data/ext/openssl/ossl_engine.c +3 -3
  23. data/ext/openssl/ossl_engine.h +1 -4
  24. data/ext/openssl/ossl_hmac.c +3 -3
  25. data/ext/openssl/ossl_hmac.h +1 -4
  26. data/ext/openssl/ossl_kdf.c +5 -5
  27. data/ext/openssl/ossl_ns_spki.c +8 -8
  28. data/ext/openssl/ossl_ns_spki.h +1 -5
  29. data/ext/openssl/ossl_ocsp.c +8 -8
  30. data/ext/openssl/ossl_ocsp.h +1 -8
  31. data/ext/openssl/ossl_pkcs12.c +54 -3
  32. data/ext/openssl/ossl_pkcs12.h +1 -4
  33. data/ext/openssl/ossl_pkcs7.c +68 -21
  34. data/ext/openssl/ossl_pkcs7.h +2 -22
  35. data/ext/openssl/ossl_pkey.c +1 -1
  36. data/ext/openssl/ossl_pkey.h +3 -14
  37. data/ext/openssl/ossl_pkey_dh.c +2 -2
  38. data/ext/openssl/ossl_pkey_dsa.c +2 -2
  39. data/ext/openssl/ossl_pkey_ec.c +6 -6
  40. data/ext/openssl/ossl_pkey_rsa.c +2 -2
  41. data/ext/openssl/ossl_provider.c +1 -1
  42. data/ext/openssl/ossl_rand.c +3 -3
  43. data/ext/openssl/ossl_rand.h +1 -4
  44. data/ext/openssl/ossl_ssl.c +71 -52
  45. data/ext/openssl/ossl_ssl.h +1 -1
  46. data/ext/openssl/ossl_ts.c +73 -15
  47. data/ext/openssl/ossl_ts.h +1 -1
  48. data/ext/openssl/ossl_x509.c +1 -1
  49. data/ext/openssl/ossl_x509.h +1 -20
  50. data/ext/openssl/ossl_x509attr.c +25 -26
  51. data/ext/openssl/ossl_x509cert.c +42 -3
  52. data/ext/openssl/ossl_x509crl.c +8 -4
  53. data/ext/openssl/ossl_x509ext.c +3 -3
  54. data/ext/openssl/ossl_x509name.c +3 -3
  55. data/ext/openssl/ossl_x509req.c +8 -4
  56. data/ext/openssl/ossl_x509revoked.c +2 -2
  57. data/ext/openssl/ossl_x509store.c +16 -11
  58. data/lib/openssl/asn1.rb +188 -0
  59. data/lib/openssl/bn.rb +1 -1
  60. data/lib/openssl/buffering.rb +13 -3
  61. data/lib/openssl/cipher.rb +1 -1
  62. data/lib/openssl/digest.rb +1 -1
  63. data/lib/openssl/marshal.rb +1 -1
  64. data/lib/openssl/ssl.rb +67 -4
  65. data/lib/openssl/version.rb +1 -1
  66. data/lib/openssl/x509.rb +1 -1
  67. data/lib/openssl.rb +2 -1
  68. metadata +5 -3
  69. /data/{LICENSE.txt → COPYING} +0 -0
@@ -5,13 +5,12 @@
5
5
  */
6
6
  /*
7
7
  * This program is licensed under the same licence as Ruby.
8
- * (See the file 'LICENCE'.)
8
+ * (See the file 'COPYING'.)
9
9
  */
10
10
  #include "ossl.h"
11
11
 
12
12
  static VALUE ossl_asn1_decode0(unsigned char **pp, long length, long *offset,
13
13
  int depth, int yield, long *num_read);
14
- static VALUE ossl_asn1_initialize(int argc, VALUE *argv, VALUE self);
15
14
 
16
15
  /*
17
16
  * DATE conversion
@@ -158,38 +157,33 @@ asn1integer_to_num_i(VALUE arg)
158
157
  #define ossl_asn1_get_tag_class(o) rb_attr_get((o),sivTAG_CLASS)
159
158
  #define ossl_asn1_get_indefinite_length(o) rb_attr_get((o),sivINDEFINITE_LENGTH)
160
159
 
161
- #define ossl_asn1_set_value(o,v) rb_ivar_set((o),sivVALUE,(v))
162
- #define ossl_asn1_set_tag(o,v) rb_ivar_set((o),sivTAG,(v))
163
- #define ossl_asn1_set_tagging(o,v) rb_ivar_set((o),sivTAGGING,(v))
164
- #define ossl_asn1_set_tag_class(o,v) rb_ivar_set((o),sivTAG_CLASS,(v))
165
160
  #define ossl_asn1_set_indefinite_length(o,v) rb_ivar_set((o),sivINDEFINITE_LENGTH,(v))
166
161
 
167
162
  VALUE mASN1;
168
163
  VALUE eASN1Error;
169
164
 
170
165
  VALUE cASN1Data;
171
- VALUE cASN1Primitive;
172
- VALUE cASN1Constructive;
173
-
174
- VALUE cASN1EndOfContent;
175
- VALUE cASN1Boolean; /* BOOLEAN */
176
- VALUE cASN1Integer, cASN1Enumerated; /* INTEGER */
177
- VALUE cASN1BitString; /* BIT STRING */
178
- VALUE cASN1OctetString, cASN1UTF8String; /* STRINGs */
179
- VALUE cASN1NumericString, cASN1PrintableString;
180
- VALUE cASN1T61String, cASN1VideotexString;
181
- VALUE cASN1IA5String, cASN1GraphicString;
182
- VALUE cASN1ISO64String, cASN1GeneralString;
183
- VALUE cASN1UniversalString, cASN1BMPString;
184
- VALUE cASN1Null; /* NULL */
185
- VALUE cASN1ObjectId; /* OBJECT IDENTIFIER */
186
- VALUE cASN1UTCTime, cASN1GeneralizedTime; /* TIME */
187
- VALUE cASN1Sequence, cASN1Set; /* CONSTRUCTIVE */
166
+ static VALUE cASN1Primitive;
167
+ static VALUE cASN1Constructive;
168
+
169
+ static VALUE cASN1EndOfContent;
170
+ static VALUE cASN1Boolean; /* BOOLEAN */
171
+ static VALUE cASN1Integer, cASN1Enumerated; /* INTEGER */
172
+ static VALUE cASN1BitString; /* BIT STRING */
173
+ static VALUE cASN1OctetString, cASN1UTF8String; /* STRINGs */
174
+ static VALUE cASN1NumericString, cASN1PrintableString;
175
+ static VALUE cASN1T61String, cASN1VideotexString;
176
+ static VALUE cASN1IA5String, cASN1GraphicString;
177
+ static VALUE cASN1ISO64String, cASN1GeneralString;
178
+ static VALUE cASN1UniversalString, cASN1BMPString;
179
+ static VALUE cASN1Null; /* NULL */
180
+ static VALUE cASN1ObjectId; /* OBJECT IDENTIFIER */
181
+ static VALUE cASN1UTCTime, cASN1GeneralizedTime; /* TIME */
182
+ static VALUE cASN1Sequence, cASN1Set; /* CONSTRUCTIVE */
188
183
 
189
184
  static VALUE sym_IMPLICIT, sym_EXPLICIT;
190
185
  static VALUE sym_UNIVERSAL, sym_APPLICATION, sym_CONTEXT_SPECIFIC, sym_PRIVATE;
191
186
  static ID sivVALUE, sivTAG, sivTAG_CLASS, sivTAGGING, sivINDEFINITE_LENGTH, sivUNUSED_BITS;
192
- static ID id_each;
193
187
 
194
188
  /*
195
189
  * Ruby to ASN1 converters
@@ -503,7 +497,7 @@ static VALUE class_tag_map;
503
497
 
504
498
  static int ossl_asn1_default_tag(VALUE obj);
505
499
 
506
- ASN1_TYPE*
500
+ static ASN1_TYPE *
507
501
  ossl_asn1_get_asn1type(VALUE obj)
508
502
  {
509
503
  ASN1_TYPE *ret;
@@ -638,35 +632,6 @@ ossl_asn1_class2sym(int tc)
638
632
  return sym_UNIVERSAL;
639
633
  }
640
634
 
641
- /*
642
- * call-seq:
643
- * OpenSSL::ASN1::ASN1Data.new(value, tag, tag_class) => ASN1Data
644
- *
645
- * _value_: Please have a look at Constructive and Primitive to see how Ruby
646
- * types are mapped to ASN.1 types and vice versa.
647
- *
648
- * _tag_: An Integer indicating the tag number.
649
- *
650
- * _tag_class_: A Symbol indicating the tag class. Please cf. ASN1 for
651
- * possible values.
652
- *
653
- * == Example
654
- * asn1_int = OpenSSL::ASN1Data.new(42, 2, :UNIVERSAL) # => Same as OpenSSL::ASN1::Integer.new(42)
655
- * tagged_int = OpenSSL::ASN1Data.new(42, 0, :CONTEXT_SPECIFIC) # implicitly 0-tagged INTEGER
656
- */
657
- static VALUE
658
- ossl_asn1data_initialize(VALUE self, VALUE value, VALUE tag, VALUE tag_class)
659
- {
660
- if(!SYMBOL_P(tag_class))
661
- ossl_raise(eASN1Error, "invalid tag class");
662
- ossl_asn1_set_tag(self, tag);
663
- ossl_asn1_set_value(self, value);
664
- ossl_asn1_set_tag_class(self, tag_class);
665
- ossl_asn1_set_indefinite_length(self, Qfalse);
666
-
667
- return self;
668
- }
669
-
670
635
  static VALUE
671
636
  to_der_internal(VALUE self, int constructed, int indef_len, VALUE body)
672
637
  {
@@ -795,20 +760,19 @@ int_ossl_asn1_decode0_prim(unsigned char **pp, long length, long hlen, int tag,
795
760
  if (tc == sym_UNIVERSAL &&
796
761
  tag < ossl_asn1_info_size && ossl_asn1_info[tag].klass) {
797
762
  VALUE klass = *ossl_asn1_info[tag].klass;
798
- VALUE args[4];
799
- args[0] = value;
800
- args[1] = INT2NUM(tag);
801
- args[2] = Qnil;
802
- args[3] = tc;
803
- asn1data = rb_obj_alloc(klass);
804
- ossl_asn1_initialize(4, args, asn1data);
763
+ if (tag == V_ASN1_EOC)
764
+ asn1data = rb_funcall(cASN1EndOfContent, rb_intern("new"), 0);
765
+ else {
766
+ VALUE args[4] = { value, INT2NUM(tag), Qnil, tc };
767
+ asn1data = rb_funcallv_public(klass, rb_intern("new"), 4, args);
768
+ }
805
769
  if(tag == V_ASN1_BIT_STRING){
806
770
  rb_ivar_set(asn1data, sivUNUSED_BITS, LONG2NUM(flag));
807
771
  }
808
772
  }
809
773
  else {
810
- asn1data = rb_obj_alloc(cASN1Data);
811
- ossl_asn1data_initialize(asn1data, value, INT2NUM(tag), tc);
774
+ VALUE args[3] = { value, INT2NUM(tag), tc };
775
+ asn1data = rb_funcallv_public(cASN1Data, rb_intern("new"), 3, args);
812
776
  }
813
777
 
814
778
  return asn1data;
@@ -842,20 +806,20 @@ int_ossl_asn1_decode0_cons(unsigned char **pp, long max_len, long length,
842
806
  }
843
807
 
844
808
  if (tc == sym_UNIVERSAL) {
845
- VALUE args[4];
846
- if (tag == V_ASN1_SEQUENCE || tag == V_ASN1_SET)
847
- asn1data = rb_obj_alloc(*ossl_asn1_info[tag].klass);
848
- else
849
- asn1data = rb_obj_alloc(cASN1Constructive);
850
- args[0] = ary;
851
- args[1] = INT2NUM(tag);
852
- args[2] = Qnil;
853
- args[3] = tc;
854
- ossl_asn1_initialize(4, args, asn1data);
809
+ if (tag == V_ASN1_SEQUENCE) {
810
+ VALUE args[4] = { ary, INT2NUM(tag), Qnil, tc };
811
+ asn1data = rb_funcallv_public(cASN1Sequence, rb_intern("new"), 4, args);
812
+ } else if (tag == V_ASN1_SET) {
813
+ VALUE args[4] = { ary, INT2NUM(tag), Qnil, tc };
814
+ asn1data = rb_funcallv_public(cASN1Set, rb_intern("new"), 4, args);
815
+ } else {
816
+ VALUE args[4] = { ary, INT2NUM(tag), Qnil, tc };
817
+ asn1data = rb_funcallv_public(cASN1Constructive, rb_intern("new"), 4, args);
818
+ }
855
819
  }
856
820
  else {
857
- asn1data = rb_obj_alloc(cASN1Data);
858
- ossl_asn1data_initialize(asn1data, ary, INT2NUM(tag), tc);
821
+ VALUE args[3] = {ary, INT2NUM(tag), tc};
822
+ asn1data = rb_funcallv_public(cASN1Data, rb_intern("new"), 3, args);
859
823
  }
860
824
 
861
825
  if (indefinite)
@@ -1048,83 +1012,6 @@ ossl_asn1_decode_all(VALUE self, VALUE obj)
1048
1012
  return ary;
1049
1013
  }
1050
1014
 
1051
- /*
1052
- * call-seq:
1053
- * OpenSSL::ASN1::Primitive.new(value [, tag, tagging, tag_class ]) => Primitive
1054
- *
1055
- * _value_: is mandatory.
1056
- *
1057
- * _tag_: optional, may be specified for tagged values. If no _tag_ is
1058
- * specified, the UNIVERSAL tag corresponding to the Primitive sub-class
1059
- * is used by default.
1060
- *
1061
- * _tagging_: may be used as an encoding hint to encode a value either
1062
- * explicitly or implicitly, see ASN1 for possible values.
1063
- *
1064
- * _tag_class_: if _tag_ and _tagging_ are +nil+ then this is set to
1065
- * +:UNIVERSAL+ by default. If either _tag_ or _tagging_ are set then
1066
- * +:CONTEXT_SPECIFIC+ is used as the default. For possible values please
1067
- * cf. ASN1.
1068
- *
1069
- * == Example
1070
- * int = OpenSSL::ASN1::Integer.new(42)
1071
- * zero_tagged_int = OpenSSL::ASN1::Integer.new(42, 0, :IMPLICIT)
1072
- * private_explicit_zero_tagged_int = OpenSSL::ASN1::Integer.new(42, 0, :EXPLICIT, :PRIVATE)
1073
- */
1074
- static VALUE
1075
- ossl_asn1_initialize(int argc, VALUE *argv, VALUE self)
1076
- {
1077
- VALUE value, tag, tagging, tag_class;
1078
- int default_tag;
1079
-
1080
- rb_scan_args(argc, argv, "13", &value, &tag, &tagging, &tag_class);
1081
- default_tag = ossl_asn1_default_tag(self);
1082
-
1083
- if (default_tag == -1 || argc > 1) {
1084
- if(NIL_P(tag))
1085
- ossl_raise(eASN1Error, "must specify tag number");
1086
- if(!NIL_P(tagging) && !SYMBOL_P(tagging))
1087
- ossl_raise(eASN1Error, "invalid tagging method");
1088
- if(NIL_P(tag_class)) {
1089
- if (NIL_P(tagging))
1090
- tag_class = sym_UNIVERSAL;
1091
- else
1092
- tag_class = sym_CONTEXT_SPECIFIC;
1093
- }
1094
- if(!SYMBOL_P(tag_class))
1095
- ossl_raise(eASN1Error, "invalid tag class");
1096
- }
1097
- else{
1098
- tag = INT2NUM(default_tag);
1099
- tagging = Qnil;
1100
- tag_class = sym_UNIVERSAL;
1101
- }
1102
- ossl_asn1_set_tag(self, tag);
1103
- ossl_asn1_set_value(self, value);
1104
- ossl_asn1_set_tagging(self, tagging);
1105
- ossl_asn1_set_tag_class(self, tag_class);
1106
- ossl_asn1_set_indefinite_length(self, Qfalse);
1107
- if (default_tag == V_ASN1_BIT_STRING)
1108
- rb_ivar_set(self, sivUNUSED_BITS, INT2FIX(0));
1109
-
1110
- return self;
1111
- }
1112
-
1113
- static VALUE
1114
- ossl_asn1eoc_initialize(VALUE self) {
1115
- VALUE tag, tagging, tag_class, value;
1116
- tag = INT2FIX(0);
1117
- tagging = Qnil;
1118
- tag_class = sym_UNIVERSAL;
1119
- value = rb_str_new("", 0);
1120
- ossl_asn1_set_tag(self, tag);
1121
- ossl_asn1_set_value(self, value);
1122
- ossl_asn1_set_tagging(self, tagging);
1123
- ossl_asn1_set_tag_class(self, tag_class);
1124
- ossl_asn1_set_indefinite_length(self, Qfalse);
1125
- return self;
1126
- }
1127
-
1128
1015
  static VALUE
1129
1016
  ossl_asn1eoc_to_der(VALUE self)
1130
1017
  {
@@ -1163,9 +1050,12 @@ ossl_asn1prim_to_der(VALUE self)
1163
1050
  rb_jump_tag(state);
1164
1051
  }
1165
1052
  p0 = p1 = (unsigned char *)RSTRING_PTR(str);
1166
- i2d_ASN1_TYPE(asn1, &p0);
1053
+ if (i2d_ASN1_TYPE(asn1, &p0) < 0) {
1054
+ ASN1_TYPE_free(asn1);
1055
+ ossl_raise(eASN1Error, "i2d_ASN1_TYPE");
1056
+ }
1167
1057
  ASN1_TYPE_free(asn1);
1168
- assert(p0 - p1 == alllen);
1058
+ ossl_str_adjust(str, p0);
1169
1059
 
1170
1060
  /* Strip header since to_der_internal() wants only the payload */
1171
1061
  j = ASN1_get_object((const unsigned char **)&p1, &bodylen, &tag, &tc, alllen);
@@ -1213,27 +1103,6 @@ ossl_asn1cons_to_der(VALUE self)
1213
1103
  return to_der_internal(self, 1, indef_len, str);
1214
1104
  }
1215
1105
 
1216
- /*
1217
- * call-seq:
1218
- * asn1_ary.each { |asn1| block } => asn1_ary
1219
- *
1220
- * Calls the given block once for each element in self, passing that element
1221
- * as parameter _asn1_. If no block is given, an enumerator is returned
1222
- * instead.
1223
- *
1224
- * == Example
1225
- * asn1_ary.each do |asn1|
1226
- * puts asn1
1227
- * end
1228
- */
1229
- static VALUE
1230
- ossl_asn1cons_each(VALUE self)
1231
- {
1232
- rb_block_call(ossl_asn1_get_value(self), id_each, 0, 0, 0, 0);
1233
-
1234
- return self;
1235
- }
1236
-
1237
1106
  /*
1238
1107
  * call-seq:
1239
1108
  * OpenSSL::ASN1::ObjectId.register(object_id, short_name, long_name)
@@ -1363,7 +1232,7 @@ ossl_asn1obj_eq(VALUE self, VALUE other)
1363
1232
 
1364
1233
  #define OSSL_ASN1_IMPL_FACTORY_METHOD(klass) \
1365
1234
  static VALUE ossl_asn1_##klass(int argc, VALUE *argv, VALUE self)\
1366
- { return rb_funcall3(cASN1##klass, rb_intern("new"), argc, argv); }
1235
+ { return rb_funcallv_public(cASN1##klass, rb_intern("new"), argc, argv); }
1367
1236
 
1368
1237
  OSSL_ASN1_IMPL_FACTORY_METHOD(Boolean)
1369
1238
  OSSL_ASN1_IMPL_FACTORY_METHOD(Integer)
@@ -1649,42 +1518,6 @@ Init_ossl_asn1(void)
1649
1518
  * puts int2.value # => 1
1650
1519
  */
1651
1520
  cASN1Data = rb_define_class_under(mASN1, "ASN1Data", rb_cObject);
1652
- /*
1653
- * Carries the value of a ASN.1 type.
1654
- * Please confer Constructive and Primitive for the mappings between
1655
- * ASN.1 data types and Ruby classes.
1656
- */
1657
- rb_attr(cASN1Data, rb_intern("value"), 1, 1, 0);
1658
- /*
1659
- * An Integer representing the tag number of this ASN1Data. Never +nil+.
1660
- */
1661
- rb_attr(cASN1Data, rb_intern("tag"), 1, 1, 0);
1662
- /*
1663
- * A Symbol representing the tag class of this ASN1Data. Never +nil+.
1664
- * See ASN1Data for possible values.
1665
- */
1666
- rb_attr(cASN1Data, rb_intern("tag_class"), 1, 1, 0);
1667
- /*
1668
- * Never +nil+. A boolean value indicating whether the encoding uses
1669
- * indefinite length (in the case of parsing) or whether an indefinite
1670
- * length form shall be used (in the encoding case).
1671
- * In DER, every value uses definite length form. But in scenarios where
1672
- * large amounts of data need to be transferred it might be desirable to
1673
- * have some kind of streaming support available.
1674
- * For example, huge OCTET STRINGs are preferably sent in smaller-sized
1675
- * chunks, each at a time.
1676
- * This is possible in BER by setting the length bytes of an encoding
1677
- * to zero and by this indicating that the following value will be
1678
- * sent in chunks. Indefinite length encodings are always constructed.
1679
- * The end of such a stream of chunks is indicated by sending a EOC
1680
- * (End of Content) tag. SETs and SEQUENCEs may use an indefinite length
1681
- * encoding, but also primitive types such as e.g. OCTET STRINGS or
1682
- * BIT STRINGS may leverage this functionality (cf. ITU-T X.690).
1683
- */
1684
- rb_attr(cASN1Data, rb_intern("indefinite_length"), 1, 1, 0);
1685
- rb_define_alias(cASN1Data, "infinite_length", "indefinite_length");
1686
- rb_define_alias(cASN1Data, "infinite_length=", "indefinite_length=");
1687
- rb_define_method(cASN1Data, "initialize", ossl_asn1data_initialize, 3);
1688
1521
  rb_define_method(cASN1Data, "to_der", ossl_asn1data_to_der, 0);
1689
1522
 
1690
1523
  /* Document-class: OpenSSL::ASN1::Primitive
@@ -1752,16 +1585,6 @@ Init_ossl_asn1(void)
1752
1585
  * prim_zero_tagged_explicit = <class>.new(value, 0, :EXPLICIT)
1753
1586
  */
1754
1587
  cASN1Primitive = rb_define_class_under(mASN1, "Primitive", cASN1Data);
1755
- /*
1756
- * May be used as a hint for encoding a value either implicitly or
1757
- * explicitly by setting it either to +:IMPLICIT+ or to +:EXPLICIT+.
1758
- * _tagging_ is not set when a ASN.1 structure is parsed using
1759
- * OpenSSL::ASN1.decode.
1760
- */
1761
- rb_attr(cASN1Primitive, rb_intern("tagging"), 1, 1, Qtrue);
1762
- rb_undef_method(cASN1Primitive, "indefinite_length=");
1763
- rb_undef_method(cASN1Primitive, "infinite_length=");
1764
- rb_define_method(cASN1Primitive, "initialize", ossl_asn1_initialize, -1);
1765
1588
  rb_define_method(cASN1Primitive, "to_der", ossl_asn1prim_to_der, 0);
1766
1589
 
1767
1590
  /* Document-class: OpenSSL::ASN1::Constructive
@@ -1792,17 +1615,7 @@ Init_ossl_asn1(void)
1792
1615
  * set = OpenSSL::ASN1::Set.new( [ int, str ] )
1793
1616
  */
1794
1617
  cASN1Constructive = rb_define_class_under(mASN1,"Constructive", cASN1Data);
1795
- rb_include_module(cASN1Constructive, rb_mEnumerable);
1796
- /*
1797
- * May be used as a hint for encoding a value either implicitly or
1798
- * explicitly by setting it either to +:IMPLICIT+ or to +:EXPLICIT+.
1799
- * _tagging_ is not set when a ASN.1 structure is parsed using
1800
- * OpenSSL::ASN1.decode.
1801
- */
1802
- rb_attr(cASN1Constructive, rb_intern("tagging"), 1, 1, Qtrue);
1803
- rb_define_method(cASN1Constructive, "initialize", ossl_asn1_initialize, -1);
1804
1618
  rb_define_method(cASN1Constructive, "to_der", ossl_asn1cons_to_der, 0);
1805
- rb_define_method(cASN1Constructive, "each", ossl_asn1cons_each, 0);
1806
1619
 
1807
1620
  #define OSSL_ASN1_DEFINE_CLASS(name, super) \
1808
1621
  do{\
@@ -1851,13 +1664,10 @@ do{\
1851
1664
  rb_define_alias(cASN1ObjectId, "short_name", "sn");
1852
1665
  rb_define_alias(cASN1ObjectId, "long_name", "ln");
1853
1666
  rb_define_method(cASN1ObjectId, "==", ossl_asn1obj_eq, 1);
1854
- rb_attr(cASN1BitString, rb_intern("unused_bits"), 1, 1, 0);
1855
1667
 
1856
- rb_define_method(cASN1EndOfContent, "initialize", ossl_asn1eoc_initialize, 0);
1857
1668
  rb_define_method(cASN1EndOfContent, "to_der", ossl_asn1eoc_to_der, 0);
1858
1669
 
1859
1670
  class_tag_map = rb_hash_new();
1860
- rb_gc_register_mark_object(class_tag_map);
1861
1671
  rb_hash_aset(class_tag_map, cASN1EndOfContent, INT2NUM(V_ASN1_EOC));
1862
1672
  rb_hash_aset(class_tag_map, cASN1Boolean, INT2NUM(V_ASN1_BOOLEAN));
1863
1673
  rb_hash_aset(class_tag_map, cASN1Integer, INT2NUM(V_ASN1_INTEGER));
@@ -1881,6 +1691,5 @@ do{\
1881
1691
  rb_hash_aset(class_tag_map, cASN1GeneralString, INT2NUM(V_ASN1_GENERALSTRING));
1882
1692
  rb_hash_aset(class_tag_map, cASN1UniversalString, INT2NUM(V_ASN1_UNIVERSALSTRING));
1883
1693
  rb_hash_aset(class_tag_map, cASN1BMPString, INT2NUM(V_ASN1_BMPSTRING));
1884
-
1885
- id_each = rb_intern_const("each");
1694
+ rb_define_const(mASN1, "CLASS_TAG_MAP", class_tag_map);
1886
1695
  }
@@ -5,7 +5,7 @@
5
5
  */
6
6
  /*
7
7
  * This program is licensed under the same licence as Ruby.
8
- * (See the file 'LICENCE'.)
8
+ * (See the file 'COPYING'.)
9
9
  */
10
10
  #if !defined(_OSSL_ASN1_H_)
11
11
  #define _OSSL_ASN1_H_
@@ -38,24 +38,6 @@ extern VALUE mASN1;
38
38
  extern VALUE eASN1Error;
39
39
 
40
40
  extern VALUE cASN1Data;
41
- extern VALUE cASN1Primitive;
42
- extern VALUE cASN1Constructive;
43
-
44
- extern VALUE cASN1Boolean; /* BOOLEAN */
45
- extern VALUE cASN1Integer, cASN1Enumerated; /* INTEGER */
46
- extern VALUE cASN1BitString; /* BIT STRING */
47
- extern VALUE cASN1OctetString, cASN1UTF8String; /* STRINGs */
48
- extern VALUE cASN1NumericString, cASN1PrintableString;
49
- extern VALUE cASN1T61String, cASN1VideotexString;
50
- extern VALUE cASN1IA5String, cASN1GraphicString;
51
- extern VALUE cASN1ISO64String, cASN1GeneralString;
52
- extern VALUE cASN1UniversalString, cASN1BMPString;
53
- extern VALUE cASN1Null; /* NULL */
54
- extern VALUE cASN1ObjectId; /* OBJECT IDENTIFIER */
55
- extern VALUE cASN1UTCTime, cASN1GeneralizedTime; /* TIME */
56
- extern VALUE cASN1Sequence, cASN1Set; /* CONSTRUCTIVE */
57
-
58
- ASN1_TYPE *ossl_asn1_get_asn1type(VALUE);
59
41
 
60
42
  void Init_ossl_asn1(void);
61
43
 
@@ -5,7 +5,7 @@
5
5
  */
6
6
  /*
7
7
  * This program is licensed under the same licence as Ruby.
8
- * (See the file 'LICENCE'.)
8
+ * (See the file 'COPYING'.)
9
9
  */
10
10
  #include "ossl.h"
11
11
 
@@ -5,7 +5,7 @@
5
5
  */
6
6
  /*
7
7
  * This program is licensed under the same licence as Ruby.
8
- * (See the file 'LICENCE'.)
8
+ * (See the file 'COPYING'.)
9
9
  */
10
10
  #if !defined(_OSSL_BIO_H_)
11
11
  #define _OSSL_BIO_H_
@@ -5,15 +5,11 @@
5
5
  */
6
6
  /*
7
7
  * This program is licensed under the same licence as Ruby.
8
- * (See the file 'LICENCE'.)
8
+ * (See the file 'COPYING'.)
9
9
  */
10
10
  /* modified by Michal Rokos <m.rokos@sh.cvut.cz> */
11
11
  #include "ossl.h"
12
12
 
13
- #ifdef HAVE_RB_EXT_RACTOR_SAFE
14
- #include <ruby/ractor.h>
15
- #endif
16
-
17
13
  #define NewBN(klass) \
18
14
  TypedData_Wrap_Struct((klass), &ossl_bn_type, 0)
19
15
  #define SetBN(obj, bn) do { \
@@ -41,7 +37,7 @@ static const rb_data_type_t ossl_bn_type = {
41
37
  {
42
38
  0, ossl_bn_free,
43
39
  },
44
- 0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED,
40
+ 0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_FROZEN_SHAREABLE,
45
41
  };
46
42
 
47
43
  /*
@@ -53,7 +49,7 @@ VALUE cBN;
53
49
  *
54
50
  * Generic Error for all of OpenSSL::BN (big num)
55
51
  */
56
- VALUE eBNError;
52
+ static VALUE eBNError;
57
53
 
58
54
  /*
59
55
  * Public
@@ -156,19 +152,19 @@ ossl_bn_value_ptr(volatile VALUE *ptr)
156
152
  */
157
153
 
158
154
  #ifdef HAVE_RB_EXT_RACTOR_SAFE
159
- void
155
+ static void
160
156
  ossl_bn_ctx_free(void *ptr)
161
157
  {
162
158
  BN_CTX *ctx = (BN_CTX *)ptr;
163
159
  BN_CTX_free(ctx);
164
160
  }
165
161
 
166
- struct rb_ractor_local_storage_type ossl_bn_ctx_key_type = {
162
+ static struct rb_ractor_local_storage_type ossl_bn_ctx_key_type = {
167
163
  NULL, // mark
168
164
  ossl_bn_ctx_free,
169
165
  };
170
166
 
171
- rb_ractor_local_key_t ossl_bn_ctx_key;
167
+ static rb_ractor_local_key_t ossl_bn_ctx_key;
172
168
 
173
169
  BN_CTX *
174
170
  ossl_bn_ctx_get(void)
@@ -244,7 +240,7 @@ ossl_bn_alloc(VALUE klass)
244
240
  * number.
245
241
  * - +10+ - Decimal number representation, with a leading '-' for a negative
246
242
  * number.
247
- * - +16+ - Hexadeciaml number representation, with a leading '-' for a
243
+ * - +16+ - Hexadecimal number representation, with a leading '-' for a
248
244
  * negative number.
249
245
  */
250
246
  static VALUE
@@ -263,6 +259,7 @@ ossl_bn_initialize(int argc, VALUE *argv, VALUE self)
263
259
  ossl_raise(rb_eArgError, "invalid argument");
264
260
  }
265
261
 
262
+ rb_check_frozen(self);
266
263
  if (RB_INTEGER_TYPE_P(str)) {
267
264
  GetBN(self, bn);
268
265
  integer_to_bnptr(str, bn);
@@ -326,7 +323,7 @@ ossl_bn_initialize(int argc, VALUE *argv, VALUE self)
326
323
  * the bignum is ignored.
327
324
  * - +10+ - Decimal number representation, with a leading '-' for a negative
328
325
  * bignum.
329
- * - +16+ - Hexadeciaml number representation, with a leading '-' for a
326
+ * - +16+ - Hexadecimal number representation, with a leading '-' for a
330
327
  * negative bignum.
331
328
  */
332
329
  static VALUE
@@ -693,6 +690,7 @@ BIGNUM_3c(mod_exp)
693
690
  ossl_bn_##func(VALUE self, VALUE bit) \
694
691
  { \
695
692
  BIGNUM *bn; \
693
+ rb_check_frozen(self); \
696
694
  GetBN(self, bn); \
697
695
  if (BN_##func(bn, NUM2INT(bit)) <= 0) { \
698
696
  ossl_raise(eBNError, NULL); \
@@ -782,6 +780,7 @@ BIGNUM_SHIFT(rshift)
782
780
  { \
783
781
  BIGNUM *bn; \
784
782
  int b; \
783
+ rb_check_frozen(self); \
785
784
  b = NUM2INT(bits); \
786
785
  GetBN(self, bn); \
787
786
  if (BN_##func(bn, bn, b) <= 0) \
@@ -1191,6 +1190,7 @@ ossl_bn_set_flags(VALUE self, VALUE arg)
1191
1190
  BIGNUM *bn;
1192
1191
  GetBN(self, bn);
1193
1192
 
1193
+ rb_check_frozen(self);
1194
1194
  BN_set_flags(bn, NUM2INT(arg));
1195
1195
  return Qnil;
1196
1196
  }
@@ -5,13 +5,12 @@
5
5
  */
6
6
  /*
7
7
  * This program is licensed under the same licence as Ruby.
8
- * (See the file 'LICENCE'.)
8
+ * (See the file 'COPYING'.)
9
9
  */
10
10
  #if !defined(_OSSL_BN_H_)
11
11
  #define _OSSL_BN_H_
12
12
 
13
13
  extern VALUE cBN;
14
- extern VALUE eBNError;
15
14
 
16
15
  BN_CTX *ossl_bn_ctx_get(void);
17
16
  #define ossl_bn_ctx ossl_bn_ctx_get()
@@ -5,7 +5,7 @@
5
5
  */
6
6
  /*
7
7
  * This program is licensed under the same licence as Ruby.
8
- * (See the file 'LICENCE'.)
8
+ * (See the file 'COPYING'.)
9
9
  */
10
10
  #include "ossl.h"
11
11
 
@@ -30,8 +30,8 @@
30
30
  /*
31
31
  * Classes
32
32
  */
33
- VALUE cCipher;
34
- VALUE eCipherError;
33
+ static VALUE cCipher;
34
+ static VALUE eCipherError;
35
35
  static ID id_auth_tag_len, id_key_set;
36
36
 
37
37
  static VALUE ossl_cipher_alloc(VALUE klass);
@@ -457,8 +457,8 @@ ossl_cipher_final(VALUE self)
457
457
  * call-seq:
458
458
  * cipher.name -> string
459
459
  *
460
- * Returns the name of the cipher which may differ slightly from the original
461
- * name provided.
460
+ * Returns the short name of the cipher which may differ slightly from the
461
+ * original name provided.
462
462
  */
463
463
  static VALUE
464
464
  ossl_cipher_name(VALUE self)
@@ -5,14 +5,11 @@
5
5
  */
6
6
  /*
7
7
  * This program is licensed under the same licence as Ruby.
8
- * (See the file 'LICENCE'.)
8
+ * (See the file 'COPYING'.)
9
9
  */
10
10
  #if !defined(_OSSL_CIPHER_H_)
11
11
  #define _OSSL_CIPHER_H_
12
12
 
13
- extern VALUE cCipher;
14
- extern VALUE eCipherError;
15
-
16
13
  const EVP_CIPHER *ossl_evp_get_cipherbyname(VALUE);
17
14
  VALUE ossl_cipher_new(const EVP_CIPHER *);
18
15
  void Init_ossl_cipher(void);