|
|
@ -25,6 +25,7 @@ static Persistent<String> subject_symbol; |
|
|
|
static Persistent<String> issuer_symbol; |
|
|
|
static Persistent<String> valid_from_symbol; |
|
|
|
static Persistent<String> valid_to_symbol; |
|
|
|
static Persistent<String> fingerprint_symbol; |
|
|
|
static Persistent<String> name_symbol; |
|
|
|
static Persistent<String> version_symbol; |
|
|
|
|
|
|
@ -548,6 +549,28 @@ Handle<Value> SecureStream::GetPeerCertificate(const Arguments& args) { |
|
|
|
BIO_free(bio); |
|
|
|
info->Set(valid_to_symbol, String::New(buf)); |
|
|
|
|
|
|
|
unsigned int md_size, i; |
|
|
|
unsigned char md[EVP_MAX_MD_SIZE]; |
|
|
|
if (X509_digest(peer_cert, EVP_sha1(), md, &md_size)) { |
|
|
|
const char hex[] = "0123456789ABCDEF"; |
|
|
|
char fingerprint[EVP_MAX_MD_SIZE * 3]; |
|
|
|
|
|
|
|
for (i=0; i<md_size; i++) { |
|
|
|
fingerprint[3*i] = hex[(md[i] & 0xf0) >> 4]; |
|
|
|
fingerprint[(3*i)+1] = hex[(md[i] & 0x0f)]; |
|
|
|
fingerprint[(3*i)+2] = ':'; |
|
|
|
} |
|
|
|
|
|
|
|
if (md_size > 0) { |
|
|
|
fingerprint[(3*(md_size-1))+2] = '\0'; |
|
|
|
} |
|
|
|
else { |
|
|
|
fingerprint[0] = '\0'; |
|
|
|
} |
|
|
|
|
|
|
|
info->Set(fingerprint_symbol, String::New(fingerprint)); |
|
|
|
} |
|
|
|
|
|
|
|
X509_free(peer_cert); |
|
|
|
} |
|
|
|
return scope.Close(info); |
|
|
@ -2322,6 +2345,7 @@ void InitCrypto(Handle<Object> target) { |
|
|
|
issuer_symbol = NODE_PSYMBOL("issuer"); |
|
|
|
valid_from_symbol = NODE_PSYMBOL("valid_from"); |
|
|
|
valid_to_symbol = NODE_PSYMBOL("valid_to"); |
|
|
|
fingerprint_symbol = NODE_PSYMBOL("fingerprint"); |
|
|
|
name_symbol = NODE_PSYMBOL("name"); |
|
|
|
version_symbol = NODE_PSYMBOL("version"); |
|
|
|
} |
|
|
|