mosquitto 0.2

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.
Files changed (78) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +21 -0
  3. data/.travis.yml +29 -0
  4. data/Gemfile +6 -0
  5. data/Gemfile.lock +25 -0
  6. data/LICENSE.md +13 -0
  7. data/README.md +244 -0
  8. data/Rakefile +42 -0
  9. data/TODO.md +19 -0
  10. data/examples/pub_sub.rb +41 -0
  11. data/ext/mosquitto/client.c +2163 -0
  12. data/ext/mosquitto/client.h +145 -0
  13. data/ext/mosquitto/extconf.rb +31 -0
  14. data/ext/mosquitto/message.c +168 -0
  15. data/ext/mosquitto/message.h +16 -0
  16. data/ext/mosquitto/mosquitto_ext.c +88 -0
  17. data/ext/mosquitto/mosquitto_ext.h +35 -0
  18. data/ext/mosquitto/mosquitto_prelude.h +26 -0
  19. data/ext/mosquitto/rubinius.h +6 -0
  20. data/ext/mosquitto/ruby18.h +6 -0
  21. data/ext/mosquitto/ruby19.h +9 -0
  22. data/ext/mosquitto/ruby2.h +6 -0
  23. data/lib/mosquitto.rb +11 -0
  24. data/lib/mosquitto/client.rb +8 -0
  25. data/lib/mosquitto/logging.rb +32 -0
  26. data/lib/mosquitto/version.rb +5 -0
  27. data/mosquitto.gemspec +23 -0
  28. data/test/helper.rb +59 -0
  29. data/test/ssl/all-ca.crt +75 -0
  30. data/test/ssl/client-expired.crt +61 -0
  31. data/test/ssl/client-revoked.crt +61 -0
  32. data/test/ssl/client-revoked.csr +12 -0
  33. data/test/ssl/client-revoked.key +15 -0
  34. data/test/ssl/client.crt +61 -0
  35. data/test/ssl/client.csr +12 -0
  36. data/test/ssl/client.key +15 -0
  37. data/test/ssl/crl.pem +10 -0
  38. data/test/ssl/demoCA/crlnumber +1 -0
  39. data/test/ssl/demoCA/index.txt +1 -0
  40. data/test/ssl/demoCA/index.txt.attr +1 -0
  41. data/test/ssl/demoCA/serial +1 -0
  42. data/test/ssl/gen.sh +70 -0
  43. data/test/ssl/mosquitto.org.crt +18 -0
  44. data/test/ssl/openssl.cnf +406 -0
  45. data/test/ssl/readme.txt +2 -0
  46. data/test/ssl/rootCA/crlnumber +1 -0
  47. data/test/ssl/rootCA/index.txt +2 -0
  48. data/test/ssl/rootCA/index.txt.attr +1 -0
  49. data/test/ssl/rootCA/serial +1 -0
  50. data/test/ssl/server-expired.crt +0 -0
  51. data/test/ssl/server.crt +60 -0
  52. data/test/ssl/server.csr +12 -0
  53. data/test/ssl/server.key +15 -0
  54. data/test/ssl/signingCA/crlnumber +1 -0
  55. data/test/ssl/signingCA/index.txt +4 -0
  56. data/test/ssl/signingCA/index.txt.attr +1 -0
  57. data/test/ssl/signingCA/serial +1 -0
  58. data/test/ssl/test-alt-ca.crt +58 -0
  59. data/test/ssl/test-alt-ca.key +15 -0
  60. data/test/ssl/test-bad-root-ca.crt +17 -0
  61. data/test/ssl/test-bad-root-ca.key +15 -0
  62. data/test/ssl/test-ca.srl +1 -0
  63. data/test/ssl/test-fake-root-ca.crt +17 -0
  64. data/test/ssl/test-fake-root-ca.key +15 -0
  65. data/test/ssl/test-root-ca.crt +17 -0
  66. data/test/ssl/test-root-ca.key +15 -0
  67. data/test/ssl/test-signing-ca.crt +58 -0
  68. data/test/ssl/test-signing-ca.key +15 -0
  69. data/test/test_callbacks.rb +93 -0
  70. data/test/test_client.rb +141 -0
  71. data/test/test_custom_logger.rb +30 -0
  72. data/test/test_integration.rb +572 -0
  73. data/test/test_loops.rb +56 -0
  74. data/test/test_mosquitto.rb +28 -0
  75. data/test/test_pub_sub.rb +51 -0
  76. data/test/test_threads.rb +69 -0
  77. data/test/test_tls.rb +67 -0
  78. metadata +203 -0
@@ -0,0 +1,35 @@
1
+ #ifndef MOSQUITTO_EXT_H
2
+ #define MOSQUITTO_EXT_H
3
+
4
+ #include <mosquitto.h>
5
+ #include <pthread.h>
6
+ #include "ruby.h"
7
+
8
+ #if defined(__GNUC__) && (__GNUC__ >= 3)
9
+ #define MOSQ_UNUSED __attribute__ ((unused))
10
+ #define MOSQ_NOINLINE __attribute__ ((noinline))
11
+ #else
12
+ #define MOSQ_UNUSED
13
+ #define MOSQ_NOINLINE
14
+ #endif
15
+
16
+ #include "mosquitto_prelude.h"
17
+
18
+ #include <ruby/encoding.h>
19
+ #include <ruby/io.h>
20
+ extern rb_encoding *binary_encoding;
21
+ #define MosquittoEncode(str) rb_enc_associate(str, binary_encoding)
22
+
23
+ #define MosquittoError(desc) rb_raise(rb_eMosquittoError, desc);
24
+
25
+ extern VALUE rb_mMosquitto;
26
+ extern VALUE rb_eMosquittoError;
27
+ extern VALUE rb_cMosquittoClient;
28
+ extern VALUE rb_cMosquittoMessage;
29
+
30
+ extern VALUE intern_call;
31
+
32
+ #include "client.h"
33
+ #include "message.h"
34
+
35
+ #endif
@@ -0,0 +1,26 @@
1
+ #ifndef MOSQUITTO_PRELUDE_H
2
+ #define MOSQUITTO_PRELUDE_H
3
+
4
+ #ifndef RFLOAT_VALUE
5
+ #define RFLOAT_VALUE(v) (RFLOAT(v)->value)
6
+ #endif
7
+
8
+ #if LIBMOSQUITTO_VERSION_NUMBER != 1002003
9
+ #error libmosquitto version 1.2.3 required
10
+ #endif
11
+
12
+ #ifdef RUBINIUS
13
+ #include "rubinius.h"
14
+ #else
15
+ #ifdef HAVE_RB_THREAD_BLOCKING_REGION
16
+ #include "ruby19.h"
17
+ #else
18
+ #ifdef HAVE_RB_THREAD_CALL_WITHOUT_GVL
19
+ #include "ruby2.h"
20
+ #else
21
+ #include "ruby18.h"
22
+ #endif
23
+ #endif
24
+ #endif
25
+
26
+ #endif
@@ -0,0 +1,6 @@
1
+ #ifndef MOSQUITTO_RUBINIUS_H
2
+ #define MOSQUITTO_RUBINIUS_H
3
+
4
+ #error Unsupported Ruby platform - this extension only works with Ruby 1.9 and Ruby 2.x
5
+
6
+ #endif
@@ -0,0 +1,6 @@
1
+ #ifndef MOSQUITTO_RUBY18_H
2
+ #define MOSQUITTO_RUBY18_H
3
+
4
+ #error Unsupported Ruby platform - this extension only works with Ruby 1.9 and Ruby 2.x
5
+
6
+ #endif
@@ -0,0 +1,9 @@
1
+ #ifndef MOSQUITTO_RUBY19_H
2
+ #define MOSQUITTO_RUBY19_H
3
+
4
+ #include "ruby/intern.h"
5
+
6
+ #define rb_thread_call_without_gvl(func, data1, ubf, data2) \
7
+ rb_thread_blocking_region((rb_blocking_function_t *)func, data1, ubf, data2)
8
+
9
+ #endif
@@ -0,0 +1,6 @@
1
+ #ifndef MOSQUITTO_RUBY2_H
2
+ #define MOSQUITTO_RUBY2_H
3
+
4
+ #include "ruby/thread.h"
5
+
6
+ #endif
data/lib/mosquitto.rb ADDED
@@ -0,0 +1,11 @@
1
+ # encoding: utf-8
2
+
3
+ begin
4
+ require "mosquitto/mosquitto_ext"
5
+ rescue LoadError
6
+ require "mosquitto_ext"
7
+ end
8
+
9
+ require 'mosquitto/version' unless defined? Mosquitto::VERSION
10
+
11
+ require 'mosquitto/client'
@@ -0,0 +1,8 @@
1
+ # encoding: utf-8
2
+
3
+ require 'logger'
4
+ require 'mosquitto/logging'
5
+
6
+ class Mosquitto::Client
7
+ include Mosquitto::Logging
8
+ end
@@ -0,0 +1,32 @@
1
+ # encoding: utf-8
2
+
3
+ module Mosquitto::Logging
4
+ LOG_LEVELS = {
5
+ Mosquitto::LOG_ERR => Logger::FATAL,
6
+ Mosquitto::LOG_ERR => Logger::ERROR,
7
+ Mosquitto::LOG_WARNING => Logger::WARN,
8
+ Mosquitto::LOG_INFO => Logger::INFO,
9
+ Mosquitto::LOG_DEBUG => Logger::DEBUG
10
+ }
11
+
12
+ # Pipes libmosquitto log messages to a Ruby logger instance.
13
+ #
14
+ # @param logger [String] a Ruby logger instance. Compatible with SyslogLogger and other
15
+ # implementations as well.
16
+ # @raise [Argument] on invalid input params
17
+ # @example
18
+ # client.logger = Logger.new(STDOUT)
19
+ #
20
+ def logger=(obj)
21
+ unless obj.respond_to?(:add) and obj.method(:add).arity != 3
22
+ raise ArgumentError, "invalid Logger instance #{obj.inspect}"
23
+ end
24
+
25
+ @logger = obj
26
+
27
+ on_log do |level, message|
28
+ severity = LOG_LEVELS[level] || Logger::UNKNOWN
29
+ @logger.add(severity, message.to_s, "MQTT")
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,5 @@
1
+ # encoding: utf-8
2
+
3
+ module Mosquitto
4
+ VERSION = "0.2"
5
+ end
data/mosquitto.gemspec ADDED
@@ -0,0 +1,23 @@
1
+ # encoding: utf-8
2
+
3
+ require File.expand_path('../lib/mosquitto/version', __FILE__)
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "mosquitto"
7
+ s.version = Mosquitto::VERSION
8
+ s.summary = "mosquitto - a high perf MQTT 3.1 client"
9
+ s.description = "Ruby binding against libmosquitto (http://mosquitto.org/) - a high performance MQTT protocol (http://mqtt.org) client"
10
+ s.authors = ["Lourens Naudé", "Bear Metal OÜ"]
11
+ s.email = ["lourens@methodmissing.com", "info@bearmetal.eu"]
12
+ s.homepage = "http://github.com/bear-metal/mosquitto"
13
+ s.date = Time.now.utc.strftime('%Y-%m-%d')
14
+ s.platform = Gem::Platform::RUBY
15
+ s.extensions = "ext/mosquitto/extconf.rb"
16
+ s.has_rdoc = true
17
+ s.files = `git ls-files`.split("\n")
18
+ s.test_files = `git ls-files test`.split("\n")
19
+ s.rdoc_options = ["--charset=UTF-8"]
20
+ s.require_paths = ["lib"]
21
+ s.add_development_dependency('rake-compiler', '~> 0.9.2')
22
+ s.add_development_dependency('yard')
23
+ end
data/test/helper.rb ADDED
@@ -0,0 +1,59 @@
1
+ # encoding: utf-8
2
+
3
+ require 'test/unit'
4
+ require 'mosquitto'
5
+ require 'stringio'
6
+ require 'thread'
7
+ require 'io/wait'
8
+ require 'timeout'
9
+
10
+ Thread.abort_on_exception = true
11
+
12
+ class Mosquitto::Client
13
+ if RUBY_VERSION.split(".").first == '2'
14
+ def wait_readable(timeout = 15)
15
+ IO.for_fd(socket).wait_readable(timeout)
16
+ end
17
+ else
18
+ def wait_readable(timeout = 15)
19
+ IO.for_fd(socket).wait(timeout)
20
+ end
21
+ end
22
+ end
23
+
24
+ class MosquittoTestCase < Test::Unit::TestCase
25
+ TEST_HOST = "test.mosquitto.org"
26
+ TEST_PORT = 1883
27
+
28
+ TLS_TEST_HOST = "test.mosquitto.org"
29
+ TLS_TEST_PORT = 8883
30
+
31
+ undef_method :default_test if method_defined? :default_test
32
+
33
+ def wait(&condition)
34
+ Timeout.timeout(5) do
35
+ loop do
36
+ sleep(0.2)
37
+ break if condition.call
38
+ end
39
+ end
40
+ end
41
+
42
+ def ssl_path
43
+ File.expand_path("../ssl", __FILE__)
44
+ end
45
+
46
+ def ssl_object(file)
47
+ File.expand_path("../ssl/#{file}", __FILE__)
48
+ end
49
+
50
+ if ENV['STRESS_GC'] == '1'
51
+ def setup
52
+ GC.stress = true
53
+ end
54
+
55
+ def teardown
56
+ GC.stress = false
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,75 @@
1
+ Certificate:
2
+ Data:
3
+ Version: 3 (0x2)
4
+ Serial Number: 1 (0x1)
5
+ Signature Algorithm: sha1WithRSAEncryption
6
+ Issuer: C=GB, ST=Derbyshire, L=Derby, O=Mosquitto Project, OU=Testing, CN=Root CA
7
+ Validity
8
+ Not Before: Aug 30 22:03:18 2013 GMT
9
+ Not After : Aug 29 22:03:18 2018 GMT
10
+ Subject: C=GB, ST=Derbyshire, O=Mosquitto Project, OU=Testing, CN=Signing CA
11
+ Subject Public Key Info:
12
+ Public Key Algorithm: rsaEncryption
13
+ Public-Key: (1024 bit)
14
+ Modulus:
15
+ 00:a4:b5:b9:31:d8:b4:d6:de:49:c0:cc:15:3f:b8:
16
+ 50:8b:be:4a:f4:d3:94:a9:dd:53:2a:e9:df:aa:0d:
17
+ 3c:08:7b:a7:51:6d:b9:44:98:b7:8d:03:ab:67:9e:
18
+ e1:c4:23:4d:33:8d:0a:90:9f:c6:de:82:14:4c:f6:
19
+ 75:5d:a4:e1:a3:ea:fc:9b:79:dd:cb:36:20:87:a3:
20
+ 9d:eb:e6:5b:0c:53:34:73:cb:dd:a8:e4:0e:7f:f0:
21
+ 5f:8a:3c:d8:8f:01:ff:66:31:16:41:1b:e3:7a:61:
22
+ 2c:3d:44:a5:a9:dd:1d:42:e5:5a:a1:df:29:35:dc:
23
+ 91:5e:9d:82:60:0d:7a:08:db
24
+ Exponent: 65537 (0x10001)
25
+ X509v3 extensions:
26
+ X509v3 Subject Key Identifier:
27
+ 40:43:50:14:D1:63:7E:0B:7C:97:14:20:63:E5:8A:95:96:9F:D4:AB
28
+ X509v3 Authority Key Identifier:
29
+ keyid:28:8D:BF:F8:DE:D1:F5:BB:26:37:A4:4D:27:FD:37:91:EC:6B:0C:DD
30
+
31
+ X509v3 Basic Constraints:
32
+ CA:TRUE
33
+ Signature Algorithm: sha1WithRSAEncryption
34
+ 8a:b1:49:b4:53:eb:bb:9d:5e:20:f4:d7:8d:b8:24:a1:28:95:
35
+ 56:72:03:ed:15:ef:f0:ff:65:b5:6e:34:cf:27:83:7b:57:40:
36
+ a7:93:61:f0:93:ff:02:b4:74:e0:43:dc:65:0c:e8:a6:20:f9:
37
+ 8c:88:82:8f:0e:8d:33:4d:ba:bb:28:ff:29:5f:a8:96:60:31:
38
+ f5:13:15:19:60:a4:00:0e:fc:a7:79:b6:10:95:0b:7b:88:75:
39
+ 03:ec:7d:94:63:9e:67:2e:2e:9c:fe:79:89:61:93:75:52:f2:
40
+ 36:48:a6:2d:c0:b2:a7:36:c2:36:50:53:b3:cd:e7:07:1d:e5:
41
+ 6a:1d
42
+ -----BEGIN CERTIFICATE-----
43
+ MIICnTCCAgagAwIBAgIBATANBgkqhkiG9w0BAQUFADByMQswCQYDVQQGEwJHQjET
44
+ MBEGA1UECAwKRGVyYnlzaGlyZTEOMAwGA1UEBwwFRGVyYnkxGjAYBgNVBAoMEU1v
45
+ c3F1aXR0byBQcm9qZWN0MRAwDgYDVQQLDAdUZXN0aW5nMRAwDgYDVQQDDAdSb290
46
+ IENBMB4XDTEzMDgzMDIyMDMxOFoXDTE4MDgyOTIyMDMxOFowZTELMAkGA1UEBhMC
47
+ R0IxEzARBgNVBAgMCkRlcmJ5c2hpcmUxGjAYBgNVBAoMEU1vc3F1aXR0byBQcm9q
48
+ ZWN0MRAwDgYDVQQLDAdUZXN0aW5nMRMwEQYDVQQDDApTaWduaW5nIENBMIGfMA0G
49
+ CSqGSIb3DQEBAQUAA4GNADCBiQKBgQCktbkx2LTW3knAzBU/uFCLvkr005Sp3VMq
50
+ 6d+qDTwIe6dRbblEmLeNA6tnnuHEI00zjQqQn8beghRM9nVdpOGj6vybed3LNiCH
51
+ o53r5lsMUzRzy92o5A5/8F+KPNiPAf9mMRZBG+N6YSw9RKWp3R1C5Vqh3yk13JFe
52
+ nYJgDXoI2wIDAQABo1AwTjAdBgNVHQ4EFgQUQENQFNFjfgt8lxQgY+WKlZaf1Ksw
53
+ HwYDVR0jBBgwFoAUKI2/+N7R9bsmN6RNJ/03kexrDN0wDAYDVR0TBAUwAwEB/zAN
54
+ BgkqhkiG9w0BAQUFAAOBgQCKsUm0U+u7nV4g9NeNuCShKJVWcgPtFe/w/2W1bjTP
55
+ J4N7V0Cnk2Hwk/8CtHTgQ9xlDOimIPmMiIKPDo0zTbq7KP8pX6iWYDH1ExUZYKQA
56
+ DvynebYQlQt7iHUD7H2UY55nLi6c/nmJYZN1UvI2SKYtwLKnNsI2UFOzzecHHeVq
57
+ HQ==
58
+ -----END CERTIFICATE-----
59
+ -----BEGIN CERTIFICATE-----
60
+ MIICsjCCAhugAwIBAgIJAPTHt3psLAUTMA0GCSqGSIb3DQEBBQUAMHIxCzAJBgNV
61
+ BAYTAkdCMRMwEQYDVQQIDApEZXJieXNoaXJlMQ4wDAYDVQQHDAVEZXJieTEaMBgG
62
+ A1UECgwRTW9zcXVpdHRvIFByb2plY3QxEDAOBgNVBAsMB1Rlc3RpbmcxEDAOBgNV
63
+ BAMMB1Jvb3QgQ0EwHhcNMTMwODMwMjIwMzE2WhcNMjMwODI4MjIwMzE2WjByMQsw
64
+ CQYDVQQGEwJHQjETMBEGA1UECAwKRGVyYnlzaGlyZTEOMAwGA1UEBwwFRGVyYnkx
65
+ GjAYBgNVBAoMEU1vc3F1aXR0byBQcm9qZWN0MRAwDgYDVQQLDAdUZXN0aW5nMRAw
66
+ DgYDVQQDDAdSb290IENBMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDB3KGu
67
+ pkiSYbDAaH0ewiCb44CLsAdV5PdYgZHH0jlH8oXkNH0MU3qs7Se2UWrnPQb1VbdI
68
+ K2DpSTk+3XuWO0BOqQ+/JuRFN/omwrucyKcRNm4MQP1aY2Tm04zsP0Muy4aSyMIk
69
+ F6jxQzAmIgj8VgkQ/y/knS5tbQ2kkoWKRn1RCQIDAQABo1AwTjAdBgNVHQ4EFgQU
70
+ KI2/+N7R9bsmN6RNJ/03kexrDN0wHwYDVR0jBBgwFoAUKI2/+N7R9bsmN6RNJ/03
71
+ kexrDN0wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQCn2WxbxDd5ar2U
72
+ UvttJW4I+/V1h3iAQCXVDAegOGzsYp3cfIdd2oZY++Q9FhzHh8nP18D+CeC9MMu2
73
+ H2iLULUV08cGSaDLlpo1eq2oJc5ygLOEt/XK7/aIMRwrlP/CoSrI2GPkeA8rka96
74
+ G0WtyGRkzqBKHpt6CnseA2evP5NVcQ==
75
+ -----END CERTIFICATE-----
@@ -0,0 +1,61 @@
1
+ Certificate:
2
+ Data:
3
+ Version: 3 (0x2)
4
+ Serial Number: 3 (0x3)
5
+ Signature Algorithm: sha1WithRSAEncryption
6
+ Issuer: C=GB, ST=Derbyshire, O=Mosquitto Project, OU=Testing, CN=Signing CA
7
+ Validity
8
+ Not Before: Aug 20 00:00:00 2012 GMT
9
+ Not After : Aug 21 00:00:00 2012 GMT
10
+ Subject: C=GB, ST=Nottinghamshire, L=Nottingham, O=Server, OU=Production, CN=test client expired
11
+ Subject Public Key Info:
12
+ Public Key Algorithm: rsaEncryption
13
+ Public-Key: (1024 bit)
14
+ Modulus:
15
+ 00:9a:f0:be:71:57:51:38:4e:1a:de:35:1d:3c:37:
16
+ 66:6a:d6:5a:77:17:7d:f9:66:55:2f:c5:b8:17:04:
17
+ 3c:59:e6:8f:aa:ae:16:b9:c1:64:a1:a0:3b:ca:0c:
18
+ ed:35:e9:2a:85:e9:b6:36:65:d6:ae:62:71:d1:89:
19
+ 14:e6:3a:18:c1:0b:28:c8:77:c8:26:e2:fc:f9:51:
20
+ 76:6e:21:70:42:28:4e:32:80:9c:5e:a6:58:26:b2:
21
+ 6c:40:b9:af:97:23:c1:fe:4b:c1:7f:b6:05:d2:8e:
22
+ f5:90:34:cc:0a:28:ed:31:d7:71:5b:dc:6d:2f:ff:
23
+ 43:6b:78:1a:c5:6f:42:03:1f
24
+ Exponent: 65537 (0x10001)
25
+ X509v3 extensions:
26
+ X509v3 Basic Constraints:
27
+ CA:FALSE
28
+ Netscape Comment:
29
+ OpenSSL Generated Certificate
30
+ X509v3 Subject Key Identifier:
31
+ CC:E1:DD:22:B5:A1:24:98:8F:47:1E:FF:4F:AE:88:7E:E5:40:56:DB
32
+ X509v3 Authority Key Identifier:
33
+ keyid:40:43:50:14:D1:63:7E:0B:7C:97:14:20:63:E5:8A:95:96:9F:D4:AB
34
+
35
+ Signature Algorithm: sha1WithRSAEncryption
36
+ 05:13:6e:9f:27:8b:1e:7b:3c:83:d4:be:d7:d9:3d:95:85:3e:
37
+ 3f:d2:56:05:01:fa:3c:1f:4d:f5:b1:39:2e:af:cb:fe:39:4d:
38
+ 3b:11:54:68:3e:c1:a9:e2:8b:6f:40:78:65:f5:d3:ec:04:de:
39
+ 53:a9:c1:44:64:24:46:69:66:5e:33:41:02:d1:b5:d6:77:de:
40
+ 8f:cb:cd:46:97:4a:d2:8c:af:b4:7d:fe:72:48:38:40:d9:75:
41
+ 93:2c:a1:4c:70:e3:7d:cb:92:30:93:96:0e:92:9f:05:21:6e:
42
+ 39:2d:cb:ec:83:fc:a4:34:ee:d3:ef:89:a7:11:ff:48:fa:1b:
43
+ 12:e5
44
+ -----BEGIN CERTIFICATE-----
45
+ MIIC1zCCAkCgAwIBAgIBAzANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJHQjET
46
+ MBEGA1UECAwKRGVyYnlzaGlyZTEaMBgGA1UECgwRTW9zcXVpdHRvIFByb2plY3Qx
47
+ EDAOBgNVBAsMB1Rlc3RpbmcxEzARBgNVBAMMClNpZ25pbmcgQ0EwHhcNMTIwODIw
48
+ MDAwMDAwWhcNMTIwODIxMDAwMDAwWjCBgDELMAkGA1UEBhMCR0IxGDAWBgNVBAgM
49
+ D05vdHRpbmdoYW1zaGlyZTETMBEGA1UEBwwKTm90dGluZ2hhbTEPMA0GA1UECgwG
50
+ U2VydmVyMRMwEQYDVQQLDApQcm9kdWN0aW9uMRwwGgYDVQQDDBN0ZXN0IGNsaWVu
51
+ dCBleHBpcmVkMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCa8L5xV1E4Thre
52
+ NR08N2Zq1lp3F335ZlUvxbgXBDxZ5o+qrha5wWShoDvKDO016SqF6bY2ZdauYnHR
53
+ iRTmOhjBCyjId8gm4vz5UXZuIXBCKE4ygJxeplgmsmxAua+XI8H+S8F/tgXSjvWQ
54
+ NMwKKO0x13Fb3G0v/0NreBrFb0IDHwIDAQABo3sweTAJBgNVHRMEAjAAMCwGCWCG
55
+ SAGG+EIBDQQfFh1PcGVuU1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4E
56
+ FgQUzOHdIrWhJJiPRx7/T66IfuVAVtswHwYDVR0jBBgwFoAUQENQFNFjfgt8lxQg
57
+ Y+WKlZaf1KswDQYJKoZIhvcNAQEFBQADgYEABRNunyeLHns8g9S+19k9lYU+P9JW
58
+ BQH6PB9N9bE5Lq/L/jlNOxFUaD7BqeKLb0B4ZfXT7ATeU6nBRGQkRmlmXjNBAtG1
59
+ 1nfej8vNRpdK0oyvtH3+ckg4QNl1kyyhTHDjfcuSMJOWDpKfBSFuOS3L7IP8pDTu
60
+ 0++JpxH/SPobEuU=
61
+ -----END CERTIFICATE-----
@@ -0,0 +1,61 @@
1
+ Certificate:
2
+ Data:
3
+ Version: 3 (0x2)
4
+ Serial Number: 4 (0x4)
5
+ Signature Algorithm: sha1WithRSAEncryption
6
+ Issuer: C=GB, ST=Derbyshire, O=Mosquitto Project, OU=Testing, CN=Signing CA
7
+ Validity
8
+ Not Before: Aug 30 22:03:34 2013 GMT
9
+ Not After : Aug 29 22:03:34 2018 GMT
10
+ Subject: C=GB, ST=Nottinghamshire, L=Nottingham, O=Server, OU=Production, CN=test client revoked
11
+ Subject Public Key Info:
12
+ Public Key Algorithm: rsaEncryption
13
+ Public-Key: (1024 bit)
14
+ Modulus:
15
+ 00:ce:19:b3:0b:d1:87:97:06:48:44:84:77:65:bc:
16
+ a7:25:fd:ec:49:16:0b:73:c9:2f:7a:9c:14:16:af:
17
+ cd:d3:3e:9a:2a:18:1c:90:f1:1a:5b:6d:31:d5:fd:
18
+ 6c:04:2b:87:e2:fe:2b:a8:01:ad:00:64:50:c7:ec:
19
+ d1:4f:ec:76:7f:4c:a3:f4:98:82:bf:53:af:06:e3:
20
+ 26:87:3e:44:e3:6b:bb:b8:9c:9d:ef:a2:fe:59:3e:
21
+ bd:9a:31:c0:3c:77:a9:69:4c:3a:1a:aa:c4:3f:68:
22
+ 4c:7f:e2:05:ea:38:98:d6:be:93:27:26:fc:ac:a3:
23
+ d0:b4:9c:65:a9:10:e6:5d:b7
24
+ Exponent: 65537 (0x10001)
25
+ X509v3 extensions:
26
+ X509v3 Basic Constraints:
27
+ CA:FALSE
28
+ Netscape Comment:
29
+ OpenSSL Generated Certificate
30
+ X509v3 Subject Key Identifier:
31
+ 96:E5:2B:FD:A2:61:F5:32:36:92:3F:CC:BA:28:A7:E2:4C:6C:A5:91
32
+ X509v3 Authority Key Identifier:
33
+ keyid:40:43:50:14:D1:63:7E:0B:7C:97:14:20:63:E5:8A:95:96:9F:D4:AB
34
+
35
+ Signature Algorithm: sha1WithRSAEncryption
36
+ 22:82:2d:16:57:95:84:10:a5:5b:5b:0f:20:1a:5b:db:59:f5:
37
+ 5c:d8:42:24:72:42:80:a8:30:77:82:b2:9c:ee:3e:61:3e:af:
38
+ d0:4d:75:32:ee:cc:04:fc:d6:96:57:46:35:34:d6:7e:42:51:
39
+ 41:fa:a3:2a:a5:02:3a:50:39:a6:5c:16:a3:8f:dc:2b:45:93:
40
+ d6:a0:fd:cf:5c:db:fc:5d:ae:f7:5c:e1:2e:36:de:ee:82:38:
41
+ de:db:76:af:fa:04:f2:a6:bc:14:56:2a:66:b9:9c:dc:88:41:
42
+ 2d:e7:4e:2c:4d:a9:ae:22:ba:7c:29:65:15:48:85:e4:45:c5:
43
+ 32:21
44
+ -----BEGIN CERTIFICATE-----
45
+ MIIC1zCCAkCgAwIBAgIBBDANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJHQjET
46
+ MBEGA1UECAwKRGVyYnlzaGlyZTEaMBgGA1UECgwRTW9zcXVpdHRvIFByb2plY3Qx
47
+ EDAOBgNVBAsMB1Rlc3RpbmcxEzARBgNVBAMMClNpZ25pbmcgQ0EwHhcNMTMwODMw
48
+ MjIwMzM0WhcNMTgwODI5MjIwMzM0WjCBgDELMAkGA1UEBhMCR0IxGDAWBgNVBAgM
49
+ D05vdHRpbmdoYW1zaGlyZTETMBEGA1UEBwwKTm90dGluZ2hhbTEPMA0GA1UECgwG
50
+ U2VydmVyMRMwEQYDVQQLDApQcm9kdWN0aW9uMRwwGgYDVQQDDBN0ZXN0IGNsaWVu
51
+ dCByZXZva2VkMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOGbML0YeXBkhE
52
+ hHdlvKcl/exJFgtzyS96nBQWr83TPpoqGByQ8RpbbTHV/WwEK4fi/iuoAa0AZFDH
53
+ 7NFP7HZ/TKP0mIK/U68G4yaHPkTja7u4nJ3vov5ZPr2aMcA8d6lpTDoaqsQ/aEx/
54
+ 4gXqOJjWvpMnJvyso9C0nGWpEOZdtwIDAQABo3sweTAJBgNVHRMEAjAAMCwGCWCG
55
+ SAGG+EIBDQQfFh1PcGVuU1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4E
56
+ FgQUluUr/aJh9TI2kj/Muiin4kxspZEwHwYDVR0jBBgwFoAUQENQFNFjfgt8lxQg
57
+ Y+WKlZaf1KswDQYJKoZIhvcNAQEFBQADgYEAIoItFleVhBClW1sPIBpb21n1XNhC
58
+ JHJCgKgwd4KynO4+YT6v0E11Mu7MBPzWlldGNTTWfkJRQfqjKqUCOlA5plwWo4/c
59
+ K0WT1qD9z1zb/F2u91zhLjbe7oI43tt2r/oE8qa8FFYqZrmc3IhBLedOLE2priK6
60
+ fCllFUiF5EXFMiE=
61
+ -----END CERTIFICATE-----