-
-
Notifications
You must be signed in to change notification settings - Fork 1.6k
/
certificate.cr
63 lines (53 loc) · 1.37 KB
/
certificate.cr
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
require "openssl/lib_crypto"
require "./extension"
require "./name"
# :nodoc;
module OpenSSL::X509
# :nodoc;
class Certificate
def initialize
@cert = LibCrypto.x509_new
raise Error.new("X509_new") if @cert.null?
end
def initialize(cert : LibCrypto::X509)
@cert = LibCrypto.x509_dup(cert)
raise Error.new("X509_dup") if @cert.null?
end
def finalize
LibCrypto.x509_free(@cert)
end
def dup
self.class.new(@cert)
end
def to_unsafe
@cert
end
def subject
subject = LibCrypto.x509_get_subject_name(@cert)
raise Error.new("X509_get_subject_name") if subject.null?
Name.new(subject)
end
# Sets the subject.
#
# Refer to `Name.parse` for the format.
def subject=(subject : String)
self.subject = Name.parse(subject)
end
def subject=(subject : Name)
ret = LibCrypto.x509_set_subject_name(@cert, subject)
raise Error.new("X509_set_subject_name") if ret == 0
subject
end
def extensions
count = LibCrypto.x509_get_ext_count(@cert)
Array(Extension).new(count) do |i|
Extension.new(LibCrypto.x509_get_ext(@cert, i))
end
end
def add_extension(extension : Extension)
ret = LibCrypto.x509_add_ext(@cert, extension, -1)
raise Error.new("X509_add_ext") if ret.null?
extension
end
end
end