summaryrefslogtreecommitdiff
path: root/gnutls-1.1.9/examples
diff options
context:
space:
mode:
Diffstat (limited to 'gnutls-1.1.9/examples')
-rw-r--r--gnutls-1.1.9/examples/README21
-rw-r--r--gnutls-1.1.9/examples/certs/ca.pem42
-rw-r--r--gnutls-1.1.9/examples/certs/crl.pem19
-rw-r--r--gnutls-1.1.9/examples/certs/revoked.crt34
-rw-r--r--gnutls-1.1.9/examples/certs/revoked.key15
-rw-r--r--gnutls-1.1.9/examples/certs/valid.crt34
-rw-r--r--gnutls-1.1.9/examples/certs/valid.key15
-rwxr-xr-xgnutls-1.1.9/examples/client.py32
-rwxr-xr-xgnutls-1.1.9/examples/crypto.py84
-rwxr-xr-xgnutls-1.1.9/examples/server.py64
-rwxr-xr-xgnutls-1.1.9/examples/twisted-client.py49
-rwxr-xr-xgnutls-1.1.9/examples/twisted-server.py59
12 files changed, 468 insertions, 0 deletions
diff --git a/gnutls-1.1.9/examples/README b/gnutls-1.1.9/examples/README
new file mode 100644
index 0000000..343359f
--- /dev/null
+++ b/gnutls-1.1.9/examples/README
@@ -0,0 +1,21 @@
+
+This directory holds some examples of using python-gnutls.
+
+- An example of writing a synchronous client and server using the
+ ClientSession and ServerSession classes from python-gnutls is
+ given in client.py and server.py
+
+- An example of writing an asynchronous client and server using the
+ python-gnutls twisted interface is given in twisted-client.py and
+ twisted-server.py
+
+- An example of working with X509 certificates and their attributes
+ as well as using a CRL to check their revocation is in crypto.py
+
+
+
+To run the examples without installing python-gnutls, run the following
+command prior to trying the examples (after python-gnutls was built):
+
+export PYTHONPATH=/path/to/python-gnutls
+
diff --git a/gnutls-1.1.9/examples/certs/ca.pem b/gnutls-1.1.9/examples/certs/ca.pem
new file mode 100644
index 0000000..6b81c20
--- /dev/null
+++ b/gnutls-1.1.9/examples/certs/ca.pem
@@ -0,0 +1,42 @@
+-----BEGIN CERTIFICATE-----
+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
+-----END CERTIFICATE-----
diff --git a/gnutls-1.1.9/examples/certs/crl.pem b/gnutls-1.1.9/examples/certs/crl.pem
new file mode 100644
index 0000000..d1eb221
--- /dev/null
+++ b/gnutls-1.1.9/examples/certs/crl.pem
@@ -0,0 +1,19 @@
+-----BEGIN X509 CRL-----
+MIIDGjCCAQICAQEwDQYJKoZIhvcNAQEFBQAwgasxCzAJBgNVBAYTAk5MMRYwFAYD
+VQQIEw1Ob29yZC1Ib29sYW5kMRAwDgYDVQQHEwdIYWFybGVtMRQwEgYDVQQKEwtB
+RyBQcm9qZWN0czEUMBIGA1UECxMLRGV2ZWxvcG1lbnQxIDAeBgNVBAMTF0FHIFBy
+b2plY3RzIERldmVsb3BtZW50MSQwIgYJKoZIhvcNAQkBFhVkZXZlbEBhZy1wcm9q
+ZWN0cy5jb20XDTA3MDQwMzEyMjMwNFoXDTE3MDMzMTEyMjMwNFowIjAgAgECFw0w
+NzA0MDMxMjIxNTlaMAwwCgYDVR0VBAMKAQEwDQYJKoZIhvcNAQEFBQADggIBAIoF
+8pCAPnWt1kpao/TXkR80/ZOyrdKRAyo+hYejUJw41lxsWey4NUEwbWp9pnCWsL3s
+DMrLt948PRzIqMhI/9zXhl4+ipuuWSTJAb4usMh3CG0vJsexzE1e8SMAnoJdE3Fu
+5M2xCmd8loCaq3/oA05Ovv8Kc1KwTBiJUNQNvVEMhw9Wsn3mrFk2mWNlLa0vnANI
+DlO9HFZJOrw0ipco03ACDxTGGQiNxw6Yjw+OCqMaV3AAE9GvE8VXy3PgeaDgvffM
+9e71+6TC5j6S0S5c8P83NQpAAbYatQh5/McPd8b8o9ailj/rGt1krYxiLSUb12NE
+yy6EmybdLJmat9nvMAlpbxtzdRQdX0E9aDQaK4J388OkMiT6P83ykEKT7qCloEk6
+vkAebqCexA/dqv+7+AsNe+h18iHB+aZxv0xU3NS1Te4X902AUj2n4UGtiOUELMgJ
+leEN8Nh5R9a8/OsXQVLqqeMg6QmTjP3Y1PYNv4GSnJNAYMhEUPz19tC0E5kR4cLQ
+Y7csgROnfo5EX7byeQK1PjSGTMOP5KMgdH1YpxSg43uuTk12ZJEqKYeIXa50KYCA
+6OurC+2fOWQQogRnRlx94lOInfKeTlN7F09sMjBzIA+m9sKahKsZ00rHxuvcjP/e
+ZN+qO9H56VmfcOefMRLRPSPwuwtQdR3udI/QyL4D
+-----END X509 CRL-----
diff --git a/gnutls-1.1.9/examples/certs/revoked.crt b/gnutls-1.1.9/examples/certs/revoked.crt
new file mode 100644
index 0000000..d41bd3a
--- /dev/null
+++ b/gnutls-1.1.9/examples/certs/revoked.crt
@@ -0,0 +1,34 @@
+-----BEGIN CERTIFICATE-----
+MIIF4DCCA8igAwIBAgIBAjANBgkqhkiG9w0BAQUFADCBqzELMAkGA1UEBhMCTkwx
+FjAUBgNVBAgTDU5vb3JkLUhvb2xhbmQxEDAOBgNVBAcTB0hhYXJsZW0xFDASBgNV
+BAoTC0FHIFByb2plY3RzMRQwEgYDVQQLEwtEZXZlbG9wbWVudDEgMB4GA1UEAxMX
+QUcgUHJvamVjdHMgRGV2ZWxvcG1lbnQxJDAiBgkqhkiG9w0BCQEWFWRldmVsQGFn
+LXByb2plY3RzLmNvbTAeFw0wNzA0MDMxMjExMzFaFw0xNzAzMzExMjExMzFaMIGm
+MQswCQYDVQQGEwJOTDEWMBQGA1UECBMNTm9vcmQtSG9vbGFuZDEQMA4GA1UEBxMH
+SGFhcmxlbTEUMBIGA1UEChMLQUcgUHJvamVjdHMxFDASBgNVBAsTC0RldmVsb3Bt
+ZW50MRwwGgYDVQQDExNSZXZva2VkIGNlcnRpZmljYXRlMSMwIQYJKoZIhvcNAQkB
+FhR0ZXN0QGFnLXByb2plY3RzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkC
+gYEA+2k1ZYLmqLlogixTwVfZUw4WvfWjWXfTH0MJx4WynG7Oc7iLUw9KOCJaxOY+
+utE2etfRlVj4/SQ5JjgmkXuHfuaKpXXpWz7+na+YZqTcMs1cajGQ8sfdzQYKTlKw
+vyHjAxDPCxG7HtXubiwkqqimABpD4leloT/cQNBfmNGCGU0CAwEAAaOCAZQwggGQ
+MAkGA1UdEwQCMAAwEQYJYIZIAYb4QgEBBAQDAgZAMCsGCWCGSAGG+EIBDQQeFhxU
+aW55Q0EgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBSuCSZulRupp+T6
+AuKl/0OYvpPBbzCB4AYDVR0jBIHYMIHVgBSWd0/MJQO1y0Mzp9ee96IBwwg4+qGB
+saSBrjCBqzELMAkGA1UEBhMCTkwxFjAUBgNVBAgTDU5vb3JkLUhvb2xhbmQxEDAO
+BgNVBAcTB0hhYXJsZW0xFDASBgNVBAoTC0FHIFByb2plY3RzMRQwEgYDVQQLEwtE
+ZXZlbG9wbWVudDEgMB4GA1UEAxMXQUcgUHJvamVjdHMgRGV2ZWxvcG1lbnQxJDAi
+BgkqhkiG9w0BCQEWFWRldmVsQGFnLXByb2plY3RzLmNvbYIJAPV2qch7qoEZMCAG
+A1UdEgQZMBeBFWRldmVsQGFnLXByb2plY3RzLmNvbTAfBgNVHREEGDAWgRR0ZXN0
+QGFnLXByb2plY3RzLmNvbTANBgkqhkiG9w0BAQUFAAOCAgEApOy1uTOLlzZX4aMg
+hy+k7ginbqRWLgZNSvgbUAs1oIiLxB5DnWr7+S6eOw6ao4xaXAUdffL0RjlI30DQ
+hS/nWbHGePG65E2qFIPjnielEORrp5xI5mYbz221Khs9A51r/UIUzCPcRgKzZmpH
+K2o0YApw61JWIl7LCsnoBPfOexe5GPJBVJDvOkdrqL/DdH8YrMyPpbawe/q5yh+5
+aYvwdKr9q6RL+WatOXKh4vQ1kcB8g7RGsAG8i2+hUGHTpyE2sJzNnsf/jGYeqPv/
+lTXjWOgKpdoIwjOetwpY0PXnnV4UESTQ9HA54pIv7wrB+Jfj38wD9DTk4YVlKcVc
+nSJpNpZvj336G8fdypUOufGLH9KuYMOMv/6KA79gAicFbOsbzbZwDnZ5+zDqZMTx
+F/k8+X+ofArJrva0jw8xe6LAwmxwRLVfurVZU1edqCh8LD+oV84V4wlJGYcMDqi5
+EaIXA0oOn1pUQEhnv/yTL6OH/N8BtpyC055Uw/rrU4N/N1umlV1ePdGh6ntyECSY
+T8ZAziBUyzdkE3EpHuR15Dx0u3ah7uEBKejxUUYWs2mlEO5nxQCuGrtMSkv5+Y8g
+duOXKuAGfQXMOBO8njGEwfInHKEQeeiPeZZMXjm3yuY/zyMSdI7wDgmvZzJhKtuK
+4eds2Jp+RGmYDlNnq1ZazlAz3kc=
+-----END CERTIFICATE-----
diff --git a/gnutls-1.1.9/examples/certs/revoked.key b/gnutls-1.1.9/examples/certs/revoked.key
new file mode 100644
index 0000000..f223826
--- /dev/null
+++ b/gnutls-1.1.9/examples/certs/revoked.key
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXgIBAAKBgQD7aTVlguaouWiCLFPBV9lTDha99aNZd9MfQwnHhbKcbs5zuItT
+D0o4IlrE5j660TZ619GVWPj9JDkmOCaRe4d+5oqldelbPv6dr5hmpNwyzVxqMZDy
+x93NBgpOUrC/IeMDEM8LEbse1e5uLCSqqKYAGkPiV6WhP9xA0F+Y0YIZTQIDAQAB
+AoGBANKqwjehjK5tTollo3krp8vUznG2134szhgwEI3EFnrGzvBg/z5GXabUAsNj
+O8VHciNVnSVMPLfCFrFT892MaWffkEYwkyrkX+VUZYlRoMeNE/xT4BzPFchHg1rw
+I8rwFRWZumHB0AhKzg7N015/cxNar2aIKtU5m833NrN9K3vxAkEA/7yFJLsAuPHT
+scqPMXQ0XW/7P74lSFYHtbLOihVr/4myzLqpwuUvL55q1Ixi4AF/UHZ29pLilbDQ
+jQIKfT6K9wJBAPurjBJ8E0unfg+UYhx7/ws718uiDqJ7E0nC37RTOO+qyqZF4687
+B0yOIt/MbwDRUQttArLoNIv+nSs7yvzCiNsCQQDEZWjyzlI9tinXTjItzoowf8E6
+MLK9HKSLG6iWTuFDu+H+bBPXQt67+TMdzDpawYuepXuy3Rb50nI2+CxKBu/9AkEA
+8/SOizyK18M8h42mrUXlLNaNkG8/EHGNeOrWPs6NWoWMezE0TCBEKwl89MQOthQx
+I4pAG3zLswjVAZusYOeSEQJAdHhBRhk8EHgo/rMITeL0sGRH3nT82oPOJIPLDoDQ
+1T8aRVTvTtSsBXSadBw+cwmfgl2Z5GCmAmFoRS6bZqZCHQ==
+-----END RSA PRIVATE KEY-----
diff --git a/gnutls-1.1.9/examples/certs/valid.crt b/gnutls-1.1.9/examples/certs/valid.crt
new file mode 100644
index 0000000..10a3066
--- /dev/null
+++ b/gnutls-1.1.9/examples/certs/valid.crt
@@ -0,0 +1,34 @@
+-----BEGIN CERTIFICATE-----
+MIIF3jCCA8agAwIBAgIBATANBgkqhkiG9w0BAQUFADCBqzELMAkGA1UEBhMCTkwx
+FjAUBgNVBAgTDU5vb3JkLUhvb2xhbmQxEDAOBgNVBAcTB0hhYXJsZW0xFDASBgNV
+BAoTC0FHIFByb2plY3RzMRQwEgYDVQQLEwtEZXZlbG9wbWVudDEgMB4GA1UEAxMX
+QUcgUHJvamVjdHMgRGV2ZWxvcG1lbnQxJDAiBgkqhkiG9w0BCQEWFWRldmVsQGFn
+LXByb2plY3RzLmNvbTAeFw0wNzA0MDMxMjEwNTFaFw0xNzAzMzExMjEwNTFaMIGk
+MQswCQYDVQQGEwJOTDEWMBQGA1UECBMNTm9vcmQtSG9vbGFuZDEQMA4GA1UEBxMH
+SGFhcmxlbTEUMBIGA1UEChMLQUcgUHJvamVjdHMxFDASBgNVBAsTC0RldmVsb3Bt
+ZW50MRowGAYDVQQDExFWYWxpZCBjZXJ0aWZpY2F0ZTEjMCEGCSqGSIb3DQEJARYU
+dGVzdEBhZy1wcm9qZWN0cy5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGB
+AKYb9BLca4J3yszyRaMC+zvJKheOsROYFN9wIc+EAFO5RUFEFRQ/Ahfw2AmY+1bn
+S5K7tMV8J54coHI0ROohskTEXKx1iF+67Krezf3tfUY0zGPhTGaXJ2OkReAmZQvj
+a4IhWxBTQBFq1bbpDpOy/DJ24nBEgJoPTULfqGx5IVoJAgMBAAGjggGUMIIBkDAJ
+BgNVHRMEAjAAMBEGCWCGSAGG+EIBAQQEAwIGQDArBglghkgBhvhCAQ0EHhYcVGlu
+eUNBIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUDN4YV9HDpJrHcbzV
+8Ayu0Lymh2AwgeAGA1UdIwSB2DCB1YAUlndPzCUDtctDM6fXnveiAcMIOPqhgbGk
+ga4wgasxCzAJBgNVBAYTAk5MMRYwFAYDVQQIEw1Ob29yZC1Ib29sYW5kMRAwDgYD
+VQQHEwdIYWFybGVtMRQwEgYDVQQKEwtBRyBQcm9qZWN0czEUMBIGA1UECxMLRGV2
+ZWxvcG1lbnQxIDAeBgNVBAMTF0FHIFByb2plY3RzIERldmVsb3BtZW50MSQwIgYJ
+KoZIhvcNAQkBFhVkZXZlbEBhZy1wcm9qZWN0cy5jb22CCQD1dqnIe6qBGTAgBgNV
+HRIEGTAXgRVkZXZlbEBhZy1wcm9qZWN0cy5jb20wHwYDVR0RBBgwFoEUdGVzdEBh
+Zy1wcm9qZWN0cy5jb20wDQYJKoZIhvcNAQEFBQADggIBABCal7eKH7K5UmMt2CRh
+xjLdpLfo2d83dCSvAerabfyLYuSE4qg4pP6x1P3vBGFVuMc504AF+TwZIOLWQ47U
+b0NbzNi49NGPKjCUsjZiAhGE9SBjiac2xZXUW7UytkVlboyeqKn3Tc9rMT+THd/y
+wJj5Nqz2vcAcJ1LSpKs/c+NFE3KX+gdaiQtkgUZfkGBz2N6gvXn6r6w1sY/j8Gdw
+wuVXHv2pbM2zkhUFIFJbuT/3AEQlM2sqk7fVEHlm9cLOtzHsoBVo0pnSw/8mcl5J
+Z6oss51eR8zLVBhU3XrKTbammHv8uZ2vawRKuUR2Ot2RfINAPdwiW6r61ugBj/ux
+HGTmY8uO1Zx8dpNS/cC+HtjTKqD2zaBa6dX+6USf+4jgrVismMGAtUCX7IlwjNYV
+/p5TiwovA5p+xC2KWb9d0vTr8pGHV6vyDaE5Ba0jLfEjkT6b4MbZmWanUDUkYHuy
+P31NTgUPrIiU83bKfBlQZbS5YsyspdJQBzuGuon68Bw/ULpfERdRlipeTpkDhUn3
+gAAS0iLwgPybw8d9/d16nKPCdtSjDBvOUmMLPc0FqggvSGeFkkDn5hiN6eJ4DgTA
+Ze5X9kpc57dV2SvA1eqPCkmA8pZfPWaJtwf5AiiOzhGUAAx4+4hXyRWULIJXNCcD
+175SpToDKAei7ZSJfaiqPU/T
+-----END CERTIFICATE-----
diff --git a/gnutls-1.1.9/examples/certs/valid.key b/gnutls-1.1.9/examples/certs/valid.key
new file mode 100644
index 0000000..694caed
--- /dev/null
+++ b/gnutls-1.1.9/examples/certs/valid.key
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICWwIBAAKBgQCmG/QS3GuCd8rM8kWjAvs7ySoXjrETmBTfcCHPhABTuUVBRBUU
+PwIX8NgJmPtW50uSu7TFfCeeHKByNETqIbJExFysdYhfuuyq3s397X1GNMxj4Uxm
+lydjpEXgJmUL42uCIVsQU0ARatW26Q6TsvwyduJwRICaD01C36hseSFaCQIDAQAB
+AoGAC6qs8uIuXuSBBvIBOBjOgn13il4IS+MDnEno5gVUbIz3s0TP4jMmt32//rSS
++qCWK0EpyjEVK0LBdiP7ryIcviC3EMU33SErqSPdpJN/UOYePn5CX45d30OyDL/J
+1ai4AsQbG9twe5cOJae8ZLa76O4Q82MTxN2agrSoV41lcu0CQQDZID9NbHioGBPE
+cgwzwgTAWXc+sdHKsEJERxCPGyqChuFwFjgTdl0MQms3mclAOUq/23j6XYHkjG7o
+YS3FcBaTAkEAw9lnMKN5kF3/9xxZxmr62qm6RlgvpdgW4zs9m7SVGSq7fio07i4z
+a/5RGC0Tr/WzfjHD1+SyUEXmT1DMl7eycwJAQUX2gdoYM8B5QNdgX7b2IrVCqfBf
+N2XhphEPI1ZxYygVYdLsLL2qn2LgRKjQ3aPbmu3p4qp1wDWPqgB8+BwITQJAP1nA
+fkQy21b8qCM8iukp8bc7MOvvpbarWJ9eA1K7c+OVuG7Qpka9jW47LxXNq3pPsD9K
+uTgZ0ct6fyeEtoLOLwJAM1Eeopu3wSkNbf2p4TbhePc5ASZRR2c1GZZQE4GIYamB
+yEk53aQ5MDpHLffWdWI7vZ449s/AHwrN6txlu/+VTQ==
+-----END RSA PRIVATE KEY-----
diff --git a/gnutls-1.1.9/examples/client.py b/gnutls-1.1.9/examples/client.py
new file mode 100755
index 0000000..c6e4208
--- /dev/null
+++ b/gnutls-1.1.9/examples/client.py
@@ -0,0 +1,32 @@
+#!/usr/bin/env python
+
+"""Synchronous client using python-gnutls"""
+
+import sys
+import os
+import socket
+
+from gnutls.crypto import *
+from gnutls.connection import *
+
+script_path = os.path.realpath(os.path.dirname(sys.argv[0]))
+certs_path = os.path.join(script_path, 'certs')
+
+cert = X509Certificate(open(certs_path + '/valid.crt').read())
+key = X509PrivateKey(open(certs_path + '/valid.key').read())
+ca = X509Certificate(open(certs_path + '/ca.pem').read())
+crl = X509CRL(open(certs_path + '/crl.pem').read())
+cred = X509Credentials(cert, key)
+
+sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+session = ClientSession(sock, cred)
+
+session.connect(('localhost', 10000))
+session.handshake()
+session.send("test\r\n")
+buf = session.recv(1024)
+print 'Received: ', buf.rstrip()
+session.bye()
+session.shutdown()
+session.close()
+
diff --git a/gnutls-1.1.9/examples/crypto.py b/gnutls-1.1.9/examples/crypto.py
new file mode 100755
index 0000000..cbb29c9
--- /dev/null
+++ b/gnutls-1.1.9/examples/crypto.py
@@ -0,0 +1,84 @@
+#!/usr/bin/env python
+
+"""Cryptographic examples using python-gnutls"""
+
+import sys
+import os
+import time
+
+from gnutls.crypto import *
+
+script_path = os.path.realpath(os.path.dirname(sys.argv[0]))
+certs_path = os.path.join(script_path, 'certs')
+
+cert = X509Certificate(open(certs_path + '/valid.crt').read())
+crl = X509CRL(open(certs_path + '/crl.pem').read())
+
+print ''
+
+print 'CRL certs/crl.pem:'
+print '------------------'
+print 'CRL issuer:'
+print ' CN = %s' % crl.issuer.CN # or crl.issuer.common_name
+print ' O = %s' % crl.issuer.O # or crl.issuer.organization
+print ' OU = %s' % crl.issuer.OU # or crl.issuer.organization_unit
+print ' C = %s' % crl.issuer.C # or crl.issuer.country
+print ' ST = %s' % crl.issuer.ST # or crl.issuer.state
+print ' L = %s' % crl.issuer.L # or crl.issuer.locality
+print ' EMAIL = %s' % crl.issuer.EMAIL # or crl.issuer.email
+print 'CRL version:', crl.version
+print 'CRL count: ', crl.count
+print ''
+
+print 'Certificate certs/valid.crt:'
+print '----------------------------'
+print 'Cert subject:'
+print ' CN = %s' % cert.subject.CN # or cert.subject.common_name
+print ' O = %s' % cert.subject.O # or cert.subject.organization
+print ' OU = %s' % cert.subject.OU # or cert.subject.organization_unit
+print ' C = %s' % cert.subject.C # or cert.subject.country
+print ' ST = %s' % cert.subject.ST # or cert.subject.state
+print ' L = %s' % cert.subject.L # or cert.subject.locality
+print ' EMAIL = %s' % cert.subject.EMAIL # or cert.subject.email
+print 'Cert issuer:'
+print ' CN = %s' % cert.issuer.CN # or cert.issuer.common_name
+print ' O = %s' % cert.issuer.O # or cert.issuer.organization
+print ' OU = %s' % cert.issuer.OU # or cert.issuer.organization_unit
+print ' C = %s' % cert.issuer.C # or cert.issuer.country
+print ' ST = %s' % cert.issuer.ST # or cert.issuer.state
+print ' L = %s' % cert.issuer.L # or cert.issuer.locality
+print ' EMAIL = %s' % cert.issuer.EMAIL # or cert.issuer.email
+print 'Cert serial: ', cert.serial_number
+print 'Cert version: ', cert.version
+print 'Cert activation:', time.ctime(cert.activation_time)
+print 'Cert expiration:', time.ctime(cert.expiration_time)
+print 'Cert is revoked:', crl.is_revoked(cert)
+print ''
+
+cert = X509Certificate(open(certs_path + '/revoked.crt').read())
+
+print 'Certificate certs/revoked.crt:'
+print '------------------------------'
+print 'Cert subject:'
+print ' CN = %s' % cert.subject.common_name # here we use long names
+print ' O = %s' % cert.subject.organization
+print ' OU = %s' % cert.subject.organization_unit
+print ' C = %s' % cert.subject.country
+print ' ST = %s' % cert.subject.state
+print ' L = %s' % cert.subject.locality
+print ' EMAIL = %s' % cert.subject.email
+print 'Cert issuer:'
+print ' CN = %s' % cert.issuer.common_name
+print ' O = %s' % cert.issuer.organization
+print ' OU = %s' % cert.issuer.organization_unit
+print ' C = %s' % cert.issuer.country
+print ' ST = %s' % cert.issuer.state
+print ' L = %s' % cert.issuer.locality
+print ' EMAIL = %s' % cert.issuer.email
+print 'Cert serial: ', cert.serial_number
+print 'Cert version: ', cert.version
+print 'Cert activation:', time.ctime(cert.activation_time)
+print 'Cert expiration:', time.ctime(cert.expiration_time)
+print 'Cert is revoked:', crl.is_revoked(cert)
+print ''
+
diff --git a/gnutls-1.1.9/examples/server.py b/gnutls-1.1.9/examples/server.py
new file mode 100755
index 0000000..e7d744d
--- /dev/null
+++ b/gnutls-1.1.9/examples/server.py
@@ -0,0 +1,64 @@
+#!/usr/bin/env python
+
+"""Synchronous server using python-gnutls"""
+
+import sys
+import os
+import socket
+
+from gnutls.crypto import *
+from gnutls.connection import *
+
+script_path = os.path.realpath(os.path.dirname(sys.argv[0]))
+certs_path = os.path.join(script_path, 'certs')
+
+cert = X509Certificate(open(certs_path + '/valid.crt').read())
+key = X509PrivateKey(open(certs_path + '/valid.key').read())
+ca = X509Certificate(open(certs_path + '/ca.pem').read())
+crl = X509CRL(open(certs_path + '/crl.pem').read())
+cred = X509Credentials(cert, key, [ca], [crl])
+
+sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
+ssf = ServerSessionFactory(sock, cred)
+ssf.bind(('0.0.0.0', 10000))
+ssf.listen(100)
+
+while True:
+ session, address = ssf.accept()
+ try:
+ session.handshake()
+ peer_cert = session.peer_certificate
+ try:
+ peer_name = peer_cert.subject
+ except AttributeError:
+ peer_name = 'Unknown'
+ print '\nNew connection from:', peer_name
+ print 'Protocol: ', session.protocol
+ print 'KX algorithm: ', session.kx_algorithm
+ print 'Cipher: ', session.cipher
+ print 'MAC algorithm:', session.mac_algorithm
+ print 'Compression: ', session.compression
+ session.verify_peer()
+ cred.check_certificate(peer_cert, cert_name='peer certificate')
+ except Exception, e:
+ print 'Handshake failed:', e
+ session.bye()
+ else:
+ while True:
+ try:
+ buf = session.recv(1024)
+ if buf == 0 or buf == '':
+ print "Peer has closed the session"
+ break
+ else:
+ if buf.strip().lower() == 'quit':
+ print "Got quit command, closing connection"
+ session.bye()
+ break
+ session.send(buf)
+ except Exception, e:
+ print "Error in reception: ", e
+ break
+ session.shutdown()
+ session.close()
diff --git a/gnutls-1.1.9/examples/twisted-client.py b/gnutls-1.1.9/examples/twisted-client.py
new file mode 100755
index 0000000..0bcb8ca
--- /dev/null
+++ b/gnutls-1.1.9/examples/twisted-client.py
@@ -0,0 +1,49 @@
+#!/usr/bin/env python
+
+"""Asynchronous client using Twisted with GNUTLS"""
+
+import sys
+import os
+
+from twisted.internet.protocol import ClientFactory
+from twisted.protocols.basic import LineOnlyReceiver
+from twisted.internet import reactor
+
+from gnutls.constants import *
+from gnutls.crypto import *
+from gnutls.errors import *
+from gnutls.interfaces.twisted import X509Credentials
+
+class EchoProtocol(LineOnlyReceiver):
+
+ def connectionMade(self):
+ self.sendLine('echo')
+
+ def lineReceived(self, line):
+ print 'received: ', line
+ self.transport.loseConnection()
+
+ def connectionLost(self, reason):
+ reactor.stop()
+
+class EchoFactory(ClientFactory):
+ protocol = EchoProtocol
+
+ def clientConnectionFailed(self, connector, err):
+ print err.value
+ reactor.stop()
+
+
+script_path = os.path.realpath(os.path.dirname(sys.argv[0]))
+certs_path = os.path.join(script_path, 'certs')
+
+cert = X509Certificate(open(certs_path + '/valid.crt').read())
+key = X509PrivateKey(open(certs_path + '/valid.key').read())
+ca = X509Certificate(open(certs_path + '/ca.pem').read())
+crl = X509CRL(open(certs_path + '/crl.pem').read())
+cred = X509Credentials(cert, key, [ca])
+cred.verify_peer = True
+
+reactor.connectTLS('localhost', 10000, EchoFactory(), cred)
+reactor.run()
+
diff --git a/gnutls-1.1.9/examples/twisted-server.py b/gnutls-1.1.9/examples/twisted-server.py
new file mode 100755
index 0000000..67e14e6
--- /dev/null
+++ b/gnutls-1.1.9/examples/twisted-server.py
@@ -0,0 +1,59 @@
+#!/usr/bin/env python
+
+"""Asynchronous server using Twisted with GNUTLS"""
+
+import sys
+import os
+
+from twisted.internet.protocol import Factory
+from twisted.protocols.basic import LineOnlyReceiver
+from twisted.internet.error import CannotListenError, ConnectionDone
+from twisted.internet import reactor
+
+from gnutls.constants import *
+from gnutls.crypto import *
+from gnutls.errors import *
+from gnutls.interfaces.twisted import X509Credentials
+
+class EchoProtocol(LineOnlyReceiver):
+
+ def connectionMade(self):
+ session = self.transport.socket
+ try:
+ peer_name = session.peer_certificate.subject
+ except AttributeError:
+ peer_name = 'Unknown'
+ print '\nNew connection from:', peer_name
+ print 'Protocol: ', session.protocol
+ print 'KX algorithm: ', session.kx_algorithm
+ print 'Cipher: ', session.cipher
+ print 'MAC algorithm:', session.mac_algorithm
+ print 'Compression: ', session.compression
+
+ def lineReceived(self, line):
+ if line == 'quit':
+ self.transport.loseConnection()
+ return
+ self.sendLine(line)
+
+ def connectionLost(self, reason):
+ if reason.type != ConnectionDone:
+ print "Connection was lost:", str(reason.value)
+
+class EchoFactory(Factory):
+ protocol = EchoProtocol
+
+script_path = os.path.realpath(os.path.dirname(sys.argv[0]))
+certs_path = os.path.join(script_path, 'certs')
+
+cert = X509Certificate(open(certs_path + '/valid.crt').read())
+key = X509PrivateKey(open(certs_path + '/valid.key').read())
+ca = X509Certificate(open(certs_path + '/ca.pem').read())
+crl = X509CRL(open(certs_path + '/crl.pem').read())
+cred = X509Credentials(cert, key, [ca], [crl])
+cred.verify_peer = True
+cred.session_params.compressions = (COMP_LZO, COMP_DEFLATE, COMP_NULL)
+
+reactor.listenTLS(10000, EchoFactory(), cred)
+reactor.run()
+