openssl 3.2.1 → 3.3.0

Sign up to get free protection for your applications and to get access to all the features.
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);