OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/base/x509_certificate.h" | 5 #include "net/base/x509_certificate.h" |
6 | 6 |
7 #include <openssl/asn1.h> | 7 #include <openssl/asn1.h> |
8 #include <openssl/crypto.h> | 8 #include <openssl/crypto.h> |
9 #include <openssl/obj_mac.h> | 9 #include <openssl/obj_mac.h> |
10 #include <openssl/pem.h> | 10 #include <openssl/pem.h> |
(...skipping 644 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
655 Pickle* pickle) { | 655 Pickle* pickle) { |
656 DERCache der_cache; | 656 DERCache der_cache; |
657 if (!GetDERAndCacheIfNeeded(cert_handle, &der_cache)) | 657 if (!GetDERAndCacheIfNeeded(cert_handle, &der_cache)) |
658 return false; | 658 return false; |
659 | 659 |
660 return pickle->WriteData( | 660 return pickle->WriteData( |
661 reinterpret_cast<const char*>(der_cache.data), | 661 reinterpret_cast<const char*>(der_cache.data), |
662 der_cache.data_length); | 662 der_cache.data_length); |
663 } | 663 } |
664 | 664 |
| 665 // static |
| 666 void X509Certificate::GetPublicKeyInfo(OSCertHandle cert_handle, |
| 667 size_t* size_bits, |
| 668 PublicKeyType* type) { |
| 669 EVP_PKEY* key = X509_get_pubkey(cert_handle); |
| 670 CHECK(key); |
| 671 |
| 672 switch (key->type) { |
| 673 case EVP_PKEY_RSA: |
| 674 *type = kPublicKeyTypeRSA; |
| 675 *size_bits = EVP_PKEY_size(key) * 8; |
| 676 break; |
| 677 case EVP_PKEY_DSA: |
| 678 *type = kPublicKeyTypeDSA; |
| 679 *size_bits = EVP_PKEY_size(key) * 8; |
| 680 break; |
| 681 case EVP_PKEY_EC: |
| 682 *type = kPublicKeyTypeECDSA; |
| 683 *size_bits = EVP_PKEY_size(key); |
| 684 break; |
| 685 case EVP_PKEY_DH: |
| 686 *type = kPublicKeyTypeDH; |
| 687 *size_bits = EVP_PKEY_size(key) * 8; |
| 688 break; |
| 689 default: |
| 690 *type = kPublicKeyTypeUnknown; |
| 691 *size_bits = 0; |
| 692 break; |
| 693 } |
| 694 } |
| 695 |
665 #if defined(OS_ANDROID) | 696 #if defined(OS_ANDROID) |
666 void X509Certificate::GetChainDEREncodedBytes( | 697 void X509Certificate::GetChainDEREncodedBytes( |
667 std::vector<std::string>* chain_bytes) const { | 698 std::vector<std::string>* chain_bytes) const { |
668 OSCertHandles cert_handles(intermediate_ca_certs_); | 699 OSCertHandles cert_handles(intermediate_ca_certs_); |
669 // Make sure the peer's own cert is the first in the chain, if it's not | 700 // Make sure the peer's own cert is the first in the chain, if it's not |
670 // already there. | 701 // already there. |
671 if (cert_handles.empty() || cert_handles[0] != cert_handle_) | 702 if (cert_handles.empty() || cert_handles[0] != cert_handle_) |
672 cert_handles.insert(cert_handles.begin(), cert_handle_); | 703 cert_handles.insert(cert_handles.begin(), cert_handle_); |
673 | 704 |
674 chain_bytes->reserve(cert_handles.size()); | 705 chain_bytes->reserve(cert_handles.size()); |
675 for (OSCertHandles::const_iterator it = cert_handles.begin(); | 706 for (OSCertHandles::const_iterator it = cert_handles.begin(); |
676 it != cert_handles.end(); ++it) { | 707 it != cert_handles.end(); ++it) { |
677 std::string cert_bytes; | 708 std::string cert_bytes; |
678 GetDEREncoded(*it, &cert_bytes); | 709 GetDEREncoded(*it, &cert_bytes); |
679 chain_bytes->push_back(cert_bytes); | 710 chain_bytes->push_back(cert_bytes); |
680 } | 711 } |
681 } | 712 } |
682 #endif | 713 #endif |
683 | 714 |
684 } // namespace net | 715 } // namespace net |
OLD | NEW |