rnp 0.2.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.adoc +5 -0
  3. data/LICENSE.txt +21 -0
  4. data/README.adoc +3 -182
  5. data/lib/rnp.rb +12 -3
  6. data/lib/rnp/error.rb +40 -0
  7. data/lib/rnp/ffi/librnp.rb +306 -0
  8. data/lib/rnp/input.rb +99 -0
  9. data/lib/rnp/key.rb +275 -0
  10. data/lib/rnp/misc.rb +71 -0
  11. data/lib/rnp/op/encrypt.rb +181 -0
  12. data/lib/rnp/op/sign.rb +139 -0
  13. data/lib/rnp/op/verify.rb +147 -0
  14. data/lib/rnp/output.rb +121 -0
  15. data/lib/rnp/rnp.rb +595 -0
  16. data/lib/rnp/utils.rb +44 -0
  17. data/lib/rnp/version.rb +8 -3
  18. metadata +124 -50
  19. data/.gitignore +0 -12
  20. data/.rspec +0 -2
  21. data/.travis.yml +0 -5
  22. data/CODE_OF_CONDUCT.md +0 -74
  23. data/Gemfile +0 -4
  24. data/Rakefile +0 -6
  25. data/Use_Cases.adoc +0 -119
  26. data/bin/console +0 -14
  27. data/bin/setup +0 -8
  28. data/example-usage.rb +0 -766
  29. data/examples/highlevel/decrypt_mem.rb +0 -44
  30. data/examples/highlevel/encrypt_mem.rb +0 -46
  31. data/examples/lowlevel/decrypt_file.rb +0 -76
  32. data/examples/lowlevel/decrypt_mem.rb +0 -80
  33. data/examples/lowlevel/encrypt_file.rb +0 -68
  34. data/examples/lowlevel/encrypt_mem.rb +0 -75
  35. data/examples/lowlevel/load_pubkey.rb +0 -118
  36. data/examples/lowlevel/print_keyring_file.rb +0 -68
  37. data/examples/lowlevel/print_keyring_mem.rb +0 -96
  38. data/examples/lowlevel/sign_file.rb +0 -104
  39. data/examples/lowlevel/sign_mem.rb +0 -96
  40. data/examples/lowlevel/verify_file.rb +0 -55
  41. data/examples/lowlevel/verify_mem.rb +0 -61
  42. data/lib/rnp/highlevel.rb +0 -5
  43. data/lib/rnp/highlevel/constants.rb +0 -96
  44. data/lib/rnp/highlevel/keyring.rb +0 -259
  45. data/lib/rnp/highlevel/publickey.rb +0 -150
  46. data/lib/rnp/highlevel/secretkey.rb +0 -318
  47. data/lib/rnp/highlevel/utils.rb +0 -119
  48. data/lib/rnp/lowlevel.rb +0 -6
  49. data/lib/rnp/lowlevel/constants.rb +0 -11
  50. data/lib/rnp/lowlevel/dynarray.rb +0 -129
  51. data/lib/rnp/lowlevel/enums.rb +0 -243
  52. data/lib/rnp/lowlevel/libc.rb +0 -28
  53. data/lib/rnp/lowlevel/libopenssl.rb +0 -15
  54. data/lib/rnp/lowlevel/librnp.rb +0 -213
  55. data/lib/rnp/lowlevel/structs.rb +0 -541
  56. data/lib/rnp/lowlevel/utils.rb +0 -25
  57. data/rnp.gemspec +0 -35
  58. data/rnp/lib/rnp.rb +0 -5
  59. data/rnp/spec/rnp_spec.rb +0 -11
@@ -1,541 +0,0 @@
1
- require 'ffi'
2
-
3
- require_relative 'enums'
4
- require_relative 'constants'
5
-
6
- module LibRNP
7
- extend FFI::Library
8
-
9
- class PGPErrCode < FFI::Struct
10
- layout :errcode, :pgp_errcode_t
11
- end
12
-
13
- class PGPError < FFI::Struct
14
- layout :errcode, :pgp_errcode_t,
15
- :sys_errno, :int,
16
- :comment, :string,
17
- :file, :string,
18
- :line, :int,
19
- :next, :pointer
20
- end
21
-
22
- class PGPPTag < FFI::Struct
23
- layout :new_format, :uint,
24
- :type, :uint, #:pgp_content_enum?
25
- :length_type, :pgp_ptag_of_lt_t,
26
- :length, :uint,
27
- :position, :uint,
28
- :size, :uint
29
- end
30
-
31
- class PGPDSAPubKey < FFI::Struct
32
- layout :p, :pointer,
33
- :q, :pointer,
34
- :g, :pointer,
35
- :y, :pointer
36
- end
37
-
38
- class PGPRSAPubKey < FFI::Struct
39
- layout :n, :pointer,
40
- :e, :pointer
41
- end
42
-
43
- class PGPElGamalPubKey < FFI::Struct
44
- layout :p, :pointer,
45
- :g, :pointer,
46
- :y, :pointer
47
- end
48
-
49
- class PGPPubKeyU < FFI::Union
50
- layout :dsa, PGPDSAPubKey,
51
- :rsa, PGPRSAPubKey,
52
- :elgamal, PGPElGamalPubKey
53
- end
54
-
55
- class PGPPubKey < FFI::Struct
56
- layout :version, :pgp_version_t,
57
- :birthtime, :time_t,
58
- :duration, :time_t,
59
- :days_valid, :uint,
60
- :alg, :pgp_pubkey_alg_t,
61
- :key, PGPPubKeyU
62
-
63
- # Note: This is not a ManagedStruct because this struct is a non-pointer
64
- # member in other structs and that will cause issues.
65
- # Use FFI::AutoPointer.
66
- def self.release(ptr)
67
- LibRNP::pgp_pubkey_free(ptr)
68
- LibC::free(ptr)
69
- end
70
- end
71
-
72
- class PGPData < FFI::Struct
73
- layout :len, :size_t,
74
- :contents, :pointer,
75
- :mmapped, :uint8
76
- end
77
-
78
- class PGPRSASig < FFI::Struct
79
- layout :sig, :pointer
80
- end
81
-
82
- class PGPDSASig < FFI::Struct
83
- layout :r, :pointer,
84
- :s, :pointer
85
- end
86
-
87
- class PGPElGamalSig < FFI::Struct
88
- layout :r, :pointer,
89
- :s, :pointer
90
- end
91
-
92
- class PGPSigInfoU < FFI::Union
93
- layout :rsa, PGPRSASig,
94
- :dsa, PGPDSASig,
95
- :elgamal, PGPElGamalSig,
96
- :unknown, PGPData
97
- end
98
-
99
- class PGPSigInfo < FFI::Struct
100
- layout :version, :pgp_version_t,
101
- :type, :pgp_sig_type_t,
102
- :birthtime, :time_t,
103
- :duration, :time_t,
104
- :signer_id, [:uint8, PGP_KEY_ID_SIZE],
105
- :key_alg, :pgp_pubkey_alg_t,
106
- :hash_alg, :pgp_hash_alg_t,
107
- :sig, PGPSigInfoU,
108
- :v4_hashlen, :size_t,
109
- :v4_hashed, :pointer,
110
- :flags, :uint # bitfields
111
- end
112
-
113
- class PGPSig < FFI::Struct
114
- layout :info, PGPSigInfo,
115
- :hash2, [:uint8, 2],
116
- :v4_hashstart, :size_t,
117
- :hash, :pointer
118
- end
119
-
120
- class PGPSSRaw < FFI::Struct
121
- layout :tag, :pgp_content_enum,
122
- :length, :size_t,
123
- :raw, :pointer
124
- end
125
-
126
- class PGPSSTrust < FFI::Struct
127
- layout :level, :uint8,
128
- :amount, :uint8
129
- end
130
-
131
- class PGPSSNotation < FFI::Struct
132
- layout :flags, PGPData,
133
- :name, PGPData,
134
- :value, PGPData
135
- end
136
-
137
- class PGPSubPacket < FFI::Struct
138
- layout :length, :size_t,
139
- :raw, :pointer
140
- end
141
-
142
- class PGPOnePassSig < FFI::Struct
143
- layout :version, :uint8,
144
- :sig_type, :pgp_sig_type_t,
145
- :hash_alg, :pgp_hash_alg_t,
146
- :key_alg, :pgp_pubkey_alg_t,
147
- :keyid, [:uint8, PGP_KEY_ID_SIZE],
148
- :nested, :uint
149
- end
150
-
151
- class PGPSSRevocationKey < FFI::Struct
152
- layout :class, :uint8,
153
- :algid, :uint8,
154
- :fingerprint, [:uint8, PGP_FINGERPRINT_SIZE]
155
- end
156
-
157
- class PGPLitDataHeader < FFI::Struct
158
- layout :format, :pgp_litdata_enum,
159
- :filename, [:char, 256],
160
- :mtime, :time_t
161
- end
162
-
163
- class PGPLitDataBody < FFI::Struct
164
- layout :length, :uint,
165
- :data, :pointer,
166
- :mem, :pointer
167
- end
168
-
169
- class PGPDynBody < FFI::Struct
170
- layout :length, :uint,
171
- :data, :pointer
172
- end
173
-
174
- class PGPSSSigTarget < FFI::Struct
175
- layout :pka_alg, :pgp_pubkey_alg_t,
176
- :hash_alg, :pgp_hash_alg_t,
177
- :hash, PGPData
178
- end
179
-
180
- class PGPSSRevocation < FFI::Struct
181
- layout :code, :uint8,
182
- :reason, :string
183
- end
184
-
185
- class PGPRSASecKey < FFI::Struct
186
- layout :d, :pointer,
187
- :p, :pointer,
188
- :q, :pointer,
189
- :u, :pointer
190
- end
191
-
192
- class PGPDSASecKey < FFI::Struct
193
- layout :x, :pointer
194
- end
195
-
196
- class PGPElGamalSecKey < FFI::Struct
197
- layout :x, :pointer
198
- end
199
-
200
- class PGPSecKeyU < FFI::Union
201
- layout :rsa, PGPRSASecKey,
202
- :dsa, PGPDSASecKey,
203
- :elgamal, PGPElGamalSecKey
204
- end
205
-
206
- class PGPSecKey < FFI::Struct
207
- layout :pubkey, PGPPubKey,
208
- :s2k_usage, :pgp_s2k_usage_t,
209
- :s2k_specifier, :pgp_s2k_specifier_t,
210
- :alg, :pgp_symm_alg_t,
211
- :hash_alg, :pgp_hash_alg_t,
212
- :salt, [:uint8, PGP_SALT_SIZE],
213
- :octetc, :uint,
214
- :iv, [:uint8, PGP_MAX_BLOCK_SIZE],
215
- :key, PGPSecKeyU,
216
- :checksum, :uint,
217
- :checkhash, :pointer
218
- end
219
-
220
- class PGPHeaders < FFI::Struct
221
- layout :headers, :pointer,
222
- :headerc, :uint
223
- end
224
-
225
- class PGPArmourHeader < FFI::Struct
226
- layout :type, :string,
227
- :headers, PGPHeaders
228
- end
229
-
230
- class PGPFixedBody < FFI::Struct
231
- layout :length, :uint,
232
- :data, [:uint8, 8192]
233
- end
234
-
235
- class PGPHash < FFI::Struct
236
- layout :alg, :pgp_hash_alg_t,
237
- :size, :size_t,
238
- :name, :string,
239
- :init, :pointer,
240
- :add, :pointer,
241
- :data, :pointer
242
- end
243
-
244
- class PGPPKSessKeyParamsRSA < FFI::Struct
245
- layout :encrypted_m, :pointer,
246
- :m, :pointer
247
- end
248
-
249
- class PGPPKSessKeyParamsElGamal < FFI::Struct
250
- layout :g_to_k, :pointer,
251
- :encrypted_m, :pointer
252
- end
253
-
254
- class PGPPKSessKeyParamsU < FFI::Union
255
- layout :rsa, PGPPKSessKeyParamsRSA,
256
- :elgamal, PGPPKSessKeyParamsElGamal
257
- end
258
-
259
- class PGPPKSessKey < FFI::Struct
260
- layout :version, :uint,
261
- :key_id, [:uint8, PGP_KEY_ID_SIZE],
262
- :alg, :pgp_pubkey_alg_t,
263
- :params, PGPPKSessKeyParamsU,
264
- :symm_alg, :pgp_symm_alg_t,
265
- :key, [:uint8, PGP_MAX_KEY_SIZE],
266
- :checksum, :uint16
267
- end
268
-
269
- class PGPSecKeyPassphrase < FFI::Struct
270
- layout :seckey, :pointer,
271
- :passphrase, :pointer
272
- end
273
-
274
- class PGPGetSecKey < FFI::Struct
275
- layout :seckey, :pointer,
276
- :pk_sesskey, :pointer
277
- end
278
-
279
- class PGPContents < FFI::Union
280
- layout :error, :string,
281
- :errcode, PGPErrCode,
282
- :ptag, PGPPTag,
283
- :pubkey, PGPPubKey,
284
- :trust, PGPData,
285
- :userid, :string,
286
- :userattr, PGPData,
287
- :sig, PGPSig,
288
- :ss_raw, PGPSSRaw,
289
- :ss_trust, PGPSSTrust,
290
- :ss_revocable, :uint,
291
- :ss_time, :time_t,
292
- :ss_issuer, [:uint8, PGP_KEY_ID_SIZE],
293
- :ss_notation, PGPSSNotation,
294
- :packet, PGPSubPacket,
295
- :compressed, :pgp_compression_type_t,
296
- :one_pass_sig, PGPOnePassSig,
297
- :ss_skapref, PGPData,
298
- :ss_hashpref, PGPData,
299
- :ss_zpref, PGPData,
300
- :ss_key_flags, PGPData,
301
- :ss_key_server_prefs, PGPData,
302
- :ss_primary_userid, :uint,
303
- :ss_regexp, :string,
304
- :ss_policy, :string,
305
- :ss_keyserv, :string,
306
- :ss_revocation_key, PGPSSRevocationKey,
307
- :ss_userdef, PGPData,
308
- :ss_unknown, PGPData,
309
- :litdata_header, PGPLitDataHeader,
310
- :litdata_body, PGPLitDataBody,
311
- :mdc, PGPDynBody,
312
- :ss_features, PGPData,
313
- :ss_sig_target, PGPSSSigTarget,
314
- :ss_embedded_sig, PGPData,
315
- :ss_revocation, PGPSSRevocation,
316
- :seckey, PGPSecKey,
317
- :ss_signer, :pointer,
318
- :armour_header, PGPArmourHeader,
319
- :armour_trailer, :string,
320
- :cleartext_head, PGPHeaders,
321
- :cleartext_body, PGPFixedBody,
322
- :cleartext_trailer, PGPHash,
323
- :unarmoured_text, PGPDynBody,
324
- :pk_sesskey, PGPPKSessKey,
325
- :skey_passphrase, PGPSecKeyPassphrase,
326
- :se_ip_data_header, :uint,
327
- :se_ip_data_body, PGPDynBody,
328
- :se_data_body, PGPFixedBody,
329
- :get_seckey, PGPGetSecKey
330
- end
331
-
332
- class PGPPacket < FFI::Struct
333
- layout :tag, :pgp_content_enum,
334
- :critical, :uint8,
335
- :u, PGPContents
336
- end
337
-
338
- callback :pgp_reader_func,
339
- [:pointer, :pointer, :size_t, :pointer, :pointer, :pointer], :int
340
- callback :pgp_reader_destroyer,
341
- [:pointer], :void
342
- callback :pgp_cbfunc_t,
343
- [PGPPacket.by_ref, :pointer],
344
- :pgp_cb_ret_t
345
-
346
- class PGPReader < FFI::Struct
347
- layout :reader, :pgp_reader_func,
348
- :destroyer, :pgp_reader_destroyer,
349
- :arg, :pointer,
350
- :accumulate, :uint, # bitfield
351
- :accumulated, :pointer,
352
- :asize, :uint,
353
- :alength, :uint,
354
- :position, :uint,
355
- :next, :pointer,
356
- :parent, :pointer
357
- end
358
-
359
- class PGPCryptInfo < FFI::Struct
360
- layout :passphrase, :pointer,
361
- :secring, :pointer,
362
- :keydata, :pointer,
363
- :getpassphrase, :pointer,
364
- :pubring, :pointer
365
- end
366
-
367
- class PGPPrintState < FFI::Struct
368
- layout :unarmoured, :uint,
369
- :skipipng, :uint,
370
- :indent, :int
371
- end
372
-
373
- class PGPCBData < FFI::Struct
374
- layout :cbfunc, :pointer,
375
- :arg, :pointer,
376
- :errors, :pointer,
377
- :next, :pointer,
378
- :output, :pointer,
379
- :io, :pointer,
380
- :passfp, :pointer,
381
- :cryptinfo, PGPCryptInfo,
382
- :printstate, PGPPrintState,
383
- :sshseckey, :pointer,
384
- :numtries, :int,
385
- :gotpass, :int
386
- end
387
-
388
- class PGPCrypt < FFI::Struct
389
- PGP_MAX_BLOCK_SIZE = 16
390
- layout :alg, :pgp_symm_alg_t,
391
- :blocksize, :size_t,
392
- :keysize, :size_t,
393
- :set_iv, :pointer,
394
- :set_crypt_key, :pointer,
395
- :base_init, :pointer,
396
- :decrypt_resync, :pointer,
397
- :block_encrypt, :pointer,
398
- :block_decrypt, :pointer,
399
- :cfb_encrypt, :pointer,
400
- :cfb_decrypt, :pointer,
401
- :decrypt_finish, :pointer,
402
- :iv, [:uint8, PGP_MAX_BLOCK_SIZE],
403
- :civ, [:uint8, PGP_MAX_BLOCK_SIZE],
404
- :siv, [:uint8, PGP_MAX_BLOCK_SIZE],
405
- :key, [:uint8, PGP_MAX_KEY_SIZE],
406
- :num, :int,
407
- :encrypt_key, :pointer,
408
- :decrypt_key, :pointer
409
- end
410
-
411
- class PGPStream < FFI::ManagedStruct
412
- NTAGS = 0x100
413
- layout :ss_raw, [:uint8, NTAGS / 8],
414
- :ss_parsed, [:uint8, NTAGS / 8],
415
- :readinfo, PGPReader,
416
- :cbinfo, PGPCBData,
417
- :errors, :pointer,
418
- :io, :pointer,
419
- :decrypt, PGPCrypt,
420
- :cryptinfo, PGPCryptInfo,
421
- :hashc, :size_t,
422
- :hashes, :pointer,
423
- :flags, :uint, # bitfields
424
- :virtualc, :uint,
425
- :virtualoff, :uint,
426
- :virtualpkt, :pointer
427
-
428
- def self.release(ptr)
429
- LibRNP::pgp_stream_delete(ptr)
430
- end
431
- end
432
-
433
- class PGPIO < FFI::Struct
434
- layout :outs, :pointer,
435
- :errs, :pointer,
436
- :res, :pointer
437
- end
438
-
439
- class PGPKeyring < FFI::ManagedStruct
440
- layout :keyc, :uint,
441
- :keyvsize, :uint,
442
- :keys, :pointer,
443
- :hashtype, :pgp_hash_alg_t
444
-
445
- def self.release(ptr)
446
- LibRNP::pgp_keyring_free(ptr)
447
- LibC::free(ptr)
448
- end
449
-
450
- end
451
-
452
- class PGPKeyDataKey < FFI::Union
453
- layout :pubkey, PGPPubKey,
454
- :seckey, PGPSecKey
455
- end
456
-
457
- class PGPFingerprint < FFI::Struct
458
- layout :fingerprint, [:uint8, PGP_FINGERPRINT_SIZE],
459
- :length, :uint,
460
- :hashtype, :pgp_hash_alg_t
461
- end
462
-
463
- class PGPRevoke < FFI::Struct
464
- layout :uid, :uint32,
465
- :code, :uint8,
466
- :reason, :string
467
- end
468
-
469
- class PGPKey < FFI::Struct
470
- layout :uidc, :uint,
471
- :uidvsize, :uint,
472
- :uids, :pointer,
473
- :packetc, :uint,
474
- :packetvsize, :uint,
475
- :packets, :pointer,
476
- :subsigc, :uint,
477
- :subsigvsize, :uint,
478
- :subsigs, :pointer,
479
- :revokec, :uint,
480
- :revokevsize, :uint,
481
- :revokes, :pointer,
482
- :type, :pgp_content_enum,
483
- :key, PGPKeyDataKey,
484
- :sigkey, PGPPubKey,
485
- :sigid, [:uint8, PGP_KEY_ID_SIZE],
486
- :sigfingerprint, PGPFingerprint,
487
- :enckey, PGPPubKey,
488
- :encid, [:uint8, PGP_KEY_ID_SIZE],
489
- :encfingerprint, PGPFingerprint,
490
- :uid0, :uint32,
491
- :revoked, :uint8,
492
- :revocation, PGPRevoke
493
-
494
- def self.release(ptr)
495
- LibRNP::pgp_keydata_free(ptr)
496
- end
497
- end
498
-
499
- class PGPMemory < FFI::Struct
500
- layout :buf, :pointer,
501
- :length, :size_t,
502
- :allocated, :size_t,
503
- :mmapped, :uint
504
- end
505
-
506
- class PGPValidation < FFI::ManagedStruct
507
- layout :validc, :uint,
508
- :valid_sigs, :pointer,
509
- :invalidc, :uint,
510
- :invalid_sigs, :pointer,
511
- :unknownc, :uint,
512
- :unknown_sigs, :pointer,
513
- :birthtime, :time_t,
514
- :duration, :time_t
515
-
516
- def self.release(ptr)
517
- LibRNP::pgp_validate_result_free(ptr)
518
- end
519
- end
520
-
521
- class PGPWriter < FFI::Struct
522
- layout :writer, :pointer,
523
- :finaliser, :pointer,
524
- :destroyer, :pointer,
525
- :arg, :pointer,
526
- :next, :pointer,
527
- :io, :pointer
528
- end
529
-
530
- class PGPOutput < FFI::Struct
531
- layout :writer, PGPWriter,
532
- :errors, :pointer
533
- end
534
-
535
- class PGPFingerprint < FFI::Struct
536
- layout :fingerprint, [:uint8, PGP_FINGERPRINT_SIZE],
537
- :length, :uint,
538
- :hashtype, :pgp_hash_alg_t
539
- end
540
- end
541
-