rubysl-openssl 2.1.0 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -32,7 +32,18 @@
32
32
  /*
33
33
  * Classes
34
34
  */
35
+ /* Document-class: OpenSSL::Engine
36
+ *
37
+ * This class is the access to openssl's ENGINE cryptographic module
38
+ * implementation.
39
+ *
40
+ * See also, https://www.openssl.org/docs/crypto/engine.html
41
+ */
35
42
  VALUE cEngine;
43
+ /* Document-class: OpenSSL::Engine::EngineError
44
+ *
45
+ * This is the generic exception for OpenSSL::Engine related errors
46
+ */
36
47
  VALUE eEngineError;
37
48
 
38
49
  /*
@@ -46,6 +57,17 @@ do{\
46
57
  }\
47
58
  }while(0)
48
59
 
60
+ /* Document-method: OpenSSL::Engine.load
61
+ *
62
+ * call-seq:
63
+ * load(enginename = nil)
64
+ *
65
+ * This method loads engines. If +name+ is nil, then all builtin engines are
66
+ * loaded. Otherwise, the given +name+, as a string, is loaded if available to
67
+ * your runtime, and returns true. If +name+ is not found, then nil is
68
+ * returned.
69
+ *
70
+ */
49
71
  static VALUE
50
72
  ossl_engine_s_load(int argc, VALUE *argv, VALUE klass)
51
73
  {
@@ -116,6 +138,15 @@ ossl_engine_s_load(int argc, VALUE *argv, VALUE klass)
116
138
  #endif /* HAVE_ENGINE_LOAD_BUILTIN_ENGINES */
117
139
  }
118
140
 
141
+ /* Document-method: OpenSSL::Engine.cleanup
142
+ * call-seq:
143
+ * OpenSSL::Engine.cleanup
144
+ *
145
+ * It is only necessary to run cleanup when engines are loaded via
146
+ * OpenSSL::Engine.load. However, running cleanup before exit is recommended.
147
+ *
148
+ * See also, https://www.openssl.org/docs/crypto/engine.html
149
+ */
119
150
  static VALUE
120
151
  ossl_engine_s_cleanup(VALUE self)
121
152
  {
@@ -125,6 +156,10 @@ ossl_engine_s_cleanup(VALUE self)
125
156
  return Qnil;
126
157
  }
127
158
 
159
+ /* Document-method: OpenSSL::Engine.engines
160
+ *
161
+ * Returns an array of currently loaded engines.
162
+ */
128
163
  static VALUE
129
164
  ossl_engine_s_engines(VALUE klass)
130
165
  {
@@ -144,6 +179,18 @@ ossl_engine_s_engines(VALUE klass)
144
179
  return ary;
145
180
  }
146
181
 
182
+ /* Document-method: OpenSSL::Engine.by_id
183
+ *
184
+ * call-seq:
185
+ * by_id(name) -> engine
186
+ *
187
+ * Fetch the engine as specified by the +id+ String
188
+ *
189
+ * OpenSSL::Engine.by_id("openssl")
190
+ * => #<OpenSSL::Engine id="openssl" name="Software engine support">
191
+ *
192
+ * See OpenSSL::Engine.engines for the currently loaded engines
193
+ */
147
194
  static VALUE
148
195
  ossl_engine_s_by_id(VALUE klass, VALUE id)
149
196
  {
@@ -179,6 +226,15 @@ ossl_engine_s_alloc(VALUE klass)
179
226
  return obj;
180
227
  }
181
228
 
229
+ /* Document-method: OpenSSL::Engine#id
230
+ *
231
+ * Get the id for this engine
232
+ *
233
+ * OpenSSL::Engine.load
234
+ * OpenSSL::Engine.engines #=> [#<OpenSSL::Engine#>, ...]
235
+ * OpenSSL::Engine.engines.first.id
236
+ * #=> "rsax"
237
+ */
182
238
  static VALUE
183
239
  ossl_engine_get_id(VALUE self)
184
240
  {
@@ -187,6 +243,16 @@ ossl_engine_get_id(VALUE self)
187
243
  return rb_str_new2(ENGINE_get_id(e));
188
244
  }
189
245
 
246
+ /* Document-method: OpenSSL::Engine#name
247
+ *
248
+ * Get the descriptive name for this engine
249
+ *
250
+ * OpenSSL::Engine.load
251
+ * OpenSSL::Engine.engines #=> [#<OpenSSL::Engine#>, ...]
252
+ * OpenSSL::Engine.engines.first.name
253
+ * #=> "RSAX engine support"
254
+ *
255
+ */
190
256
  static VALUE
191
257
  ossl_engine_get_name(VALUE self)
192
258
  {
@@ -195,6 +261,12 @@ ossl_engine_get_name(VALUE self)
195
261
  return rb_str_new2(ENGINE_get_name(e));
196
262
  }
197
263
 
264
+ /* Document-method: OpenSSL::Engine#finish
265
+ *
266
+ * Releases all internal structural references for this engine.
267
+ *
268
+ * May raise an EngineError if the engine is unavailable
269
+ */
198
270
  static VALUE
199
271
  ossl_engine_finish(VALUE self)
200
272
  {
@@ -207,6 +279,22 @@ ossl_engine_finish(VALUE self)
207
279
  }
208
280
 
209
281
  #if defined(HAVE_ENGINE_GET_CIPHER)
282
+ /* Document-method: OpenSSL::Engine#cipher
283
+ *
284
+ * call-seq:
285
+ * engine.cipher(name) -> OpenSSL::Cipher
286
+ *
287
+ * This returns an OpenSSL::Cipher by +name+, if it is available in this
288
+ * engine.
289
+ *
290
+ * A EngineError will be raised if the cipher is unavailable.
291
+ *
292
+ * e = OpenSSL::Engine.by_id("openssl")
293
+ * => #<OpenSSL::Engine id="openssl" name="Software engine support">
294
+ * e.cipher("RC4")
295
+ * => #<OpenSSL::Cipher:0x007fc5cacc3048>
296
+ *
297
+ */
210
298
  static VALUE
211
299
  ossl_engine_get_cipher(VALUE self, VALUE name)
212
300
  {
@@ -230,6 +318,22 @@ ossl_engine_get_cipher(VALUE self, VALUE name)
230
318
  #endif
231
319
 
232
320
  #if defined(HAVE_ENGINE_GET_DIGEST)
321
+ /* Document-method: OpenSSL::Engine#digest
322
+ *
323
+ * call-seq:
324
+ * engine.digest(name) -> OpenSSL::Digest
325
+ *
326
+ * This returns an OpenSSL::Digest by +name+.
327
+ *
328
+ * Will raise an EngineError if the digest is unavailable.
329
+ *
330
+ * e = OpenSSL::Engine.by_id("openssl")
331
+ * #=> #<OpenSSL::Engine id="openssl" name="Software engine support">
332
+ * e.digest("SHA1")
333
+ * #=> #<OpenSSL::Digest: da39a3ee5e6b4b0d3255bfef95601890afd80709>
334
+ * e.digest("zomg")
335
+ * #=> OpenSSL::Engine::EngineError: no such digest `zomg'
336
+ */
233
337
  static VALUE
234
338
  ossl_engine_get_digest(VALUE self, VALUE name)
235
339
  {
@@ -252,6 +356,16 @@ ossl_engine_get_digest(VALUE self, VALUE name)
252
356
  #define ossl_engine_get_digest rb_f_notimplement
253
357
  #endif
254
358
 
359
+ /* Document-method: OpenSSL::Engine#load_private_key
360
+ *
361
+ * call-seq:
362
+ * engine.load_private_key(id = nil, data = nil) -> OpenSSL::PKey
363
+ *
364
+ * Loads the given private key by +id+ and +data+.
365
+ *
366
+ * An EngineError is raised of the OpenSSL::PKey is unavailable.
367
+ *
368
+ */
255
369
  static VALUE
256
370
  ossl_engine_load_privkey(int argc, VALUE *argv, VALUE self)
257
371
  {
@@ -276,6 +390,16 @@ ossl_engine_load_privkey(int argc, VALUE *argv, VALUE self)
276
390
  return obj;
277
391
  }
278
392
 
393
+ /* Document-method: OpenSSL::Engine#load_public_key
394
+ *
395
+ * call-seq:
396
+ * engine.load_public_key(id = nil, data = nil) -> OpenSSL::PKey
397
+ *
398
+ * Loads the given private key by +id+ and +data+.
399
+ *
400
+ * An EngineError is raised of the OpenSSL::PKey is unavailable.
401
+ *
402
+ */
279
403
  static VALUE
280
404
  ossl_engine_load_pubkey(int argc, VALUE *argv, VALUE self)
281
405
  {
@@ -298,6 +422,23 @@ ossl_engine_load_pubkey(int argc, VALUE *argv, VALUE self)
298
422
  return ossl_pkey_new(pkey);
299
423
  }
300
424
 
425
+ /* Document-method: OpenSSL::Engine#set_default
426
+ *
427
+ * call-seq:
428
+ * engine.set_default(flag)
429
+ *
430
+ * Set the defaults for this engine with the given +flag+.
431
+ *
432
+ * These flags are used to control combinations of algorithm methods.
433
+ *
434
+ * +flag+ can be one of the following, other flags are available depending on
435
+ * your OS.
436
+ *
437
+ * [All flags] 0xFFFF
438
+ * [No flags] 0x0000
439
+ *
440
+ * See also <openssl/engine.h>
441
+ */
301
442
  static VALUE
302
443
  ossl_engine_set_default(VALUE self, VALUE flag)
303
444
  {
@@ -310,6 +451,15 @@ ossl_engine_set_default(VALUE self, VALUE flag)
310
451
  return Qtrue;
311
452
  }
312
453
 
454
+ /* Document-method: OpenSSL::Engine#ctrl_cmd
455
+ *
456
+ * call-seq:
457
+ * engine.ctrl_cmd(command, value = nil) -> engine
458
+ *
459
+ * Send the given +command+ to this engine.
460
+ *
461
+ * Raises an EngineError if the +command+ fails.
462
+ */
313
463
  static VALUE
314
464
  ossl_engine_ctrl_cmd(int argc, VALUE *argv, VALUE self)
315
465
  {
@@ -340,6 +490,10 @@ ossl_engine_cmd_flag_to_name(int flag)
340
490
  }
341
491
  }
342
492
 
493
+ /* Document-method: OpenSSL::Engine#cmds
494
+ *
495
+ * Returns an array of command definitions for the current engine
496
+ */
343
497
  static VALUE
344
498
  ossl_engine_get_cmds(VALUE self)
345
499
  {
@@ -362,6 +516,10 @@ ossl_engine_get_cmds(VALUE self)
362
516
  return ary;
363
517
  }
364
518
 
519
+ /* Document-method: OpenSSL::Engine#inspect
520
+ *
521
+ * Pretty print this engine
522
+ */
365
523
  static VALUE
366
524
  ossl_engine_inspect(VALUE self)
367
525
  {
@@ -62,6 +62,36 @@ ossl_hmac_alloc(VALUE klass)
62
62
  * call-seq:
63
63
  * HMAC.new(key, digest) -> hmac
64
64
  *
65
+ * Returns an instance of OpenSSL::HMAC set with the key and digest
66
+ * algorithm to be used. The instance represents the initial state of
67
+ * the message authentication code before any data has been processed.
68
+ * To process data with it, use the instance method #update with your
69
+ * data as an argument.
70
+ *
71
+ * === Example
72
+ *
73
+ * key = 'key'
74
+ * digest = OpenSSL::Digest.new('sha1')
75
+ * instance = OpenSSL::HMAC.new(key, digest)
76
+ * #=> f42bb0eeb018ebbd4597ae7213711ec60760843f
77
+ * instance.class
78
+ * #=> OpenSSL::HMAC
79
+ *
80
+ * === A note about comparisons
81
+ *
82
+ * Two instances won't be equal when they're compared, even if they have the
83
+ * same value. Use #to_s or #hexdigest to return the authentication code that
84
+ * the instance represents. For example:
85
+ *
86
+ * other_instance = OpenSSL::HMAC.new('key', OpenSSL::Digest.new('sha1'))
87
+ * #=> f42bb0eeb018ebbd4597ae7213711ec60760843f
88
+ * instance
89
+ * #=> f42bb0eeb018ebbd4597ae7213711ec60760843f
90
+ * instance == other_instance
91
+ * #=> false
92
+ * instance.to_s == other_instance.to_s
93
+ * #=> true
94
+ *
65
95
  */
66
96
  static VALUE
67
97
  ossl_hmac_initialize(VALUE self, VALUE key, VALUE digest)
@@ -95,6 +125,19 @@ ossl_hmac_copy(VALUE self, VALUE other)
95
125
  * call-seq:
96
126
  * hmac.update(string) -> self
97
127
  *
128
+ * Returns +self+ updated with the message to be authenticated.
129
+ * Can be called repeatedly with chunks of the message.
130
+ *
131
+ * === Example
132
+ *
133
+ * first_chunk = 'The quick brown fox jumps '
134
+ * second_chunk = 'over the lazy dog'
135
+ *
136
+ * instance.update(first_chunk)
137
+ * #=> 5b9a8038a65d571076d97fe783989e52278a492a
138
+ * instance.update(second_chunk)
139
+ * #=> de7c9b85b8b78aa6bc8a7a36f70a90701c9db4d9
140
+ *
98
141
  */
99
142
  static VALUE
100
143
  ossl_hmac_update(VALUE self, VALUE data)
@@ -125,7 +168,16 @@ hmac_final(HMAC_CTX *ctx, unsigned char **buf, unsigned int *buf_len)
125
168
 
126
169
  /*
127
170
  * call-seq:
128
- * hmac.digest -> aString
171
+ * hmac.digest -> string
172
+ *
173
+ * Returns the authentication code an instance represents as a binary string.
174
+ *
175
+ * === Example
176
+ *
177
+ * instance = OpenSSL::HMAC.new('key', OpenSSL::Digest.new('sha1'))
178
+ * #=> f42bb0eeb018ebbd4597ae7213711ec60760843f
179
+ * instance.digest
180
+ * #=> "\xF4+\xB0\xEE\xB0\x18\xEB\xBDE\x97\xAEr\x13q\x1E\xC6\a`\x84?"
129
181
  *
130
182
  */
131
183
  static VALUE
@@ -145,7 +197,10 @@ ossl_hmac_digest(VALUE self)
145
197
 
146
198
  /*
147
199
  * call-seq:
148
- * hmac.hexdigest -> aString
200
+ * hmac.hexdigest -> string
201
+ *
202
+ * Returns the authentication code an instance represents as a hex-encoded
203
+ * string.
149
204
  *
150
205
  */
151
206
  static VALUE
@@ -173,6 +228,20 @@ ossl_hmac_hexdigest(VALUE self)
173
228
  * call-seq:
174
229
  * hmac.reset -> self
175
230
  *
231
+ * Returns +self+ as it was when it was first initialized, with all processed
232
+ * data cleared from it.
233
+ *
234
+ * === Example
235
+ *
236
+ * data = "The quick brown fox jumps over the lazy dog"
237
+ * instance = OpenSSL::HMAC.new('key', OpenSSL::Digest.new('sha1'))
238
+ * #=> f42bb0eeb018ebbd4597ae7213711ec60760843f
239
+ *
240
+ * instance.update(data)
241
+ * #=> de7c9b85b8b78aa6bc8a7a36f70a90701c9db4d9
242
+ * instance.reset
243
+ * #=> f42bb0eeb018ebbd4597ae7213711ec60760843f
244
+ *
176
245
  */
177
246
  static VALUE
178
247
  ossl_hmac_reset(VALUE self)
@@ -189,6 +258,18 @@ ossl_hmac_reset(VALUE self)
189
258
  * call-seq:
190
259
  * HMAC.digest(digest, key, data) -> aString
191
260
  *
261
+ * Returns the authentication code as a binary string. The +digest+ parameter
262
+ * must be an instance of OpenSSL::Digest.
263
+ *
264
+ * === Example
265
+ *
266
+ * key = 'key'
267
+ * data = 'The quick brown fox jumps over the lazy dog'
268
+ * digest = OpenSSL::Digest.new('sha1')
269
+ *
270
+ * hmac = OpenSSL::HMAC.digest(digest, key, data)
271
+ * #=> "\xDE|\x9B\x85\xB8\xB7\x8A\xA6\xBC\x8Az6\xF7\n\x90p\x1C\x9D\xB4\xD9"
272
+ *
192
273
  */
193
274
  static VALUE
194
275
  ossl_hmac_s_digest(VALUE klass, VALUE digest, VALUE key, VALUE data)
@@ -206,7 +287,19 @@ ossl_hmac_s_digest(VALUE klass, VALUE digest, VALUE key, VALUE data)
206
287
 
207
288
  /*
208
289
  * call-seq:
209
- * HMAC.digest(digest, key, data) -> aString
290
+ * HMAC.hexdigest(digest, key, data) -> aString
291
+ *
292
+ * Returns the authentication code as a hex-encoded string. The +digest+
293
+ * parameter must be an instance of OpenSSL::Digest.
294
+ *
295
+ * === Example
296
+ *
297
+ * key = 'key'
298
+ * data = 'The quick brown fox jumps over the lazy dog'
299
+ * digest = OpenSSL::Digest.new('sha1')
300
+ *
301
+ * hmac = OpenSSL::HMAC.hexdigest(digest, key, data)
302
+ * #=> "de7c9b85b8b78aa6bc8a7a36f70a90701c9db4d9"
210
303
  *
211
304
  */
212
305
  static VALUE
@@ -237,6 +330,7 @@ void
237
330
  Init_ossl_hmac()
238
331
  {
239
332
  #if 0
333
+ /* :nodoc: */
240
334
  mOSSL = rb_define_module("OpenSSL"); /* let rdoc know about mOSSL */
241
335
  #endif
242
336
 
@@ -149,7 +149,7 @@ ossl_ocspreq_add_nonce(int argc, VALUE *argv, VALUE self)
149
149
  * 2: nonces both absent.
150
150
  * 3: nonce present in response only.
151
151
  * 0: nonces both present and not equal.
152
- * -1: nonce in request only.
152
+ * -1: nonce in request only.
153
153
  *
154
154
  * For most responders clients can check return > 0.
155
155
  * If responder doesn't handle nonces return != 0 may be
@@ -466,7 +466,7 @@ ossl_ocspbres_add_status(VALUE self, VALUE cid, VALUE status,
466
466
  /* All ary's members should be X509Extension */
467
467
  Check_Type(ext, T_ARRAY);
468
468
  for (i = 0; i < RARRAY_LEN(ext); i++)
469
- OSSL_Check_Kind(rb_ary_entry(ext, i), cX509Ext);
469
+ OSSL_Check_Kind(RARRAY_PTR(ext)[i], cX509Ext);
470
470
  }
471
471
 
472
472
  error = 0;
@@ -495,7 +495,7 @@ ossl_ocspbres_add_status(VALUE self, VALUE cid, VALUE status,
495
495
  sk_X509_EXTENSION_pop_free(single->singleExtensions, X509_EXTENSION_free);
496
496
  single->singleExtensions = NULL;
497
497
  for(i = 0; i < RARRAY_LEN(ext); i++){
498
- x509ext = DupX509ExtPtr(rb_ary_entry(ext, i));
498
+ x509ext = DupX509ExtPtr(RARRAY_PTR(ext)[i]);
499
499
  if(!OCSP_SINGLERESP_add_ext(single, x509ext, -1)){
500
500
  X509_EXTENSION_free(x509ext);
501
501
  error = 1;
@@ -624,7 +624,7 @@ pkcs7_get_crls(VALUE self)
624
624
  }
625
625
 
626
626
  static VALUE
627
- ossl_pkcs7_set_certs_i(VALUE i, VALUE arg)
627
+ ossl_pkcs7_set_certs_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, arg))
628
628
  {
629
629
  return ossl_pkcs7_add_certificate(arg, i);
630
630
  }
@@ -664,7 +664,7 @@ ossl_pkcs7_add_crl(VALUE self, VALUE crl)
664
664
  }
665
665
 
666
666
  static VALUE
667
- ossl_pkcs7_set_crls_i(VALUE i, VALUE arg)
667
+ ossl_pkcs7_set_crls_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, arg))
668
668
  {
669
669
  return ossl_pkcs7_add_crl(arg, i);
670
670
  }
@@ -112,7 +112,7 @@ ossl_pkey_new_from_file(VALUE filename)
112
112
  if (!(fp = fopen(RSTRING_PTR(filename), "r"))) {
113
113
  ossl_raise(ePKeyError, "%s", strerror(errno));
114
114
  }
115
- rb_update_max_fd(fileno(fp));
115
+ rb_fd_fix_cloexec(fileno(fp));
116
116
 
117
117
  pkey = PEM_read_PrivateKey(fp, NULL, ossl_pem_passwd_cb, NULL);
118
118
  fclose(fp);
@@ -318,13 +318,16 @@ ossl_pkey_verify(VALUE self, VALUE digest, VALUE sig, VALUE data)
318
318
  {
319
319
  EVP_PKEY *pkey;
320
320
  EVP_MD_CTX ctx;
321
+ int result;
321
322
 
322
323
  GetPKey(self, pkey);
323
- EVP_VerifyInit(&ctx, GetDigestPtr(digest));
324
324
  StringValue(sig);
325
325
  StringValue(data);
326
+ EVP_VerifyInit(&ctx, GetDigestPtr(digest));
326
327
  EVP_VerifyUpdate(&ctx, RSTRING_PTR(data), RSTRING_LEN(data));
327
- switch (EVP_VerifyFinal(&ctx, (unsigned char *)RSTRING_PTR(sig), RSTRING_LENINT(sig), pkey)) {
328
+ result = EVP_VerifyFinal(&ctx, (unsigned char *)RSTRING_PTR(sig), RSTRING_LENINT(sig), pkey);
329
+ EVP_MD_CTX_cleanup(&ctx);
330
+ switch (result) {
328
331
  case 0:
329
332
  return Qfalse;
330
333
  case 1:
@@ -278,7 +278,9 @@ ossl_dh_is_private(VALUE self)
278
278
 
279
279
  /*
280
280
  * call-seq:
281
+ * dh.export -> aString
281
282
  * dh.to_pem -> aString
283
+ * dh.to_s -> aString
282
284
  *
283
285
  * Encodes this DH to its PEM encoding. Note that any existing per-session
284
286
  * public/private keys will *not* get encoded, just the Diffie-Hellman
@@ -428,7 +430,7 @@ ossl_dh_to_public_key(VALUE self)
428
430
 
429
431
  /*
430
432
  * call-seq:
431
- * dh.check_params -> true | false
433
+ * dh.params_ok? -> true | false
432
434
  *
433
435
  * Validates the Diffie-Hellman parameters associated with this instance.
434
436
  * It checks whether a safe prime and a suitable generator are used. If this
@@ -619,7 +621,7 @@ Init_ossl_dh()
619
621
  *
620
622
  * === Example of a key exchange
621
623
  * dh1 = OpenSSL::PKey::DH.new(2048)
622
- * params = dh1.public_key.to_der #you may send this publicly to the participating party
624
+ * der = dh1.public_key.to_der #you may send this publicly to the participating party
623
625
  * dh2 = OpenSSL::PKey::DH.new(der)
624
626
  * dh2.generate_key! #generate the per-session key pair
625
627
  * symm_key1 = dh1.compute_key(dh2.pub_key)
@@ -662,4 +664,3 @@ Init_ossl_dh()
662
664
  {
663
665
  }
664
666
  #endif /* NO_DH */
665
-
@@ -291,7 +291,9 @@ ossl_dsa_is_private(VALUE self)
291
291
 
292
292
  /*
293
293
  * call-seq:
294
+ * dsa.export([cipher, password]) -> aString
294
295
  * dsa.to_pem([cipher, password]) -> aString
296
+ * dsa.to_s([cipher, password]) -> aString
295
297
  *
296
298
  * Encodes this DSA to its PEM encoding.
297
299
  *
@@ -533,8 +533,8 @@ static VALUE ossl_ec_key_to_string(VALUE self, VALUE ciph, VALUE pass, int forma
533
533
 
534
534
  /*
535
535
  * call-seq:
536
- * key.export => String
537
- * key.export(cipher, pass_phrase) => String
536
+ * key.export([cipher, pass_phrase]) => String
537
+ * key.to_pem([cipher, pass_phrase]) => String
538
538
  *
539
539
  * Outputs the EC key in PEM encoding. If +cipher+ and +pass_phrase+ are
540
540
  * given they will be used to encrypt the key. +cipher+ must be an
@@ -847,6 +847,7 @@ static VALUE ossl_ec_group_initialize(int argc, VALUE *argv, VALUE self)
847
847
  }
848
848
 
849
849
  /* call-seq:
850
+ * group1.eql?(group2) => true | false
850
851
  * group1 == group2 => true | false
851
852
  *
852
853
  */
@@ -1316,6 +1317,7 @@ static VALUE ossl_ec_point_initialize(int argc, VALUE *argv, VALUE self)
1316
1317
 
1317
1318
  /*
1318
1319
  * call-seq:
1320
+ * point1.eql?(point2) => true | false
1319
1321
  * point1 == point2 => true | false
1320
1322
  *
1321
1323
  */
@@ -291,8 +291,9 @@ ossl_rsa_is_private(VALUE self)
291
291
 
292
292
  /*
293
293
  * call-seq:
294
- * rsa.to_pem => PEM-format String
295
- * rsa.to_pem(cipher, pass_phrase) => PEM-format String
294
+ * rsa.export([cipher, pass_phrase]) => PEM-format String
295
+ * rsa.to_pem([cipher, pass_phrase]) => PEM-format String
296
+ * rsa.to_s([cipher, pass_phrase]) => PEM-format String
296
297
  *
297
298
  * Outputs this keypair in PEM encoding. If +cipher+ and +pass_phrase+ are
298
299
  * given they will be used to encrypt the key. +cipher+ must be an