mosquitto 0.2

Sign up to get free protection for your applications and to get access to all the features.
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-----