Dashboard
Projects
Tasks
Assets
Scenes
My tasks
Projects
Userlist
Projects
Groups
Add Node
Add Transition
Create Task
Open
Resolved
In Progress
Reopened
Closed


Dashboard
Private explorations
You currently aren't managing or collaborating on any explorations.
{% extends "base.html" %} {% block subtitle %} Dashboard {% endblock subtitle %} {% block content %}
You currently aren't managing or collaborating on any explorations.


This tests behavior when a node that serves as the start or end of a selection is removed from the document. Ideally, we would just adjust the selection when an endpoint is removed, for now, we just blow away the selection.
This test creates a selection that ends inside of a node that will be removed. Then the node is removed. There should be no selection afterward.


Experience
I've often sought jobs that interested me in some way. I never really knew what I wanted to do with myself so I spent a lot of time in college but this also meant working a lot of retail jobs.
I've worked for Starbucks. That lasted about 3 1/2 years.
I've worked for a few different bookstores including Barnes & Nobel and Books Inc. I believe Books Inc is native to the Bay Area
Goals
I've been on a journey to find a way to make my career meaningful and satisfying on multple fronts. After years of exploring my options, I believe Software Development may be the career I've always wanted. I'm a natural healer and creator so I plan on utilizing these innate abilities in everything I do.


Homeowners Get Trolled By Developers Who Built Them A ‘Plastic’ Lake Instead Of A Real One
by Chee KinTap to listen to this article instead: 🔊 Listen to Post
Most of the time when you buy new property, it’s pretty hard to tell what the final product will look like. But that’s why you have artist impressions in developer brochures, right? They help you get an idea of what the place will wind up looking like when it’s completed, especially when they have model homes to go with.
But sometimes, when they say that artist impressions are for illustration purposes only, developers really do mean that, as this story from Sin Chew Daily goes to show!
Paying good money to enjoy what had been advertised as ‘park views’ and ‘high vegetation cover’ at their new apartment complex, these new homeowners must have been pretty excited to visit their new property when they were given the keys to their homes. After all, we all want to escape the hustle and bustle of the city, without actually, you know…. leaving the city. And an apartment designed to bring nature to you sounds like a good deal.
But imagine their shock and dismay when they finally got to visit their apartment building, only to realise that something wasn’t quite right.
What does that look like to you?
A small, man-made water feature? Maybe a pool?
Nope. It’s blue plastic covering designed to look like water.
You can imagine how angry homeowners were when they inspected the ‘man-made lake’ up close in person, only to realise that they could walk on water. Well, because the ‘water’ turned out to be blue plastic floor-cladding designed to look like water from a distance. Developers even went to the extent of creating ‘islands’ between the water, and a bridge to complete the illusion!
“So I’m supposed to be standing in the middle of blue water, which in fact doesn’t exist. There is no rock or plants,” one homeowner was quoted as having said.
However, a member of the Changsha Shiji Yujing Real Estate company, who built the apartments, said that they never promised a made-man lake to the owners. Instead, they only mentioned that they would be living close to nature. Well, that’s one way of doing it.
In any case, you can’t deny that this is a pretty hilarious mix-up! We hope that the homeowners manage to come to some sort of compromise with the developers in the end though!
Also read: This Influencer From China Sold 80,000 Bottles of Malaysian Bird’s Nest in FIVE Minutes!


TrueVFS is a virtual file system (VFS) for Java 7 which enables client applications to perform CRUD (Create, Read, Update, Delete) operations on archive files as if they were virtual directories, even with nested archive files in multithreaded environments.
As a library, TrueVFS provides simple, uniform, transparent, thread-safe, read/write access to archive files as if they were virtual directories in a file system path.
As a framework, TrueVFS provides the API to write file system drivers which plug-in to its federated file system space.


After pressing the "Start" button, the orientation (azimuth of dip / angle of dip) of the rotation axis is put in. The rotation angle is filled clockwise. (looking in the direction of dip). At this point you fill in the data you want to rotate. The input of each fabric element is terminated by "Enter". The measures and their rotated values appear in the list field. Data input is terminated by pressing the button "Terminate data input". Now the menus "Save data", "Save rotated data", and "Printer2 become active.


Generated text will appear here! Use the form to configure GPT-2 and press Generate Text to get your Reddit submission title!
Generated text will appear here! Use the form to configure GPT-2 and press Generate Text to get your Reddit submission title!


{% extends 'kiss_cache/base.html' %} {% block title %} - Help{% endblock %} {% block nav_help %}active{% endblock %} {% block style %} h3, h4 { margin-top: 20px; } code { background-color: #f9f2f4; padding: 2px 4px; } {% endblock style %} {% block body %}
In order to cache https://example.com/kernel
, you should prefix the URL by the KissCache api url:
curl {{ api_url }}kernel?url=https://example.com/kernel
Depending on the source URL, the URL should be urlencoded.
This instance is restricted to the following networks:
This instance is open to every users.
{% endif %}Your current IP {{ user_ip }}
{{ user_ip_allowed|yesno:"can,can't" }} use this instance.


Using configuration management at home
During my wife’s recent trip to the east coast I decided I would take my circa 2015 macbook and fully automate it and manage it with a configuration management software.  Here was my thinking:
- As a manager, I don’t get to do as much hands on work as I’d like
- I’m frustrated by the config drift I have at home…everything is a snowflake
- I wanted to learn CHEF more on that later
Why CHEF? I wanted to use the same technology we use at work. Unfortunately, I did not find many current examples of folks using chef to manage their own personal machines. I did experiment with the excellent examples by jtimberman and echohack, but in the case of Joshua’s repo, it hasn’t changed in about 5 years and echohack’s in a MVP.
In the end, I found a ton of folks using Ansible for their daily drivers. Since I’m relatively proficient with CHEF on Windows, I ventured into the unknown with Ansible/Mac (#GrowthMindset). I might even make some new friends with our Networking team due to the python orientation of Ansible.
I started out with Richard van den Brand’s blog post and particularly liked the simplicity and manipulation of OS X features such as the dock. Ultimately I forked & implemented Jeff Geerling’s repo as I preferred his organization and extendability. With Jeff’s implementation you will really only need to modify the default.config.yml file. I added a macbuild.sh to bootstrap my process. This would enable me to manage the entire process even before homebrew/git were set up.
bash <(curl -Ls https://raw.githubusercontent.com/scottnasello/mac-dev-playbook/master/macbuild.sh)
The only pain point I never quite figured out was installing xcode…Although several folks provide methods to silently install, it never seemed to work for me on Sierra (10.12.5).
I invested about 12 hours into this process and now my mac (this mac) is fully managed via my github repo and ansible. Here’s a short video of the bootstrapping process (IRL: 15 minutes, condensed to 15 seconds)


WITNESS LIST State Affairs Committee March 17, 2003 - 1:30P SB 244 ON: Woelk, Sarah (Ethics Commission), Austin, TX Registering, but not testifying: For: Gerstenschlager, Merry Lynn (Texas Eagle Forum), Dallas, TX Smith, Tom "Smitty" (Public Citizen), Austin, TX Woodford, Suzy (Common Cause Texas), Austin, TX SB 313 FOR: Gadberry, Gavin (Texas Health Care Association), Austin, TX Graves, Tim (Texas Health Care Association), Austin, TX ON: Hall, Dr. Kenneth (Buckner Baptist Benevolences), Dallas, TX Registering, but not testifying: For: Dowell, Ed (Juliette Fowler Homes), Dallas, TX Durand, Kenneth (CC Young Retirement Community), Dallas, TX Lenhard, Mark (Juliette Fowler Homes), Dallas, TX Wall, Matt (Texas Hospital Association), Austin, TX SB 339 FOR: Rich, Sid D. (Texas Association Residential Care Communities), Austin, TX Registering, but not testifying: For: Barton, Yvonne (Texas Medical Association), Austin, TX Graves, Tim (Texas Health Care Association), Austin, TX Kroll, Carrie (Texas Pediatric Society), Austin, TX Turner, Robert (Bob) (Texas Rural Health Association, Texas Organization of Rural Community Hospitals), Austin Wall, Matt (Texas Hospital Association), Austin, TX On: Hamilton, Marilyn (Texas Department of Insurance), Austin, TX SB 421 FOR: Rich, Sid D. (Texas Association Residential Care Communities), Austin, TX Registering, but not testifying: For: Graves, Tim (Texas Health Care Association), Austin, TX Turner, Robert (Bob) (Texas Rural Health Association, Texas Organizational & Rural Community Hospitals), Austin, TX On: Hamilton, Marilyn (Texas Department of Insurance), Austin, TX SB 482 Registering, but not testifying: For: De Lord, Ronald G. (Combined Law Enforcement Associations of Texas), Austin, TX Higgins, Mike (Texas State Association of Fire Fighters), Austin, TX On: Jackson, Missy (Employees Retirement System), Austin, TX SB 579 Registering, but not testifying: On: Counihan, William (Texas Comptroller Public Accounts), Austin, TX Otto, Kingsbery (Texas Department of Protective and Regulatory Services), Austin, TX SB 599 ON: Thomas, Diane (State Comptroller), Austin, TX Registering, but not testifying: For: Maxey, Glen (American Lung Association of Texas), Austin, TX On: Hay, Mike (State Office of Risk Management), Austin, TX Kotrla, Claren (Texas Department of Health), Austin, TX SB 653 FOR: Mitchell, Kathy (Consumers Union), Austin Registering, but not testifying: For: Chatelle, Melody (Texas Classroom Teachers Association), Austin, TX Lee, Randy (Stewart Title Guaranty Company), Austin, TX Place, Allen (Texas Land Title Association), Austin, TX Schneider, Michael (Texas Association of Broadcasters), Austin, TX Woodford, Suzy (Common Cause Texas), Austin, TX On: Schloss, Hadassah (Texas Building & Procurement Commission), Austin, TX SB 693 FOR: Kennard, Karen (Texas Municipal League), Austin, TX ON: Davis, Mike (State Fire Marshal's Office/T.D.I.), Austin, TX Registering, but not testifying: For: Cain, Randy (Texas Fire Chiefs Association), Austin, TX Higgins, Mike (Texas State Association of Fire Fighters), Austin, TX Villarreal, Johnny (Houston Fire Fighters Local 341), Houston, TX On: Redlitz, Mark (State Fire Marshal's Office), Austin, TX SB 695 Registering, but not testifying: For: Higgins, Mike (Texas State Association of Fire Fighters), Austin, TX Villarreal, Johnny (Houston Fire Fighters Local 341), Houston, TX On: Davis, Mike (State Fire Marshal's Office/T.D.I.), Austin, TX Redlitz, Mark (State Fire Marshal's Office), Austin, TX SB 735 FOR: Lee, Donald (Texas Conference of Urban Counties), Austin, TX Registering, but not testifying: For: Allison, Jim (County Judges & Commissioners Association of Texas), Austin, TX


Welcome to SSLWrappers, a set of C++ classes to provide a complete C++ encapsulation of the SSL functionality exposed on Windows via the Schannel Security Service Provider Interface (SSPI). Some references which you should read if you want to understand more about SSL, SSPI and Schannel are as follows:
The classes provided are: SSLWrappers::CCredentials, SSLWrappers::CCachedCredentials, SSLWrappers::CContext, SSLWrappers::CMessage, SSLWrappers::CSSL & SSLWrappers::CSocket.
CCredentials provides a class based encapsulation of a SSL Credentials handle as represented by a CredHandle.
CCachedCredentials is a derived version of CCredentials which is used by the CSSL class to keep a copy of the SChannel credentials to use for the SSL connection.
CContext provides a class based encapsulation of a SSL Security context as represented by a CtxtHandle.
CMessage provides a class based encapsulation of a logical SSL message as returned by CSSL::GetMessage.
CSSL is the most complex class provided by the class framework and implements all the required logic to do client and server SSL handshakes, reading and writing SSL messages, requesting SSL renegotiations, handling SSL renegotiations and sending SSL close notify messages. This class is transport mechanism agnostic meaning that you can implement SSL over any transport by overriding specific virtual methods of this class.
CSocket is derived from CSSL and provides a concrete SSL implementation over Windows sockets.
| Features |
| Usage |
| Copyright |
| Output from Demo Application |
| History |
| Class Framework reference |
| Contacting the Author |
D:\Dev\My Code\SSLWrappers\Release>sslwrappersdemo.exe 1 localhost 443
Server certificate properties
Subject string: CN=localhost
Version: 2
Serial number: Length:16,
5b eb 9a 44 f7 af d4 4e a3 71 3c a6 af 84 0e 1d [..D...N.q<.....
Crypt algorithm Identifier: <IP_ADDRESS>.2.29
Crypt algorithm identifier parameters: Length:2,
05 00 ..
Issuer: Length:29,
30 1b 31 19 30 17 06 03 55 04 03 13 10 52 6f 6f 0.1.0...U....Roo
74 43 61 43 6c 69 65 6e 74 54 65 73 74 tCaClientTest
Not valid before: 2016-08-17 17:43:34
Not valid after: 2039-12-31 23:59:59
Subject data: Length:22,
30 14 31 12 30 10 06 03 55 04 03 13 09 6c 6f 63 0.1.0...U....loc
61 6c 68 6f 73 74 alhost
Subject public key algorithm Identifier: 1.2.840.1135<IP_ADDRESS>
Subject public key: Length:270,
30 82 01 0a 02 82 01 01 00 e7 88 c4 fb db b0 7d 0..............}
b8 5a 55 04 88 11 ff 1e 9e c4 f1 89 94 c5 75 b9 .ZU...........u.
54 04 56 d6 01 50 0f d4 be 94 fa 36 9f 03 45 64 T.V..P.....6..Ed
5b dc 4c dd e8 dc 5a a4 fa 34 4d 13 c2 c8 2d 3e [.L...Z..4M...->
8e 13 77 28 ae 80 8a a5 93 d7 44 0c 85 8b da 1e ..w(......D.....
2e 2f 41 db 05 89 b1 aa e3 93 c2 f7 14 47 b4 66 ./A..........G.f
9d e6 51 b0 19 a2 f5 23 ab 60 e9 52 84 00 df 2c ..Q....#.`.R...,
98 d5 54 99 18 a1 ef 53 f4 a5 dd 49 98 51 83 3d ..T....S...I.Q.=
31 5f bc 8f 70 a6 fd 1b a2 4a 6c 5f 35 22 16 1a 1_..p....Jl_5"..
07 c5 fd c3 b5 8c d0 e0 3c a5 94 26 0c 5d 7c aa ........<..&.]|.
40 86 9a f8 6d 1d 96 ee c4 a1 b8 9c 82 a9 de 04 @...m...........
c8 e7 26 0e 3f ae 6f 5d 90 2a c7 aa c3 6a 78 0d ..&.?.o].*...jx.
80 84 ef 1e 32 27 a4 e4 71 ad a3 0c e7 56 2f e9 ....2'..q....V/.
be f3 80 26 5d 3c c8 cf 52 f3 49 d4 a0 17 76 2c ...&]<..R.I...v,
12 30 4e a4 72 bf 88 4a 31 9a 45 b7 c5 90 43 a6 .0N.r..J1.E...C.
fa 0d 49 af 32 7e c3 4a 2b ed 85 b0 cc 9f cf 49 ..I.2~.J+......I
19 7e 4e a5 8c 2e d4 b4 ef 02 03 01 00 01 .~N...........
Issuer unique id: Length:0,
<NULL>
Subject unique id: Length:0,
<NULL>
Extension: OID:<IP_ADDRESS>, Critical:0, Value:: Length:69,
30 43 80 10 95 da 51 2f ce a0 10 14 e0 c6 cf 85 0C....Q/........
75 94 07 1b a1 1d 30 1b 31 19 30 17 06 03 55 04 u.....0.1.0...U.
03 13 10 52 6f 6f 74 43 61 43 6c 69 65 6e 74 54 ...RootCaClientT
65 73 74 82 10 b8 44 52 0d 02 c4 1e 87 4e e5 c4 est...DR.....N..
04 c7 d5 d7 af .....
Issuer Public Key MD5 hash
Length:16,
7c 42 8e 1a 88 70 8d a0 6b 2d 96 f4 04 6c 24 5f |B...p..k-...l$_
MD5 hash
Length:16,
4f 50 9c 20 2c fd 89 cf a9 45 94 13 5f 42 57 ac OP. ,....E.._BW.
S.t.r.o.n.g.
20 00 43 00 72 00 79 00 70 00 74 00 6f 00 67 00 .C.r.y.p.t.o.g.
72 00 61 00 70 00 68 00 69 00 63 00 20 00 50 00 r.a.p.h.i.c. .P.
72 00 6f 00 76 00 69 00 64 00 65 00 72 00 00 00 r.o.v.i.d.e.r...
SHA1 hash
Length:20,
7e 1e ec a5 0d d4 42 e7 6c 3e 5c f6 86 91 e6 af ~.....B.l>\.....
28 fd bf c2 (...
Key Identifier
Length:20,
55 ee 88 9e 67 9c 62 5e 18 58 09 eb f1 da 13 83 U...g.b^.X......
75 b7 80 0d u...
Signature hash
Length:20,
39 da 7e 90 ac 61 01 93 14 7f 23 0b dd 6b 7d 21 9.~..a....#..k}!
d2 14 bd 4c ...L
Subject Public Key Bit length
Length:4,
00 08 00 00 ....
Subject Public Key MD5 hash
Length:16,
28 92 c7 fd a3 ab 1b 11 c9 b0 a0 e9 9f e4 b6 dd (...............
Binding to localhost:443
Listening
Waiting for client connection
Accepted client connection
Performing SSL server handshake
Protocol: TLS v1.2
Cipher: AES
Cipher strength: 256
Hash: SHA-384
Hash strength: 0
Key exchange: Eliptic curve Diffie Hellman Ephemeral
Key exchange strength: 256
Getting client request
Received request data:: Length:6,
47 45 54 20 2f 20 GET /
Client requested renegotiation
Received request data:: Length:12,
48 54 54 50 2f 31 2e 30 0d 0a 0d 0a HTTP/1.0....
Sending client first part of response
Requesting client renegotiation
Sending client second part of response
Sending close notify
Closing client connection
Waiting for client connection
D:\Dev\My Code\SSLWrappers\Release>SSLWrappersDemo.exe 0 localhost 443
Connecting to localhost:443
Performing SSL client handshake
Protocol: TLS v1.2
Cipher: AES
Cipher strength: 256
Hash: SHA-384
Hash strength: 0
Key exchange: Eliptic curve Diffie Hellman Ephemeral
Key exchange strength: 256
Remote server certificate properties
Subject string: CN=localhost
Version: 2
Serial number: Length:16,
5b eb 9a 44 f7 af d4 4e a3 71 3c a6 af 84 0e 1d [..D...N.q<.....
Crypt algorithm Identifier: <IP_ADDRESS>.2.29
Crypt algorithm identifier parameters: Length:2,
05 00 ..
Issuer: Length:29,
30 1b 31 19 30 17 06 03 55 04 03 13 10 52 6f 6f 0.1.0...U....Roo
74 43 61 43 6c 69 65 6e 74 54 65 73 74 tCaClientTest
Not valid before: 2016-08-17 17:43:34
Not valid after: 2039-12-31 23:59:59
Subject data: Length:22,
30 14 31 12 30 10 06 03 55 04 03 13 09 6c 6f 63 0.1.0...U....loc
61 6c 68 6f 73 74 alhost
Subject public key algorithm Identifier: 1.2.840.1135<IP_ADDRESS>
Subject public key: Length:270,
30 82 01 0a 02 82 01 01 00 e7 88 c4 fb db b0 7d 0..............}
b8 5a 55 04 88 11 ff 1e 9e c4 f1 89 94 c5 75 b9 .ZU...........u.
54 04 56 d6 01 50 0f d4 be 94 fa 36 9f 03 45 64 T.V..P.....6..Ed
5b dc 4c dd e8 dc 5a a4 fa 34 4d 13 c2 c8 2d 3e [.L...Z..4M...->
8e 13 77 28 ae 80 8a a5 93 d7 44 0c 85 8b da 1e ..w(......D.....
2e 2f 41 db 05 89 b1 aa e3 93 c2 f7 14 47 b4 66 ./A..........G.f
9d e6 51 b0 19 a2 f5 23 ab 60 e9 52 84 00 df 2c ..Q....#.`.R...,
98 d5 54 99 18 a1 ef 53 f4 a5 dd 49 98 51 83 3d ..T....S...I.Q.=
31 5f bc 8f 70 a6 fd 1b a2 4a 6c 5f 35 22 16 1a 1_..p....Jl_5"..
07 c5 fd c3 b5 8c d0 e0 3c a5 94 26 0c 5d 7c aa ........<..&.]|.
40 86 9a f8 6d 1d 96 ee c4 a1 b8 9c 82 a9 de 04 @...m...........
c8 e7 26 0e 3f ae 6f 5d 90 2a c7 aa c3 6a 78 0d ..&.?.o].*...jx.
80 84 ef 1e 32 27 a4 e4 71 ad a3 0c e7 56 2f e9 ....2'..q....V/.
be f3 80 26 5d 3c c8 cf 52 f3 49 d4 a0 17 76 2c ...&]<..R.I...v,
12 30 4e a4 72 bf 88 4a 31 9a 45 b7 c5 90 43 a6 .0N.r..J1.E...C.
fa 0d 49 af 32 7e c3 4a 2b ed 85 b0 cc 9f cf 49 ..I.2~.J+......I
19 7e 4e a5 8c 2e d4 b4 ef 02 03 01 00 01 .~N...........
Issuer unique id: Length:0,
<NULL>
Subject unique id: Length:0,
<NULL>
Extension: OID:<IP_ADDRESS>, Critical:0, Value:: Length:69,
30 43 80 10 95 da 51 2f ce a0 10 14 e0 c6 cf 85 0C....Q/........
75 94 07 1b a1 1d 30 1b 31 19 30 17 06 03 55 04 u.....0.1.0...U.
03 13 10 52 6f 6f 74 43 61 43 6c 69 65 6e 74 54 ...RootCaClientT
65 73 74 82 10 b8 44 52 0d 02 c4 1e 87 4e e5 c4 est...DR.....N..
04 c7 d5 d7 af .....
Sending server first part of request
Requesting server renegotiation
Sending server second part of request
Getting response
Received response data:: Length:16,
48 54 54 50 2f 31 2e 30 20 32 30 30 0d 0a 0d 0a HTTP/1.0 200....

Stopping receive of response because of SEC_I_CONTEXT_EXPIRED status value from CSSL::GetEncryptedMessage
Sending close_notify message
D:\Dev\My Code\SSLWrappers\Release>SSLWrappersDemo.exe 0 www.microsoft.com 443
Connecting to www.microsoft.com:443
Performing SSL client handshake
Protocol: TLS v1.2
Cipher: AES
Cipher strength: 256
Hash: SHA-384
Hash strength: 0
Key exchange: Eliptic curve Diffie Hellman Ephemeral
Key exchange strength: 256
Remote server certificate properties
Subject string: C=US, S=Washington, L=Redmond, O=Microsoft Corporation, CN=www.microsoft.com
Version: 2
Serial number: Length:16,
a5 1e f4 ff a0 90 a3 53 97 90 4a d9 2b 62 8f 2b .......S..J.+b.+
Crypt algorithm Identifier: 1.2.840.1135<IP_ADDRESS>
Crypt algorithm identifier parameters: Length:2,
05 00 ..
Issuer: Length:128,
30 7e 31 0b 30 09 06 03 55 04 06 13 02 55 53 31 0~1.0...U....US1
1d 30 1b 06 03 55 04 0a 13 14 53 79 6d 61 6e 74 .0...U....Symant
65 63 20 43 6f 72 70 6f 72 61 74 69 6f 6e 31 1f ec Corporation1.
30 1d 06 03 55 04 0b 13 16 53 79 6d 61 6e 74 65 0...U....Symante
63 20 54 72 75 73 74 20 4e 65 74 77 6f 72 6b 31 c Trust Network1
2f 30 2d 06 03 55 04 03 13 26 53 79 6d 61 6e 74 /0-..U...&Symant
65 63 20 43 6c 61 73 73 20 33 20 53 65 63 75 72 ec Class 3 Secur
65 20 53 65 72 76 65 72 20 43 41 20 2d 20 47 34 e Server CA - G4
Not valid before: 2016-05-23 00:00:00
Not valid after: 2017-05-23 23:59:59
Subject data: Length:114,
30 70 31 0b 30 09 06 03 55 04 06 13 02 55 53 31 0p1.0...U....US1
13 30 11 06 03 55 04 08 0c 0a 57 61 73 68 69 6e .0...U....Washin
67 74 6f 6e 31 10 30 0e 06 03 55 04 07 0c 07 52 gton1.0...U....R
65 64 6d 6f 6e 64 31 1e 30 1c 06 03 55 04 0a 0c edmond1.0...U...
15 4d 69 63 72 6f 73 6f 66 74 20 43 6f 72 70 6f .Microsoft Corpo
72 61 74 69 6f 6e 31 1a 30 18 06 03 55 04 03 0c ration1.0...U...
11 77 77 77 2e 6d 69 63 72 6f 73 6f 66 74 2e 63 .www.microsoft.c
6f 6d om
Subject public key algorithm Identifier: 1.2.840.1135<IP_ADDRESS>
Subject public key: Length:270,
30 82 01 0a 02 82 01 01 00 9a e2 28 63 37 8b e5 0..........(c7..
83 ee 04 24 b2 6e bc dd 6a ef 4e fe a7 ed 91 9e ...$.n..j.N.....
03 84 5b d5 31 0f 9e a8 c2 22 97 91 11 64 12 13 ..[.1...."...d..
d3 a6 a6 3b 01 f7 bf e9 8d d8 04 d4 29 b0 93 85 ...;........)...
20 41 6d 24 1b 0e 04 c9 42 c7 2f c0 73 f8 af 2d Am$....B./.s..-
7e a9 00 5d 4c bd 2d ac 12 77 e4 3f 23 6e ea 59 ~..]L.-..w.?#n.Y
c9 7f c9 e0 d6 8f 73 d2 67 00 3c 68 37 5d b1 ff ......s.g.<h7]..
2a c4 eb c7 cd 38 36 67 77 be 44 7b 05 29 de 41 *....86gw.D{.).A
64 4d 9e aa 6b 4f 78 d9 09 ea a3 58 2e 2e 8d 22 dM..kOx....X..."
08 2a b1 cc ea f0 59 30 d0 03 2d 53 1e 0b a8 9a .*....Y0..-S....
25 53 29 1e a9 15 b2 b9 c3 10 90 f6 bb c6 40 97<EMAIL_ADDRESS>79 67 5e d1 74 63 fa 09 78 e8 d5 3c 40 8f 41 10<EMAIL_ADDRESS>0b 4c 8f 54 f1 b6 7e 3f b4 e6 9d 3c fe 03 3a a7 .L.T..~?...<..:.
c9 a2 7f 47 09 6a 9a e5 9b db aa 0c c7 b0 74 40 ...G.j........t@
48 46 de 58 fe fb 39 12 c6 d4 9d 51 d3 ae bd 68 HF.X..9....Q...h
29 46 3b 99 71 31 a0 eb b8 8e ac 5f 94 52 20 4a )F;.q1....._.R J
4c be a7 e9 5f b1 ce 92 9b 02 03 01 00 01 L..._.........
Issuer unique id: Length:0,
<NULL>
Subject unique id: Length:0,
<NULL>
Extension: OID:<IP_ADDRESS>, Critical:0, Value:: Length:80,
30 4e 82 15 70 72 69 76 61 63 79 2e 6d 69 63 72 0N..privacy.micr
6f 73 6f 66 74 2e 63 6f 6d 82 13 77 77 77 71 61 osoft.com..wwwqa
2e 6d 69 63 72 6f 73 6f 66 74 2e 63 6f 6d 82 11 .microsoft.com..
77 77 77 2e 6d 69 63 72 6f 73 6f 66 74 2e 63 6f www.microsoft.co
6d 82 0d 6d 69 63 72 6f 73 6f 66 74 2e 63 6f 6d m..microsoft.com
Extension: OID:<IP_ADDRESS>, Critical:0, Value:: Length:2,
30 00 0.
Extension: OID:<IP_ADDRESS>, Critical:1, Value:: Length:4,
03 02 05 a0 ....
Extension: OID:<IP_ADDRESS>, Critical:0, Value:: Length:90,
30 58 30 56 06 06 67 81 0c 01 02 02 30 4c 30 23 0X0V..g.....0L0#
06 08 2b 06 01 05 05 07 02 01 16 17 68 74 74 70 ..+.........http
73 3a 2f 2f 64 2e 73 79 6d 63 62 2e 63 6f 6d 2f s://d.symcb.com/
63 70 73 30 25 06 08 2b 06 01 05 05 07 02 02 30 cps0%..+.......0
19 0c 17 68 74 74 70 73 3a 2f 2f 64 2e 73 79 6d ...https://d.sym
63 62 2e 63 6f 6d 2f 72 70 61 cb.com/rpa
Extension: OID:<IP_ADDRESS>, Critical:0, Value:: Length:36,
30 22 30 20 a0 1e a0 1c 86 1a 68 74 74 70 3a 2f 0"0 ......http:/
2f 73 73 2e 73 79 6d 63 62 2e 63 6f 6d 2f 73 73 /ss.symcb.com/ss
2e 63 72 6c .crl
Extension: OID:<IP_ADDRESS>, Critical:0, Value:: Length:22,
30 14 06 08 2b 06 01 05 05 07 03 01 06 08 2b 06 0...+.........+.
01 05 05 07 03 02 ......
Extension: OID:<IP_ADDRESS>, Critical:0, Value:: Length:24,
30 16 80 14 5f 60 cf 61 90 55 df 84 43 14 8a 60 0..._`.a.U..C..`
2a b2 f5 7a f4 43 18 ef *..z.C..
Extension: OID:<IP_ADDRESS>.<IP_ADDRESS>.1, Critical:0, Value:: Length:75,
30 49 30 1f 06 08 2b 06 01 05 05 07 30 01 86 13 0I0...+.....0...
68 74 74 70 3a 2f 2f 73 73 2e 73 79 6d 63 64 2e http://ss.symcd.
63 6f 6d 30 26 06 08 2b 06 01 05 05 07 30 02 86 com0&..+.....0..
1a 68 74 74 70 3a 2f 2f 73 73 2e 73 79 6d 63 62 .http://ss.symcb
2e 63 6f 6d 2f 73 73 2e 63 72 74 .com/ss.crt
Extension: OID:<IP_ADDRESS>.4.1.11<IP_ADDRESS>, Critical:0, Value:: Length:245,
04 81 f2 00 f0 00 75 00 dd eb 1d 2b 7a 0d 4f a6 ......u....+z.O.
20 8b 81 ad 81 68 70 7e 2e 8e 9d 01 d5 5c 88 8d ....hp~.....\..
3d 11 c4 cd b6 ec be cc 00 00 01 54 df 0f 49 68 =..........T..Ih
00 00 04 03 00 46 30 44 02 20 28 0f 62 d7 13 bb .....F0D. (.b...
3b 10 c4 e4 f6 bf c6 f5 47 ab 6f 96 7a f8 13 c0 ;.......G.o.z...
28 74 eb cf 03 32 a5 42 54 f3 02 20 03 96 7d 09 (t...2.BT.. ..}.
17 7a 78 cd 21 fb 0f 24 af 6f 67 29 5f fc 3c 09 .zx.!..$.og)_.<.
6a 98 da 87 f6 ee c5 4f 88 72 7b 94 00 77 00 a4 j......O.r{..w..
b9 09 90 b4 18 58 14 87 bb 13 a2 cc 67 70 0a 3c .....X......gp.<
35 98 04 f9 1b df b8 e3 77 cd 0e c8 0d dc 10 00 5.......w.......
00 01 54 df 0f 49 9d 00 00 04 03 00 48 30 46 02 ..T..I......H0F.
21 00 c1 fc 00 d9 de ca 11 43 29 11 86 9c 84 e4 !........C).....
81 86 a1 f1 08 58 fc 0b 01 b7 24 05 c7 e9 1f 2d .....X....$....-
27 90 02 21 00 f1 fb 42 30 0b 9c da 3a c7 76 6c '..!...B0...:.vl
bf e6 83 69 c1 8f a1 e7 89 21 be e7 e7 f4 8a 4a ...i.....!.....J
f5 67 41 54 01 .gAT.

SHA1 hash
Length:20,
5f 0b 37 e6 33 84 0c a0 24 68 55 2e a3 b1 19 7e _.7.3...$hU....~
5e 11 8f 7b ^..{
Next certificate in chain
Subject string: C=US, O=Symantec Corporation, OU=Symantec Trust Network, CN=Symantec Class 3 Secure Server CA - G4
Version: 2
Serial number: Length:16,
ff 99 06 93 30 8d 41 40 34 b7 70 38 74 b9 3f 51 ....0.A@4.p8t.?Q
Crypt algorithm Identifier: 1.2.840.1135<IP_ADDRESS>
Crypt algorithm identifier parameters: Length:2,
05 00 ..
Issuer: Length:205,
30 81 ca 31 0b 30 09 06 03 55 04 06 13 02 55 53 0..1.0...U....US
31 17 30 15 06 03 55 04 0a 13 0e 56 65 72 69 53 1.0...U....VeriS
69 67 6e 2c 20 49 6e 63 2e 31 1f 30 1d 06 03 55 ign, Inc.1.0...U
04 0b 13 16 56 65 72 69 53 69 67 6e 20 54 72 75 ....VeriSign Tru
73 74 20 4e 65 74 77 6f 72 6b 31 3a 30 38 06 03 st Network1:08..
55 04 0b 13 31 28 63 29 20 32 30 30 36 20 56 65 U...1(c) 2006 Ve
72 69 53 69 67 6e 2c 20 49 6e 63 2e 20 2d 20 46 riSign, Inc. - F
6f 72 20 61 75 74 68 6f 72 69 7a 65 64 20 75 73 or authorized us
65 20 6f 6e 6c 79 31 45 30 43 06 03 55 04 03 13 e only1E0C..U...
3c 56 65 72 69 53 69 67 6e 20 43 6c 61 73 73 20 <VeriSign Class
33 20 50 75 62 6c 69 63 20 50 72 69 6d 61 72 79 3 Public Primary
20 43 65 72 74 69 66 69 63 61 74 69 6f 6e 20 41 Certification A
75 74 68 6f 72 69 74 79 20 2d 20 47 35 uthority - G5
Not valid before: 2013-10-31 00:00:00
Not valid after: 2023-10-30 23:59:59
Subject data: Length:128,
30 7e 31 0b 30 09 06 03 55 04 06 13 02 55 53 31 0~1.0...U....US1
1d 30 1b 06 03 55 04 0a 13 14 53 79 6d 61 6e 74 .0...U....Symant
65 63 20 43 6f 72 70 6f 72 61 74 69 6f 6e 31 1f ec Corporation1.
30 1d 06 03 55 04 0b 13 16 53 79 6d 61 6e 74 65 0...U....Symante
63 20 54 72 75 73 74 20 4e 65 74 77 6f 72 6b 31 c Trust Network1
2f 30 2d 06 03 55 04 03 13 26 53 79 6d 61 6e 74 /0-..U...&Symant
65 63 20 43 6c 61 73 73 20 33 20 53 65 63 75 72 ec Class 3 Secur
65 20 53 65 72 76 65 72 20 43 41 20 2d 20 47 34 e Server CA - G4
Subject public key algorithm Identifier: 1.2.840.1135<IP_ADDRESS>
Subject public key: Length:270,
30 82 01 0a 02 82 01 01 00 b2 d8 05 ca 1c 74 2d 0.............t-
b5 17 56 39 c5 4a 52 09 96 e8 4b d8 0c f1 68 9f ..V9.JR...K...h.
9a 42 28 62 c3 a5 30 53 7e 55 11 82 5b 03 7a 0d .B(b..0S~U..[.z.
2f e1 79 04 c9 b4 96 77 19 81 01 94 59 f9 bc f7 /.y....w....Y...
7a 99 27 82 2d b7 83 dd 5a 27 7f b2 03 7a 9c 53 z.'.-...Z'...z.S
25 e9 48 1f 46 4f c8 9d 29 f8 be 79 56 f6 f7 fd %.H.FO..)..yV...
d9 3a 68 da 8b 4b 82 33 41 12 c3 c8 3c cc d6 96 .:h..K.3A...<...
7a 84 21 1a 22 04 03 27 17 8b 1c 68 61 93 0f 0e z.!."..'...ha...
51 80 33 1d b4 b5 ce eb 7e d0 62 ac ee b3 7b 01 Q.3.....~.b...{.
74 ef 69 35 eb ca d5 3d a9 ee 97 98 ca 8d aa 44 t.i5...=.......D
0e 25 99 4a 15 96 a4 ce 6d 02 54 1f 2a 6a 26 e2 .%.J....m.T.*j&.
06 3a 63 48 ac b4 4c d1 75 93 50 ff 13 2f d6 da .:cH..L.u.P../..
e1 c6 18 f5 9f c9 25 5d f3 00 3a de 26 4d b4 29 ......%]..:.&M.)
09 cd 0f 3d 23 6f 16 4a 81 16 fb f2 83 10 c3 b8 ...=#o.J........
d6 d8 55 32 3d f1 bd 0f bd 8c 52 95 4a 16 97 7a ..U2=.....R.J..z
52 21 63 75 2f 16 f9 c4 66 be f5 b5 09 d8 ff 27 R!cu/...f......'
00 cd 44 7c 6f 4b 3f b0 f7 02 03 01 00 01 ..D|oK?.......
Issuer unique id: Length:0,
<NULL>
Subject unique id: Length:0,
<NULL>
Extension: OID:<IP_ADDRESS>, Critical:1, Value:: Length:8,
30 06 01 01 ff 02 01 00 0.......
Extension: OID:<IP_ADDRESS>, Critical:0, Value:: Length:41,
30 27 30 25 a0 23 a0 21 86 1f 68 74 74 70 3a 2f 0'0%.#.!..http:/
2f 73 31 2e 73 79 6d 63 62 2e 63 6f 6d 2f 70 63 /s1.symcb.com/pc
61 33 2d 67 35 2e 63 72 6c a3-g5.crl
Extension: OID:<IP_ADDRESS>, Critical:1, Value:: Length:4,
03 02 01 06 ....
Extension: OID:<IP_ADDRESS>.<IP_ADDRESS>.1, Critical:0, Value:: Length:35,
30 21 30 1f 06 08 2b 06 01 05 05 07 30 01 86 13 0!0...+.....0...
68 74 74 70 3a 2f 2f 73 32 2e 73 79 6d 63 62 2e http://s2.symcb.
63 6f 6d com
Extension: OID:<IP_ADDRESS>, Critical:0, Value:: Length:100,
30 62 30 60 06 0a 60 86 48 01 86 f8 45 01 07 36 0b0`..`.H...E..6
30 52 30 26 06 08 2b 06 01 05 05 07 02 01 16 1a 0R0&..+.........
68 74 74 70 3a 2f 2f 77 77 77 2e 73 79 6d 61 75 http://www.symau
74 68 2e 63 6f 6d 2f 63 70 73 30 28 06 08 2b 06 th.com/cps0(..+.
01 05 05 07 02 02 30 1c 1a 1a 68 74 74 70 3a 2f ......0...http:/
2f 77 77 77 2e 73 79 6d 61 75 74 68 2e 63 6f 6d /www.symauth.com
2f 72 70 61 /rpa
Extension: OID:<IP_ADDRESS>, Critical:0, Value:: Length:34,
30 20 a4 1e 30 1c 31 1a 30 18 06 03 55 04 03 13 0 ..0.1.0...U...
11 53 79 6d 61 6e 74 65 63 50 4b 49 2d 31 2d 35 .SymantecPKI-1-5
33 34 34
Extension: OID:<IP_ADDRESS>, Critical:0, Value:: Length:22,
04 14 5f 60 cf 61 90 55 df 84 43 14 8a 60 2a b2 .._`.a.U..C..`*.
f5 7a f4 43 18 ef .z.C..
Extension: OID:<IP_ADDRESS>, Critical:0, Value:: Length:24,
30 16 80 14 7f d3 65 a7 c2 dd ec bb f0 30 09 f3 0.....e......0..
43 39 fa 02 af 33 31 33 C9...313
SHA1 hash
Length:20,
ff 67 36 7c 5c d4 de 4a e1 8b cc e1 d7 0f da bd .g6|\..J........
7c 86 61 35 |.a5
Sending server first part of request
Requesting server renegotiation
Sending server second part of request
Getting response
Received response data:: Length:419,
48 54 54 50 2f 31 2e 30 20 34 30 30 20 42 61 64 HTTP/1.0 400 Bad
20 52 65 71 75 65 73 74 0d 0a 53 65 72 76 65 72 Request..Server
3a 20 41 6b 61 6d 61 69 47 48 6f 73 74 0d 0a 4d : AkamaiGHost..M
69 6d 65 2d 56 65 72 73 69 6f 6e 3a 20 31 2e 30 ime-Version: 1.0
0d 0a 43 6f 6e 74 65 6e 74 2d 54 79 70 65 3a 20 ..Content-Type:
74 65 78 74 2f 68 74 6d 6c 0d 0a 43 6f 6e 74 65 text/html..Conte
6e 74 2d 4c 65 6e 67 74 68 3a 20 32 30 39 0d 0a nt-Length: 209..
45 78 70 69 72 65 73 3a 20 53 61 74 2c 20 32 32 Expires: Sat, 22
20 4f 63 74 20 32 30 31 36 20 32 33 3a 34 35 3a Oct 2016 23:45:
33 37 20 47 4d 54 0d 0a 44 61 74 65 3a 20 53 61 37 GMT..Date: Sa
74 2c 20 32 32 20 4f 63 74 20 32 30 31 36 20 32 t, 22 Oct 2016 2
33 3a 34 35 3a 33 37 20 47 4d 54 0d 0a 43 6f 6e 3:45:37 GMT..Con
6e 65 63 74 69 6f 6e 3a 20 63 6c 6f 73 65 0d 0a nection: close..
0d 0a 3c 48 54 4d 4c 3e 3c 48 45 41 44 3e 0a 3c ..<HTML><HEAD>.<
54 49 54 4c 45 3e 49 6e 76 61 6c 69 64 20 55 52 TITLE>Invalid UR
4c 3c 2f 54 49 54 4c 45 3e 0a 3c 2f 48 45 41 44 L</TITLE>.</HEAD
3e 3c 42 4f 44 59 3e 0a 3c 48 31 3e 49 6e 76 61 ><BODY>.<H1>Inva
6c 69 64 20 55 52 4c 3c 2f 48 31 3e 0a 54 68 65 lid URL</H1>.The
20 72 65 71 75 65 73 74 65 64 20 55 52 4c 20 22 requested URL "
26 23 39 31 3b 6e 6f 26 23 33 32 3b 55 52 4c 26 [no URL&
23 39 33 3b 22 2c 20 69 73 20 69 6e 76 61 6c 69 #93;", is invali
64 2e 3c 70 3e 0a 52 65 66 65 72 65 6e 63 65 26 d.<p>.Reference&
23 33 32 3b 26 23 33 35 3b 39 26 23 34 36 3b 34 #32;#9.4
64 64 36 31 32 30 32 26 23 34 36 3b 31 34 37 37 dd61202.1477
31 37 39 39 33 37 26 23 34 36 3b 31 37 37 31 31<PHONE_NUMBER>1
36 32 31 0a 3c 2f 42 4f 44 59 3e 3c 2f 48 54 4d 621.</BODY></HTM
4c 3e 0a L>.
Stopping receive of response because of SEC_I_CONTEXT_EXPIRED status value from CSSL::GetEncryptedMessage
Sending close_notify message
D:\Dev\My Code\SSLWrappers\Release>SSLWrappersDemo.exe 0 www.google.com 443
Connecting to www.google.com:443
Performing SSL client handshake
Protocol: TLS v1.2
Cipher: AES
Cipher strength: 128
Hash: SHA-256
Hash strength: 0
Key exchange: Eliptic curve Diffie Hellman Ephemeral
Key exchange strength: 256
Remote server certificate properties
Subject string: C=US, S=California, L=Mountain View, O=Google Inc, CN=www.google.com
Version: 2
Serial number: Length:8,
5e 30 9a 49 f1 28 f9 29 ^0.I.(.)
Crypt algorithm Identifier: 1.2.840.1135<IP_ADDRESS>
Crypt algorithm identifier parameters: Length:2,
05 00 ..
Issuer: Length:75,
30 49 31 0b 30 09 06 03 55 04 06 13 02 55 53 31 0I1.0...U....US1
13 30 11 06 03 55 04 0a 13 0a 47 6f 6f 67 6c 65 .0...U....Google
20 49 6e 63 31 25 30 23 06 03 55 04 03 13 1c 47 Inc1%0#..U....G
6f 6f 67 6c 65 20 49 6e 74 65 72 6e 65 74 20 41 oogle Internet A
75 74 68 6f 72 69 74 79 20 47 32 uthority G2
Not valid before: 2016-10-06 13:02:45
Not valid after: 2016-12-29 12:28:00
Subject data: Length:106,
30 68 31 0b 30 09 06 03 55 04 06 13 02 55 53 31 0h1.0...U....US1
13 30 11 06 03 55 04 08 0c 0a 43 61 6c 69 66 6f .0...U....Califo
72 6e 69 61 31 16 30 14 06 03 55 04 07 0c 0d 4d rnia1.0...U....M
6f 75 6e 74 61 69 6e 20 56 69 65 77 31 13 30 11 ountain View1.0.
06 03 55 04 0a 0c 0a 47 6f 6f 67 6c 65 20 49 6e ..U....Google In
63 31 17 30 15 06 03 55 04 03 0c 0e 77 77 77 2e c1.0...U....www.
67 6f 6f 67 6c 65 2e 63 6f 6d google.com
Subject public key algorithm Identifier: 1.2.840.1135<IP_ADDRESS>
Subject public key: Length:270,
30 82 01 0a 02 82 01 01 00 ca 53 57 9a 4f 36 8c 0.........SW.O6.
89 d1 d5 61 3a 37 2b 65 0a 3a 72 31 79 78 a7 3c ...a:7+e.:r1yx.<
00 4b 49 b0 bf 6d e8 27 03 c6 e8 7e 29 ab a2 9d .KI..m.'...~)...
88 1e 81 0b dc 23 19 29 a3 a1 1a a3 be 01 0a 4f .....#.).......O
62 d6 ee 0f 5a 15 51 c9 08 d6 a9 50 8c c6 a6 c2 b...Z.Q....P....
f1 e1 fe 22 45 80 36 8d 73 ca 5c 4d 30 c7 36 0a ..."E.6.s.\M0.6.
9b b3 26 77 87 7e 1b 5c 18 91 61 41 b4 d6 51 07 ..&w.~.\..aA..Q.
50 69 f6 19 84 b2 b1 a3 b5 62 3b c3 a8 ac f0 05 Pi.......b;.....
b9 dd c3 c0 c4 28 de eb 92 20 1b 9f 8a 88 b4 0a .....(... ......
b6 b6 76 da df cf 5f 90 6b 85 81 48 5b 4b 1e 7f ..v..._.k..H[K..
cc bd 1e 7a ba e3 be ff 39 e7 90 c9 cc 01 2a ca ...z....9.....*.
13 c7 95 3e 46 0d ad e6 ea 0b e6 2a 5e 63 3d 20 ...>F......*^c=
93 d7 6a 2e d8 3e 9c 41 a1 f8 8c b3 ce 07 39 02 ..j..>.A......9.
71 48 68 a7 83 d6 47 24 60 31 ea b6 6d 51 cb 3f qHh...G$`1..mQ.?
75 80 e4 d7 f6 d2 c9 99 bd 18 5f 82 6f fe ea 52 u........._.o..R
3f 30 64 4a 5c f6 8d 6c 7b 7d 65 20 d5 1d 2a 7f ?0dJ\..l{}e ..*.
97 8a 3d bf 25 49 11 6a 65 02 03 01 00 01 ..=.%I.je.....
Issuer unique id: Length:0,
<NULL>
Subject unique id: Length:0,
<NULL>
Extension: OID:<IP_ADDRESS>, Critical:0, Value:: Length:22,
30 14 06 08 2b 06 01 05 05 07 03 01 06 08 2b 06 0...+.........+.
01 05 05 07 03 02 ......
Extension: OID:<IP_ADDRESS>, Critical:0, Value:: Length:18,
30 10 82 0e 77 77 77 2e 67 6f 6f 67 6c 65 2e 63 0...www.google.c
6f 6d om
Extension: OID:<IP_ADDRESS>.<IP_ADDRESS>.1, Critical:0, Value:: Length:92,
30 5a 30 2b 06 08 2b 06 01 05 05 07 30 02 86 1f 0Z0+..+.....0...
68 74 74 70 3a 2f 2f 70 6b 69 2e 67 6f 6f 67 6c http://pki.googl
65 2e 63 6f 6d 2f 47 49 41 47 32 2e 63 72 74 30 e.com/GIAG2.crt0
2b 06 08 2b 06 01 05 05 07 30 01 86 1f 68 74 74 +..+.....0...htt
70 3a 2f 2f 63 6c 69 65 6e 74 73 31 2e 67 6f 6f p://clients1.goo
67 6c 65 2e 63 6f 6d 2f 6f 63 73 70 gle.com/ocsp
Extension: OID:<IP_ADDRESS>, Critical:0, Value:: Length:22,
04 14 5b 5c 5d 7c e5 50 4a 84 99 8f 4d 8e 5e 6a ..[\]|.PJ...M.^j
cb fd 17 4c 44 a2 ...LD.
Extension: OID:<IP_ADDRESS>, Critical:1, Value:: Length:2,
30 00 0.
Extension: OID:<IP_ADDRESS>, Critical:0, Value:: Length:24,
30 16 80 14 4a dd 06 16 1b bc f6 68 b5 76 f5 81 0...J......h.v..
b6 bb 62 1a ba 5a 81 2f ..b..Z./
Extension: OID:<IP_ADDRESS>, Critical:0, Value:: Length:26,
30 18 30 0c 06 0a 2b 06 01 04 01 d6 79 02 05 01 0.0...+.....y...
30 08 06 06 67 81 0c 01 02 02 0...g.....

SHA1 hash
Length:20,
15 e6 b9 9d 87 ce 30 ac 89 b0 2d 68 bb 9b ab dd ......0...-h....
9b d1 e4 85 ....
Next certificate in chain
Subject string: C=US, O=Google Inc, CN=Google Internet Authority G2
Version: 2
Serial number: Length:3,
92 3a 02 .:.
Crypt algorithm Identifier: 1.2.840.1135<IP_ADDRESS>
Crypt algorithm identifier parameters: Length:2,
05 00 ..
Issuer: Length:68,
30 42 31 0b 30 09 06 03 55 04 06 13 02 55 53 31 0B1.0...U....US1
16 30 14 06 03 55 04 0a 13 0d 47 65 6f 54 72 75 .0...U....GeoTru
73 74 20 49 6e 63 2e 31 1b 30 19 06 03 55 04 03 st Inc.1.0...U..
13 12 47 65 6f 54 72 75 73 74 20 47 6c 6f 62 61 ..GeoTrust Globa
6c 20 43 41 l CA
Not valid before: 2015-04-01 00:00:00
Not valid after: 2017-12-31 23:59:59
Subject data: Length:75,
30 49 31 0b 30 09 06 03 55 04 06 13 02 55 53 31 0I1.0...U....US1
13 30 11 06 03 55 04 0a 13 0a 47 6f 6f 67 6c 65 .0...U....Google
20 49 6e 63 31 25 30 23 06 03 55 04 03 13 1c 47 Inc1%0#..U....G
6f 6f 67 6c 65 20 49 6e 74 65 72 6e 65 74 20 41 oogle Internet A
75 74 68 6f 72 69 74 79 20 47 32 uthority G2
Subject public key algorithm Identifier: 1.2.840.1135<IP_ADDRESS>
Subject public key: Length:270,
30 82 01 0a 02 82 01 01 00 9c 2a 04 77 5c d8 50 0.........*.w\.P
91 3a 06 a3 82 e0 d8 50 48 bc 89 3f f1 19 70 1a .:.....PH..?..p.
88 46 7e e0 8f c5 f1 89 ce 21 ee 5a fe 61 0d b7 .F~......!.Z.a..
32 44 89 a0 74 0b 53 4f 55 a4 ce 82 62 95 ee eb 2D..t.SOU...b...
59 5f c6 e1 05 80 12 c4 5e 94 3f bc 5b 48 38 f4 Y_......^.?.[H8.
53 f7 24 e6 fb 91 e9 15 c4 cf f4 53 0d f4 4a fc S.$........S..J.
9f 54 de 7d be a0 6b 6f 87 c0 d0 50 1f 28 30 03 .T.}..ko...P.(0.
40 da 08 73 51 6c 7f ff 3a 3c a7 37 06 8e bd 4b @..sQl..:<.7...K
11 04 eb 7d 24 de e6 f9 fc 31 71 fb 94 d5 60 f3 ...}$....1q...`.
2e 4a af 42 d2 cb ea c4 6a 1a b2 cc 53 dd 15 4b .J.B....j...S..K
8b 1f c8 19 61 1f cd 9d a8 3e 63 2b 84 35 69 65 ....a....>c+.5ie
84 c8 19 c5 46 22 f8 53 95 be e3 80 4a 10 c6 2a ....F".S....J..*
ec ba 97 20 11 c7 39 99 10 04 a0 f0 61 7a 95 25 ... ..9.....az.%
8c 4e 52 75 e2 b6 ed 08 ca 14 fc ce 22 6a b3 4e .NRu........"j.N
cf 46 03 97 97 03 7e c0 b1 de 7b af 45 33 cf ba .F....~...{.E3..
3e 71 b7 de f4 25 25 c2 0d 35 89 9d 9d fb 0e 11 >q...%%..5......
79 89 1e 37 c5 af 8e 72 69 02 03 01 00 01 y..7...ri.....
Issuer unique id: Length:0,
<NULL>
Subject unique id: Length:0,
<NULL>
Extension: OID:<IP_ADDRESS>, Critical:0, Value:: Length:24,
30 16 80 14 c0 7a 98 68 8d 89 fb ab 05 64 0c 11 0....z.h.....d..
7d aa 7d 65 b8 ca cc 4e }.}e...N
Extension: OID:<IP_ADDRESS>, Critical:0, Value:: Length:22,
04 14 4a dd 06 16 1b bc f6 68 b5 76 f5 81 b6 bb ..J......h.v....
62 1a ba 5a 81 2f b..Z./
Extension: OID:<IP_ADDRESS>, Critical:1, Value:: Length:4,
03 02 01 06 ....
Extension: OID:<IP_ADDRESS>.<IP_ADDRESS>.1, Critical:0, Value:: Length:34,
30 20 30 1e 06 08 2b 06 01 05 05 07 30 01 86 12 0 0...+.....0...
68 74 74 70 3a 2f 2f 67 2e 73 79 6d 63 64 2e 63 http://g.symcd.c
6f 6d om
Extension: OID:<IP_ADDRESS>, Critical:1, Value:: Length:8,
30 06 01 01 ff 02 01 00 0.......
Extension: OID:<IP_ADDRESS>, Critical:0, Value:: Length:46,
30 2c 30 2a a0 28 a0 26 86 24 68 74 74 70 3a 2f 0,0*.(.&.$http:/
2f 67 2e 73 79 6d 63 62 2e 63 6f 6d 2f 63 72 6c /g.symcb.com/crl
73 2f 67 74 67 6c 6f 62 61 6c 2e 63 72 6c s/gtglobal.crl
Extension: OID:<IP_ADDRESS>, Critical:0, Value:: Length:16,
30 0e 30 0c 06 0a 2b 06 01 04 01 d6 79 02 05 01 0.0...+.....y...
SHA1 hash
Length:20,
d6 ad 07 c6 67 56 30 f5 7b 92 7f 66 be 8c e1 f7 ....gV0.{..f....
68 f8 79 48 h.yH
Next certificate in chain
Subject string: C=US, O=GeoTrust Inc., CN=GeoTrust Global CA
Version: 2
Serial number: Length:3,
e6 bb 12 ...
Crypt algorithm Identifier: 1.2.840.1135<IP_ADDRESS>
Crypt algorithm identifier parameters: Length:2,
05 00 ..
Issuer: Length:80,
30 4e 31 0b 30 09 06 03 55 04 06 13 02 55 53 31 0N1.0...U....US1
10 30 0e 06 03 55 04 0a 13 07 45 71 75 69 66 61 .0...U....Equifa
78 31 2d 30 2b 06 03 55 04 0b 13 24 45 71 75 69 x1-0+..U...$Equi
66 61 78 20 53 65 63 75 72 65 20 43 65 72 74 69 fax Secure Certi
66 69 63 61 74 65 20 41 75 74 68 6f 72 69 74 79 ficate Authority
Not valid before: 2002-05-21 04:00:00
Not valid after: 2018-08-21 04:00:00
Subject data: Length:68,
30 42 31 0b 30 09 06 03 55 04 06 13 02 55 53 31 0B1.0...U....US1
16 30 14 06 03 55 04 0a 13 0d 47 65 6f 54 72 75 .0...U....GeoTru
73 74 20 49 6e 63 2e 31 1b 30 19 06 03 55 04 03 st Inc.1.0...U..
13 12 47 65 6f 54 72 75 73 74 20 47 6c 6f 62 61 ..GeoTrust Globa
6c 20 43 41 l CA
Subject public key algorithm Identifier: 1.2.840.1135<IP_ADDRESS>
Subject public key: Length:270,
30 82 01 0a 02 82 01 01 00 da cc 18 63 30 fd f4 0...........c0..
17 23 1a 56 7e 5b df 3c 6c 38 e4 71 b7 78 91 d4 .#.V~[.<l8.q.x..
bc a1 d8 4c f8 a8 43 b6 03 e9 4d 21 07 08 88 da ...L..C...M!....
58 2f 66 39 29 bd 05 78 8b 9d 38 e8 05 b7 6a 7e X/f9)..x..8...j~
71 a4 e6 c4 60 a6 b0 ef 80 e4 89 28 0f 9e 25 d6 q...`......(..%.
ed 83 f3 ad a6 91 c7 98 c9 42 18 35 14 9d ad 98 .........B.5....
46 92 2e 4f ca f1 87 43 c1 16 95 57 2d 50 ef 89 F..O...C...W-P..
2d 80 7a 57 ad f2 ee 5f 6b d2 00 8d b9 14 f8 14 -.zW..._k.......
15 35 d9 c0 46 a3 7b 72 c8 91 bf c9 55 2b cd d0 .5..F.{r....U+..
97 3e 9c 26 64 cc df ce 83 19 71 ca 4e e6 d4 d5 .>.&d.....q.N...
7b a9 19 cd 55 de c8 ec d2 5e 38 53 e5 5c 4f 8c {...U....^8S.\O.
2d fe 50 23 36 fc 66 e6 cb 8e a4 39 19 00 b7 95 -.P#6.f....9....
02 39 91 0b 0e fe 38 2e d1 1d 05 9a f6 4d 3e 6f .9....8......M>o
0f 07 1d af 2c 1e 8f 60 39 e2 fa 36 53 13 39 d4 ....,..`9..6S.9.
5e 26 2b db 3d a8 14 bd 32 eb 18 03 28 52 04 71 ^&+.=...2...(R.q
e5 ab 33 3d e1 38 bb 07 36 84 62 9c 79 ea 16 30 ..3=.8..6.b.y..0
f4 5f c0 2b e8 71 6b e4 f9 02 03 01 00 01 ._.+.qk.......
Issuer unique id: Length:0,
<NULL>
Subject unique id: Length:0,
<NULL>
Extension: OID:<IP_ADDRESS>, Critical:0, Value:: Length:24,
30 16 80 14 48 e6 68 f9 2b d2 b2 95 d7 47 d8 23 0...H.h.+....G.#
20 10 4f 33 98 90 9f d4 .O3....
Extension: OID:<IP_ADDRESS>, Critical:0, Value:: Length:22,
04 14 c0 7a 98 68 8d 89 fb ab 05 64 0c 11 7d aa ...z.h.....d..}.
7d 65 b8 ca cc 4e }e...N
Extension: OID:<IP_ADDRESS>, Critical:1, Value:: Length:5,
30 03 01 01 ff 0....
Extension: OID:<IP_ADDRESS>, Critical:1, Value:: Length:4,
03 02 01 06 ....

 See
20 68 74 74 70 73 3a 2f 2f 77 77 77 2e 67 6f 6f https://www.goo
67 6c 65 2e 63 6f 6d 2f 73 75 70 70 6f 72 74 2f gle.com/support/
61 63 63 6f 75 6e 74 73 2f 61 6e 73 77 65 72 2f accounts/answer/
31 35 31 36 35 37 3f 68 6c 3d 65 6e 20 66 6f 72 151657?hl=en for
20 6d 6f 72 65 20 69 6e 66 6f 2e 22 0d 0a 44 61 more info."..Da
74 65 3a 20 53 61 74 2c 20 32 32 20 4f 63 74 20 te: Sat, 22 Oct
32 30 31 36 20 32 33 3a 33 33 3a 31 39 20 47 4d 2016 23:33:19 GM
54 0d 0a 53 65 72 76 65 72 3a 20 67 77 73 0d 0a T..Server: gws..
43 6f 6e 74 65 6e 74 2d 4c 65 6e 67 74 68 3a 20 Content-Length:
32 35 39 0d 0a 58 2d 58 53 53 2d 50 72 6f 74 65 259..X-XSS-Prote
63 74 69 6f 6e 3a 20 31 3b 20 6d 6f 64 65 3d 62 ction: 1; mode=b
6c 6f 63 6b 0d 0a 58 2d 46 72 61 6d 65 2d 4f 70 lock..X-Frame-Op
74 69 6f 6e 73 3a 20 53 41 4d 45 4f 52 49 47 49 tions: SAMEORIGI
4e 0d 0a 53 65 74 2d 43 6f 6f 6b 69 65 3a 20 4e N..Set-Cookie: N
49 44 3d 38 39 3d 74 72 37 62 4a 37 6b 43 61 74 ID=89=tr7bJ7kCat
32 54 69 4b 4c 4d 55 65 41 64 4e 43 58 58 58 67 2TiKLMUeAdNCXXXg
53 51 31 62 53 6d 54 42 58 38 4f 62 74 79 70 74 SQ1bSmTBX8Obtypt
39 54 73 6e 65 4f 57 51 79 32 47 79 37 44 48 51 9TsneOWQy2Gy7DHQ
64 74 61 5f 79 50 66 76 65 42 65 55 72 6c 64 44 dta_yPfveBeUrldD
4b 56 30 5a 75 6e 6d 36 33 63 36 43 33 61 66 62 KV0Zunm63c6C3afb
70 5f 41 42 39 4e 39 77 37 50 62 32 30 31 45 57 p_AB9N9w7Pb201EW
56 64 71 39 79 72 68 78 62 76 6d 76 75 7a 79 39 Vdq9yrhxbvmvuzy9
55 41 34 68 6c 53 3b 20 65 78 70 69 72 65 73 3d UA4hlS; expires=
53 75 6e 2c 20 32 33 2d 41 70 72 2d 32 30 31 37 Sun, 23-Apr-2017
20 32 33 3a 33 33 3a 31 39 20 47 4d 54 3b 20 70 23:33:19 GMT; p
61 74 68 3d 2f 3b 20 64 6f 6d 61 69 6e 3d 2e 67 ath=/; domain=.g
6f 6f 67 6c 65 2e 63 6f 6d 3b 20 48 74 74 70 4f oogle.com; HttpO
6e 6c 79 0d 0a 41 6c 74 2d 53 76 63 3a 20 71 75 nly..Alt-Svc: qu
69 63 3d 22 3a 34 34 33 22 3b 20 6d 61 3d 32 35 ic=":443"; ma=25
39 32 30 30 30 3b 20 76 3d 22 33 36 2c 33 35 2c 92000; v="36,35,
33 34 2c 33 33 2c 33 32 22 0d 0a 0d 0a 3c 48 54 34,33,32"....<HT
4d 4c 3e 3c 48 45 41 44 3e 3c 6d 65 74 61 20 68 ML><HEAD><meta h
74 74 70 2d 65 71 75 69 76 3d 22 63 6f 6e 74 65 ttp-equiv="conte
6e 74 2d 74 79 70 65 22 20 63 6f 6e 74 65 6e 74 nt-type" content
3d 22 74 65 78 74 2f 68 74 6d 6c 3b 63 68 61 72 ="text/html;char
73 65 74 3d 75 74 66 2d 38 22 3e 0a 3c 54 49 54 set=utf-8">.<TIT
4c 45 3e 33 30 32 20 4d 6f 76 65 64 3c 2f 54 49 LE>302 Moved</TI
54 4c 45 3e 3c 2f 48 45 41 44 3e 3c 42 4f 44 59 TLE></HEAD><BODY
3e 0a 3c 48 31 3e 33 30 32 20 4d 6f 76 65 64 3c >.<H1>302 Moved<
2f 48 31 3e 0a 54 68 65 20 64 6f 63 75 6d 65 6e /H1>.The documen
74 20 68 61 73 20 6d 6f 76 65 64 0a 3c 41 20 48 t has moved.<A H
52 45 46 3d 22 68 74 74 70 73 3a 2f 2f 77 77 77 REF="https://www
2e 67 6f 6f 67 6c 65 2e 69 65 2f 3f 67 77 73 5f .google.ie/?gws_
72 64 3d 63 72 26 61 6d 70 3b 65 69 3d 50 5f 63 rd=cr&ei=P_c
4c 57 4c 58 47 49 71 7a 55 67 41 61 34 31 49 47 LWLXGIqzUgAa41IG
41 42 51 22 3e 68 65 72 65 3c 2f 41 3e 2e 0d 0a ABQ">here</A>...
3c 2f 42 4f 44 59 3e 3c 2f 48 54 4d 4c 3e 0d 0a </BODY></HTML>..
Stopping receive of response because of graceful disconnect status value from CSSL::GetEncryptedMessage
V1.0 (22 October 2014)
V1.01 (24 October 2014)
V1.02 (26 November 2014)
V1.03 (16 December 2014)
V1.04 (8 February 2015)
V1.05 (4 November 2015)
V1.06 (16 October 2016)
V1.07 (23 October 2016)
The framework consists of the following classes:
CCredentials
CCachedCredentials
CContext
CMessage
CSSL
CSocket
CCredentials provides a class based encapsulation of a SSL Credentials handle as represented by a CredHandle.
Functions this class provides include:
CCredentials();
CCredentials(_In_ CCredentials& credentials);
CCredentials(_In_ const CredHandle& handle);
Remarks
This is the constructor which initializes all the internal variables to a safe state. There are also overridden versions which initialize from an existing instance or from an SDK handle.
See Also
~CCredentials();
Remarks
This is the standard destructor for the class. Internally if calls Free to ensure that any handle that is opened is closed.
See Also
SECURITY_STATUS Acquire(_In_ unsigned long fCredentialUse, _In_opt_ SCHANNEL_CRED* pAuthData, _Out_opt_ PTimeStamp ptsExpiry = nullptr);
Remarks
This is the wrapper for the SDK function "AcquireCredentialsHandle".
Return Value
A standard SECURITY_STATUS value.
void Attach(_In_ const CredHandle& handle);
Remarks
This function allows a CCredentials instance to take ownership of an SDK CredHandle value. The handle will be automatically closed in the destructor.
See Also
CredHandle Detach();
Remarks
This function allows a CCredentials instance to release ownership of an SDK CredHandle value.
See Also
SECURITY_STATUS Free();
Remarks
This is the wrapper for the SDK function "FreeCredentialsHandle".
Return Value
A standard SECURITY_STATUS value.
CredHandle Handle() const;
Remarks
Provides access to the underlying handle which this CCrendentials instance is currently managing.
Return Value
The CredHandle instance this class is managing.
SECURITY_STATUS QueryAttribute(_In_ unsigned long ulAttribute, _Inout_ void* pBuffer);
Remarks
This is the wrapper for the SDK function "QueryCredentialsAttribute".
Return Value
A standard SECURITY_STATUS value.
BOOL ValidHandle() const
Remarks
This method is used to indicate if this CCredentials currently is encapsulating a valid handle or not.
Return Value
Returns TRUE if the current instance is encapsulating a valid handle otherwise FALSE.
CCredentials& operator=(_In_ CCredentials& credentials);
Remarks
This is the standard C++ operator= method which allows assignment from one CCredentials instance to another.
Return Value
A standard C++ reference to the current CCredentials instance.
CCachedCredentials is a derived version of CCredentials which is used by the CSSL class to keep a copy of the SChannel credentials to use for the SSL connection. It is a separate object because at least for a SSL server, the lifetime of the credentials will be different than the ssl socket instance used to service SSL clients. The class internally supports setting up credentials for a client with or without a windows certificate and for a server with a windows certificate via a Cryptowrappers::CCertificate instance. The class also internally keeps a copy of a SDK SCHANNEL_CRED SDK structure.
Functions this class provides include:
CCachedCredentials::CCachedCredentials
CCachedCredentials();
Remarks
This is the constructor which initializes all the internal variables to a safe state.
CCachedCredentials::AcquireClient
SECURITY_STATUS AcquireClient(_In_opt_ LPTSTR pszClientCertificateName = nullptr, _In_ LPCSTR lpszStoreProvider = CERT_STORE_PROV_SYSTEM, _In_ DWORD dwCertOpenStoreFlags = CERT_SYSTEM_STORE_CURRENT_USER | CERT_STORE_READONLY_FLAG, _In_opt_ const void* pvCertOpenStorePara = L"MY")
Remarks
This is the helper function which optionally sets up a client certificate and then calls CCredentials::Acquire appropriate for a client connection.
Return Value
A standard SECURITY_STATUS value.
CCachedCredentials::AcquireServer
SECURITY_STATUS AcquireClient(_In_opt_ LPTSTR pszClientCertificateName = nullptr, _In_ LPCSTR lpszStoreProvider = CERT_STORE_PROV_SYSTEM, _In_ DWORD dwCertOpenStoreFlags = CERT_SYSTEM_STORE_CURRENT_USER | CERT_STORE_READONLY_FLAG, _In_opt_ const void* pvCertOpenStorePara = L"MY")
Remarks
This is the helper function which optionally sets up a client certificate and then calls CCredentials::Acquire appropriate for a server connection.
Return Value
A standard SECURITY_STATUS value.
CContext provides a class based encapsulation of a SSL Security context as represented by a CtxtHandle.
Functions this class provides include:
CContext();
CContext(_In_ CContext& context);
CContext(_In_ const CtxtHandle& handle);
Remarks
This is the constructor which initializes all the internal variables to a safe state. There are also overridden versions which initialize from an existing instance or from an SDK handle.
See Also ~CContext
~CContext();
Remarks
This is the standard destructor for the class. Internally if calls Delete to ensure that any handle that is opened is closed.
See Also
SECURITY_STATUS Accept(_In_ CCredentials& credentials, _In_opt_ PSecBufferDesc pInput, _In_ unsigned long fContextReq, _Inout_opt_ PSecBufferDesc pOutput, _Out_ unsigned long* pfContextAttr, _Out_opt_ PTimeStamp ptsExpiry = nullptr);
Remarks
This is the wrapper for the SDK function "AcceptSecurityContext". This is the main method used by SSL servers to perform handshakes.
Return Value
A standard SECURITY_STATUS value.
See Also
SECURITY_STATUS ApplyControlToken(_In_ PSecBufferDesc pInput);
Remarks
This is the wrapper for the SDK function "AcceptControlToken".
Return Value
A standard SECURITY_STATUS value.
void Attach(_In_ const CtxtHandle& handle);
Remarks
This function allows a CContext instance to take ownership of an SDK CtxtHandle value. The handle will be automatically closed in the destructor.
See Also
SECURITY_STATUS DecryptMessage(_In_ PSecBufferDesc pMessage);
Remarks
This is the wrapper for the SDK function "DecryptMessage".
Return Value
A standard SECURITY_STATUS value.
See Also
SECURITY_STATUS Delete();
Remarks
This is the wrapper for the SDK function "DeleteSecurityContext".
Return Value
A standard SECURITY_STATUS value.
CtxtHandle Detach();
Remarks
This function allows a CContext instance to release ownership of an SDK CtxtHandle value.
See Also
SECURITY_STATUS EncryptMessage(_In_ PSecBufferDesc pMessage, _In_ unsigned long fQOP = 0);
Remarks
This is the wrapper for the SDK function "EncryptMessage".
Return Value
A standard SECURITY_STATUS value.
See Also
SECURITY_STATUS Export(_In_ ULONG fFlags, _Out_ PSecBuffer pPackedContext, _Out_ void** pToken);
Remarks
This is the wrapper for the SDK function "ExportSecurityContext".
Return Value
A standard SECURITY_STATUS value.
See Also
CtxtHandle Handle() const;
Remarks
Provides access to the underlying handle which this CContext instance is currently managing.
Return Value
The CtxtHandle instance this class is managing.
SECURITY_STATUS Impersonate();
Remarks
This is the wrapper for the SDK function "ImpersonateSecurityContext". This is the corollary method to Revert.
Return Value
A standard SECURITY_STATUS value.
See Also
SECURITY_STATUS Import(_In_ PSecBuffer pPackedContext, _In_ VOID* Token);
Remarks
This is the wrapper for the SDK function "ImportSecurityContext".
Return Value
A standard SECURITY_STATUS value.
See Also
SECURITY_STATUS Initialize(_In_ CCredentials& credentials,
#ifdef _UNICODE
_In_opt_ SEC_WCHAR* pszTargetName,
#else
_In_opt_ SEC_CHAR* pszTargetName,
#endif
_In_ unsigned long fContextReq, _In_opt_ PSecBufferDesc
pInput, _Inout_opt_ PSecBufferDesc pOutput,
_Out_ unsigned long* pfContextAttr, _Out_opt_ PTimeStamp
ptsExpiry = nullptr);
Remarks
This is the wrapper for the SDK function "InitializeSecurityContext". This is the main method used by SSL clients to perform handshakes.
Return Value
A standard SECURITY_STATUS value.
See Also
SECURITY_STATUS QueryAttribute(_In_ unsigned long ulAttribute, _Out_ void* pBuffer);
Remarks
This is the wrapper for the SDK function "QueryContextAttributes". This is the corollary method to SetAttribute.
Return Value
A standard SECURITY_STATUS value.
See Also
SECURITY_STATUS QueryToken(_Out_ void** phToken);
Remarks
This is the wrapper for the SDK function "QuerySecurityContextToken".
Return Value
A standard SECURITY_STATUS value.
See Also
SECURITY_STATUS Revert();
Remarks
This is the wrapper for the SDK function "RevertSecurityContext". This is the corollary method to Impersonate.
Return Value
A standard SECURITY_STATUS value.
See Also
SECURITY_STATUS SetAttribute(_In_ unsigned long ulAttribute, _In_reads_bytes_(cbBuffer) void* pBuffer, _In_ unsigned long cbBuffer);
Remarks
This is the wrapper for the SDK function "SetContextAttributes". This is the corollary method to QueryAttribute.
Return Value
A standard SECURITY_STATUS value.
See Also
BOOL ValidHandle() const
Remarks
This method is used to indicate if this CContext currently is encapsulating a valid handle or not.
Return Value
Returns TRUE if the current instance is encapsulating a valid handle otherwise FALSE.
CContext& operator=(_In_ CContext& context);
Remarks
This is the standard C++ operator= method which allows assignment from one CContext instance to another.
Return Value
A standard C++ reference to the current CContext instance.
CMessage provides a class based encapsulation of a logical SSL message as returned by CSSL::GetEncryptedMessage. The memory for the message is allocated from the Win32 Heap using the SDK function "HeapAlloc".
Functions this class provides include:
CMessage();
CMessage(_In_ CMessage& message);
Remarks
This is the constructor which initializes all the internal variables to a safe state. There is also an overridden version which initializes from an existing instance.
See Also ~CMessage
~CMessage();
Remarks
This is the standard destructor for the class. Internally if calls Deallocate to ensure the heap memory is freed.
See Also
SECURITY_STATUS Allocate(_In_ ULONG lSize);
Remarks
This method allocates the specified amount of memory for the message using the Win32 HeapAlloc SDK function.
Return Value
A standard SECURITY_STATUS value. SEC_E_OK is returned if the memory was allocated or for example SEC_E_INSUFFICIENT_MEMORY if the memory could not be allocated.
See Also
SECURITY_STATUS Deallocate();
Remarks
This method is the corollary to the Allocate method and frees the heap memory currently assigned to the CMessage instance using the Win32 HeapFree SDK function.
Return Value
A standard SECURITY_STATUS value. SEC_E_OK will be returned if the memory was de-allocated ok.
See Also
ULONG m_lSize;
Remarks
The size of the message in bytes.
BYTE* m_pbyData;
Remarks
The actual message contents as a BYTE pointer.
CSSL is the most complex class provided by the class framework and implements all the required logic to do client and server SSL handshakes, reading and writing SSL messages, requesting SSL renegotiations, handling SSL renegotiations and sending SSL close notify messages. This class is transport mechanism agnostic meaning that you can implement SSL over any transport by overriding specific virtual methods of this class.
Functions this class provides include:
GetCertGetCertificateChainFlags
GetCertVerifyCertificateChainPolicyFlags
GetCheckServerCertificateRevocation
SetCertGetCertificateChainFlags
SetCertVerifyCertificateChainPolicyFlags
SetCheckServerCertificateRevocation
CSSL();
Remarks
This is the constructor which initializes all the internal variables to a safe state.
See Also
~CSSL();
Remarks
This is the standard destructor for the class. Internally if looks after freeing up the read and write buffers which the class manages.
See Also
virtual BOOL Audit(_In_z_ _Printf_format_string_ LPCTSTR pszFormat, ...);
Remarks
This method is called at various times throughout the lifetime of an CSSL instance to perform auditing of the flow of code. Because the code to handle the various SSL handshakes, sending and receiving of encrypted messages and logic to handle renegotiation is quite involved, the CSSL class includes an extensible auditing mechanism to help diagnose issues when they occur. The default implementation is to call the Win32 API function "OutputDebugString". Derived classes are free to customize this behaviour.
Return Value
A boolean value to indicate if auditing was successful.
virtual BOOL AuditData(_In_ LPCTSTR pszTitle, _In_reads_bytes_(lSize) const BYTE* pbyData, _In_ ULONG lSize);
Remarks
This method is similar to the Audit method except that it is called for logging / auditing actual data as opposed to generic events. This is useful to analyze the data as the various SSL handshakes are performed and encrypted messages are sent and received. The default implementation uses the Win32 API function "CryptBinaryToString" to convert the data to printable data before it is displayed using the Win32 API function "OutputDebugString". Derived classes are free to customize this behaviour.
Return Value
A boolean value to indicate if auditing was successful.
DWORD GetAuditFlags() const;
Remarks
This method returns a bitmask which indicates what auditing events are logged by the code. The events values are defined as follows:
enum
{
AUDIT_DATA = 0x1,
AUDIT_EVENTS = 0x02,
AUDIT_ERRORS = 0x04
};
Return Value
A DWORD value which specifies the current audit flags in operation
See Also
CCachedCredentials* GetCachedCredentials() const;
Remarks
This method returns the CCachedCredentials value used by the class
Return Value
A pointer which specifies the current value in operation
See Also
CSSL::GetCertGetCertificateChainFlags
DWORD GetCertGetCertificateChainFlags() const;
Remarks
This method returns the DWORD value passed to the VerifyServerCertificate method as the dwCertGetCertificateChainFlags parameter
Return Value
A DWORD value which specifies the current value in operation
See Also
SetCertGetCertificateChainFlags
CSSL::GetCertVerifyCertificateChainPolicyFlags
DWORD GetCertVerifyCertificateChainPolicyFlags() const;
Remarks
This method returns the DWORD value passed to the VerifyServerCertificate method as the dwCertVerifyCertificateChainPolicyFlags parameter
Return Value
A DWORD value which specifies the current value in operation
See Also
SetCertVerifyCertificateChainPolicyFlags
CSSL::GetCheckServerCertificateRevocation
BOOL GetCheckServerCertificateRevocation() const;
Remarks
This method returns a boolean value which indicates if a server certificate is checked for revocation when the VerifyServerCertificate method is called.
Return Value
A BOOL value which specifies the current value in operation
See Also
SetCheckServerCertificateRevocation
virtual unsigned long GetClientContextRequest();
Remarks
This method returns the context request value passed to the CContext::Initialize call during calls to the SSLConnect, SSLRequestRenegotiationClient, SSLHandleRenegotiationClient and SendCloseNotify methods. This value is used by the SSPI infrastructure to specify low level details on the connection such as detecting replay attempts etc.
Return Value
An unsigned long value which specifies the value to use.
virtual SECURITY_STATUS GetEncryptedMessage(_Inout_ CMessage& message);
Remarks
This method is called to read one SSL message from the other side of the SSL connection. If successful the message read will be returned in the "message" parameter. Internally this function will call the ReceiveData method if it needs more data to read an SSL message. This need to read additional data is handled internally by this method by checking the return value from the SDK DecryptMessage function for the return value SEC_E_INCOMPLETE_MESSAGE. This function will also handle the case where more data is read from the other side of the SSL connection to provide one SSL message. Subsequent calls to GetEncryptedMessage will examine this pending read buffer to produce further SSL messages. If this method returns the standard SEC_I_RENEGOTIATE error code then your code can decide to handle renegotiation by calling either SSLHandleRenegotiationClient or SSLHandleRenegotiationServer.
Return Value
A standard SECURITY_STATUS value.
See Also
virtual unsigned long GetServerContextRequest();
Remarks
This method returns the context request value passed to the CContext::Accept call during calls to the SSLAccept, SSLRequestRenegotiationServer, SSLHandleRenegotiationServer and SendCloseNotify methods. This value is used by the SSPI infrastructure to specify low level details on the connection such as detecting replay attempts etc.
Return Value
An unsigned long value which specifies the value to use.
CSSL::GetVerifyClientCertificate
BOOL GetVerifyClientCertificate() const;
Remarks
This method returns a boolean value which indicates if a client certificate is verified by calling the method VerifyClientCertificate as the server SSL handshake is being performed.
Return Value
A BOOL value which specifies the current value in operation
See Also
CSSL::GetVerifyServerCertificate
BOOL GetVerifyServerCertificate() const;
Remarks
This method returns a boolean value which indicates if a server certificate is verified by calling the method VerifyServerCertificate as the client SSL handshake is being performed.
Return Value
A BOOL value which specifies the current value in operation
See Also
unsigned long PendingReadSize() const;
Remarks
This method returns the current pending number of bytes which the class is maintaining in its read buffers. The CSSL class maintains this buffer as it is possible that the amount of data read is not enough for exactly one SSL message. The GetEncryptedMessage method is designed to only return one message at a time and as such the CSSL class maintains any pending data which has already been read from the other side of the SSL conversation but has not been used yet by GetEncryptedMessage for returning one full SSL message.
Return Value
A unsigned long which specifies the current pending number of bytes
virtual SECURITY_STATUS ReceiveData(_Out_writes_bytes_to_(lSize, lReceived) BYTE* pbyData, _In_ ULONG lSize, _Out_ ULONG& lReceived) ;
Remarks
This method is called during the SSL client and server handshake processes and during calls to GetEncryptedMessage when more data is required to be read to produce one full SSL message. This method is not implemented in CSSL and is implemented by derived classes such as CSocket.
Return Value
The implementation of this method should return a standard HRESULT to indicate success or failure.
virtual SECURITY_STATUS SendCloseNotify(_In_ BOOL bOperatingAsClient) ;
Remarks
This method can be called to send a standard SSL close notify message to the other end. This message is recommended to be send to the other side of the SSL conversation when the SSL connection is being closed. The bOperatingAsClient value indicates what part of the connection the calling code of this method is acting as. For example if the current code is acting as the SSL client then bOperatingAsClient should be set to TRUE when this function is being called. After calling this function no further sending of data should be performed.
Return Value
A standard SECURITY_STATUS value.
virtual SECURITY_STATUS SendData(_In_reads_bytes_(lSize) const BYTE* pbyData, _In_ ULONG lSize) ;
Remarks
This method is called during the SSL client and server handshakes process and during calls to SendEncryptedMessage when data is to be transmitted to the other end of the SSL connection. This method is not implemented in CSSL and is implemented by derived classes such as CSocket.
Return Value
The implementation of this method should return a standard SECURITY_STATUS value to indicate success or failure.
virtual SECURITY_STATUS SendEncrypted(_In_reads_bytes_(lSize) const BYTE* pbyData, _In_ ULONG lSize) ;
Remarks
This method is a convenience wrapper over SendEncryptedMessage where if the total amount of data to send is greater than the maximum size of an SSL message then more than one call will be made to SendEncryptedMessage internally in this method to send all the data.
Return Value
A standard SECURITY_STATUS value.
See Also
virtual SECURITY_STATUS SendEncryptedMessage(_In_reads_bytes_(lSize) const BYTE* pbyData, _In_ ULONG lSize) ;
Remarks
This method is called to write one SSL message to the other side of the SSL connection. Internally this function will call the SendData method with the actual encrypted data of the SSL message.
Return Value
A standard SECURITY_STATUS value.
See Also
void SetAuditFlags(_In_ DWORD dwAuditFlags);
Remarks
This method sets the bitmask which indicates what auditing events are logged by the code.
See Also
void SetCachedCredentials(_In_ DCCachedCredentials* pCachedCredentials);
Remarks
This method sets the cached credentials which this class will use.
See Also
CSSL::SetCertGetCertificateChainFlags
void SetCertGetCertificateChainFlags(_In_ DWORD dwFlags);
Remarks
This method sets the DWORD value passed to the VerifyServerCertificate method as the dwCertGetCertificateChainFlags parameter
See Also
GetCertGetCertificateChainFlags
CSSL::SetCertVerifyCertificateChainPolicyFlags
void SetCertVerifyCertificateChainPolicyFlags(_In_ DWORD dwFlags);
Remarks
This method sets the DWORD value passed to the VerifyServerCertificate method as the dwCertVerifyCertificateChainPolicyFlags parameter
See Also
GetCertVerifyCertificateChainPolicyFlags
CSSL::SetCheckServerCertificateRevocation
void SetCheckServerCertificateRevocation(_In_ BOOL bCheckServerCertificateRevocation);
Remarks
This method sets the boolean value used to decide if a server certificate is checked for revocation when the VerifyServerCertificate method is called.
See Also
GetCheckServerCertificateRevocation
CSSL::SetVerifyClientCertificate
void SetVerifyClientCertificate(_In_ BOOL bVerifyClientCertificate);
Remarks
This method sets whether a client certificate is verified by calling the method VerifyClientCertificate as the server SSL handshake is being performed.
See Also
CSSL::SetVerifyServerCertificate
void SetVerifyServerCertificate(_In_ BOOL bVerifyServerCertificate);
Remarks
This method sets whether a server certificate is verified by calling the method VerifyServerCertificate as the client SSL handshake is being performed.
See Also
virtual SECURITY_STATUS SSLAccept(_In_ BOOL bClientAuth);
Remarks
This is the main method which an SSL server calls to perform the initial SSL handshake. Internally this method will call the ReceiveData method if it needs to read more SSL handshake data. This need to read additional data is handled internally by this method by checking the return value from the CContext::Accept method for SEC_E_INCOMPLETE_MESSAGE. Internally this method will also call the SendData method when it needs to send a SSL handshake message data to the other side. The bClientAuth value indicates if the ASC_REQ_MUTUAL_AUTH is passed to the CContext::Accept method. This method will also handle the case where more data is read from the other side of the SSL connection for the last received SSL handshake message. This is application level data which will be made available to subsequent calls to GetEncryptedMessage.
Return Value
A standard SECURITY_STATUS value.
See Also
virtual SECURITY_STATUS SSLConnect(_In_ LPCTSTR pszServerName);
Remarks
This is the main method which an SSL client calls to perform the initial SSL handshake. Internally this method will call the ReceiveData method if it needs to read more SSL handshake data. This need to read additional data is handled internally by this method by checking the return value from the CContext::Initialize method for SEC_E_INCOMPLETE_MESSAGE. Internally this method will also call the SendData method when it needs to send a SSL handshake message data to the other side. The pszServerName value should be the domain name of the server being connected to. This will be used for SSL host name validation either automatically via Schannel or manually via the VerifyServerCertificate method. This method will also handle the case where more data is read from the other side of the SSL connection for the last received SSL handshake message. This is application level data which will be made available to subsequent calls to GetEncryptedMessage.
Return Value
A standard SECURITY_STATUS value.
See Also
CSSL::SSLHandleRenegotiationClient
virtual SECURITY_STATUS SSLHandleRenegotiationClient(_In_ LPCTSTR pszServerName);
Remarks
This is the method which SSL clients should call to handle a renegotiation when GetEncryptedMessage returns the standard SEC_I_RENEGOTIATE error code. If your client does not want to handle the renegotiation then you can treat the SEC_I_RENEGOTIATE error like any other error code returned. Internally this method runs much the same code which SSLConnect uses. Internally this method will call the ReceiveData method if it needs to read more SSL handshake data. This need to read additional data is handled internally by this method by checking the return value from the CContext::Initialize method for SEC_E_INCOMPLETE_MESSAGE. Internally this method will also call the SendData method when it needs to a send SSL handshake message data to the other side. The pszServerName value should be the domain name of the server being connected to. This will be used for SSL host name validation either automatically via Schannel or manually via the VerifyServerCertificate method. This method will also handle the case where more data is read from the other side of the SSL connection for the last received SSL handshake message. This is application level data which will be made available to subsequent calls to GetEncryptedMessage.
Return Value
A standard SECURITY_STATUS value.
See Also
SSLRequestRenegotiationClient, SSLHandleRenegotiationServer, SSLRequestRenegotiationServer
CSSL::SSLHandleRenegotiationServer
virtual SECURITY_STATUS SSLHandleRenegotiationServer(_In_ BOOL bClientAuth);
Remarks
This is the method which SSL servers should call to handle a renegotiation when GetEncryptedMessage returns the standard SEC_I_RENEGOTIATE error code. If your server does not want to handle the renegotiation then you can treat the SEC_I_RENEGOTIATE error like any other error code returned. Internally this method runs much the same code which SSLAccept uses. Internally this method will call the ReceiveData method if it needs to read more SSL handshake data. This need to read additional data is handled internally by this method by checking the return value from the CContext::Accept method for SEC_E_INCOMPLETE_MESSAGE. Internally this method will also call the SendData method when it needs to send a SSL handshake message data to the other side. The bClientAuth value indicates if the ASC_REQ_MUTUAL_AUTH is passed to the CContext::Accept method. This method will also handle the case where more data is read from the other side of the SSL connection for the last received SSL handshake message. This is application level data which will be made available to subsequent calls to GetEncryptedMessage.
Return Value
A standard SECURITY_STATUS value.
See Also
SSLRequestRenegotiationServer, SSLHandleRenegotiationClient, SSLRequestRenegotiationClient
CSSL::SSLRequestRenegotiationClient
virtual SECURITY_STATUS SSLRequestRenegotiationClient(_In_ LPCTSTR pszServerName);
Remarks
This is the method which an SSL clients should call to request a renegotiation. The other end of the connection will then receive a SEC_I_RENEGOTIATE error when it next calls GetEncryptedMessage. After sending the renegotiation request, this method will then execute much the same code which SSLConnect uses. Internally this method will call the ReceiveData method if it needs to read more SSL handshake data. This need to read additional data is handled internally by this method by checking the return value from the CContext::Initialize method which this method for SEC_E_INCOMPLETE_MESSAGE. Internally this method will also call the SendData method when it needs to send a SSL handshake message data to the other side. The pszServerName value should be the domain name of the server being connected to. This will be used for SSL host name validation either automatically via Schannel or manually via the VerifyServerCertificate method. This method will also handle the case where more data is read from the other side of the SSL connection for the last received SSL handshake message. This is application level data which will be made available to subsequent calls to GetEncryptedMessage.
Return Value
A standard SECURITY_STATUS value.
See Also
SSLHandleRenegotiationClient, SSLHandleRenegotiationServer, SSLRequestRenegotiationServer
CSSL::SSLRequestRenegotiationServer
virtual SECURITY_STATUS SSLRequestRenegotiationServer(_In_ BOOL bClientAuth);
Remarks
This is the method which an SSL servers should call to request a renegotiation. The other end of the connection will then receive a SEC_I_RENEGOTIATE error when it next calls GetEncryptedMessage. After sending the renegotiation request, this method will then execute much the same code which SSLAccept uses. Internally this method will call the ReceiveData method if it needs to read more SSL handshake data. This need to read additional data is handled internally by this method by checking the return value from the CContext::Accept method for SEC_E_INCOMPLETE_MESSAGE. Internally this method will also call the SendData method when it needs to send a SSL handshake message data to the other side. The bClientAuth value indicates if the ASC_REQ_MUTUAL_AUTH is passed to the CContext::Accept method. This method will also handle the case where more data is read from the other side of the SSL connection for the last received SSL handshake message. This is application level data which will be made available to subsequent calls to GetEncryptedMessage.
Return Value
A standard SECURITY_STATUS value.
See Also
SSLHandleRenegotiationServer, SSLHandleRenegotiationClient, SSLRequestRenegotiationClient
virtual SECURITY_STATUS VerifyClientCertificate(_In_ CryptoWrappers::CCertificate& clientCertificate);
Remarks
This method is called during processing a SSL Server handshake via SSLAccept or SSLHandleRenegotiationServer if the SetVerifyClientCertificate method was called with a TRUE parameter. The default implementation of this method in this method does not do anything. Derived classes are free to customize this behaviour. The clientCertificate parameter is a C++ class encapsulation of the client certificate which was provided.
Return Value
The implementation of this method should return a standard HRESULT to indicate success or failure.
See Also
virtual SECURITY_STATUS VerifyServerCertificate(_In_ CryptoWrappers::CCertificate& serverCertificate, _In_opt_ LPCWSTR pszServerName, _In_ DWORD dwCertGetCertificateChainFlags, _In_ DWORD dwCertVerifyCertificateChainPolicyFlags);
Remarks
This method is called during processing a SSL client handshake via the SSLConnect or SSLHandleRenegotiationClient methods if the SetVerifyServerCertificate method was called with a TRUE parameter. The default implementation of this method does a comprehensive check of the server certificate. Derived classes are free to do their own custom validation. Note that if you do want to do custom validation then you should probably turn of auto validation of the server certificate by Schannel by using the SCH_CRED_MANUAL_CRED_VALIDATION flag in the call to the CreateClientCredentials method and then to enable VerifyServerCertificate to be called at runtime, you should use SetVerifyServerCertificate(TRUE). For an example of this validation please review the SSLWrappersDemo.cpp module included in the download. Derived classes are free to customize this behaviour. The serverCertificate parameter is a C++ class encapsulation of the server certificate which was provided. The pszServerName parameter is the value which was passed to SSLConnect or SSLHandleRenegotiationClient. The dwCertGetCertificateChainFlags parameter is set via SetCertGetCertificateChainFlags method and the default value is CERT_CHAIN_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT. The dwCertVerifyCertificateChainPolicyFlags parameter is set via SetCertVerifyCertificateChainPolicyFlags method and the default value is 0.
Return Value
A standard SECURITY_STATUS value. Derived class implementations of this method should return a standard HRESULT to indicate success or failure.
See Also
CSocket is derived from CSSL and provides a concrete SSL implementation over Windows sockets.
Functions this class provides include:
CSocket();
Remarks
This is the constructor which initializes all the internal variables to a safe state.
void Attach(_In_ SOCKET hSocket)
Remarks
This method allows you to associate a Windows socket handle of "hSocket" with the current CSocket instance.
See Also
SOCKET Detach()
Remarks
This method breaks the connection which a CSocket instance has with a Windows socket handle. The return value from this method is the socket handle which has just been detached.
See Also
DWORD GetReadTimeout() const;
Remarks
This method returns the timeout which the ReceiveData method will wait for data from the socket before it will fail with an error code of MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_TIMEOUT).
Return Value
A DWORD value which specifies the current timeout in operation in milliseconds.
See Also
DWORD GetWriteTimeout() const;
Remarks
This method returns the timeout which the SendData method will wait for the socket to become writable before it will fail with an error code of MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_TIMEOUT).
Return Value
A DWORD value which specifies the current timeout in operation in milliseconds.
See Also
virtual SECURITY_STATUS ReceiveData(_Out_writes_bytes_to_(lSize, lReceived) BYTE* pbyData, _In_ ULONG lSize, _Out_ ULONG& lReceived) ;
Remarks
This method is a concrete implementation of CSSL::ReceiveData specifically to receive SSL data over a Windows socket. Internally the method will handle checking the socket for readability using the timeout specified by SetReadTimeout and fail the method if the socket is not readable with a standard error value of MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_TIMEOUT). Also any socket receive error will also be reported by the return value from this method. This method will be called during the SSL client and server handshake processes and during calls to CSSL::GetEncryptedMessage when more data is required to be read to produce one full SSL message.
Return Value
Returns SEC_E_OK if data was received correctly otherwise a standard HRESULT is returned to indicate failure.
virtual SECURITY_STATUS SendData(_In_reads_bytes_(lSize) const BYTE* pbyData, _In_ ULONG lSize) ;
Remarks
This method is a concrete implementation of CSSL::SendData specifically to send SSL data over a Windows socket. Internally the method will handle checking the socket for writability using the timeout specified by SetWriteTimeout. This check is necessary if the socket is in non-blocking mode. If the socket is not writable then the method will fail with a standard error value of MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_TIMEOUT). Also any socket send error will also be reported by the return value from this method. This method will be called during the SSL client and server handshake processes and during calls to CSSL::SendEncryptedMessage.
Return Value
Returns SEC_E_OK if data was sent correctly otherwise a standard HRESULT is returned to indicate failure.
void SetReadTimeout(_In_ DWORD dwReadTimeout);
Remarks
This method sets the timeout which the ReceiveData method will wait for data from the socket before it will fail. The dwReadTimeout parameter is specified in milliseconds.
See Also
void SetReadTimeout(_In_ DWORD dwWriteTimeout);
Remarks
This method sets the timeout which the SendData method will wait for the socket to become writable before it will fail. The dwWriteTimeout parameter is specified in milliseconds.
See Also
PJ Naughter
Email<EMAIL_ADDRESS>Web: http://www.naughter.com
23 October
2016


>
Sem I
Assignments For Computer Organization and Design
Study and verfiy the truth table of various logic gates (NOT,AND,OR,NAND,NOR,EX-OR,EX-NOR)
Simply given boolean expression and realize it.
Design and verify half and full adder.
Design and verify half and full substractor.
Design a 4-bit magnitude comarator using combinational circuits.
Design and verify the operation of flip-flops using logic gates.
Design and verify the operation of flip-flops using logic gates.
Verify the operation of counter.
Verify the operation of 4-bit shift register.


Iceland is a beautiful but expensive tourist destination. To save some bucks we're gonna grocery shop at Iceland's version of "nofrills": Bonus!
Twelve twenty-somethings will brave the cold and explore the land of Ice. Hoping to see the Northern Lights, they will trek the Southern Coast from end to end.
These are the excursions, tours, and places we'll see while in Reykjavik and Iceland's South Coast.


Stops
Stations
Zones
Transfers
#{stationHome.managed ? 'Edit' : 'Add'} Station
Station name
Station code
Comments
Station URL
Description
Zone
Location
Latitude
Longitude
Direction
*
required fields
Stops for this station
Stop Code
Name
Comments
Zone
Located
Used
in
schedules?
Transfer
Rules
Edit


Enabling TLSv1.2 on CentOS 5
18 June 2018
We have a legacy IVR (Interactive Voice Response) software running an Asterisk PBX Server. It executes AGI (Asterisk Gateway Interface) compliant protocol to launch external programs written in Python to control telephony channel, play audio, read DTMF (Dual Tone Multi Frequency) digits, etc. We ran into an issue when the payment gateway stopped supporting lower versions of TLS (Transport Layer Security). It requires TLSv1.2 as minimum version.
Issue
$ curl -Ivvv https://secure.payment.com
* About to connect() to secure.payment.com port 443
* Trying 185.n.n.n... connected
* Connected to secure.payment.com (185.n.n.n) port 443
* successfully set certificate verify locations:
* CAfile: /etc/pki/tls/certs/ca-bundle.crt
CApath: none
* SSLv2, Client hello (1):
Unknown SSL protocol error in connection to secure.payment.com:443
* Closing connection #0
curl: (35) Unknown SSL protocol error in connection to secure.payment.com:443
Workaround
You need to build OpenSSL and cURL using your current CentOS.
$ wget https://www.openssl.org/source/openssl-1.0.2a.tar.gz --no-check-certificate
Resolving www.openssl.org... <IP_ADDRESS>, 2a02:26f0:f6:199::c1e, 2a02:26f0:f6:1be::c1e
Connecting to www.openssl.org|<IP_ADDRESS>|:443... connected.
WARNING: cannot verify www.openssl.org's certificate, issued by `/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3':
Unable to locally verify the issuer's authority.
HTTP request sent, awaiting response... 200 OK
Length: 5262089 (5.0M) [application/x-gzip]
Saving to: `openssl-1.0.2a.tar.gz'
100%[============================================================>] 5,262,089 3.14M/s in 1.6s
$ wget http://curl.haxx.se/download/curl-7.42.1.tar.gz
Resolving curl.haxx.se (curl.haxx.se)... <IP_ADDRESS>, <IP_ADDRESS>, <IP_ADDRESS>, ...
Connecting to curl.haxx.se (curl.haxx.se)|<IP_ADDRESS>|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://curl.haxx.se/download/curl-7.42.1.tar.gz [following]
Connecting to curl.haxx.se (curl.haxx.se)|<IP_ADDRESS>|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 4291533 (4.1M) [application/x-gzip]
Saving to: ‘curl-7.42.1.tar.gz’
100%[===========================================================>] 4.09M 4.33MB/s in 0.9s
Build OpenSSL
$ ./config -fpic shared
Operating system: x86_64-whatever-linux2
Configuring for linux-x86_64
Configuring for linux-x86_64
no-ec_nistp_64_gcc_128 [default] OPENSSL_NO_EC_NISTP_64_GCC_128 (skip dir)
no-gmp [default] OPENSSL_NO_GMP (skip dir)
no-jpake [experimental] OPENSSL_NO_JPAKE (skip dir)
no-krb5 [krb5-flavor not specified] OPENSSL_NO_KRB5
no-libunbound [experimental] OPENSSL_NO_LIBUNBOUND (skip dir)
no-md2 [default] OPENSSL_NO_MD2 (skip dir)
no-rc5 [default] OPENSSL_NO_RC5 (skip dir)
no-rfc3779 [default] OPENSSL_NO_RFC3779 (skip dir)
no-sctp [default] OPENSSL_NO_SCTP (skip dir)
no-ssl-trace [default] OPENSSL_NO_SSL_TRACE (skip dir)
no-store [experimental] OPENSSL_NO_STORE (skip dir)
no-unit-test [default] OPENSSL_NO_UNIT_TEST (skip dir)
no-zlib [default]
no-zlib-dynamic [default]
...
Configured for linux-x86_64.
$ sudo make && make build
...
cp libcrypto.pc /usr/local/ssl/lib/pkgconfig
chmod 644 /usr/local/ssl/lib/pkgconfig/libcrypto.pc
cp libssl.pc /usr/local/ssl/lib/pkgconfig
chmod 644 /usr/local/ssl/lib/pkgconfig/libssl.pc
cp openssl.pc /usr/local/ssl/lib/pkgconfig
chmod 644 /usr/local/ssl/lib/pkgconfig/openssl.pc
$ sudo /sbin/ldconfig
Build cURL
$ sudo ./configure --with-ssl=/usr/local/ssl
...
configure: Configured to build curl/libcurl:
curl version: 7.42.1
Host setup: x86_64-unknown-linux-gnu
Install prefix: /usr/local
Compiler: gcc
SSL support: enabled (OpenSSL)
SSH support: no (--with-libssh2)
zlib support: enabled
GSS-API support: no (--with-gssapi)
TLS-SRP support: enabled
resolver: default (--enable-ares / --enable-threaded-resolver)
IPv6 support: no (--enable-ipv6)
Unix sockets support: enabled
IDN support: no (--with-{libidn,winidn})
Build libcurl: Shared=yes, Static=yes
Built-in manual: enabled
--libcurl option: enabled (--disable-libcurl-option)
Verbose errors: enabled (--disable-verbose)
SSPI support: no (--enable-sspi)
ca cert bundle: /etc/pki/tls/certs/ca-bundle.crt
ca cert path: no
LDAP support: no (--enable-ldap / --with-ldap-lib / --with-lber-lib)
LDAPS support: no (--enable-ldaps)
RTSP support: enabled
RTMP support: no (--with-librtmp)
metalink support: no (--with-libmetalink)
HTTP2 support: disabled (--with-nghttp2)
Protocols: DICT FILE FTP FTPS GOPHER HTTP HTTPS IMAP IMAPS POP3 POP3S RTSP SMB SMBS SMTP SMTPS TELNET TFTP
$ sudo make && make install
Test the workaround
curl -Ivvv https://secure.payment.com
* Trying 185.n.n.n...
* Connected to secure.payment.com (185.n.n.n) port 443 (#0)
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
* CAfile: /etc/pki/tls/certs/ca-bundle.crt
CApath: none
* TLSv1.2, TLS Unknown, Unknown (22):
* TLSv1.2, TLS handshake, Client hello (1):
* SSLv2, Unknown (22):
* TLSv1.2, TLS handshake, Server hello (2):
* SSLv2, Unknown (22):
* TLSv1.2, TLS handshake, CERT (11):
* SSLv2, Unknown (22):
* TLSv1.2, TLS handshake, Server key exchange (12):
* SSLv2, Unknown (22):
* TLSv1.2, TLS handshake, Server finished (14):
* SSLv2, Unknown (22):
* TLSv1.2, TLS handshake, Client key exchange (16):
* SSLv2, Unknown (20):
* TLSv1.2, TLS change cipher, Client hello (1):
* SSLv2, Unknown (22):
* TLSv1.2, TLS handshake, Finished (20):
* SSLv2, Unknown (20):
* TLSv1.2, TLS change cipher, Client hello (1):
* SSLv2, Unknown (22):
* TLSv1.2, TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256
* ALPN, server accepted to use http/1.1
* Server certificate:
* subject: jurisdictionC=GB; businessCategory=Private Organization; serialNumber=03539217; C=GB; ST=London; L=London; O=Pay360 Limited; CN=secure.payment.com
* start date: 2017-03-16 00:00:00 GMT
* expire date: 2019-03-16 23:59:59 GMT
* subjectAltName: secure.payment.com matched
* issuer: C=US; O=Symantec Corporation; OU=Symantec Trust Network; CN=Symantec Class 3 EV SSL CA - G3
* SSL certificate verify ok.
Next challenge is updating Python. Having curl
working can be a good fallback if Python 2.7.9 upgrade fails.
Credit goes to this blog


A simple survey framework that can display questions & respective options received from an API call. The collected answers are then submitted to Google Sheets using Google Sheets API.
Technologies Used: HTML & CSS (obviously), ReactJS, MobX, REST API, Google Sheets API
“Well implemented and visually appealing. The timeframe in which you developed this is also commendable. Overall impressed by your work. All the best!”
This is a continuation to the above Survey Framework project. This page can show you the results received from Google Sheets for each given question.
Technologies Used: HTML & CSS (obviously), ReactJS, MobX, REST API, Google Sheets API, Victory Chart
“Well implemented and visually appealing. The timeframe in which you developed this is also commendable. Overall impressed by your work. All the best!”
Youtube Player built with React & MobX. Enter a Youtube link to get started on this page. The side playlist order can be changed or removed. There's also a validation in place to allow only Youtube urls to be entered in the searchbar.
Technologies Used: HTML & CSS (obviously), ReactJS, MobX, REST API, Youtube API, Youtube Iframe
Web App built using ReactJS that can select and book movie tickets.
Technologies Used: HTML & CSS (obviously), ReactJS, React Router
Multipage Dashboard Template built using Bootstrap 4. This was developed as a practice project.
Technologies Used: HTML & CSS (obviously), Bootstrap 4
Single Page Landing Page for a Book or any similar product. This was developed as a practice project.
Technologies Used: HTML & CSS (obviously), Bootstrap 4


This is the API
https://data.dublinked.ie/cgi-bin/rtpi//routeinformation
GET
The requested operator id
The requested route id
If not provided JSON format will be used by default


| < Day Day Up > |
5.7 A chroot EnvironmentSome people like to run Squid in a chroot environment. This is a Unix feature that gives a process a new root filesystem directory. It provides an extra level of security in the event that Squid is compromised. If an attacker somehow gains access to the operating system through Squid, she can only access files under the chroot filesystem. The other system files, outside of the chroot tree, remain inaccessible. The easiest way to run Squid in a chroot environment is by specifying the new root directory in the squid.conf file with this directive: chroot /new/root/directory
The chroot environment isn't for first-time Unix users. It is a little tricky because you must replicate a number of files underneath the new root directory. For example, if the default configuration file is normally /usr/local/squid/etc/squid.conf, and you use the chroot directive, the file must be located at /new/root/directory/usr/local/squid/etc/squid.conf. You must copy all of the files under $prefix/etc, $prefix/share, and $prefix/libexec to the chroot directory. Make sure that $prefix/var and the cache directories exist and are writable under the chroot directory as well. Chances are that your operating system requires a number of files in the chroot directory, such as /etc/resolv.conf and /dev/null. If you use an external helper program, such as a redirector (see Chapter 11) or an authenticator (see Chapter 12), you'll also need some shared libraries from /usr/lib. You can use the ldd utility to find out which shared libraries are required for a given program: % ldd /usr/local/squid/libexec/ncsa_auth /usr/local/squid/libexec/ncsa_auth: libcrypt.so.2 => /usr/lib/libcrypt.so.2 (0x28067000) libm.so.2 => /usr/lib/libm.so.2 (0x28080000) libc.so.4 => /usr/lib/libc.so.4 (0x28098000) You can also use the chroot command to test helpers: # chroot /new/root/directory /usr/local/squid/libexec/ncsa_auth /usr/libexec/ld-elf.so.1: Shared object "libcrypt.so.2" not found For more information on chroot, see the chroot( ) manpage on your system. |
| < Day Day Up > |


Primary objective:
- Assess efficacy of ruxolitinib in combination with corticosteroids in subjects with Grade II–IV steroid-refractory acute GVHD
secondary objectives:
- Assess additional response and longer-term efficacy outcomes in the study population
- Assess the incidence and severity of adverse events and serious adverse events
- Evaluate the pharmacokinetics of ruxolitinib when administered in combination with corticosteroids
Exploratory objective:
- Evaluate pre- and post-treatment changes in biomarkers, including (but not limited to) tumor necrosis factor receptor 1, ST2, and regenerating islet-derived 3-alpha
Study Design
Key inclusion criteria:
- Age ≥12 years
- Have undergone first allo-HSCT from any donor source and donor type
- Grade II–IV steroid-refractory acute GVHD
- Evidence of myeloid engraftment
Key exclusion criteria:
- Has received >1 allo-HSCT
- Has received >1 systemic treatment in addition to corticosteroids for acute GVHD
- Previously received Janus kinase inhibitor therapy after allo-HSCT for any indication
- Presence of active uncontrolled infection
- Severe organ dysfunction unrelated to underlying GVHD


Classes for the JMX server side.
The server side must provide information about the remote components. The client sees a component as something that implements a number of interfaces. The server side implementation behaviour of an interface is handled by a {@link ServerInterfaceHandler}. A {@link ServerInterfaceHandler} is provided by a {@link ServerInterfaceHandlerFactory}. A {@link ServerInterfaceManager} collects together a number of {@link ServerInterfaceHandlerFactory} objects for a given target. A {@link ServerInterfaceManagerFactory} creates a {@link ServerInterfaceMananger} for a given server side component.


Toggle navigation
My page
Setting
(current)
Help
Sign Out
Create Group
Class: CSE120
IN PERSON
ONLINE
Name:
Forum:
Facebook
Google Drive
Piazza
Others
Description:
Create Group!


*** User 2017-05-05 21:52:51.376 ***
21:52:51.376 [info] Disabling blocking sync...
*** User 2017-05-05 21:52:51.385 ***
21:52:51.385 [info] Configured peer_service_manager partisan_default_peer_service_manager on node 'node-1@MacBook-Pro-de-Anne-France'
*** User 2017-05-05 21:52:53.213 ***
21:52:53.212 [info] Enabling membership...
*** User 2017-05-05 21:52:53.214 ***
21:52:53.214 [info] Disabling blocking sync...
*** User 2017-05-05 21:52:53.220 ***
21:52:53.220 [info] Configured peer_service_manager partisan_default_peer_service_manager on node 'node-2@MacBook-Pro-de-Anne-France'
*** User 2017-05-05 21:52:54.783 ***
21:52:54.783 [info] Enabling membership...
*** User 2017-05-05 21:52:54.785 ***
21:52:54.784 [info] Disabling blocking sync...
*** User 2017-05-05 21:52:54.790 ***
21:52:54.790 [info] Configured peer_service_manager partisan_default_peer_service_manager on node 'node-3@MacBook-Pro-de-Anne-France'
*** User 2017-05-05 21:52:55.104 ***
Joining node: 'node-3@MacBook-Pro-de-Anne-France' to 'runner@MacBook-Pro-de-Anne-France' at port 52096
*** User 2017-05-05 21:52:55.104 ***
Joining issued: 'node-3@MacBook-Pro-de-Anne-France' to 'runner@MacBook-Pro-de-Anne-France' at port 52096
*** User 2017-05-05 21:52:55.105 ***
Joining node: 'node-2@MacBook-Pro-de-Anne-France' to 'runner@MacBook-Pro-de-Anne-France' at port 52078
*** User 2017-05-05 21:52:55.105 ***
Joining issued: 'node-2@MacBook-Pro-de-Anne-France' to 'runner@MacBook-Pro-de-Anne-France' at port 52078
*** User 2017-05-05 21:52:55.106 ***
Joining node: 'node-1@MacBook-Pro-de-Anne-France' to 'runner@MacBook-Pro-de-Anne-France' at port 52066
*** User 2017-05-05 21:52:55.106 ***
Joining issued: 'node-1@MacBook-Pro-de-Anne-France' to 'runner@MacBook-Pro-de-Anne-France' at port 52066
*** User 2017-05-05 21:52:55.167 ***
Waiting for join to complete with manager: partisan_default_peer_service_manager
*** User 2017-05-05 21:52:55.170 ***
Finished.
*** CT 2017-05-05 21:52:55.170 *** COVER INFO
Adding nodes to cover test: ['runner@MacBook-Pro-de-Anne-France']
*** CT 2017-05-05 21:52:55.183 *** COVER INFO
Successfully added nodes to cover test: []
*** User 2017-05-05 21:52:55.183 ***
Manager: partisan_default_peer_service_manager
*** User 2017-05-05 21:52:55.183 ***
21:52:55.183 [info] Nodes: ['runner@MacBook-Pro-de-Anne-France','node-3@MacBook-Pro-de-Anne-France','node-2@MacBook-Pro-de-Anne-France','node-1@MacBook-Pro-de-Anne-France']
*** User 2017-05-05 21:52:55.183 ***
21:52:55.183 [info] Waiting for cluster to stabilize.
*** User 2017-05-05 21:53:05.186 ***
Case finished: membership_test
*** User 2017-05-05 21:53:12.233 ***
21:53:12.233 [info] Application lasp exited with reason: stopped
=== Ended at 2017-05-05 21:53:12
=== successfully completed test case
=== Returned value: ok
Test run history
| Top level test index


Home
About
Services
Web Development
Website Design
Mobile Development
SEO
Blog
HTML
22 Posts
CSS
16 Posts
JavaScript
20 Posts
Python
10 Posts
PHP
2 Posts
Design
21 Posts
Contact
Your Website Here


CONVENTIONAL MAINTENANCE
Dynamic Perspective Maintenance (D.P.M.) is a philosophy that guides transformation from conventional maintenance and embrace digitalization. To understand D.P.M., series of articles have been published, catering Basic, Intermediate, and Advanced levels of knowledge sharing. Concept is briefly described. Emphasis is actual implementation & field / plant usage with best results. Conventional maintenance article describes the various practices applied at operating plants & organizations.
This Manual is intended as a reference handbook for the Dynamic Prescriptive Maintenance (D.P.M.) philosophy and its underlying methodologies. The D.P.M. system is a tool for prescribing executable-actions by classifying risk, and optimizing life-cycle-cost; while the objective being Just-in-Time maintenance.


[1]
but to buy a stand really does suck.
[2]
Tremendously vivid brightness design stands out from others inflexible neck/adjuster blacks and dark tones turn panel into a mirror.


To get around GitHub rate limiting, we cache response data by default. Clear cached data and/or disable below.
Note: The `title` column has `noWrap: false` set.