Class: OpenSSL::Timestamp::Request
- Inherits:
-
Object
- Object
- OpenSSL::Timestamp::Request
- Defined in:
- ossl_ts.c,
ossl_ts.c
Overview
Allows to create timestamp requests or parse existing ones. A Request is also needed for creating timestamps from scratch with Factory. When created from scratch, some default values are set:
-
version is set to
1
-
cert_requested is set to
true
-
algorithm, message_imprint, policy_id, and nonce are set to
false
Instance Method Summary collapse
-
#algorithm ⇒ Object
Returns the ‘short name’ of the object identifier that represents the algorithm that was used to create the message imprint digest.
-
#algorithm=(algo) ⇒ Object
Allows to set the object identifier or the ‘short name’ of the algorithm that was used to create the message imprint digest.
-
#cert_requested=(requested) ⇒ Object
Specify whether the response shall contain the timestamp authority’s certificate or not.
-
#cert_requested? ⇒ Boolean
Indicates whether the response shall contain the timestamp authority’s certificate or not.
-
#initialize(*args) ⇒ Object
constructor
When creating a Request with the
File
orstring
parameter, the correspondingFile
orstring
must be DER-encoded. -
#message_imprint ⇒ Object
Returns the message imprint (digest) of the data to be timestamped.
-
#message_imprint=(hash) ⇒ Object
Set the message imprint digest.
-
#nonce ⇒ Object
Returns the nonce (number used once) that the server shall include in its response.
-
#nonce=(num) ⇒ Object
Sets the nonce (number used once) that the server shall include in its response.
-
#policy_id ⇒ Object
Returns the ‘short name’ of the object identifier that represents the timestamp policy under which the server shall create the timestamp.
-
#policy_id=(oid) ⇒ Object
Allows to set the object identifier that represents the timestamp policy under which the server shall create the timestamp.
-
#to_der ⇒ Object
DER-encodes this Request.
- #to_text ⇒ Object
-
#version ⇒ Object
Returns the version of this request.
-
#version=(version) ⇒ Object
Sets the version number for this Request.
Constructor Details
#initialize(*args) ⇒ Object
When creating a Request with the File
or string
parameter, the corresponding File
or string
must be DER-encoded.
call-seq:
OpenSSL::Timestamp::Request.new(file) -> request
OpenSSL::Timestamp::Request.new(string) -> request
OpenSSL::Timestamp::Request.new -> empty request
202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 |
# File 'ossl_ts.c', line 202 static VALUE ossl_ts_req_initialize(int argc, VALUE *argv, VALUE self) { TS_REQ *ts_req = DATA_PTR(self); BIO *in; VALUE arg; if(rb_scan_args(argc, argv, "01", &arg) == 0) { return self; } arg = ossl_to_der_if_possible(arg); in = ossl_obj2bio(&arg); ts_req = d2i_TS_REQ_bio(in, &ts_req); BIO_free(in); if (!ts_req) { DATA_PTR(self) = NULL; ossl_raise(eTimestampError, "Error when decoding the timestamp request"); } DATA_PTR(self) = ts_req; return self; } |
Instance Method Details
#algorithm ⇒ Object
Returns the ‘short name’ of the object identifier that represents the algorithm that was used to create the message imprint digest.
call-seq:
request.algorithm -> string
233 234 235 236 237 238 239 240 241 242 243 244 |
# File 'ossl_ts.c', line 233 static VALUE ossl_ts_req_get_algorithm(VALUE self) { TS_REQ *req; TS_MSG_IMPRINT *mi; X509_ALGOR *algor; GetTSRequest(self, req); mi = TS_REQ_get_msg_imprint(req); algor = TS_MSG_IMPRINT_get_algo(mi); return get_asn1obj(algor->algorithm); } |
#algorithm=(algo) ⇒ Object
Allows to set the object identifier or the ‘short name’ of the algorithm that was used to create the message imprint digest.
Example:
request.algorithm = "SHA1"
call-seq:
request.algorithm = "string" -> string
256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 |
# File 'ossl_ts.c', line 256 static VALUE ossl_ts_req_set_algorithm(VALUE self, VALUE algo) { TS_REQ *req; TS_MSG_IMPRINT *mi; ASN1_OBJECT *obj; X509_ALGOR *algor; GetTSRequest(self, req); obj = obj_to_asn1obj(algo); mi = TS_REQ_get_msg_imprint(req); algor = TS_MSG_IMPRINT_get_algo(mi); if (!X509_ALGOR_set0(algor, obj, V_ASN1_NULL, NULL)) { ASN1_OBJECT_free(obj); ossl_raise(eTimestampError, "X509_ALGOR_set0"); } return algo; } |
#cert_requested=(requested) ⇒ Object
Specify whether the response shall contain the timestamp authority’s certificate or not. The default value is true
.
call-seq:
request.cert_requested = boolean -> true or false
470 471 472 473 474 475 476 477 478 479 |
# File 'ossl_ts.c', line 470 static VALUE ossl_ts_req_set_cert_requested(VALUE self, VALUE requested) { TS_REQ *req; GetTSRequest(self, req); TS_REQ_set_cert_req(req, RTEST(requested)); return requested; } |
#cert_requested? ⇒ Boolean
Indicates whether the response shall contain the timestamp authority’s certificate or not.
call-seq:
request.cert_requested? -> true or false
454 455 456 457 458 459 460 461 |
# File 'ossl_ts.c', line 454 static VALUE ossl_ts_req_get_cert_requested(VALUE self) { TS_REQ *req; GetTSRequest(self, req); return TS_REQ_get_cert_req(req) ? Qtrue: Qfalse; } |
#message_imprint ⇒ Object
Returns the message imprint (digest) of the data to be timestamped.
call-seq:
request. -> string or nil
282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 |
# File 'ossl_ts.c', line 282 static VALUE ossl_ts_req_get_msg_imprint(VALUE self) { TS_REQ *req; TS_MSG_IMPRINT *mi; ASN1_OCTET_STRING *hashed_msg; VALUE ret; GetTSRequest(self, req); mi = TS_REQ_get_msg_imprint(req); hashed_msg = TS_MSG_IMPRINT_get_msg(mi); ret = rb_str_new((const char *)hashed_msg->data, hashed_msg->length); return ret; } |
#message_imprint=(hash) ⇒ Object
Set the message imprint digest.
call-seq:
request. = "string" -> string
305 306 307 308 309 310 311 312 313 314 315 316 317 318 |
# File 'ossl_ts.c', line 305 static VALUE ossl_ts_req_set_msg_imprint(VALUE self, VALUE hash) { TS_REQ *req; TS_MSG_IMPRINT *mi; StringValue(hash); GetTSRequest(self, req); mi = TS_REQ_get_msg_imprint(req); if (!TS_MSG_IMPRINT_set_msg(mi, (unsigned char *)RSTRING_PTR(hash), RSTRING_LENINT(hash))) ossl_raise(eTimestampError, "TS_MSG_IMPRINT_set_msg"); return hash; } |
#nonce ⇒ Object
Returns the nonce (number used once) that the server shall include in its response.
call-seq:
request.nonce -> BN or nil
411 412 413 414 415 416 417 418 419 420 421 |
# File 'ossl_ts.c', line 411 static VALUE ossl_ts_req_get_nonce(VALUE self) { TS_REQ *req; const ASN1_INTEGER * nonce; GetTSRequest(self, req); if (!(nonce = TS_REQ_get_nonce(req))) return Qnil; return asn1integer_to_num(nonce); } |
#nonce=(num) ⇒ Object
Sets the nonce (number used once) that the server shall include in its response. If the nonce is set, the server must return the same nonce value in a valid Response.
call-seq:
request.nonce = number -> BN
431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 |
# File 'ossl_ts.c', line 431 static VALUE ossl_ts_req_set_nonce(VALUE self, VALUE num) { TS_REQ *req; ASN1_INTEGER *nonce; int ok; GetTSRequest(self, req); nonce = num_to_asn1integer(num, NULL); ok = TS_REQ_set_nonce(req, nonce); ASN1_INTEGER_free(nonce); if (!ok) ossl_raise(eTimestampError, NULL); return num; } |
#policy_id ⇒ Object
Returns the ‘short name’ of the object identifier that represents the timestamp policy under which the server shall create the timestamp.
call-seq:
request.policy_id -> string or nil
364 365 366 367 368 369 370 371 372 373 |
# File 'ossl_ts.c', line 364 static VALUE ossl_ts_req_get_policy_id(VALUE self) { TS_REQ *req; GetTSRequest(self, req); if (!TS_REQ_get_policy_id(req)) return Qnil; return get_asn1obj(TS_REQ_get_policy_id(req)); } |
#policy_id=(oid) ⇒ Object
Allows to set the object identifier that represents the timestamp policy under which the server shall create the timestamp. This may be left nil
, implying that the timestamp server will issue the timestamp using some default policy.
Example:
request.policy_id = "1.2.3.4.5"
call-seq:
request.policy_id = "string" -> string
387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 |
# File 'ossl_ts.c', line 387 static VALUE ossl_ts_req_set_policy_id(VALUE self, VALUE oid) { TS_REQ *req; ASN1_OBJECT *obj; int ok; GetTSRequest(self, req); obj = obj_to_asn1obj(oid); ok = TS_REQ_set_policy_id(req, obj); ASN1_OBJECT_free(obj); if (!ok) ossl_raise(eTimestampError, "TS_REQ_set_policy_id"); return oid; } |
#to_der ⇒ Object
DER-encodes this Request.
call-seq:
request.to_der -> DER-encoded string
487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 |
# File 'ossl_ts.c', line 487 static VALUE ossl_ts_req_to_der(VALUE self) { TS_REQ *req; TS_MSG_IMPRINT *mi; X509_ALGOR *algo; ASN1_OCTET_STRING *hashed_msg; GetTSRequest(self, req); mi = TS_REQ_get_msg_imprint(req); algo = TS_MSG_IMPRINT_get_algo(mi); if (OBJ_obj2nid(algo->algorithm) == NID_undef) ossl_raise(eTimestampError, "Message imprint missing algorithm"); hashed_msg = TS_MSG_IMPRINT_get_msg(mi); if (!hashed_msg->length) ossl_raise(eTimestampError, "Message imprint missing hashed message"); return asn1_to_der((void *)req, (int (*)(void *, unsigned char **))i2d_TS_REQ); } |
#to_text ⇒ Object
509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 |
# File 'ossl_ts.c', line 509 static VALUE ossl_ts_req_to_text(VALUE self) { TS_REQ *req; BIO *out; GetTSRequest(self, req); out = BIO_new(BIO_s_mem()); if (!out) ossl_raise(eTimestampError, NULL); if (!TS_REQ_print_bio(out, req)) { BIO_free(out); ossl_raise(eTimestampError, NULL); } return ossl_membio2str(out); } |
#version ⇒ Object
Returns the version of this request. 1
is the default value.
call-seq:
request.version -> Integer
326 327 328 329 330 331 332 333 |
# File 'ossl_ts.c', line 326 static VALUE ossl_ts_req_get_version(VALUE self) { TS_REQ *req; GetTSRequest(self, req); return LONG2NUM(TS_REQ_get_version(req)); } |
#version=(version) ⇒ Object
Sets the version number for this Request. This should be 1
for compliant servers.
call-seq:
request.version = number -> Integer
342 343 344 345 346 347 348 349 350 351 352 353 354 355 |
# File 'ossl_ts.c', line 342 static VALUE ossl_ts_req_set_version(VALUE self, VALUE version) { TS_REQ *req; long ver; if ((ver = NUM2LONG(version)) < 0) ossl_raise(eTimestampError, "version must be >= 0!"); GetTSRequest(self, req); if (!TS_REQ_set_version(req, ver)) ossl_raise(eTimestampError, "TS_REQ_set_version"); return version; } |