botan 0.1.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.
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ # (c) 2017 Ribose Inc.
4
+
5
+ module Botan
6
+ DEFAULT_KDF_ALGO = 'KDF2(SHA-256)'
7
+ DEFAULT_KDF_SALT_LENGTH = 16
8
+ DEFAULT_KDF_ITERATIONS = 100_000
9
+ DEFAULT_PBKDF_ALGO = 'PBKDF2(SHA-256)'
10
+
11
+ DEFAULT_EME = 'EME1(SHA-256)'
12
+ DEFAULT_EMSA = { 'RSA' => 'EMSA4(SHA-256)',
13
+ 'DSA' => 'EMSA1(SHA-256)',
14
+ 'ECDSA' => 'EMSA1(SHA-256)',
15
+ 'ECKCDSA' => 'EMSA1(SHA-256)',
16
+ 'ECGDSA' => 'EMSA1(SHA-256)',
17
+ 'GOST-34.10' => 'EMSA1(SHA-256)' }.freeze
18
+
19
+ DEFAULT_AEAD = 'AES-256/OCB'
20
+ end # module
21
+
@@ -0,0 +1,145 @@
1
+ # frozen_string_literal: true
2
+
3
+ # (c) 2017 Ribose Inc.
4
+
5
+ require 'digest'
6
+ require 'ffi'
7
+
8
+ require 'botan/error'
9
+ require 'botan/ffi/libbotan'
10
+ require 'botan/utils'
11
+
12
+ module Botan
13
+ # Class for calculating message digests using Botan's hash functions.
14
+ #
15
+ # This should behave nearly identically to {::Digest} and {OpenSSL::Digest}.
16
+ # Some differences are:
17
+ #
18
+ # * Algorithm names. Example: OpenSSL expects `RIPEMD160`, Botan
19
+ # uses `RIPEMD-160`.
20
+ # * OIDs. Not currently supported.
21
+ #
22
+ # == Examples
23
+ # === examples/digest.rb
24
+ # {include:file:examples/digest.rb}
25
+ class Digest < ::Digest::Class
26
+ attr_reader :name
27
+ # @api private
28
+ attr_reader :ptr
29
+
30
+ def initialize(algo)
31
+ @name = algo
32
+ flags = 0
33
+ ptr = FFI::MemoryPointer.new(:pointer)
34
+ Botan.call_ffi(:botan_hash_init, ptr, algo, flags)
35
+ ptr = ptr.read_pointer
36
+ raise Botan::Error, 'botan_hash_init returned NULL' if ptr.null?
37
+ @ptr = FFI::AutoPointer.new(ptr, self.class.method(:destroy))
38
+ end
39
+
40
+ def initialize_copy(source)
41
+ @name = source.name
42
+ ptr = FFI::MemoryPointer.new(:pointer)
43
+ Botan.call_ffi(:botan_hash_copy_state, ptr, source.ptr)
44
+ ptr = ptr.read_pointer
45
+ @ptr = FFI::AutoPointer.new(ptr, self.class.method(:destroy))
46
+ end
47
+
48
+ # @api private
49
+ def self.destroy(ptr)
50
+ LibBotan.botan_hash_destroy(ptr)
51
+ end
52
+
53
+ def self.digest(name, data)
54
+ super(data, name)
55
+ end
56
+
57
+ {
58
+ SHA1: 'SHA-1',
59
+ SHA224: 'SHA-224',
60
+ SHA256: 'SHA-256',
61
+ SHA384: 'SHA-384',
62
+ SHA512: 'SHA-512',
63
+ SHA512_256: 'SHA-512-256',
64
+ RMD160: 'RIPEMD-160',
65
+ WHIRLPOOL: 'Whirlpool',
66
+ MD5: 'MD5',
67
+ MD4: 'MD4',
68
+ GOST3411: 'GOST-34.11',
69
+ ADLER32: 'Adler32',
70
+ CRC24: 'CRC24',
71
+ CRC32: 'CRC32',
72
+ SM3: 'SM3'
73
+ }.each do |class_name, algo|
74
+ klass = Class.new(self) do
75
+ define_method(:initialize, lambda do |data = nil|
76
+ super(algo)
77
+ update(data) if data
78
+ end)
79
+ end
80
+ singleton = (class << klass; self; end)
81
+ singleton.class_eval do
82
+ define_method(:digest) { |data| new.digest(data) }
83
+ define_method(:hexdigest) { |data| new.hexdigest(data) }
84
+ end
85
+ const_set(class_name, klass)
86
+ end
87
+
88
+ # Retrieve the block length for the hash.
89
+ #
90
+ # @return [Integer]
91
+ def block_length
92
+ length_ptr = FFI::MemoryPointer.new(:size_t)
93
+ Botan.call_ffi(:botan_hash_block_size, @ptr, length_ptr)
94
+ length_ptr.read(:size_t)
95
+ end
96
+
97
+ # Retrieve the length of the digest.
98
+ #
99
+ # @return [Integer]
100
+ def digest_length
101
+ length_ptr = FFI::MemoryPointer.new(:size_t)
102
+ Botan.call_ffi(:botan_hash_output_length, @ptr, length_ptr)
103
+ length_ptr.read(:size_t)
104
+ end
105
+
106
+ # Adds input to the digest computation.
107
+ #
108
+ # @param [String] data
109
+ # @return [self]
110
+ def update(data)
111
+ Botan.call_ffi(:botan_hash_update, @ptr, data, data.bytesize)
112
+ self
113
+ end
114
+
115
+ # Resets the instace back to a clean state, as if no data has
116
+ # been supplied.
117
+ #
118
+ # @return [self]
119
+ def reset
120
+ Botan.call_ffi(:botan_hash_clear, @ptr)
121
+ self
122
+ end
123
+
124
+ alias << update
125
+
126
+ private
127
+
128
+ def finish
129
+ out_buf = FFI::MemoryPointer.new(:uint8, digest_length)
130
+ Botan.call_ffi(:botan_hash_final, @ptr, out_buf)
131
+ out_buf.read_bytes(out_buf.size)
132
+ end
133
+ end # class
134
+
135
+ # Returns a Digest subclass by name.
136
+ #
137
+ # @param algo [String] the hash algorithm name
138
+ # @return [Class]
139
+ def Digest(algo)
140
+ Botan::Digest.const_get(algo)
141
+ end
142
+
143
+ module_function :Digest
144
+ end # module
145
+
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ # (c) 2017 Ribose Inc.
4
+
5
+ module Botan
6
+ class Error < ::StandardError; end
7
+ end # module
8
+
@@ -0,0 +1,573 @@
1
+ # frozen_string_literal: true
2
+
3
+ # (c) 2017 Ribose Inc.
4
+
5
+ require 'ffi'
6
+
7
+ # @api private
8
+ module LibBotan
9
+ extend FFI::Library
10
+ ffi_lib 'libbotan-2'
11
+
12
+ # Versioning
13
+ attach_function :botan_ffi_api_version,
14
+ [],
15
+ :uint32
16
+ attach_function :botan_ffi_supports_api,
17
+ [:uint32],
18
+ :int
19
+ attach_function :botan_version_string,
20
+ [],
21
+ :string
22
+ attach_function :botan_version_major,
23
+ [],
24
+ :uint32
25
+ attach_function :botan_version_minor,
26
+ [],
27
+ :uint32
28
+ attach_function :botan_version_patch,
29
+ [],
30
+ :uint32
31
+ attach_function :botan_version_datestamp,
32
+ [],
33
+ :uint32
34
+
35
+ if botan_ffi_supports_api(2017_03_27) != 0
36
+ raise 'The Botan library does not support the FFI API expected by this' \
37
+ ' version of the Ruby module'
38
+ end
39
+
40
+ # Utility Functions
41
+ attach_function :botan_same_mem,
42
+ %i[pointer pointer size_t],
43
+ :int
44
+ attach_function :botan_hex_encode,
45
+ %i[pointer size_t pointer uint32],
46
+ :int
47
+
48
+ # Random Number Generators
49
+ attach_function :botan_rng_init,
50
+ %i[pointer string],
51
+ :int
52
+ attach_function :botan_rng_get,
53
+ %i[pointer pointer size_t],
54
+ :int
55
+ attach_function :botan_rng_reseed,
56
+ %i[pointer size_t],
57
+ :int
58
+ attach_function :botan_rng_destroy,
59
+ [:pointer],
60
+ :int
61
+
62
+ # Hash Functions
63
+ attach_function :botan_hash_init,
64
+ %i[pointer string uint32],
65
+ :int
66
+ attach_function :botan_hash_copy_state,
67
+ %i[pointer pointer],
68
+ :int
69
+ attach_function :botan_hash_output_length,
70
+ %i[pointer pointer],
71
+ :int
72
+ attach_function :botan_hash_block_size,
73
+ %i[pointer pointer],
74
+ :int
75
+ attach_function :botan_hash_update,
76
+ %i[pointer pointer size_t],
77
+ :int
78
+ attach_function :botan_hash_final,
79
+ %i[pointer pointer],
80
+ :int
81
+ attach_function :botan_hash_clear,
82
+ [:pointer],
83
+ :int
84
+ attach_function :botan_hash_destroy,
85
+ [:pointer],
86
+ :int
87
+ # Missing implementation
88
+ # attach_function :botan_hash_name,
89
+ # [:pointer, :string, :size_t],
90
+ # :int
91
+
92
+ # Message Authentication Codes
93
+ attach_function :botan_mac_init,
94
+ %i[pointer string uint32],
95
+ :int
96
+ attach_function :botan_mac_output_length,
97
+ %i[pointer pointer],
98
+ :int
99
+ attach_function :botan_mac_set_key,
100
+ %i[pointer pointer size_t],
101
+ :int
102
+ attach_function :botan_mac_update,
103
+ %i[pointer pointer size_t],
104
+ :int
105
+ attach_function :botan_mac_final,
106
+ %i[pointer pointer],
107
+ :int
108
+ attach_function :botan_mac_clear,
109
+ [:pointer],
110
+ :int
111
+ attach_function :botan_mac_destroy,
112
+ [:pointer],
113
+ :int
114
+
115
+ # Ciphers
116
+ attach_function :botan_cipher_init,
117
+ %i[pointer string uint32],
118
+ :int
119
+ attach_function :botan_cipher_valid_nonce_length,
120
+ %i[pointer size_t],
121
+ :int
122
+ attach_function :botan_cipher_get_tag_length,
123
+ %i[pointer pointer],
124
+ :int
125
+ attach_function :botan_cipher_get_default_nonce_length,
126
+ %i[pointer pointer],
127
+ :int
128
+ attach_function :botan_cipher_get_update_granularity,
129
+ %i[pointer pointer],
130
+ :int
131
+ attach_function :botan_cipher_query_keylen,
132
+ %i[pointer pointer pointer],
133
+ :int
134
+ attach_function :botan_cipher_set_key,
135
+ %i[pointer pointer size_t],
136
+ :int
137
+ attach_function :botan_cipher_set_associated_data,
138
+ %i[pointer pointer size_t],
139
+ :int
140
+ attach_function :botan_cipher_start,
141
+ %i[pointer pointer size_t],
142
+ :int
143
+ attach_function :botan_cipher_update,
144
+ %i[pointer uint32 pointer size_t
145
+ pointer pointer size_t pointer],
146
+ :int
147
+ attach_function :botan_cipher_clear,
148
+ [:pointer],
149
+ :int
150
+ attach_function :botan_cipher_destroy,
151
+ [:pointer],
152
+ :int
153
+
154
+ # PBKDF
155
+ attach_function :botan_pbkdf,
156
+ %i[string pointer size_t string pointer size_t size_t],
157
+ :int
158
+ attach_function :botan_pbkdf_timed,
159
+ %i[string pointer size_t string
160
+ pointer size_t size_t pointer],
161
+ :int
162
+
163
+ # KDF
164
+ attach_function :botan_kdf,
165
+ %i[string pointer size_t pointer size_t
166
+ pointer size_t pointer size_t],
167
+ :int
168
+
169
+ # Password Hashing
170
+ attach_function :botan_bcrypt_generate,
171
+ %i[pointer pointer string pointer size_t uint32],
172
+ :int
173
+ attach_function :botan_bcrypt_is_valid,
174
+ %i[string pointer],
175
+ :int
176
+
177
+ # Block Ciphers
178
+ attach_function :botan_block_cipher_init,
179
+ %i[pointer string],
180
+ :int
181
+ attach_function :botan_block_cipher_destroy,
182
+ [:pointer],
183
+ :int
184
+ attach_function :botan_block_cipher_clear,
185
+ [:pointer],
186
+ :int
187
+ attach_function :botan_block_cipher_set_key,
188
+ %i[pointer pointer size_t],
189
+ :int
190
+ attach_function :botan_block_cipher_block_size,
191
+ [:pointer],
192
+ :int
193
+ attach_function :botan_block_cipher_encrypt_blocks,
194
+ %i[pointer pointer pointer size_t],
195
+ :int
196
+ attach_function :botan_block_cipher_decrypt_blocks,
197
+ %i[pointer pointer pointer size_t],
198
+ :int
199
+
200
+ # Multiple Precision Integers
201
+ attach_function :botan_mp_init,
202
+ [:pointer],
203
+ :int
204
+ attach_function :botan_mp_destroy,
205
+ [:pointer],
206
+ :int
207
+ attach_function :botan_mp_to_hex,
208
+ %i[pointer pointer],
209
+ :int
210
+ attach_function :botan_mp_to_str,
211
+ %i[pointer uint8 pointer pointer],
212
+ :int
213
+ attach_function :botan_mp_clear,
214
+ [:pointer],
215
+ :int
216
+ attach_function :botan_mp_set_from_int,
217
+ %i[pointer int],
218
+ :int
219
+ attach_function :botan_mp_set_from_mp,
220
+ %i[pointer pointer],
221
+ :int
222
+ attach_function :botan_mp_set_from_str,
223
+ %i[pointer string],
224
+ :int
225
+ attach_function :botan_mp_set_from_radix_str,
226
+ %i[pointer string size_t],
227
+ :int
228
+ attach_function :botan_mp_num_bits,
229
+ %i[pointer pointer],
230
+ :int
231
+ attach_function :botan_mp_num_bytes,
232
+ %i[pointer pointer],
233
+ :int
234
+ attach_function :botan_mp_to_bin,
235
+ %i[pointer pointer],
236
+ :int
237
+ attach_function :botan_mp_from_bin,
238
+ %i[pointer pointer size_t],
239
+ :int
240
+ attach_function :botan_mp_to_uint32,
241
+ %i[pointer pointer],
242
+ :int
243
+ attach_function :botan_mp_is_positive,
244
+ [:pointer],
245
+ :int
246
+ attach_function :botan_mp_is_negative,
247
+ [:pointer],
248
+ :int
249
+ attach_function :botan_mp_flip_sign,
250
+ [:pointer],
251
+ :int
252
+ attach_function :botan_mp_is_zero,
253
+ [:pointer],
254
+ :int
255
+ attach_function :botan_mp_is_odd,
256
+ [:pointer],
257
+ :int
258
+ attach_function :botan_mp_is_even,
259
+ [:pointer],
260
+ :int
261
+ attach_function :botan_mp_add,
262
+ %i[pointer pointer pointer],
263
+ :int
264
+ attach_function :botan_mp_sub,
265
+ %i[pointer pointer pointer],
266
+ :int
267
+ attach_function :botan_mp_mul,
268
+ %i[pointer pointer pointer],
269
+ :int
270
+ attach_function :botan_mp_div,
271
+ %i[pointer pointer pointer pointer],
272
+ :int
273
+ attach_function :botan_mp_mod_mul,
274
+ %i[pointer pointer pointer pointer],
275
+ :int
276
+ attach_function :botan_mp_equal,
277
+ %i[pointer pointer],
278
+ :int
279
+ attach_function :botan_mp_cmp,
280
+ %i[pointer pointer pointer],
281
+ :int
282
+ attach_function :botan_mp_swap,
283
+ %i[pointer pointer],
284
+ :int
285
+ attach_function :botan_mp_powmod,
286
+ %i[pointer pointer pointer pointer],
287
+ :int
288
+ attach_function :botan_mp_lshift,
289
+ %i[pointer pointer size_t],
290
+ :int
291
+ attach_function :botan_mp_rshift,
292
+ %i[pointer pointer size_t],
293
+ :int
294
+ attach_function :botan_mp_mod_inverse,
295
+ %i[pointer pointer pointer],
296
+ :int
297
+ attach_function :botan_mp_rand_bits,
298
+ %i[pointer pointer size_t],
299
+ :int
300
+ attach_function :botan_mp_rand_range,
301
+ %i[pointer pointer pointer pointer],
302
+ :int
303
+ attach_function :botan_mp_gcd,
304
+ %i[pointer pointer pointer],
305
+ :int
306
+ attach_function :botan_mp_is_prime,
307
+ %i[pointer pointer size_t],
308
+ :int
309
+ attach_function :botan_mp_get_bit,
310
+ %i[pointer size_t],
311
+ :int
312
+ attach_function :botan_mp_set_bit,
313
+ %i[pointer size_t],
314
+ :int
315
+ attach_function :botan_mp_clear_bit,
316
+ %i[pointer size_t],
317
+ :int
318
+
319
+ # Public Key Creation, Import and Export
320
+ attach_function :botan_privkey_create,
321
+ %i[pointer string string pointer],
322
+ :int
323
+ attach_function :botan_privkey_check_key,
324
+ %i[pointer pointer uint32],
325
+ :int
326
+ attach_function :botan_privkey_create_rsa,
327
+ %i[pointer pointer size_t],
328
+ :int
329
+ attach_function :botan_privkey_create_ecdsa,
330
+ %i[pointer pointer string],
331
+ :int
332
+ attach_function :botan_privkey_create_ecdh,
333
+ %i[pointer pointer string],
334
+ :int
335
+ attach_function :botan_privkey_create_mceliece,
336
+ %i[pointer pointer size_t size_t],
337
+ :int
338
+ attach_function :botan_privkey_load,
339
+ %i[pointer pointer pointer size_t string],
340
+ :int
341
+ attach_function :botan_privkey_destroy,
342
+ [:pointer],
343
+ :int
344
+ attach_function :botan_privkey_export,
345
+ %i[pointer pointer pointer uint32],
346
+ :int
347
+ # Note: botan_privkey_export_encrypted is deprecated
348
+ attach_function :botan_privkey_export_encrypted,
349
+ %i[pointer pointer pointer pointer string string uint32],
350
+ :int
351
+ attach_function :botan_privkey_export_encrypted_pbkdf_msec,
352
+ %i[pointer pointer pointer pointer string
353
+ uint32 pointer string string uint32],
354
+ :int
355
+ attach_function :botan_privkey_export_encrypted_pbkdf_iter,
356
+ %i[pointer pointer pointer pointer
357
+ string size_t string string uint32],
358
+ :int
359
+ attach_function :botan_pubkey_load,
360
+ %i[pointer pointer size_t],
361
+ :int
362
+ attach_function :botan_privkey_export_pubkey,
363
+ %i[pointer pointer],
364
+ :int
365
+ attach_function :botan_pubkey_export,
366
+ %i[pointer pointer pointer uint32],
367
+ :int
368
+ attach_function :botan_pubkey_algo_name,
369
+ %i[pointer pointer pointer],
370
+ :int
371
+ attach_function :botan_pubkey_check_key,
372
+ %i[pointer pointer uint32],
373
+ :int
374
+ attach_function :botan_pubkey_estimated_strength,
375
+ %i[pointer pointer],
376
+ :int
377
+ attach_function :botan_pubkey_fingerprint,
378
+ %i[pointer string pointer pointer],
379
+ :int
380
+ attach_function :botan_pubkey_destroy,
381
+ [:pointer],
382
+ :int
383
+ attach_function :botan_pubkey_get_field,
384
+ %i[pointer pointer string],
385
+ :int
386
+ attach_function :botan_privkey_get_field,
387
+ %i[pointer pointer string],
388
+ :int
389
+
390
+ # RSA specific functions
391
+ attach_function :botan_privkey_load_rsa,
392
+ %i[pointer pointer pointer pointer],
393
+ :int
394
+ attach_function :botan_privkey_rsa_get_p,
395
+ %i[pointer pointer],
396
+ :int
397
+ attach_function :botan_privkey_rsa_get_q,
398
+ %i[pointer pointer],
399
+ :int
400
+ attach_function :botan_privkey_rsa_get_d,
401
+ %i[pointer pointer],
402
+ :int
403
+ attach_function :botan_privkey_rsa_get_n,
404
+ %i[pointer pointer],
405
+ :int
406
+ attach_function :botan_privkey_rsa_get_e,
407
+ %i[pointer pointer],
408
+ :int
409
+ attach_function :botan_pubkey_load_rsa,
410
+ %i[pointer pointer pointer],
411
+ :int
412
+ attach_function :botan_pubkey_rsa_get_e,
413
+ %i[pointer pointer],
414
+ :int
415
+ attach_function :botan_pubkey_rsa_get_n,
416
+ %i[pointer pointer],
417
+ :int
418
+
419
+ # DSA specific functions
420
+ attach_function :botan_privkey_load_dsa,
421
+ %i[pointer pointer pointer pointer pointer],
422
+ :int
423
+ attach_function :botan_pubkey_load_dsa,
424
+ %i[pointer pointer pointer pointer pointer],
425
+ :int
426
+ attach_function :botan_privkey_dsa_get_x,
427
+ %i[pointer pointer],
428
+ :int
429
+ attach_function :botan_pubkey_dsa_get_p,
430
+ %i[pointer pointer],
431
+ :int
432
+ attach_function :botan_pubkey_dsa_get_q,
433
+ %i[pointer pointer],
434
+ :int
435
+ attach_function :botan_pubkey_dsa_get_g,
436
+ %i[pointer pointer],
437
+ :int
438
+ attach_function :botan_pubkey_dsa_get_y,
439
+ %i[pointer pointer],
440
+ :int
441
+
442
+ # ElGamal specific functions
443
+ attach_function :botan_privkey_load_elgamal,
444
+ %i[pointer pointer pointer pointer],
445
+ :int
446
+ attach_function :botan_pubkey_load_elgamal,
447
+ %i[pointer pointer pointer pointer],
448
+ :int
449
+
450
+ # Public Key Encryption/Decryption
451
+ attach_function :botan_pk_op_encrypt_create,
452
+ %i[pointer pointer pointer uint32],
453
+ :int
454
+ attach_function :botan_pk_op_encrypt_destroy,
455
+ [:pointer],
456
+ :int
457
+ attach_function :botan_pk_op_encrypt,
458
+ %i[pointer pointer pointer pointer pointer size_t],
459
+ :int
460
+ attach_function :botan_pk_op_decrypt_create,
461
+ %i[pointer pointer pointer uint32],
462
+ :int
463
+ attach_function :botan_pk_op_decrypt_destroy,
464
+ [:pointer],
465
+ :int
466
+ attach_function :botan_pk_op_decrypt,
467
+ %i[pointer pointer pointer pointer size_t],
468
+ :int
469
+
470
+ # Signatures
471
+ attach_function :botan_pk_op_sign_create,
472
+ %i[pointer pointer pointer uint32],
473
+ :int
474
+ attach_function :botan_pk_op_sign_destroy,
475
+ [:pointer],
476
+ :int
477
+ attach_function :botan_pk_op_sign_update,
478
+ %i[pointer pointer size_t],
479
+ :int
480
+ attach_function :botan_pk_op_sign_finish,
481
+ %i[pointer pointer pointer pointer],
482
+ :int
483
+ attach_function :botan_pk_op_verify_create,
484
+ %i[pointer pointer pointer uint32],
485
+ :int
486
+ attach_function :botan_pk_op_verify_destroy,
487
+ [:pointer],
488
+ :int
489
+ attach_function :botan_pk_op_verify_update,
490
+ %i[pointer pointer size_t],
491
+ :int
492
+ attach_function :botan_pk_op_verify_finish,
493
+ %i[pointer pointer size_t],
494
+ :int
495
+
496
+ # Key Agreement
497
+ attach_function :botan_pk_op_key_agreement_create,
498
+ %i[pointer pointer string uint32],
499
+ :int
500
+ attach_function :botan_pk_op_key_agreement_destroy,
501
+ [:pointer],
502
+ :int
503
+ attach_function :botan_pk_op_key_agreement_export_public,
504
+ %i[pointer pointer pointer],
505
+ :int
506
+ attach_function :botan_pk_op_key_agreement,
507
+ %i[pointer pointer pointer pointer size_t pointer size_t],
508
+ :int
509
+ attach_function :botan_mceies_encrypt,
510
+ %i[pointer pointer string pointer size_t
511
+ pointer size_t pointer pointer],
512
+ :int
513
+ attach_function :botan_mceies_decrypt,
514
+ %i[pointer string pointer size_t
515
+ pointer size_t pointer pointer],
516
+ :int
517
+
518
+ # X.509 Certificates
519
+ attach_function :botan_x509_cert_load,
520
+ %i[pointer pointer size_t],
521
+ :int
522
+ attach_function :botan_x509_cert_load_file,
523
+ %i[pointer string],
524
+ :int
525
+ attach_function :botan_x509_cert_destroy,
526
+ [:pointer],
527
+ :int
528
+ # Missing implementation
529
+ # attach_function :botan_x509_cert_gen_selfsigned,
530
+ # [:pointer, :pointer, :pointer, :string, :string],
531
+ # :int
532
+ attach_function :botan_x509_cert_get_time_starts,
533
+ %i[pointer pointer pointer],
534
+ :int
535
+ attach_function :botan_x509_cert_get_time_expires,
536
+ %i[pointer pointer pointer],
537
+ :int
538
+ attach_function :botan_x509_cert_get_fingerprint,
539
+ %i[pointer string pointer pointer],
540
+ :int
541
+ attach_function :botan_x509_cert_get_serial_number,
542
+ %i[pointer pointer pointer],
543
+ :int
544
+ attach_function :botan_x509_cert_get_authority_key_id,
545
+ %i[pointer pointer pointer],
546
+ :int
547
+ attach_function :botan_x509_cert_get_subject_key_id,
548
+ %i[pointer pointer pointer],
549
+ :int
550
+ # Missing implementation
551
+ # attach_function :botan_x509_cert_path_verify,
552
+ # [:pointer, :string],
553
+ # :int
554
+ attach_function :botan_x509_cert_get_public_key_bits,
555
+ %i[pointer pointer pointer],
556
+ :int
557
+ attach_function :botan_x509_cert_get_public_key,
558
+ %i[pointer pointer],
559
+ :int
560
+ attach_function :botan_x509_cert_get_issuer_dn,
561
+ %i[pointer string size_t pointer pointer],
562
+ :int
563
+ attach_function :botan_x509_cert_get_subject_dn,
564
+ %i[pointer string size_t pointer pointer],
565
+ :int
566
+ attach_function :botan_x509_cert_to_string,
567
+ %i[pointer pointer pointer],
568
+ :int
569
+ attach_function :botan_x509_cert_allowed_usage,
570
+ %i[pointer uint],
571
+ :int
572
+ end # module
573
+